gpt4 book ai didi

c++ - 仅当循环中更新的变量是本地变量时才优化计算

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:30 25 4
gpt4 key购买 nike

对于以下函数,经过优化的代码被向量化,并在寄存器中执行计算(返回值在eax中返回)。例如,生成的机器码在这里:https://godbolt.org/z/VQEBV4 .

int sum(int *arr, int n) {
int ret = 0;
for (int i = 0; i < n; i++)
ret += arr[i];
return ret;
}

但是,如果我将 ret 变量设置为全局变量(或类型为 int& 的参数),则不会使用矢量化,编译器会存储更新后的 ret 在每次迭代到内存中。机器码:https://godbolt.org/z/NAmX4t .

int ret = 0;

int sum(int *arr, int n) {
for (int i = 0; i < n; i++)
ret += arr[i];
return ret;
}

我不明白为什么在后一种情况下会阻止优化(寄存器中的矢量化/计算)。没有线程,甚至增量也不是原子执行的。此外,这种行为似乎在编译器(GCC、Clang、Intel)之间是一致的,所以我相信一定有一些原因。

最佳答案

如果 ret 不是局部的而是全局的,arr 可能是 ret 的别名,减少了优化的机会。

关于c++ - 仅当循环中更新的变量是本地变量时才优化计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54177320/

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