Одна из целей разработи MPI состоит в том, чтобы достигнуть переносимости исходного текста. Это означает, что программа, написанная с использованием MPI, не должна требовать никаких изменений исходного текста при перемещении ее от одной системы к другой.
Для реализации переносимости необходимо, чтобы перед запуском параллельной программы были сделаны некоторые установки, которые обеспечиваются несколькими функциями MPI. К ним прежде всего относится функция инициализации MPI_INIT.
Синтаксис функции MPI_INIT представлен ниже.
MPI_INIT()
int MPI_Init(int *argc, char ***argv)
MPI_INIT(IERROR)
NTEGER IERROR
void Init(int& argc, char**& argv)
void Init()
Эта процедура должна быть вызвана прежде, чем будет вызвана какая - либо другая MPI подпрограмма (кроме MPI_INITIALIZED). Она должна быть вызвана всего один раз; последующие вызовы неверны (см. MPI_INITIALIZED). Все MPI программы должны содержать вызов MPI_INIT. Версия для ANSI Си принимает argc и argv, которые являются аргументами к main:
int main(argc, argv)
int argc;
char **argv;
{
MPI_Init(&argc, &argv);
/* анализ аргументов */
/* головная программа */
MPI_Finalize(); /* смотри ниже */
}
Версия для языка ФОРТРАН содержит только IERROR.
Реализация MPI не требует, чтобы аргументы в вызове для Си были аргументами main.
Объяснение: MPI_INIT может использовать командную строку аргументов для инициализации среды MPI. Они передаются по ссылке, чтобы позволить реализации MPI обеспечить их в среде, где аргументы командной строки не предусмотрены для main.[]
Синтаксис функции MPI_FINALIZE представлен ниже.
MPI_FINALIZE()
int MPI_Finalize(void)
MPI_FINALIZE(IERROR)
INTEGER IERROR
void Finalize()
Эта процедура очищает все состояния MPI. Никакая другая процедура MPI (даже MPI_INIT) не может быть вызвана после выполнения этой процедуры. Пользователь обязан гарантировать, что все незаконченные обмены будут завершены прежде, чем будет вызвана MPI_FINALIZE.
Синтаксис функции MPI_INITIALIZED представлен ниже.
MPI_INITIALIZED(flag)
OUT | flag | параметр flag принимает значение true, если MPI_INIT была вызвана и false в противном случае. |
int MPI_Initialized(int *flag)
MPI_INITIALIZED(FLAG, IERROR)
LOGICAL FLAG
INTEGER IERROR
bool MPI::Is_initialized()
Процедура MPI_INITIALIZED может использоваться для определения
того, был ли вызван
MPI_INIT. Это единственная процедура,
которая может быть вызвана перед MPI_INIT.
Синтаксис функции MPI_ABORT представлен ниже.
MPI_ABORT(comm, errorcode)
IN | comm | коммуникатор прерываемой задачи | |
IN | errorcode | код ошибки для возврата в среду исполнения |
int MPI_Abort(MPI_Comm comm, int errorcode)
MPI_ABORT(COMM, ERRORCODE, IERROR)
INTEGER COMM, ERRORCODE, IERROR
bool MPI::Is_finalized()
Процедура MPI_ABORT пробует наилучшим способом прервать выполнение всех задач в группе коммуникатора comm. Эта процедура не требует, чтобы исполнительная среда производила какие-либо действия с кодом ошибки. Однако, среда Unix или POSIX должна обрабатывать его как return errorcode из главной программы или abort (errorcode).
Реализация MPI должна определить поведение MPI_ABORT по крайней мере для коммуникатора MPI_COMM_WORLD. Реализация MPI может игнорировать аргумент comm и действовать, как если бы коммуникатором был MPI_COMM_WORLD.
Объяснение: Коммуникационный аргумент предусмотрен для будущих
расщирений MPI в отношении среды исполнения, например, для
динамического управления процессами. Это, в частности, позволяет
(но не требует) реализации MPI прекратить действие подмножества
MPI_COMM_WORLD.[]