1

これはばかげた問題だと思いますが、運が悪かったので、これを解決するために1日試しました。

私は 4 つのベクトル (float32x4) のレジスタを持っており、そのうちのいくつかに何らかのプロセスを作成し、もう 1 つを 0 に設定したいと考えています。

たとえば、cのこの問題:

for (int i=1; i<=4; i++)
{
    float b = 4/i;
    if(b<=3)
        result += process(b);
}

最初のものは処理されませんが、他のものは処理されます。そのため、最初のレーンに 0 があり、もう 1 つのレーンに結果があるレジスタが必要です。

しかし、ネオン組み込みでこれを行う方法がわかりません。

vcltq_f32 があることは知っていますが、これを試してみましたが、結果はありませんでした。

4

2 に答える 2

3

このような:

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);
于 2011-07-25T21:25:32.297 に答える
0

Neon についてはよくわかりませんが、ほとんどの SIMD アーキテクチャでは、比較とマスキング (ビットごとの AND) によってこれを行います。比較命令を使用すると、通常これに使用できるマスクが生成されます。

于 2011-07-25T11:36:49.760 に答える