Я экспериментировал с MPI и до сих пор у меня есть эта небольшая программа, которая вычисляет простую сумму:MPI один счетчик для всего процесса
#include <mpi.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int i=0, myid, nproc,N=5;
double result=0.0,res;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
MPI_Bcast(&N, 1, MPI_INT, 0, MPI_COMM_WORLD);
while (i<N) {
result += i;
i++;
printf("process %d i %d\n",myid,i);
MPI_Reduce(&result, &res, 1, MPI_DOUBLE,MPI_SUM, 0, MPI_COMM_WORLD);
}
if (myid == 0)
{
printf("result = %lf\n", res);
}
MPI_Finalize();
}
Основываясь на результатах печати, я могу видеть, что i
достигает предел (5) для каждого процесса. Как я могу настроить его, чтобы сохранить что-то вроде глобального счетчика, так что i
достигает предела только один раз для всех процессов?
Прежде чем погрузиться в отличный связанный вопрос/ответ, я настоятельно рекомендую вам ознакомиться с основными принципами MPI: независимыми процессами и явным сообщением через сообщения. Подумайте, можете ли вы проектировать свое приложение вокруг этих принципов или спросить, застряли ли вы. – Zulan
Я пытаюсь вычислить pi в качестве ведущего-раба. Результат, который я получаю, в 4 раза превышает ожидаемый результат, поскольку я использую 4 процесса, и я думаю, что проблема в том, что счетчик задач увеличивается каждым процессом. – mnmbs
На самом деле существует множество примеров того, как использовать MPI для вычисления pi. – Zulan