【发布时间】:2014-04-22 07:53:04
【问题描述】:
对于内存绑定算法,我得到了以下强大的缩放曲线:
一些备注:
- 基准测试在具有四个四核 AMD Opteron™ 8356 处理器的节点上运行。
- 虚线表示理论上可能的加速,实线表示实验观察到的加速。
- 进程均匀分布在套接字上,即第一个进程在套接字 1、核心 1 上运行,第二个进程在套接字 2、核心 1 上运行……、第五个进程在套接字 1、核心 2 上运行…… .
- 该算法的 FLOP 计数为 0,因此除了一些整数算术之外,绝对没有什么要计算的。
显然,经过四个过程后,缩放比例落后于理论上的最优值。我的解释四是每个插槽只有一个内存通道。因此,硬件中的并行度只有 min(p, 4),而不是处理器数量 p。我们仍然观察到加速 > 4,因为单个进程无法充分利用套接字的带宽,因为它还花费一些时间来计算内存地址和内容。
你认为这是一个合理的解释吗?如果您更正一些小细节,我也非常欢迎,因为我即将写一份报告,不想自欺欺人。特别是,我不确定加速比 > 4 的解释。毕竟,新内存地址的计算可以与旧内存地址的获取同时发生,那么为什么单个进程不能使用全部内存带宽?
【问题讨论】:
-
如果没有其他详细信息,很难准确判断。您的代码是令人尴尬的并行还是使用点对点和/或集体通信?它是否重叠计算和通信?您的节点上安装了多少内存?给定固定的问题大小,需要多少内存才能解决?你的固定问题大小是多少?每个控制器的内存带宽是多少?您的处理器是否启用了 SMT(同时多线程)?如果是,每个核心有多少个线程?您的解释可能是答案的一部分,但您需要定量回答,而不是定性回答。
-
代码是令人尴尬的并行。根本没有交流。我有 64 GB 的内存,其中我使用了大约 5 GB。关于内存带宽,我实际上不知道在哪里寻找那个数字。它是芯片、主板、内存单元的属性,还是三者都有? (AMD 产品描述报告“集成内存控制器速度”为 2 GHz,但这如何转化为 BW?)
-
由于我有四个四核,我假设我有 4x4=16 个独立的处理单元。会在这 16 个单元的级别上找到 SMT(即硬件并行度甚至 > 16),或者您的意思是 SMT 是否每个单个四核可以真正容纳 4 个独立的执行线程?
-
hwloc库中的lstopo(hwloc-ls) 之类的工具(与 Open MPI 一起提供)可以帮助解决 Massimo 的问题。如果没有可用的lstopo,解析(手动)cat /proc/cpuinfo的输出也可以解决问题。 -
很遗憾,
hwloc不可用。此外,在其文档中,我没有看到它可以报告内存带宽的声明。/proc/cpuinfo也是如此:我确实在那里找到了很多有趣的信息,比如 CPU 频率或缓存大小,但不是内存带宽。
标签: memory parallel-processing mpi