parallel-processing - # 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 或在这些服务器中安装操作系统时,我是否有可能遗漏一些东西?实际上,我认为操作系统是问题所在,但不知道从哪里开始......
非常感谢提前,
宰
解决方案
尽管这个问题写得很好,但您并没有明确表示
- 英特尔 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 了解不多。
推荐阅读
- c++ - 为什么 char *s = (char*)tag.c_str(); 当标签是字符串时是错误的
- swift - 在 UI 测试期间未能阻止系统休眠。错误代码:-536870211
- reactjs - TestCafe 是否支持像 Jest 这样的快照测试?
- mapbox - Mapbox gl js - 基于多个标准的自定义图标
- google-apps-script - 允许未经授权的用户运行脚本
- html - 在 Firefox 中设置按钮的奇怪行为
- c# - C# DateTimeOffset LocalDateTime 与 ToLocalTime
- amazon-web-services - 用于嵌入式设备的 C 语言 WebRTC
- python - 试图调用中断参数。我正在尝试使用选项 5 退出程序,这是我从循环中的中断值
- java - JSOUP 执行意外停止