MPI_Reduce для массива в C - PullRequest
       0

MPI_Reduce для массива в C

3 голосов
/ 21 декабря 2011

Я недавно начал пытаться изучать MPI для кодирования на C. Я пытаюсь писать очень маленькие тестовые коды, чтобы быть уверенным, что я знаю, что я делаю, в процессе работы. К сожалению, у меня, похоже, есть проблема с одним из них, который умножает матрицу на вектор и выводит результирующий вектор. В частности, когда я звоню:

MPI_Reduce(c, myc, 3, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

где myc - это часть вектора, которая рассчитывается каждым процессором, мой окончательный результат - c [i] = 0 для всех i. Код, который вычисляет myc, правильный (проверяется с использованием одного процессора и выводит myc вместо c). Я предполагаю, что я делаю что-то очень глупое, но не могу понять, что.

1 Ответ

2 голосов
/ 22 декабря 2011

То есть вы хотите, чтобы ваш ответ был c, а не myc?

Синтаксис:

int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
           MPI_Op op, int root, MPI_Comm comm)

, поэтому вы отправляете c в myc с вашим примером.

Также обратите внимание, что recvbuf действителен только для корневого узла, который в вашем случае является узлом 0. Все остальные будут иметь мусор в recvbuf.

...