DSP影片教程第13期:彙編浮點庫qfplib效能媲美TI的IQmath和硬體FPU,強於C庫的math和ARM DSP庫,適用於M0和M3(2024-10-12)

硬汉嵌入式發表於2024-10-14

影片教程彙總帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519


本期專題影片給大家分享一個qfplib浮點庫,這個庫早期週報給大家分享過,後來部分網友測試非常給力,所以我們DSP影片教程也給大家分享一期

【影片】

https://www.bilibili.com/video/BV1Te2DY1Edx/


【簡介】

程式碼採用彙編實現,qflib的效能媲美TI的IQmath和硬體FPU,強於C庫的math和ARM DSP庫。並且易於使用,不需要使用者手動做浮點轉定點,定點轉浮點之類的操作。

1、ARM DSP庫的三角函式浮點是直接呼叫的C庫實現,所以效能一般,並沒有加速作用。
2、M3的qfplib和MDK的C庫,IAR的C庫以及GoFast庫的比較,可以看到速度優勢比較明顯。單位時鐘週期數

3、M0的qflib庫和TI IQmath的浮點運算比較

如果是單純的qflib浮點和IQmath定點比較,IQmath有優勢,如果是直接操作浮點數值,IQmath就沒有優勢了(甚至強於IQmath,後面專門實測下),因為要做浮點轉定點,定點轉浮點處理函式,時間就比較長了。

而且從應用的角度來說,使用浮點庫qflib操作更加便捷,不需要額外呼叫API做定點轉浮點和浮點轉定點,使用者全程浮點資料操作即可

X = _IQ24(1.0f);
Y = _IQ24(1.0f);
Z = _IQ24atan2(Y, X);
 
W = _IQ24toF(Z);

4、從時鐘週期上來看,媲美硬體FPU浮點計算

5、同時還提供了一個M0 tiny版的庫,適合Flash容量比較小的M0核心晶片使用


【移植】

1、這個庫只有一個.h標頭檔案和一個.s彙編檔案。所以移植比較簡單,新增工程工程即可。
2、有問題的地方是彙編庫的相容問題,這個彙編庫在GCC上使用直接新增就可以正常編譯,如果是MDK上使用,請使用AC6,並在彙編Option的ASM彙編選項裡面設定選擇ARMCLANG AUTO


【參考資料】

1、參考案例下載
注:這裡提供的例子是採用我們H7板子關閉硬體FPU使用,這種情況可以使用M3的庫測試,否則運算不正確
V7-Qfplib template.7z (1.31MB)

2、原始碼庫下載
M0 tiny版 qfplib-m0-tiny-20200617.7z (18.04KB)
M0 全功能版 qfplib-m0-full-20240105.7z (27.49KB)
M3版 qfplib-m3-20160408.7z (23.49KB)

3、官方地址
https://www.quinapalus.com/qfplib.html

4、DSP影片教程第12期:TI開源分享IQmath DSP原始碼,適用於所有Cortex-M核心,本期教程做個手把手移植
https://www.armbbs.cn/forum.php?mod=viewthread&tid=119296

5、DSP影片教程第8期:DSP庫三角函式,C庫三角函式和硬體三角函式的效能比較,以及與Matlab的精度比較
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112675

相關文章