如何使用NEON比较(大于或等于)指令?

Hag*_*ble 5 arm simd intrinsics neon cortex-a8

一般如何使用 NEON 比较指令?

这是一个案例,我想使用大于或等于指令?

目前我有一个,

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

}
Run Code Online (Sandbox Code Playgroud)

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

int32x4_t x;

...
...
...

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

}
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 4

使用 SIMD,从单个标量 if/then 转变为对多个元素进行测试并不简单。通常您想要测试是否有任何元素大于或所有元素是否大于,并且每种情况通常会有不同的 SIMD 谓词,您可以将其放入if (...). 不过我在 NEON 中没有看到类似的东西,所以你可能不走运。

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

  • Paul,我修改了我的算法,现在我已经摆脱了分支条件,所以我不需要这些 if (...) 条件,只需使用 SIMD 进行直接算术运算。 (2认同)