Буфер посылки описан в операции MPI_SEND, в которой указано количество последовательно размещенных элементов, тип элементов указан в поле datatype, начиная с элемента по адресу buf. Длина сообщения задается числом элементов, а не числом байтов. Число данных count в сообщении может быть равно нулю, это означает, что область данных в сообщении пуста. Базисные типы данных в сообщении соответствуют базисным типам данных используемого языка программирования. Список соответствия этих типов данных для языка ФОРТРАН и MPI представлен ниже.
MPI datatype | Fortran datatype |
MPI_INTEGER | INTEGER |
MPI_REAL | REAL |
MPI_DOUBLE_PRECISION | DOUBLE PRECISION |
MPI_COMPLEX | COMPLEX |
MPI_LOGICAL | LOGICAL |
MPI_CHARACTER | CHARACTER(1) |
MPI_BYTE | |
MPI_PACKED |
Список соответствия типов данных для языка Си и MPI дан ниже.
MPI datatype | C datatype |
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_BYTE и MPI_PACKED не имеют соответствия в языках Си или ФОРТРАН. Значением типа MPI_BYTE является байт (8 двоичных цифр). Байт не интерпретируется и отличен от символа. Различные машины могут иметь различное представление для символов или могут использовать для представления символов более одного байта. С другой стороны, байт имеет то же самое двоичное значение на всех машинах. Использование типа MPI_PACKED объясняется в разделе 3.13.
MPI требует поддержки для указанных выше типов данных, соответствующих базовым типам языков ФОРТРАН77 и ANSI Си. В MPI необходимо ввести дополнительные типы данных, если базовый язык имеет следующие типы данных:
Объяснение: Одной из целей проектирования MPI является создание возможности реализации MPI как библиотеки, не требующей дополнительной предобработки или компиляции. Поэтому не следует предполагать, что коммуникационный вызов имеет информацию о типе переменных в коммуникационном буфере; эта информация должна быть представлена в виде явного аргумента. Необходимость такой информации будет объяснена в разделе 3.3.2.[]