Знам, че подобни въпроси са били разглеждани и преди, вижте по-долу защо не се отнасят за моя случай. Имам част от кода, който изглежда по следния начин:
int current_rank;
MPI_Comm_rank(MPI_COMM_WORLD, ¤t_rank);
if (current_rank==ROOT_RANK){
...
#pragma omp for
for (long i = 0; i < num; i++) {
auto &choumbie = catalogue->get()[i];
/* array choumbie is modified */}
...}
и след това бих искал да синхронизирам масива "choumbie" през всички процеси. Опитах се да го внедря след това пример и документация. И така, веднага след if (current_rank==ROOT_RANK), направих:
int gsize;
int *rbuf; // address of receive buffer
auto &choumbie = catalogue->get();
MPI_Comm_size(comm, &gsize);
int send_count=num;
rbuf = (int*)malloc(gsize*send_count*sizeof(double));
MPI_Allgather(choumbie,send_count, MPI_DOUBLE, rbuf, send_count, MPI_DOUBLE, comm);
Мисля, че масивът "choumbie", който искам да синхронизирам, не влиза по този начин, но също така не намерих друг полезен пример. Изглежда, че първият аргумент трябва да бъде адресът на паметта на масива, който трябва да бъде изпратен, но това не изглежда съвместимо с примера, който предоставих по-горе.
P.S.: номерът е един и същ за всеки ранг.
Този въпрос не беше полезно в моя случай, защото бих искал да използвам MPI_Allgather (също в C++, не Fortran). Освен това това не беше полезно в моя случай, защото бих искал да избегна използването на MPI_Barrier.
ROOT_RANK
да бъде разпространено до всички останали рангове, просто използвайтеMPI_Bcast
. СMPI_Allgather
вие събирате локални копия наchoumbie
и ги свързвате в един голям масив вrbuf
. Илиchoumbie
е блоково разпределен? - person Hristo Iliev   schedule 25.06.2020choumbie
. Така че, независимо от какъвто и да е начин, по който процесите са (или не) модифицирали масива, бих искал крайниятchoumbie
да бъде актуализиран чрез всички модификации, на които може да е претърпял от всички рангове. Но за всичко, което предлагате, можете ли да предоставите примери за код, защото проблемът е, че не разбирам синтаксиса в моя контекст на първо място. - person Suyama87   schedule 25.06.2020MPI_Allgather
. Или имате множество копия на един и същи масив и искате да обедините локалните модификации - изобщо не е толкова лесно, освен ако модификациите не са в съседни неприпокриващи се региони. Съдейки по приетия отговор, вашият случай е първият. - person Hristo Iliev   schedule 26.06.2020