Предположим, что мы выписываем двумерный массив чисел с двойной точностью, которые распределяется между четырьмя процессами, так, что кажый процесс имеет блок из 25 колонок (процесс 0 отвечает за колонки 0-24, процесс 1 - за 25-49 и т.д.), как это показано на рис. 7.4. Чтобы создать файловые типы для каждого из процессов, можно использовать следующую программу на Си:
double subarray[100][25];
MPI_Datatype filetype;
int sizes[2], subsizes[2], starts[2];
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
sizes[0]=100; sizes[1]=100;
subsizes[0]=100; subsizes[1]=25;
starts[0]=0; starts[1]=rank*subsizes[1];
MPI_Type_create_subarray(2, sizes, subsizes, starts,
MPI_ORDER_C, MPI_DOUBLE,
&filetype);
Или, что эквивалентно, на ФОРТРАНe:
double precision subarray(100,25)
integer filetype, rank, ierror
integer sizes(2), subsizes(2), starts(2)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
sizes(1)=100
sizes(2)=100
subsizes(1)=100
subsizes(2)=25
starts(1)=0
starts(2)=rank*subsizes(2)
call MPI_TYPE_CREATE_SUBARRAY(2, sizes, subsizes, starts, &
MPI_ORDER_FORTRAN, MPI_DOUBLE_PRECISION, &
filetype, ierror)
Сгенерированные файловые типы будут описывать части, содержащиеся в
внутри подмассивов каждого процесса с дырками для места, которое
занимают пождмассивы других процессов. Рис. 9.5 демонстрирует
файловый тип, созданный для процесса 1
.