【发布时间】:2015-06-03 09:57:48
【问题描述】:
我想找出一个 32x4 向量中四个值中的最大值。
我有一个float32x4_t 类型的向量:
float32x4_t maxR = {10.21,10.25,23.5,24.86} //FOR EXAMPLE
我想在这四个中找出最大值(10.21,10.25,23.5,24.86),有什么指示吗?
我正在考虑使用vpmax_f32 内在函数,但得出的结论是这是错误的,因为返回类型是float32x2_t,它又是一个向量类型。那么,谁能告诉我这个操作的方法?
【问题讨论】:
-
什么是 float32x4_t?一个数组?
-
不,它只是一个浮点向量。它是我的代码的一部分..我对所有循环进行计算并最终得到 float32x4_t maxR 。并且想要找到这四个中的最大值,因为只想返回 maxR 类型的变量。我试过 maxR = max(maxR_vect.f0,max(maxR_vect.f1,max(maxR_vect.f2,maxR_vect.f3)));
-
对不起,我没有得到这个。它是一个向量类型的 float32x4_t 变量。所以这个 std::max_element 对这个没有用
-
我怎样才能访问 maxR 向量的第一个元素??我试过 maxR.v[0] 这给了我这个错误 -> 错误:请求成员 'v' in 'maxR',这是非类类型'float32x4_t
-
@user3476225:如果您发现自己在使用 SIMD 时需要执行水平操作,这通常表明您的矢量化方法存在缺陷 - 有什么方法可以转置数据以便执行这个最大垂直?也许您可以将一些代码添加到问题中,以便我们可以看到它如何与您正在执行的其他 SIMD 操作相匹配?