我正在调整我的 GEMM 代码并与 Eigen 和 MKL 进行比较。我有一个具有四个物理核心的系统。到目前为止,我一直使用 OpenMP 的默认线程数(我的系统上为 8 个)。我认为这至少与四个线程一样好。但是,我今天发现,如果我在一个大型密集矩阵 (1000x1000) 上运行 Eigen 和我自己的 GEMM 代码,我使用四个线程而不是八个线程可以获得更好的性能。效率从 45% 跃升至 65%。我认为这也可以在这个情节中看到 https://plafrim.bordeaux.inria.fr/doku.php?id=people:guenneba
差异是相当大的。但是,性能不太稳定。使用 Eigen 和我自己的 GEMM 代码,每次迭代的性能都会有所提高。我很惊讶超线程使性能变得如此糟糕。我想这不是一个问题。这是一个意想不到的观察结果,我希望能得到反馈。
我看到这里也建议不使用超线程。
如何加快 Eigen 库的矩阵乘积?
我确实有一个关于测量最大性能的问题。我现在要做的是运行 CPUz 并在运行 GEMM 代码时查看频率,然后在我的代码中使用该数字(在我使用的一个超频系统上为 4.3 GHz)。我可以相信所有线程的这个数字吗?我如何知道每个线程的频率以确定最大值?如何正确计算涡轮增压?