多核處理器為嵌入式系統(tǒng)帶來(lái)了顯著的性能和功耗優(yōu)勢(shì),但它們也增加了傳統(tǒng)遷移工作負(fù)載的多處理復(fù)雜性。盡管如此,開(kāi)發(fā)團(tuán)隊(duì)可以通過(guò)遵循一些簡(jiǎn)單的技術(shù)來(lái)成功管理向多核的過(guò)渡。
移植到便攜式標(biāo)準(zhǔn)
通常,遷移到多核不僅僅涉及遷移到新處理器。在許多情況下,開(kāi)發(fā)人員必須首先將舊代碼移植到新的編程語(yǔ)言、編譯器或操作系統(tǒng)。 強(qiáng)烈建議使用 POSIX 等開(kāi)放標(biāo)準(zhǔn),因?yàn)樗С衷S多通用和實(shí)時(shí)操作系統(tǒng)。這樣做將有助于確保應(yīng)用程序的大部分內(nèi)容(包括其與操作系統(tǒng)的接口)是可移植的。同樣重要的是,POSIX標(biāo)準(zhǔn)在多處理系統(tǒng)中有著悠久的歷史,而多核處理器只是多處理片上系統(tǒng)(SoC)。
分而治之
支持對(duì)稱多處理 (SMP) 的操作系統(tǒng)是同構(gòu)多核處理器的最佳選擇。SMP 將分配 CPU 資源的復(fù)雜細(xì)節(jié)留給操作系統(tǒng),而不是應(yīng)用程序。從應(yīng)用程序的角度來(lái)看,與操作系統(tǒng)的接口保持不變,無(wú)論內(nèi)核數(shù)量如何,從 1 到 N。因此,隨著更多內(nèi)核的添加,應(yīng)用程序可以輕松擴(kuò)展。
在 SMP 模式下運(yùn)行的多核系統(tǒng)提供了真正的并行性,但一些傳統(tǒng)應(yīng)用程序從未設(shè)計(jì)為并行執(zhí)行。通常,大部分代碼不使用線程,這將允許應(yīng)用程序的不同部分并行運(yùn)行,或者僅使用線程來(lái)隔離阻塞系統(tǒng)調(diào)用,例如文件或網(wǎng)絡(luò) I/O。
另一個(gè)典型的陷阱發(fā)生在代碼使用優(yōu)先級(jí)方案來(lái)控制對(duì)共享內(nèi)存的訪問(wèn)時(shí)。例如,在單處理器嵌入式系統(tǒng)中,軟件開(kāi)發(fā)人員通??梢约僭O(shè)高優(yōu)先級(jí)線程和低優(yōu)先級(jí)線程不會(huì)同時(shí)訪問(wèn)內(nèi)存,因?yàn)楦邇?yōu)先級(jí)線程將始終搶占低優(yōu)先級(jí)線程。因此,許多程序無(wú)法使用互斥鎖(互斥鎖)來(lái)正確同步對(duì)內(nèi)存的訪問(wèn)。但是,在 SMP 多核系統(tǒng)中,這兩個(gè)線程可以并行運(yùn)行,因此會(huì)同時(shí)訪問(wèn)內(nèi)存,從而產(chǎn)生不可預(yù)測(cè)的結(jié)果。由于同步錯(cuò)誤,可能存在其他隱蔽問(wèn)題,這些錯(cuò)誤在單處理器系統(tǒng)上完美運(yùn)行,但僅在多處理器執(zhí)行中出現(xiàn)。
為了解決這樣的問(wèn)題,開(kāi)發(fā)人員可以分而治之:將問(wèn)題代碼隔離在多核芯片的單個(gè)內(nèi)核上,直到代碼可以修復(fù)。為此,開(kāi)發(fā)人員可以使用綁定多處理 (BMP),這是 SMP 的擴(kuò)展,允許選定的進(jìn)程僅在指定的內(nèi)核或 CPU 上運(yùn)行。實(shí)際上,BMP 為遺留代碼提供了一個(gè)單核、非并行執(zhí)行環(huán)境,同時(shí)允許其他代碼利用 SMP 的完全并行性。開(kāi)發(fā)團(tuán)隊(duì)在修改舊代碼以在其新的并行環(huán)境中正常運(yùn)行后,可以隨后刪除 CPU 綁定。
利用這些工具
開(kāi)發(fā)團(tuán)隊(duì)還必須使用正確的工具。特別是,他們需要可視化工具來(lái)幫助他們查明并行環(huán)境中代碼行為異常的區(qū)域。大多數(shù)情況下,這項(xiàng)工作涉及檢測(cè)和糾正前面提到的同步錯(cuò)誤。
一旦應(yīng)用程序正常運(yùn)行,它仍然可能無(wú)法利用多核芯片的所有 CPU 容量??梢暬ぞ咴谶@方面也可以提供幫助,它允許開(kāi)發(fā)人員減少對(duì)共享資源(熱點(diǎn))的爭(zhēng)用,消除過(guò)多的線程遷移或內(nèi)核之間的通信,并找到并行化代碼的機(jī)會(huì)。隨著多核平臺(tái)內(nèi)核數(shù)量的增加,可視化工具將是成功利用多核提供的性能優(yōu)勢(shì)的關(guān)鍵。
為了提供這樣的分析,多核可視化工具必須超越傳統(tǒng)調(diào)試工具的范圍。例如,它們必須在線程從一個(gè)內(nèi)核遷移到另一個(gè)內(nèi)核時(shí)跟蹤線程,并診斷在內(nèi)核之間流動(dòng)的消息。他們還必須靈活控制記錄哪些事件以及何時(shí)記錄,以便開(kāi)發(fā)人員可以專(zhuān)注于關(guān)注的領(lǐng)域。
進(jìn)行過(guò)渡
“多核”不需要是一個(gè)壞詞,也不需要為傳統(tǒng)遷移添加另一個(gè)障礙。采用POSIX等可移植編程標(biāo)準(zhǔn),使用專(zhuān)為多核平臺(tái)設(shè)計(jì)的操作系統(tǒng),隔離遺留代碼以在單個(gè)內(nèi)核上運(yùn)行,以及使用可視化工具,所有這些都使過(guò)渡變得不那么令人生畏。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
20362瀏覽量
255494 -
嵌入式
+關(guān)注
關(guān)注
5210文章
20727瀏覽量
338150
發(fā)布評(píng)論請(qǐng)先 登錄
S32K3跳轉(zhuǎn)到應(yīng)用程序后,PTD5上沒(méi)有活動(dòng),為什么?
s32k344 accMem;demo進(jìn)行配置并沒(méi)有成功初始化,程序進(jìn)入hardfault怎么辦
RDMA設(shè)計(jì)56:如何設(shè)計(jì)基于RDMA的應(yīng)用程序
如何構(gòu)建藍(lán)牙應(yīng)用程序?
JH7110 什么時(shí)候支持 Vulkan API?
無(wú)質(zhì)量損失的數(shù)據(jù)遷移:Nikon SLM Solutions信賴3Dfindit企業(yè)版
使用RT-Thread+ST-link燒錄程序到STM32F4沒(méi)有報(bào)錯(cuò)但是程序沒(méi)有燒錄進(jìn)去,是哪里問(wèn)題?
原來(lái)正常的studio工程在cubemx更新(遷移)版本后編譯報(bào)錯(cuò)在,怎么解決?
學(xué)生適合使用的SOLIDWORKS 云應(yīng)用程序
請(qǐng)問(wèn)如何使用 NUC220 將應(yīng)用程序從 APROM 0x0000切換到 APROM 0x4000?
【老法師】多核異構(gòu)處理器中M核程序的啟動(dòng)、編寫(xiě)和仿真
將舊版應(yīng)用程序遷移到多核并沒(méi)有那么可怕
評(píng)論