Программы MPI требуют, чтобы библиотечные подпрограммы, которые
являются частью среды основного языка (типа WRITE
в ФОРТРАН и
printf()
и malloc()
в ANSI Си) были выполнены после
MPI_INIT
и прежде, чем сработает независимо MPI_FINALIZE
и что
их завершение является независимым от действия других процессов в
программе MPI.
Обратите внимание, что это никоим образом не предотвращает создание
библиотечных подпрограмм, которые обеспечивают параллельные услуги, операции
которых коллективны. Однако, следующая программа, как ожидается,
завершится в среде ANSI Си независимо от размера
MPI_COMM_WORLD
(предполагаем, что printf()
является доступным в выполняющихся
узлах).
int rank;
MPI_Init((void *)0, (void *)0);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) printf("Starting program\n");
MPl_Finalize();
Соответствующие программы языка С++ и ФОРТРАН, как ожидается, также завершатся.
Пример того, что не требуется - любое упорядочение действия этих подпрограмм, вызываемых несколькими задачами. Например, MPI не делает ни требования, ни рекомендации для вывода из следующей программы (снова предполагаем, что ввод-вывод является доступным в выполняющихся узлах).
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf ("Output from task rank %d\n", rank);
Кроме того, вызовы, которые терпят неудачу из-за отсутствия ресурса или другой ошибки, не рассматриваются здесь как нарушение требований (однако, они должны завершаться, только не завершаться успешно).