2016-02-15 2 views
0

Как я могу безопасно отправлять структуру C любого (неизвестного) типа и содержимого в MPI, учитывая гетерогенные процессоры. Я знаю MPI_BYTE с MPI_Send, поскольку тип данных может использоваться, но как я могу обеспечить согласованность и правильность представления данных со стороны приемника в гетерогенной системе.Отправка строкой C любого типа в MPI

ответ

1

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

Чтобы отправить структуру C между экземплярами двух разных исполняемых файлов, которые включают, например, разные исполняемые файлы для разных платформ (гетерогенные вычисления) или разные исполняемые файлы, созданные разными компиляторами или одним и тем же компилятором, но с разными параметрами выравнивания (не знаю, зачем кому-либо это делать, но это в любом случае возможно), вы должны создать тип данных MPI который описывает структуру, используя MPI_Type_create_struct. Другой вариант - упаковать на отправляющей стороне соответствующие поля структуры с помощью MPI_Pack, а затем распаковать их на принимающей стороне с помощью MPI_Unpack. В обоих случаях реализация MPI, поддерживающая гетерогенные среды, будет позаботиться о преобразовании данных в некоторый промежуточный формат и из него (при этом формат XDR часто является предпочтительным форматом).

Использование MPI_BYTE для отправки необработанных двоичных данных между машинами с различной степенью точности или даже с разным выравниванием типа просто не является вариантом.

Смежные вопросы