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

Настоящая длина типов данных

Предположим, мы реализовали получения как опорное дерево, реализованное черз процедуры типа ``точка-точка''. Так как буфер приема верен только для корневого процесса, понадобится выделить некоторое время место получения данных в промежуточных точках. Но если пользователь изменил длину типа данных с использованием значений MPI_UB и MPI_LB, длина типа данных не может быть использована для определения объема места, которое необходимо выделить. Для определения настоящей длины типа данных есть новая функция.

MPI_TYPE_GET_TRUE_EXTENT(datatype, true_lb, true_extent)
IN datatype тип данных, о котором требуется информация (дескриптор)
OUT true_lb настоящая нижняя граница типа данных (дескриптор)
OUT true_extent настоящая длина типа данных (целое)
int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) MPI_TYPE_GET_TRUE_EXTENT(DATATYPE, TRUE_LB, TRUE_EXTENT, IERROR) INTEGER DATATYPE, IERROR INTEGER(KIND = MPI_ADDRESS_KIND) TRUE_LB, TRUE_EXTENT void MPI::Datatype::Get_true_extent(MPI::Aint& true_lb, MPI::Aint& true_extent) const

true_lb возвращает смещение самого нижнего элемента хранилища, адресуемого типом данных, то есть нижнюю границу соответствующей карты типа, игнорируя маркеры MPI_LB. true_extent возвращает настоящий размер типа данных, т.е. длину соотвествующей карты типа, игнорируя маркеры MPI_LB и MPI_UB, не производя округление для выравнивания. Если карта типа, ассоциированая с типом данных имеет вид

$Typemap = \{(type_0, disp_0),..., (type_{n-1},disp_{n-1}$)}

Тогда

$true\_ub(Typemap)=min_j\{disp_j : type_j \ne {\bf lb, ub}\},$

$true\_lb(Typemap)=max_j\{disp_j + sizeof(type_j) : type_j \ne {\bf lb, ub}\},$
и

$true\_extent (Typemap) = true\_ub(Typemap) - true\_lb(typemap)$.

(Читатели должны сравнить это с определениями в главе 3.12.3 стандарта MPI-1, описывающими функцию MPI_TYPE_EXTENT.)

true_extent - минимальное количество байт памяти, необходимых для хранения несжатого типа данных.



Alex Otwagin 2002-12-10