【问题标题】:comparison with floats in neon intrinsics与霓虹内在函数中的浮点数比较
【发布时间】:2011-07-25 08:26:48
【问题描述】:

我认为这是一个愚蠢的问题,但我尝试了一天来解决这个问题,但运气不佳,所以这里是。

我有四个向量的寄存器 (float32x4),我想对其中一些进行一些处理,另一个我想将其设置为 0。

例如c中的这个问题:

for (int i=1; i<=4; i++)
{
    float b = 4/i;
    if(b<=3)
        result += process(b);
}

所以第一个不会处理,但另一个会,所以我需要一个寄存器,第一条车道我有 0,另一个有结果。

但我不知道如何在霓虹内在函数上做到这一点。

我知道有一个 vcltq_f32 但我尝试了这个但没有结果。

【问题讨论】:

  • 我不知道你为什么将这个问题标记为 opencv,但它似乎甚至没有远程连接到 opencv。
  • 对不起,你是对的,我删除了它
  • C最好加个标签。

标签: android c arm neon intrinsics


【解决方案1】:

像这样:

const float32x4_t vector_3 = vdupq_n_f32(3.0f);
uint32x4_t mask = vcleq_f32(vector_b, vector_3);
vector_b = (float32x4_t)vandq_u32((uint32x4_t)vector_b, mask);

【讨论】:

  • 谢谢我用按位选择解决了这个问题,但这对我也有用。
  • 是的; vbsl 也可以。 vand 的优点是您不需要有一个零向量。
【解决方案2】:

我对 Neon 了解不多,但在大多数 SIMD 架构中,您可以通过比较和屏蔽(按位与)来做到这一点。您使用比较指令,然后生成一个通常可以用于此目的的掩码。

【讨论】:

  • 快速谷歌搜索似乎表明它确实有效,例如bulletphysics.org/Bullet/phpBB3/…
  • 好的我想我有解决方案,使用按位选择,如果掩码有 1 取第一个参数对应的数字,如果 0 取对应的数字,则此方法接收一个掩码和两个参数第二个参数,所以有了这个我可以使用掩码我想要应用过滤器的数字和另一个充满0的向量
猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 2015-06-03
  • 2011-08-08
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多