Arm Neon:float32x4_t矢量内最多四个浮点值
我想找出一个32x4向量中四个值的最大值 我有一个向量类型为Arm Neon:float32x4_t矢量内最多四个浮点值,arm,simd,neon,cortex-a8,Arm,Simd,Neon,Cortex A8,我想找出一个32x4向量中四个值的最大值 我有一个向量类型为float32x4\u t: float32x4_t maxR = {10.21,10.25,23.5,24.86} //FOR EXAMPLE 我想找出这四个中的最大值(10.21,10.25,23.5,24.86),是否有这样做的说明 我正在考虑使用vpmax\u f32intrinsic,但得出的结论是这是错误的,因为返回类型是float32x2\u t,它又是一种向量类型。那么,有人能告诉我如何进行此操作吗?从向量中提取单个值
float32x4\u t
:
float32x4_t maxR = {10.21,10.25,23.5,24.86} //FOR EXAMPLE
我想找出这四个中的最大值(10.21,10.25,23.5,24.86),是否有这样做的说明
我正在考虑使用
vpmax\u f32
intrinsic,但得出的结论是这是错误的,因为返回类型是float32x2\u t
,它又是一种向量类型。那么,有人能告诉我如何进行此操作吗?从向量中提取单个值的本质是-两个适当的两两最大操作将为您提供一个双字向量,其中包含两个通道中的所需值,您可以从中选择:
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);
}
或者,如果您现在实际上不需要寄存器中的值,并且无论如何都要将其写回内存变量,那么使用适当的指针直接存储它可能会更有效。什么是float32x4\t?数组?不,它只是一个浮点向量。这是我代码的一部分。我对所有循环进行计算,最终得到float32x4\u t maxR。我想找出这四个变量中的最大值,因为我只想返回maxR类型的变量。我尝试了maxR=max(maxR\u vect.f0,max(maxR\u vect.f1,max(maxR\u vect.f2,maxR\u vect.f3));很抱歉,我没有得到这个..它是一个向量类型float32x4\u t变量。因此,这个std::max\u元素对此没有用处。我如何访问maxR vectors第一个元素?我尝试了maxR.v[0],这给了我以下错误->错误:请求“maxR”中的成员“v”,属于非类类型“float32x4”的_t@Robinson:我认为您没有抓住问题的关键-这是关于ARM CPU上的Neon SIMD-向量是128位SIMD寄存器。