performance - 矩阵乘法中的超线程和涡轮增压 - 使用超线程的性能更差

标签 performance intel matrix-multiplication eigen hyperthreading

我正在调整我的 GEMM 代码并与 Eigen 和 MKL 进行比较。我有一个有四个物理核心的系统。到目前为止,我一直使用 OpenMP 的默认线程数(在我的系统上为八个)。我假设这至少和四个线程一样好。然而,我今天发现,如果我在大型密集矩阵 (1000x1000) 上运行 Eigen 和我自己的 GEMM 代码,我会使用四个线程而不是八个线程获得更好的性能。效率从 45% 跃升至 65%。我认为这也可以在这个情节中看到 https://plafrim.bordeaux.inria.fr/doku.php?id=people:guenneba

差异非常大。但是,性能不太稳定。使用 Eigen 和我自己的 GEMM 代码,每次迭代时性能都会略有提高。我很惊讶超线程使性能变得如此糟糕。我想这不是一个问题。这是一个意想不到的观察结果,我希望能得到反馈。

我看到这里也建议不要使用超线程。
How to speed up Eigen library's matrix product?

我确实有一个关于衡量最大性能的问题。我现在要做的是运行 CPUz 并在运行 GEMM 代码时查看频率,然后在我的代码中使用该数字(在我使用的一个超频系统上为 4.3 GHz)。我可以相信所有线程的这个数字吗?我如何知道每个线程的频率以确定最大值?如何正确考虑涡轮增压?

最佳答案

超线程的目的是提高表现出高延迟的代码的 CPU 使用率。超线程通过同时处理两个线程从而具有更多的指令级并行性来掩盖这种延迟。

但是,编写良好的矩阵乘积内核表现出出色的指令级并行性,因此可以利用近 100% 的 CPU 资源。因此,没有第二个“ super ”线程的空间,其管理开销只会降低整体性能。

关于performance - 矩阵乘法中的超线程和涡轮增压 - 使用超线程的性能更差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105956/

相关文章:

java httpclient 4.x 解决问题的性能指南

javascript - 如何使用 javascript 检测可见( View 中)元素

android - RenderScript 在 x86 CPU 上执行速度较慢

multithreading - 锁定指令是否在弱顺序访问之间提供了障碍?

tensorflow - Keras/Tensorflow 中一组矩阵之间的成对距离

html - 将我的 CSS/JS/Sprite 嵌入我的单页 Web 应用程序会使其加载速度更快吗?

python - 提高 django 数据库查询的性能

c++ - C++中AES NI加密的正确方法

matrix - 如何在 Eigen 中展开矩阵?

c - 使用 Lapack 在 C 中求解矩阵