The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
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



Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру