正如我們在這裏看到的「arm integer NEON operations cycles」和手臂浮動NEON運算週期一樣,整數乘法運算似乎沒有浮點乘法運算的確定優勢。當我將浮點代碼轉換爲固定點時,我必須在定點乘法/除法指令後添加額外的「移位」指令。由於指令的增加,程序所需的週期實際上增加了。由於固定點,我的計劃表現惡化。 (浮點代碼14000週期,定點代碼26000週期)。NEON固定點編碼和固定浮點運算性能比較
是否有專門的NEON指令專門用於定點操作(乘法和除法)?我只找到一條只是轉換Fixed -float的指令。 在NEON中編寫定點程序是否有效?
我爲浮點代碼編寫了下面的示例代碼。
VMUL Q14.F32,Q8.F32,Q2.F32
VMUL Q15.F32,Q8.F32,Q3.F32
VLD2 {Q10.F32,Q11.F32},[[email protected]],TwdStep
VLD2 {Q4.F32,Q5.F32},[[email protected]],fftSize
VMLA Q14.F32,Q9.F32,Q3.F32
VMLS Q15.F32,Q9.F32,Q2.F32
以下代碼通過在VMUL A指令後面插入移位操作轉換爲定點代碼。
VMUL Q14.S32,Q8.S32,Q2.S32
VMUL Q15.S32,Q8.S32,Q3.S32
VLD2 {Q10.S32,Q11.S32},[[email protected]],TwdStep
VLD2 {Q4.S32,Q5.S32},[[email protected]],fftSize
VMLA Q14.S32,Q9.S32,Q3.S32
VMLS Q15.S32,Q9.S32,Q2.S32
VRSHR Q14.S32,Q14.S32,#12 ;Shift instructions to account for fixed point
VRSHR Q15.S32,Q15.S32,#12 ;
這些天定點通常只使在其上浮點挑戰的CPU,如低端微控制器感,並在具有明確固定點支撐的CPU(各種DSP家庭,一些SIMD架構) 。否則,只需使用浮點。 – 2013-04-04 16:23:56
如果可能,您可以通過組合管道獲得優勢。你正在使用32位值還是SIMD正在進行?只有普通的ARM有'MLA','MUL'等,它們在32位值上執行。您可以在NEON核心中執行一次浮點計算,並使用ARM進行另一次修正。 – 2013-04-04 18:20:26
@artlessnoise我只是想看看NEON的功能。做並行真的有幫助! – Wolfrum 2013-04-05 04:32:14