Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ параллельная обработка элементов массива

Автор: Тёмный Эльф 26.03.2008 7:52

Привет! Вот столкнулась примерно с такой проблемой.
Предположим, у меня есть массив из n элементов. Надо обработать каждый элемент массива. Т.е. цикл
for (i=0; i<n; i++) И, например, к каждому элементу массива прибавить некое число k и запомнить в другой массив под сооттв. номером. т.е. summa[i]=massiv[i]+k;
А сделать это надо с использованием MPI функций. Т.е. элементы массива должны обрабатываться не по очереди, а параллельно друг другу. Значит, число процессов будет равно числу элементов в массиве. Собственно, вопрос по реализации. Уместно ли в данной задаче использование функции MPI_Bcast, или получается не то, что надо?

#include "mpi.h"
#include <stdio.h>
int main ()
{int i,n,k;
char massiv[10];
char summa[10];
n=10;
MPI_Status status;
MPI_Init();
MPI_Comm_rank(MPI_COMM_WORLD, &i); //номер процесса
MPI_Comm_size(MPI_COMM_WORLD, &n); //число процессов
for (i=0; i<n; i++)
{ MPI_Bcast(&i,1,MPI_INT,0,MPI_COMM_WORLD) //каждому процессу посылаем порядковый номер очередного элемента массива
//далее к элементу массива прибавляем число k
summa[i]=massiv[i]+k; //запоминаем в summa под своим номером
}
MPI_Finalize();
return 0; }

З.Ы. Каюсь, не было возможности прокомпилировать, может быть, вообще не работает.