Процедуры MPI_Send(), MPI_Recv(), MPI_Bcast(), и MPI_Reduce() используют аргументы count и datatype. Эти два параметра позволяют пользователю группировать элементы данных, имеющие тот же самый основной тип, в единое сообщение. Чтобы использовать эту возможность, сгруппированные элементы данных должны сохраняться в смежных областях памяти. Поскольку C гарантирует, что элементы массива сохраняются именно таким образом, то посылка элементов массива или подмассива может осуществляться в едином сообщении.
В качестве примера приведем процедуру посылки второй половины вектора, содержащего 100 значений с плавающей точкой от процесса 0 к процессу 1:
int tag, count, dest, source;
MPI_Status status;
int p;
int my_rank;
. . .
if (my_rank == 0) {
/* Инициализация и отсылка вектора */
. . .
tag = 47;
count = 50;
dest = 1;
MPI_Send(vector + 50, count, MPI_FLOAT, dest, tag,
MPI_COMM_WORLD);
} else {
/* my_rank == 1 */
tag = 47;
count = 50;
source = 0;
MPI_Recv(vector+50, count, MPI_FLOAT, source, tag,
MPI_COMM_WORLD,
&status);
}
float b;
int n;