TWI552078B - 使用單一指令多重資料(simd)暫存器而執行函式呼叫之技術 - Google Patents
使用單一指令多重資料(simd)暫存器而執行函式呼叫之技術 Download PDFInfo
- Publication number
- TWI552078B TWI552078B TW100145275A TW100145275A TWI552078B TW I552078 B TWI552078 B TW I552078B TW 100145275 A TW100145275 A TW 100145275A TW 100145275 A TW100145275 A TW 100145275A TW I552078 B TWI552078 B TW I552078B
- Authority
- TW
- Taiwan
- Prior art keywords
- register
- mask
- function
- input
- scratchpad
- Prior art date
Links
- 230000006870 function Effects 0.000 claims description 175
- 230000015654 memory Effects 0.000 claims description 46
- 238000000034 method Methods 0.000 claims description 26
- 239000000872 buffer Substances 0.000 claims description 10
- 238000013507 mapping Methods 0.000 claims description 7
- 230000004044 response Effects 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 26
- 230000008569 process Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 3
- 229910003460 diamond Inorganic materials 0.000 description 3
- 239000010432 diamond Substances 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 230000000873 masking effect Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000002542 deteriorative effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Description
本發明係有關於使用單一指令多重資料(SIMD)暫存器而執行函式呼叫之技術。
近代三維(3D)圖形處理器典型地為精簡指令集運算(RISC)設計,配置有具有256,512或以上位元之極大型暫存器檔案及暫存器。然後此種RISC處理器連結至所謂的向量或單一指令多重資料(SIMD)列,該等列共享一指令快取記憶體及偶爾也共享一資料快取記憶體。此等架構可有效地處理用在3D描繪呈像技術的簡單著色器程式。但該等架構具有函式呼叫上的問題,有關體現函式呼叫堆疊時必須傳送極大的暫存器值(至少256位元寬)來去於記憶體(原因在於典型地本地資料快取記憶體極為有限)。又,目前最新SIMD架構不配備有任一種函式呼叫堆疊。因此,目前SIMD架構不執行函式呼叫,反而執行線內函式成為代碼,及結果只支援有限的函式呼叫深度。於此種情況下,代碼大小極其快速地成長,惡化指令快取記憶體的利用。
依據本發明之一實施例,係特地提出一種處理器,其係包含:一純量暫存器檔案;一單一指令多重資料(SIMD)暫存器檔案;及執行從一主程式至一函式之一函式呼叫之一執行單元,該函式係在至少一個SIMD運算元上運算,其中該執行單元係只傳遞純量值至該函式,及包括該至少一個SIMD運算元之函式之輸入值係從以該函式之代碼表示的輸入暫存器至該SIMD暫存器檔案之暫存器重新命名。
100、500‧‧‧處理器
110、205‧‧‧輸入輸出暫存器遮罩
120‧‧‧未用過暫存器遮罩
130‧‧‧本地暫存器遮罩
140‧‧‧本地溢位填充遮罩
150‧‧‧暫存器遮罩解碼器
160、345、426‧‧‧輸入輸出重新命名表
170、230‧‧‧分錄選擇器
180、220、428‧‧‧本地重新命名表
210‧‧‧反向重新命名移位器
2121-2128‧‧‧移位器
2141-2148‧‧‧或(OR)閘
240‧‧‧虛擬輸入輸出暫存器遮罩
300、400‧‧‧方法
310‧‧‧主程式
315-375、405-490‧‧‧處理方塊
340‧‧‧函式呼叫
360、401‧‧‧函式
410、480‧‧‧菱形
442‧‧‧下個層級函式呼叫
450‧‧‧其次層級函式
501‧‧‧提取單元
502‧‧‧微代碼排序器
503‧‧‧指令快取記憶體
504‧‧‧串流化緩衝器
505‧‧‧指令解碼器
510‧‧‧前端單元
515‧‧‧脫序(OOO)引擎
520‧‧‧執行單元
522‧‧‧算術邏輯單元(ALU)
530‧‧‧暫存器檔案
535‧‧‧擴充暫存器檔案
540‧‧‧重新排序緩衝器(ROB)
550‧‧‧快取記憶體
560‧‧‧遮罩暫存器
570‧‧‧表儲存裝置
600‧‧‧多處理器系統
614‧‧‧輸入/輸出(I/O)裝置
616‧‧‧第一匯流排
618‧‧‧匯流排橋接器
620‧‧‧第二匯流排
622‧‧‧鍵盤/滑鼠
624‧‧‧音訊輸入/輸出(I/O)
626‧‧‧通訊裝置
628‧‧‧資料儲存裝置
630‧‧‧代碼
632、634‧‧‧記憶體
638‧‧‧高效能繪圖引擎
639、652、654‧‧‧點對點(P-P)互連體
670‧‧‧第一處理器
672、682‧‧‧記憶體控制器中樞器(MCH)
674a-b、684a-b‧‧‧處理器核心
680‧‧‧第二處理器
686、688、694、698‧‧‧點對點(P-P)介面
690‧‧‧晶片組
692、696‧‧‧介面(I/F)
第1圖為依據本發明之一實施例處理器之一部分之方塊圖。
第2圖為方塊圖例示說明依據本發明之一實施例暫存器遮罩解碼器之操作。
第3圖為方塊圖例示說明依據本發明之一實施例暫存器遮罩解碼器用以處理未用過暫存器遮罩之輸入的操作。
第4圖為方塊圖例示說明依據本發明之一實施例的反向重新命名移位器之使用。
第5圖為依據本發明之一實施例用於暫存器重新命名之方法之流程圖。
第6A圖與第6B圖為依據本發明之一實施例用以重新命名在包括呼叫下個層級函式之函式內部的暫存器之方法之流程圖。
第7圖為依據本發明之一個實施例處理器之一部分之
方塊圖。
第8圖為依據本發明之一實施例的系統之方塊圖。
第1圖為依據本發明之一實施例處理器之一部分之方塊圖。
第2圖為方塊圖例示說明依據本發明之一實施例暫存器遮罩解碼器之操作。
第3圖為方塊圖例示說明依據本發明之一實施例暫存器遮罩解碼器用以處理未用過暫存器遮罩之輸入的操作。
第4圖為方塊圖例示說明依據本發明之一實施例的反向重新命名移位器之使用。
第5圖為依據本發明之一實施例用於暫存器重新命名之方法之流程圖。
第6A圖與第6B圖為依據本發明之一實施例用以重新命名在包括呼叫下個層級函式之函式內部的暫存器之方法之流程圖。
第7圖為依據本發明之一個實施例處理器之一部分之
方塊圖。
第8圖為依據本發明之一實施例的系統之方塊圖。
於多個實施例中,函式呼叫可能出現在SIMD處理器架構。為了實現此種函式呼叫,實施例可虛擬化暫存器名稱,使得函式使用所謂的虛擬暫存器而非實際暫存器或堆疊變數。虛擬暫存器係相對應於函式代碼內部的暫存器識別符,藉重新命名處理該虛擬暫存器可經解出成實際暫存器,及反之亦然,該重新命名處理的執行為編譯器或應用程式代碼所不可見。重新命名處理可使用堆疊(例如雙字組(DW)堆疊)體現,該堆疊只通過回送函式指標及狀態,使得堆疊的使用維持為儘可能為最少。
如此,實施例可組合習知堆疊特徵與大型SIMD暫存器的重新命名。注意「向量」及「SIMD」等術語係互換使用來表示運算元,該等運算元包括多個個別資料元件(例如16位元單元)堆積成單一暫存器或其它儲存元件。就構思上而言,實施例可察知為類似RISC暫存器環,但更有效原因在於其並不使用移動指令來執行函式參數從堆疊的推進及彈出(反而可提供單一重新命名指令)。此外,實施例特別適用於SIMD架構,原因在於全面可見的暫存器可連同本地重新命名的暫存器同時使用。藉此方式,實施例可結合於多個近代微處理器架構來減低函式呼叫成本。
如前述,實施例提供一種混成方法具有純量暫存器之堆疊(於一實施例中可以是雙字組寬度)及大型SIMD暫存器的重新命名能力二者。藉此方式,可無限制地使用函式。因此之故,SIMD程式代碼可以遠更小且可應付重現情況。替代將大型SIMD暫存器推進一堆疊,此等暫存器可被重新命名。於因缺乏可用SIMD暫存器而重新命名無法完成之情況下,實施例可溢位暫存器給記憶體來釋放多個暫存器,及視需要時從記憶體填充暫存器。
比較本發明之實施例與線內函式可有若干折衷。第一,若干指令及週期可添加至程式來執行函式呼叫。又當有過少暫存器可資重新命名的情況下,進行有某個成本的溢位-填充。但藉使用具有函式呼叫之實施例,代碼可合理的儘可能地小,如此更佳利用指令快取記憶體。
為了體現暫存器重新命名及函式呼叫,區別實際暫存器及虛擬暫存器來分別地表示原先暫存器號碼及重新命名的暫存器號碼。函式呼叫可分類成兩組,亦即,若例如從主程式以實際暫存器呼叫時的一次或第一層級呼叫;及若例如從次常式(函式)以虛擬暫存器呼叫時的二次或第二層級呼叫。
重新命名可使用多個組件,包括輸入輸出暫存器遮罩、輸入虛擬暫存器遮罩、輸入輸出重新命名表、未用過暫存器遮罩、未用過虛擬暫存器遮罩、本地暫存器遮罩、分錄選擇器、本地重新命名表、本地溢位填充遮罩、反向重新命名移位器、及暫存器遮罩解碼器。將循序地討論各
個此等不同組件。為了有助於此等暫存器的瞭解,參考第1圖。
現在參考第1圖,顯示依據本發明之一實施例處理器之一部分之方塊圖。如第1圖所示,處理器100可包括多個組件,用來體現依據本發明之一實施例處理SIMD運算元之函式呼叫。
如第1圖所示,可存在有多個暫存器遮罩。此等暫存器遮罩各自可相對應於處理器的一個特定暫存器,且可用來將函式內部使用的重新命名SIMD暫存器處理程序中所使用的資訊儲存至實體暫存器。如圖可知,此等暫存器遮罩可包括輸入輸出暫存器遮罩110、及未用過暫存器遮罩120、及本地暫存器遮罩130。又更容後詳述,實施例也可包括本地溢位填充遮罩140。
為了產生用於第一或第二層級函式的資訊,遮罩可提供給暫存器遮罩解碼器150,後者可使用給定解碼公式來將該等暫存器遮罩解碼成重新命名表內部之分錄。特別地顯示於第1圖,此等重新命名表可包括輸入輸出重新命名表160及本地重新命名表180。概略言之,輸入輸出暫存器遮罩110可提供給暫存器遮罩解碼器150來產生輸入輸出重新命名表160之分錄。同理,未用過暫存器遮罩120可提供給暫存器遮罩解碼器150來產生本地重新命名表180,又更運用本地暫存器遮罩130作為耦接在暫存器遮罩解碼器150與本地重新命名表180間之分錄選擇器170之選擇標準。如第1圖更可知,本地重新命名表180可藉
分錄選擇器230而耦接至反向重新命名移位器210,後者又轉而提供資訊給輸入輸出暫存器遮罩110。又更可知,於若干實施例中,也可存在有虛擬輸入輸出暫存器遮罩240。雖然以第1圖之實施例中的此等特定組件顯示,但須瞭解本發明之範圍並非囿限於此一方面。又雖然就第1圖組件之討論係特別參考其中顯示的元件做討論,但須瞭解各個暫存器遮罩、解碼器、重新命名等之後文討論可更普遍地應用至不同體現。
於一個實施例中,輸入輸出暫存器遮罩可以是特定處理器暫存器,含有從該程式之主常式(第一層級)程式規劃之一遮罩來分配輸入及輸出暫存器給所呼叫函式(例如函式參數)。此一遮罩可在函式呼叫前藉編譯器設定。將一值寫至此特定暫存器,開始遮罩解碼程序,使得暫存器遮罩解碼器填充輸入輸出重新命名表的連續分錄。在此遮罩的各個設定位元表示欲用作為該所呼叫函式之虛擬輸入的實際暫存器號碼之順序(例如以位元位置排序)。因此,嚴格假設實際暫存器藉編譯器有序地分配來輸入即將到來的函式呼叫。
於一個實施例中,虛擬輸入輸出暫存器遮罩為從次常式(第二層級)程式規劃的遮罩來將虛擬暫存器分配給所呼叫函式為輸入及輸出暫存器。於一個實施例中,遮罩可以體現為虛擬處理器暫存器(且可以是輸入輸出暫存器遮罩的重複再用)。針對第二層級函式呼叫,在第二層級函式呼叫前,虛擬輸入輸出暫存器遮罩可藉編譯器設定。於多
個實施例中,虛擬輸入輸出暫存器遮罩係自動地且暗示地於硬體解算回輸入輸出暫存器遮罩(使用輸入輸出重新命名表而解算回實際暫存器號碼),使得各個函式使用輸入輸出暫存器遮罩來重新命名輸入及輸出。有關此一處理程序之額外細節敘述如下。假設輸入輸出暫存器遮罩或輸入虛擬暫存器遮罩之任何修改程式規劃輸入暫存器對映機構,使得其方使用在次常式。
於一個實施例中,輸入輸出重新命名表可以是處理器暫存器表,維持虛擬輸入輸出暫存器號碼與實際暫存器號碼間之對映關係。未用過暫存器遮罩轉而為特定處理器暫存器,可以呈位元遮罩形式,儲存可用於重新命名的暫存器列表。為了將本地虛擬暫存器解算為實際暫存器,編譯器輸送未用過暫存器遮罩至各個第一層級函式呼叫。換言之,編譯器作用來插入特定指令,該指令使用在編譯過程習得的即時值來設定未用過暫存器遮罩值,原因在於常見編譯過程追蹤全部暫存器的暫存器壽命範圍。此一遮罩可具有容量來指定每個暫存器一個位元(例如從許可重新命名的暫存器匯集處/檔案),及載明設定暫存器是否可用於重新命名。否則,若位元為清除,則表示相對應暫存器無法用於重新命名。此一遮罩的位元可循序分配給暫存器,使得在該遮罩上設定的第一位元邏輯操作送返第一可用於重新對映的暫存器號碼。本地暫存器重新命名處理程序(於若干體現中)可在配置本地虛擬暫存器於一函式期間進行。該處理程序使用未用過暫存器遮罩的目前值,容後詳
述。
若某些虛擬暫存器的壽命期係大於欲呼叫的函式,則虛擬未用過暫存器遮罩為從次常式(例如第二層級)程式規劃的遮罩來從進一步重新命名程序中移除該等若干虛擬暫存器。編譯器也遞送即時值來修改第二層級函式呼叫的虛擬未用過暫存器遮罩,而將具有作用壽命範圍超過函式呼叫的該等本地虛擬暫存器移除,不做進一步重新命名處理。於虛擬未用過暫存器遮罩的各個清除的位元表示無法用於進一步重新命名的暫存器。虛擬未用過暫存器遮罩係藉硬體使用一型反向重新命名程序而自動地解算成未用過暫存器遮罩。在此種修改之前,程式可藉將未用過暫存器遮罩的先前值推進堆疊來儲存該遮罩。從次常式返回後,程式復原未用過暫存器遮罩(例如藉將該遮罩從堆疊中彈出)。
本地暫存器遮罩為含有從次常式(例如第二層級)程式規劃的遮罩之特定處理器暫存器,該遮罩係用來配置本地虛擬暫存器。將一值寫至此特定暫存器,開始遮罩解碼處理程序。遮罩中設定的位元號碼載明可配置多少暫存器,及設定位元在遮罩中之位置識別虛擬暫存器號碼。於一個實施例中,實際暫存器號碼可取自未用過暫存器遮罩,及傳送至暫存器遮罩解碼器,填充本地重新命名表之連續分錄。換言之,未用過暫存器遮罩係傳遞至暫存器遮罩解碼器的輸入,及然後本地暫存器遮罩係用來獲得解碼器輸出之正確子集(例如使用多工器),容後詳述。
於一個實施例中,此一多工器可以是分錄選擇器來選擇欲填充本地重新命名表的暫存器遮罩解碼器之輸出。本地暫存器遮罩係依據下述規則用作為選擇輸入:遮罩中的設定位元選擇該相對應輸出。於一個實施例中,若該輸出係未經擇定,則送出空值(取決於體現,可以是0或-1)。
於一個實施例中,本地重新命名表乃維持虛擬本地暫存器號碼與實際暫存器號碼間之對映的處理器暫存器表。
本地溢位填充遮罩又轉而為處理器暫存器其含有一遮罩,該遮罩表示溢位至記憶體而當從執行溢位的函式送回時欲被填充的暫存器。於一個實施例中,此一遮罩在溢位期間可儲存在該堆疊而於填充期間復原。
於一個實施例中,暫存器遮罩解碼器可以是負責將暫存器遮罩解碼成重新命名表的硬體單元。暫存器遮罩解碼器之輸入為二進制遮罩亦即輸入輸出暫存器遮罩或未用過暫存器遮罩。解碼器具有等於輸入二進制遮罩長度的輸出數目。現在參考第2圖,顯示例示說明之依據本發明之一實施例暫存器遮罩解碼器之操作的方塊圖。如第2圖所示,暫存器遮罩解碼器150可以體現為解算器來接收輸入輸出暫存器遮罩110,及產生輸入輸出重新命名表160之多個分錄。注意於第2圖之實施例中,輸入輸出暫存器遮罩110可以是8個位元,於是輸入輸出重新命名表160可提供8個分錄。更一般言之,針對N的遮罩大小,重新命名表可包括N個分錄-logN+1位元。
現在參考第3圖,顯示方塊圖例示說明依據本發明之
一實施例,用以處理未用過暫存器遮罩之輸入的暫存器遮罩解碼器之操作。如第3圖所示,暫存器遮罩解碼器150可耦接來接收未用過暫存器遮罩120,及產生多個輸出(例如相對應於遮罩N位元的N輸出)。此等輸出轉而可提供給分錄選擇器170,分錄選擇器170係藉本地暫存器遮罩130控制,如此只傳遞由本地暫存器遮罩130選擇用於儲存於本地重新命名表180的輸出。於一個實施例中,輸入輸出暫存器遮罩及本地重新命名表之硬體體現可呈暫存器表形式(具有log2N+1位元,此處N為遮罩長度(log2N於第2至3圖係標示為lgN)),其中隨後分錄含有於遮罩的設定位元位置。雖然於第2及3圖之實施例中顯示此等特定例示說明,但須瞭解本發明之範圍並非囿限於此。
於一個實施例中,暫存器遮罩解碼器之輸出(Q1至Qn)可依據於輸入遮罩中的資訊順序而被設定。更明確言之,解碼器可輸出分錄Q1-Q8如下:i)遮罩的第一設定位元-此乃輸出Q1之函式;ii)遮罩的第二設定位元-此乃輸出Q2之函式;iii)遮罩的第三設定位元-此乃輸出Q3之函式...等等只要iv)遮罩的第N設定位元-此乃輸出Qn之函式。
換言之,於第一輸出(Q1),暫存器遮罩解碼器回送用作為函式的輸入或本地暫存器的第一虛擬化技術(VT)之實際暫存器號碼。第二輸出(Q2)回送第二虛擬暫存器之實際暫存器號碼,相同規則適用於其餘輸出。若沒有任何實際
暫存器號碼對映至某個虛擬暫存器號碼,則相對應解碼器輸出回送空值,取決於體現,空值可以是0或-1。相對應於解碼器操作表1至4的卡努特(Karnught)表假設空值為0。更明確言之,表1至4闡釋針對8-位元長度遮罩,第一、第二、第三、及第八暫存器遮罩解碼器輸出之布林函式。若遮罩為極大,則遮罩可部分解碼,及連續多次解碼結果可在硬體合併。
注意於若干實施例中,可體現兩個解碼器用以將輸入輸出暫存器遮罩解碼成輸入輸出重新命名表,及將未用過暫存器遮罩的子集解碼成本地重新命名表。
反向重新命名移位器為硬體解碼器,用以將虛擬暫存器號碼反向重新命名成為實際暫存器遮罩值,該遮罩值可用來程式規劃輸入輸出暫存器遮罩或未用過暫存器遮罩。於一個實施例中,該移位器可具有N輸入,各自有logN+1位元及一個有N位元的輸出,於該處N為暫存器遮罩大小。於一個實施例中,此一硬體單元可包括一移位
器區塊,其將1之值左移從相對應輸入所得之位置數目;及一或(OR)閘區塊,其將移位器所產生的位元遮罩邏輯相加。
現在參考第4圖,顯示依據本發明之一實施例反向重新命名移位器之使用之方塊圖。如第4圖所示,反向重新命名移位器210可用來將虛擬輸入輸出暫存器遮罩240反向重新命名成輸入輸出暫存器遮罩205。更明確言之,本地重新命名表220係耦接至分錄選擇器230,該選擇器係由虛擬輸入輸出暫存器遮罩240之值作為選擇值控制,使得於遮罩的設定位元選擇本地重新命名表之一子集欲通過作為反向重新命名移位器單元210的輸入。因本地重新命名表220之分錄含有實際暫存器號碼,該等號碼然後於多個移位器2121-2128中移位來獲得具有在相對應位置之設定位元的位元遮罩。然後多個或閘2141-2148邏輯上加總全部遮罩,及如此算出欲程式規劃成輸入輸出暫存器遮罩205之值。
重新命名方法之其它假設係如下。函式本地變數經常性係作為虛擬暫存器。其係動態地及自動地對映至實際暫存器。此一事實係以指令代碼表示,使得此等本地虛擬暫存器係被編碼成與通用暫存器檔案不同的暫存器檔案,例如形成本地虛擬暫存器檔案。函式輸入也作為特用虛擬暫存器(係將通過函式的參數)。如此有個額外虛擬暫存器檔案,諸如輸入虛擬暫存器檔案來用於指令代碼。二虛擬暫存器檔案當對映至通用暫存器檔案(具有暫存器重新命名)
時只存在於指令編碼。至於函式輸出,出現不同情況,因可使用通用暫存器之固定子集(實際暫存器),因此此等輸出無需重新命名。舉例言之,特定暫存器諸如累加器可用來回送來自函式之值。純量堆疊的作用與習知堆疊相同,但維持在簡單SIMD RISC處理器的小型本地記憶體,純量堆疊只通過需要的資訊。舉例言之,於一個實施例中,處理器可通過函式回送指標、未用過暫存器遮罩、及本地溢位填充遮罩。但須瞭解於其它實施例中可通過額外的或不同的資訊。
純量堆疊合併SIMD暫存器重新命名函式額外地允許解決於指令中的若干SIMD流之頻道遮罩問題,原因在於此種遮罩容易經由純量堆疊傳遞。
其中未用過暫存器遮罩內部的設定位元不足的情況下,執行單元(EU)可自動地執行暫存器溢位-填充至記憶體,來釋出一暫存器區塊用於重新命名。於此種情況下,未用過暫存器遮罩係重建來在相對應於暫存器溢位至記憶體的該等位置上含有1。此項操作可進行作為一種陷阱次常式,或完全在硬體體現。為了保護某些全面性暫存器免於用在溢位-填充處理程序,可使用全面性暫存器遮罩(藉編譯器設定),其中各個設定位元表示相對應暫存器無法用於溢位-填充。但於若干體現中,可能不支援全面性暫存器來簡化硬體。
為了記憶正在進行本地溢位的暫存器來執行反向填充,軟體及/或硬體可計算本地溢位填充遮罩值,表示溢
位至記憶體的實際暫存器。一旦溢位將SIMD暫存器填滿至記憶體,則目前值可推進堆疊,及從堆疊復原來從記憶體復原(填充)SIMD暫存器。在填充完成後,在第一本地暫存器配置已經於函式完成後,遮罩可用來重組未用過暫存器遮罩而獲得其原先值。於若干實施例中,未用過暫存器遮罩也可在暫存器溢位期間推進至堆疊,而在填充時彈出。
來從函式各次回送時,可測試條件有關函式是否執行暫存器填充至記憶體。於一個實施例中,條件可儲存在未用過暫存器遮罩的專用位元內部。若條件符合,則在從函式回送前,可進行溢位暫存器的回填充。此種動作可作為陷阱次常式或於硬體執行。於體現明確暫存器重新命名及特定指令在函式上進行開始之情況下,暫存器溢位-填充也可完全在軟體體現,原因在於測試明確暫存器重新命名指令的結果時為可行,而當不合格時執行溢位-填充代碼區段。
實際暫存器及其它特定暫存器檔案可全面地使用。換言之,函式可使用任一種無對映的特定暫存器,諸如訊息暫存器/位址暫存器、任一種輸入/輸出暫存器等,原因在於從程式觀點,該種特定暫存器的壽命範圍典型地為本地。可實現函式內使用實際暫存器,原因在於其保有程式通用變數值。
現在描述依據本發明之一實施例執行暫存器重新命名之處理程序。後文討論中,使用下列標記。SIMD暫存器
屬於標記以大寫字母R(數字)的專用暫存器檔案,純量暫存器屬於標記以小寫字母r(數字)的分開暫存器檔案,但實施例並非囿限於此。虛擬本地及輸入SIMD暫存器分別標記以大寫字母V及I。注意虛擬本地及輸入純量暫存器為不存在,原因在於使用純量堆疊而非重新命名。
依據本發明之一實施例輸入暫存器重新命名假定用來將參數傳遞至函式的SIMD暫存器(通用暫存器用於第一呼叫層級,而本地虛擬暫存器用於第二呼叫層級)維持暫存器的編碼順序,然後該順序反映在輸入暫存器編號上。舉例言之,若編譯器選擇R5、R7、R15來通過參數至具有三個輸入諸如I1、I2、I3的函式,則輸入暫存器重新命名處理程序將I1重新命名為R5,I2命名為R7,及I3命名為R15。如前述,輸入暫存器的重新命名係使用在函式呼叫前由編譯器所設定的輸入輸出暫存器遮罩。用於將R5、R7、R15重新命名入輸入的所述實例,輸入輸出暫存器遮罩將具有3個設定位元(例如位元5、7及15),及如此具有0x80a0之值。除了輸入之外,通過回送指標,使用純量堆疊用於該項目的。
於一個實施例中,暫存器可依據一序列操作各自執行獲得遮罩中的第一設定位元及清除之操作的結果而重新命名。於該實例中,為了將輸入虛擬暫存器I1重新命名為實際暫存器,獲得遮罩中的第一設定位元及清除之操作可在遮罩0x80a0上執行,回送5之結果。藉清除位元5也更新輸入輸出暫存器遮罩的拷貝,使得其值更新為
0x80a0。其次接續操作(例如第二獲得遮罩中的第一設定位元及清除之)回送7之結果及清除位元7,及於該遮罩上的最末此項操作回送15結果,及清除最末設定位元15,使得用過的輸入輸出暫存器遮罩值為0,結束輸入及輸出暫存器重新命名處理程序。
多個實施例中,使用暫存器遮罩解碼器,其可在單一時鐘週期執行多個操作(例如多次獲得遮罩中的第一設定位元及清除之),硬體可遠更快速地完成重新命名。此種解碼結果係儲存於輸入輸出重新命名表。
現在參考第5圖,顯示流程圖例示說明依據本發明之一實施例之暫存器重新命名處理程序。如第5圖所示,方法300可於主程式310操作期間,簽發函式呼叫340給函式360。於函式執行期間,實體SIMD暫存器係重新命名,因而免除將SIMD大小的參數傳遞至函式的需要。
如第5圖可知,於程式310期間,可設定函式呼叫之輸入暫存器(方塊315)。舉例言之,假設函式係使用3個SIMD運算元執行操作。如此可設定此三個SIMD運算元的初始值,提供期望初始值給此等實體SIMD暫存器。然後控制傳送給方塊320,於該處可程式規劃輸入輸出暫存器遮罩。更明確言之,編譯器可確保輸入輸出暫存器遮罩係經程式規劃,遮罩的設定位元以適當順序相對應於欲用在函式呼叫的輸入及輸出暫存器。然後控制傳送給方塊325,於該處未用過暫存器遮罩可以使用超過該函式的暫存器減少。更明確言之,編譯器可設定未用過暫存器遮罩
至一值,於該處已清除位元不可供進一步使用,原因在於此等暫存器係使用超過該函式。
仍然參考第5圖,其次控制傳送給方塊330,於該處未用過暫存器遮罩可連同回送指標儲存於一堆疊。於多個實施例中,此一暫存器堆疊可以是純量堆疊。如此可知無需儲存任何變數至欲用在該函式的堆疊。換言之,並具通過參數給函式。取而代之,重新命名程序可自動地執行,如此獲得存在於SIMD實體暫存器的期望初始值。因此之故,控制傳送給方塊340,於該處可呼叫函式。
其次控制傳送給方塊360。函式中多個指令執行期間,可使用期望的輸入暫存器,如函式之代碼指示,如方塊370所見,及同理,期望的輸出暫存器可用來將結果從函式傳遞至呼叫方,如方塊372可知。但於其使用前,執行依據本發明之一實施例的重新命名操作。注意此一重新命名處理程序可自動地執行,使得對編譯器及程式代碼二者為不可見(及如此也對程式規劃師為不可見)。
有關重新命名程序,注意依據本發明之一實施例,如上程式規劃的輸入輸出暫存器遮罩使如可使用暫存器遮罩解碼器解碼。如前文討論,此項解碼操作如此可在輸入輸出重新命名表345內部產生多個分錄。於一個實施例中,此項解碼如此可產生一分錄集合,於該處首X個分錄係相對應於該輸入輸出暫存器遮罩內部之設定值。當一給定輸入或輸出暫存器係用在於函式360中的指令內部時,在輸入輸出重新命名表345內部的該給定分錄可被讀取來如此
從虛擬暫存器號碼對映至實際暫存器號碼,然後可視何者為適當而存取。舉例言之,針對給定數學操作,暫存器可經讀取來獲得資料值,同理,操作結果可儲存至適當暫存器。
函式360結束時,控制傳送給方塊375,於該處指標可彈出堆疊,如此將控制送回主程式,及更明確言之係送回方塊350。於方塊350,未用過暫存器遮罩可從堆疊位置復原。雖然以此特定例顯示於第5圖之實施例,須瞭解本發明之範圍並非囿限於此。
為了更例示說明此項重新命名操作,現在參考下表5列舉的虛擬代碼。
如表5可知,操作係陳述於主程式來將初始值載入
SIMD實體暫存器,及然後藉將未用過暫存器遮罩及回送指標推進一堆疊而準備呼叫一函式。然後呼叫該函式,其執行期望的操作例如所示乘法及加法運算。於該函式結束時,彈出堆疊回送指標,然後控制返回主程式,於該處未用過暫存器遮罩可被復原,可執行於主程式的額外運算。
於表5虛擬代碼實例中,於乘法及加法函式中,SIMD暫存器的輸入輸出重新命名表將有包括5、7及15數值之一分錄集合。輸入輸出暫存器遮罩之各次設定程式規劃輸入輸出重新命名表(運用暫存器遮罩解碼器),使得虛擬暫存器號碼用在程式的加法函式中的任何指令係藉讀取輸入輸出重新命名表中的相對應位置來將該位置轉譯成實際暫存器號碼而予實現。
於表5虛擬代碼實例中,傳遞來自乘法及加法函式之輸出係以ACC(向量單元之累積器)之特定向量暫存器完成。此乃純量函式體現中極為常見的可接受性實務。但針對相同目的,可使用任何虛擬輸出暫存器。於下表6中,來自從線性記憶體載入函式的結果可傳遞入虛擬輸出暫存器I4內部。於本實例中,該虛擬暫存器對映至呼叫器程式中的R15。
針對第二層級呼叫的輸入輸出暫存器重新命名可以針對第一層級函式呼叫前文討論之相似方式,使用輸入輸出暫存器遮罩執行。但第二層級函式係以不同方式準備。差異在於輸入輸出暫存器遮罩藉寫至虛擬輸入輸出暫存器遮罩而間接更新,其為依據虛擬暫存器號碼而駐在的遮罩
值。在寫至虛擬輸入輸出暫存器遮罩期間,虛擬暫存器號碼係重新命名回實際暫存器號碼,此種反向重新命名結果係寫至輸入輸出暫存器遮罩(用於重新命名函式)。反向重新命名處理程序進一步討論如下。
單純藉由修改本地暫存器遮罩值,可於函式完成本地暫存器重新命名。本地暫存器遮罩之各次修改造成本地重新命名表使用有關得自未用過暫存器遮罩的可利用暫存器之相關資訊而重新程式規劃,如上第3圖之例示說明。換言之,本地暫存器遮罩中的設定位元通知多少個可用暫存器可得自未用過暫存器遮罩。本地重新命名表可以輸入輸出重新命名表之相同方式體現,使得連續分錄含有遮罩中的設定位元位置。
單純藉讀取在本地重新命名表的相對應分錄來將該分錄轉譯成實際暫存器號碼,本地虛擬暫存器號碼可用在程式中之任何指令。若函式呼叫另一個函式(次常式)及從其中回送後需要使用本地虛擬暫存器,則編譯器再度重新配置該虛擬暫存器。換言之,本地暫存器遮罩的壽命經常結束在呼叫另一函式時。在重新配置前,未用過暫存器遮罩值可得自純量堆疊。重新配置係以配置之相同方式進行,換言之係藉修改本地暫存器遮罩,該遮罩係使用未用過暫存器遮罩來程式規劃本地重新命名表,如第3圖之例示說明。
為了將虛擬輸入輸出暫存器遮罩及虛擬未用過暫存器遮罩明確地反向重新命名回實際暫存器號碼,硬體可從本
地重新命名表存取正確位置(遮罩中的設定位元位置),及使用該等位置來產生分別地欲設定於輸入輸出暫存器遮罩或未用過暫存器遮罩的數值。於一個實施例中,如第4圖之例示說明,硬體可體現反向重新命名移位器單元來在單一時鐘週期以內進行此種反向重新命名。
現在參考第6A圖與第6B圖,顯示依據本發明之一實施例用以重新命名在一函式內部之暫存器之方法的流程圖,該函式包括呼叫下個層級函式。如第6A圖與第6B圖所示,方法400可於第一函式401亦即第一層級函式,從呼叫器程式接收控制。於函式401,第一操作可以是於方塊405配置本地暫存器。至於配置部分,可決定是否有可用的暫存器(菱形410)。若否,則可執行溢位操作來將多個暫存器儲存至記憶體(方塊415)。任一種情況下,控制送回第一函式401來繼續配置任何本地暫存器。注意本地暫存器可單純藉修改本地暫存器中的分錄而予配置,造成本地重新命名表428之程式規劃。
於本地暫存器配置後,控制送至方塊425,於該處使用輸入暫存器及本地暫存器二者可執行函式內部的各項運算。來自輸入輸出重新命名表426及本地重新命名表428二者的分錄可經讀取來獲得實際暫存器號碼用以存取SIMD暫存器檔案內的實體暫存器。
仍然參考第6A圖與第6B圖,下列運算可用來準備對第二層級函式450的呼叫。更明確言之,未用過暫存器遮罩可連同回送指標而推進至堆疊上(方塊430)。然後控制
傳送給方塊435,於該處,藉由以虛擬暫存器清除此遮罩內的位元可減少未用過暫存器遮罩,該虛擬暫存器係被使用超過所呼叫函式。為了實現此點,於一個實施例中,相對應於在虛擬輸入輸出暫存器遮罩中設定的位元之分錄可讀取自本地重新命名表428來於一個實施例中,使用反向重新命名移位器而獲得實際暫存器號碼。更進一步準備下一個層級函式呼叫,控制傳送給方塊440,於該處虛擬輸入輸出暫存器遮罩可以虛擬暫存器作為輸入而程式規劃。
因此之故,輸入輸出重新命名表426現在以第二值寫入來如此提供用在下個層級函式的虛擬暫存器號碼與實際暫存器號碼間之對映關係。
因此之故,函式401的控制傳送給下個層級函式呼叫442,其成控制傳送給下個層級函式450。於此下個層級函式內部,可使用輸入暫存器(方塊452)以及輸出暫存器(方塊453)。此種輸入及輸出暫存器的使用可以是就輸入輸出重新命名表而言,藉執行前文討論的對映。類似前文就第5圖所述操作,在函式之運算完成後,指標可從堆疊回送(方塊455),如此控制回送給第一層級函式401。
更明確言之,控制傳送給方塊460,於該處未用過暫存器遮罩可從堆疊中彈出。於方塊465,本地暫存器之一子集可被重新配置。於一個實施例中,未用過暫存器遮罩可使用暫存器遮罩解碼器解碼來產生本地重新命名表428之已更新版本。使用於此本地重新命名表中之資訊,於函式運算期間可運用本地暫存器(方塊470)。如前文討論,
如此可讀取在本地重新命名表內部的分錄來從虛擬暫存器號碼對映至實際暫存器號碼。此種本地暫存器的使用結束時,控制傳送給方塊475,於該處全部本地暫存器配置可被釋出。此外,控制傳送給菱形480,於該處可決定是否進行如前述之溢位-填充。若是,則控制回送給方塊485,於該處溢位至記憶體的暫存器可被復原。任一種情況下,最後控制傳送給方塊490,於該處藉從該堆疊彈出回送指標,控制可回送至主呼叫器。雖然第6A圖與第6B圖之實施例係以此一特定體現顯示,須瞭解本發明之範圍並非囿限於此。
更進一步例示說明之第二層級重新命名操作,現在可參考下表6列舉的虛擬代碼,其大致追蹤如上就第6A圖與第6B圖描述之操作。如於表6實例可知,在從線性記憶體載入函式內部,假設未用過暫存器遮罩具有從16至31設定的SIMD暫存器可資利用,在以7修改本地暫存器遮罩後,本地重新命名表具有針對SIMD暫存器的接續值16、17及18。
實施例可在多個不同系統體現。舉例言之,實施例可在許多不同型別的處理器實現,諸如圖形處理器、通用處理器諸如多核心處理器及其類。現在參考第7圖,顯示依據本發明之一實施例處理器之一部分之方塊圖。如第7圖所示,處理器500可以是多階段式管線化脫序處理器。處理器500在第7圖以相當簡單視圖顯示來例示說明依據本發明之一實施例多個暫存器檔案與遮罩暫存器間之互動。
如第7圖所示,處理器500包括前端單元510,可用來執行指令提取,及準備指令後來用在處理器。舉例言之,前端單元510可包括提取單元501、微代碼排序器502、可儲存巨集指令及微運算的指令快取記憶體503、串流化緩衝器504、及指令解碼器505。提取單元501可例如從記憶體或指令快取記憶體503提取巨集指令,及將巨集指令饋至指令解碼器505來將巨集指令解碼成基元,亦即用以由處理器執行的微運算。微代碼排序器502轉而可介接各個前端結構,來當指令解碼器不解碼給定指令時,起始與操縱從微代碼儲存於系統內之處提取微代碼。串流化緩衝器504可用來介接記憶體階層關係,允許提取在指令快取記憶體503中遺漏的指令(包括微代碼流)。須瞭解第7圖以相對高層級顯示來描述用在執行微代碼提取的各組件間之互動。
耦接在前端單元510與執行單元520間者為脫序
(OOO)引擎515,該引擎可用來接收微指令,及準備指令用於執行。更明確言之,OOO引擎515可包括多個緩衝器來重新排序微指令,及配置執行需要的各個資源,以及提供本地暫存器的重新命名至各個暫存器檔案諸如暫存器檔案530及擴充暫存器檔案535內部的儲存位置。暫存器檔案530可包括整數及浮點運算的分開暫存器檔案。擴充暫存器檔案535可提供向量大小單元,例如每個暫存器256或512位元儲存。
此外,可設置遮罩暫存器560之一集合來允許用在本發明之實施例之多個遮罩的儲存。此等暫存器560可提供於函式呼叫期間用在擴充暫存器檔案535中向量暫存器的重新命名操作的不同暫存器遮罩之儲存。除了此等各項儲存外,依據本發明之一實施例,處理器500可更包括表儲存裝置570用來連結重新命名表使用。於一個實施例中,此等表可透過靜態隨機存取記憶體(SRAM)體現。雖然本發明之範圍並非囿限於此,表可具有相對有限量的分錄且可包括重新命名表包括輸入及本地重新命名表。類似遮罩暫存器,此等表於不同實施例中可體現為統一或分開結構。
多個資源可存在於執行單元520,包括例如各個整數、浮點、及單一指令多重資料(SIMD)邏輯單元等其它特化硬體。舉例言之,此等執行單元520可包括一或多個算術邏輯單元(ALU)522。結果可提供給報廢邏輯,亦即重新排序緩衝器(ROB)540。更明確言之,ROB 540可包括多個
陣列及邏輯來接收所執行的指令之相聯結的資訊。然後此一資訊藉540檢查來決定指令可被合法地報廢,及結果資料委交處理器的架構狀態,或是否出現一或多個項例外而阻止指令的妥為報廢。當然,ROB 540也可處理與報廢有關的其它運算。
如第7圖所示,ROB 540係耦接至快取記憶體550,於一個實施例中可以是低層級快取記憶體(例如L1快取記憶體)。又,執行單元520可直接地耦接至快取記憶體550。從快取記憶體550,資料通訊可發生於較高層級快取記憶體、系統記憶體等。雖然於第7圖實施例中以高層級顯示,但須瞭解本發明之範圍並非囿限於此。舉例言之,於其它實施例中,處理器可以是體現為圖形處理器的簡單RISC設計。
實施例可以多個不同系統型別體現。現在參考第8圖顯示依據本發明之一實施例之系統之方塊圖。如第8圖所示,多處理器系統600為點對點互連系統,包括透過而耦接的第一處理器670及第二處理器680。如第8圖所示,處理器670及680各自可以是多核心處理器,包括第一及第二處理器核心(亦即處理器核心674a及674b及處理器核心684a及684b),但可能有更多個核心存在於處理器。於若干實施例中,此等核心可包括遮罩暫存器及表來允許處理器執行存在於函式之代碼中的暫存器重新命名至SIMD暫存器檔案的實體暫存器,而無需傳遞SIMD運算元至該函式。
仍然參考第8圖,第一處理器670更包括記憶體控制器中樞器(MCH)672及點對點(P-P)介面676及678。同理,第二處理器680包括MCH 682及P-P介面686及688。如第8圖所示,MCH 672及682將處理器耦接至個別記憶體,亦即記憶體632及記憶體634,該等記憶體可以是本地附接至個別處理器的主記憶體之一部分(例如動態隨機存取記憶體(DRAM))。第一處理器670及第二處理器680可分別地透過P-P互連體652及654而耦接至晶片組690。如第8圖所示,晶片組690包括P-P介面694及698。
再者,晶片組690包括介面692藉P-P互連體639而耦接晶片組690與高效能繪圖引擎638。晶片組690轉而可透過介面696而耦接至第一匯流排616。如第8圖所示,多個輸入/輸出(I/O)裝置614可耦接至第一匯流排616,連同匯流排橋接器618其耦接第一匯流排616至第二匯流排620。於一個實施例中,多個裝置可耦接至第二匯流排620,包括例如鍵盤/滑鼠622、通訊裝置626、及資料儲存裝置628諸如磁碟機或其它大容量儲存裝置其可包括代碼630。又復,音訊I/O 624可耦接至第二匯流排620。
如此,使用已重新命名虛擬暫存器用以傳遞自變數給函式及其中使用的本地變數,實施例可提供SIMD函式呼叫。此外,實施例可自動地追蹤暫存器的利用性,使得若有所需,可執行區塊溢位-填充至記憶體操作來釋放/復原
暫存器之一區塊。如此實施例提供典型堆疊(具有推進及彈出)及暫存器堆疊之效能。
如此替代習知函式呼叫,其要求從暫存器堆疊推進及然後彈出輸入變數及參數,實施例可使用暫存器重新命名。換言之,遠更少個移動指令可用來進行函式呼叫。藉此方式,可改進具有極大暫存器(例如256、512位元或以上)的SIMD架構效能。實施例也許可混合運用存在於本地暫存器的本地函式變數連同存在於全面性暫存器的全面性參數等兩項技術,原因在於SIMD架構可從極大型暫存器集合獲益。又,於多個實施例中,純量堆疊可只用來通過極少部分資訊,如此可維持於小部分本地記憶體。於並行SIMD架構與硬體多重執行緒中,可體現其本身堆疊的並行硬體執行緒數目可在100至1000之範圍。
如此函式呼叫SIMD架構可最佳地執行,考慮下述事實:極大型SIMD暫存器不易推進與彈出任一種堆疊。舉例言之,具有512位元的SIMD32暫存器需要8個週期來在某些SIMD架構上做移動。藉重新命名此等暫存器,使得移動減至最低,只傳遞「重新命名」資訊通過呼叫堆疊,實施例可有效地從事函式呼叫。
實施例可以代碼體現且可儲存在其上儲存有指令的儲存媒體上,該等代碼可用來程式規劃系統而執行指令。儲存媒體可包括但非限於任何型別的碟片,包括軟碟、光碟、光碟、固態驅動裝置(SSD)、光碟-唯讀記憶體(CD-ROM)、光碟可寫式(CD-RW)、及磁光碟、半導體裝置諸如
唯讀記憶體(ROM)、隨機存取記憶體(RAM)諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式規劃唯讀記憶體(EPROM)、快閃記憶體、可電氣抹除可程式規劃唯讀記憶體(EEPROM)、磁卡或光卡、或適合儲存電子指令之任何其它型別的媒體。
雖然已經就有限數目的實施例描述本發明之實施例,但熟諳技藝人士將瞭解可於其中做出無數修改及變化。意圖隨附之申請專利範圍涵蓋落入於本發明之精髓及範圍內的全部此等修改及變化。
100‧‧‧處理器
110‧‧‧輸入輸出暫存器遮罩
120‧‧‧未用過暫存器遮罩
130‧‧‧本地暫存器遮罩
140‧‧‧本地溢位填充遮罩
150‧‧‧暫存器遮罩解碼器
160‧‧‧輸入輸出重新命名表
170、230‧‧‧分錄選擇器
180‧‧‧本地重新命名表
210‧‧‧反向重新命名移位器
240‧‧‧虛擬輸入輸出暫存器遮罩
Claims (16)
- 一種處理器,其係包含:一純量暫存器檔案;一單一指令多重資料(SIMD)暫存器檔案;執行從一主程式至一函式之一函式呼叫之一執行單元,該函式係在至少一個SIMD運算元上運算,其中該執行單元係只傳遞純量值至該函式,及包括該至少一個SIMD運算元之函式之輸入值係從以該函式之代碼表示的輸入暫存器至該SIMD暫存器檔案之暫存器重新命名;一輸入輸出暫存器遮罩來儲存一值,其由該函式所程式規劃,該值係相對應於欲用在該函式中的該SIMD暫存器檔案之暫存器之一身分;一輸入輸出重新命名表來儲存多個分錄,其中該等多個分錄係將回應於該輸入輸出暫存器遮罩之值而產生,該輸入輸出重新命名表係欲藉該等輸入或輸出暫存器而被索引,及各個被索引的分錄係將識別欲用在該函式中的SIMD暫存器檔案之一相對應暫存器;及一虛擬輸入輸出暫存器遮罩來儲存一值,其由該函式所程式規劃,該值對應於SIMD暫存器檔案之虛擬暫存器之一身份,其由該函式所呼叫之一第二函式所使用,其中輸入輸出重新命名表係提供由第二函式所使用之虛擬暫存器數目至SIMD暫存器檔案之暫存器數目的映射。
- 如申請專利範圍第1項之處理器,其中一編譯器係以該等輸入暫存器或輸出暫存器用在於該代碼之使用順序而設定該輸入輸出暫存器遮罩之值。
- 如申請專利範圍第1項之處理器,其係進一步包含一暫存器遮罩解碼器其係耦接來接收該輸入輸出暫存器遮罩,及基於該輸入輸出暫存器遮罩值而駐在該輸入輸出重新命名表之該等分錄。
- 如申請專利範圍第3項之處理器,其係進一步包含一未用過暫存器遮罩來儲存一值,該值係相對應於該SIMD暫存器檔案之暫存器之一身分,該等暫存器係可在該函式之代碼中用作為本地暫存器。
- 如申請專利範圍第4項之處理器,其係進一步包含耦接至該暫存器遮罩解碼器之輸出的一分錄選擇器,其用以基於一本地暫存器遮罩來選擇由該暫存器遮罩解碼器回應於該未用過暫存器遮罩之輸入而輸出之分錄之一部分,以產生一本地重新命名表之分錄,該本地重新命名表之該等分錄各自係識別欲用作為本地暫存器之該SIMD暫存器檔案之暫存器。
- 如申請專利範圍第3項之處理器,其係進一步包含一反向重新命名移位器來接收如由一虛擬輸入輸出暫存器遮罩之一值所選擇之一本地重新命名表之輸出,及產生欲由該函式所呼叫之該第二函式所使用的該輸入輸出暫存器遮罩之一更新值。
- 如申請專利範圍第6項之處理器,其中該反向重新命名移位器包括:一第一移位器集合,該等移位器各自係接收與移位來自該本地重新命名表之一分錄;及耦接至該第一移位器集合之多個邏輯閘,該等邏輯閘 各自係輸出該輸入輸出暫存器遮罩之該已更新值之一相對應位元。
- 一種方法,其係包含:由一主程式以一值來程式規劃儲存於一處理器之一第一遮罩暫存器中之一輸入輸出暫存器遮罩,該值係相對應於欲用在由一主程式所呼叫之一函式中的一向量暫存器檔案之一暫存器身分,而不將該向量暫存器檔案之該等暫存器值傳遞至該函式,及於執行該函式後不傳遞來自該函式之該向量暫存器檔案之暫存器的結果值;以一值來程式規劃儲存於該處理器之一第二遮罩暫存器中之一未用過暫存器遮罩,該值係相對應於可用作為該函式中的本地暫存器之該向量暫存器檔案之暫存器的一身分;及儲存該未用過暫存器遮罩及一回送指標於一純量堆疊,及隨後呼叫該函式;從該第一遮罩暫存器存取該輸入輸出暫存器遮罩,及解碼該輸入輸出暫存器遮罩而產生包括多個分錄之一輸入輸出重新命名表,該等分錄各自識別欲用在該函式之該向量暫存器檔案之一相對應暫存器;以一值程式規劃儲存在該處理器之該第一遮罩暫存器之一虛擬輸入輸出暫存器遮罩,該值係相對應於欲用在由該函式所呼叫之一第二函式中之該向量暫存器檔案之暫存器之一身分;從該函式呼叫該第二函式;及從該第一遮罩暫存器存取該虛擬輸入輸出暫存器遮 罩,及解碼該虛擬輸入輸出暫存器遮罩,來以相對應於欲用在該第二函式中之輸入或輸出暫存器的分錄而更新該輸入輸出重新命名表。
- 如申請專利範圍第8項之方法,其中該輸入輸出暫存器遮罩係為一編譯器及該函式之代碼所不可見地存取。
- 如申請專利範圍第9項之方法,其係進一步包含藉使用一輸入或輸出暫存器,索引進入該輸入輸出重新命名表之一分錄來執行以該輸入或輸出暫存器編碼之該函式之操作,該分錄包括欲用在該函式中之該向量暫存器檔案之一暫存器之一識別符。
- 如申請專利範圍第8項之方法,其係進一步包含於該函式中,溢位該向量暫存器檔案之該等暫存器中之多者至一記憶體,及透過儲存於該處理器之一第四遮罩暫存器中之一溢位遮罩來識別該等溢位暫存器,包括設定該溢位遮罩之一溢位指示器來指示該溢位。
- 如申請專利範圍第11項之方法,其係進一步包含從一呼叫至一第二函式返回至該函式後,存取該溢位遮罩,及回應於該設定的溢位指示器,而將該溢位暫存器從該記憶體復原至該向量暫存器檔案之該等暫存器。
- 一種系統,其係包含:一處理器包括一第一暫存器檔案來儲存純量運算元,一第二暫存器檔案來儲存向量運算元,一遮罩儲存裝置來儲存一第一值,該第一值係相對應於一函式中欲用作為輸入暫存器及輸出暫存器的該第二暫存器檔案之暫存器的一身分,及一表儲存裝置來儲存回應於該第一值而產生的第 一多數分錄,該等分錄各自係識別於該函式中欲用作為輸入暫存器或輸出暫存器中之一者而使用的該第二暫存器檔案之一相對應暫存器,其中該遮罩儲存裝置係更儲存一第二值,該第二值係相對應於可用於該函式中作為本地暫存器之該第二暫存器檔案之暫存器之一身分,及該表儲存裝置係儲存一第二多數分錄,該等分錄係識別欲用作為本地暫存器中之一者的該第二暫存器檔案之一相對應暫存器;及耦接至該處理器之一動態隨機存取記憶體(DRAM)。
- 如申請專利範圍第13項之系統,其中該處理器係執行從一主程式至該函式之一函式呼叫,該函式係欲在儲存於該第二暫存器檔案之一暫存器的至少一個向量運算元上運算,而不使用該至少一個向量運算元之一堆疊,及欲使用一純量值堆疊,其中該處理器係從該遮罩儲存裝置儲存至少一個值至該堆疊,該至少一個值係相對應於在該函式中可用作為本地暫存器的該第二暫存器檔案之暫存器之一身分。
- 如申請專利範圍第14項之系統,其中在該函式呼叫前,該第一值係設定為一相對應於在該函式中該等輸入或輸出暫存器之順序使用之值。
- 如申請專利範圍第15項之系統,其中該處理器係進一步包含耦接來接收該第一值且基於該第一值而駐在該表之該等第一多個分錄之一遮罩解碼器。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/963,987 US8725989B2 (en) | 2010-12-09 | 2010-12-09 | Performing function calls using single instruction multiple data (SIMD) registers |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201232413A TW201232413A (en) | 2012-08-01 |
TWI552078B true TWI552078B (zh) | 2016-10-01 |
Family
ID=46200614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW100145275A TWI552078B (zh) | 2010-12-09 | 2011-12-08 | 使用單一指令多重資料(simd)暫存器而執行函式呼叫之技術 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8725989B2 (zh) |
TW (1) | TWI552078B (zh) |
WO (1) | WO2012078735A2 (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8365088B1 (en) * | 2010-10-01 | 2013-01-29 | The Mathworks, Inc. | Interactive design environment having design tool portion and density display portion |
US8752064B2 (en) * | 2010-12-14 | 2014-06-10 | Advanced Micro Devices, Inc. | Optimizing communication of system call requests |
US8933954B2 (en) * | 2011-03-23 | 2015-01-13 | Qualcomm Incorporated | Register allocation for graphics processing |
US9588770B2 (en) * | 2013-03-15 | 2017-03-07 | Samsung Electronics Co., Ltd. | Dynamic rename based register reconfiguration of a vector register file |
US20160011877A1 (en) * | 2014-07-11 | 2016-01-14 | Cavium, Inc. | Managing instruction order in a processor pipeline |
US9804842B2 (en) * | 2014-12-23 | 2017-10-31 | Intel Corporation | Method and apparatus for efficiently managing architectural register state of a processor |
US10282224B2 (en) * | 2015-09-22 | 2019-05-07 | Qualcomm Incorporated | Dynamic register virtualization |
US10235177B2 (en) * | 2016-07-02 | 2019-03-19 | Intel Corporation | Register reclamation |
US10713050B2 (en) | 2017-09-19 | 2020-07-14 | International Business Machines Corporation | Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions |
US10896030B2 (en) | 2017-09-19 | 2021-01-19 | International Business Machines Corporation | Code generation relating to providing table of contents pointer values |
US10705973B2 (en) | 2017-09-19 | 2020-07-07 | International Business Machines Corporation | Initializing a data structure for use in predicting table of contents pointer values |
US11061575B2 (en) * | 2017-09-19 | 2021-07-13 | International Business Machines Corporation | Read-only table of contents register |
US10620955B2 (en) | 2017-09-19 | 2020-04-14 | International Business Machines Corporation | Predicting a table of contents pointer value responsive to branching to a subroutine |
US10884929B2 (en) | 2017-09-19 | 2021-01-05 | International Business Machines Corporation | Set table of contents (TOC) register instruction |
US10725918B2 (en) | 2017-09-19 | 2020-07-28 | International Business Machines Corporation | Table of contents cache entry having a pointer for a range of addresses |
US10915320B2 (en) | 2018-12-21 | 2021-02-09 | Intel Corporation | Shift-folding for efficient load coalescing in a binary translation based processor |
US11029954B2 (en) | 2019-04-22 | 2021-06-08 | Samsung Electronics Co., Ltd. | Per-lane dynamic indexing in temporary registers |
CN112083954A (zh) * | 2019-06-13 | 2020-12-15 | 华夏芯(北京)通用处理器技术有限公司 | 一种gpu中显式独立掩码寄存器的掩码操作方法 |
US10983794B2 (en) * | 2019-06-17 | 2021-04-20 | Intel Corporation | Register sharing mechanism |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040205741A1 (en) * | 2001-05-16 | 2004-10-14 | Huang Alfred J. | Methods and apparatus for use in aiding stack unwinding |
US20070234011A1 (en) * | 2006-03-28 | 2007-10-04 | Abernathy Christopher M | Method and system for on-demand scratch register renaming |
US20090172365A1 (en) * | 2007-12-27 | 2009-07-02 | Doron Orenstien | Instructions and logic to perform mask load and store operations |
TW201020805A (en) * | 2008-10-08 | 2010-06-01 | Advanced Risc Mach Ltd | Apparatus and method for performing SIMD multiply-accumulate operations |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5671413A (en) * | 1994-10-31 | 1997-09-23 | Intel Corporation | Method and apparatus for providing basic input/output services in a computer |
JP3817436B2 (ja) * | 2000-09-28 | 2006-09-06 | 株式会社東芝 | プロセッサおよびリネーミング装置 |
US7603704B2 (en) | 2002-12-19 | 2009-10-13 | Massachusetts Institute Of Technology | Secure execution of a computer program using a code cache |
GB2411973B (en) | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | Constant generation in SMD processing |
US20050138340A1 (en) * | 2003-12-22 | 2005-06-23 | Intel Corporation | Method and apparatus to reduce spill and fill overhead in a processor with a register backing store |
US7840954B2 (en) | 2005-11-29 | 2010-11-23 | International Business Machines Corporation | Compilation for a SIMD RISC processor |
US8707015B2 (en) * | 2010-07-01 | 2014-04-22 | Advanced Micro Devices, Inc. | Reclaiming physical registers renamed as microcode architectural registers to be available for renaming as instruction set architectural registers based on an active status indicator |
-
2010
- 2010-12-09 US US12/963,987 patent/US8725989B2/en not_active Expired - Fee Related
-
2011
- 2011-12-07 WO PCT/US2011/063708 patent/WO2012078735A2/en active Application Filing
- 2011-12-08 TW TW100145275A patent/TWI552078B/zh not_active IP Right Cessation
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040205741A1 (en) * | 2001-05-16 | 2004-10-14 | Huang Alfred J. | Methods and apparatus for use in aiding stack unwinding |
US20070234011A1 (en) * | 2006-03-28 | 2007-10-04 | Abernathy Christopher M | Method and system for on-demand scratch register renaming |
US20090172365A1 (en) * | 2007-12-27 | 2009-07-02 | Doron Orenstien | Instructions and logic to perform mask load and store operations |
TW201020805A (en) * | 2008-10-08 | 2010-06-01 | Advanced Risc Mach Ltd | Apparatus and method for performing SIMD multiply-accumulate operations |
Non-Patent Citations (1)
Title |
---|
Settle, A., Connors, D., Hoflehner, G., & Lavery, D. (2003, March). Optimization for the Intel® Itanium® architecture register stack. In Code Generation and Optimization, 2003. CGO 2003. International Symposium on(pp. 115-124). IEEE. * |
Also Published As
Publication number | Publication date |
---|---|
WO2012078735A3 (en) | 2012-08-16 |
US20120151182A1 (en) | 2012-06-14 |
TW201232413A (en) | 2012-08-01 |
WO2012078735A2 (en) | 2012-06-14 |
US8725989B2 (en) | 2014-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI552078B (zh) | 使用單一指令多重資料(simd)暫存器而執行函式呼叫之技術 | |
CN204945992U (zh) | 一种处理器 | |
US9361242B2 (en) | Return stack buffer having multiple address slots per stack entry | |
US5996057A (en) | Data processing system and method of permutation with replication within a vector register file | |
US6330661B1 (en) | Reducing inherited logical to physical register mapping information between tasks in multithread system using register group identifier | |
JP6849274B2 (ja) | 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック | |
US6334176B1 (en) | Method and apparatus for generating an alignment control vector | |
TWI644208B (zh) | 藉由對硬體資源之限制實現的向後相容性 | |
JP6761565B2 (ja) | アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置 | |
WO1996012228A1 (en) | Redundant mapping tables | |
KR20160031503A (ko) | 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치 | |
TWI522910B (zh) | 微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品 | |
KR20190107691A (ko) | 레지스터 리네이밍, 콜-리턴 예측 및 프리페치의 구현 | |
KR100322725B1 (ko) | 전문 갱신 및 분기 명령을 이용하는 밀리코드 플래그 | |
TWI502498B (zh) | 微處理器、積體電路、計算機程式產品與提供微碼指令儲存空間的方法 | |
JP4444305B2 (ja) | 半導体装置 | |
US20020144091A1 (en) | Method and apparatus for dynamic register management in a processor | |
US7783692B1 (en) | Fast flag generation | |
US11544065B2 (en) | Bit width reconfiguration using a shadow-latch configured register file | |
EP4052121A1 (en) | Shadow latches in a shadow-latch configured register file for thread storage | |
CN115910208A (zh) | 用于在加速史密斯-沃特曼序列对齐时存储子对齐数据的技术 | |
JP4703735B2 (ja) | コンパイラ、コード生成方法、コード生成プログラム | |
CN115905786A (zh) | 用于加速史密斯-沃特曼序列对齐的技术 | |
JPH0619709A (ja) | パイプラインプロセッサを有するコンピュータシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |