用于處理性能瓶頸的面向內存的優(yōu)化技術
出處:維庫電子市場網(wǎng) 發(fā)布于:2023-07-11 16:30:03
內存系統(tǒng)優(yōu)化可以針對內存層次結構的任何階段。通用和嵌入式社區(qū)已經(jīng)開發(fā)了多種技術來優(yōu)化緩存性能。近,已開發(fā)出暫存器存儲器的優(yōu)化技術。優(yōu)化還可以針對主存儲器,特別是當它們被分區(qū)時。
內存系統(tǒng)優(yōu)化可以針對數(shù)據(jù)或指令。數(shù)組優(yōu)化是一類重要的面向數(shù)據(jù)的優(yōu)化??刂屏鞣治鰩砹烁倪M指令緩存行為的方法。全局內存分析在嵌入式系統(tǒng)中尤為重要。
許多嵌入式系統(tǒng)由許多在它們之間傳遞數(shù)據(jù)的子系統(tǒng)組成。這些子系統(tǒng)之間的緩沖區(qū)必須仔細調整大小,以避免緩沖區(qū)溢出和內存浪費。
循環(huán)轉換
一些優(yōu)化是在編譯早期應用的,無需詳細了解目標硬件。此類轉換試圖公開可供后續(xù)階段使用的并行性。循環(huán)是此類轉換的主要候選者,因為它們可以為數(shù)據(jù)并行性提供重要的來源。
循環(huán)變換在科學程序和優(yōu)化編譯器中的應用已經(jīng)被研究了幾十年。這里沒有足夠的篇幅來闡述這個主題;我們僅介紹一些概念來說明如何使用該工作主體。
理想的循環(huán)可以完全并行執(zhí)行。圖 3-15左側的代碼 有一個循環(huán)體,其中所有數(shù)組僅由i索引。因此,循環(huán)迭代不依賴于任何其他迭代。因此,所有循環(huán)體可以以任何順序并行執(zhí)行,而不會影響結果。在圖右側的代碼中,第i次 迭代取決于第i-1次 迭代的結果。
在這種情況下,在i – 1也完成之前我們無法完成迭代 i ,因此這些循環(huán)體必須按照循環(huán)枚舉的順序完成。從一個循環(huán)迭代到另一循環(huán)迭代的數(shù)據(jù)依賴性稱為循環(huán)攜帶依賴性
編譯器必須調度操作,以便它們不會違反數(shù)據(jù)依賴性,即代碼在計算之前不會嘗試使用值。一般來說,許多可能的調度都滿足數(shù)據(jù)依賴性,只要我們有辦法枚舉這些依賴性。雖然單個循環(huán)可能提供一些機會,但循環(huán)嵌套提供了許多需要詳細分析的并行可能性。
如圖 3-16所示,循環(huán)嵌套是一組循環(huán),一個循環(huán)又一個循環(huán)。完美的循環(huán)嵌套在嵌套內沒有條件。不完美的循環(huán)嵌套具有導致嵌套中的某些語句在某些情況下無法執(zhí)行的條件。
循環(huán)和循環(huán)嵌套具有許多數(shù)據(jù)依賴性——每次迭代中的每個操作都會生成自己的數(shù)據(jù)依賴性。然而,我們也知道循環(huán)提供了我們可以利用的結構和規(guī)律性。循環(huán)和循環(huán)嵌套的一些可能的轉換包括:
循環(huán)排列會更改嵌套中循環(huán)的順序。
索引重寫改變了循環(huán)索引的表達方式。
循環(huán)展開創(chuàng)建循環(huán)體的多個副本并適當?shù)匦薷难h(huán)索引。
循環(huán)拆分采用具有多個操作的循環(huán),并為每個操作創(chuàng)建一個單獨的循環(huán);循環(huán)融合執(zhí)行相反的操作。
循環(huán)平鋪將循環(huán)拆分為循環(huán)嵌套,每個內部循環(huán)處理一小塊數(shù)據(jù)。
循環(huán)填充將數(shù)據(jù)元素添加到數(shù)組中,以更改數(shù)組映射到內存系統(tǒng)結構的方式。
多胞體模型 [1; 4]通常用于表示和操作循環(huán)嵌套中的數(shù)據(jù)依賴關系。
內部循環(huán)體修改c的值,創(chuàng)建從c[i ][j ] 到c[i ][j + 1] 的數(shù)據(jù)依賴關系。我們將數(shù)組中的每個數(shù)據(jù)元素表示為二維空間中的節(jié)點,循環(huán)迭代變量形成空間的軸。這些節(jié)點在該空間中以三角形定義多面體。
我們在描述c[i ][j ]和c[i ][j + 1]之間循環(huán)傳遞依賴關系的節(jié)點之間添加邊。多胞體中的點完全描述了所有循環(huán)攜帶的依賴關系,但我們尚未降低該表示的復雜性。我們可以使用距離向量來描述一組向量的方向和距離。在這種情況下,所有數(shù)據(jù)依賴關系的形式都是[ij ] = [1 0]。執(zhí)行此計算的任何循環(huán)集都必須滿足這些循環(huán)攜帶的依賴性,但許多調度通常是可能的。我們可以應用一個排序向量來描述循環(huán)訪問節(jié)點的順序。
我們可以使用矩陣代數(shù)來操縱循環(huán)的形式。例如,如果我們想要交換循環(huán),將j 放在外循環(huán)中,將i 放在內循環(huán)中,我們可以將循環(huán)嵌套矩陣乘以交換矩陣,如下所示。
這給出了循環(huán)嵌套
for (j = 0; j < i ; j ++)
for (i = 0; i < N; i ++)
c [i + 1][ j ] = a[ i ][j ] *b[j];
并非所有循環(huán)轉換都是合法的。 Wolf 和 Lam [15] 表明,如果所有變換后的依賴向量按字典順序都是正的,也就是說,如果它們在迭代空間中不向后指向,則循環(huán)變換是合法的。
并非所有重要的循環(huán)變換都可以通過矩陣代數(shù)來操作。例如,循環(huán)平鋪將一個大數(shù)組拆分為幾個較小的數(shù)組,以更改數(shù)組元素的遍歷順序。這種變換不能用矩陣操作來表示,但是一旦循環(huán)被平鋪,就可以使用矩陣方法來分析新的循環(huán)嵌套。
循環(huán)置換和循環(huán)融合[16]可用于減少訪問矩陣元素所需的時間。當循環(huán)排列用于將數(shù)組訪問順序更改為底層數(shù)據(jù)結構中使用的順序時,可以減少延遲。多維數(shù)組由 C 以行優(yōu)先格式存儲,因此我們希望首先訪問行。圖 3-18 顯示了循環(huán)排列的示例。
循環(huán)融合允許組合和重用不同循環(huán)中對同一數(shù)組的引用。還可以修改數(shù)組元素的布局,以更改它們映射到高速緩存或并行內存系統(tǒng)的方式
例如,轉置矩陣是循環(huán)置換的替代方法。還可以填充循環(huán)以更改數(shù)據(jù)元素落入緩存行的方式。緩存性能的提高可能足以彌補浪費的內存。
鑒于內存系統(tǒng)是系統(tǒng)功耗的主要貢獻者,我們預計循環(huán)轉換可能會損害或有助于程序的能耗??驳旅谞柕热恕?[9]通過使用SimplePower模擬幾個基準程序的不同版本,研究了編譯器轉換對能耗的影響。
總結了他們的結果。他們在不同的基準上試驗了不同類型的轉換,并測量了未優(yōu)化和優(yōu)化代碼的能耗,測試了每個程序實現(xiàn)的多種緩存配置。
這些實驗的一個有趣結果是,除了循環(huán)展開之外,大多數(shù)優(yōu)化都會增加 CPU 內核的能耗。鑒于坎德米爾等人。在技術參數(shù)中,能耗的增加被內存系統(tǒng)能耗的減少所抵消,但不同的技術可能會導致此類轉換的凈能量損失。
任何優(yōu)化策略都必須平衡內存系統(tǒng)和的能耗。這些實驗還表明,增加高速緩存大小和關聯(lián)性確實會以增加高速緩存中的靜態(tài)和動態(tài)能耗為代價。
這些技術參數(shù)的存儲系統(tǒng)其余部分的增益再次抵消了損失,但不同的技術可能會改變平衡。
版權與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉載請必須注明維庫電子市場網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。
如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網(wǎng)聯(lián)系,否則視為放棄相關權利。
- eMMC 屬于閃存還是內存?從定義到應用講透核心區(qū)別2025/9/15 15:24:16
- ddr4和ddr5內存接口一樣嗎?全景解析2025/9/8 17:22:03
- 虛擬存儲器的概念和特征2025/8/4 16:49:21
- 鐵電存儲器和flash的區(qū)別2025/7/30 16:56:02
- 內存頻率是什么_內存頻率高有什么好處2025/7/29 17:07:27