Предположим, мы реализовали получения как опорное дерево, реализованное
черз процедуры типа ``точка-точка''. Так как буфер приема верен только для
корневого процесса, понадобится выделить некоторое время место получения данных
в промежуточных точках. Но если пользователь изменил длину типа данных с
использованием значений 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, не производя округление для выравнивания. Если карта типа, ассоциированая с типом данных имеет вид
)}
Тогда
и
.
(Читатели должны сравнить это с определениями в главе 3.12.3 стандарта MPI-1, описывающими функцию MPI_TYPE_EXTENT.)
true_extent - минимальное количество байт памяти, необходимых для хранения несжатого типа данных.