【问题标题】:Strong Scaling of Memory Bound Algorithm内存绑定算法的强扩展性
【发布时间】: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


【解决方案1】:

嗯,我猜你遇到的问题是由多种因素造成的。除了缓存效果之外,这里的主要问题与节点的架构密切相关。我的意思是你的节点应该至少有两个内存库,如果不是四个的话。现在,内存在所有可用内核之间共享,但内存访问的成本不同,具体取决于您将进程映射到内核的方式。

假设您的数据完全适合其中一个内存库。然后,映射到内存库是“本地”的内核的进程,即可以通过与处理器关联的相同内存控制器访问,可以直接访问内存并且访问成本很低。但是,映射到属于不同处理器的内核的其他进程在访问内存时会产生更高的成本,因为严格来说,这种访问不是本地的,而是“远程”的。这可能是问题的一部分。

【讨论】:

  • 我假设您所指的是 NUMA 问题,即如果单个主线程分配内存,则内存将在本地分配给该线程,因此对于许多从属线程来说它将是远程的.但是,考虑到在我的情况下,每个 MPI 进程都完全独立于所有其他进程来管理其内存,这个问题还会出现吗?
  • MPI 是一回事,你的机器架构是另一回事。当您的一个进程分配内存时,很可能实际使用的内存驻留在不同的内存库中(假设在分配内存时,本地内存库已经满了),因此访问此内存要昂贵得多。
猜你喜欢
  • 2019-02-23
  • 2015-08-18
  • 2012-12-21
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多