Intel SIMD - 如何检查__m256 *是否包含任何非零值

时间:2015-03-08 06:30:24

标签: c++ simd intrinsics avx

我正在使用Microsoft Visual Studio编译器。我试图找出256位向量是否包含任何非零值。我尝试了res_simd = ! _mm256_testz_ps(*pSrc1, *pSrc1);,但它不起作用。

1 个答案:

答案 0 :(得分:5)

_mm256_testz_ps只测试符号位 - 为了测试,您需要与0进行比较,然后提取结果掩码,例如

__m256 vcmp = _mm256_cmp_ps(*pSrc1, _mm256_set1_ps(0.0f), _CMP_EQ_OQ);
int mask = _mm256_movemask_ps(vcmp);
bool any_nz = mask != 0xff;