首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++求职面试问题变得更难了,该如何解决?

C++求职面试问题变得更难了,该如何解决?
EN

Stack Overflow用户
提问于 2021-07-05 05:22:56
回答 1查看 148关注 0票数 1

我最近参加了一次求职面试,面试要求我将2个矩阵相乘,这真的很简单。然后我被问到:

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

一开始,我想将每4个值保存在变量中,而不是读取Ai,我可以简单地检查变量,但这根本没有帮助,因为我们仍然从内存中读取值,因此没有任何优势……

EN

回答 1

Stack Overflow用户

发布于 2021-07-06 19:09:38

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

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

其基本思想是将矩阵存储为2x2元素块的2D数组。换句话说,你把它安排成

代码语言:javascript
运行
复制
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]

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

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

您将需要填充奇数大小的矩阵,但对于大的矩阵,这并不是非常昂贵。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68248869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档