The OpenNET Project / Index page

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

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

Адресные функции и функции экстентов

Смещения в универсальном типе данных задаются относительно начального буферного адреса. Этот начальный ``нулевой адрес'' отмечается константой MPI_BOTTOM. Поэтому тип данных может описывать абсолютный адрес элементов в коммуникационном буфере, в этом случае аргумент buf получает значение MPI_BOTTOM.

Адрес ячейки памяти может быть найден путем использования функции MPI_ADDRES.

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

MPI_TYPE_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_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_ADDRESS возвращает байтовый адрес ячейки.

Пример 3.25 Использование MPI_ADDRESS для массива.

   REAL A(100,100) 
   INTEGER I1, I2, DIFF 
   CALL MPI_ADDRESS(A(1,1), I1, IERROR) 
   CALL MPI_ADDRESS(A(10,10), I2, IERROR) 
   DIFF = I2 - I1 
! Значение DIFF есть 909*sizeofreal; значение I1 и I2 зависят от
! реализации.

Совет пользователям: Пользователи языка Си иногда стараются избежать использования MPI_ADDRESS, надеясь на доступность адресного оператора &. Заметим, однако, что & - выражение - это указатель (pointer), а не адрес. ANSI Си не требует, чтобы значение указателя было абсолютным адресом объекта, хотя это общий случай. Более того, ссылка может не иметь уникального определения на машине с сегментным адресным пространством. Использование MPI_ADDRESS в языке Си гарантирует также мобильность для таких машин.[]

Совет пользователям: Чтобы предупредить проблему с копированием аргументов и оптимизацией регистров, выполняемую компиляторами языка ФОРТРАН, следует обратить внимание на раздел 10.2.2 в стандарте MPI-2.[]

Следующая вспомогательная функция обеспечивает полезную информацию о производных типах данных.

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

MPI_TYPE_EXTENT(datatype, extent)
IN datatype тип данных (дескриптор)
OUT extent экстент типа данных (целое)

int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) 

MPI_TYPE_EXTENT(DATATYPE, EXTENT, IERROR)
INTEGER DATATYPE, EXTENT, IERROR

Функция MPI_TYPE_EXTENT возвращает экстент типа данных, где экстент определяется так, как описано в разделе 3.12.3.

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

MPI_TYPE_SIZE (datatype, size)

IN datatype тип данных (дескриптор)
OUT size размер типа данных (целое)

int MPI_Type_size(MPI_Datatype datatype, int *size) 

MPI_TYPE_SIZE(DATATYPE, SIZE, IERROR)
INTEGER DATATYPE, SIZE, IERROR 

int MPI::Datatype::Get_size() const

Функция MPI_TYPE_SIZE возвращает общий размер в байтах элементов в сигнатуре типа, связанной с datatype; это общий размер данных в сообщении, которое было бы создано с этим типом данных. Элементы, которые появляются в типе данных несколько раз, подсчитываются с учетом их кратности.


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
Добавить, Поддержать, Вебмастеру