next up previous contents
Next: Семантические термины Up: Термины и соглашения MPI-2 Previous: Соглашения об именах   Contents

Спецификация процедуры

Процедуры MPI описаны с использованием независимой от языка системы обозначения. Аргументы вызовов процедуры отмечены как IN, OUT или INOUT. Значения их следующие:

Имеется один специальный случай - если аргумент является указателем к скрытому объекту (эти термины определены в Разделе 2.5.1), и объект модифицирован вызовом процедуры, то аргумент обозначен OUT. Он обозначен так даже при том, что указатель непосредственно не изменяется - мы используем атрибут OUT, чтобы обозначить то, что ссылки указателя модифицированы. Таким образом, в С++ IN-аргументы являются либо ссылками, либо указателями на объекты const.

Объяснение: Определение MPI пытается максимально избегать использования аргументов типа INOUT, потому что такое использование подвержено ошибкам, особенно для скалярных аргументов. []

Использование MPI IN, OUT и INOUT необходимо, чтобы указать пользователю, как должен использоваться аргумент, но не обеспечивать строгую классификацию, которая может быть оттранслирована непосредственно во все привязки к языку (например, INTENT в привязках ФОРТРАН90 или const в привязках Си). Например, ``константа'' MPI_BOTTOM может обычно передаваться в OUT-аргументах буфера. Также, MPI_STATUS_IGNORE можно передать как OUT-аргумент состояния.

Общий случай для функций MPI - аргумент, который используется как IN одними процессами и как OUT другими процессами. Такой аргумент синтаксически является аргументом INOUT и он так и отмечен, хотя семантически он не используется в одном вызове и для ввода и для вывода на отдельном процессе.

Другая ситуация часто возникает, когда значение аргумента необходимо только подмножеству процессов. Когда аргумент не существенен при процессе, тогда произвольное значение можно передавать как аргумент.

Если не определено иначе, аргумент типа OUT или типа INOUT не может быть совмещен с любым другим аргументом, передаваемым процедуре MPI. Два аргумента совмещены, если они относятся к тот же самой или накладывающейся ячейке памяти. Пример совмещения имен аргумента в Си приведен ниже. Если мы определяем процедуру Си вот так,

void copyIntBuffer(int *pin, int *pout, int len) { int i; for (i=0; i<len; ++i) *pout++ = *pin++; }

тогда ее вызов в следующем фрагменте кода имеет совмещенные аргументы.

int a[10]; copyIntBuffer(a, a+3, 7);

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

Все функции MPI сначала определены в независимой от языка системе обозначения. Ниже сначала приводится ANSI Си версия функции, сопровождаемая версией той же самой функции в языке ФОРТРАН и затем в С++. ФОРТРАН в этой книге относится к языку ФОРТРАН90; см. Раздел 2.6.



Alex Otwagin 2002-12-10