首页 > 解决方案 > SSE 比较返回 NAN 向量

问题描述

我正在尝试这样的事情:

__m128 cA = _mm_set_ps1(-2.0f);
__m128 cB = _mm_set_ps1(2.0f);
__m128 df = _mm_cmpgt_ps(cA, cB);

在这种情况下df返回零。

但如果我这样做:

__m128 cA = _mm_set_ps1(2.0f);
__m128 cB = _mm_set_ps1(-2.0f);
__m128 df = _mm_cmpgt_ps(cA, cB);

它返回所有-nan 。是预期的行为吗?如果是,我如何评估这些 nans?

使用英特尔 CPU,MS VisualStudio 2017

标签: ssesimd

解决方案


SIMD 比较产生一个掩码。全一位是-NaN. 全零位是位模式+0.0

它们不打算被解释为float. 将它们与_mm_movemask_ps、混合或类似的东西一起使用_mm_and_ps

例如_mm_and_ps( vec, cmp_result),将比较为假的元素归零。您可以通过在添加之前将一些输入元素归零来使用它来执行条件添加。


有关如何使用 SIMD 的更多信息,请查看指南/教程。 https://stackoverflow.com/tags/sse/info


推荐阅读