如何提升程序抢占内存带宽的能力?

2021-03-07 12:09:33 +08:00
 xuegy

本人是做科学计算的,简单来说就是解几百万几千万的大型稀疏矩阵。计算的性质决定了 Cache 命中率不会高。实际使用中,CPU 几乎很难达到瓶颈,运行速度基本与系统总内存带宽成正比。

最近在用超算的时候发现一个非常棘手的问题:内存带宽抢不过那些炼丹的。例如一台双路服务器有 24 个核,实际分配是 22 个核心给 CPU 任务,2 个核心给 GPU 任务。然而炼丹的抢内存带宽效率奇高。假如那台服务器碰巧有人在炼丹,我的计算速度几乎会减半,也就是说我用 22 个核心抢占内存带宽的速度和炼丹的 2 个核心差不多。但是超算的“价格”是按 CPU 核心 x 时间计算的,我消耗了 22 份的资源却只得到了 12 份的性能,实在是不太公平。

我这里没有贬低炼丹的意思,GPU 计算本身没有问题,我只是想提升自己程序抢占内存带宽的能力,得到我付出的“价格”应得的性能。

7579 次点击
所在节点    程序员
61 条回复
f165af34d4830eeb
2021-03-07 14:14:30 +08:00
@xuegy 我觉得你还是和老板商量下吧,没必要帮老板省经费的,除非你们组有别的地方要花钱。隔壁组单机八路 3080 快把我馋哭了,有钱真好...
xuegy
2021-03-07 14:19:00 +08:00
@f165af34d4830eeb 这么跟你说吧,我们组写 proposal 没花一分钱从 NSF 白嫖了五百万 SU ( 500 万核心*小时),这些东西要是自己买,别说机器价格,电费就得多少....
f165af34d4830eeb
2021-03-07 14:26:21 +08:00
@xuegy 真有这个运算量不应该沦落到和炼丹佬抢机时啊...但是你们这个和炼丹的抢内存确实没啥好办法,你又不能把对方踢掉,对方也不愿意让出机时,这个问题估计还得靠老板出面解决。
xuegy
2021-03-07 14:29:44 +08:00
@xuegy 你还是低估了炼丹佬,虽然炼一次只占一个核但架不住量大啊。我随便敲一下 squeue,好几十屏都是只开单核的 GPU 任务。
Lemeng
2021-03-07 14:36:25 +08:00
是后台程序的意思吧
Sasasu
2021-03-07 14:40:26 +08:00
用 GPU 走 DMA 和中断抢内存带宽,优先级就是比普通的程序高.....
czfy
2021-03-07 14:45:06 +08:00
@xuegy Xeon 换 EPYC 大潮可以展开讲讲吗? Intel 在服务器端也要守不住了?大快人心
xuegy
2021-03-07 14:50:33 +08:00
@czfy 我不知道国内是什么情况,反正美帝这两年只要 Intel 超算退役了,基本新换上来的都是 EPYC 。因为 AMD 核心数量多好几倍,跑那些内存占用小的,L3 就能装满的 benchmark,速度确实起飞。跑分好看自然可以忽悠学校和研究所换平台。但实际上对于我们这种 cache 几乎必定 miss 的程序来说,Intel 6 通道 VS AMD 8 通道,性能提升真的不大。
0TSH60F7J2rVkg8t
2021-03-07 15:07:35 +08:00
@czfy 多谢指教
zwy100e72
2021-03-07 17:21:56 +08:00
有没有可能优化内存访问效率,提升一下 cache 命中率呢?

毕竟顺序读取的访问效率就是比随机访问效率高 (cpu prefetch)
Knights
2021-03-07 17:23:33 +08:00
技术上不好解决啊,让管理员按时间段划分使用呗
xuegy
2021-03-07 17:33:20 +08:00
@zwy100e72 如果你有什么方法能让超大稀疏矩阵命中 cache,那大概可以拿图灵奖了。
abbottcn
2021-03-07 17:49:03 +08:00
诸如 slurm 之类的调度器,似乎只能限制内存容量,而不能限定带宽。slurm 通过 cgroup 做限定。

另外说个笑话。一个生物课题组计算出了问题,找我解决。我一看,双路机器,两张 GPU,却只有两个 8GB 内存条,计算基本都是内存不足而挂掉的。他们以为,GPU 计算,和 CPU 内存没啥关系。要是再无知点,估计都能用一个内存条。
xuegy
2021-03-07 17:55:52 +08:00
@abbottcn 就算不把插槽插满,也要把通道插满。这是对双路 CPU 最基本的尊重。
abbottcn
2021-03-07 18:02:56 +08:00
@xuegy 你还没看过,四路 8 系列处理器服务器,用四个 64GB 内存条的。
常见的是,双路机器,8 系列处理器,用四个或者八个内存条的。

来问我,我都说,8 系列处理器,双路,不用 12 个内存条的,基本是傻子。同理,四路机器,v3v4 处理器,用 16 个内存条,8 系列,用 24 个内存条呀。高校一窝蜂做计算的很多,买的机器配置搞笑的特别多。
xuegy
2021-03-07 18:12:27 +08:00
@abbottcn 我们组中东土豪自费攒的电脑,内存条倒是插满了,愣是不知道去 BIOS 开一下 XMP,DDR4 3600 跑在 2133,损失了快一半带宽...
czfy
2021-03-07 18:30:03 +08:00
@xuegy 性能提升不大,至少有提升,但价格会有变吧?
skies457
2021-03-07 18:34:36 +08:00
或许可以也用 GPU 解矩阵....
nlzy
2021-03-07 19:33:04 +08:00
打不过就加入,你也用 GPU 解矩阵
ziseyinzi
2021-03-07 19:50:36 +08:00
还没听说过主机管理员能管理内存带宽的,甚至带宽占用都不知道怎么看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/759249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX