gpt4 book ai didi

c++ - 循环展开和循环平铺

转载 作者:IT老高 更新时间:2023-10-28 22:16:31 26 4
gpt4 key购买 nike

谁能告诉这两种优化技术是相同还是不同?

另外,这是程序员或编译器的责任吗?

最佳答案

这两种技术是不同的。参见 Loop unrolling 的描述和 Loop tiling .

循环展开是为了消除循环的开销。它(通常)仅对迭代次数很少且在编译时已知的相当小的循环有用。它主要由编译器完成。

在较早的时候,当计算机速度较慢且编译器更原始时,程序员会手动展开循环,但现在程序员不会这样做 - 除非可能是非常限制性的嵌入式系统。

循环平铺通常用于非常大的数据集。目的是:将一些数据加载到缓存中,并在分页一些新数据之前对其执行所有操作。

根据正在执行的操作和数据的内部组织,一个简单的循环可能会跳转到不同的数据页面,从而导致大量缓存未命中(和页面加载)。仔细规划执行顺序可以显着提高某些问题的运行时间。

虽然编译器可能会执行循环平铺,但有时程序员可能会手动执行此操作,并且可能比编译器做得更好。

一般来说,不要尝试进行这些类型的优化,因为它们会增加代码的大量复杂性(和错误),并且通常只能提供适度的性能提升。但是,如果您的代码很慢并且分析表明存在特定类型的瓶颈,则应考虑使用循环平铺之类的方法,这可能会带来很大的性能提升。

关于c++ - 循环展开和循环平铺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5444303/

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