本文介绍了英特尔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 *是否包含任何非零值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-15 23:45