MPI和C结构

han*_*nno 5 c struct mpi

我不得不承认,我很震惊地看到用MPI传输一个C结构需要多少行代码.

在什么情况下使用预定义的数据类型简单地传输结构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);
Run Code Online (Sandbox Code Playgroud)

就我而言,所有进程都在同一架构上运行.填充是唯一的问题吗?

sus*_*att 8

MPI_BYTE是发送无类型数据时使用的数据类型,而不是MPI_CHAR.如果两台计算机具有相同的体系结构但使用不同的字符编码,则使用MPI_CHAR可能会损坏您的数据.发送您的数据MPI_BYTE将保留二进制表示,并且不执行任何表示转换.

也就是说,是的,从技术上讲,以这种方式发送结构是正确的,如果(并且仅当)您可以保证数据表示在发送和接收端是相同的.但是,编程实践很糟糕,因为它模糊了代码的目的,并引入了平台依赖性.

请记住,您只需要定义和提交一次数据类型,而您通常需要编写代码以多次发送它.降低所有发送的清晰度只是为了在单个定义中保存几行不是一个交易.