| |
Правила соответствия типа для связи в MPI не изменены: спецификация типа
данных за каждый посланный элемент должна соответствовать, в сигнатуре типа,
спецификации типа данных, которое использовалось для получения этого
элемента (если один из типов не MPI_PACKED
). Также, тип элемента
сообщения должен соответствовать объявлению типа для соответствующего
расположения буфера связи, если тип не MPI_BYTE
или
MPI_PACKED
. Межъязыковая связь позволяется, если она выполняет эти
правила.
Пример 4.14 В примере ниже, массив ФОРТРАНА послан из языка ФОРТРАН и получен в Си.
! КОД ФОРТРАНА REAL R(5) INTEGER TYPE, IERR, MYRANK INTEGER(KIND=MPI_ADDRESS_KIND) ADDR ! Создать абсолютный тип данных для массива R CALL MPI_GET_ADDRESS(R, ADDR, IERR) CALL MPI_TYPE_CREATE_STRUCT(1, 5, ADDR, MPI_REAL, TYPE, IERR) CALL MPI_TYPE_COMMIT(TYPE, IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYRANK, IERR) IF (MYRANK.EQ.0) THEN CALL MPI_SEND(MPI_BOTTOM, 1, TYPE, 1, 0, MPI_COMM_WORLD, IERR) ELSE CALL C_RQUTINE(TYPE) END IF /* Код Си */ void C_ROUTINE(MPI_Fint *fhandle) { MPI_Datatype type; MPI_Status status; type = MPI_Type_f2c(*fhandle); MPI_Recv(MPI_BOTTOM, 1, type, 0, 0, MPI_COMM_WORLD, &status); }
Разработчики MPI могут смягчить эти правила соответствия типа, и
позволять сообщениям быть посланными с типами ФОРТРАН и полученными с
типами Си, и наоборот, когда эти типы соответствуют. То есть, если тип
INTEGER
ФОРТРАН идентичен типу int
Си, то реализация MPI может позволять данным быть посланными с типом данных
MPI_INTEGER
и быть полученными с типом данных MPI_INT
.
Однако, такой код не является мобильным.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |