我使用一个线程和 8 个线程对 Eigen SGEMM 操作进行了基准测试,我得到的是性能在 512x512 达到峰值,但在超过该大小时下降。我想知道这是否有任何具体原因可能与较大矩阵的复杂性有关?我在 Eigen 网站上查看了矩阵矩阵运算的基准,但没有看到任何类似的东西。
在 512x512 时,我的并行速度提高了 4 倍。但在 4096x4096 中,我的速度几乎快了 2 倍。我正在使用 openMP 进行并行处理,并将其降低到一个线程,我将 num_of_threads 设置为两个。
我使用一个线程和 8 个线程对 Eigen SGEMM 操作进行了基准测试,我得到的是性能在 512x512 达到峰值,但在超过该大小时下降。我想知道这是否有任何具体原因可能与较大矩阵的复杂性有关?我在 Eigen 网站上查看了矩阵矩阵运算的基准,但没有看到任何类似的东西。
在 512x512 时,我的并行速度提高了 4 倍。但在 4096x4096 中,我的速度几乎快了 2 倍。我正在使用 openMP 进行并行处理,并将其降低到一个线程,我将 num_of_threads 设置为两个。
您的结果表明,该算法主要受大矩阵大小的内存带宽限制。4Kx4K 矩阵(浮点数?)超过了普通人可用的任何 CPU 的缓存大小,而 512x512 可以轻松适应大多数现代 CPU 的 L3 缓存。
我使用包括 Eigen 在内的几个 BLAS 实现对矩阵乘法进行了一些测试。我已经在这里发布了结果。你可能会发现它很有用。