考虑到异构处理器,如何在MPI中安全地发送任何(未知)类型和内容的C结构。我知道MPI_BYTE
和MPI_Send
因为可以使用数据类型,但是如何在异构系统中确保接收方的数据表示的一致性和正确性。
答案 0 :(得分:2)
你做不到。 MPI不会自动了解特定编译器在二进制数据结构中的表示方式,因此它大量使用其内置的扩展数据类型系统,该系统用于明确告知库在内存中查找数据以及如何解释数据。
在两个不同可执行文件的实例之间发送C结构,包括例如不同平台的不同可执行文件(异构计算)或由不同编译器或相同编译器生成的不同可执行文件但具有不同的对齐选项(不知道为什么会有人做这样的事情,但无论如何都可能),你必须构造一个MPI数据类型使用MPI_Type_create_struct
描述结构。另一种选择是使用MPI_Pack
在发送方打包相关结构字段,然后使用MPI_Unpack
在接收方解压缩它们。在这两种情况下,支持异构环境的MPI实现将负责将数据转换为某种中间格式(通常是XDR的选择格式)。
使用MPI_BYTE
在具有不同字节序或甚至不同类型对齐的计算机之间发送原始二进制数据根本不是一种选择。