【问题标题】:OpenMPI 1.4.3 vs. Intel MPI Efficiency questionOpenMPI 1.4.3 与英特尔 MPI 效率问题
【发布时间】:2011-10-04 02:12:27
【问题描述】:

我注意到在 OpenMPI 上运行完全相同的代码所花费的时间比 Intel 多 50%。我使用如下语法编译运行:

Intel MPI 编译器:Redhat Fedora Core release 3 (Heidelberg),内核版本:Linux 2.6.9-1.667smp x86_64

 mpiicpc -o xxxx.cpp <filename> -lmpi

OpenMPI 1.4.3:(Centos 5.5 w/python 2.4.3,内核版本:Linux 2.6.18-194.el5 x86_64)

 mpiCC xxxx.cpp -o <filename

MPI 运行命令:

 mpirun -np 4 <filename> 

其他硬件规格

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 3
model name      : Intel(R) Xeon(TM) CPU 3.60GHz
stepping        : 4
cpu MHz         : 3591.062
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36    
clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lmconstant_tsc pni monitor ds_cpl est tm2   
 cid xtpr
 bogomips        : 7182.12
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

从上面的信息可以看出效率的问题吗?编译器标志是否对模拟效率有影响。如果是这样,哪些标志可能有助于检查是否包含在 Open MPI 中。包含 MPICH2 会提高使用 OpenMPI 运行模拟的效率吗?

【问题讨论】:

  • 什么是串口速度差?
  • 使用 intel 编译器的串行比 intel mpi 版本多花费 30% 的时间。
  • @Anycorn: gcc 在串口上花费的时间是 intel icpc 编译器的 3 倍。
  • 您提到 OpenMPI 库的运行时间比英特尔 MPI 长 50%。每次运行的绝对时间是多少?在运行进入 ~1000 秒范围之前,时间百分比差异不一定有意义。例如,10 秒和 15 秒是 50% 的变化……但最好将其视为“5 秒”。
  • 测试用例看起来是在单台机器上运行的。 非常很难用其他任何东西击败在英特尔芯片上运行的英特尔编译器/mpi。特别是,英特尔做了很多其他 MPI 实现可以访问的 memcpy 优化。此外,应用程序进行了哪些 MPI 调用?英特尔 MPI 可能在 MPI 调用、消息大小和共享内存接口方面比 OpenMPI 优化得更好。

标签: compiler-construction performance mpi parallel-processing


【解决方案1】:

OpenMPI 是否配置为使用与英特尔 MPI 编译器相同的编译器?您的 OpenMPI 可能使用 gcc,这解释了差异。如果 OpenMPI 使用与英特尔 MPI 编译器相同的编译器,请确保两者使用的编译器优化标志相同。

【讨论】:

  • @Powerrox:正如我向 Anycorn 指出的那样,gcc 编译器运行串行代码的时间是 intel icpc 编译器的 3 倍。谈到 MPI,英特尔 MPI 构建在 Redhat Fedora Core 第 3 版操作系统上,而 OpenMPI 使用 Centos 5.5 操作系统。此外,在英特尔 MPI 编译器的情况下,我使用了 mpiicpc -o xxx.cpp -lmpi,而当我使用 OpenMPI 时,我使用了 mpiCC -o file.cc 。我猜两者之间唯一共同的优化标志是“-o”。我没有在 OpenMPI 中包含 -lmpi。我的回答有意义吗。我仍在尝试解决这个问题,因为我们希望迁移到 OMPI..
  • @Ashmohan,gcc 和 icpc 或其他任何东西的运行时差异是正常的。您必须深入挖掘以确保两个编译器都使用相同级别的优化等。您还必须确保两个编译器完全支持您用来执行代码的体系结构。我不认为这是一个问题,但每个人都必须经历的练习。
  • @Ashmohan,您用于编译 MPI 代码的编译器只是设置和调用实际编译器的包装器。包装器本身会将某些优化标志传递给编译器。我很难描述 cmets 中的细节。我认为您对此(MPI)很陌生,您需要缩小您的问题范围和/或做更多阅读。抱歉帮不上忙。
猜你喜欢
  • 2019-07-08
  • 2015-04-25
  • 2017-10-18
  • 2020-07-31
  • 2017-06-03
  • 2011-12-20
  • 2017-01-22
  • 1970-01-01
  • 2020-12-23
相关资源
最近更新 更多