測試條件:
一、IAR8.30開最高等級速度優化。
二、MDK5.27正式版使用AC5開最高等級優化3,開啓時間優化,測試C標準庫和微庫MicroLib兩種。
三、MDK5.27正式版使用AC6開最高等級的速度優化,測試C標準庫和微庫MicroLib兩種。
四、Embedded Studio4.30版使用GCC開最高等級優化,開C庫使用Fast模式。
五、Embedded Studio4.30版使用CLANG開最高等級優化,開C庫使用Fast模式。
六、DSP庫使用最新的CMSIS軟件包裏面的V5.6.0。
七、測試單位使用DWT時鐘週期計數器。
八、DSP庫使用函數arm_sin_f32測試,IAR,MDK和ES都使用各自帶的C庫測試。執行10次,求平均。
注意,IAR,MDK和ES都有各自的C庫實現方案。
提供一個STM32H7的例程供你們測評:
MDKIARES-USART.rar
一、MDK5 AC5 MicroLib
(1)DSP庫函數第一次執行73個時鐘週期,以後重複執行都是55個時鐘週期左右。
(2)微庫的sin函數259,以後重複執行是197個時鐘週期左右。
二、MDK5 AC5 C Lib
(1)DSP庫函數第一次執行71個時鐘週期,以後重複執行都是55個時鐘週期左右。
(2)C庫的sin函數264,以後重複執行是200個時鐘週期左右。
三、MDK5 AC6 MicroLib
(1)DSP庫函數第一次執行81個時鐘週期,以後重複執行都是58個時鐘週期左右。
(2)C庫的sin函數,使用DWT時鐘週期計數器沒法正常測量。
四、MDK5 AC6 C Lib
(1)DSP庫函數第一次執行74個時鐘週期,以後重複執行都是58個時鐘週期左右。
(2)C庫的sin函數,使用DWT時鐘週期計數器沒法正常測量。
五、IAR
(1)DSP庫函數第一次執行83個時鐘週期,以後重複執行都是58個時鐘週期左右。
(2)C庫的sin函數217,以後重複執行是194個時鐘週期左右。
六、Embedded Studio GCC
(1)DSP庫函數第一次執行79個時鐘週期,以後重複執行都是49個時鐘週期左右。
(2)C庫的sin函數140,以後重複執行是129個時鐘週期左右。
七、Embedded Studio CLANG
(1)DSP庫函數第一次執行80個時鐘週期,以後重複執行都是59個時鐘週期左右。
(2)C庫的sin函數141,以後重複執行是129個時鐘週期左右。
MDK5的AC5開啓的優化等級:
MDK5的AC6開啓的優化等級:
MDK使用微庫和C庫經過這個對勾切換:
IAR開啓的優化等級
Embedded Studio優化等級和C庫選Fast模式
總結:
一、DSP庫的三角函數計算在MDK,IAR和ES上的性能都差很少。
二、使用MDK的AC6時,使用DWT是週期計數器沒法正常測量C庫作三角函數運算的執行時間,時間很是短,感受異常了,因此暫不加入比較。
三、MDK AC5和IAR的C庫三角函數性能差很少,而ES的三角函數性能比較強勁,比MDK和IAR的強不少。
四、當前僅測試一個sin函數,後面有精力作一個全面的三角函數比較。php