我想使用霓虹灯指令 SIMD 和臂组件计算 4 个点的大小和角度。大多数语言都有一个内置库,在我的例子中是 C++,它计算角度(atan2),但只计算一对浮点变量(x 和 y)。我想利用处理 q 寄存器的 SIMD 指令来计算 atan2 的 4 个值的向量。
精度要求不高,速度更重要。
我已经有一些汇编指令可以计算 4 个浮点寄存器的大小,并且对于我的应用程序来说具有可接受的精度。q1 包含 4 个“x”值(x1、x2、x3、x4)。q2 包含 4 个“y”值(y1、y2、y3、y4)。q7 包含 4 个结果的大小 (x1^2 + y1^2, x2^2 + y2^2, x3^2 + y3^2, x4^2 + y4^2)。
vmul.f32 q7, q1, q1
vmla.f32 q7, q2, q2
vrecpe.f32 q7, q7
vrsqrte.f32 q7, q7
使用 SIMD 指令计算两个向量的近似 atan2 的最快方法是什么?