Параллельное программирование: Учебное пособие, страница 78

Библиотека MPICH может использоваться в программах на языках; C/C++ и FORTRAN 90. На этих языках различаются вызов подпрограмм, запись имен функций, способы получения кодов завершения подпрограмм и прочее. Здесь мы будем в основном рассматривать случаи использования языка С и С++. В программах на языке С/С++ для имен функций используется префикс MPI_, поэтому нежелательно для своих функций или переменных использовать имена, которые начинаются с символов MPI_. Первая буква имени набирается в верхнем регистре. Согласно спецификации имена подпрограмм имеют такой вид: Класс_действие__подмножество или  Класс_действие. В C++ подпрограмма является методом для определенного класса, поэтому запись имени в этом языке иная: MPI::Класс::действие_подмножество. Для некоторых действий введены стандартные наименования:

Create — создание нового объекта,

Get — получение информации об объекте,

Set — установка параметров объекта,

Delete — удаление информации,

Is — запрос о том, имеет ли объект указанное свойство.

Значения кода завершения имеют целый тип и определяются по значению функции. Имена констант MPI записываются в верхнем регистре. Их описания находятся в заголовочном файле mpi.h, который обязательно включается в MPI-программу. В других реализациях MPI имя этого файла может быть иным. Входные параметры функций передаются по значению, а выходные (и INOUT) — по ссылке. Переменная status имеет тип MPI_Status и является структурой с полями status.MPI_SOURCE и status.MPI_TAG. В MPI принята своя система обозначения типов данных, которая во многих случаях соответствует типам данных в языках С/С++ (табл. 4.1) и FORTRAN (табл. 4.2).

Таблица 4.1. Типы данных MPI для языка С

Тип данных MPI

Тип данных С

MPI_CHAR

signed char

MPI_SHORT

signed short int

MPI_INT

signed int

MPI_LONG

signed long int

MPI_UNSIGNED_CHAR

unsigned char

MPI_UNSIGNED_SHORT

unsigned short int

MPI_UNSIGNED

unsigned int

MPI_UNSIGNED_LONG

unsigned long int

MPI_FLOAT

float

MPI_DOUBLE

double

MPI_LONG_DOUBLE

long double

MPI_BYTE

Нет соответствия

MPI_PACKED

Нет соответствия

В MPI должны соблюдаться правила совместимости типов. Соответствие типов, как правило, должно иметь место в процедурах отправки и процедурах приема сообщений. Избазовых типов могут быть сконструированы более сложные типы данных.

В отличие от С/С++ на языке FORTRAN регистр букв в именах не имеет значения, однако по традиции и определенным соглашениям имена подпрограмм желательно набирать в верхнем регистре. Все имена подпрограмм и констант MPI начинаются с MPI_. Коды завершения передаются через дополнительный параметр целого типа, который обычно находится на последнем месте в списке параметров подпрограммы. Код успешного завершения — MPI_SUCCESS. Константы и другие объекты MPI описываются в файле mpi.h, который обязательно включается в MPI-программу с помощью оператора include. Оператор include находится в начале программы. Переменная  status  является массивом стандартного целого типа. Его размер (MPI_STATUS_SIZE) и индексы задаются именованными константами, например:

integer status(MPI_STATUS_SIZE)

       . . .

if(status(MPI_TAG).EQ.tag1)

then

         . . .

Таблица 4.2. Типы данных MPI для языка FORTRAN

Тип данных MPI

Тип данных FORTRAN

MPI_INTEGER

INTEGER

MPI_REAL

REAL

MPI_DOUBLE_PRECISION

DOUBLE PRECISION

MPI_DOUBLE_COMPLEX

DOUBLE COMPLEX

MPI_COMPLEX

COMPLEX

MPI_LOGICAL

LOGICAL

MPI_CHARACTER

CHARACTER

MPI_BYTE

Нет соответствия

MPI_PACKED

Нет соответствия

Типы, которые имеются не во всех реализациях MPI

MPI_INTEGER1

INTEGER*1

MPI_INTEGER2

INTEGER*2

MPI_INTEGER4

INTEGER*4

MPI_REAL4

REAL*4

MPI_REAL8

REAL*8