Neon:float32x4_t 向量中最多四个浮点值

use*_*225 3 arm simd neon cortex-a8

我想找出一个 32x4 向量中四个值中的最大值。

我有一个类型的向量float32x4_t

float32x4_t maxR = {10.21,10.25,23.5,24.86} //FOR EXAMPLE
Run Code Online (Sandbox Code Playgroud)

我想在这四个中找出最大值(10.21,10.25,23.5,24.86),有没有这样做的说明?

我正在考虑使用vpmax_f32内在函数,但得出的结论是这是错误的,因为返回类型float32x2_t再次是向量类型。那么,谁能告诉我这个操作的方法吗?

Not*_*hat 5

从向量中提取单个值的本质是vget_lane_<type>- 两个适当的成对最大操作将为您留下一个双字向量,其中包含两个通道中的所需值,您可以从中挑选出来:

float horz_max(float32x4_t f) {
    float32x2_t tmp;

    tmp = vpmax_f32(vget_low_f32(f), vget_high_f32(f));
    tmp = vpmax_f32(tmp, tmp);
    return vget_lane_f32(tmp, 0);
}
Run Code Online (Sandbox Code Playgroud)

另外,如果你实际上并不需要的值在寄存器中,现在,和将要写回内存变量,无论如何,那么它可能是更有效的使用,而不是vst1_lane_f32用适当的指针,直接存储。