Prawdopodobnie chcesz sprawdzić MPI_COMM_SPLIT_TYPE. Pozwoli to, aby podzielić istniejącego komunikatora opartego na split_type
przekazać jako parametr:
int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key,
MPI_Info info, MPI_Comm *newcomm)
Teraz jedynym split_type jest MPI_COMM_TYPE_SHARED
, zdefiniowane w normie jako:
Ten typ dzieli komunikator na podkomitety, z których każdy może utworzyć współużytkowany obszar pamięci.
Zwykle jest to to samo, o co prosisz, ale musisz dwukrotnie sprawdzić, czy to prawda na twoim komputerze.
Inną rzeczą, którą musisz wiedzieć, jest to, że jest to nowa funkcja w MPI-3, więc może nie być dostępna we wszystkich implementacjach MPI. Wiem, że jest dostępny dla MPICH i jego pochodnych. AFAIK, nie jest dostępny w ostatnim wydaniu Open MPI. Dlatego upewnij się, że masz wersję MPI, która ją obsługuje.
Wesley, dziękuję. Szkoda, że to nie jest dostępne dla Open MPI. Chociaż, pozwól mi zrobić przykład, aby sprawdzić, czy rozumiem, jak działa ten podział typu_. Dodatek Mam 32 procesy na 4 8-rdzeniowych węzłach. Moją intencją jest utworzenie 4 grup po 8 rdzeni, opartych na procesach pamięci współużytkowanej, które znajdują się w tym samym węźle. Mogę użyć typu MPI_Comm_split_type. Używając tego nie mogłem na przykład utworzyć 8 grup po 4 (umieszczając 2 grupy w każdym węźle), czy mogę? –
Tak, możesz to zrobić. Jeśli chcesz utworzyć 8 grup po 4, gdzie każda grupa jest lokalna dla węzła, musisz użyć parametru kluczowego, aby połowa procesów przyczyniła się do jednego klucza, a druga połowa do innego klucza. To było zachowanie istniejącego połączenia MPI_COMM_SPLIT, więc powinno być mnóstwo tutoriali, które możesz zastosować. Musisz tylko dodać trochę do nowych dodatków typu. –
OpenMPI ustawia zmienne środowiskowe OMPI_COMM_WORLD_LOCAL_RANK i OMPI_COMM_WORLD_LOCAL_SIZE, za pomocą których można dowiedzieć się, ile procesów współdzieli węzeł ("rozmiar lokalny"). –