前 言
雖然CPU主頻的提升會(huì)帶動(dòng)系統(tǒng)性能的改善,但系統(tǒng)性能的提高不僅僅取決于CPU,還與系統(tǒng)架構(gòu)、指令結(jié)構(gòu)、信息在各個(gè)部件之間的傳送速度及存儲(chǔ)部件的存取速度等因素有關(guān),特別是與CPU/內(nèi)存之間的存取速度有關(guān)。若CPU工作速度較高,但內(nèi)存存取速度較低,則造成CPU等待,降低處理速度,浪費(fèi)CPU的能力。如500MHz的PⅢ,一次指令執(zhí)行時(shí)間為2ns,與其相配的內(nèi)存(SDRAM)存取時(shí)間為10ns,比前者慢5倍,CPU和PC的性能怎么發(fā)揮出來(lái)?
如何減少CPU與內(nèi)存之間的速度差異?有4種辦法:一種是在基本總線周期中插入等待,這樣會(huì)浪費(fèi)CPU的能力。另一種方法是采用存取時(shí)間較快的SRAM作存儲(chǔ)器,這樣雖然解決了CPU與存儲(chǔ)器間速度不匹配的問(wèn)題,但卻大幅提升了系統(tǒng)成本。第3種方法是在慢速的DRAM和快速CPU之間插入一速度較快、容量較小的SRAM,起到緩沖作用;使CPU既可以以較快速度存取SRAM中的數(shù)據(jù),又不使系統(tǒng)成本上升過(guò)高,這就是Cache法。還有一種方法,采用新型存儲(chǔ)器。目前,一般采用第3種方法。它是PC系統(tǒng)在不大增加成本的前提下,使性能提升的一個(gè)非常有效的技術(shù)。
本文簡(jiǎn)介了Cache的概念、原理、結(jié)構(gòu)設(shè)計(jì)以及在PC及CPU中的實(shí)現(xiàn)。
Cache的工作原理
Cache的工作原理是基于程序訪問(wèn)的局部性?! ?/p>
對(duì)大量典型程序運(yùn)行情況的分析結(jié)果表明,在一個(gè)較短的時(shí)間間隔內(nèi),由程序產(chǎn)生的地址往往集中在存儲(chǔ)器邏輯地址空間的很小范圍內(nèi)。指令地址的分布本來(lái)就是連續(xù)的,再加上循環(huán)程序段和子程序段要重復(fù)執(zhí)行多次。因此,對(duì)這些地址的訪問(wèn)就自然地具有時(shí)間上集中分布的傾向。數(shù)據(jù)分布的這種集中傾向不如指令明顯,但對(duì)數(shù)組的存儲(chǔ)和訪問(wèn)以及工作單元的選擇都可以使存儲(chǔ)器地址相對(duì)集中。這種對(duì)局部范圍的存儲(chǔ)器地址頻繁訪問(wèn),而對(duì)此范圍以外的地址則訪問(wèn)甚少的現(xiàn)象,就稱為程序訪問(wèn)的局部性?! ?/p>
根據(jù)程序的局部性原理,可以在主存和CPU通用寄存器之間設(shè)置一個(gè)高速的容量相對(duì)較小的存儲(chǔ)器,把正在執(zhí)行的指令地址附近的一部分指令或數(shù)據(jù)從主存調(diào)入這個(gè)存儲(chǔ)器,供CPU在一段時(shí)間內(nèi)使用。這對(duì)提高程序的運(yùn)行速度有很大的作用。這個(gè)介于主存和CPU之間的高速小容量存儲(chǔ)器稱作高速緩沖存儲(chǔ)器(Cache)?! ?/p>
系統(tǒng)正是依據(jù)此原理,不斷地將與當(dāng)前指令集相關(guān)聯(lián)的一個(gè)不太大的后繼指令集從內(nèi)存讀到Cache,然后再與CPU高速傳送,從而達(dá)到速度匹配。CPU對(duì)存儲(chǔ)器進(jìn)行數(shù)據(jù)請(qǐng)求時(shí),通常先訪問(wèn)Cache。由于局部性原理不能保證所請(qǐng)求的數(shù)據(jù)百分之百地在Cache中,這里便存在一個(gè)命中率。即CPU在任一時(shí)刻從Cache中可靠獲取數(shù)據(jù)的幾率。命中率越高,正確獲取數(shù)據(jù)的可靠性就越大。一般來(lái)說(shuō),Cache的存儲(chǔ)容量比主存的容量小得多,但不能太小,太小會(huì)使命中率太低;也沒有必要過(guò)大,過(guò)大不僅會(huì)增加成本,而且當(dāng)容量超過(guò)一定值后,命中率隨容量的增加將不會(huì)有明顯地增長(zhǎng)。只要Cache的空間與主存空間在一定范圍內(nèi)保持適當(dāng)比例的映射關(guān)系,Cache的命中率還是相當(dāng)高的。一般規(guī)定Cache與內(nèi)存的空間比為4:1000,即128kB Cache可映射32MB內(nèi)存;256kB Cache可映射64MB內(nèi)存。在這種情況下,命中率都在90%以上。至于沒有命中的數(shù)據(jù),CPU只好直接從內(nèi)存獲取。獲取的同時(shí),也把它拷進(jìn)Cache,以備下次訪問(wèn)。
Cache的基本結(jié)構(gòu)
Cache通常由相聯(lián)存儲(chǔ)器實(shí)現(xiàn)。相聯(lián)存儲(chǔ)器的每一個(gè)存儲(chǔ)塊都具有額外的存儲(chǔ)信息,稱為標(biāo)簽(Tag)。當(dāng)訪問(wèn)相聯(lián)存儲(chǔ)器時(shí),將地址和每一個(gè)標(biāo)簽同時(shí)進(jìn)行比較,從而對(duì)標(biāo)簽相同的存儲(chǔ)塊進(jìn)行訪問(wèn)。
Cache的3種基本結(jié)構(gòu)如下:
全相聯(lián)Cache
在全相聯(lián)Cache中,存儲(chǔ)的塊與塊之間,以及存儲(chǔ)順序或保存的存儲(chǔ)器地址之間沒有直接的關(guān)系。程序可以訪問(wèn)很多的子程序、堆棧和段,而它們是位于主存儲(chǔ)器的不同部位上。因此,Cache保存著很多互不相關(guān)的數(shù)據(jù)塊,Cache必須對(duì)每個(gè)塊和塊自身的地址加以存儲(chǔ)。當(dāng)請(qǐng)求數(shù)據(jù)時(shí),Cache控制器要把請(qǐng)求地址同所有地址加以比較,進(jìn)行確認(rèn)。這種Cache結(jié)構(gòu)的主要優(yōu)點(diǎn)是,它能夠在給定的時(shí)間內(nèi)去存儲(chǔ)主存器中的不同的塊,命中率高;缺點(diǎn)是每一次請(qǐng)求數(shù)據(jù)同Cache中的地址進(jìn)行比較需要相當(dāng)?shù)臅r(shí)間,速度較慢。
?
系統(tǒng)
l0
l1cache
l2cache
l3cache
cache
主存儲(chǔ)器
8088
無(wú)
無(wú)
無(wú)
無(wú)
dram
80286
無(wú)
無(wú)
無(wú)
無(wú)
無(wú)
dram
80386dx
無(wú)
外部sram
無(wú)
無(wú)
sram
dram
80486dx
無(wú)
內(nèi)部8kb
外部sram
無(wú)
sram
dram
pentium
無(wú)
內(nèi)部8kb+8kb
外部sram
無(wú)
sram
dram
ppro
無(wú)
內(nèi)部8kb+8kb
內(nèi)部封裝256kb或512kb
無(wú)
sram
dram
mmx
無(wú)
內(nèi)部16kb+16kb
外部sram
無(wú)
sram
dram
pⅡ/pⅢ
無(wú)
內(nèi)部16kb+16kb
卡上封裝512kb~1mb
無(wú)
sram
dram
k6-Ⅲ
?內(nèi)部32kb+32kb
芯片背上封裝256kb
外部1mb
sram
dram
?
直接映像Cache
直接映像Cache不同于全相聯(lián)Cache,地址僅需比較一次。在直接映像Cache中,由于每個(gè)主存儲(chǔ)器的塊在Cache中僅存在一個(gè)位置,因而把地址的比較次數(shù)減少為一次。其做法是,為Cache中的每個(gè)塊位置分配一個(gè)索引字段,用Tag字段區(qū)分存放在Cache位置上的不同的塊。單路直接映像把主存儲(chǔ)器分成若干頁(yè),主存儲(chǔ)器的每一頁(yè)與Cache存儲(chǔ)器的大小相同,匹配的主存儲(chǔ)器的偏移量可以直接映像為Cache偏移量。Cache的Tag存儲(chǔ)器(偏移量)保存著主存儲(chǔ)器的頁(yè)地址(頁(yè)號(hào))。以上可以看出,直接映像Cache優(yōu)于全相聯(lián)Cache,能進(jìn)行快速查找,其缺點(diǎn)是當(dāng)主存儲(chǔ)器的組之間做頻繁調(diào)用時(shí),Cache控制器必須做多次轉(zhuǎn)換?! ?/p>
組相聯(lián)Cache
組相聯(lián)Cache是介于全相聯(lián)Cache和直接映像Cache之間的一種結(jié)構(gòu)。這種類型的Cache使用了幾組直接映像的塊,對(duì)于某一個(gè)給定的索引號(hào),可以允許有幾個(gè)塊位置,因而可以增加命中率和系統(tǒng)效率。
Cache與DRAM存取的一致性
在CPU與主存之間增加了Cache之后,便存在數(shù)據(jù)在CPU和Cache及主存之間如何存取的問(wèn)題。讀寫各有2種方式?! ?/p>
貫穿讀出式(Look Through)
該方式將Cache隔在CPU與主存之間,CPU對(duì)主存的所有數(shù)據(jù)請(qǐng)求都首先送到Cache,由Cache自行在自身查找。如果命中,則切斷CPU對(duì)主存的請(qǐng)求,并將數(shù)據(jù)送出;不命中,則將數(shù)據(jù)請(qǐng)求傳給主存。該方法的優(yōu)點(diǎn)是降低了CPU對(duì)主存的請(qǐng)求次數(shù),缺點(diǎn)是延遲了CPU對(duì)主存的訪問(wèn)時(shí)間?! ?/p>
旁路讀出式(Look Aside)
在這種方式中,CPU發(fā)出數(shù)據(jù)請(qǐng)求時(shí),并不是單通道地穿過(guò)Cache,而是向Cache和主存同時(shí)發(fā)出請(qǐng)求。由于Cache速度更快,如果命中,則Cache在將數(shù)據(jù)回送給CPU的同時(shí),還來(lái)得及中斷CPU對(duì)主存的請(qǐng)求;不命中,則Cache不做任何動(dòng)作,由CPU直接訪問(wèn)主存。它的優(yōu)點(diǎn)是沒有時(shí)間延遲,缺點(diǎn)是每次CPU對(duì)主存的訪問(wèn)都存在,這樣,就占用了一部分總線時(shí)間?! ?/p>
寫穿式(Write Through)
任一從CPU發(fā)出的寫信號(hào)送到Cache的同時(shí),也寫入主存,以保證主存的數(shù)據(jù)能同步地更新。它的優(yōu)點(diǎn)是操作簡(jiǎn)單,但由于主存的慢速,降低了系統(tǒng)的寫速度并占用了總線的時(shí)間?! ?/p>
回寫式(Copy Back)
為了克服貫穿式中每次數(shù)據(jù)寫入時(shí)都要訪問(wèn)主存,從而導(dǎo)致系統(tǒng)寫速度降低并占用總線時(shí)間的弊病,盡量減少對(duì)主存的訪問(wèn)次數(shù),又有了回寫式。它是這樣工作的:數(shù)據(jù)一般只寫到Cache,這樣有可能出現(xiàn)Cache中的數(shù)據(jù)得到更新而主存中的數(shù)據(jù)不變(數(shù)據(jù)陳舊)的情況。但此時(shí)可在Cache 中設(shè)一標(biāo)志地址及數(shù)據(jù)陳舊的信息,只有當(dāng)Cache中的數(shù)據(jù)被再次更改時(shí),才將原更新的數(shù)據(jù)寫入主存相應(yīng)的單元中,然后再接受再次更新的數(shù)據(jù)。這樣保證了Cache和主存中的數(shù)據(jù)不致產(chǎn)生沖突。
Cache的分級(jí)體系設(shè)計(jì)
微處理器性能由如下幾種因素估算:性能=k(fⅹ1/CPI-(1-H)ⅹN) 式中:k為比例常數(shù),f為工作頻率,CPI為執(zhí)行每條指令需要的周期數(shù),H為Cache的命中率,N為存儲(chǔ)周期數(shù)?! ?/p>
雖然,為了提高處理器的性能,應(yīng)提高工作頻率,減少執(zhí)行每條指令需要的周期數(shù),提高Cache的命中率。同時(shí)分發(fā)多條指令和采用亂序控制,可以減少CPI值;采用轉(zhuǎn)移預(yù)測(cè)和增加Cache容量,可以提高H值。為了減少存儲(chǔ)周期數(shù)N,可采用高速的總線接口和不分塊的Cache方案。以前提高處理器的性能,主要靠提高工作頻率和提高指令級(jí)的并行度,今后則主要靠提高Cache的命中率。設(shè)計(jì)出無(wú)阻塞Cache分級(jí)結(jié)構(gòu)?! ?/p>
Cache分級(jí)結(jié)構(gòu)的主要優(yōu)勢(shì)在于,對(duì)于一個(gè)典型的一級(jí)緩存系統(tǒng)的80%的內(nèi)存申請(qǐng)都發(fā)生在CPU內(nèi)部,只有20%的內(nèi)存申請(qǐng)是與外部?jī)?nèi)存打交道。而這20%的外部?jī)?nèi)存申請(qǐng)中的80%又與二級(jí)緩存打交道。因此,只有4%的內(nèi)存申請(qǐng)定向到DRAM中?! ?/p>
Cache分級(jí)結(jié)構(gòu)的不足在于高速緩存組數(shù)目受限,需要占用線路板空間和一些支持邏輯電路,會(huì)使成本增加。綜合比較結(jié)果還是采用分級(jí)Cache?! ?/p>
L1 Cache的設(shè)計(jì)有在片一級(jí)分離和統(tǒng)一設(shè)計(jì)兩種方案?! ?/p>
Intel、AMD、原DEC等公司將L1 Cache設(shè)計(jì)成指令Cache與數(shù)據(jù)Cache分離型。因?yàn)檫@種雙路高速緩存結(jié)構(gòu)減少了爭(zhēng)用高速緩存所造成的沖突,改進(jìn)了處理器效能,以便數(shù)據(jù)訪問(wèn)和指令調(diào)用在同一時(shí)鐘周期內(nèi)進(jìn)行。
但是,僅依靠增加在片一級(jí)Cache的容量,并不能使微處理器性能隨之成正比例地提高,還需設(shè)置二級(jí)Cache?! ?/p>
在L1 Cache結(jié)構(gòu)方面,一般采用回寫式靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)。目前,L1 Cache容量有加大的趨勢(shì)。
L2 Cache的設(shè)計(jì)分芯片內(nèi)置和外置兩種設(shè)計(jì)?! ?/p>
如AMD K6-3內(nèi)置的256kB L2 Cache與CPU同步工作。外置L2 Cache,一般都要使二級(jí)Cache與CPU實(shí)現(xiàn)緊密耦合,并且與在片一級(jí)Cache形成無(wú)阻塞階層結(jié)構(gòu)。同時(shí)還要采用分離的前臺(tái)總線(外部I/O總線)和后臺(tái)總線(二級(jí)Cache總線)模式。顯然,將來(lái)隨著半導(dǎo)體集成工藝的提高,如果CPU與二級(jí)Cache集成在單芯片上,則CPU與二級(jí)Cache的耦合效果可能更佳?! ?/p>
由于L2 Cache內(nèi)置,因此,還可以在原主板上再外置大容量緩存1MB~2MB,它被稱為L(zhǎng)3 Cache。
PC中的Cache技術(shù)的實(shí)現(xiàn)
PC中Cache的發(fā)展是以80386為界的。主要內(nèi)容請(qǐng)參見“跟著CPU的腳步”一文?! ?/p>
目前,PC中部分已實(shí)現(xiàn)的Cache技術(shù)如表1所示。
結(jié) 語(yǔ)
目前,PC系統(tǒng)的發(fā)展趨勢(shì)之一是CPU主頻越做越高,系統(tǒng)架構(gòu)越做越先進(jìn),而主存DRAM的結(jié)構(gòu)和存取時(shí)間改進(jìn)較慢。因此,Cache技術(shù)愈顯重要,在PC系統(tǒng)中Cache越做越大。廣大用戶已把Cache做為評(píng)價(jià)和選購(gòu)PC系統(tǒng)的一個(gè)重要指標(biāo)。本文小結(jié)了Cache的源脈。希望可以給廣大用戶一個(gè)較系統(tǒng)的參考。
評(píng)論