我必须承认,当我看到使用 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);
就我而言,所有进程都在同一架构上运行。填充是唯一的问题吗?
MPI_BYTE
是发送无类型数据时使用的数据类型,而不是MPI_CHAR
。如果两台机器具有相同的架构但使用不同的字符编码,则使用MPI_CHAR
可能会损坏您的数据。将您的数据发送为MPI_BYTE
将保留二进制表示形式,并且不执行任何表示形式转换。
也就是说,是的,从技术上讲,如果(且仅当)您可以保证发送端和接收端的数据表示形式相同,那么以这种方式发送结构是正确的。然而,这是一种糟糕的编程实践,因为它混淆了代码的用途,并引入了平台依赖性。
请记住,您只需定义和提交数据类型一次,而通常需要编写代码来多次发送它。仅仅为了在单个定义上节省几行而降低所有发送的清晰度并不是一种升级。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)