Tworzenie komunikatorów

 

MPI_Comm_dup

Do stworzenia nowego komunikatora konieczne jest uprzednie istnienie jakiegoś innego komunikatora. Jak wiadomo, w każdym procesie dostępny jest predefiniowany komunikator MPI_COMM_WORLD. 

Nowy komunikator stworzyć można poprzez stworzenie kopii istniejącego komunikatora. Umożliwia to ta funkcja.

Nowo utworzony komunikator posiada tę samą grupę, zawiera te same informacje dodatkowe (np. o topologii procesów), lecz posiada nowy, odrębny od komunikatora źródłowego kontekst komunikacji. MPI_COMM_DUP stosuje się do intra- i inter-komunikatorów. 

MPI_Comm_dup (comm,*newcomm)
MPI_COMM_DUP (comm,newcomm,ierr)

MPI_Comm_create

Funkcja tworzy nowy komunikator newcomm zawierający grupę procesów zdefiniowaną w zmiennej group. Informacje dodatkowe przechowywane w komunikatorze źródłowym nie kopiują się do nowego komunikatora. Funkcja zwraca MPI_COMM_NULL procesom, które nie należą do grupy group. Procesy grupy group muszą należeć do grupy skojarzonej z komunikatorem źródłowym comm. Funkcja daje się stosować tylko do intra - komunikatorów. 

MPI_Comm_create (comm,group,*newcomm)
MPI_COMM_CREATE (comm,group,newcomm,ierr)

MPI_Comm_free

Funkcja zaznacza komunikator do usunięcia, a wskazujący na niego wskaźnik comm ustawia na MPI_COMM_NULL. Wszystkie nie zakończone operacje zostaną zakończone normalnie. Obiekt zostanie zwolniony, gdy nie będzie do niego żadnych odwołań. Funkcja stosuje się do intra- i inter-komunikatorów. 

MPI_Comm_free (*comm)
MPI_COMM_FREE (comm,ierr)

 

MPI_Comm_size

Funkcja daje wynik równy temu, który uzyskalibyśmy pobierając wskaźnik na grupę powiązaną z komunikatorem za pomocą funkcji MPI_COMM_GROUP, później pobrali wielkość tej grupy funkcją MPI_GROUP_SIZE, i na końcu zwolnili tymczasowy obiekt funkcją MPI_GROUP_FREE. 

MPI_Comm_size (comm,size)
MPI_COMM_SIZE (comm,size)

 

MPI_Comm_rank

Funkcja zwraca identyfikator wywołującego ją procesu w grupie powiązanej z komunikatorem comm. 

MPI_Comm_rank (comm, rank)
MPI_COMM_RANK (comm, rank)

 

MPI_Comm_compare

Do zgrubnego porównywania komunikatorów służy poniższa funkcja.

MPI_Comm_compare (comm1,comm2,*result)
MPI_COMM_COMPARE (comm1,comm2,result,ierr)

 


Przykład: Grupy i komunikatory