AVX内在_mm256_cmp_ps应该在真实时返回NaN吗?

时间:2016-05-08 12:33:21

标签: c++ simd avx

当我尝试:

__m256 a = _mm256_set_ps(1, 1, 1, 1, 1, 1, 1, 1);
__m256 b = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0);

__m256 c = _mm256_cmp_ps(a, b, _CMP_LT_OQ);

哪个< b我得到输出:

[0, 0, 0, 0, 0, 0, 0, 0]

但是在尝试时:

__m256 a = _mm256_set_ps(1, 1, 1, 1, 1, 1, 1, 1);
__m256 b = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0);

__m256 c = _mm256_cmp_ps(b, a, _CMP_LT_OQ);

__m256 a = _mm256_set_ps(1, 1, 1, 1, 1, 1, 1, 1);
__m256 b = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0);

__m256 c = _mm256_cmp_ps(a, b, _CMP_GT_OQ);

我得到了

[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]

这是预期的行为吗? https://software.intel.com/en-us/node/524077处的文档只是说它返回结果而没有指定。

1 个答案:

答案 0 :(得分:5)

是的,返回的值是一个位掩码:它设置为全零为false,或全部为true。当解释为32位浮点数时,32位的NaN编码正好。

Bitmasks非常有用,因为您可以使用它们来屏蔽某些结果,例如:当掩码(A & M) | (B & ~M)为真(全部为1)时,A将选择M的值,而当掩码为假(全为零)时,B的值将选择 col ['','','5',''] ['','8'] ['6','',''] ['7'] [] ['5'] 的值。