next up previous contents
Next: Длина и границы типов Up: Новые функции манипуляции типами Previous: Новые функции манипуляции типами   Contents

Конструкторы типов с явными адресами

Четыре приведенные функции дополняют функции создания типов из MPI-1. Новые функции - синонимы старых для Си/С++, или систем ФОРТРАН, где INTEGER по умолчанию имеет размер адреса. (Старые имена в С++ недоступны.) В ФОРТРАН эти функции принимают аргументы типа INTEGER(KIND=MPI_ADDRESS_KIND) там, где в Си используются аргументы типа MPI_Aint. В системах ФОРТРАН77, не поддерживающих нотацию KIND из ФОРТРАН90 и там, где адрес имеет размер 64 бита при 32-х битном INTEGER по умолчанию, эти аргументы будут иметь тип INTEGER*8. Старые функции будут сохранены для обратной совместимости. Тем не менее, пользователи должны перейти на новые функции - как в Си, так и в ФОРТРАНe.

Ниже описаны новые функции. Использование старых функций не поощряется.

MPI_TYPE_CREATE_HVECTOR( count, blocklength, stride, oldtype, newtype)  
IN count количество блоков (положительное целое)  
IN blocklength количество элементов в каждом блоке (положительное целое)  
IN stride количество байт перед началом каждого блока (целое)  
IN oldtype старый тип данных (дескриптор)  
OUT newtype новый тип данных (дескриптор)  
int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype, MPI_Datatype *newtype) MPI_TYPE_CREATE_HVECTOR(COUNT, BLOCKLENGTH, STIDE, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, BLOCKLENGTH, OLDTYPE, NEWTYPE, IERROR INTEGER(KIND=MPI_ADDRESS_KIND) STRIDE MPI::Datatype MPI::Datatype::Create_hvector(int count, int blocklength, MPI::Aint stride) const

MPI_TYPE_CREATE_HINDEXED( count, array_of_blocklengths, array_of_displacements, oldtype, newtype)

IN count количество блоков -- также число меток в array_of_displacements и array_of_blocklengths (целое)  
IN array_of_blocklengths количество элементов в каждом блоке (массив положительных целых)  
IN array_of_displacements байтовое смещение каждого блока (массив целых)  
IN oldtype старый тип данных (дескриптор)  
OUT newtype новый тип данных (дескриптор)  


int MPI_Type_create_hindexed(int count, int array_of_blocklengths[], MPI_Aint array_of_displacements[], MPI_Datatype oldtype, MPI_Datatype *newtype) MPI_TYPE_CREATE_HINDEXED(COUNT, ARRAY_OF_BLOCKLENGTHS, ARRAY_OF_DISPLACEMENTS, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, ARRAY_OF_BLOCKLENGTHS(*), OLDTYPE, NEWTYPE, IERROR INTEGER(KIND=MPI_ADDRESS_KIND) ARRAY_OF_DISPLACEMENTS(*) MPI::Datatype MPI::Datatype::Create_hindexed(int count, const int array_of_blocklengths[], const MPI::Aint array_of_displacements[]) const


MPI_TYPE_CREATE_STRUCT(count, array_of_blocklengths,
array_of_displacements, array_of_types, newtype)
IN count количество блоков -- также число меток в array_of_displacements и array_of_blocklengths  
IN array_of_blocklength количество элементов в каждом блоке (массив положительных целых)  
IN array_of_displacements байтовое смещение каждого блока (массив целых)  
IN array_of_types тип элементов в каждом блоке (массив дескрипторов объектов типов данных)  
OUT newtype новый тип данных (дескриптор)  

int MPI_Type_create_struct(int count,int array_of_blocklengths[], MPI_Aint array_of_displacements[], MPI_Datatype array_of_types[], MPI_Datatype *newtype) MPI_TYPE_CREATE_STRUCT(COUNT, ARRAY_OF_BLOCKLENGTHS, ARRAY_OF_DISPLACEMENTS, ARRAY_OF_TYPES, NEWTYPE, IERROR) INTEGER COUNT, ARRAY_OF_BLOCKLENGTHS(*), ARRAY_OF_TYPES(*), NEWTYPE, IERROR INTEGER(KIND=MPI_ADDRESS_KIND) ARRAY_OF_DISPLACEMENTS(*) static MPI::Datatype MPI::Datatype::Create_struct(int count, const int array_of_blocklengths[], const MPI::Aint array_of_displacements[], const MPI::Datatype array_of_types[])

MPI_GET_ADDRESS(location, address)
IN location место в памяти вызывающего (выбор)
OUT address адрес места (целое)
int MPI_Get_address(void *location, MPI_Aint *address) MPI_GET_ADDRESS(LOCATION, ADDRESS, IERROR) <type> LOCATION(*) INTEGER IERROR INTEGER(KIND=MPI_ADDRESS_KIND) ADDRESS MPI::Aint MPI::Get_address(void* location) Совет пользователям: Нынешний исходный код ФОРТРАНА для MPI должен работать без изменений, и может быть перенесён в любую систему. Тем не менее, он может не работать, если в программе использованы адреса больше чем $2^{32}$-1. Новый код должен использовать новые функции. Это даёт совместимость с Си/С++ и позволяет избегать ошибок в 64-битных архитектурах. Несмотря на это, такой код может потребовать небольшого изменения для совместимости со старым ФОРТРАН77, не поддерживающим объявления KIND. []


next up previous contents
Next: Длина и границы типов Up: Новые функции манипуляции типами Previous: Новые функции манипуляции типами   Contents
Alex Otwagin 2002-12-10