next up previous contents
Next: Скрытые объекты MPI Up: Способность языка к взаимодействию Previous: Передача указателей   Contents

Представление

Следующие две процедуры предназначаются в Си для преобразования из представления ФОРТРАН (массив целых чисел) в представление Си (структура), и наоборот. Происходит преобразование всей информации в представлении, включая ту, которая скрыта. То есть никакая информация представления не потеряна в преобразовании.

int MPI_Status_f2c(MPI_Fint *f_status, MPI_Status *c_status)

Если f_status - действительное представление ФОРТРАН, но не значение MPI_STATUS_IGNORE или MPI_STATUSES_IGNORE для ФОРТРАН , то MPI_Status_f2c возвращает в c_status действительное представление Си с тем же самым содержанием. Если f_status - значение MPI_STATUS_IGNORE или MPI_STATUSES_IGNORE для ФОРТРАН , или если f_status - не действительное представление ФОРТРАН, то вызов ошибочен.

Представление Си имеет тот же самый источник, идентификатор и значения кода ошибки, как и представление языка ФОРТРАН, и возвращает те же самые ответы когда делается запрос для индекса, элементов, и отмены. Функция преобразования может вызываться с аргументом представления ФОРТРАН, который имеет неопределенное поле ошибки, когда значение поля ошибки в аргументе представления Си неопределено.

Две глобальные переменные типа MPI_Fint*, MPI_F_STATUS_IGNORE и MPI_F_STATUSES_IGNORE объявлены в mpi.h. Они могут использоваться, чтобы проверить в Си, является ли f_status значением MPI_STATUS_IGNORE или MPI_STATUSES_IGNORE языка ФОРТРАН, соответственно. Эти глобальные переменные - не константные выражения Си и не могут использоваться в местах, где Си требует постоянных выражений. Их значение определено только между вызовами MPI_INIT и MPI_FINALIZE и не должно быть изменено кодом пользователя.

Чтобы делать преобразование в другом направлении, мы имеем следующее:

int MPI_Status_c2f(MPI_Status *c_status, MPI_Fint *f_status)

Этот вызов преобразовывает представление Си в представление ФОРТРАН, и имеет поведение, подобное поведению вызова MPI_Status_f2c. Это означает, что значение c_status не должно быть ни MPI_STATUS_IGNORE ни MPI_STATUSES_IGNORE.

Совет пользователям: Отдельной функции преобразования для массивов представлений нет, так как можно просто организовать цикл через массив, преобразовывая каждое представление. []

Объяснение: Обработка MPI_STATUS_IGNORE требует уровня библиотек только с упаковщиком Си: если вызов ФОРТРАН передал MPI_STATUS_IGNORE, то упаковщик Си должен обработать его правильно. Обратите внимание, что эта постоянная не имеет то же самое значение в языках ФОРТРАН и Си. Если MPI_Status_f2c должен был обработать MPI_STATUS_IGNORE, то тип его результата должен быть MPI_Status**, который рассматривался нижним решением. []



Alex Otwagin 2002-12-10