【发布时间】:2014-11-17 15:16:26
【问题描述】:
我遇到了 OpenMP 和 MPI 执行时间问题。当我选择 4 线程 (OMP) 或 4 进程 (MPI) 时,我的执行时间比串行代码慢。
这两个脚本在其他机器上都有正确的计时,并且都使用 gettimeofday() 函数进行计时。下面是从 1-8 个线程/进程执行的两个脚本的屏幕截图:
RAM 未超过其限制,并且磁盘在执行期间不忙。该计算机托管 Intel i5 2500k(Stock 未超频)并在 Linux Mint 17 x64 上运行。
如前所述,这两个程序在其他机器上产生正确的计时,所以我认为这个问题与 cpu 亲和力和操作系统有关。
以前有人遇到过这个问题吗?
编辑 1:
在 MPI 执行中使用参数“bind-to-core”时,运行时间显着增加,但仍比串行慢得多:
【问题讨论】:
-
该程序到底需要什么?数据处理?这真的取决于,因为如果你的程序真的饱和,更多的线程不会有利于性能,甚至会产生上下文切换的开销。似乎在 3 个线程/进程之后,您产生的开销大于获得的开销。你在 4 时有一个峰值,但没有看到一些代码,可能没有人可以帮助你,这真的很奇怪。
-
开销没有问题,因为在其他机器上,由于 4 个线程/procs 后的开销,我得到了性能下降(在每个核心比率 1 个线程/Proc 时性能最佳。两个程序都采用开始时的图像,应用模糊算法,然后在结束时输出新图像。计时仅在算法上完成,因此由于 I/O 而没有计时开销。我会粘贴代码,但我不确定哪些部分由于每个脚本的长度而添加
-
工作是如何划分的?如果将工作分为四种方式,可能会产生一些奇怪的副作用。我无法想象这真的是硬件问题。也许尝试从 U 盘运行不同的 linux 版本,然后在同一台机器上重试
-
在 MPI 脚本中,proc 被动态放入购物车网格中,因此没有问题。在 OMP 脚本中。并行性是通过#pragma omp for 循环实现的,因此工作将被平均分配(我尝试了许多块大小也无济于事)。我发现的一些有趣的事情是 - 如果我在 mpi 脚本上提供参数 -bind-to-cpu,4 procs 的时间仍然很慢但明显更快(~5 秒)
标签: c mpi openmp intel linux-mint