gpt4 book ai didi

c - 奇数维矩阵的矩阵乘法速度

转载 作者:行者123 更新时间:2023-12-05 01:27:26 24 4
gpt4 key购买 nike

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

这是我目前的尝试:

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

最佳答案

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

你应该发布代码,这里可能有一些好的想法来提高它的效率。

您可以通过对算法进行切片来提高性能:一次对行的一个子集计算叉积,然后对所有子集的结果进行累加。您将拥有 4 个嵌套的 for 循环,而不是 3 个嵌套的 for 循环,它们的乘法总数相同但顺序不同。

关于c - 奇数维矩阵的矩阵乘法速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com