【发布时间】:2015-05-15 15:07:41
【问题描述】:
我正在 2 + 2(超线程)核心机器上测试并行程序。并行化是通过 MPI 例程实现的。
在评估并行代码的效率时,我必须将加速除以内核数还是将加速除以 MPI 进程数?
谁能帮帮我?
【问题讨论】:
-
请帮忙!!我很绝望!!! XD
标签: parallel-processing processing-efficiency
我正在 2 + 2(超线程)核心机器上测试并行程序。并行化是通过 MPI 例程实现的。
在评估并行代码的效率时,我必须将加速除以内核数还是将加速除以 MPI 进程数?
谁能帮帮我?
【问题讨论】:
标签: parallel-processing processing-efficiency
在某些情况下两者都有意义,因此这取决于您要衡量的内容。
例如,可以尝试使用 1、2、3 和 4 个 MPI 进程运行程序,并测量每次运行的加速。然后可以将测量结果绘制为 y 轴上的加速和 x 轴上的 MPI 进程数的图形,从而说明算法的可伸缩性(或不可伸缩性......)(假设仅使用例如两个 MPI 进程与在只有两个内核的充分利用的计算机上运行算法是一样的。
效率也是如此。
但这种推理仅在 MPI 进程数小于或等于您拥有的物理内核数时才有效。例如,如果您尝试在 4 核机器上使用 5 个 MPI 进程,您可能不会获得与在 5 核机器上相同的加速,因此这可能无法衡量您想要的 - 至少不是计算绑定问题。
同样是为了效率。
因此,如果您的 MPI 进程多于物理内核,那么谈论与物理内核数量相关的加速和效率是有意义的(至少就我所见而言)。例如,在上面的 4 核机器示例上继续 5 个 MPI 进程:假设与 4 个 MPI 进程相比,使用 5 个 MPI 进程(例如,因为 MPI 进程有时会阻塞 IO)获得(仅)一些改进的加速,那么 MPI 进程数量的效率会下降,但物理核心数量的效率会上升。所以在这种情况下,使用 5 个 MPI 进程会比 4 个更好,即使 MPI 进程数量的效率会更低(与使用 4 个 MPI 进程相比)。
当然,与往常一样,如果您提供了更多关于您正在尝试做什么的信息,那么回答起来会更容易。
【讨论】:
据我了解,您的问题出在公式中: 效率(p) = time_parallel(p) / p。 这里的“p”是您执行它的 MPI 进程的数量。正如 cic 所提到的,程序员的责任是他有足够的内核来匹配 MPI 进程的数量。重复一遍,如果您只有 2 个内核并使用 5 个 MPI 进程运行,那么您的效率结果是错误的。同样,如果您有一台 8 核机器并使用 2 个 MPI 进程运行您的代码,您的 "p" = 2
【讨论】:
我认为正确的答案是 p 始终是处理器/内核的数量,因为效率降低了您的代码性能如何趋向于理想值。所以效率的一般公式是
E=your_performance/best_performance
最佳速度(理想情况)是处理器/内核的数量 p。
【讨论】: