我最近参加了一次求职面试,面试要求我将2个矩阵相乘,这真的很简单。然后我被问到:
想象一下,当读取任何矩阵的一个值时,CPU将从右侧获得4个相邻的值,您如何利用这一事实来提高性能?
一开始,我想将每4个值保存在变量中,而不是读取Ai,我可以简单地检查变量,但这根本没有帮助,因为我们仍然从内存中读取值,因此没有任何优势……
发布于 2021-07-06 19:09:38
没有单一的方法来优化矩阵乘法,这里有一种方法。我不知道你的面试官所期望的是相似的还是完全不同的。
该方法确实要求您以一种特殊的方式存储矩阵(既不是行主也不是列主),但所有矩阵的存储方式总是相同的,因此不需要在行主表示和列主表示之间切换(没有中间结果的转置)。
其基本思想是将矩阵存储为2x2元素块的2D数组。换句话说,你把它安排成
a[2*i+0][2*j+0]
a[2*i+0][2*j+1]
a[2*i+1][2*j+0]
a[2*i+1][2*j+1]
在内存中是连续的,因此它们被提取并存储在一起。
然后,您只需将矩阵按块相乘(一行块乘以一列块)。
您将需要填充奇数大小的矩阵,但对于大的矩阵,这并不是非常昂贵。
https://stackoverflow.com/questions/68248869
复制相似问题