TWI407368B - 檢測載入-儲存衝突之方法及其裝置 - Google Patents
檢測載入-儲存衝突之方法及其裝置 Download PDFInfo
- Publication number
- TWI407368B TWI407368B TW099113238A TW99113238A TWI407368B TW I407368 B TWI407368 B TW I407368B TW 099113238 A TW099113238 A TW 099113238A TW 99113238 A TW99113238 A TW 99113238A TW I407368 B TWI407368 B TW I407368B
- Authority
- TW
- Taiwan
- Prior art keywords
- load
- mask
- byte
- storage
- character
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 23
- 238000001514 detection method Methods 0.000 claims description 37
- 239000013598 vector Substances 0.000 description 22
- 230000008569 process Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
本發明係有關於微處理器,特別是有關於微處理器之載入-儲存衝突(load-store collision)之檢測。
於管線化微處理器設計上,通常會發生載入(load)操作與先前之儲存(store)操作在記憶體上重疊之情況。換言之,由儲存操作所預定(destine)之記憶體位置之一或多個位元組,亦包含於由載入操作所指定(specify)之來源記憶體位置(source memory location)內。第1圖係顯示程式序列中,對記憶體位置0x1234之32位元(雙字元組)儲存操作,及其後起始於記憶體位置0x1236之16位元(半字元組)載入操作。由於載入操作所指定之來源記憶體位置之至少一位元組,係與儲存操作所指定之目的記憶體位置(destination memory location)相同,故兩操作指定的位址重疊。
於某些情況下,微處理器可將儲存資料直接轉送至載入,此被稱為儲存轉送(store forwarding)操作,且通常有助於效能提昇。然而,於其他情況下,載入操作必須等待儲存操作提交(commit)至記憶體後,才能讀取資料,此被稱為一種載入-儲存衝突情況。舉例來講,載入操作與儲存操作並非同時具有寫回可快取記憶體特性(write-back cacheable memory trait)之記憶體區域,或者,載入操作無法接收所有來自儲存操作或儲存操作及快取所組合之資料。載入-儲存衝突通常不利於效能,因此必須被檢測出來。
一方面,本發明提供一種檢測裝置,用以檢測一微處理器內一載入操作與一先前儲存操作之間,均存取同一快取列資料之一載入-儲存衝突。該檢測裝置包括:一載入位元組遮罩,用以於該快取列內,指定含有該載入操作所指定資料之起始字元組;一儲存位元組遮罩,用以於該快取列內,指定含有該儲存操作所指定資料之起始字元組;以及一載入操作快取列字元組遮罩,用以於該快取列內,指定含有該載入操作所指定資料之字元組;一儲存操作快取列字元組遮罩,用以於該快取列內,指定含有該儲存操作所指定資料之字元組。該檢測裝置亦包括一組合邏輯電路,用以檢測該載入-儲存衝突,若該載入與儲存操作所指定資料起始於該快取列之同一字元組,係被配置使用該載入位元組遮罩與儲存位元組遮罩來檢測該載入-儲存衝突,以及若該載入與儲存操作所指定資料並非起始於該快取列之同一字元組,係被配置使用該載入操作快取列字元組遮罩與儲存操作快取列字元組遮罩來檢測該載入-儲存衝突。
另一方面,本發明提供一種檢測方法,用以檢測一微處理器內一載入操作與一先前儲存操作之間,均存取同一快取列資料之一載入-儲存衝突。該檢測方法包括判斷由一載入位元組遮罩所指定之含有該載入操作所指定資料之起始字元組與由一儲存位元組遮罩所指定之含有該儲存操作所指定資料之起始字元組是否起始於該快取列之同一字元組,其中,一字元組包括複數之位元組。若該載入操作所指定資料與該儲存操作所指定資料起始於該快取列之同一字元組,利用該載入位元組遮罩與該儲存位元組遮罩檢測該載入-儲存衝突。若該載入操作所指定資料與該儲存操作所指定資料並非起始於該快取列之同一字元組,利用一於該快取列內指定含有該載入操作所指定資料之字元組之載入操作快取列字元組遮罩與一於該快取列指定含有該儲存操作所指定資料之字元組之儲存操作快取列字元組遮罩檢測該載入-儲存衝突。
為使本發明之上述目的、特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式,詳細說明如下。
一般而言,為了判定載入-儲存衝突,處理器進行某種結合位元組重疊檢測之位址比較操作。位址比較操作通常為快取列比較操作。某些實現方式係比較快取列位址。意謂著位元組重疊檢測必須計算載入操作之任一位元組是否與64位元組快取列之任一儲存位元組衝突,以產生一符合信號,亦即存在載入-儲存衝突之情況。
參考第2圖,係顯示一64位元組快取列之16個雙字元組202,且每一雙字元組包含4個位元組204。舉例來講,微架構之最大記憶體操作(亦即,載入操作與儲存操作,本文中亦指記憶體操作)大小為16位元組,且其小於一快取列之大小。習知上,位元組重疊檢測之實現,可透過對每一記憶體操作產生或儲存一16位元之記憶體操作向量並儲存至一16位元之位元組遮罩(mask),即載入操作與儲存操作所含之每一位元組對應至上述16位元之位元組遮罩之每一位元。接著,分別將載入操作與儲存操作之位元組遮罩移位至快取列內之對應位置,上述對應位置是根據載入操作與儲存操作於一系統記憶體的位址。接著,比較並檢測上述兩個位元組遮罩中是否有任一位元重疊,用以表示載入操作及儲存操作所指定快取列內之至少一共用位元組位置。若是,即存在載入-儲存衝突。當要求檢測載入-儲存衝突之精確度越高時,位址比較器需求量也愈大,這通常造成該等比較器需消耗較多功率及需要較多時間以完成比較。
習知之位元組重疊檢測方法,係對每一記憶體操作進行下列其中之一:(1)儲存一64位元組遮罩,其具有複數個事先已移位至快取列內適當位置之16位元之位元組遮罩;(2)儲存16位元之位元組遮罩,並將其即時移位;或者(3)產生16位元之位元組遮罩,並將其即時移位。上述每一習知位元組重疊檢測方法各自具有其優點與缺點,但全部都存在某些問題。儲存事先移位之位元組遮罩(方法(1))需要大量之硬體。產生與即時移位位元組遮罩(方法(3))會產生時序問題且會增加功率消耗。方法(2)係為一折衷辦法,由於需即時移位,因此依然會產生時序問題,也仍然需要額外硬體來儲存位元組遮罩。不論是利用16位元之位元組遮罩即時移位或利用64位元遮罩進行比較操作,皆需要大量硬體實現且具有時序問題。因此,需要一種新的位元組重疊檢測方法能克服上述之問題。
本文所說明之實施例,係藉由不用非常精確地檢測載入-儲存衝突,用以有效地減少載入-儲存衝突檢測記憶體操作向量之大小。換言之,微處理器仍可正確運行,並檢測出每一個載入-儲存衝突之情況。然而,微處理器被允許發出一些誤判之載入-儲存衝突信號,也就是說,並非為真正載入-儲存衝突之情況,此時微處理器仍可正確運行於一容忍範圍內。當然,由於一些載入操作需等待更多時間,因此發出誤判之載入-儲存衝突信號將不利於效能。本文所述之實施例,係對檢測載入-儲存衝突之精確度及某些潛在效能進行權衡,藉以得到較佳之時序、較少之功率消耗以及較少之硬體成本。
參考第3圖,係顯示依據本發明所述實施例,使用載入-儲存檢測單元之微處理器300。微處理器300為一亂序性執行管線式微處理器(out-of-order execution pipelined microprocessor),其包括指令快取302、耦接於指令快取302之指令轉譯器312、耦接於指令轉譯器312之暫存器別名表(register aliasing table)316、耦接於暫存器別名表316之保留站(reservation station)318、耦接於保留站318之複數執行單元322、及耦接於執行單元322之引退單元(retire unit)324,如習知之微處理器設計。執行單元322包括一或多個載入單元與儲存單元,用以進行載入操作與儲存操作。記憶體子系統304,係耦接於執行單元322。記憶體子系統304包括一資料快取306,其耦接於載入-儲存衝突檢測單元308。
參考第4圖,係顯示依據本發明之載入-儲存檢測衝突單元308所使用之一記憶體操作向量方塊圖。該記憶體操作向量大小僅為8位元。第4圖僅為一舉例說明,其中4位元的向量b3,b2,b1,b0用以指定一記憶體操作所指定快取列之資料起始處之第一雙字元組,另外的4位元的向量d3,d2,d1,d0用以指定該記憶體操作之剩餘雙字元組。向量b3,b2,b1,b0會儲存至4位元的記憶體操作位元組遮罩402以指定對應於每一記憶體操作所指定快取列之資料起始處之第一雙字元組,即記憶體操作位元組遮罩402的每一位元對應至第一雙字元組的每一位元組。在一實施例中,因應於一載入操作,4位元的載入位元組遮罩儲存該載入操作向量中的4位元以於快取列內指定含有載入操作所指定資料之起始雙字元組。因應於一儲存操作,4位元的儲存位元組遮罩儲存該儲存操作向量中的4位元以於快取列內指定含有儲存操作所指定資料之起始雙字元組。當載入操作與儲存操作起始於一快取列之同一雙字元組時,則將載入位元組遮罩與儲存位元組遮罩中的位元進行比較。當檢測出上述兩個位元組遮罩中有任一位元重疊,即檢測出載入-儲存衝突。
對於該記憶體操作之剩餘雙字元組,並未使用如前述方法(1)中完整64位元之位元組遮罩來對應至快取列的每一位元組。對於該記憶體操作之剩餘雙字元組,此處係儲存與產生記憶體操作雙字元組遮罩404,而非位元組遮罩。向量d3,d2,d1,d0會儲存至4位元的記憶體操作雙字元組遮罩404以指定對應於每一記憶體操作所指定快取列之剩餘雙字元組。在一實施例中,因應於一載入操作,4位元的載入雙字元組遮罩儲存該載入操作向量中的4位元以於快取列內指定含有載入操作所指定資料之雙字元組。因應於一儲存操作,4位元的儲存雙字元組遮罩儲存該儲存操作向量中的4位元以於快取列內指定含有儲存操作所指定資料之雙字元組。當載入操作與儲存操作並非起始於一快取列之同一雙字元組時,則將載入雙字元組遮罩與儲存雙字元組遮罩中的位元進行移位後比較,以檢測出載入-儲存衝突。記憶體操作雙字元組遮罩404提供一相對粗略精確度之衝突檢測,而記憶體操作位元組遮罩402係提供較佳之精確度之衝突檢測。值得一提的是,對於每一記憶體操作,向量大小僅為8位元,係為前述方法(2)位元數量之一半,因此減少了遮罩比較器之數量,相對的也帶來一些好處,例如簡化向量之儲存。
載入-儲存衝突檢測單元308利用一移位器406(第4圖所示),用以根據該記憶體操作之系統記憶體位址,將記憶體操作雙字元組遮罩404移位至16位元記憶體操作快取列之一對應位置。如第4圖所示,移位器406將記憶體操作雙字元組遮罩404移位至16位元記憶體操作快取列雙字元組遮罩408內之13個可能位置之一。這將大幅減少上述習知方法所需之移位數量,明顯有助於時序。16位元記憶體操作快取列雙字元組遮罩408之剩餘位元將被設定(populated)為零。該16位元記憶體操作快取列雙字元組遮罩408類似於傳統方法中對每一記憶體操作產生或儲存的16位元之位元組遮罩,只是該16位元記憶體操作快取列雙字元組遮罩408中僅有移位進來的4位元的記憶體操作雙字元組遮罩404,其餘12位元已被設定為零。當載入操作與儲存操作並非起始於一快取列之同一雙字元組時,則將儲存雙字元組遮罩移位至16位的儲存操作快取列雙字元組遮罩,將載入雙字元組遮罩移位至16位的載入操作快取列雙字元組遮罩,並將儲存操作快取列雙字元組遮罩與載入操作快取列雙字元組遮罩中的位元進行比較。當檢測出上述兩個快取列雙字元組遮罩中有任一位元重疊,即檢測出載入-儲存衝突。
如第4圖所示之實施例,記憶體操作雙字元組遮罩404之位元數量為4位元,係因微處理器300微架構之最大記憶體操作大小為16位元組,不過於其他實施例中,可考慮不同大小,像是32位元組及64位元組之記憶體操作,特別是具有大於64位元組快取列之微處理器300。
在一實施例中,對於一4位元組的儲存操作,其位於記憶體位置0x1234,則其共占據記憶體中0x1234~0x1237這4個位元組。該儲存操作之起始雙字元組為0x1234,並占據了該雙字元組的全部4個位元組,由此,該儲存操作的儲存位元.組遮罩為b’1111。而該儲存操作僅位於0x1234這一個雙字元組中,因此,該儲存操作的儲存雙字元組遮罩為b’0001。對於一2位元組的載入操作,其位於記憶體位置0x1236,則其共占據記憶體中0x1236~0x1237這2個位元組。該載入操作之起始雙字元組為0x1234,並占據了該雙字元組的高兩位的兩個位元組,由此,該載入操作的載入位元組遮罩為b’1100。而該載入操作僅位於0x1234這一個雙字元組中,因此,該載入操作的載入雙字元組遮罩為b’0001。由於該載入操作與該儲存操作起始於一快取列之同一雙字元組0x1234,則將載入位元組遮罩b’1100與儲存位元組遮罩b’1111中的位元進行比較。這兩個位元組遮罩的高兩位均為1,即檢測出上述兩個位元組遮罩中有兩位元重疊,即檢測出載入-儲存衝突。
在另一實施例中,對於一16位元組的儲存操作,其位於記憶體位置0x1200,則其共占據記憶體中0x1200~0x120F這16個位元組。該儲存操作之起始雙字元組為0x1200,並且占據了該雙字元組的全部4個位元組,由此,該儲存操作的儲存位元組遮罩為b’1111。而該儲存操作位於0x1200,0x1204,0x1208和0x120C這四個雙字元組中,因此,該儲存操作的儲存雙字元組遮罩為b’1111。對於一16位元組的載入操作,其位於記憶體位置0x1208,則其共占據記憶體中0x1208~0x1217這16個位元組。該載入操作之起始雙字元組為0x1208,並占據了該雙字元組的全部4個位元組,由此,該載入操作的載入位元組遮罩為b’1111。而該載入操作位於0x1208,0x120C,0x1210和0x1214這四個雙字元組中,因此,該載入操作的載入雙字元組遮罩為b’1111。由於該載入操作與該儲存操作並非起始於一快取列之同一雙字元組,因此需要將儲存雙字元組遮罩移位至16位的儲存操作快取列雙字元組遮罩,將載入雙字元組遮罩移位至16位的載入操作快取列雙字元組遮罩。由於儲存操作位於0x1200,0x1204,0x1208和0x120C這四個雙字元組中,因此,將儲存雙字元組遮罩b’1111移位至16位的儲存操作快取列雙字元組遮罩的d0~d3,即16位的儲存操作快取列雙字元組遮罩為0x000F。該載入操作位於0x1208,0x120C,0x1210和0x1214這四個雙字元組中,因此,將載入雙字元組遮罩b’1111移位至16位的載入操作快取列雙字元組遮罩的d2~d5,即16位的儲存操作快取列雙字元組遮罩為0x003C。將儲存操作快取列雙字元組遮罩0x000F與載入操作快取列雙字元組遮罩0x003C中的位元進行比較。這兩個快取列雙字元組遮罩中有2位位元重疊,即檢測出載入-儲存衝突。
參考第5圖,係顯示依據本發明實施例第3圖之載入-儲存衝突檢測單元308。載入-儲存衝突檢測單元308包括16個具有2輸入之及(AND)閘502,每一及閘502自16位元載入操作快取列雙字元組遮罩408L接收一輸入位元。16位元載入操作快取列雙字元組遮罩408L,係類似於第4圖之16位元記憶體操作快取列雙字元組遮罩408,且由類似於第4圖記憶體操作雙字元組遮罩404之載入雙字元組遮罩404L,與其後經過之移位器406L產生,其中,移位器406L類似於第4圖之移位器406。每一及閘502自16位元儲存操作快取列雙字元組遮罩408S接收一第二輸入位元。16位元儲存操作快取列雙字元組遮罩408S,係類似於第4圖之16位元記憶體操作快取列雙字元組遮罩408,且由類似於第4圖記憶體操作雙字元組遮罩404之儲存雙字元組遮罩404S,與其後經過之移位器406S加以產生,其中,移位器406S類似於第4圖之移位器406。將16個及閘502之16個輸出提供至具有16個輸入之或(OR)閘504,用以輸出一雙字元組重疊信號506。若載入操作快取列雙字元組遮罩408L中的一位元及儲存操作快取列雙字元組遮罩408S中的對應位元均為真(true value),則雙字元組重疊信號506為真。也就是說,16個及閘502之其中一及閘接收雙字元組遮罩408L以及雙字元組遮罩408S之位元d15的值並作及運算。16個及閘502之另一及閘接收雙字元組遮罩408L以及雙字元組遮罩408S之位元d14的值並作及運算,依此類推。舉例來說,雙字元組遮罩408L的d15為邏輯值1,雙字元組遮罩408S的d15的邏輯值也為1,則在經過及運算和或運算後,產生一值為真的雙字元組重疊信號506。
載入-儲存衝突檢測單元308包括4個具有2輸入之及閘512,每一及閘512自4位元載入位元組遮罩402L接收一輸入位元,其中,4位元載入位元組遮罩402L類似於第4圖之4位元記憶體操作位元組遮罩402。每一及閘512,係自4位元儲存位元組遮罩402S接收一第二輸入位元,其中,4位元儲存位元組遮罩402S類似於第4圖之4位元記憶體操作位元組遮罩402。將4個及閘512之4個輸出提供至具有4個輸入之或閘514,用以輸出一位元組重疊信號516。若載入位元組遮罩402L中的一位元及儲存位元組遮罩402S中的對應位元均為真,則位元組重疊信號516為真。也就是說,4個及閘512中之其中一及閘接收載入位元組遮罩402L以及儲存位元組遮罩402S之位元b3的值並作及運算。4個及閘512中之另一及閘接收載入位元組遮罩402L以及儲存位元組遮罩402S之位元b2的值並作及運算,依此類推。舉例來說,載入位元組遮罩402L的b3為邏輯值1,儲存位元組遮罩402S的b3的值也為邏輯值1,則在經過及運算和或運算後,產生一值為真的位元組重疊信號516。
載入-儲存衝突檢測單元308亦包括一比較器508,用以比較一載入位址522與一儲存位址524。若位址522與524存取同一快取列,亦即,位址之第5位元以上均相同,則產生一值為真之同一快取列信號528。若載入位址522及儲存位址524起始於快取列之同一雙字元組上,亦即,位址之第1位元以上均相同(即,位元[5:2]),則比較器508亦產生一值為真之起始雙字元組相同信號526。
具2輸入之及閘534接收起始雙字元組相同信號526及位元組重疊信號516。具2輸入之及閘536接收起始雙字元組相同信號526之互補信號及雙字元組重疊信號506。具2輸入之或閘538接收及閘534與及閘536之輸出。具2輸入之及閘542接收同一快取列信號528與或閘538之輸出,用以產生一衝突信號518,當存在一載入-儲存衝突時,該衝突信號518為一真值。第5圖雖然僅顯示載入-儲存衝突檢測單元308之一邏輯電路集合,不過對於每一個先前儲存操作而言(換言之,所討論為比該載入操作還早之每一儲存操作),仍存在類似之邏輯電路,用以產生多個衝突信號518,且將多個衝突信號518進行邏輯或(OR)運算,用以產生一最終衝突信號。第5圖實施例所顯示著雖然為邏輯閘之一特殊配置,其他實施例仍可完成等效之功能。
參考第6圖,係顯示依據本發明第5圖之載入-儲存衝突檢測單元308之操作流程圖。流程始於區塊602。
於區塊602中,記憶體子系統304接收一載入操作。之後,流程進入區塊604。
於區塊604中,載入-儲存衝突檢測單元308之比較器508比較載入位址522與一先前儲存操作之儲存位址524。流程進入決策區塊606。在一實施例中,載入-儲存衝突檢測單元308包含複數比較器用以比較一載入位址與複數個先前儲存操作之儲存位址。
於決策區塊606中,載入-儲存衝突檢測單元308偵測同一快取列信號528,用以判斷載入操作是否與任一先前儲存操作存取於同一快取列。若是,流程進入決策區塊608;否則,流程進入區塊620。
於決策區塊608中,載入-儲存衝突檢測單元308偵測起始雙字元組相同信號526,用以判斷載入操作是否與任一先前儲存操作起始於快取列之同一雙字元組。若是,流程進入區塊610;否則,流程進入區塊614。
於區塊610中,及閘512比較載入位元組遮罩402L與先前儲存位元組遮罩402S。流程進入決策區塊612。
於區塊612中,載入-儲存衝突檢測單元308偵測位元組重疊信號516,用以判斷載入位元組遮罩402L之任一位元與先前儲存操作之位元組遮罩402S之對應位元是否均為真。若是,流程進入區塊618;否則,流程進入區塊620。
於區塊614中,移位器406L對載入雙字元組遮罩404L進行移位,用以產生載入操作快取列雙字元組遮罩408L,且移位器406S對一先前儲存操作之儲存雙字元組遮罩404S進行移位,用以產生儲存操作快取列雙字元組遮罩408S。另外,及閘502比較載入操作快取列雙字元組遮罩408L及先前儲存操作之儲存操作快取列雙字元組遮罩408S。流程進入決策區塊616。
於決策區塊616中,載入-儲存衝突檢測單元308偵測雙字元組重疊信號506,用以判斷載入操作快取列雙字元組遮罩408L是否與先前儲存操作之儲存操作快取列雙字元組遮罩408S重疊。若是,流程進入區塊618;否則,流程進入區塊620。
於區塊618中,載入-儲存衝突檢測單元308之衝突信號518設置為一真值,用以表示(indicate)一載入-儲存衝突。流程結束於區塊618。
於區塊620中,載入-儲存衝突檢測單元308之衝突信號518設置為一偽值(false value),用以表示沒有載入-儲存衝突。流程結束於區塊620。
在一實施例中,儲存操作和載入操作可起始於位於雙字元組的邊界(boundary)的位元組。此時,將使用5位元的記憶體操作雙字元組遮罩以指定對應於每一記憶體操作所指定快取列之剩餘雙字元組。例如,對於一16位元組的儲存操作,其位於記憶體位置0x1201,則其共占據記憶體中0x1201~0x1210這位元組。該儲存操作之起始雙字元組為0x1200,並且占據了該雙字元組的3個位元組,由此,該儲存操作的儲存位元組遮罩為b’1110。而該儲存操作位於0x1200,0x1204,0x1208,0x120C和0x1210這五個雙字元組中,因此,該儲存操作的儲存雙字元組遮罩為b’11111。對於一16位元組的載入操作,其位於記憶體位置0x1207,則其共占據記憶體中0x1207~0x1216這16個位元組。該載入操作之起始雙字元組為0x1204,並占據了該雙字元組的1個位元組,由此,該載入操作的載入位元組遮罩為b’1000。而該載入操作位於0x1204,0x1208,0x120C,0x1210和0x1214這五個雙字元組中,因此,該載入操作的載入雙字元組遮罩為b’11111。由於該載入操作與該儲存操作並非起始於一快取列之同一雙字元組,因此需要將儲存雙字元組遮罩移位至16位的儲存操作快取列雙字元組遮罩,將載入雙字元組遮罩移位至16位的載入操作快取列雙字元組遮罩。由於儲存操作位於0x1200,0x1204,0x1208,0x120C和0x1210這五個雙字元組中,因此,將儲存雙字元組遮罩b’11111移位至16位的儲存操作快取列雙字元組遮罩的d0~d4,即16位的儲存操作快取列雙字元組遮罩為0x001F。該載入操作位於0x1204,0x1208,0x120C,0x1210和0x1214這五個雙字元組中,因此,將載入雙字元組遮罩b’11111移位至16位的載入操作快取列雙字元組遮罩的d1~d5,即16位的儲存操作快取列雙字元組遮罩為0x003E。將儲存操作快取列雙字元組遮罩0x001F與載入操作快取列雙字元組遮罩0x003E中的位元進行比較。這兩個快取列雙字元組遮罩中有4位位元重疊,即檢測出載入-儲存衝突。
為了有助於減少記憶體操作向量所使用之位元數量(較少功率消耗及較少硬體)及減少移位操作(較佳時序),本文所述之實施例係犧牲載入-儲存衝突檢測之部份精確度。假如載入操作與儲存操作所指定的位址非常接近但未命中(miss)之情況,則微處理器被允許發出一些誤判之載入-儲存衝突信號,也就是說,並非為真正載入-儲存衝突之情況,此時微處理器仍可正確運行於一容忍範圍內。例如,對於一4位元組的儲存操作,其位於記憶體位置0x1201,則其共占據記憶體中0x1201~0x1204這4個位元組。該儲存操作之起始雙字元組為0x1200,並占據了該雙字元組的3個位元組,由此,該儲存操作的儲存位元組遮罩為b’1110。而該儲存操作位於0x1200和0x1204這兩個雙字元組中,因此,該儲存操作的儲存雙字元組遮罩為b’00011。對於一4位元組的載入操作,其位於記憶體位置0x1207,則其共占據記憶體中0x1207~0x120A這4個位元組。該載入操作之起始雙字元組為0x1204,並占據了該雙字元組的1個位元組,由此,該載入操作的載入位元組遮罩為b’1000。而該載入操作位於0x1204和0x1208這兩個雙字元組中,因此,該載入操作的載入雙字元組遮罩為b’00011。由於該載入操作與該儲存操作並非起始於一快取列之同一雙字元組,因此需要將儲存雙字元組遮罩移位至16位的儲存操作快取列雙字元組遮罩,將載入雙字元組遮罩移位至16位的載入操作快取列雙字元組遮罩。由於儲存操作位於0x1200和0x1204這兩個雙字元組中,因此,將儲存雙字元組遮罩b’00011移位至16位的儲存操作快取列雙字元組遮罩的d0~d4,即16位的儲存操作快取列雙字元組遮罩為0x0003。該載入操作位於0x1204和0x1208這兩個雙字元組中,因此,將載入雙字元組遮罩b’00011移位至16位的載入操作快取列雙字元組遮罩的d1~d5,即16位的儲存操作快取列雙字元組遮罩為0x0006。將儲存操作快取列雙字元組遮罩0x0003與載入操作快取列雙字元組遮罩0x0006中的位元進行比較。這兩個快取列雙字元組遮罩中有1位位元重疊,即檢測出載入-儲存衝突。而實際上,該儲存操作占據記憶體中0x1201~0x1204這4個位元組,該載入操作占據記憶體中0x1207~0x120A這4個位元組,並不存在載入-儲存衝突的問題,此時,就屬於誤判之情況。
由前述可知,本文所述之實施例,係對檢測載入-儲存衝突之精確度及微處理器之效能進行權衡,藉以得到較佳之時序、較少之功率消耗以及較少之硬體成本。於其他實施例中,可藉由微處理器300較常執行之執行碼,並根據其資料存取樣式(pattern),用以減少對效能之影響。舉例而言,若大部分常用執行碼非常接近但未命中一快取列之一第二雙字元組,則記憶體操作向量可被設定為可指定一記憶體操作所指定快取列之資料起始處之兩個雙字元組,並被儲存至8位元的記憶體操作位元組遮罩以指定對應於每一記憶體操作所指定快取列之資料起始處之兩個雙字元組,即記憶體操作位元組遮罩的每一位元對應至包括上述起始兩個雙字元組之每一位元組。此外,記憶體操作向量可以採用4字元組(qword,64位元)或8字元組(dqword,128位元)以指定對應於每一記憶體操作所指定快取列之剩餘4字元組或8字元組,並被儲存至4字元組或8字元組遮罩。利用這樣的方式,並於可接受之效能影響下,可更進一步降低記憶體操作向量之大小,相較於習知的記憶體操作向量大小而言。另外,當微處理器300之指令集架構引入(introduce)更大的記憶體操作向量時,也可以利用這樣的方式於可接受之效能影響下,更進一步降低記憶體操作向量之大小。
本發明雖以各種實施例揭露如上,然而其僅為範例參考而非用以限定本發明的範圍,所屬技術領域中具有通常知識者,在不脫離本發明之精神和範圍內,當可做些許的更動與潤飾。舉例來說,可用軟體來實作本文所描述之裝置與方法中的上述功能、構造、模組、模擬、描述、以及測試。該軟體可使用一般之程式語言(例如:C、C++)、硬體描述語言(Hardware Description Language,HDL),其包括Verilog硬體描述語言、超高速集成電路硬體描述語言(VHDL)等、或其他可用之程式來實現。此一軟體可被設置於任何已知電腦可用之媒體,像是半導體、磁碟、或光碟(諸如CD-ROM、DVD-ROM等)。本文所述之裝置與方法實施例,可被包括於半導體智慧財產權核心(semiconductor intellectual property core),像是微處理器核心(舉例來講,以硬體描述語言加以實現),及被轉換為硬體型態之積體電路產品。除此之外,本文所述之裝置與方法可以結合硬體與軟體之方式實現。因此,本發明之範圍不應以本文之任一實施例加以限定,而當視後附之申請專利範圍及其等效物所界定者為準。特別是,本發明可實現於通用電腦所使用之微處理器裝置中。最後,在不脫離本發明之精神和範圍內,所屬技術領域中具有通常知識者,當可以上述所揭露實施例及其概念為基礎,做些許更動與潤飾,用以實現與本發明相同之目的。
202...64位元組快取列之16個雙字元組
204...雙字元組之4個位元組
300...微處理器
302...指令快取
304...記憶體子系統
306...資料快取
308...載入-儲存衝突檢測單元
312...指令轉譯器
316...暫存器別名表
318...保留站
322...執行單元
324...引退單元
402...記憶體操作位元組遮罩
402L...載入位元組遮罩
402S...儲存位元組遮罩
404...記憶體操作雙字元組遮罩
404L...載入雙字元組遮罩
404S‧‧‧儲存雙字元組遮罩
406、406L、406S‧‧‧移位器
408‧‧‧記憶體操作快取列雙字元組遮罩
408L‧‧‧載入操作快取列雙字元組遮罩
408S‧‧‧儲存操作快取列雙字元組遮罩
502、512、534、536、542‧‧‧及(AND)閘
504、514、538‧‧‧或(OR)閘
506‧‧‧雙字元組重疊信號
508‧‧‧比較器
516‧‧‧位元組重疊信號
518‧‧‧衝突信號
522‧‧‧載入位址
524‧‧‧儲存位址
526‧‧‧起始雙字元組相同信號
528‧‧‧同一快取列信號
532‧‧‧反(NOT)閘
第1圖係顯示一載入-儲存衝突之範例方塊圖。
第2圖為一方塊圖,係顯示一快取列內之雙字元組與一雙字元組內之位元組。
第3圖係顯示依據本發明實施例,利用載入-儲存檢測單元之微處理器方塊圖。
第4圖係顯示依據本發明第3圖之載入-儲存檢測衝突單元所使用之一記憶體操作向量方塊圖。
第5圖係顯示依據本發明實施例第3圖之載入-儲存衝突檢測單元方塊圖。
第6圖係顯示依據本發明第5圖之載入-儲存衝突檢測單元之操作流程圖。
308...載入-儲存衝突檢測單元
402L...載入位元組遮罩
402S...儲存位元組遮罩
404L...載入雙字元組遮罩
404S...儲存雙字元組遮罩
406L、406S...移位器
408L...載入操作快取列雙字元組遮罩
408S...儲存操作快取列雙字元組遮罩
502、512、534、536、542...及(AND)閘
504、514、538...或(OR)閘
506...雙字元組重疊信號
508...比較器
516...位元組重疊信號
518...衝突信號
522...載入位址
524...儲存位址
526...起始雙字元組相同信號
528...同一快取列信號
及
532...反(NOT)閘
Claims (14)
- 一種檢測裝置,用以檢測一微處理器內一載入操作與一先前儲存操作均存取同一快取列之一載入-儲存衝突,該檢測裝置包括:一載入位元組遮罩,用於指定含有該載入操作所指定資料之起始字元組;一儲存位元組遮罩,用於指定含有該儲存操作所指定資料之起始字元組;一載入操作快取列字元組遮罩,用以於該快取列內,指定含有該載入操作所指定資料之字元組;一儲存操作快取列字元組遮罩,用以於該快取列內,指定含有該儲存操作所指定資料之字元組;以及一組合邏輯電路,用以檢測該載入-儲存衝突,若該載入操作與該儲存操作所指定資料起始於該快取列之同一字元組,係被配置使用該載入位元組遮罩與該儲存位元組遮罩來檢測該載入-儲存衝突,以及若該載入操作與該儲存操作所指定資料並非起始於該快取列之同一字元組,係被配置使用該載入操作快取列字元組遮罩與該儲存操作快取列字元組遮罩來檢測該載入-儲存衝突。
- 如申請專利範圍第1項所述之檢測裝置,其中,該載入位元組遮罩之位元數量以及該儲存位元組遮罩之位元數量皆等於一字元組包含的位元組數量。
- 如申請專利範圍第1項所述之檢測裝置,其中,該載入位元組遮罩之位元數量以及該儲存位元組遮罩之位元數量皆小於該微處理器之一微架構所支持最大記憶體操作之 位元組數量。
- 如申請專利範圍第1項所述之檢測裝置,其中,該載入操作快取列字元組遮罩之位元數量以及該儲存操作快取列字元組遮罩之位元數量皆等於該微處理器之一微架構所支持最大記憶體操作之位元組數量。
- 如申請專利範圍第1項所述之檢測裝置,其中,若該載入位元組遮罩與該儲存位元組遮罩指示該載入操作所指定資料之起始位元組與該儲存操作所指定資料之起始位元組起始於該快取列之同一字元組內且具有一位元組重疊,該組合邏輯電路係被配置用以指示該載入-儲存衝突,否則,則指示沒有載入-儲存衝突。
- 如申請專利範圍第1項所述之檢測裝置,其中,若該載入操作快取列字元組遮罩與該儲存操作快取列字元組遮罩指示該快取列內具有一字元組重疊,該組合邏輯電路係被配置用以指示該載入-儲存衝突,否則,則指示沒有載入-儲存衝突。
- 如申請專利範圍第6項所述之檢測裝置,其中,該組合邏輯電路包括:複數移位器,該些移位器用以將一載入字元組遮罩移位至該載入操作快取列字元組遮罩,以及將一儲存字元組遮罩移位至該儲存操作快取列字元組遮罩。
- 一種檢測方法,用以檢測一微處理器內一載入操作與一先前儲存操作之間,均存取同一快取列資料之一載入-儲存衝突,該檢測方法包括:判斷由一載入位元組遮罩所指定之含有該載入操作所 指定資料之起始字元組與由一儲存位元組遮罩所指定之含有該儲存操作所指定資料之起始字元組是否起始於該快取列之同一字元組,其中,一字元組包括複數之位元組;若該載入操作所指定資料與該儲存操作所指定資料起始於該快取列之同一字元組,利用該載入位元組遮罩與該儲存位元組遮罩檢測該載入-儲存衝突;以及若該載入操作所指定資料與該儲存操作所指定資料並非起始於該快取列之同一字元組,利用一於該快取列內指定含有該載入操作所指定資料之字元組之載入操作快取列字元組遮罩與一於該快取列指定含有該儲存操作所指定資料之字元組之儲存操作快取列字元組遮罩檢測該載入-儲存衝突。
- 如申請專利範圍第8項所述之檢測方法,其中該載入位元組遮罩之位元數量以及該儲存位元組遮罩之位元數量皆等於一字元組包含的位元組數量。
- 如申請專利範圍第8項所述之檢測方法,其中,該載入位元組遮罩之位元數量以及該儲存位元組遮罩之位元數量皆小於該微處理器之一微架構所支持最大記憶體操作之位元組數量。
- 如申請專利範圍第8項所述之檢測方法,其中,該載入操作快取列字元組遮罩之位元數量以及該儲存操作快取列字元組遮罩之位元數量皆等於該微處理器之一微架構所支持最大記憶體操作之位元組數量。
- 如申請專利範圍第8項所述之檢測方法,其中,利用位元組遮罩檢測該載入-儲存衝突之步驟包括: 於該載入位元組遮罩與該儲存位元組遮罩指示該載入操作所指定資料之起始位元組與該儲存操作所指定資料之起始位元組起始於該快取列之同一字元組內,若具有一位元組重疊,則指示該載入-儲存衝突;以及否則,則指示沒有載入-儲存衝突。
- 如申請專利範圍第8項所述之檢測方法,其中,使用字元組遮罩檢測該載入-儲存衝突之步驟包括:於該載入操作快取列字元組遮罩與該儲存操作快取列字元組遮罩指示該快取列內,若具有一字元組重疊,則指示該載入-儲存衝突;以及否則,則指示沒有載入-儲存衝突。
- 如申請專利範圍第13項所述之檢測方法,其中,使用字元組遮罩檢測該載入-儲存衝突之步驟進一步包括:將一載入字元組遮罩移位至該載入操作快取列字元組遮罩;以及將一儲存字元組遮罩移位至該儲存操作快取列字元組遮罩。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US18029409P | 2009-05-21 | 2009-05-21 | |
US12/582,591 US8392666B2 (en) | 2009-05-21 | 2009-10-20 | Low power high speed load-store collision detector |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201042544A TW201042544A (en) | 2010-12-01 |
TWI407368B true TWI407368B (zh) | 2013-09-01 |
Family
ID=43125331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW099113238A TWI407368B (zh) | 2009-05-21 | 2010-04-27 | 檢測載入-儲存衝突之方法及其裝置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8392666B2 (zh) |
TW (1) | TWI407368B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012134322A1 (en) * | 2011-04-01 | 2012-10-04 | Intel Corporation | Vectorization of scalar functions including vectorization annotations and vectorized function signatures matching |
KR102008733B1 (ko) * | 2012-06-15 | 2019-08-09 | 소프트 머신즈, 인크. | 스토어 상위 서열에 기초하여 상이한 스레드들로부터의 포워딩을 구현하는 스레드에 무관한 로드 스토어 버퍼 |
KR101826399B1 (ko) | 2012-06-15 | 2018-02-06 | 인텔 코포레이션 | Load store 재정렬 및 최적화를 구현하는 명령어 정의 |
KR101818967B1 (ko) | 2012-06-15 | 2018-01-16 | 인텔 코포레이션 | 명확화 없는 비순차 load store 큐 |
EP2862062B1 (en) | 2012-06-15 | 2024-03-06 | Intel Corporation | A virtual load store queue having a dynamic dispatch window with a distributed structure |
EP2862061A4 (en) | 2012-06-15 | 2016-12-21 | Soft Machines Inc | MEMORY PRECISION FOR VIRTUAL LOAD WITH DYNAMIC SHIPPING WINDOW WITH UNIFORM STRUCTURE |
KR101667167B1 (ko) | 2012-06-15 | 2016-10-17 | 소프트 머신즈, 인크. | Load store 재정렬 및 최적화로부터 생기는 투기적 포워딩 예측 착오/오류로부터의 복원을 구현하는 방법 및 시스템 |
CN104583942B (zh) * | 2012-06-15 | 2018-02-13 | 英特尔公司 | 乱序加载的基于锁的和基于同步的方法 |
CN104583957B (zh) | 2012-06-15 | 2018-08-10 | 英特尔公司 | 具有无消歧乱序加载存储队列的重新排序的推测性指令序列 |
US20140244984A1 (en) * | 2013-02-26 | 2014-08-28 | Advanced Micro Devices, Inc. | Eligible store maps for store-to-load forwarding |
US9513904B2 (en) * | 2013-10-15 | 2016-12-06 | Mill Computing, Inc. | Computer processor employing cache memory with per-byte valid bits |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1994008287A1 (en) * | 1992-09-29 | 1994-04-14 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
TW550569B (en) * | 2001-08-03 | 2003-09-01 | Fujitsu Ltd | Semiconductor memory |
US6799265B1 (en) * | 2000-07-11 | 2004-09-28 | Intel Corporation | Dependency checking for reconfigurable logic |
US20080082738A1 (en) * | 2006-09-29 | 2008-04-03 | Cypher Robert E | Efficient store queue architecture |
US20080307173A1 (en) * | 2007-06-05 | 2008-12-11 | Tse-Yu Yeh | Efficient Encoding for Detecting Load Dependency on Store with Misalignment |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6735685B1 (en) * | 1992-09-29 | 2004-05-11 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
EP1508853A1 (en) * | 2003-08-19 | 2005-02-23 | STMicroelectronics Limited | Computer system and method for loading non-aligned words |
KR101258424B1 (ko) * | 2005-12-02 | 2013-04-26 | 가부시키가이샤 한도오따이 에네루기 켄큐쇼 | 반도체 디바이스 |
DE112006003917T5 (de) * | 2006-05-30 | 2009-06-04 | Intel Corporation, Santa Clara | Verfahren, Gerät und System angewendet in einem Cachespeicher-Kohärenzprotokoll |
US20100250850A1 (en) * | 2009-03-25 | 2010-09-30 | Faraday Technology Corp. | Processor and method for executing load operation and store operation thereof |
-
2009
- 2009-10-20 US US12/582,591 patent/US8392666B2/en active Active
-
2010
- 2010-04-27 TW TW099113238A patent/TWI407368B/zh active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1994008287A1 (en) * | 1992-09-29 | 1994-04-14 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
US6799265B1 (en) * | 2000-07-11 | 2004-09-28 | Intel Corporation | Dependency checking for reconfigurable logic |
TW550569B (en) * | 2001-08-03 | 2003-09-01 | Fujitsu Ltd | Semiconductor memory |
US20080082738A1 (en) * | 2006-09-29 | 2008-04-03 | Cypher Robert E | Efficient store queue architecture |
US20080307173A1 (en) * | 2007-06-05 | 2008-12-11 | Tse-Yu Yeh | Efficient Encoding for Detecting Load Dependency on Store with Misalignment |
Also Published As
Publication number | Publication date |
---|---|
US20100299484A1 (en) | 2010-11-25 |
TW201042544A (en) | 2010-12-01 |
US8392666B2 (en) | 2013-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI407368B (zh) | 檢測載入-儲存衝突之方法及其裝置 | |
US6963964B2 (en) | Method and apparatus for detecting pipeline address conflict using parallel compares of multiple real addresses | |
US9600289B2 (en) | Load-store dependency predictor PC hashing | |
JP3907809B2 (ja) | 複合分岐予測およびキャッシュ先取りをするマイクロプロセッサ | |
CN103699362B (zh) | 微处理器及其执行的方法 | |
US9131899B2 (en) | Efficient handling of misaligned loads and stores | |
JP2001142776A (ja) | データをロードする方法及びデータをストアする方法 | |
US9218183B2 (en) | System and method for improving memory transfer | |
JP2009009571A (ja) | レベル2キャッシュ/ネスト・アドレスを変換する方法および装置 | |
TWI590053B (zh) | 選擇性預取實體接續快取線至包含被載入分頁表之快取線 | |
US8539209B2 (en) | Microprocessor that performs a two-pass breakpoint check for a cache line-crossing load/store operation | |
US9626185B2 (en) | IT instruction pre-decode | |
US6804759B2 (en) | Method and apparatus for detecting pipeline address conflict using compare of byte addresses | |
US11614944B2 (en) | Small branch predictor escape | |
US6381622B1 (en) | System and method of expediting bit scan instructions | |
US9305614B2 (en) | Memory device with internal combination logic | |
US20100306475A1 (en) | Data cache with modified bit array | |
JP7523361B2 (ja) | 命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 | |
US11113067B1 (en) | Speculative branch pattern update | |
US20070011432A1 (en) | Address generation unit with operand recycling | |
US11500638B1 (en) | Hardware compression and decompression engine | |
CN101853188B (zh) | 检测载入-储存冲突的方法及其装置 | |
US11983538B2 (en) | Load-store unit dual tags and replays | |
US20220405209A1 (en) | Multi-stage cache tag with first stage tag size reduction | |
JP3824657B2 (ja) | 1クロックサイクル内でデータをストアするよう構成されたデータメモリユニット、およびその動作方法 |