英特尔 SIMD - 如何检查 __m256* 是不是包含任何非零值

Posted

技术标签:

【中文标题】英特尔 SIMD - 如何检查 __m256* 是不是包含任何非零值【英文标题】:Intel SIMD - How can I check if an __m256* contains any non-zero values英特尔 SIMD - 如何检查 __m256* 是否包含任何非零值 【发布时间】:2015-03-08 06:30:24 【问题描述】:

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

【问题讨论】:

【参考方案1】:

_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;

【讨论】:

以上是关于英特尔 SIMD - 如何检查 __m256* 是不是包含任何非零值的主要内容,如果未能解决你的问题,请参考以下文章

如何获得英特尔架构 SIMD __m128 的标志

C++:英特尔 SIMD 内部函数类成员的初始化

SIMD (AVX2) - 将 uint8_t 值加载到多个浮点 __m256 寄存器

g++ -O2 错误地优化了 SIMD 变量分配

SIMD,SSE,AVX - 掩码 8 浮动无符号字符? [复制]

SIMD:更通用的随机播放功能