Теория и практика параллельных вычислений


Лучшие фильмы для взрослых 18+ качай здесь

Понятие производного типа данных - часть 2


Именно это требование и отражается в определении верхней границы типа данных MPI. Поясним данный момент на ранее рассмотренном примере набора переменных a, b и n, для которого нижняя граница равна 0, а верхняя принимает значение 32 (величина округления 6 или 4 в зависимости от размера типа int). Здесь следует отметить, что требуемое выравнивание определяется по типу первого элемента данных в карте типа.

Следует также указать на различие понятий "протяженность" и "размер типа". Протяженность – это размер памяти в байтах, который нужно отводить для одного элемента производного типа. Размер типа данных – это число байтов, которые занимают данные (разность между адресами последнего и первого байтов данных). Различие в значениях протяженности и размера опять же в величине округления для выравнивания адресов. Так, в рассматриваемом примере размер типа равен 28, а протяженность – 32 (предполагается, что тип int занимает четыре байта).

Для получения значения протяженности типа в MPI предусмотрена функция:

int MPI_Type_extent(MPI_Datatype type, MPI_Aint *extent),

где

  • type — тип данных, протяженность которого отыскивается;
  • extent — протяженность типа.

Размер типа можно найти, используя функцию:

int MPI_Type_size(MPI_Datatype type, MPI_Aint *size),

где

  • type — тип данных, размер которого отыскивается;
  • size — размер типа.

Определение нижней и верхней границ типа может быть выполнено при помощи функций:

int MPI_Type_lb(MPI_Datatype type, MPI_Aint *disp) и int MPI_Type_ub(MPI_Datatype type, MPI_Aint *disp),

где

  • type — тип данных, нижняя граница которого отыскивается;
  • disp — нижняя/верхняя граница типа.

Важной и необходимой при конструировании производных типов является функция получения адреса переменной:

int MPI_Address(void *location, MPI_Aint *address),

где

  • location — адрес памяти;
  • address — адрес памяти в переносимом MPI-формате

(следует отметить, что данная функция является переносимым вариантом средств получения адресов в алгоритмических языках C и Fortran).




Содержание  Назад  Вперед