The OpenNET Project / Index page

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

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
next up previous contents
Next: Упаковка и распаковка Up: Производные типы данных Previous: Примеры   Contents

Устаревшие функции

MPI-2 замещает некоторые функции конструирования и доступа, определенные в MPI-1, по следующим двум причинам.

Ниже дается список устаревших функций и констант MPI-1 с их определениями для языков Си и ФОРТРАН и приводится их замена. Как обычно устаревшие функции продолжают оставаться частью стандарта MPI, однако пользователю настоятельно рекомендуется использовать новые функции, где это возможно (см. раздел 1.9.1 о статусе устаревших функций).

MPI_TYPE_EXTENT(datatype, extent) 
int MPI_Type_extent (MPI_Datatype datatype, MPI_Aint *extent)
MPI_TYPE_EXTENT (DATATYPE, EXTENT, ERROR) 
        INTEGER DATATYPE, EXTENT, IERROR

MPI_TYPE_LB(datatype, displacement) 
int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint* displacement)
MPI_TYPE_LB (DATATYPE, DISPLACEMENT, IERROR)
        INTEGER DATATYPE, DISPLACEMENT, IERROR

MPI_TYPE_UB (datatype, displacement) 
int MPI_Type_ub (MPI_Datatype datatype, MPI_Aint* displacement)
MPI_TYPE_UB (DATATYPE, DISPLACEMENT, IERROR)
        INTEGER DATATYPE, DISPLACEMENT, IERROR

Эти три функции замещаются функцией MPI_TYPE_GET_EXTENT (datatype, extent, lb). Новая функция возвращает в одном вызове нижнюю границу и экстент типа данных, на основе которых может быть вычислена верхняя граница; в MPI-1 каждый из этих трех параметров возвращался отдельным вызовом. Более того, представление старых функций в языке ФОРТРАН указывает, что возвращаемое значение имеет тип INTEGER, в то время, как новая функция возвращает аргумент типа INTEGER (KIND=MPI_ADDRESS_KIND).

MPI_TYPE_HVECTOR(count, blocklength, stride, oldtype, newtype)
int MPI_Type-hvector (int count, int blocklength, MPI_Aint stride,
MPI_Datatype oldtype, MPI_Datatype *newtype)
MPI_TYPE_HVECTOR (COUNT, BLOCKLENGTH, STRIDE, OLDTYPE, NEWTYPE, IERROR)
INTEGER COUNT, BLOCKLENGTH, STRIDE, OLDTYPE, NEWTYPE, IERROR

Функция MPI_TYPE_HVECTOR замещается функцией MPI_TYPE_CREATE_HVECTOR (count,
blocklength, stride, oldtype, newtype).
Нейтральное в отношении языка определение и вызов для языка Си - те же самые. Вызов для языка ФОРТРАН отличается в том, что старая функция использовала аргумент INTEGER STRIDE, а новая функция использует аргумент типа INTEGER (KIND=MPI_ADDRESS_KIND).

MPI_TYPE_HINDEXED(count, array_of_blocklengths,
    array_of_displacements, old_type, newtype)
int MPI_Type_hindexed (int count, int *array_of_blocklengths,
     MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
     MPI_Datatype *newtype)
MPI_TYPE_HINDEXED (COUNT, ARRAY_OF_BLOCKLENGTHS,
     ARRAY_OF_DISPLACEMENTS, OLDTYPE, NEWTYPE, IERROR)
     INTEGER COUNT, ARRAY_OF_BLOCKLENGTHS (*),
     ARRAY_OF_DISPLACEMENTS (*), OLDTYPE, NEWTYPE, IERROR

Эта функция замещается функцией MPI_TYPE_CREATE_HINDEXED(count,
array_of_blocklengths, array_ of_displacements, oldtype, newtype)
. Нейтральное определение и вызов для языка Си - те же самые. В языке ФОРТРАН для старой функции используется аргумент INTEGER ARRAY_OF_DISPLACEMENTS(*), а новая функция использует аргумент типа INTEGER (KIND=MPI_ADDRESS_KIND).

MPI_TYPE_STRUCT(count, array_of_blocklengths, array_of_displacements,
     array_of_types, newtype)
int MPI_Type_struct (int count, int *array_of_blocklengths, 
     MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, 
     MPI_Datatype *newtype)
MPI_TYPE_STRUCT(COUNT, ARRAY_OF_BLOCKLENGTHS, AR-RAY_OF_DISPLACEMENTS,
     ARRAY_OF_TYPES, NEWTYPE, IERROR) INTEGER COUNT,
     ARRAY_OF_BLOCKLENGTHS (*), ARRAY_OF_DISPLACEMENTS),
     AR-RAY_OF-TYPES (*), NEWTYPE, IERROR

MPI_TYPE_STRUCT замещается функцией MPI_TYPE_CREATE_STRUCT(count,
array_of_blocklengths, array_of_displacements, array_of_types, newtype)
. В языке
ФОРТРАН старая функция использовала аргумент INTEGER ARRAY_OF_DISPLACEMENTS), а новая использует аргумент типа INTEGER(KIND=MPI_ADDRESS_KIND).

MPI_ADDRESS (location, address)
int MPI_Address (void* location, MPI_Aint *address)
MPI_ADDRESS (LOCATION, ADDRESS, IERROR)
     <type> LOCATION (*)
      INTEGER ADDRESS, IERROR

Эта функция замещается функцией MPI_GET_ADDRESS(location, address). Нейтральное языковое определение и обращение в языке Си - те же самые. В языке ФОРТРАН старая функция использовала аргумент INTEGER ADDRESS, а новая функция использует аргумент типа
INTEGER(KIND=MPI_ADDRESS_KIND).

Использование двух ``псевдотипов'' MPI_LB и MPI_UB замещается обращением к функции
MPI_TYPE_CREATE_RESIZED.

Пример 3.37 Рассмотрим последовательность вызовов в примере 3.22. Тогда первый вызов может быть заменен следующим эквивалентным (MPI-1) кодом.

MPI_Datatype types [3];
MPI_Aint disps [3];
int blens [3];

types [0] = MPI_LB;
types [1] = MPI_UB;
types [2] = type0;

disps [0] = -4;
disps [1] = 8;
disps [2] = 0;

blens [0] = blens [1] = blens [2] = 1;

MPI_Type_struct (3, blens, disps, types, &type l);

Кода, эквивалентного второму обращению к MPI_TYPE_CREATE_RESIZED, в MPI-1 не имеется. Это происходит, потому что этот вызов перемещает существующий маркер MPI_LB вверх, что не может быть сделано в MPI-1.

Ниже дается синтаксис ряда новых функций.

Синтаксис функции MPI_TYPE_CREATE_HVECTOR представлен ниже.

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 представлен ниже.

MPI_TYPE_CREATE_HINDEXED(count, array_of_blocklengths,
     array_of_displacements, oldtype, newtype)
IN count число блоков (целое)
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 представлен ниже.

MPI_TYPE_CREATE_STRUCT(count, array_of_blocklengths,
   array_of_displacements, array_of_types, newtype)
IN count число блоков (целое)
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 представлен ниже.

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. Новые программы с новыми функциями преодолевают этот недостаток, они также обеспечивают совместимость с языками Си/С++. Однако, вновь написанные программы могут потребовать небольшой переделки для совместимости со старой средой ФОРТРАН77, которая не поддерживает декларации KIND.[]

Синтаксис функции MPI_TYPE_GET_EXTENT представлен ниже.

MPI_TYPE_GET_EXTENT(datatype, lb, extent)
IN datatype тип данных (дескриптор)
OUT lb нижняя граница типа (целое)
OUT extent экстент типа данных (целое)

int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent)

MPI_TYPE_GET_EXTENT(DATATYPE, LB, EXTENT, IERROR)
INTEGER DATATYPE, IERROR
INTEGER(KIND = MPI_ADDRESS_KIND) LB, EXTENT

void MPI::Datatype::Get_extent(MPI::Aint& lb, MPI::Aint& extent) const

Синтаксис функции MPI_TYPE_CREATE_RESIZED представлен ниже.

MPI_TYPE_CREATE_RESIZED(oldtype, lb, extent, newtype)
IN oldtype входной тип данных (дескриптор)
IN lb новая нижняя граница типа данных (целое)
IN extent новый экстент типа данных (целое)
OUT newtype выходной тип данных (дескриптор)

int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb,
     MPI_Aint extent, MPI_Datatype *newtype) 

MPI_TYPE_CREATE_RESIZED(OLDTYPE, LB, EXTENT, NEWTYPE, IERROR)
INTEGER OLDTYPE, NEWTYPE, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) LB, EXTENT 

MPI::Datatype MPI::Datatype::Resized(const MPI::Aint lb,
    const MPI::Aint extent) const


next up previous contents
Next: Упаковка и распаковка Up: Производные типы данных Previous: Примеры   Contents
Alex Otwagin 2002-12-10



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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