Форум программистов, компьютерный форум CyberForum.ru

Параллельные вычисления MPI - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дано предложение. Создать файл и записать в него все символы данного предложения, отличные от цифр. Вывести содержимое файла на экран http://www.cyberforum.ru/cpp-beginners/thread565013.html
Ребята, помогите, пожалуйста!
C++ Непонятны некоторые операторы Читал, читай книгу по C++. Что понял что нет. Пожалуйста помогите с такими вопросами: - Для чего нужна операция "?:" ?, я этого не понял. - пожалуйста обьясните русским языком что такое перегрузка операции... Ничего не понял по этому поводу. -пожалуйста обьясните про работу операций New и Delete и чем они отличаются от обычного обьявиения переменной? Пишите не стесняйтесь, буду рад абсолютно... http://www.cyberforum.ru/cpp-beginners/thread565009.html
C++ Кто знаком с алгоритмом быстрого поиска
Поиск в массиве Расскажите и если можно код на языке с++ с комметариями Добавлено через 5 минут вот есть алгоритм, но не могу понять какие переменные за что отвечают http://algolist.manual.ru/search/esearch/qsearch.php
выполнение условия в программе C++
Недавно начал изучать программирование, потому не судите строго). Делал на M. Visual C++ 2010 Express. Решил попробовать создать прогу по основному профилю работы. Суть программы вычислить по формуле показатель Скорости клубочковой фильтрации в почках stdafx.h #pragma once #include "targetver.h" #include <iostream> #include <stdio.h> #include <tchar.h>
C++ Работа с set_terminate в vs2010 http://www.cyberforum.ru/cpp-beginners/thread564991.html
Нужно перехватить непредусмотренное исключение.Делаю так #include "stdafx.h" #include <iostream> #include <stdexcept> #include <eh.h> using namespace System; void new_terminate() {
C++ Во входном файле содержится информация об каждом из n работников некоторой фирмы. Во входном файле содержится информация об каждом из n работников некоторой фирмы. Пол указывается буквами М и Ж, возраст – целое от 16 до 35, отделов фирмы– 5. Ввести эту информацию и напечатать номер отдела, на котором наибольший процент мужчин. Заранее большое спасибо. подробнее

Показать сообщение отдельно
Rybaki
2 / 2 / 0
Регистрация: 23.02.2011
Сообщений: 37
03.05.2012, 23:16     Параллельные вычисления MPI
Всем привет, ребят объясните пожалуйста почему работает не корректно ?
задание такое :
нужно посчитать сумму элементов 2х массивов, число элементов произвольное, число процессов тоже.
вычисление суммы необходимо разбить на процессы, а потом что бы каждый процесс передал свою частную сумму на 0ой процесс который собственно и выведет результат на экран,
вот что сам написал. если задаю 2 процесса то считает если больше выводит не корректное значение.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <mpi.h>
#include <conio.h>
#include <time.h>
int main(int argc, char *argv[])
{
    int n=40,i,size,rank,interval;
    int *a;
    int *b;
    int *c;
    int *c1;
 
    MPI_Status status;
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&size);  //определяем кол-во процессов
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);  //определяем ранк текущего процесса 
    MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD); 
    a=new int[n];
    b=new int[n];
    c=new int[n];
    c1=new int[n];
    if(rank==0)
    {
        for(i=0;i<n;i++)
        { 
            b[i]= i;
            a[i]= i;
        }
    }
    MPI_Bcast(a,n,MPI_DOUBLE,0,MPI_COMM_WORLD);  //рассылка n-эл-ов массива а
    MPI_Bcast(b,n,MPI_DOUBLE,0,MPI_COMM_WORLD);  //рассылка n-эл-ов массива b
    MPI_Barrier(MPI_COMM_WORLD);
    interval = n/size;  
    for(int j=0;j<size;j++){
    for(i=rank*interval;i<(rank+1)*interval;i++)
    { 
        c[i]=a[i]+b[i];
    }}
    if(rank!=0)
    {
        for(int k=1;k<size;k++)
        {
            MPI_Send(c,interval,MPI_DOUBLE,0,0,MPI_COMM_WORLD);
        }
    }
    else if(rank==0){
        for(i=1;i<size;i++){
            MPI_Recv(c1,interval,MPI_DOUBLE,i,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
            for(int j=i*interval;j<(i+1)*interval;j++)
            {
                c[j]=c1[j];
            }
        }
        for(i=0;i<n;i++)
        {
            printf("array1 %d array2 %d   the result %d\n", a[i],b[i],c[i]);
        }
    }
    MPI_Finalize();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru