gpt4 book ai didi

c - 如何避免if语句?因为编译器无法将其优化为 simd

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:29 25 4
gpt4 key购买 nike

在vs2012中,编译器可以自动将for循环优化为SIMD汇编语句。但是当 for 循环中有 if 语句时,编译器无法对其进行优化,就像:

for(int i=0; i<10000; i++)
{
if(a[i]<1)
{
a[i]=0;
}
}

有没有办法替换if语句,让编译器自动优化它变成 simd 代码?

最佳答案

好吧,你可以尝试这样的诡计:

for(int i=0; i<10000; i++)
a[i] = a[i] * (a[i] >= 1);

但是你应该意识到一些事情。

首先,它可能最终仍然无法使用 SIMD。这将取决于编译器及其智能程度。

其次,它可能最终会变得更慢,特别是因为您正在对数组中的每个元素执行计算和接触。这对于示例来说不会太糟糕,但是,如果您的计算更复杂,那可能会造成麻烦。

第三,如果那您的真实代码,SIMD 对于简单计算和最小循环计数(10,000 并不是那么多)真的不会有太大帮助。

关于c - 如何避免if语句?因为编译器无法将其优化为 simd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18630579/

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