什么是比较两个4x64位整数AVX向量的最有效方法,使它们满足<=条件。
根据英特尔指令集手册,我们有以下内容:
_mm256_cmpgt_epi64(__m256i a, __m256i b) = a > b
_mm256_cmpeq_epi64(__m256i a, __m256i b) = a == b
用于比较操作。
以及以下内容:
_mm256_and_si256(__m256i a, __m256i b) = a & b
_mm256_andnot_si256(__m256i a, __m256i b) = ~a & b
_mm256_or_si256(__m256i a, __m256i b) = a | b
_mm256_xor_si256(__m256i a, __m256i b) = a ^ b
用于逻辑操作。
我的方法是:
// check = ( a <= b ) = ~(a > b) & 0xF..F
__m256i a = ...
__m256i b = ...
__m256i tmp = _mm256_cmpgt_epi64(a, b)
__m256i check = _mm256_andnot_si256(tmp, _mm256_set1_epi64x(-1))
根据英特尔指令集手册,我们有以下内容:
_mm256_cmpgt_epi64(__m256i a, __m256i b) = a > b
_mm256_cmpeq_epi64(__m256i a, __m256i b) = a == b
用于比较操作。
以及以下内容:
_mm256_and_si256(__m256i a, __m256i b) = a & b
_mm256_andnot_si256(__m256i a, __m256i b) = ~a & b
_mm256_or_si256(__m256i a, __m256i b) = a | b
_mm256_xor_si256(__m256i a, __m256i b) = a ^ b
用于逻辑操作。
我的方法是:
// check = ( a <= b ) = ~(a > b) & 0xF..F
__m256i a = ...
__m256i b = ...
__m256i tmp = _mm256_cmpgt_epi64(a, b)
__m256i check = _mm256_andnot_si256(tmp, _mm256_set1_epi64x(-1))
0xF..F
让我感到困扰。 - user2399267......seems good