next up previous contents
Next: Коммуникационные режимы Up: Соответствие типов данных и Previous: Правила соответствия типов данных   Contents

Преобразование данных

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

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

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

Если значение, посылаемое в сообщении, не типизировано (например, типа MPI_BYTE), тогда двоичное представление байта, хранимое на стороне получателя, идентично двоичному представлению байта, загруженного на стороне отправителя. Ситуация сохраняется вне зависимости от того, работают ли отправитель и получатель в одной и той же или различающихся средах. Никакого преобразования представления не требуется. (Заметим, что преобразования представления могут иметь место, когда значения типа MPI_CHARACTER или MPI_CHAR, передаются, например, из кодирования EBCDIC в кодирование ASCII).

Никакого преобразования не нужно, когда программы MPI работают в однородной системе, т.е. когда все процессы выполняются в той же самой среде.

Рассмотрим три примера 3.1 - 3.3. Первая программа верна, если a и b являются действительными массивами размера $ \ge $ 10. Если отправитель и получатель работают в различных средах, тогда десять действительных значений, которые извлекаются из буфера отправителя, будут преобразованы в представление для действительных чисел на приемной стороне прежде, чем они будут записаны в приемный буфер. В то время, как количество действительных чисел, извлекаемых из буфера отправителя равно количеству действительных чисел, хранимых в приемном буфере, количество хранимых байтов не обязано быть равным количеству загруженных байтов. Например, отправитель может использовать четырехбайтовое представление для действительных чисел, а получатель - восьмибайтовое.

Вторая программа содержит ошибки и ее поведение является неопределенным.

Третья программа правильная. Точно та же последовательнасть из сорока байтов, которая была загружена из буфера посылки, будет записана в приемный буфер, даже если получатель и отправитель работают в различных средах. Посланное сообщение имеет точно ту же длину (в байтах) и точно то же двоичное представление, как и принятое сообщение. Если a и b принадлежат к различным типам, или они имеют одинаковый тип, но различное представление, тогда биты, хранимые в приемном буфере, могут кодировать значения, которые отличаются от значений, закодированных теми же битами в буфере передачи.

Преобразование представления также относится и к атрибутам сообщения: источник, приемник и тэг являются целыми числами и могут нуждаться в преобразовании.

Совет разработчикам: Существующее описание MPI не требует, чтобы сообщения переносили информацию о типе данных. Как отправитель, так и приемник обеспечивают комплектование информации о типе данных. В неоднородной среде можно либо использовать независимое от машины кодирование, например, XDR, либо иметь преобразователь на стороне приемника или даже отправителя.

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

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

Объяснение: MPI не выполняет обработку межъязыковых обменов, поскольку нет согласованных стандартов для соответствия между типами языков Си и ФОРТРАН. Поэтому MPI программы, в которых смешаны языки, не будут переносимыми.[]

Совет разработчикам: Разработчики MPI могут попробовать поддерживать межъязыковые обмены, разрешая программам на языке ФОРТРАН использовать ``C MPI types'', такие как MPI_INT, MPI_CHAR и так далее, и позволяя программам на Си использовать типы языка ФОРТРАН.[]



Alex Otwagin 2002-12-10