2011-07-25 18 views
1

これは愚かな問題だと思いますが、運が悪いのでこれを解決するために1日試しました。ネオンイントリンシックの浮動小数点との比較

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

Cでこの問題:

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

ので、最初のものは処理しませんが、他の意志、私はもみレーンiが0のを持っているし、他の1が結果を持っているレジスタを必要としています。

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

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

+0

あなたは** OpenCVのように、この質問にタグ付けされた私はなぜ**わからないんだけど、それもリモートでのOpenCVに接続しているようではありません。 – karlphillip

+1

申し訳ありません、あなたは正しいです、私はそれを削除しました – Darkmax

+0

** C ** **のタグを追加する方が良いです。 – karlphillip

答えて

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); 
+0

で満杯にすることができますビットごとの選択だけでなく、これは私のために働く。 – Darkmax

+0

はい; vbslも動作します。あなたはゼロのベクトルを持つ必要はありません。 –

0

私はNeonについてよく分かりませんが、ほとんどのSIMDアーキテクチャでは、これを比較してマスキング(ビット単位AND)します。あなたは通常これのために使用することができるマスクを生成する比較命令を使用します。このよう

+0

私は理解しているもののために浮動小数点で動作しないと思います。 – Darkmax

+0

すばらしいGoogle検索では、*機能していることを示唆しているようです。 http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=5229&view=next –

+0

ok私はビットが選択されたソリューションを持っていると思います。このメソッドはマスクと1つのマスクを持っている場合は2つのパラメータを受け取ります最初のパラメータに対応する数値を取得し、0の場合は2番目のパラメータに対応する数値を取るので、マスクを使用してフィルタを適用し、別のベクトルを0の – Darkmax

関連する問題