繁体   English   中英

奇维矩阵的矩阵乘法速度

[英]matrix multiplication speed of odd dimensional matrices

我试图理解为什么N=63, 127, 255, 511, 1023, 2047 63,123,255,511,1023,2047的方形NxN大小矩阵的矩阵乘法比N=63, 127, 255, 511, 1023, 2047 64,128,256,512,1024,2048的矩阵乘法更快的问题N=64, 128, 256, 512, 1024, 2048.

这是我到目前为止的尝试:

我已经运行了perf指令,它给出了我有多少次命中和命中的百分比以及访问主内存需要多少次。 通常,在N=2^k的情况下,乘法比我具有N=2^k-1时慢,因此我具有更少的GFLOPS。 我想也许它与块大小和所有内容存储在缓存中的集合有关,但是我不能再进一步了。我的代码是用c实现的,如果这与此有关(我认为它没有't)和cpu是Intel Xeon Processor E5620 任何帮助,将不胜感激

如果矩阵行之间的距离是2的幂,则当您访问每个叉积的所有行中的相同列时,执行内积以计算单个单元格值时缓存冲突的可能性非常高。 高速缓存通常使用相同的低位地址位保持2,4或8个不同的行。 在64x64矩阵上,可能会发生冲突。 有多大可能取决于缓存大小,缓存架构和用于矩阵乘法的实际算法。

您应该发布代码,这里可能有很好的想法来提高效率。

您可以通过切片算法来提高性能:一次使用行的子集计算交叉产品,并在所有子集上累计结果。 而不是3个嵌套的for循环,你将有4个嵌套for循环,具有相同的乘法总数,但顺序不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM