4

一般的な 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?
{
....

}
4

1 に答える 1

3

SIMD では、単一のスカラー if/then から複数の要素のテストに移行するのは簡単ではありません。通常、いずれかの要素がより大きいかどうか、またはすべての要素がより大きいかどうかをテストする必要があり、通常は、 内に配置できるケースごとに異なる SIMD 述語がありますif (...)。ただし、NEON ではこのようなものは見られないので、運が悪いかもしれません。

分岐は通常、最適化されたコードでは望ましくないため、別のアプローチを取りたいと思うことがよくあります。理想的には、SIMD 比較の結果を後続の操作のマスクとして使用することをお勧めします (たとえば、ビット演算を使用してマスクに基づいて異なる値を選択します)。

于 2010-09-25T10:12:35.020 に答える