【问题标题】:How does Open MPI implement datatype conversion?Open MPI如何实现数据类型转换?
【发布时间】:2019-07-16 13:29:36
【问题描述】:

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

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

【问题讨论】:

    标签: mpi communication openmpi


    【解决方案1】:

    如果您想在异构集群上运行 Open MPI 应用程序,您必须configure --enable-heterogeneous(默认情况下禁用)。请记住,这应该是可行的,但它经过了轻微的测试,主要是因为缺乏兴趣/真实用例。 FWIW,IBM Power 现在是小端,富士通正在从 Sparc 转移到 ARM 的 HPC,所以几乎所有的 HPC 处理器都是(或很快将是)小端。

    Open MPI 使用转换器(请参阅opal/datatype/opal_convertor.h)在发送前打包数据,并在收到后解包。 数据以当前的字节顺序打包。如果发送方具有不同的字节序,则由接收方执行数据转换(例如交换字节)。

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

    【讨论】:

    • 感谢您的回答。我不是在异构环境中工作,只是对这部分感到好奇。无论如何,我想这不再是当今 HPC 的导入问题了。
    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2017-03-14
    • 2012-10-17
    • 2012-02-11
    • 2018-11-30
    相关资源
    最近更新 更多