How to use NEON comparison (greater than or equal

2019-02-14 19:17发布

How to use the NEON comparison instructions in general?

Here is a case, I want to use, Greater-than-or-equal-to instruction?

Currently I have a,

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

}

In NEON, I would like to use x in the same way, just that x this time is a vector.

int32x4_t x;

...
...
...

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

}

1条回答
相关推荐>>
2楼-- · 2019-02-14 19:35

With SIMD it's not straightforward to go from a single scalar if/then to a test on multiple elements. Usually you want to test if any element is greater than or if all elements are greater than, and there will usually be different SIMD predicates for each case which you can put inside an if (...). I don't see anything like this in NEON though, so you may be out of luck.

Often though you want to take a different approach, since branches are usually not desirable in optimised code. Ideally you will want to use the result of a SIMD comparison as a mask for subsequent operations (e.g. select different values based on mask using bitwise operations).

查看更多
登录 后发表回答