| |
Предположим, что мы выписываем двумерный массив чисел с двойной точностью, которые распределяется между четырьмя процессами, так, что кажый процесс имеет блок из 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
.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |