| |
Четыре приведенные функции дополняют функции создания типов из 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 должен работать без изменений, и может быть перенесён в любую систему. Тем не менее, он может не работать, если в программе использованы адреса больше чем -1. Новый код должен использовать новые функции. Это даёт совместимость с Си/С++ и позволяет избегать ошибок в 64-битных архитектурах. Несмотря на это, такой код может потребовать небольшого изменения для совместимости со старым ФОРТРАН77, не поддерживающим объявления KIND. []
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |