如何從處理器和加速器內(nèi)核中榨取最大性能?
一些設(shè)計(jì)團(tuán)隊(duì)在創(chuàng)建片上系統(tǒng)(SoC)設(shè)備時(shí),有幸能夠使用最新和最先進(jìn)的技術(shù)節(jié)點(diǎn),并且擁有相對不受限制的預(yù)算來從可信的第三方供應(yīng)商那里獲取知識產(chǎn)權(quán)(IP)模塊。然而,許多工程師并沒有這么幸運(yùn)。對于每一個(gè)「不惜一切代價(jià)」的項(xiàng)目,都有一千個(gè)「在有限預(yù)算下盡你所能」的對應(yīng)項(xiàng)目。
本文引用地址:http://2s4d.com/article/202406/459588.htm一種從成本較低、早期代、中檔處理器和加速器核心中擠出最大性能的方法是,明智地應(yīng)用緩存。
削減成本
圖 1 展示了一個(gè)典型的成本意識 SoC 場景的簡化示例。盡管 SoC 可能由許多 IP 組成,但這里為了清晰起見,只展示了三個(gè)。
圖 1SoC 內(nèi)部 IP 之間連接的主要技術(shù)是網(wǎng)絡(luò)片上(NoC)互連 IP。這可以被看作是一個(gè)跨越整個(gè)設(shè)備的 IP。圖 1 中展示的例子可以假定為一個(gè)非緩存一致性場景。在這種情況下,任何一致性需求將由軟件處理
假設(shè) SoC 的時(shí)鐘運(yùn)行在 1GHz。假設(shè)一個(gè)基于精簡指令集計(jì)算機(jī)(RISC)架構(gòu)的中央處理單元(CPU)運(yùn)行一個(gè)典型指令將消耗一個(gè)時(shí)鐘周期。然而,訪問外部 DRAM 內(nèi)存可能需要 100 到 200 個(gè)處理器時(shí)鐘周期(為了本文的目的,我們將這個(gè)平均為 150 個(gè)周期)。這意味著,如果 CPU 沒有一級(L1)緩存,并且通過 NoC 和 DDR 內(nèi)存控制器直接連接到 DRAM,那么每個(gè)指令將消耗 150 個(gè)處理器時(shí)鐘周期,導(dǎo)致 CPU 利用率僅為 1/150 = 0.67%。
這就是為什么 CPU 以及一些加速器和其他 IP 使用緩存內(nèi)存來提高處理器利用率和應(yīng)用程序性能。緩存概念基于的基本原理是局部性原則。這個(gè)觀點(diǎn)是,在任何給定時(shí)間,只有一小部分主內(nèi)存被使用,而且那個(gè)空間中的位置被多次訪問。主要是由于循環(huán)、嵌套循環(huán)和子程序,指令及其相關(guān)數(shù)據(jù)經(jīng)歷時(shí)間、空間和順序局部性。這意味著,一旦一塊指令和數(shù)據(jù)從主內(nèi)存復(fù)制到 IP 的緩存中,IP 通常會(huì)反復(fù)訪問它們。
當(dāng)今高端 CPU IP 通常至少有一個(gè)一級(L1)和二級(L2)緩存,它們通常還有一個(gè)三級(L3)緩存。此外,一些加速器 IP,如圖形處理單元(GPU)通常有自己的內(nèi)部緩存。然而,這些最新一代的高端 IP 的價(jià)格通常比上一代中檔產(chǎn)品高出 5 倍到 10 倍。因此,正如圖 1 所示,一個(gè)注重成本的 SoC 中的 CPU 可能只配備了一個(gè) L1 緩存。
更深入地考慮 CPU 及其 L1 緩存。當(dāng) CPU 在其緩存中請求某物時(shí),結(jié)果被稱為緩存命中。由于 L1 緩存通常以與處理器核心相同的速度運(yùn)行,因此緩存命中將在單個(gè)處理器時(shí)鐘周期內(nèi)處理。相比之下,如果請求的數(shù)據(jù)不在緩存中,結(jié)果稱為緩存未命中,將需要訪問主內(nèi)存,這將消耗 150 個(gè)處理器時(shí)鐘周期。
現(xiàn)在考慮運(yùn)行 1,000,000 條指令。如果緩存足夠大以包含整個(gè)程序,那么這將只消耗 1,000,000 個(gè)時(shí)鐘周期,從而實(shí)現(xiàn) 100% 的 CPU 效率。
不幸的是,中檔 CPU 中的 L1 緩存通常只有 16KB 到 64KB 的大小。如果我們假設(shè) 95% 的緩存命中率,那么我們的 1,000,000 條指令中的 950,000 條將需要一個(gè)處理器時(shí)鐘周期。其余的 50,000 條指令每條將消耗 150 個(gè)時(shí)鐘周期。因此,這種情況下的 CPU 效率可以計(jì)算為 1,000,000/((950,000 * 1) + (50,000 * 150)) = ~12%。
提升性能
提高注重成本 SoC 性能的一種成本效益高的方式是添加緩存 IP。例如,Arteris 的 CodaCache 是一個(gè)可配置的、獨(dú)立的非一致性緩存 IP。每個(gè) CodaCache 實(shí)例可以高達(dá) 8MB,并且可以在同一個(gè) SoC 中實(shí)例化多個(gè)副本,如圖 2 所示。
圖 2本文的目的并不是建議每個(gè) IP 都應(yīng)該配備一個(gè) CodaCache。圖 2 僅旨在提供潛在 CodaCache 部署的示例。
如果一個(gè) CodaCache 實(shí)例與一個(gè) IP 關(guān)聯(lián),它被稱為專用緩存(DC)?;蛘?,如果一個(gè) CodaCache 實(shí)例與一個(gè) DDR 內(nèi)存控制器關(guān)聯(lián),它被稱為末級緩存(LLC)。DC 將加速與其關(guān)聯(lián)的 IP 的性能,而 LLC 將增強(qiáng)整個(gè) SoC 的性能。
作為我們可能期望的性能提升類型的一個(gè)示例,考慮圖 2 中顯示的 CPU。讓我們假設(shè)與這個(gè) IP 關(guān)聯(lián)的 CodaCache DC 實(shí)例以處理器速度的一半運(yùn)行,并且對這個(gè)緩存的任何訪問消耗 20 個(gè)處理器時(shí)鐘周期。如果我們還假設(shè)這個(gè) DC 有 95% 的緩存命中率,那么對于 1,000,000 條指令——我們的整體 CPU+L1+DC 效率可以計(jì)算為 1,000,000/((950,000 * 1) + (47,500 * 20) + (2,500 * 150)) = ~44%。這是一個(gè)~273% 的性能提升!
結(jié)論
過去,嵌入式程序員喜歡挑戰(zhàn),盡可能從時(shí)鐘速度低、內(nèi)存資源有限的小處理器中擠出最高性能。事實(shí)上,計(jì)算機(jī)雜志通常會(huì)向讀者提出挑戰(zhàn),例如:「誰能在處理器 Y 上使用最少的時(shí)鐘周期和最小的內(nèi)存量執(zhí)行任務(wù) X?」
今天,許多 SoC 開發(fā)者喜歡挑戰(zhàn),盡可能從他們的設(shè)計(jì)中擠出最高性能,特別是如果他們被限制使用性能較低的中檔 IP。部署 CodaCache IP 作為專用和末級緩存,為工程師提供了一種負(fù)擔(dān)得起的方式來提升他們注重成本的 SoC 的性能。
評論