質問

これはばかげた問題だと思いますが、運がないのでこれを解決しようと一日を試みました。

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アーキテクチャでは、比較とマスキング(ビットワイズと)でこれを行うことになります。比較命令を使用して、通常、これに使用できるマスクを生成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top