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

多核專家系列:多核軟件遷移與開發(fā):挑戰(zhàn)與解決方案

多核軟件調(diào)試方法與困難
多核軟件調(diào)試的難點和新方法分析
KeyStone多核SoC工具套件

基于NI LabVIEW圖形化編程對多核處理器和其他并行硬件進(jìn)行編程

多核處理器的基本架構(gòu)是什么?有哪些調(diào)試方法?
多核JTAG調(diào)試方法的特點及應(yīng)用挑戰(zhàn)

評論