数值内核的 CPU 基准测试

计算科学 线性求解器 稀疏矩阵 宠物 基准测试
2021-12-10 00:09:01

在线可用的 CPU 基准测试主要关注桌面应用程序/游戏,很少关注串行/并行数值内核,特别是稀疏内核(例如 MatMult)。一些基准测试,如 NAS/SciMark 存在,但很少被流行的基准测试站点在最新/最好的 CPU 上使用。

当涉及使用稀疏/密集数值库(如 PETSc/ScaLAPACK)的代码时,如何决定购买/使用哪台机器来实现多核性能?例如,我最好使用 AMD FX8350 或 Intel Core i7-3770K 作为我的桌面,或者我应该请求在基于 Xeon 或 Opteron 的集群上分配,特别是对于中小型(即少于 4000 个内核)类型的作业,其中一个有更多选择。

我从个人经验中知道,英特尔芯片在过去几年中的表现要好得多,但最新的 AMD 产品呢?

编辑:我对 PETSc 的 MatMult 内核(用于非结构化 FE 矩阵)特别感兴趣,有人告诉我它是内存绑定的。我认为使用所有内核的峰值 FLOPS 百分比性能会很有用。

3个回答

首先,稀疏直接与稀疏迭代完全不同。如果您对代码在做什么没有很好的理解,就无法可靠地预测性能。对于 sparse MatMultMatSolveMatSOR和类似的内核,您的算术强度不超过 1 flop/4 字节的内存带宽。同时,最新的多核芯片可以执行大约 5 次浮点数/字节。这意味着即使缓存被完美地重用,你也无法获得优于浮点峰值的这是一个硬障碍,任何“调整”都无法绕过。在实践中,订购是非常重要的1/20=5%您的矩阵,以便很好地重用缓存。如果选择重用性差的排序,实现的峰值会低几倍。在实践中,通过良好的排序和足够大的子域,PETSc 稀疏矩阵内核经常获得或更高的内存带宽峰值。查看 STREAM 基准以确定可实现的带宽。有些机器,例如 TACC 的 Ranger,无法实现超过的峰值带宽。80%50%

如果您求助于使用迭代方法求解的组装稀疏矩阵,那么购买内核绝对没有意义。购买内存带宽。我建议使用组装矩阵测试算法,然后在适当的时候切换到大多数未组装的方法(可能是无矩阵多重网格),如果你想获得高机器利用率。在许多情况下,更好的算法选择可以提供一个数量级的加速,以至于对次优方法进行微调是没有意义的。

在 SPEC CPU 2006 中执行稀疏矩阵向量的典型科学计算代码有一些基准,请参阅http://www.spec.org/cpu2006/特别是,该套件中的 447.dealII 基准测试源自 deal.II 库,并且大部分时间都花在您为工作负载描述的那种操作上。这样做的好处是您可以在 SPEC 数据库中查询此基准的峰值速率,以了解各种处理器(变体)在这一基准上的表现。过去 10 年中构建的几乎所有 CPU 都在该数据库中。

(免责声明:我是 447.dealII 的作者。)

原始基准确实与性能相关,但要真正了解什么是最适合您的特定问题,您需要在相关系统上分析您的代码。 恕我直言,如果不对您的代码进行一些实际的性能测试,就不可能权威地说。

也就是说,正如问题线程中所提到的,大多数矩阵/向量操作都受内存限制,并且相当依赖于许多因素,例如矩阵的结构、编译器如何优化内存访问、缓存命中、ram 延迟、操作系统愚蠢,名单还在继续。我认为如果不对相关系统进行实际测试,就很难做出任何实质性的主张。

正如您提到的,我对英特尔的硬件有类似的经验。尤其是在使用 icc 工具链时,因为它似乎真的知道如何编写使用底层金属全部功能的机器代码。