next up previous contents
Next: Производные типы и MPI_Type_struct Up: Группировка данных для пересылки Previous: Группировка данных для пересылки   Contents

Параметр count

Процедуры MPI_Send(), MPI_Recv(), MPI_Bcast(), и MPI_Reduce() используют аргументы count и datatype. Эти два параметра позволяют пользователю группировать элементы данных, имеющие тот же самый основной тип, в единое сообщение. Чтобы использовать эту возможность, сгруппированные элементы данных должны сохраняться в смежных областях памяти. Поскольку C гарантирует, что элементы массива сохраняются именно таким образом, то посылка элементов массива или подмассива может осуществляться в едином сообщении.

В качестве примера приведем процедуру посылки второй половины вектора, содержащего 100 значений с плавающей точкой от процесса 0 к процессу 1:

float vector[100];

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 a;

float b;

int n;

то C не гарантирует, что они будут сохранены в памяти последовательно. Поэтому для их группировки нужно использовать другие возможности MPI.



2004-06-22