一般如何使用NEON比较指令?
这是一个案例,我想使用,大于或等于指令?
目前我有一个,
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?
{
....
}
答案 0 :(得分:3)
使用SIMD从单个标量if / then再到多个元素的测试并不简单。通常你想测试任何元素是否大于或者所有元素都大于,并且每个情况通常会有不同的SIMD谓词,你可以把它放在一个if (...)
。我在NEON看不到这样的事情,所以你可能运气不好。
通常,您希望采用不同的方法,因为在优化的代码中通常不需要分支。理想情况下,您需要使用SIMD比较的结果作为后续操作的掩码(例如,使用按位操作选择基于掩码的不同值)。