Структуры MPI и C - PullRequest
       40

Структуры MPI и C

5 голосов
/ 02 мая 2010

Должен признать, я был потрясен, увидев, сколько строк кода требуется для передачи одной структуры C с помощью MPI.

При каких обстоятельствах будет работать просто передача структуры с использованием предопределенного типа данных MPI_CHAR? Рассмотрим следующий пример:

struct particle {
   double x;
   double y;
   long   i;
};

struct particle p;
MPI_Isend(&p, sizeof(particle), MPI_CHAR, tag, MPI_COMM_WORLD, &sendr);

В моем случае все процессы выполняются на одной архитектуре. Является ли заполнение единственной проблемой?

Ответы [ 2 ]

8 голосов
/ 04 мая 2010

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

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

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

3 голосов
/ 02 мая 2010

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

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

...