Arm 如何使用霓虹灯比较(大于或等于)指令?

Arm 如何使用霓虹灯比较(大于或等于)指令?,arm,simd,intrinsics,neon,cortex-a8,Arm,Simd,Intrinsics,Neon,Cortex A8,通常如何使用霓虹灯比较说明 这里有一个案例,我想用,大于等于指令 现在我有一个 int x; ... ... ... if(x >= 0) { .... } 在NEON中,我想以同样的方式使用x,只是这次x是一个向量 int32x4_t x; ... ... ... if(vcgeq_s32(x, vdupq_n_s32(0))) // Whats the best way to achieve this effect? { .... } 对于SIMD,从单个标量if/then

通常如何使用霓虹灯比较说明

这里有一个案例,我想用,大于等于指令

现在我有一个

int x;
...
...
...
if(x >= 0)
{
....

}
在NEON中,我想以同样的方式使用x,只是这次x是一个向量

int32x4_t x;

...
...
...

if(vcgeq_s32(x, vdupq_n_s32(0))) // Whats the best way to achieve this effect?
{
....

}

对于SIMD,从单个标量if/then到多个元素上的测试并不简单。通常,您需要测试是否有任何元素大于或所有元素都大于,并且对于每种情况,通常会有不同的SIMD谓词,您可以将它们放入
if(…)
中。不过,我在霓虹灯中看不到类似的东西,所以你可能运气不好


通常,尽管您希望采用不同的方法,但在优化代码中通常不需要分支。理想情况下,您将希望使用SIMD比较的结果作为后续操作的掩码(例如,根据掩码使用按位操作选择不同的值)。

Paul,我修改了算法,现在我已经去掉了分支条件,因此如果(…)我不需要这些条件条件并使用SIMD简单地执行直接算术运算