自編教材分享:第八章—訪存優(yōu)化(一)



為了平衡成本、保持存儲容量及訪存速度,現(xiàn)代計算機的存儲系統(tǒng)中一般采用多種不同的存儲器件結(jié)合即多級層次存儲結(jié)構(gòu)。如下圖所示,最上層的寄存器在處理器芯片內(nèi)直接參與運算,它的速度最快、平均每位的價格最高、容量最小。高速緩存存儲器、主存儲器、輔助存儲器這三個級別的存儲容量依次增大,但存儲速度、價格成本及處理器訪問的頻度依次降低。

寄存器分配
減少全局變量
全局變量的有效范圍在整個程序內(nèi),且全局變量會獨占一個寄存器,導(dǎo)致過程內(nèi)可分配寄存器的數(shù)量減少,因此編碼時應(yīng)盡量減少全局變量的使用。
初始代碼:
優(yōu)化后代碼:
直接讀取寄存器
一般情況下,編譯時主要對標(biāo)量進行分配寄存器,因此在編寫程序時應(yīng)該盡量將數(shù)組變?yōu)闃?biāo)量,這樣可以直接讀取寄存器中的數(shù)據(jù),從而避免每次都從緩存中加載數(shù)據(jù),減少部分程序中數(shù)據(jù)讀寫耗費的時間。對優(yōu)化前后示例進行測試,結(jié)果顯示,標(biāo)量替換前耗時0.96秒,替換優(yōu)化后耗時0.88秒。
原始代碼:
優(yōu)化后代碼:
除此之外,此方法還可以減少內(nèi)存寫的次數(shù)。對代碼進行測試,設(shè)置輸入的數(shù)據(jù)規(guī)模為10000*10000,結(jié)果顯示優(yōu)化前耗時0.35s,優(yōu)化后耗時0.28s,可見對內(nèi)存寫操作的減少會提升程序的性能。
原始代碼:
優(yōu)化后代碼:
優(yōu)化人員除了需要考慮寄存器合理分配的問題之外,還需要防止寄存器溢出。當(dāng)所需寄存器的數(shù)量大于可分配寄存器數(shù)量時,就會出現(xiàn)寄存器溢出,可能會抵消前期調(diào)優(yōu)積累的性能優(yōu)勢。
原始代碼:
匯編代碼:
寄存器重用
當(dāng)數(shù)據(jù)從緩存加載到寄存器后,應(yīng)該盡可能地將后續(xù)還要使用的數(shù)據(jù)保留在寄存器,以避免該數(shù)據(jù)再次從緩存讀取,即寄存器重用可以有效地減少內(nèi)存訪問。
原始代碼:
優(yōu)化后代碼:
