我认为这是一个愚蠢的问题,但我试着用一天的时间来解决这个问题而不是运气,所以这就是。
我注册了四个向量(float32x4),我想对其中一些进行处理,另一个我想将它设置为0。
例如c:
中的这个问题for (int i=1; i<=4; i++)
{
float b = 4/i;
if(b<=3)
result += process(b);
}
所以第一个不会处理,但另一个会处理,所以我需要一个寄存器,其中第一个通道我有0个而另一个有结果。
但我不知道如何在霓虹内在函数上做到这一点。
我知道有一个vcltq_f32,但我试过这个,但没有结果。
答案 0 :(得分:3)
像这样:
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);
答案 1 :(得分:0)
我对Neon知之甚少,但在大多数SIMD架构中,您可以通过比较和屏蔽(按位AND)来实现。您可以使用比较指令,然后生成一个通常可用于此的掩码。