2016-05-18 3 views
0

Я экспериментировал с 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 достигает предела только один раз для всех процессов?

+1

Прежде чем погрузиться в отличный связанный вопрос/ответ, я настоятельно рекомендую вам ознакомиться с основными принципами MPI: независимыми процессами и явным сообщением через сообщения. Подумайте, можете ли вы проектировать свое приложение вокруг этих принципов или спросить, застряли ли вы. – Zulan

+0

Я пытаюсь вычислить pi в качестве ведущего-раба. Результат, который я получаю, в 4 раза превышает ожидаемый результат, поскольку я использую 4 процесса, и я думаю, что проблема в том, что счетчик задач увеличивается каждым процессом. – mnmbs

+0

На самом деле существует множество примеров того, как использовать MPI для вычисления pi. – Zulan

ответ

0

Автоматический глобальный счетчик с MPI отсутствует. Я думаю, вам придется вручную сообщать приращения счетчику.