2013-05-12 17 views
7

Dodaję razem obciążenie elementów tablicy z każdego procesu:Czy MPI sendbuf i recvbuf to to samo?

double rho[1024]; 
//Some operation to calculate rho for each process; 
MPI_Allreduce(rho,rho,1024,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); 

Will mający rho zarówno jako sendbuf i recvbuf pracy?

Odpowiedz

12

Czy sprawdziłeś numer MPI_IN_PLACE? Według MPI_AllReduce man page i MPI doc można go użyć do określenia tego samego bufora dla sendbuf i recvbuf, o ile pracujesz w tej samej grupie.

Wezwanie będzie wyglądać następująco:

MPI_Allreduce(MPI_IN_PLACE,rho,1024,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); 
+0

+1 - W miejscu redukcje mogą być użyteczne, a powyżej jest poprawny sposób to zrobić. –

+0

jest to elegancki sposób, aby to zrobić .. jego odpowiedź wymaga zatwierdzenia jak najszybciej. –

Powiązane problemy