功耗是邊緣人工智能 (AI) 應(yīng)用的關(guān)鍵因素,其中整個(gè)系統(tǒng)由小型電池供電,預(yù)計(jì)無(wú)需充電或更換電池即可運(yùn)行數(shù)月。MAX78000超低功耗AI微控制器專為物聯(lián)網(wǎng)邊緣的此類應(yīng)用而設(shè)計(jì)。本文介紹了各種配置,使用戶能夠在MAX78000上開(kāi)發(fā)功耗優(yōu)化應(yīng)用,并提供基準(zhǔn)測(cè)試示例。功耗優(yōu)化方法應(yīng)用于兩個(gè)案例研究應(yīng)用:20個(gè)關(guān)鍵詞的關(guān)鍵詞發(fā)現(xiàn)(KWS20)和人臉識(shí)別(FaceID),報(bào)告的結(jié)果可作為用戶應(yīng)用的指南。
介紹
MAX78000為超低功耗微控制器,具有專用卷積神經(jīng)網(wǎng)絡(luò)(CNN)加速器。這種架構(gòu)能夠在能源受限的環(huán)境中開(kāi)發(fā)非常節(jié)能的 AI 應(yīng)用程序。MAX78000提供多種選擇,便于開(kāi)發(fā)低功耗應(yīng)用(詳見(jiàn)數(shù)據(jù)資料[1]),例如可根據(jù)目標(biāo)應(yīng)用選擇不同的振蕩器、時(shí)鐘源和工作模式。以下部分概述了這些選項(xiàng),包括MAX78000評(píng)估板的實(shí)際示例和實(shí)際測(cè)量結(jié)果。有關(guān)詳細(xì)信息,請(qǐng)遵循本文檔中的參考資料。
注:本應(yīng)用筆記給出的測(cè)量結(jié)果基于MAX78000評(píng)估板上的示例代碼。用戶平臺(tái)和特定應(yīng)用程序的實(shí)際結(jié)果可能會(huì)有所不同。
MAX78000
MAX78000是新一代AI微控制器,用于以超低功耗執(zhí)行神經(jīng)網(wǎng)絡(luò),并位于物聯(lián)網(wǎng)邊緣。該產(chǎn)品將最節(jié)能的AI處理與Maxim Integrated成熟的超低功耗微控制器相結(jié)合。基于硬件的 CNN 加速器使電池供電的應(yīng)用程序能夠執(zhí)行 AI 推理,同時(shí)僅消耗微焦耳的能量。MAX78000具有帶FPU微控制器的Atarm Cortex-M4,通過(guò)超低功耗深度神經(jīng)網(wǎng)絡(luò)加速器實(shí)現(xiàn)高效的系統(tǒng)控制。還集成了一個(gè)RISC-V內(nèi)核,可以執(zhí)行應(yīng)用和控制代碼以及驅(qū)動(dòng)CNN加速器。圖1所示為MAX78000的頂層架構(gòu)。
圖1.MAX78000的結(jié)構(gòu)
MAX78000評(píng)估板(EV kit)提供了一個(gè)平臺(tái),利用MAX78000的功能構(gòu)建新一代AI器件。評(píng)估板具有板載硬件,如數(shù)字麥克風(fēng)、串行端口、攝像頭模塊支持和3.5英寸觸摸彩色薄膜晶體管(TFT)顯示屏[2]。它還包括用于監(jiān)控和顯示功率電平的電路。MAX34417 [3] 監(jiān)測(cè) VCOREA 和 VCOREB 電壓以及
圖2.電源監(jiān)視器。
MAX78000,并將累積功率報(bào)告給MAX32625,MAX2用作電源數(shù)據(jù)處理器,同時(shí)控制功率顯示,如圖<>所示。
電源監(jiān)視器以兩種模式運(yùn)行;瞬時(shí),顯示平均功率、電源電流和電壓,以及窗口能量累積,根據(jù)觸發(fā)事件測(cè)量 CNN 功率或總系統(tǒng)功率。瞬時(shí)測(cè)量通常用于快速、粗略地估計(jì)功率電平。另一方面,窗口測(cè)量非常適合測(cè)量用戶定義的開(kāi)始實(shí)例和完整實(shí)例之間的累積能量。這些事件由MAX78000的兩個(gè)GPIO(P0.2和P0.3)的切換觸發(fā),這兩個(gè)GPIO也連接到LED1和LED2以及MAX32625功率數(shù)據(jù)處理器的端口。有關(guān)使用電源監(jiān)視器的詳細(xì)信息,請(qǐng)參閱 [4]。
MAX78000時(shí)鐘和工作模式
MAX78000支持不同的時(shí)鐘源和低功耗工作模式,可聯(lián)合配置以實(shí)現(xiàn)優(yōu)化的功耗和性能。本應(yīng)用筆記簡(jiǎn)要介紹了每種模式,以指導(dǎo)讀者根據(jù)所需應(yīng)用設(shè)置模式。有關(guān)更詳細(xì)的描述,請(qǐng)參閱 [5]。
時(shí)鐘
MAX78000包括多個(gè)可配置時(shí)鐘,供不同外設(shè)使用。用戶可以根據(jù)需要配置時(shí)鐘源,以選擇性能和電源效率的組合。選定的系統(tǒng)振蕩器(SYS_OSC)是大多數(shù)內(nèi)部模塊的時(shí)鐘源。以下振蕩器源可用,可以選擇SYS_OSC:
內(nèi)部初級(jí)振蕩器 (IPO) – 100MHz:
IPO 是頻率最快的振蕩器,消耗的功率最大。當(dāng)進(jìn)入低功耗模式(LPM)時(shí),該振蕩器可以關(guān)斷。
內(nèi)部次級(jí)振蕩器 (ISO) – 60MHz:
這是一款低功耗內(nèi)部次級(jí)振蕩器,是SYS_OSC的上電復(fù)位默認(rèn)設(shè)置。
內(nèi)部納米環(huán)振蕩器 (INRO) – 8kHz-30kHz:
INRO 是一種超低功耗內(nèi)部振蕩器,可以選擇作為SYS_OSC并始終啟用。頻率可配置為 8kHz、16kHz 或 30kHz(默認(rèn))。
內(nèi)部波特率振蕩器 (IBRO) – 7.3728MHz:
這是一款功耗非常低的內(nèi)部振蕩器,可以選擇作為SYS_OSC。該時(shí)鐘可以選擇用作UART的專用波特率時(shí)鐘。
外部實(shí)時(shí)時(shí)鐘振蕩器 (ERTCO) – 32.768kHz:
ERTCO 是一款功耗極低的內(nèi)部振蕩器,可以選擇作為SYS_OSC。ERTCO可以選擇使用32.768kHz輸入時(shí)鐘或8kHz獨(dú)立納米環(huán)振蕩器代替外部晶體。該振蕩器是實(shí)時(shí)時(shí)鐘 (RTC) 的默認(rèn)時(shí)鐘,一旦啟用 RTC,就會(huì)自動(dòng)啟用。
所選SYS_OSC是系統(tǒng)振蕩器分頻器的輸入,用于生成系統(tǒng)時(shí)鐘 (SYS_CLK)。分頻器可在 0 到 7 之間選擇,得到 1、2、4、8、16、32、64 或 128 的除數(shù)。SYS_CLK驅(qū)動(dòng)帶有 FPU 內(nèi)核的 Arm Cortex-M4,以及系統(tǒng)中的所有高級(jí)高性能總線 (AHB) 主站。通過(guò)兩個(gè)分頻器的固定分頻后,它還可以生成高級(jí)外設(shè)總線(APB)時(shí)鐘,為CNN加速器、RISC-V和外設(shè)供電。有關(guān)時(shí)鐘源、配置和要設(shè)置的寄存器列表的更多詳細(xì)信息,請(qǐng)參閱 [3] 的第 1.5 節(jié)。
表 1 中列出了用于設(shè)置時(shí)鐘的 API。
應(yīng)用程序接口 | 描述 |
int MXC_SYS_ClockSourceEnable (mxc_sys_system_clock_t clock) |
啟用時(shí)鐘源而不選擇它;以下來(lái)源可用: MXC_SYS_CLOCK_IPO、MXC_SYS_CLOCK_IBRO、MXC_SYS_CLOCK_ISO、MXC_SYS_CLOCK_INRO、MXC_SYS_CLOCK_ERTCO MXC_SYS_CLOCK_EXTCLK |
int MXC_SYS_Clock_Select (mxc_sys_system_clock_t clock) | 選擇要用于SYS_CLK的時(shí)鐘源;有關(guān)列表,請(qǐng)參閱時(shí)鐘部分 |
void SystemCoreClockUpdate(void) | 根據(jù)所選時(shí)鐘源更新系統(tǒng)核心時(shí)鐘 |
無(wú)效MXC_SYS_ClockEnable(mxc_sys_periph_clock_t時(shí)鐘) |
支持外設(shè)時(shí)鐘: MXC_SYS_PERIPH_CLOCK_GPIO0 至 2 MXC_SYS_PERIPH_CLOCK_DMA MXC_SYS_PERIPH_CLOCK_SPI0和 1 MXC_SYS_PERIPH_CLOCK_UART0 至 3 MXC_SYS_PERIPH_CLOCK_I2C0 至 2 MXC_SYS_PERIPH_CLOCK_TMR0 至 5 MXC_SYS_PERIPH_CLOCK_ADC MXC_SYS_PERIPH_CLOCK_CNN MXC_SYS_PERIPH_CLOCK_PT MXC_SYS_PERIPH_CLOCK_TRNG MXC_SYS_PERIPH_CLOCK_SMPHR MXC_SYS_PERIPH_CLOCK_OWIRE MXC_SYS_PERIPH_CLOCK_CRC MXC_SYS_PERIPH_CLOCK_AES MXC_SYS_PERIPH_CLOCK_I2S MXC_SYS_PERIPH_CLOCK_PCIF MXC_SYS_PERIPH_CLOCK_WDT0 MXC_SYS_PERIPH_CLOCK_CPU1 // RISC-V 時(shí)鐘 MXC_SYS_PERIPH_CLOCK_WDT1 MXC_SYS_PERIPH_CLOCK_LPCOMP1 至 3 |
無(wú)效MXC_SYS_ClockDisable(mxc_sys_periph_clock_t時(shí)鐘) | 禁用外設(shè)時(shí)鐘;有關(guān)列表,請(qǐng)參閱時(shí)鐘部分 |
操作模式
MAX78000包括多種工作模式,能夠微調(diào)電源選項(xiàng)以優(yōu)化性能和功耗。系統(tǒng)支持以下操作模式,如表 2 所示。
|
活動(dòng)模式:
在這種模式下,Arm 和 RISC-V 內(nèi)核都可以執(zhí)行應(yīng)用代碼,并且所有數(shù)字和模擬外設(shè)均可按需提供。動(dòng)態(tài)時(shí)鐘禁用未使用的外設(shè),提供高性能和低功耗的最佳組合。每個(gè)外設(shè)都可以在活動(dòng)模式下單獨(dú)使能或斷電。CNN 和四個(gè) CNNx16_n 處理器陣列中的每一個(gè)及其相關(guān)存儲(chǔ)器都可以根據(jù)需要關(guān)閉電源或設(shè)置為活動(dòng)狀態(tài)。
睡眠模式:
當(dāng) Arm 或 RISC-V 執(zhí)行代碼時(shí),可以使用此模式,在此期間,另一個(gè)進(jìn)入睡眠狀態(tài)以降低功耗。可以選擇啟用時(shí)鐘以加快喚醒過(guò)程。CNN 可供使用,四個(gè)CNNx16_n象限中的每一個(gè)都可以單獨(dú)配置為關(guān)斷。除非明確禁用,否則所有外圍設(shè)備均處于打開(kāi)狀態(tài)
To enter SLEEP Mode: SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; // Needed just once Either directly set sleep mode bit in MXC_GCR->pm register, or use WFI instruction: ? MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE; MXC_GCR->pm |= MXC_S_GCR_PM_MODE_CM4; ? Or use WFI: o Arm: __WFI(); // Enter to sleep and wait for interrupt to wake up o RISC-V: asm volatile("wfi"); To enter into this mode on Arm, MXC_LP_EnterSleepMode() API call can also be used.
低功耗模式:
如果RISC-V希望在Arm處于深度睡眠狀態(tài)時(shí)從啟用的外設(shè)收集和移動(dòng)數(shù)據(jù),則可以使用此模式。如果未使用 RISC-V 并且處于睡眠模式,則 Arm 還可以處理數(shù)據(jù)并在外圍設(shè)備或 CNN 處于活動(dòng)狀態(tài)并在中斷時(shí)喚醒時(shí)切換到 LPM。Arm、DMA 和 SPI0 處于狀態(tài)保留狀態(tài)。CNN 象限、內(nèi)存和其他外設(shè)處于活動(dòng)狀態(tài)且可配置。請(qǐng)注意,CNN 只能喚醒 RISC-V,而不能喚醒 LPM 中的 Arm。在這種情況下,如果 CNN 處理時(shí)間已知,則喚醒計(jì)時(shí)器 (WUT) 可用于喚醒 Arm。或者,CNN中斷可以喚醒RISC-V,RISC-V反過(guò)來(lái)可以喚醒Arm,然后RISC-V可以重新進(jìn)入睡眠狀態(tài)。
Before going to LPM:
Make sure the clock source is enabled during LPM in MXC_GCR->pm, for example:
MXC_GCR->pm &= ~MXC_F_GCR_PM_ISO_PD; // enable ISO during sleep
Power Sequencer Registers (PWRSEQ) are used to configure clock source and wake up source. The clock source for peripherals and RISC-V needs to be specified. By default, it uses ISO during LPM. If needed, set this field to 1 to use the PCLK (APB Clock = SYS_CLK/2)
PWRSEQ_LPCN ->lpcn |= MXC_F_PWRSEQ_LPCN_LPMCLKSEL;
The wakeup source of the low power peripheral (e.g GPIO, RISC-V) needs to be enabled. For example:
MXC_PWRSEQ->lppwen |= MXC_F_PWRSEQ_LPPWEN_CPU1; // wake up on RISC-V interrupt
To enter LPM: SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; // Needed just once /* Write 1 to clear */ MXC_PWRSEQ->lpwkst0 = 0xFFFFFFFF; MXC_PWRSEQ->lpwkst1 = 0xFFFFFFFF; MXC_PWRSEQ->lppwst = 0xFFFFFFFF; MXC_MCR->ctrl |= MXC_F_MCR_CTRL_ERTCO_EN; // enable ERTCO Either directly set sleep mode bit in MXC_GCR->pm register, or use WFI instruction:
- MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE; MXC_GCR->pm |= MXC_S_GCR_PM_MODE_LPM;
-
Or use WFI:
- Arm:__WFI(); // Enter to deepsleep, wait for interrupt to wake up
在LPM中,IPO斷電,應(yīng)使用IBRO,ERTCO,INRO或ISO。
注意:如果 Arm 內(nèi)核進(jìn)入 LPM,RISC-V 可以根據(jù)需要繼續(xù)執(zhí)行并進(jìn)入睡眠狀態(tài)。如果需要在兩個(gè)內(nèi)核之間管理 LPM 的入口,則可以使用多處理器通信來(lái)確保兩個(gè)內(nèi)核都處于已知狀態(tài)。有關(guān)詳細(xì)信息,請(qǐng)參閱 [3] 中的第 3.3.5 節(jié)。
微功耗模式:
此模式用于極低的功耗,同時(shí)使用最少的外設(shè)集來(lái)提供喚醒功能。在此模式下,將保留 Arm 和 RISC-V、系統(tǒng)和 CNN RAM 以及非 UPM 外設(shè)的狀態(tài)。CNN 象限可以關(guān)閉。IPO 和 ISO 振蕩器斷電,IBRO、ERTCO和INRO啟用。以下外設(shè)可用作喚醒源:WUT、LPUART0、LPTMR0、LPTMR1、LPWDT0、LPCOMP0-LPCOMP3 和 GPIO
To enter UPM Mode:
/* Write 1 to clear */
MXC_PWRSEQ->lpwkst0 = 0xFFFFFFFF;
MXC_PWRSEQ->lpwkst1 = 0xFFFFFFFF;
MXC_PWRSEQ->lppwst = 0xFFFFFFFF;
MXC_MCR->ctrl |= MXC_F_MCR_CTRL_ERTCO_EN; // enable ERTCO
Set UPM mode bit in MXC_GCR->pm register:
MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE;
MXC_GCR->pm |= MXC_S_GCR_PM_MODE_UPM;
To enter into this mode on Arm, MXC_LP_EnterDeepSleepMode() API call can also be used.
這種模式在低活動(dòng)循環(huán)應(yīng)用中最有利于節(jié)省能源。
為了確保確定性地進(jìn)入 UPM 模式,Arm 和 RISC-V 可能需要使用多處理器通信進(jìn)行同步。有關(guān)更多信息,請(qǐng)參閱 [3] 中的第 3.4.5 節(jié)。
待機(jī)模式:
在此模式下,RTC 運(yùn)行時(shí)保留系統(tǒng)狀態(tài);Arm、RISC-V、System RAM、GPIO 和外設(shè)也保留其狀態(tài)。CNN 象限關(guān)閉,CNN 內(nèi)存具有可選擇的保留。IPO 和 ISO 振蕩器斷電,ERTCO、INRO 和 IBRO 啟用。如果需要對(duì)應(yīng)用進(jìn)行占空比,此模式可提供進(jìn)一步的功耗降低。
To enter STANDBY Mode:
/* Write 1 to clear */
MXC_PWRSEQ->lpwkst0 = 0xFFFFFFFF;
MXC_PWRSEQ->lpwkst1 = 0xFFFFFFFF;
MXC_PWRSEQ->lppwst = 0xFFFFFFFF;
MXC_MCR->ctrl |= MXC_F_MCR_CTRL_ERTCO_EN; // enable ERTCO
Set STANDBY mode bit in MXC_GCR->pm register:
MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE;
MXC_GCR->pm |= MXC_S_GCR_PM_MODE_STANDBY;
To enter into this mode on Arm, MXC_LP_EnterStandbyMode() API call can also be used.
為了確保確定性地進(jìn)入待機(jī)模式,Arm 和 RISC-V 可能需要使用多處理器通信進(jìn)行同步。有關(guān)更多信息,請(qǐng)參閱 [3] 中的第 3.5.5 節(jié)。
備份模式:
此模式用于保留系統(tǒng)內(nèi)存。在此模式下,Arm、RISC-V、所有外設(shè)和除 ERTCO 之外的所有振蕩器都將關(guān)閉電源。系統(tǒng) RAM 0-3 可以獨(dú)立配置為使用 PWRSEQ_LPCN 寄存器保留狀態(tài)。
進(jìn)入備份模式不需要 Arm 和 RISC-V 之間的同步,任何一個(gè)內(nèi)核都可以將 GCR_PM.mode 設(shè)置為 BACKUP,這會(huì)導(dǎo)致設(shè)備立即進(jìn)入 BACKUP。
To enter BACKUP Mode:
/* Write 1 to clear */
MXC_PWRSEQ->lpwkst0 = 0xFFFFFFFF;
MXC_PWRSEQ->lpwkst1 = 0xFFFFFFFF;
MXC_PWRSEQ->lppwst = 0xFFFFFFFF;
Set BACKUP mode bit in MXC_GCR->pm register:
MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE;
MXC_GCR->pm |= MXC_S_GCR_PM_MODE_BACKUP
To enter into this mode on Arm, MXC_LP_EnterBackupMode() API call can also be used.
掉電模式:
此模式在產(chǎn)品級(jí)別的分發(fā)和存儲(chǔ)期間使用。ARM、RISC-V、存儲(chǔ)器、外設(shè)和振蕩器均斷電。在此模式下沒(méi)有數(shù)據(jù)保留,但閃存中的值會(huì)保留。在此模式下,V雷吉POR電壓監(jiān)視器正在運(yùn)行。
如果已配置,可通過(guò)外部復(fù)位 (RSTN) 或 P3.0 或 P3.1 上的喚醒事件退出 PDM。
To enter PDM Mode:
MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE;
MXC_GCR->pm |= MXC_S_GCR_PM_MODE_POWERDOWN
To enter into this mode on Arm, MXC_LP_ShutDownMode() API call can also be used.
喚醒配置
需要將 Arm 和 RISC-V 配置為在發(fā)生喚醒事件時(shí)喚醒。有關(guān)不同操作模式下的喚醒源列表,請(qǐng)參閱 [3] 中的第 4.5 節(jié)。
手臂喚醒配置:
應(yīng)啟用中斷。在 SLEEP 的情況下,Arm 內(nèi)核會(huì)喚醒 after__WFI() 以響應(yīng)任何中斷。
對(duì)于低功耗模式,需要啟用喚醒源:
在電源排序器寄存器 (PWRSEQ) 中:在低功耗外設(shè)喚醒中啟用外設(shè)和特定 GPIO 源 啟用寄存器(PWRSEQ_LPWKEN0 至 3,PWRSEQ_LPPWEN)
在全局控制寄存器 (GCR) 中:在電源管理寄存器 (GCR_PM) 中啟用 GPIO 喚醒使能和 RTC 報(bào)警喚醒啟用
Example of Arm wakeup configuration:
Wakeup from LPM on GPIO:
MXC_GCR->pm |= MXC_F_GCR_PM_GPIO_WE; // enable wakeup from GPIOs
MXC_PWRSEQ->lpwken2 |= (1 << 7); // Pb2: GPIO2.7 is selected for wakeup
Wakeup from LPM on RISC-V interrupt:
MXC_PWRSEQ->lppwen |= MXC_F_PWRSEQ_LPPWEN_CPU1; // wakeup on RISC-V interrupt
RISC-V 喚醒配置:
要將RISC-V配置為在中斷時(shí)喚醒,需要啟用IRQ和EVENT。
Example of RISC-V wakeup configuration:
__enable_irq();
NVIC_EnableIRQ(CNN_IRQn);
NVIC_EnableEVENT(CNN_IRQn);
表 3 顯示了 Arm 和 RISC-V 代碼的示例。Arm 進(jìn)入 LPM(深度睡眠),RISC-V 初始化并啟動(dòng) CNN,然后進(jìn)入睡眠狀態(tài),直到 CNN 推理完成。之后,CNN中斷喚醒RISC-V,然后喚醒ARM也。
有關(guān)此示例的完整代碼,請(qǐng)參閱 [6]。
Arm | RISC-V |
mnist-riscv int main(void) { MXC_ICC_Enable(MXC_ICC0); // 啟用緩存 // 切換到 100 MHz 時(shí)鐘 MXC_SYS_Clock_Select(MXC_SYS_CLOCK_IPO); SystemCoreClockUpdate(); 設(shè)置 RISC-V 引導(dǎo)地址 MXC_FCR->urvbootaddr = (uint32_t) &__FlashStart_; 啟用森帕霍爾時(shí)鐘MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_SMPHR);設(shè)置喚醒 ISR NVIC_SetVector(RISCV_IRQn, WakeISR ); 不要?jiǎng)h除此行: MXC_Delay(SEC(2));如果需要,讓調(diào)試器中斷 啟用 RISC-V 時(shí)鐘 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_CPU1); 轉(zhuǎn)到 LPM,等待 RISC-V 喚醒 MXC_LP_ClearWakeStatus(); SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; // SLEEPDEEP=1 __WFI(); // 轉(zhuǎn)到深度睡眠,讓 RISC-V 運(yùn)行 返回 0; } void WakeISR(void) { MXC_SEMA->irq0 = MXC_F_SEMA_IRQ0_EN & ~MXC_F_SEMA_IRQ0_CM4_IRQ; } |
int main(void) { Debug_Init(); // 設(shè)置 RISCV JTAG MXC_ICC_Enable(MXC_ICC1); // 啟用緩存 使能外設(shè), CNN 中斷, CNN 時(shí)鐘 // CNN 時(shí)鐘 : 50 MHz 分區(qū) 1 cnn_enable(MXC_S_GCR_PCLKDIV_CNNCLKSEL_PCLK, MXC_S_GCR_PCLKDIV_CNNCLKDIV_DIV1); cnn_init();使?fàn)顟B(tài)機(jī)進(jìn)入一致的狀態(tài) cnn_load_weights();加載內(nèi)核 cnn_load_bias(); cnn_configure();配置狀態(tài)機(jī) load_input();加載數(shù)據(jù)輸入 cnn_start(); // 在 (cnn_time == 0) asm volatile(“WFI”) 時(shí)啟動(dòng) CNN 處理; 睡眠,等待 CNN 完成 // 現(xiàn)在信號(hào) Arm 喚醒 MXC_SEMA->irq0 = MXC_F_SEMA_IRQ0_EN |MXC_F_SEMA_IRQ0_CM4_IRQ; } int cnn_enable(uint32_t clock_source, uint32_t clock_divider) { // 重置所有域,恢復(fù) CNN 的電源 MXC_BBFC->reg3 = 0xf; // 重置 MXC_BBFC->reg1 = 0xf; // 屏蔽內(nèi)存 MXC_BBFC->reg0 = 0xf; // Power MXC_BBFC->reg2 = 0x0; // iso MXC_BBFC->reg3 = 0x0; / / 重置 MXC_GCR->pclkdiv = (MXC_GCR->pclkdiv & ~(MXC_F_GCR_PCLKDIV_CNNCLKDIV |MXC_F_GCR_PCLKDIV_CNNCLKSEL)) |clock_divider |clock_source; 啟用 CNN 時(shí)鐘MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_CNN); 在 CNN 上啟用中斷和喚醒完成 __enable_irq(); NVIC_EnableIRQ(CNN_IRQn); NVIC_EnableEVENT(CNN_IRQn); 返回CNN_OK; } |
不同模式下的功耗
在開(kāi)發(fā)應(yīng)用時(shí),用戶可以將MAX78000切換到不同的工作模式,并相應(yīng)地安排任務(wù)以節(jié)省功耗。了解每種操作模式下的功耗以及啟動(dòng)或喚醒所需的時(shí)間,有助于用戶選擇合適的模式并規(guī)劃任務(wù)的占空比。電源監(jiān)視器可在系統(tǒng)電源模式 [4] 下使用,以測(cè)量幾種情況下的功耗和喚醒或啟動(dòng)時(shí)間。在此測(cè)試中,RISC-V和外圍設(shè)備關(guān)閉,Arm在不同的操作模式下進(jìn)行測(cè)試。對(duì)于喚醒時(shí)間測(cè)試,RISC-V用作Arm的喚醒源。 圖3顯示了該實(shí)驗(yàn)的結(jié)果。使用ISO振蕩器在60MHz下測(cè)量活動(dòng)功率和睡眠功率。其他低功耗模式在休眠期間采用 ERTCO (32kHz)(API 默認(rèn)值)。
還測(cè)試了不同時(shí)鐘頻率的啟動(dòng)時(shí)間(定義為從上電到開(kāi)始執(zhí)行主代碼的時(shí)間)和喚醒時(shí)間,如圖4所示。喚醒時(shí)間隨所選時(shí)鐘頻率進(jìn)行縮放。啟動(dòng)時(shí)間以上電默認(rèn)時(shí)鐘(ISO 在 60MHz)測(cè)量。
圖3.不同運(yùn)行模式下的功耗。
圖4.不同頻率的啟動(dòng)和喚醒時(shí)間。
美國(guó)有線電視新聞網(wǎng)電源
人工智能應(yīng)用程序的核心是由CNN加速器執(zhí)行的推理。根據(jù)應(yīng)用程序的不同,推理可以連續(xù)地對(duì)傳入的數(shù)據(jù)進(jìn)行,也可以按特定的時(shí)間間隔定期進(jìn)行。CNN推理可以在輸入數(shù)據(jù)準(zhǔn)備就緒后開(kāi)始(例如KWS案例研究),也可以在FIFO模式下(例如FaceID示例)開(kāi)始,一旦FIFO中存儲(chǔ)了足夠的數(shù)據(jù)來(lái)開(kāi)始該過(guò)程,它就會(huì)開(kāi)始。CNN 功耗分三個(gè)階段測(cè)量:
加載權(quán)重(內(nèi)核):在活動(dòng)模式下將權(quán)重加載到 CNN 內(nèi)存中發(fā)生一次
加載輸入數(shù)據(jù):每次有新的推理時(shí)。在FIFO模式下,它可以與推理重疊
推理:對(duì)輸入數(shù)據(jù)進(jìn)行操作并生成分類結(jié)果
功率監(jiān)視器使用 GPIO 信號(hào)觸發(fā)每個(gè)事件,并在 CNN 功率模式下測(cè)量每個(gè)相位的功率 [4]。為了進(jìn)行測(cè)量,在Maxim SDK中選擇了兩個(gè)示例:KWS20和FaceID。每個(gè)示例都經(jīng)過(guò)訓(xùn)練[7]、合成[8],并閃存到MAX78000評(píng)估板中。可以指示合成腳本僅為 Arm(默認(rèn):RISC-V 關(guān)閉)或 RISC-V(帶有 --deepsleep --riscv --riscv-debug 標(biāo)志)生成代碼,其中 Arm 初始化 RISC-V 并進(jìn)入睡眠狀態(tài)。合成腳本還可以包括 GPIO 信號(hào),以指示電源監(jiān)視器在 CNN 電源模式 (--energy) 下運(yùn)行。能量、時(shí)間、非活動(dòng) (I) 和活動(dòng) (A) 功率測(cè)量值顯示在功率監(jiān)視器顯示屏上。KWS20和FaceID在不同操作模式和時(shí)鐘源(100MHz時(shí)的IPO和60MHz的ISO)下的測(cè)試結(jié)果如表4和表5所示。請(qǐng)注意,F(xiàn)IFO用于FaceID,因此推理時(shí)間也包括加載時(shí)間。根據(jù)結(jié)果,當(dāng)CNN使用相同的時(shí)鐘時(shí),僅使用ARM以及ARM和RISC-V的推理時(shí)間和能量是相似的。使用較慢的時(shí)鐘源加載權(quán)重和數(shù)據(jù)需要更長(zhǎng)的時(shí)間,從而導(dǎo)致能量顯著增加。用戶應(yīng)考慮加載內(nèi)核和輸入所需的能量,以決定如何調(diào)度應(yīng)用程序。在活動(dòng)周期較小時(shí)的情況下,重新加載重量可能會(huì)改善整體功耗。在睡眠模式或LPM中,推理時(shí)間和能量預(yù)計(jì)不會(huì)改善,因?yàn)樗鼈儍H在CNN的活動(dòng)窗口內(nèi)測(cè)量。但是,它們會(huì)顯著影響應(yīng)用程序的總體功耗,如下文所示。
選擇ARM和RISC-V在空閑時(shí)間都處于睡眠狀態(tài)的案例,通過(guò)應(yīng)用不同的時(shí)鐘頻率和源來(lái)測(cè)試振蕩器頻率的影響。RISC-V驅(qū)動(dòng)加載權(quán)重和輸入,以及管理CNN。通過(guò)降低時(shí)鐘頻率,推理時(shí)間和能量呈指數(shù)級(jí)增長(zhǎng)。這表明以最高速度執(zhí)行加載和推理,然后進(jìn)入更長(zhǎng)的睡眠期往往會(huì)改善整體能耗。該實(shí)驗(yàn)的結(jié)果如圖5和圖6所示。
KWS20: 操作 模式 |
時(shí)鐘頻率(兆赫) | 內(nèi)核加載 | 輸入加載 | 推理 | |||||||||||
Arm | RISC-V | CNN | E(毫焦耳) | T(毫秒) | I(毫瓦) | A(毫瓦) | E(毫焦耳) | T(毫秒) | I(毫瓦) | A(毫瓦) | E(毫焦耳) | T(毫秒) | A(毫瓦) | ||
Arm Only | 始終處于活動(dòng)狀態(tài) | 100 | 不適用 | 50 | 0.146 | 11.6 | 7.2 | 19.8 | 0.013 | 1.1 | 7.2 | 19.27 | 0.14 | 2 | 37.45 |
SLEEP | 100 | 不適用 | 50 | 0.148 | 11.6 | 7.02 | 19.8 | 0.013 | 1.1 | 7.02 | 19.33 | 0.136 | 2 | 35.82 | |
LPM | 60 | 不適用 | 30 | 0.154 | 19.3 | 5.33 | 13.29 | 0.014 | 1.8 | 5.33 | 13.06 | 0.139 | 4.1 | 18.32 | |
Arm 和 RISC-V | 始終處于活動(dòng)狀態(tài) | 100 | 50 | 50 | 0.42854 | 34.72 | 5.47 | 17.81 | 0.04001 | 3.31 | 10.45 | 22.52 | 0.1401 | 1.99 | 21.86 |
Only Arm SLEEP | 100 | 50 | 50 | 0.04036 | 3.31 | 5.5 | 17.71 | 0.14077 | 2.01 | 21.89 | |||||
Both SLEEP | 100 | 50 | 50 | 0.03829 | 3.15 | 5.47 | 17.63 | 0.14055 | 2.19 | 21.41 | |||||
Both SLEEP | 60 | 30 | 30 | 0.487 | 50.3 | 3.48 | 13.16 | 0.0481 | 5.53 | 3.63 | 12.31 | 0.14595 | 3.38 | 13.06 | |
LPM | 60 | 30 | 30 | 0.0456 | 4.7 | 3.48 | 12.92 | 0.1424 | 3.5 | 13.67 |
面容ID: 操作 模式 |
時(shí)鐘頻率(兆赫) | 內(nèi)核加載 | 輸入加載 |
先進(jìn)先出加載 + 推理 |
|||||||||||
Arm | RISC-V | CNN | E(毫焦耳) | T(毫秒) | I(毫瓦) | A(毫瓦) | E(毫焦耳) | T(毫秒) | I(毫瓦) | A(毫瓦) | E(毫焦耳) | T(毫秒) | A(毫瓦) | ||
Arm Only | 始終處于活動(dòng)狀態(tài) | 100 | 不適用 | 50 | 0.158 | 12.2 | 7.03 | 20.01 | 0.132 | 12.1 | 7.03 | 17.91 | 0.435 | 14 | 38.19 |
SLEEP | 100 | 不適用 | 50 | 0.156 | 12.2 | 7.22 | 20.01 | 0.13 | 12.1 | 7.22 | 17.93 | 0.43 | 14 | 38 | |
LPM | 60 | 不適用 | 30 | 0.188 | 20.3 | 4.6 | 13.5 | 0.162 | 20 | 4.6 | 12.61 | 0.472 | 24 | 24.1 | |
Arm 和 RISCV | 始終處于活動(dòng)狀態(tài) | 100 | 50 | 50 | 0.26 | 36 | 3.52 | 10.64 | 0.30203 | 24.82 | 14.54 | 26.72 | 0.57958 | 24.37 | 38.39 |
Only Arm SLEEP | 100 | 50 | 50 | 0.29813 | 24.32 | 5.46 | 17.47 | 0.57823 | 24.87 | 29.3 | |||||
Both SLEEP | 100 | 50 | 50 | 0.29899 | 24.82 | 5.48 | 17.53 | 0.57921 | 24.37 | 29.18 | |||||
Both SLEEP | 60 | 30 | 30 | 0.53 | 52 | 3.45 | 13.48 | 0.36954 | 41.47 | 3.57 | 12.49 | 0.65009 | 40.72 | 19.52 | |
LPM | 60 | 30 | 30 | 0.328 | 36.5 | 3.45 | 12.45 | 0.608 | 36.1 | 20.36 | |||||
LPM, Fast FIFO | 60 | 30 | 30 | 不適用 | 不適用 | 不適用 | 不適用 | 0.524 | 25.2 | 24.29 | |||||
LPM | 60 | 60 | 60 | 不適用 | 不適用 | 不適用 | 不適用 | 0.254 | 18.2 | 6.02 | 19.19 | 0.533 | 18 | 35.58 | |
Both SLEEP | 60 | 60 | 60 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 不適用 | 0.471 | 12.6 | 43.57 |
圖5.時(shí)鐘頻率對(duì)KWS20、Arm in SLEEP和RISC-V的影響驅(qū)動(dòng)CNN并在空閑時(shí)間休眠。
圖6.時(shí)鐘頻率對(duì)FaceID的影響;手臂處于睡眠狀態(tài);RISC-V驅(qū)動(dòng)CNN并在空閑時(shí)間休眠。
在 CNN 內(nèi)存中保留權(quán)重
四個(gè) CNN 掩碼 RAM(CNN 權(quán)重存儲(chǔ))中的每一個(gè)都可以配置為在 UPM、備份或待機(jī)的情況下保留權(quán)重。另一方面,無(wú)論 CNN 掩碼 RAM 保留設(shè)置如何,CNN 配置寄存器在任何這些省電模式下(SLEEP 和 LPM 除外)都會(huì)丟失,并且需要重新加載。
對(duì)于某些低占空比應(yīng)用,用戶可以選擇關(guān)閉掩碼RAM,以進(jìn)一步降低睡眠期間的功耗。在這種情況下,應(yīng)考慮用于反復(fù)重新加載砝碼的額外功率的影響。表 6 顯示了在 UPM 期間,當(dāng) FaceID 示例保留 CNN 權(quán)重時(shí),功耗從 0.17mW 增加到 0.38mW。在這種情況下,CNN 配置重新加載只需幾分之一毫秒。但是,如果 CNN 掩碼 RAM 關(guān)閉,則權(quán)重和配置的總重新加載時(shí)間大于 12 毫秒。用戶可以研究這種權(quán)衡,以優(yōu)化其應(yīng)用程序的計(jì)劃和操作模式。以下示例演示如何打開(kāi)/關(guān)閉體重保留以及如何在喚醒后重新初始化 CNN。
Example: Turn on weight retention
MXC_BBFC->reg3 = 0xf; // Reset on
MXC_BBFC->reg1 = 0x0; // turn off CNN RAM0-3 power
MXC_BBFC->reg3 = 0x0; // Reset off
Example: Loading weights and configuring CNN with CNN Mask RAMs retention
// wake up from UPM, BACKUP, or STANDBY – CNN memory was retained
cnn_init(); // Bring state machine into consistent state
cnn_load_bias();
cnn_configure(); // Configure state machine
…
// proceed to loading data
Example: Turn off weight retention prior to sleep (must turn back on after waking up)
MXC_BBFC->reg3 = 0xf; // Reset on
MXC_BBFC->reg1 = 0x0; // turn off CNN RAM0-3 power
MXC_BBFC->reg3 = 0x0; // Reset off
/* get ready to go to sleep */
MXC_LP_EnterDeepSleepMode(); // Arm enters LPM, waits for wakup
/* restore power to CNN RAM0-3 after wakeup, or prior to next cnn_load() */
MXC_BBFC->reg3 = 0xf; // Reset
MXC_BBFC->reg1 = 0xf; // turn on CNN RAM0-3 power
MXC_BBFC->reg3 = 0x0; // Reset
Example: Loading weights and configuring CNN without CNN Mask RAMs retention
// Power up or wake up from UPM, BACKUP or STANDBY, CNN memory not retained
cnn_init(); // Bring state machine into consistent state
cnn_load_weights(); // Load kernels
cnn_load_bias();
cnn_configure(); // Configure state machine
…
// proceed to loading data
UPM | 從 UPM 喚醒后加載權(quán)重/CNN 配置 | |||
CNN Weight Retention | P(毫瓦) | E(μJ) | T(毫秒) | P(毫瓦) |
Off | 172 | 242.38 | 12.16 | 19.93 |
On | 0.387 | 1.956 | 0.1089 | 17.95 |
應(yīng)用功率
開(kāi)發(fā)應(yīng)用時(shí),選擇每個(gè)內(nèi)核的工作模式、時(shí)鐘頻率和占空比非常重要。通常,在 Arm 上運(yùn)行的應(yīng)用程序可以以更高的頻率(100MHz 而不是 50MHz APB 時(shí)鐘)執(zhí)行,并具有更優(yōu)化的代碼,這可能導(dǎo)致更低的總能耗。如果存在可以同時(shí)分配給 Arm 和 RISC-V 內(nèi)核的并行任務(wù),則為每個(gè)內(nèi)核使用正確的操作模式非常重要。在 SLEEP 和 LPM 中,內(nèi)核可以獨(dú)立運(yùn)行或休眠。但是,在其他節(jié)能模式(如 UPM 或待機(jī))中,兩個(gè)內(nèi)核同時(shí)斷電。在這種情況下,Arm 和 RISC-V 可能需要協(xié)調(diào),以便它們都使用多處理器通信進(jìn)入低功耗模式,如 [8] 的第 2.5 節(jié)所述。
對(duì)于需要偶爾較短活動(dòng)時(shí)間的應(yīng)用程序,可以選擇 UPM、待機(jī)、備份或關(guān)機(jī)模式。用戶可以評(píng)估在睡眠期間在CNN內(nèi)存中維持權(quán)重的能量成本,并與在每個(gè)活動(dòng)窗口之前重新加載權(quán)重的能量進(jìn)行比較。MAX78000評(píng)估板上的功率監(jiān)測(cè)電路可用于測(cè)量一段時(shí)間內(nèi)的整體系統(tǒng)功耗[4]。這有助于用戶根據(jù)需要在運(yùn)行時(shí)分析應(yīng)用程序電源。
案例研究 1:在 Arm 和 CNN 上進(jìn)行關(guān)鍵字發(fā)現(xiàn) (KWS20) 演示
本示例應(yīng)用演示了使用MAX20評(píng)估板[78000]識(shí)別一組9個(gè)關(guān)鍵字。應(yīng)用程序讀取 I2S麥克風(fēng)以16kHz采樣,并監(jiān)視128個(gè)采樣窗口的閾值。一旦超過(guò)靜默閾值,應(yīng)用程序就會(huì)捕獲一秒鐘的樣本,對(duì)樣本運(yùn)行 CNN 推理,并在 TFT 顯示屏上顯示分類結(jié)果。
在此基準(zhǔn)測(cè)試示例中,不使用RISC-V,Arm內(nèi)核處理整個(gè)任務(wù)。測(cè)試了幾種操作模式。系統(tǒng)電源模式下的功率監(jiān)視器用于以十秒間隔測(cè)量總能量,無(wú)論是在完全靜音(即無(wú)推理或 TFT 更新)時(shí),還是當(dāng)關(guān)鍵字以每秒一個(gè)單詞的速度說(shuō)出時(shí)(十個(gè)推理和 TFT 更新)。結(jié)果如表7所示。在活動(dòng)模式下,Arm 內(nèi)核始終運(yùn)行。無(wú)論靜默還是檢測(cè),此模式下的功率約為20mW,因?yàn)橥评砟芰恐皇强偣牡囊恍〔糠帧Mㄟ^(guò)在收集 I 的空閑時(shí)間內(nèi)使用 LPM2S采樣以及推理時(shí)間,通過(guò)在推理后關(guān)閉CNN時(shí)鐘(功耗大幅降低),功耗降至8.3mW(靜默期間為6.58mW)。
圖7.KWS20的占空比和平均功率示例在靜音或關(guān)鍵字檢測(cè)期間,TFT可以打開(kāi)或關(guān)閉。
圖7分析并演示了表7中最后兩種功耗優(yōu)化工作模式的平均功耗和活動(dòng)占空比。
案例研究 2-A:Arm 和 CNN 上的 FaceID 演示
該演示應(yīng)用演示了在MAX78000上使用面部識(shí)別識(shí)別對(duì)象。FaceID CNN模型從評(píng)估板相機(jī)拍攝的實(shí)時(shí)圖像中生成尺寸為512的嵌入。計(jì)算嵌入與已知主題嵌入的距離,如果大于閾值,則選擇最佳候選者。已知嵌入的數(shù)據(jù)庫(kù)是從主題的圖片創(chuàng)建的,并與固件集成。推理在每個(gè)圖像的 160x120 面框上執(zhí)行。為了增強(qiáng)識(shí)別性能,推理在幀上執(zhí)行三次,每次在圖片上稍微移動(dòng)面部框時(shí)執(zhí)行。
在本案例研究中,RISC-V處于關(guān)閉狀態(tài),整個(gè)任務(wù)由Arm驅(qū)動(dòng)并按順序執(zhí)行。Arm 在推理期間進(jìn)入睡眠模式,并在幀之間進(jìn)入 UPM 或待機(jī)模式約半秒。表 8 總結(jié)了 FaceID 主要功能的執(zhí)行時(shí)間和功能。表 9 顯示了每種操作模式下的時(shí)間和功耗。
處理一幀 | 平均能源 | ||||
---|---|---|---|---|---|
系統(tǒng)時(shí)鐘 | CNN Clock | Arm duty cycle | E(μJ ) | T(毫秒) | P(毫瓦) |
ARM-100兆赫 | 50兆赫 | 圖像捕獲 | 1189.8 | 171.2 | 6.95 |
CNN 內(nèi)核負(fù)載(用于備用或 UPM) | 935.3 | 37.5 | 24.94 | ||
3 x CNN 運(yùn)行 | 1164.7 | 42 | 27.73 | ||
3 x CNN 卸載 | 1.6 | 0.15 | 10.7 | ||
3x 距離計(jì)算 | 470.4 | 48 | 9.8 | ||
在 TFT 上顯示圖像 | 620.5 | 49.4 | 12.56 | ||
總 | 4382.2 | 348.25 |
模式 | Active | UPM | Sleep | Total |
時(shí)間(毫秒) | 227 | 498 | 160 | 885 |
功率(毫瓦) | 18.14 | 0.3 | 6.92 | |
能量(微焦) | 4118 | 150 | 1112 | 5380 |
模式 | 積極 | 待機(jī) | 睡 | 總 |
時(shí)間(毫秒) | 227 | 497 | 160 | 884 |
功率(毫瓦) | 18.14 | 0.03 | 6.92 | |
能量(微焦) | 4118 | 15 | 1112 | 5245 |
圖 8:在 Arm 上運(yùn)行的 FaceID 示例的占空比和平均功率。
案例研究2-B:Arm,RISC-V和CNN上的FaceID演示
在這種情況下,Arm處理TFT控制和顯示(只能通過(guò)MAX78000評(píng)估板上的Arm訪問(wèn)),RISC-V驅(qū)動(dòng)從相機(jī)捕獲的圖像、CNN加載和推理,以及針對(duì)數(shù)據(jù)庫(kù)的嵌入距離計(jì)算。共享內(nèi)存和郵箱用于協(xié)調(diào) Arm 和 RISC-V 通信。
表 10 總結(jié)了此模式下 FaceID 主要功能期間的執(zhí)行時(shí)間和功耗。處理完幀后,Arm 和 RISC-V 會(huì)像前一種情況一樣進(jìn)入待機(jī)模式大約半秒鐘。
Processing One Frame | 平均能源 | ||||
系統(tǒng)時(shí)鐘 | 美國(guó)有線電視新聞網(wǎng)時(shí)鐘 | RISC-Arm | E(μJ) | T(毫秒) | P(毫瓦) |
ARM-100MHz RISCV-60MHz | 50兆赫 | 圖像捕獲 | 1392.6 | 169 | 8.24 |
CNN 內(nèi)核加載 | 818.3 | 35.5 | 23.05 | ||
3 x CNN 運(yùn)行 | 7910.1 | 327 | 24.19 | ||
3 x CNN 卸載 | 9.5 | 0.9 | 10.5 | ||
3x 距離計(jì)算 | 699.6 | 66 | 10.6 | ||
在TFT上顯示圖像(在手臂上與RISC-V處理并行顯示圖像) | 60 | 12.48 | |||
總 | 10830 | 658.9 |
模式 | Active | Standby | Sleep | Total |
時(shí)間(毫秒) | 448 | 500 | 169 | 1117 |
功率(毫瓦) | 18.14 | 0.05 | 7.89 | |
能量(微焦) | 8126.72 | 25 | 1333.41 | 9485.13 |
圖9.在 Arm 和 RISC-V 上運(yùn)行的 FaceID 示例的占空比和平均功率。
圖 10.比較在實(shí)現(xiàn)FaceID時(shí)使用Arm,或同時(shí)使用Arm和RISC-V。
通過(guò)比較圖 10 中 FaceID 的兩種實(shí)現(xiàn),很明顯,使用 Arm 處理幀的總能量顯著降低,這主要是由于其速度更高,而不是 RISC-V(100MHz,vs 50MHz),導(dǎo)致活動(dòng)狀態(tài)的持續(xù)時(shí)間更短。
總結(jié)
本應(yīng)用筆記概述了MAX78000支持的功耗優(yōu)化技術(shù),以及與關(guān)鍵字識(shí)別和FaceID應(yīng)用配合使用時(shí)的結(jié)果。以下摘要重點(diǎn)介紹了一些改善功耗的一般建議:
通常越快越好。通常,使用更高的時(shí)鐘速率可以加快執(zhí)行速度,并減少恒定靜態(tài)功耗的影響,從而改善整體功耗。
如果沒(méi)有太多并行任務(wù)要執(zhí)行,則首選單核。在RISC-V上運(yùn)行任務(wù)由于其時(shí)鐘速率而較慢,并且與Arm相比,往往會(huì)導(dǎo)致能源使用量增加。
在沒(méi)有活動(dòng)時(shí)利用 UPM、備份和備用。當(dāng) Arm 在某些外圍設(shè)備運(yùn)行時(shí)可以休眠時(shí),請(qǐng)考慮使用 LPM。
加載內(nèi)核(權(quán)重)一次并保留在內(nèi)存中,以避免在 UPM、備份和待機(jī)模式下重新加載能量。但是,如果活動(dòng)占空比非常低,請(qǐng)考慮禁用砝碼保持或使用 POWERDOWN 模式并在每個(gè)周期中重新加載砝碼。
確保在 CNN 處理完成后關(guān)閉 CNN 時(shí)鐘,并在下一個(gè)活動(dòng)期間再次訪問(wèn) CNN 之前將其打開(kāi)。
當(dāng) CNN 正在運(yùn)行并且 Arm 正在等待推理完成時(shí),請(qǐng)使用 LPM。要喚醒,請(qǐng)使用RISC-V或喚醒定時(shí)器。CNN 中斷無(wú)法在 LPM 中直接喚醒 Arm。
使用快速FIFO或四快速FIFO(僅在RISC-V驅(qū)動(dòng)CNN時(shí)才支持)顯著改善了輸入加載時(shí)間和推理能量(--fast-fifo,--fast-fifo-quad)[8]。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7542瀏覽量
151316 -
加速器
+關(guān)注
關(guān)注
2文章
796瀏覽量
37838 -
電池
+關(guān)注
關(guān)注
84文章
10560瀏覽量
129467
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論