// man
MPI_Scatter Funkcja dzieli wektor danych wejściowych (w procesie oznaczonym jako root) i rozsyła je tak, że procesowi o randze N jest przesyłana N-ta część wektora danych.
int vsize = 4; float matrix[vsize*vsize]; float rvect[vsize]; int status = MPI_Scatter(matrix, vsize, MPI_FLOAT, rvect, vsize, MPI_FLOAT, 0 /*root*/, MPI_COMM_WORLD); // do 4-ech procesów!!! man
MPI_Gather Funkcja odwrotna do MPI_Scatter. Zbiera dane w procesie oznaczonym root. Ustawia je w kolejkę zgodnie z rangą nadsyłającego procesu.
int vsize = 4; float matrix[vsize*vsize]; float rvect[vsize]; int status = MPI_Gather(rvect, vsize, MPI_FLOAT, matrix, vsize, MPI_FLOAT, 0 /*root*/ ,MPI_COMM_WORLD); // od 4-ech procesów !!!man
MPI_Reduce Funkcja wykonuje zdefiniowaną operację na wysłanych przez procesy danych. Możliwe operacje: MPI_MAX – maximum MPI_MIN – minimum MPI_SUM – suma MPI_PROD – produkt MPI_LAND – logiczny AND MPI_LOR – logiczny OR MPI_LXOR – logiczny XOR MPI_BAND – bitowy AND MPI_BOR – bitowy OR MPI_BXOR – bitowy XOR
int val = 1, procCnt; int status = MPI_Reduce( &val ,&procCnt ,1 ,MPI_INT ,MPI_SUM ,0 /*root*/ ,MPI_COMM_WORLD );