next up previous contents
Next: Обработчики ошибок Up: Способность языка к взаимодействию Previous: Константы   Contents

Межъязыковая связь

Правила соответствия типа для связи в 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. Однако, такой код не является мобильным.



Alex Otwagin 2002-12-10