C++求职面试问题越来越难,如何解决



我最近参加了一次面试,面试要求我乘以2个矩阵,这真的很容易。然后有人问我:

想象一下,当读取任何矩阵的一个值时,CPU会从右边得到4个相邻的值,你如何利用这个事实来提高性能?

起初,我想把每4个值保存在变量中,而不是读取A[I][j],我可以简单地检查变量,但这根本没有帮助,因为我们仍然在从内存中读取值,因此没有任何优势。。。

优化矩阵乘法没有单一的方法,只有一种方法。我不知道你的面试官期望的是相似的还是完全不同的。

该方法确实要求以特殊的方式存储矩阵(既不是行主矩阵也不是列主矩阵(,但对所有矩阵来说都是相同的方式,因此不需要在行主表示和列主表示之间切换(没有中间结果的转置(。

基本思想是将矩阵存储为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]

在内存中是连续的,因此它们被提取并存储在一起。

然后,您只需将矩阵按块相乘(一行块乘以一列块(。

你需要填充奇数大小的矩阵,但对于大矩阵来说,这并不太昂贵。

最新更新