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

标签 arm simd intrinsics neon cortex-a8

一般如何使用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?
{
....

}

最佳答案

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

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

关于arm - 如何使用 NEON 比较(大于或等于)指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788380/

相关文章:

c - 如何使用 NEON 优化 a[i] = b[c[i]]

c++ - double 型上的 SSE vector 运算

c++ - 错误 : '_mm512_loadu_epi64' was not declared in this scope

c++ - CPUID 的内在信息之类的信息?

android - 是否可以在非 root 的 android 手机上运行 native arm 二进制文件?

linux - 交叉编译 gsoap 2.8。 ARM

c - 关于交叉编译的 c 中内置函数的警告

c++ - 将 int64_t 移动到 AVX2 __m256i vector 的高四字

x86 - _mm_cmpistri 的模式 12

c++ SSE SIMD框架