views:

49

answers:

1

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?
{
....

}
+3  A: 

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).

Paul R
Paul, I modified my algorithm, now I have got rid of the branch conditions, so I don't need these if (...) conditions and simply do direct arithmetic operations using SIMD.
vikramtheone