MPI标准规定,当并行程序在异构环境中运行时,它们可能对同一数据类型具有不同的表示形式(如用于整数的大端和小端机器),因此在进行点对点通信时可能需要进行数据类型表示转换。我不知道Open MPI如何实现这一点。
例如,当前的Open MPI默认使用UCX库,我研究了UCX库的一些代码和Open MPI的ucx模块。但是,对于像MPI_INT这样的连续数据类型,我没有发现任何表示转换发生。我想知道是因为我错过了那部分或实施不符合标准?
如果要在异构群集上运行Open MPI应用程序,则必须使用configure --enable-heterogeneous
(默认情况下禁用此功能)。请记住,这应该可行,但它经过了轻微测试,主要是因为缺乏兴趣/实际使用案例。 FWIW,IBM Power现在是小端,富士通正在从Sparc转向ARM用于HPC,因此几乎所有HPC处理器都是(或将很快)小端。
Open MPI使用转换器(请参阅opal/datatype/opal_convertor.h
)在发送数据之前打包数据,并在收到数据后将其解压缩。数据以当前字节顺序打包。如果发送方具有不同的字节序,则由接收方执行数据转换(例如交换字节)。
有两种使用UCX的方法:pml/ucx
和pml/ob1+btl/ucx
,我在异构环境中没有测试过它们。如果你遇到pml/ucx
的一些问题,试试mpirun --mca pml ob1 ...
。