在 AMD ThreadRipper

问题描述

情况是:

  • 在 32 核 AMD ThreadRipper 3970X、4400 MHz、Castle Peak cpu 上的多个实例中启动同一个本机、独立(MFC、SDI)应用程序
  • 每个实例在一个工作线程中执行其主要工作负载(神经网络计算),并在主要两个其他线程(脚本和 GUI/UI 线程)中使用最少的额外 cpu 负载
  • 所有实例都基于在所有实例中同时运行的相同应用程序脚本执行相同类型的工作。工作共享基于实例处理的不同输入文件
  • 实例不产生任何图形工作负载,实际上它们都最小化运行
  • 实例不相互通信
  • 每个实例都会持续计算其性能(根据每次处理的工作量)。
  • 实例不会以任何重要的方式访问硬盘。只需在几行文本文件中每 10 秒报告一次性能报告。

问题来了:

  • 当启动超过 10 个实例时,单个实例的性能突然大幅下降,因此启动更多实例导致整体计算性能不再提高
  • 整体 cpu 负载不再增加,运行的实例越多,单个内核的使用量越来越少
  • 低于 10 个实例,一切都可以很好地扩展
  • 在内核较少的机器上(在多台 2、4 和 8 核的机器上尝试过),一切都很好地扩展,并且当有足够多的实例正在运行时,cpu 最终会 100% 忙碌
  • 每个实例在启动时分配大约 3.2 MB 的 RAM,大约为 3.2 MB。 8.5 MB 加载文件且忙碌时

--> 知道这里的限制因素是什么,或者我可以尝试找出什么? 我的主要想法是围绕处理器缓存。 ThreadRipper 拥有 128 MB 的 L3 缓存,由所有内核共享。一旦 Cache 被大约 10 个实例吃掉,这可能会降低性能,因为内核必须访问外部 RAM,对吗?

然而,内核数少于 ThreadRipper 的机器能够执行与 ThreadRipper 相同的每个内核的工作量。尽管它们的每核 Cache 比 ThreadRipper 少得多,甚至一个实例也会吃掉它们所有的 L3 核心。

附加问题:应用程序静态链接到 MFC。如果我动态链接它对缓存管理/使用是否有益?我已经尝试过,但仍然收到许多链接错误,因为还包含多个其他库。

非常感谢所有提示/想法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)