2016-04-18 29 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); 

(注意_epi8固有可用於任何元件的寬度,因爲它只是從A上的逐字節的基礎根據掩模內容選擇和B)

+1

偉大的解決方案,更簡潔 – user1043761