在本文中,我們將討論多核處理的各個(gè)方面,包括了解不同類型的多核處理器以及為什么這些設(shè)備在今天變得普遍和流行。然后,我們將研究在芯片上擁有多個(gè)內(nèi)核所帶來的一些挑戰(zhàn),以及現(xiàn)代多核感知調(diào)試器如何幫助使這些復(fù)雜任務(wù)更易于管理。
系統(tǒng)性能
有許多方法可以提高嵌入式計(jì)算系統(tǒng)的性能,從巧妙的編譯器算法到高效的硬件解決方案。編譯器優(yōu)化對(duì)于從易于閱讀和理解的高級(jí)語言代碼中獲得最有效的指令調(diào)度非常重要。除此之外,系統(tǒng)可以利用項(xiàng)目中可用的并行性來一次處理多個(gè)事情。當(dāng)然,縮放時(shí)鐘頻率可能是從計(jì)算系統(tǒng)中獲得更高性能的有效方法。
不幸的是,可以假設(shè)時(shí)鐘速度呈幾何級(jí)數(shù)增長的時(shí)代已經(jīng)過去。而代碼優(yōu)化只能給你帶來這么多的改進(jìn),尤其是現(xiàn)在,經(jīng)過多代編譯器技術(shù)的發(fā)展。這讓我們將并行性視為隨著時(shí)間的推移繼續(xù)擴(kuò)展我們的系統(tǒng)性能的最佳機(jī)會(huì)。
并行性
挖井是一項(xiàng)難以并行化的任務(wù)。其他人可以幫忙,把泥土鏟走,但實(shí)際挖洞通常是一個(gè)人的工作。結(jié)果,增加更多的人不會(huì)更快地完成工作。事實(shí)上,其他人可能只是妨礙并減慢進(jìn)程。有些任務(wù)不適合并行化。
其他任務(wù)很容易并行化。挖溝是一項(xiàng)適合并行化的任務(wù)。許多人可以并肩工作。
這張圖片顯示了一種稱為 MIMD(多指令多數(shù)據(jù))的并行形式。每個(gè)挖掘機(jī)都是一個(gè)獨(dú)立的單元,可以執(zhí)行不同的任務(wù)。在這種情況下,您可以想象四臺(tái)挖掘機(jī)完成工作的時(shí)間大約是一臺(tái)挖掘機(jī)的1/4 。
使用 SIMD(單指令多數(shù)據(jù)),單個(gè)挖掘機(jī)可能會(huì)使用像這樣的鏟子。
SIMD 單元一次只能執(zhí)行一種類型的計(jì)算,但它可以并行執(zhí)行多條數(shù)據(jù)。這些類型的指令在許多處理器的向量處理單元中很常見。如果您的數(shù)據(jù)非常規(guī)則,并且您需要對(duì)大型數(shù)據(jù)集(例如在圖像處理中)反復(fù)執(zhí)行相同的操作,這將非常有用。然而,對(duì)于更一般的計(jì)算任務(wù),該模型缺乏靈活性并且不會(huì)產(chǎn)生性能提升。
這導(dǎo)致我們選擇將多個(gè)完整的 CPU 子系統(tǒng)放在一個(gè)芯片上,從而創(chuàng)建多核處理器。一個(gè)芯片上的多個(gè)內(nèi)核可以擴(kuò)展性能。每個(gè)內(nèi)核都是一個(gè)完整的 CPU,可以獨(dú)立工作或與其他內(nèi)核協(xié)同工作。
不同類型的多核處理
處理器芯片上可能有不同類型的內(nèi)核組合,以及工作在它們之間的分配方式。
同構(gòu)多核處理器具有相同處理器內(nèi)核的兩個(gè)或多個(gè)副本。每個(gè)核心都自主運(yùn)行,并且可以通過共享內(nèi)存或郵箱系統(tǒng)等多種機(jī)制與其他核心進(jìn)行通信和同步。每個(gè)處理器都有自己的寄存器和功能單元,并且可能有自己的本地內(nèi)存或緩存。然而,使這種同質(zhì)化的原因在于我們正在查看的所有內(nèi)核都是同一類型的。
另一種類型的多核芯片稱為異構(gòu)多核,具有兩種或多種不同類型的 CPU 內(nèi)核。這里的內(nèi)核可能具有非常不同的特性,這使得它們非常適合系統(tǒng)處理需求的不同部分。一個(gè)例子可能是藍(lán)牙通信芯片,其中一個(gè)內(nèi)核專用于管理藍(lán)牙協(xié)議棧,而另一個(gè)內(nèi)核可能管理外部通信、應(yīng)用程序處理、人機(jī)界面等。這種多核芯片可用于需要兩者的應(yīng)用程序一個(gè)核心的實(shí)時(shí)專用性能和另一個(gè)核心的系統(tǒng)管理功能。
現(xiàn)在我們來看看核心是如何使用的。當(dāng)您擁有多個(gè)內(nèi)核并且這些內(nèi)核運(yùn)行相同的項(xiàng)目代碼庫時(shí),就會(huì)發(fā)生對(duì)稱多處理 (SMP)。不同的內(nèi)核可能同時(shí)運(yùn)行代碼的不同部分,但代碼是作為單個(gè)項(xiàng)目構(gòu)建的,并由一些控制程序(如實(shí)時(shí)操作系統(tǒng) (RTOS))分派到不同的內(nèi)核。必要時(shí),以這種方式工作的內(nèi)核必須屬于同一類型,因?yàn)樗鼈兌际褂脼橐环N類型的處理器編譯的相同項(xiàng)目代碼。
當(dāng)您擁有多個(gè)內(nèi)核或處理器并且每個(gè)處理器都運(yùn)行自己的項(xiàng)目應(yīng)用程序時(shí),就會(huì)發(fā)生非對(duì)稱多處理 (AMP)。獨(dú)立的核心可能會(huì)不時(shí)同步或通信,但它們每個(gè)都有自己執(zhí)行的代碼庫。由于他們每個(gè)人都在運(yùn)行自己的項(xiàng)目,因此這些內(nèi)核可以是不同類型的,也可以是異構(gòu)內(nèi)核。但是,這不是必需的。如果兩個(gè)或多個(gè)相同類型的內(nèi)核運(yùn)行不同的項(xiàng)目代碼,則它們是同質(zhì)內(nèi)核,運(yùn)行 AMP。
請(qǐng)注意,對(duì)于 SMP 操作,您必須擁有多個(gè)同質(zhì)內(nèi)核,因?yàn)樗鼈兌歼\(yùn)行來自同一個(gè)項(xiàng)目代碼庫的代碼。但是,如果您有多個(gè)項(xiàng)目具有不同的代碼庫以運(yùn)行不同的內(nèi)核,則這些項(xiàng)目可能是不同的內(nèi)核,例如在異構(gòu)系統(tǒng)中。但是,如果內(nèi)核相同,那也可以。
使用多核的原因
在過去的幾年里,在 1960 年代中期創(chuàng)造的摩爾定律似乎終于失去了動(dòng)力,或者至少正在放緩。處理器時(shí)鐘頻率不再每 2-3 年翻一番,事實(shí)上,最高速度的 CPU 多年來一直在低個(gè)位數(shù) GHz 范圍內(nèi)達(dá)到上限。
繼續(xù)推動(dòng)性能極限的一種方法是讓更多 CPU 內(nèi)核協(xié)同工作,前提是您可以有效地使用它們。
雖然速度已經(jīng)趨于穩(wěn)定,但晶體管尺寸卻在繼續(xù)縮小。雖然速度比過去慢,但小型晶體管可以在單個(gè)芯片上封裝更多邏輯。因此,使用這些晶體管將多個(gè) CPU 內(nèi)核放在一個(gè)芯片上可以利用多個(gè) CPU 和內(nèi)存子系統(tǒng)之間更快、更寬的總線互連。
異構(gòu)非對(duì)稱多處理在應(yīng)用程序具有兩個(gè)或多個(gè)具有非常不同的特征和要求的工作負(fù)載時(shí)非常有用。一種可能依賴于實(shí)時(shí)和中斷延遲,而另一種可能更依賴于吞吐量而不是響應(yīng)時(shí)間。該模型運(yùn)行良好:例如,設(shè)備可能專用一個(gè)內(nèi)核來管理藍(lán)牙或 Zigbee 等通信協(xié)議棧,而另一個(gè)內(nèi)核則充當(dāng)運(yùn)行人類交互和整體系統(tǒng)管理操作的應(yīng)用處理器。隔離的通信處理器可以提供協(xié)議棧所需的出色實(shí)時(shí)響應(yīng)。此外,通信軟件可以通過標(biāo)準(zhǔn)認(rèn)證,通過將功能修改與系統(tǒng)的這一部分分開,使整個(gè)產(chǎn)品易于認(rèn)證。
使用多核的挑戰(zhàn)
當(dāng)您在一個(gè)芯片上放置多個(gè) CPU 內(nèi)核時(shí)會(huì)帶來哪些挑戰(zhàn)?好吧,讓我們深入研究一下。
單一應(yīng)用程序或軟件可能無法有效地使用可用的計(jì)算資源。您需要將應(yīng)用程序組織成可以同時(shí)運(yùn)行的并行任務(wù),以使用多個(gè)內(nèi)核的資源。這可能需要軟件工程師以一種不熟悉的方式來考慮嵌入式設(shè)計(jì)。遷移現(xiàn)有的單循環(huán)代碼可能不是很容易。線程太少甚至線程太多都可能成為性能障礙。
在多個(gè)線程或進(jìn)程之間共享數(shù)據(jù)結(jié)構(gòu)或 I/O 設(shè)備的應(yīng)用程序可能存在串行瓶頸。為了維護(hù)數(shù)據(jù)完整性,對(duì)這些共享資源的訪問可能必須使用鎖定技術(shù)進(jìn)行序列化,例如,讀鎖、讀寫鎖、寫鎖、自旋鎖、互斥鎖等。由于多個(gè)線程或試圖獲取鎖以使用共享資源的進(jìn)程之間的高鎖爭用,設(shè)計(jì)低效的鎖可能會(huì)造成瓶頸。這可能會(huì)降低應(yīng)用程序或軟件的性能。如果某些內(nèi)核停止等待其他內(nèi)核等待公共鎖導(dǎo)致兩個(gè)內(nèi)核的性能比一個(gè)差,則應(yīng)用程序的性能甚至?xí)S著內(nèi)核或處理器數(shù)量的增加而降低。
不均勻分布的工作負(fù)載在利用計(jì)算資源方面可能效率低下。您可能必須將大型任務(wù)分解為可以并行運(yùn)行的較小任務(wù)。您可能必須將串行算法更改為并行算法以提高性能和可擴(kuò)展性。但是,如果一些任務(wù)運(yùn)行得非常快,而另一些任務(wù)需要大量時(shí)間,則快速任務(wù)可能會(huì)花費(fèi)大量時(shí)間等待長任務(wù)完成。這會(huì)導(dǎo)致寶貴的計(jì)算資源閑置和性能擴(kuò)展不佳。
RTOS 可能會(huì)幫助您,但可能無法解決所有問題。在 SMP 系統(tǒng)中,這實(shí)際上是在多個(gè)類似內(nèi)核上調(diào)度任務(wù)的必要條件。要做的工作可以按數(shù)據(jù)或按功能劃分。如果您按數(shù)據(jù)塊劃分事物,則每個(gè)線程可能會(huì)執(zhí)行處理管道中的所有步驟。或者,您可能讓一個(gè)線程在函數(shù)中執(zhí)行一個(gè)步驟,而另一個(gè)線程執(zhí)行下一步,等等。一種技術(shù)相對(duì)于另一種技術(shù)的優(yōu)勢(shì)將取決于要完成的工作的特征。
在多核環(huán)境中調(diào)試
調(diào)試多核系統(tǒng)時(shí)有用的第一件事是所有內(nèi)核的可見性。理想情況下,我們應(yīng)該能夠同時(shí)或單獨(dú)啟動(dòng)和停止核心——也就是說,在其他核心運(yùn)行或停止時(shí)單步執(zhí)行一個(gè)核心。多核斷點(diǎn)對(duì)于根據(jù)另一個(gè)核的狀態(tài)來控制一個(gè)核的操作非常有用。
多核跟蹤可能很難實(shí)現(xiàn)。管理來自多個(gè)內(nèi)核的高帶寬跟蹤信息,以及處理來自不同類型內(nèi)核的潛在不同類型的跟蹤數(shù)據(jù)是一個(gè)真正的挑戰(zhàn)。
(來源:IAR Systems,圖表由 Arm Ltd. 提供)
Here is an example of a processor with both heterogeneous and homogeneous multicore implementations. There are two homogeneous core groups, one based on a dual Arm Cortex-A57 and the other on a quad Cortex-A53. These groups are homogeneous within themselves but heterogeneous among the two groups.
CoreSight 調(diào)試架構(gòu)提供了與所有內(nèi)核上的調(diào)試資源進(jìn)行通信的協(xié)議和機(jī)制,調(diào)試器負(fù)責(zé)管理所有這些信息并解析來自不同內(nèi)核的消息。交叉觸發(fā)接口和矩陣(CTI、CTM)允許同時(shí)停止兩個(gè)內(nèi)核、觸發(fā)跟蹤等。跟蹤基礎(chǔ)設(shè)施包括用于平滑跟蹤流的串行 (SWD) 和并行 (TPIU) 跟蹤端口,以及將來自每個(gè)源的跟蹤合并為單個(gè)流的跟蹤漏斗。與雙核部分相比,圖中所示的芯片控制起來要復(fù)雜得多。
IAR Embedded Workbench 中的 C-SPY 調(diào)試器支持對(duì)稱和非對(duì)稱多核調(diào)試。這是通過多核選項(xiàng)卡上的調(diào)試器選項(xiàng)啟用的。要啟用對(duì)稱多核調(diào)試,只需要輸入內(nèi)核數(shù)量,讓調(diào)試器知道要與多少個(gè)不同的處理器通信。其他 IDE 可能有類似的可用選項(xiàng)。
在右側(cè)(上圖),您可以在調(diào)試器中看到一個(gè)視圖,其中 4 核 Cortex-A9 SMP 集群顯示其內(nèi)核狀態(tài),其中 2 號(hào)內(nèi)核停止,而其他三個(gè)內(nèi)核正在執(zhí)行。
非對(duì)稱多核系統(tǒng)可能使用異構(gòu)多核部分,例如 ST STM32H745/755,它具有一個(gè) Cortex-M7 內(nèi)核和一個(gè)單獨(dú)的 Cortex-M4。在這種情況下,當(dāng)調(diào)試器運(yùn)行時(shí),它會(huì)使用 IDE 的兩個(gè)實(shí)例(Master 和 Node)。每個(gè)核心一個(gè),因?yàn)閮蓚€(gè)核心運(yùn)行不同的項(xiàng)目代碼。
在 IDE 的每個(gè)實(shí)例中,都有關(guān)于正在控制的核心以及在另一個(gè)窗口中控制的另一個(gè)核心的狀態(tài)信息。可以選擇一些選項(xiàng)來控制調(diào)試器的行為,以便一起或單獨(dú)啟動(dòng)和停止內(nèi)核在開發(fā)人員的控制之下。
由于交叉觸發(fā)接口 (CTI) 和交叉觸發(fā)矩陣 (CTM) 共同構(gòu)成了 Arm 嵌入式交叉觸發(fā)功能,因此這種完全控制成為可能。共有三個(gè) CTI 組件,一個(gè)在系統(tǒng)級(jí),一個(gè)專用于 Cortex-M7,一個(gè)專用于 Cortex-M4。三個(gè) CTI 通過 CTM 相互連接,如下圖所示。調(diào)試器可以通過系統(tǒng)訪問端口和相關(guān)的 APB-D 訪問系統(tǒng)級(jí)和 Cortex-M4 CTI。Cortex-M7 CTI 物理集成在 Cortex-M7 內(nèi)核中,可通過 Cortex-M7 訪問端口訪問。
(來源:IAR Systems,圖表由 STMicroelectronics 提供,來自 M0399 參考手冊(cè))
CTI 允許來自各種來源的事件觸發(fā)調(diào)試和跟蹤活動(dòng)。例如,在一個(gè)處理器內(nèi)核中達(dá)到的斷點(diǎn)可以停止另一個(gè)處理器,或者可以將在外部觸發(fā)輸入上檢測(cè)到的轉(zhuǎn)換設(shè)置為開始代碼跟蹤。
在此示例中,異構(gòu)多核處理器在單個(gè)芯片上具有 Cortex-M7 內(nèi)核和 Cortex-M4 內(nèi)核,使用了兩個(gè)獨(dú)立的程序:一個(gè)在 Cortex-M4 上運(yùn)行,另一個(gè)在 Cortex-M7 上運(yùn)行。每個(gè)項(xiàng)目都使用 FreeRTOS 來管理處理器上運(yùn)行的軟件。兩個(gè)內(nèi)核通過共享內(nèi)存接口進(jìn)行通信。但是,應(yīng)用程序都使用 FreeRTOS 消息傳遞機(jī)制與其他處理器進(jìn)行通信,并隱藏了底層機(jī)制的復(fù)雜性。因此,從一個(gè) CPU 的角度來看,它只是通過另一個(gè)任務(wù)發(fā)送或接收消息。另一個(gè)任務(wù)恰好在另一個(gè) CPU 內(nèi)核上運(yùn)行是透明的。
下圖是 IDE 中的 Workspace explorer 寡婦。此處顯示了兩個(gè)項(xiàng)目的概述,因此您可以查看 Cortex-M7 和 Cortex-M4 項(xiàng)目的內(nèi)容。
通過選擇窗口底部的其他選項(xiàng)卡之一,您可以將焦點(diǎn)切換到 M4 項(xiàng)目或 M7 項(xiàng)目。
Cortex-M7 項(xiàng)目有一個(gè)任務(wù),它向 Cortex-M4 上運(yùn)行的任務(wù)發(fā)送消息。Cortex-M4 有兩個(gè)正在運(yùn)行的接收任務(wù)實(shí)例。Cortex-M7 有一個(gè)“檢查”任務(wù),它會(huì)定期運(yùn)行以查看事情是否仍在正常運(yùn)行。
最后,調(diào)試器加載這兩個(gè)項(xiàng)目。這意味著為第二個(gè)調(diào)試器啟動(dòng)了一個(gè)額外的 Embedded Workbench 實(shí)例。
要為非對(duì)稱多處理支持設(shè)置調(diào)試器,我們需要將一個(gè)項(xiàng)目指定為“主”項(xiàng)目,將另一個(gè)項(xiàng)目指定為“節(jié)點(diǎn)”項(xiàng)目。事實(shí)上,選擇是任意的,只決定了哪個(gè)項(xiàng)目有能力在啟動(dòng)時(shí)啟動(dòng)另一個(gè)。
“節(jié)點(diǎn)”項(xiàng)目沒有特殊設(shè)置,并且不知道它正在作為另一個(gè)項(xiàng)目的“節(jié)點(diǎn)”運(yùn)行。
這樣,當(dāng)“主”項(xiàng)目啟動(dòng)其調(diào)試器時(shí),它會(huì)自動(dòng)啟動(dòng) IDE 的另一個(gè)實(shí)例以適應(yīng)第二個(gè)調(diào)試器會(huì)話,第二個(gè)項(xiàng)目將在其中運(yùn)行。
概括
當(dāng)摩爾定律用完時(shí),多核可以提高性能。然而,多核帶來了調(diào)試挑戰(zhàn),并且需要特定的開發(fā)方法,以便應(yīng)用程序可以最大限度地利用多核架構(gòu)。
配置調(diào)試設(shè)置后,多核調(diào)試從未如此簡單。如果您以前使用過調(diào)試單核的工具,您將認(rèn)識(shí)到其中包含的所有內(nèi)容,并且您可能永遠(yuǎn)不會(huì)理解其他人談?wù)摱嗪苏{(diào)試對(duì)他們來說有多困難。
現(xiàn)代硬件和軟件工具將幫助您克服多核調(diào)試挑戰(zhàn)。
注意:除非另有說明,否則圖片均由 IAR Systems 提供。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
19100瀏覽量
228814 -
芯片
+關(guān)注
關(guān)注
452文章
50206瀏覽量
420887 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18973瀏覽量
302031
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論