Модуль MPI.
Реализация MPI должна предоставлять модуль с названием MPI,
который может быть использован в программе на языке ФОРТРАН90. Этот модуль
должен:
Реализация MPI может предоставить в модуле и другие возможности, которые повышают эффективность использования MPI, поддерживая соответствие стандарту. Например он может:
Объяснение: Поведение, описанное в общем интерфейсе MPI может не всегда соответствовать правильному INTENT для ФОРТРАНa. Например, прием в буфер, определенный типом с абсолютным адресом может потребовать ассоциировать MPI_BOTTOM с аргументом по умолчанию OUT. Более того, ``константы'', такие как MPI_BOTTOM и MPI_STATUS_IGNORE - на самом деле не константы ФОРТРАНa, а ``специальные адреса'', используемые нестандартным образом. В конце концов, общее поведение MPI-1 в некоторых местах было изменено для MPI-2. Например MPI_IN_PLACE изменяет аргумент OUT на INOUT.[]
Приложения могут использовать модуль MPI либо заголовочный файл mpif.h. Реализация может потребовать использования модуля для предотвращения ошибки несовпадения типов. (см. ниже)
Совет пользователям: Рекомендуется чтобы модуль MPI использовался даже если не является необходимым использовать его на конкретной системе. Использование модуля добавляет несколько потенциальных преимуществ перед использованием заголовочного файла.[]
Должна быть возможность компоновки вместе наборов функций, из которых некоторые используют USE mpi, а некоторые INCLUDE mpif.h.
Отсутствие проблем с несовпадением типов для процедур с выбором аргументов. Высококачественная реализация MPI должна предоставить механизм, гарантирующий, что выбор аргументов MPI не вызовет фатальных ошибок во время компиляции или выполнения из-за несовпадения типов. Реализация MPI может потребовать от приложений использования модуля mpi или компиляции с соответствующим флагом, с целью избавиться от проблем с соответствием типов.
Совет разработчикам: В случае, если компилятор не генерирует ошибок, с текущим интерфейсом ничего не надо делать. В случае если компилятор может выдать ошибку, можно использовать набор перегружаемых функций (см. M. Hennecke [11]). Даже если компилятор не выдает ошибки, могут потребоваться явные интерфейсы для всех функций для нахождения ошибок в списке аргументов. Кроме того, явные интерфейсы, сообщающие INTENT, могут уменьшить количество копирований для аргументов BUF(*).[]