2016-04-18 14 views
1

私は、AVX2値の特定の条件に基づいてAVX2定数を選択するための分岐のない方法を探しています。条件付きでAVX2で一定値を選択

私が今やっている何のために擬似コード:

condition = _mm256_cmp_gt(value, limit); 
result = _mm256_or(_mm256_and(condition, constant_a), 
        _mm256_andnot(condition, constant_b)); 

はこれよりさらに効率的なものはありますか?

+0

試し'#include __m256 f(__m256 x、__ m256 y、__ m256 z、__ m256 t){return(x

答えて

3

"ブレンド"命令を使用できます。 _mm256_blendv_epi8

condition = _mm256_cmpgt_epi32(value, limit); 
result = _mm256_blendv_epi8 (constant_a, constant_b, condition); 

(それだけマスク内容に応じてバイト単位でA及びBから選択するので固有_epi8は、任意の要素の幅のために使用することができることに留意されたい)

+1

大きな解決策、はるかに簡潔です – user1043761