首页 > 解决方案 > # bytes > 128: IMB-EXT 时英特尔 MPI 基准测试失败

问题描述

我刚刚在两台机器上安装了 Linux 和 Intel MPI:

(1) 相当老的(约 8 年)SuperMicro 服务器,有 24 个内核(Intel Xeon X7542 X 4)。32 GB 内存。操作系统:CentOS 7.5

(2) 新的 HP ProLiant DL380 服务器,具有 32 个内核(Intel Xeon Gold 6130 X 2)。64 GB 内存。操作系统:OpenSUSE Leap 15

安装操作系统和英特尔 MPI 后,我编译了英特尔 MPI 基准并运行它:

$ mpirun -np 4 ./IMB-EXT

令人惊讶的是,我在运行 IMB-EXT 和 IMB-RMA 时发现了相同的错误,尽管我有不同的操作系统和一切(甚至用于编译英特尔 MPI 基准测试的 GCC 版本也不同——在 CentOS 中,我使用了 GCC 6.5。 0,在 OpenSUSE 中,我使用了 GCC 7.3.1)。

在 CentOS 机器上,我得到:

#---------------------------------------------------
# Benchmarking Unidir_Put
# #processes = 2
# ( 2 additional processes waiting in MPI_Barrier)
#---------------------------------------------------
#
#    MODE: AGGREGATE
#
       #bytes #repetitions      t[usec]   Mbytes/sec
            0         1000         0.05         0.00
            4         1000        30.56         0.13
            8         1000        31.53         0.25
           16         1000        30.99         0.52
           32         1000        30.93         1.03
           64         1000        30.30         2.11
          128         1000        30.31         4.22

在 OpenSUSE 机器上,我得到

#---------------------------------------------------
# Benchmarking Unidir_Put
# #processes = 2
# ( 2 additional processes waiting in MPI_Barrier)
#---------------------------------------------------
#
#    MODE: AGGREGATE
#
       #bytes #repetitions      t[usec]   Mbytes/sec
            0         1000         0.04         0.00
            4         1000        14.40         0.28
            8         1000        14.04         0.57
           16         1000        14.10         1.13
           32         1000        13.96         2.29
           64         1000        13.98         4.58
          128         1000        14.08         9.09

当我不使用 mpirun 时(这意味着只有一个进程可以运行 IMB-EXT),基准运行通过,但 Unidir_Put 需要> = 2 个进程,所以没有太大帮助,我也发现函数使用 MPI_Put 和 MPI_Get 比我预期的要慢得多(根据我的经验)。此外,在 OpenSUSE 机器上使用 MVAPICH 也无济于事。输出是:

#---------------------------------------------------
# Benchmarking Unidir_Put
# #processes = 2
# ( 6 additional processes waiting in MPI_Barrier)
#---------------------------------------------------
#
#    MODE: AGGREGATE
#
       #bytes #repetitions      t[usec]   Mbytes/sec
            0         1000         0.03         0.00
            4         1000        17.37         0.23
            8         1000        17.08         0.47
           16         1000        17.23         0.93
           32         1000        17.56         1.82
           64         1000        17.06         3.75
          128         1000        17.20         7.44

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   PID 49213 RUNNING AT iron-0-1
=   EXIT CODE: 139
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11)
This typically refers to a problem with your application.
Please see the FAQ page for debugging suggestions

更新:我测试了OpenMPI,它顺利通过(虽然我的应用程序不推荐使用openmpi,我仍然不明白为什么Intel MPI或MVAPICH不起作用......)

#---------------------------------------------------
# Benchmarking Unidir_Put
# #processes = 2
# ( 2 additional processes waiting in MPI_Barrier)
#---------------------------------------------------
#
#    MODE: AGGREGATE
#
       #bytes #repetitions      t[usec]   Mbytes/sec
            0         1000         0.06         0.00
            4         1000         0.23        17.44
            8         1000         0.22        35.82
           16         1000         0.22        72.36
           32         1000         0.22       144.98
           64         1000         0.22       285.76
          128         1000         0.30       430.29
          256         1000         0.39       650.78
          512         1000         0.51      1008.31
         1024         1000         0.84      1214.42
         2048         1000         1.86      1100.29
         4096         1000         7.31       560.59
         8192         1000        15.24       537.67
        16384         1000        15.39      1064.82
        32768         1000        15.70      2086.51
        65536          640        12.31      5324.63
       131072          320        10.24     12795.03
       262144          160        12.49     20993.49
       524288           80        30.21     17356.93
      1048576           40        81.20     12913.67
      2097152           20       199.20     10527.72
      4194304           10       394.02     10644.77

在安装 MPI 或在这些服务器中安装操作系统时,我是否有可能遗漏一些东西?实际上,我认为操作系统是问题所在,但不知道从哪里开始......

非常感谢提前,

标签: parallel-processingmpiopenmpimvapich2intel-mpi

解决方案


尽管这个问题写得很好,但您并没有明确表示

  • 英特尔 MPI 基准测试(请添加标头)
  • 英特尔 MPI
  • 打开 MPI
  • MVAPICH
  • 支持的主机网络结构 - 用于每个 MPI 分发
  • 运行 MPI 基准测试时选择的结构
  • 编译设置

使用不同的主机、多个 Linux 发行版和编译器版本来调试这种故障可能非常困难。StackOverflow 上的远程调试更加困难。

首先确保再现性。情况似乎如此。我推荐的许多调试方法之一是降低整个系统的复杂性,测试较小的子系统并开始将责任转移给第三方。您可以用分发软件/软件包存储库或第三方(如 Conda)提供的软件包替换自编译的可执行文件。

英特尔最近开始通过 YUM/APT 存储库以及 Conda 和 PyPI 提供其库。我发现这对 HPC 集群甚至运行时/开发环境的可重复部署有很大帮助。我建议将它用于 CentOS 7.5。

适用于英特尔 MKL、英特尔 IPP、英特尔 DAAL 和英特尔® Python* 分发版(适用于 Linux*)的 YUM/APT 存储库:

Conda* 包/Anaconda Cloud* 支持(英特尔 MKL、英特尔 IPP、英特尔 DAAL、英特尔 Python 分发版):

使用 pip(英特尔 MKL、英特尔 IPP、英特尔 DAAL)从 Python 包索引 (PyPI) 安装

我对 OpenSUSE Leap 15 了解不多。


推荐阅读