# TinyML 核心函式庫 Arm CMSIS 6 DSP & NN 更新比較
![20240216_CMSIS6_Fig00](https://hackmd.io/_uploads/SJn0T6nsT.jpg)
有在玩單晶片(MCU)的朋友們應該都知道Arm Cortex-M系列吧!近年來AI當道,自然也有很多人想用MCU來玩微型AI應用,於是「TinyML」開始成為大家關注的重點。目前有太多廠商使用Arm Cortex-M IP開發成各式各樣的MCU,所以硬體介面不統一變成開發者的一大麻煩,只要一換廠牌、封裝方式甚至升降階(如M3降成M0,或升成M7)都需重新撰寫韌體(firmware)。
Arm為了讓開發者抽離硬體相依性於是推出硬體抽象層(Hardware Abstraction Layer, HAL)的概念,提供通用微控制器軟體介面標準(Common Microcontroller Software Interface Standard, 簡稱CMSIS)。其中DSP和NN模組又成了MCU AI最重要的核心函式庫,方便如 Google TensorFlow Lite (TFL), TensorFlow Lite for Microcontroller (TFLM) 等上階AI開發框架進行呼叫及執行。
Arm CMSIS在2016年底推出5.0.0版[1]後已有許久未大改版,去(2023)年12月18日推出最新版的CMSIS 6.0.0版[2],將原有一大包的架構分拆成個別模組,除更輕量化外,同時更方便未來獨立呼叫及更新。此次將DSP[3], NN[4], Driver 等模組獨立出來,廢除RTOS改用RTOS2,更有利AI應用的開發及升級,其它更多變動可參考官方說明。[5]
![20240216_CMSIS6_Fig01](https://hackmd.io/_uploads/HkzYk42ja.jpg)
Fig. 1 Arm CMSIS v5及v6架構比較圖。(OmniXRI整理製作,2024/02/16)
以下為CMSIS v5 和 v6 版本資訊,包含DSP和NN模組目前對應版本。原則上這兩個版本都有支援單指令多資料流(Single Instruction Multiple Data, SIMD),DSP擴展指令集及v8.1-M Helium M型向量擴展指令(M-Profile Vector Extension, MVE),方便AI加速計算使用。
| 版本 | CMSIS v5 | CMSIS v6 |
|:---------:|:--------:|:--------:|
| 最後版本 | 5.9.0 | 6.0.0 |
| 發行日期 | 2022/05/02 | 2023/12/08 |
| CMSIS-DSP | 1.10.0 | 1.15.0 |
| CMSIS-NN | 3.1.0 | 5.0.0 |
為方便大家理解 CMSIS-DSP 和 CMSIS-NN 在此次更新有什麼差別,以下就簡單表列出其差異。綠字部份表示新增功能,紅字部份表示v6版本已不再提供,藍字部份表示移入私有函式中,即只提供給CMSIS函式使用,而不提供給開發者使用。黑字部份則表示兩個版本皆有。
![20240216_CMSIS6_Fig02](https://hackmd.io/_uploads/ry_Dkn3jT.jpg)
Fig. 2 CMSIS v5和v6版 DSP 差異比較表。(OmniXRI整理製作,2024/02/16)[6][7]
![20240216_CMSIS6_Fig03](https://hackmd.io/_uploads/S15P122s6.jpg)
Fig. 3 CMSIS v5和v6版 NN 差異比較表。(OmniXRI整理製作,2024/02/16)[8][9]
在CMSIS-NN v6版對於卷積(Convolution)函式有很大變化,以下就把其差異單獨列表。
![20240216_CMSIS6_Fig04](https://hackmd.io/_uploads/Sy5Pkhhj6.jpg)
Fig. 4 CMSIS v5和v6版 NN Covolution 差異比較表。(OmniXRI整理製作,2024/02/16)[8][9]
## 小結
採用Arm Cortex-M 系列MCU來玩AI,加速矩陣運算是少不了的,透過Arm CMSIS DSP及NN模組來統一開發介面更是不可或缺的。未來再加上像Ethos U55之類的NPU,就能發揮更大的算力,屆時低成本、低功耗的TinyML就能普及到大家的身邊了。以上只是拋磚引玉,歡迎大家多多交流。
## 參考文獻
[1] Github, ARM-software, CMSIS_5
https://github.com/ARM-software/CMSIS_5
[2] Github, ARM-software, CMSIS_6
https://github.com/ARM-software/CMSIS_6
[3] Github, ARM-software, CMSIS-DSP
https://github.com/ARM-software/CMSIS-DSP
[4] Github, ARM-software, CMSIS-NN
https://github.com/ARM-software/CMSIS-NN
[5] Github, ARM-software, CMSIS_6 Releases Note
https://github.com/ARM-software/CMSIS_6/releases/tag/v6.0.0
[6] Github, ARM-software, CMSIS-DSP Software Library Reference (ver 1.10.0)
https://arm-software.github.io/CMSIS_5/DSP/html/index.html
[7] Github, ARM-software, CMSIS-DSP Software Library Reference (ver 1.15.0)
https://arm-software.github.io/CMSIS-DSP/latest/index.html
[8] Github, ARM-software, CMSIS-NN Software Library Reference (ver 3.1.0)
https://arm-software.github.io/CMSIS_5/NN/html/index.html
[9] Github, ARM-software, CMSIS-NN Software Library Reference (ver 5.0.0)
https://arm-software.github.io/CMSIS-NN/latest/index.html
## 延伸閱讀
[A] 許哲豪,歐尼克斯實境互動工作室【系列發文】- TinyML (MCU AI)系列
https://hackmd.io/@OmniXRI-Jack/series_articles#TinyMLMCU-AI%E7%B3%BB%E5%88%97
---
OmniXRI 整理製作,歡迎點贊、收藏、訂閱、留言、分享
###### tags: `MCU` `TinyML` `CMSIS`