本文介绍了英特尔SIMD-如何检查__m256 *是否包含任何非零值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用Microsoft Visual Studio编译器.我试图找出一个256位向量是否包含任何非零值.我已经尝试过res_simd = ! _mm256_testz_ps(*pSrc1, *pSrc1);
,但是它不起作用.
I am using the Microsoft Visual Studio compiler. I am trying to find out if a 256 bit vector contains any non-zero values. I have tried res_simd = ! _mm256_testz_ps(*pSrc1, *pSrc1);
but it does not work.
推荐答案
_mm256_testz_ps
仅测试符号位-为了测试值,您需要与0比较然后提取生成的蒙版,例如
_mm256_testz_ps
just tests the sign bits - in order to test the values you'll need to compare against 0 and then extract the resulting mask, e.g.
__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;
这篇关于英特尔SIMD-如何检查__m256 *是否包含任何非零值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!