首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环拆分性能问题

循环拆分性能问题
EN

Stack Overflow用户
提问于 2016-07-25 17:15:08
回答 1查看 141关注 0票数 2

我在GF(2)上实现了高斯消元法。我使用二维64位Integer-Array以行为主的表示形式存储Matrix (矩阵的行存储在连续的数组中)。我在矩阵的行上实现了高斯消元,方法如下:

其中( A )^i表示A的第i行。然后我意识到,如果我像下面这样在第5-6行拆分循环,我会获得略好的性能:

我希望得到稍微差一点的性能,因为我再次迭代了整个外部循环…有人对这种行为有什么解释吗?编译器是否在做一些棘手的优化工作,这更容易在拆分的变量上执行?(用g++ -O3编译)

(如果伪代码不能得到答案,我可以提供一个最小的代码示例)

EN

回答 1

Stack Overflow用户

发布于 2016-07-25 18:50:06

没有理由期望第二个解决方案的性能会更差--两种算法都在

,它们甚至有相同的常量:在第一个解决方案中,您的外部循环在

,在第二个中,你有两个循环

在实践中,您的第二个解决方案可能具有更好的CPU缓存特性,或者更适合于编译器优化。特别是,由于您的操作是在GF(2) / Z(2)上进行的,它们可以表示为单词上的二进制操作-这将导致很大的加速。根据您的实现(以及对n的约束),算法可能会优化为

最后。但是,如果不看一下您的代码,我们就无法真正判断:)。

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

https://stackoverflow.com/questions/38563860

复制
相关文章

相似问题

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