gpt4 book ai didi

c++ - g++,基于范围和向量化

转载 作者:行者123 更新时间:2023-11-30 00:53:19 24 4
gpt4 key购买 nike

考虑以下基于 C++ 11 循环的范围

for ( T k : j )
{
...
}

g++clang++ 优化标志可以加速编译代码吗?

我不是在谈论任何 for 循环,我只是在考虑这个新的 C++11 结构。

最佳答案

优化循环很少是关于优化实际的循环迭代代码(for ( T k : j ) 在这种情况下),而是关于优化循环中的内容。

现在,因为在这种情况下是 ...,所以不可能说,例如,展开循环是否有帮助,或者声明内联函数 [或简单地移动它们以便编译器可以看到它们并将它们放入内联],使用自动矢量化,或者可能在循环内使用完全不同的算法。

上面段落中的示例更详细一些:

  1. 展开循环 - 本质上是进行多次循环迭代,而无需返回到循环的开头。当循环内容非常小时,这是最有用的。有自动展开,由编译器执行展开,或者您可以手动展开代码,只需在每个循环迭代中执行四个项目,然后在每个循环变量更新中向前推进四个项目或在期间多次更新迭代器循环本身 [但这当然意味着不使用基于范围的 for 循环]。
  2. 内联函数 - 编译器将采用(通常是小的)函数并将它们放入循环本身,而不是进行调用。这节省了处理器调用代码中的另一个地方并返回所需的时间。大多数编译器只对编译期间对编译器“可见”的函数执行此操作 - 因此源代码必须位于同一源文件中,或者位于已编译源文件中包含的头文件中。
  3. 自动矢量化 - 使用 SSE、MMX 或 AVX 指令在一条指令中处理多个数据项(例如,一条 SSE 指令可以将四个 float 值添加到另外四个 float在一条指令中)。这比一次对单个数据项进行操作要快(大多数情况下,有时它没有任何好处,因为尝试组合不同的数据项然后在计算完成时整理出什么去哪里会带来额外的复杂性)。
  4. 选择不同的算法 - 通常有多种方法可以解决特定问题。根据您要实现的目标,for 循环 [无论哪种] 首先可能不是正确的解决方案,或者循环内的代码可能会使用更聪明的方法来计算/重新排列/不管它- 确实达到您需要的结果。

但是 ... 太模糊了,无法说明上述解决方案中的哪一个(如果有的话)可以改进您的代码。

关于c++ - g++,基于范围和向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688419/

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