OpenMPI如何实现数据类型转换?

OpenMPI如何实现数据类型转换?,mpi,communication,openmpi,Mpi,Communication,Openmpi,MPI标准规定,当并行程序在异构环境中运行时,它们可能对同一数据类型具有不同的表示(如用于整数的大端机和小端机),因此在进行点对点通信时可能需要进行数据类型表示转换。我不知道OpenMPI是如何实现这一点的 例如,当前OpenMPI默认使用UCX库,我研究了UCX库的一些代码和OpenMPI的UCX模块。然而,对于像MPI_INT这样的连续数据类型,我没有发现任何表示转换发生。我想知道是因为我错过了这一部分,还是因为实现不符合标准?如果您想在异构集群上运行一个开放的MPI应用程序,您必须配置--

MPI标准规定,当并行程序在异构环境中运行时,它们可能对同一数据类型具有不同的表示(如用于整数的大端机和小端机),因此在进行点对点通信时可能需要进行数据类型表示转换。我不知道OpenMPI是如何实现这一点的


例如,当前OpenMPI默认使用UCX库,我研究了UCX库的一些代码和OpenMPI的UCX模块。然而,对于像MPI_INT这样的连续数据类型,我没有发现任何表示转换发生。我想知道是因为我错过了这一部分,还是因为实现不符合标准?

如果您想在异构集群上运行一个开放的MPI应用程序,您必须
配置--启用异构
(这在默认情况下是禁用的)。请记住,这应该是可行的,但它只是经过简单的测试,主要是因为缺乏兴趣/实际用例。FWIW、IBM Power现在是little endian,而富士通正在从Sparc迁移到ARM以用于HPC,因此几乎所有HPC处理器都是(或即将是)little endian

Open MPI使用转换器(请参见
opal/datatype/opal_convertor.h
)在发送数据之前对其进行打包,并在收到数据后将其解包。 数据以其当前结尾进行压缩。如果发送方具有不同的endianness,则数据转换(例如交换字节)由接收方执行


有两种使用UCX的方法:
pml/UCX
pml/ob1+btl/UCX
,我没有在异构环境中测试过它们。如果您在使用
pml/ucx时遇到一些问题,请尝试
mpirun--mca pml ob1…

谢谢您的回答。我不是在一个非常慷慨的环境中工作,只是对这部分感到好奇。无论如何,我想这对于今天的HPC来说已经不是一个重要的问题了。