NAN 的 SSE 比较 returns 向量
SSE comparison returns vector of NANs
我正在尝试这样的事情:
__m128 cA = _mm_set_ps1(-2.0f);
__m128 cB = _mm_set_ps1(2.0f);
__m128 df = _mm_cmpgt_ps(cA, cB);
在这种情况下 df
returns 带零。
但如果我这样做:
__m128 cA = _mm_set_ps1(2.0f);
__m128 cB = _mm_set_ps1(-2.0f);
__m128 df = _mm_cmpgt_ps(cA, cB);
它 returns 所有 -nan
。这是预期的行为吗?如果是,我如何评估这些纳米?
使用英特尔 CPU、MS VisualStudio 2017
SIMD 比较生成掩码。 All-one 位是 -NaN
的 bit-pattern。 All-zero 位是 bit-pattern for +0.0
它们不应被解释为 float
。将它们与 _mm_movemask_ps
、混合或类似 _mm_and_ps
.
的东西一起使用
例如_mm_and_ps( vec, cmp_result)
将比较为假的元素归零。您可以使用它通过在添加之前将一些输入元素归零来进行条件添加。
有关如何使用 SIMD 的更多信息,请查找 guide/tutorial。 https://whosebug.com/tags/sse/info
我正在尝试这样的事情:
__m128 cA = _mm_set_ps1(-2.0f);
__m128 cB = _mm_set_ps1(2.0f);
__m128 df = _mm_cmpgt_ps(cA, cB);
在这种情况下 df
returns 带零。
但如果我这样做:
__m128 cA = _mm_set_ps1(2.0f);
__m128 cB = _mm_set_ps1(-2.0f);
__m128 df = _mm_cmpgt_ps(cA, cB);
它 returns 所有 -nan
。这是预期的行为吗?如果是,我如何评估这些纳米?
使用英特尔 CPU、MS VisualStudio 2017
SIMD 比较生成掩码。 All-one 位是 -NaN
的 bit-pattern。 All-zero 位是 bit-pattern for +0.0
它们不应被解释为 float
。将它们与 _mm_movemask_ps
、混合或类似 _mm_and_ps
.
例如_mm_and_ps( vec, cmp_result)
将比较为假的元素归零。您可以使用它通过在添加之前将一些输入元素归零来进行条件添加。
有关如何使用 SIMD 的更多信息,请查找 guide/tutorial。 https://whosebug.com/tags/sse/info