Neon Intrinsicsのフロートとの比較
-
25-10-2019 - |
質問
これはばかげた問題だと思いますが、運がないのでこれを解決しようと一日を試みました。
4つのベクトル(float32x4)の登録があり、それらのいくつかにプロセスを作成し、もう1つは0に設定したいと思います。
たとえば、Cのこの問題:
for (int i=1; i<=4; i++)
{
float b = 4/i;
if(b<=3)
result += process(b);
}
したがって、最初のものは処理されませんが、もう1つは処理されるため、私には0があり、もう1つのレーンがあるFIRSレーンに結果が得られるレジスタが必要です。
しかし、私はネオン・インプリストニクスでこれを行う方法を知りません。
VCLTQ_F32があることは知っていますが、これで試してみましたが、結果はありませんでした。
解決
このような:
const float32x4_t vector_3 = vdupq_n_f32(3.0f);
uint32x4_t mask = vcleq_f32(vector_b, vector_3);
vector_b = (float32x4_t)vandq_u32((uint32x4_t)vector_b, mask);
他のヒント
ネオンについてはあまり知りませんが、ほとんどのSIMDアーキテクチャでは、比較とマスキング(ビットワイズと)でこれを行うことになります。比較命令を使用して、通常、これに使用できるマスクを生成します。
所属していません StackOverflow