[go: up one dir, main page]

TWI490782B - 來源運算元收集器快取的方法和裝置 - Google Patents

來源運算元收集器快取的方法和裝置 Download PDF

Info

Publication number
TWI490782B
TWI490782B TW101145702A TW101145702A TWI490782B TW I490782 B TWI490782 B TW I490782B TW 101145702 A TW101145702 A TW 101145702A TW 101145702 A TW101145702 A TW 101145702A TW I490782 B TWI490782 B TW I490782B
Authority
TW
Taiwan
Prior art keywords
cache
operand
instruction
memory
register
Prior art date
Application number
TW101145702A
Other languages
English (en)
Other versions
TW201337747A (zh
Inventor
Jack Hilaire Choquette
Manuel Olivier Gautho
John Erik Lindholm
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of TW201337747A publication Critical patent/TW201337747A/zh
Application granted granted Critical
Publication of TWI490782B publication Critical patent/TWI490782B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

來源運算元收集器快取的方法和裝置
本發明概略關於處理器暫存器,尤指來源運算元收集器快取的方法和裝置。
平行處理器具有多個獨立的核心,其能夠使用不同的硬體資源而同時執行多個執行緒。單一指令多重資料(SIMD,“Single instruction,multiple data”)架構處理器在該等多個核心中每一核心上執行相同的指令,其中每一核心對於不同的輸入資料來執行。多重指令多重資料(MIMD,“Multiple instruction,multiple data”)架構處理器利用供應給每一核心之不同輸入資料來在不同核心上執行不同的指令。平行處理器亦可被多執行緒化,其可使用一單一處理核心的該等資源使得兩個或更多的執行緒可實質上同時地執行(即該等不同執行緒在不同時脈循環期間在該核心上執行)。
當一處理器排程一指令來由一處理器核心執行時,該處理器寫入某些數值到耦合於該處理器核心的一暫存器檔案中的特殊暫存器當中。一暫存器可以儲存用於指定該作業由該處理器核心執行的該作業碼,且額外的暫存器可以儲存用於做為該處理器核心之輸入來執行該指令的運算元數值。為了使一作業可執行,該等數值之每一者必須被寫入到該暫存器檔案中,然後經由一交叉開關或其它資料傳輸手段而耦合於該資料路徑的該等輸入。每一指令可能需要在該暫存器檔案中的新暫存器來連接至位在該資料路徑上方處的該等輸入。
上述架構之一個問題在於設置該交叉開關來將儲存在該暫存器檔案中的暫存器數值耦合至位在該資料路徑的上方處的該等輸入係需要一或多個時脈循環來執行。載入每一運算元所需要的時間即會對於整體處理效率造成潛時。再者,該交叉 開關可以設置成使得僅有一個運算元在每一時脈循環期間被耦合至該資料路徑的該等輸入。
因此,本技術中需要一種改良的技術來由該暫存器檔案載入數值到一處理器核心的一資料路徑之該等輸入當中。
一具體實施例提出一種用於在實作有來源運算元收集器快取的一處理器核心上執行指令的方法。該方法包括以下步驟:解碼一指令來決定由該指令所指定的複數運算元;針對在該等複數運算元中每一運算元決定一特定運算元並未儲存在耦合至該處理器核心內一資料路徑之輸入的一快取中;及由關聯於該處理器核心的一局部暫存器檔案將該特定運算元載入到該快取當中。該方法進一步包括設置該處理器核心來使用儲存在該快取中的運算元來執行該指令的步驟。
另一具體實施例提出一種包括有指令的電腦可讀取儲存媒體。當該等指令由一處理器核心執行時,該等指令使得該處理器核心執行以下步驟:解碼一指令來決定由該指令所指定的複數運算元;針對在該等複數運算元中每一運算元決定一特定運算元並未儲存在耦合至該處理器核心內一資料路徑之輸入的一快取中;及由關聯於該處理器核心的一局部暫存器檔案將該特定運算元載入到該快取當中。該等步驟亦包括設置該處理器核心來使用儲存在該快取中的運算元來執行該指令。
又另一具體實施例提出一種包括具有一資料路徑的一處理器核心來執行指令、一耦合至該資料路徑的該等輸入的快取、及一排程單元。該排程單元設置成解碼一指令來決定由該指令所指定的複數運算元;針對在該等複數運算元中每一運算元決定一特定運算元並未儲存在耦合至該處理器核心內一資料路徑之輸入的一快取中;及由關聯於該處理器核心的一局部暫存器檔案將該特定運算元載入到該快取當中。該排程單元 亦設置成使用儲存在該快取中該等運算元執行該指令。
在以下的說明中,許多特定細節係被提出來提供對於本發明之更為完整的瞭解。但是本技術專業人士將可瞭解到本發明可不利用一或多個這些特定細節來實施。
本發明描述來源運算元收集器快取的方法和裝置。在一具體實施例中,一處理器包括一暫存器檔案,其可被耦合至儲存元件(即一運算元收集器)以提供輸入至該處理器核心的該資料路徑來執行一指令。為了降低該暫存器檔案和該運算元收集器之間的頻寬,運算元可被快取,並在後續的指令中重新使用。因此,可能僅需要將由一給定指令所指定的該等運算元之一子集合載入到該運算元收集器當中。一排程單元維持一快取表,用於監視目前儲存在該運算元收集器中該等暫存器數值。該排程單元亦可設置該運算元收集器來選擇針對一給定指令被耦合至該資料路徑的該等輸入之該等特定儲存元件,以允許兩個或更多指令的運算元被並行地快取。
系統概述
第一圖係例示設置成實作本發明一或多種態樣之一電腦系統100的方塊圖。電腦系統100包括一中央處理單元(CPU)102與一系統記憶體104,其經由包括一記憶體橋接器105的互連接路徑進行通訊。記憶體橋接器105可為例如一北橋晶片,其經由一匯流排或其它通訊路徑106(例如HyperTransport鏈路)連接到一I/O(輸入/輸出)橋接器107。I/O橋接器107可為例如一南橋晶片,其接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並經由通訊路徑106及記憶體橋接器105轉送該輸入到CPU 102。一平行處理子系統112經由一匯流排或第二通訊路徑113(例如PCI(周邊組件互連接)Express,加速圖形處理埠、或HyperTransport鏈 路)耦合至記憶體橋接器105;在一具體實施例中,平行處理子系統112為一繪圖子系統,其傳遞像素到一顯示器110(例如一習用陰極射線管或液晶式的監視器)。一系統碟114亦連接至I/O橋接器107。一交換器116提供I/O橋接器107與其它像是網路轉接器118與多種嵌入卡120,121之其它組件之間的連接。其它組件(未明確顯示),包括有通用串列匯流排(USB,"Universal serial bus”)或其它埠連接、光碟(CD)驅動器、數位視訊碟(DVD)驅動器、薄膜記錄裝置及類似者,其亦可連接至I/O橋接器107。第一圖所示之該等多種通訊路徑(包括特定名稱的通訊路徑106與113)可使用任何適當的協定來實作,例如PCI(周邊組件互連,Peripheral Component Interconnect)、PCI Express(PCI快速,PCI-E)、AGP(加速圖形通訊埠,Accelerated Graphics Port)、HyperTransport(超輸送)、或任何其它匯流排或點對點通訊協定、及不同裝置之間的連接,皆可使用如本技術中所知的不同協定。
在一具體實施例中,平行處理子系統112加入可針對圖形及視訊處理最佳化的電路,其包括例如視訊輸出電路,且構成一圖形處理器(GPU)。在另一具體實施例中,平行處理子系統112加入可針對一般性目的處理最佳化的電路,而可保留底層的運算架構,在此處會有更為詳細的說明。在又另一具體實施例中,平行處理子系統112在一單一子系統中可被整合於一或多個其它系統元件,例如結合記憶體橋接器105、CPU 102、及I/O橋接器107而形成一系統上晶片(SoC,“System on chip”)。
將可瞭解到此處所示的系統僅為例示性,其有可能有多種變化及修正。該連接拓樸,包括橋接器的數目與配置、CPU 102的數目及平行處理子系統112的數目皆可視需要修改。例如,在一些具體實施例中,系統記憶體104直接連接至CPU 102而非透過一橋接器耦接,而其它裝置透過記憶體橋接器104及 CPU 105與系統記憶體102進行通訊。在其它可替代的拓樸中,平行處理子系統112連接至I/O橋接器107或直接連接至CPU 102,而非連接至記憶體橋接器105。在又其它具體實施例中,除了做為一或多個分散的裝置之外,I/O橋接器107及記憶體橋接器105可被整合到一單一晶片當中。大型具體實施例可包括兩個或更多的CPU 102,及兩個或更多的平行處理子系統112。此處所示的該等特定組件皆為選擇性的;例如其可支援任何數目的嵌入卡或周邊裝置。在一些具體實施例中,交換器116被省略,且網路轉接器118及嵌入卡120、121直接連接至I/O橋接器107。
第二圖例示根據本發明一具體實施例之一平行處理子系統112。如所示,平行處理子系統112包括一或多個平行處理單元(PPU,“parallel processing unit")202,其每一者耦合於一局部平行處理(PP,“parallel processing”)記憶體204。概言之,一平行處理子系統包括數目為U的PPU,其中U≧1。(在此處類似物件的多個實例標示為辨識該物件之參考編號,而括號中的數目辨識所需要的實例)。PPU 202及平行處理記憶體204可以使用一或多個積體電路裝置來實作,例如可程式化處理器,特殊應用積體電路(ASIC,“Application specific integrated circuits”),或記憶體裝置,或以任何其它技術上可行的方式來實作。
請再次參照第一圖以及第二圖,在一些具體實施例中,平行處理子系統112中部份或所有的PPU 202為圖形處理器,其具有顯像管線,其能夠設置成執行關於自CPU 102及/或系統記憶體104經由記憶體橋接器105及第二通訊路徑113所供應的圖形資料產生像素資料的多種作業,與本地平行處理記憶體204進行互動(其能夠做為圖形記憶體,其包括例如一習用像框緩衝器),以儲存及更新像素資料,傳遞像素資料到顯示器110及類似者。在一些具體實施例中,平行處理子系統112可以包 括可操作為圖形處理器的一或多個PPU 202,及用於通用型運算的一或多個其它PPU 202。該等PPU可為相同或不同,且每個PPU可以具有一專屬的平行處理記憶體裝置或並無專屬的平行處理記憶體裝置。在平行處理子系統112中一或多個PPU 202可以輸出資料到顯示裝置110,或在平行處理子系統112中每個PPU 202可以輸出資料到一或多個顯示器110。
在作業中,CPU 102為電腦系統100的主控處理器,其控制及協調其它系統組件的作業。特別是CPU 102發出控制PPU 202之作業的命令。在一些具體實施例中,CPU 102對每一PPU 202寫入一命令串流至一資料結構(未明確示於第一圖或第二圖中),其可位於系統記憶體104、平行處理記憶體204或可同時由CPU 102與PPU 202存取的其它儲存位置。指向至每一資料結構的一指標被寫入至一推入緩衝器來啟始在該資料結構中該命令串流之處理。PPU 202自一或多個推入緩衝器讀取命令串流,然後相對於CPU 102的該作業非同步地執行命令。執行優先性可針對每一推入緩衝器藉由一應用程式經由裝置驅動器103來指定,以控制該等不同推入緩衝器的排程。
現在請回頭參照第二圖以及第一圖,每個PPU 202包括一I/O(輸入/輸出)單元205,其經由通訊路徑113與電腦系統100的其它部份進行通訊,其連接至記憶體橋接器105(或在另一具體實施例中直接連接至CPU 102)。PPU 202與電腦系統100的其餘部份之連接亦可改變。在一些具體實施例中,平行處理子系統112係實作成一嵌入卡,其可被插入到電腦系統100的一擴充槽中。在其它具體實施例中,PPU 202可利用一匯流排橋接器整合在一單一晶片上,例如記憶體橋接器105或I/O橋接器107。在又其它的具體實施例中,PPU 202之部份或所有元件可與CPU 102整合在一單一晶片上。
在一具體實施例中,通訊路徑113為一PCI-EXPRESS鏈路,其中如本技術中所熟知具有專屬的線路會分配給每個PPU 202。其亦可使用其它通訊路徑。一I/O單元205產生封包(或其它信號)在通訊路徑113上傳輸,且亦自通訊路徑113接收所有進入的封包(或其它信號),導引該等進入封包到PPU 202的適當組件。例如,關於處理工作的命令可被導引到一主控介面206,而關於記憶體作業的命令(例如自平行處理記憶體204讀取或寫入其中)可被導引到一記憶體交叉開關單元210。主控介面206讀取每個推入緩衝器,並輸出儲存在該推入緩衝器中的該命令串流至一前端212。
每一PPU 202較佳地是實作一高度平行的處理架構。如詳細所示,PPU 202(0)包括一處理叢集陣列230,其包括數目為C 的通用處理叢集(GPC,“General processing clusters”)208,其中C 1。每一GPC 208能夠同時執行大量(例如數百或數千)的執行緒,其中每個執行緒為一程式的一實例。在多種應用中,不同的GPC 208可分配來處理不同種類的程式,或執行不同種類的運算。GPC 208的分配可根據每種程式或運算所提升的工作負荷而改變。
GPC 208由一任務/工作單元207內的一工作分配單元接收要被執行的處理任務。該工作分配單元接收指向至被編碼成任務中介資料(TMD)且儲存在記憶體中的處理任務的指標。該等指向至TMD的指標被包括在儲存成一推入緩衝器且由前端單元212自主控介面206接收的該命令串流中。可被編碼成TMD的處理任務包括要被處理之資料的索引,以及定義了該資料要如何被處理的狀態參數和命令(例如那一個程式要被執行)。任務/工作單元207自前端212接收任務,並確保GPC 208在由該等TMD之每一者所指定的該處理啟始之前被設置成一有效狀態。一優先性可針對用於排程該處理任務之執行的每一TMD來指定。處理任務亦可自處理叢集陣列230接收。視需要,該TMD可包括一參數,其控制該TMD是否要被加入一處理任務清單(或指向至該等處理任務的指標清單)的頭端或 尾端,藉此提供在優先性之上的另一控制層級。
記憶體介面214包括數目為D 的區隔單元215,其每一者被直接耦合至平行處理記憶體204的一部份,其中D 1。如所示,區隔單元215的該數目大致上等於動態隨機存取記憶體(DRAM)220的數目。在其它具體實施例中,區隔單元215的數目可能不等於記憶體裝置的數目。本技術專業人士將可瞭解到DRAM 220可由其它適當儲存裝置取代,並可為一般的習用設計。因此可省略詳細說明。顯像目標,例如圖框緩衝器或紋路地圖,其可儲存在不同DRAM 220中,其允許區隔單元215平行地寫入每個顯像目標之不同部份而有效率地使用平行處理記憶體204之可使用頻寬。
GPC 208之任何一者可處理要被寫入到平行處理記憶體204內DRAM 220中任一者的資料。交叉開關單元210設置成導引每個GPC 208之輸出到任何區隔單元215的輸入或到另一個GPC 208做進一步處理。GPC 208經由交叉開關單元210與記憶體介面214進行通訊,以自多個外部記憶體裝置讀取或寫入其中。在一具體實施例中,交叉開關單元210具有到記憶體介面214的一連接來與I/O單元205進行通訊,以及到局部平行處理記憶體204的一連接,藉此使得不同GPC 208內該等處理核心能夠與系統記憶體104或並非位在PPU 202局部之其它記憶體進行通訊。在第二圖所示的該具體實施例中,交叉開關單元210直接連接於I/O單元205。交叉開關單元210可使用虛擬通道來隔開GPC 208與區隔單元215之間的流量串流。
再次地,GPC 208可被程式化來執行關於許多種應用之處理工作,其中包括但不限於線性及非線性資料轉換、影片及/或聲音資料的過濾、模型化作業(例如應用物理定律來決定物體的位置、速度及其它屬性)、影像顯像作業(例如鑲嵌遮影器、頂點遮影器、幾何遮影器及/或像素遮影器程式)等等。PPU 202可將來自系統記憶體104及/或局部平行處理記憶體204的資料轉移到內部(晶片上)記憶體、處理該資料、及將結果資料寫回到系統記憶體104及/或局部平行處理記憶體204,其中這些資料可由其它系統組件存取,包括CPU 102或另一個平行處理子系統112。
一PPU 202可具有任何數量的局部平行處理記憶體204,並不包括局部記憶體,並可用任何的組合來使用局部記憶體及系統記憶體。例如,一PPU 202可為在一統一記憶體架構(UMA,“Unified memory architecture”)具體實施例中的一圖形處理器。在這些具體實施例中,將可提供少數或沒有專屬的圖形(平行處理)記憶體,且PPU 202將專有地或大致專有地使用系統記憶體。在UMA具體實施例中,一PPU 202可被整合到一橋接器晶片中或處理器晶片中,或提供成具有一高速鏈路(例如PCI-EXPRESS)之一分離的晶片,其經由一橋接器晶片或其它通訊手段連接PPU 202到系統記憶體。
如上所述,任何數目的PPU 202可以包括在一平行處理子系統112中。例如,多個PPU 202可提供在一單一嵌入卡上,或多個嵌入卡可被連接至通訊路徑113,或一或多個PPU 202可被整合到一橋接器晶片中。在一多PPU系統中PPU 202可彼此相同或彼此不相同。例如,不同的PPU 202可具有不同數目的處理核心、不同數量的局部平行處理記憶體等等。當存在有多個PPU 202時,那些PPU可平行地作業而以高於一單一PPU 202所可能的流量來處理資料。加入有一或多個PPU 202之系統可實作成多種組態及型式因子,其中包括桌上型、膝上型、或掌上型個人電腦、伺服器、工作站、遊戲主機、嵌入式系統及類似者。
多並行任務排程
多個處理任務可在GPC 208上並行地執行,且一處理任務於執行期間可以產生一或多個「子」(child)處理任務。任務 /工作單元207接收該等任務,並動態地排程該等處理任務和子處理任務來由GPC 208執行。
第三A圖係根據本發明一具體實施例中第二圖之任務/工作單元207的方塊圖。任務/工作單元207包括一任務管理單元300和工作分配單元340。任務管理單元300基於執行優先性程度組織要被排程的任務。針對每一優先性程度,任務管理單元300儲存一指標清單至對應於在排程器表321中該等任務的該等TMD 322,其中該清單可利用一鏈接串列來實作。TMD 322可被儲存在PP記憶體204或系統記憶體104中。任務管理單元300接受任務並儲存該等任務在排程器表321中的速率與任務管理單元300排程任務來執行的速率相脫離。因此,任務管理單元300可在排程該等任務之前收集數個任務。然後該等經收集的任務可基於優先性資訊或使用其它技術進行排成,例如循環式排程。
工作分配單元340包括一任務表345,其具有位置,而每一位置可由將要被執行的一任務之TMD 322佔用。任務管理單元300在當任務表345中有空的位置時即可排程任務來執行。當沒有空位置時,不會佔用一位置的一較高優先性的任務可以逐出佔用一空位的一較低優先性的任務。當一任務被逐出時,該任務即停止,且如果該任務的執行尚未完成,則指向至該任務的一指標被加入到要被排程的一任務指標清單,所以該任務的執行將在稍後恢復。當於一任務執行期間產生一子處理任務時,指向至該子任務的一指標被加入到要被排程的該任務指標清單。一子任務可由在處理叢集陣列230中執行的一TMD 322來產生。
不像是任務/工作單元207自前端212接收的一任務,子任務係自處理叢集陣列230接收。子任務不會被插入到推入緩衝器中或被傳送至該前端。當產生一子任務或該子任務的資料被儲存在記憶體中時,不會通知CPU 102。經由推入緩衝器提 供的該等任務和子任務之間另一個差別在於經由該等推入緩衝器提供的該等任務由該應用程式定義,然而該等子任務係於該等任務的執行期間被動態地產生。
任務處理概述
第三B圖為根據本發明一具體實施例中第二圖之該等PPU 202中之一者內一GPC 208的方塊圖。每個GPC 208可構形成平行地執行大量的執行緒,其中術語「執行緒」(thread)代表在一特定組合的輸入資料上執行的一特定程式之實例。在一些具體實施例中,使用單一指令、多重資料(SIMD,“Single-instruction,multiple-data”)指令發行技術來支援大量執行緒之平行執行,而不需要提供多個獨立指令單元。在其它具體實施例中,單一指令多重執行緒(SIMT,“Single-instruction,multiple-thread”)技術係用來支援大量概略同步化執行緒的平行執行,其使用一共用指令單元設置成發出指令到GPU 208之每一者內一組處理引擎。不像是一SIMD執行方式,其中所有處理引擎基本上執行相同的指令,SIMT的執行係允許不同的執行緒經由一給定執行緒程式而更可立即地遵循相異的執行路徑。本技術專業人士將可瞭解到一SIMD處理規範代表一SIMT處理規範的一功能子集合。
GPC 208的作業較佳地是經由一管線管理員305控制,其可分配處理任務至串流多處理器(SM,“Streaming multiprocessor”)310。管線管理員305亦可設置成藉由指定SM 310輸出之已處理資料的目的地來控制一工作分配交叉開關330。
在一具體實施例中,每個GPC 208包括M個數目的SM 310,其中M1,每個SM 310設置成處理一或多個執行緒群組。同時,每個SM 310較佳地是包括可被管線化的相同組合的功能性執行單元(例如執行單元和載入儲存單元,如第三C圖中所示的執行單元302和LSU 303),允許在一先前指令已 經完成之前發出一新指令,其為本技術中已知。並可提供任何功能性執行單元的組合。在一具體實施例中,該等功能單元支援多種運算,其中包括整數及浮點數算術(例如加法及乘法),比較運算,布林運算(AND,OR,XOR)、位元偏位,及多種代數函數的運算(例如平面內插、三角函數、指數、及對數函數等);及相同的功能單元硬體可被利用來執行不同的運算。
傳送到一特定GPC 208之該等系列的指令構成一執行緒,如先前此處所定義者,橫跨一SM 310內該等平行處理引擎(未示出)並行地執行某個數目之執行緒的集合在此稱之為「包繞」(warp)或「執行緒群組」(thread group)。如此處所使用者,一「執行緒群組」代表同步地對於不同輸入資料執行相同程式的一執行緒的群組,該群組的每一執行緒被指定給一SM 310內的一不同處理引擎。一執行緒群組可包括比SM 310內處理引擎的數目要少的執行緒,其中當該執行緒群組正在被處理的循環期間一些處理引擎將為閒置。一執行緒群組亦可包括比SM 310內處理引擎之數目要更多的執行緒,其中處理將發生在連續的時脈循環之上。因為每個SM 310可並行地支援最多到G個執行緒群組,因此在任何給定時間在GPC 208中最高可執行G*M個執行緒群組。
此外,在相同時間於一SM 310內可以啟動複數相關的執行緒群組(在不同的執行階段)。此執行緒群組的集合在此處稱之為「協同執行緒陣列」(CTA,“Cooperative thread array”)或「執行緒陣列」(thread array)。一特定CTA之大小等於m*k,其中k為在一執行緒群組中並行地執行的執行緒之數目,其基本上為SM 310內平行處理引擎數目之整數倍數,而m為在SM 310內同時啟動的執行緒群組之數目。一CTA的大小概略由程式師及該CTA可使用之硬體資源(例如記憶體或暫存器)的數量所決定。
每一SM 310包含一階(L1)快取(如第三C圖所示),或使 用在SM 310外部一相對應L1快取中用於執行載入與儲存作業的空間。每個SM 310亦可存取到所有GPC 208之間共用的二階(L2)快取,並可用於在執行緒之間傳送資料。最後,SM 310亦可存取到晶片外的「通用」記憶體,其可包括例如平行處理記憶體204及/或系統記憶體104。應瞭解到在PPU 202外部的任何記憶體皆可做為通用記憶體。此外,一1.5階(L1.5)快取335可包括在GPC 208之內,設置成由SM 310要求經由記憶體介面214接收及保持自記憶體提取的資料,其中包括指令、一致性資料與常數資料,並提供該要求的資料至SM 310。在GPC 208中具有多個SM 310的具體實施例較佳地是共用被快取在L1.5快取335中的共通指令和資料。
每一GPC 208可包括一記憶體管理單元(MMU,“Memory management unit”)328,其設置成將虛擬位址映射到實體位置。在其它具體實施例中,MMU 328可存在於記憶體介面214內。MMU 328包括一組頁表項(PTE,“Page table entries”),用於將一虛擬位置映射到一瓷磚的一實體位址,或是一快取線索引。MMU 328可以包括位址轉譯旁看緩衝器(TLB,“Translation lookaside buffer”)或可以存在於多處理器SM 310或L1快取或GPC 208內的快取。該實體位址被處理成分佈表面資料存取局部性,以允許在區隔單元215之間有效率的要求交叉。該快取線索引可用於決定一快取線的一要求為一命中或錯失。
在圖形和運算應用中,一GPC 208可設置成使得每個SM 310耦合於一紋路單元315,用於執行紋路映射作業,例如決定紋路樣本位置、讀取紋路資料及過濾該紋路資料。紋路資料自一內部紋路L1快取(未示出)讀取,或是在一些具體實施例中自SM 310內的L1快取讀取,且視需要自所有GPC 208、平行處理記憶體204或系統記憶體104所共用的一L2快取來擷取。每一SM 310輸出已處理的任務至工作分配交叉開關330,藉以提供該已處理的任務至另一GPC 208進行進一步處 理,或是將該已處理的任務經由交叉開開單元210儲存在一L2快取、平行處理記憶體204或系統記憶體104中。一preROP(預先掃描場化作業)325設置成自SM 310接收資料、導引資料到隔間單元215內的ROP單元、並進行色彩混合的最佳化、組織像素色彩資料、並執行位址轉譯。
將可瞭解到此處所示的核心架構僅為例示性,其有可能有多種變化及修正。在一GPC 208內可包括任何數目的處理單元,例如SM 310或紋路單元315、preROP 325。再者,如第二圖所示,一PPU 202可以包括任何數目的GPC 208,其較佳地是在功能上彼此類似,所以執行行為並不會根據是那一個GPC 208接收一特定處理任務而決定。再者,每個GPC 208較佳地是與其它使用分開且不同的處理單元、L1快取的GPC 208獨立地運作,以針對一或多個應用程式來執行任務。
本技術專業人士將可瞭解到在第一、二、三A和三B圖中所述之該架構並未以任何方式限制本發明之範圍,而此處所教示的技術可以實作在任何適當設置的處理單元上,其包括但不限於一或多個CPU、一或多個多核心CPU、一或多個PPU 202、一或多個GPC 208、一或多個圖形或特殊目的處理單元或類似者,其皆不背離本發明之範圍。
在本發明之具體實施例中,需要使用PPU 202或一運算系統的其它處理器來使用執行緒陣列執行一般性運算。在該執行緒陣列中每一執行緒被指定一唯一執行緒識別(thread ID),其可在該執行緒的執行期間由該執行緒存取。可被定義成一維或多維度數值的執行緒ID控制該執行緒的處理行為之多種態樣。例如,一執行緒ID可用於決定一執行緒要做處理的是該輸入資料集的那一部份,及/或決定一執行緒要產生或寫入的是在一輸出資料集的那一部份。
每個執行緒指令的一序列可以包括至少一指令來定義該代表性執行緒和該執行緒陣列的一或多個其它執行緒之間的 一協同行為。例如,每個執行緒的該指令序列可以包括一指令來在該序列中一特定點處中止該代表性執行緒之作業的執行,直到當該等其它執行緒中一或多者到達該特定點為止,該代表性執行緒的一指令係儲存資料在該等其它執行緒中一或多者可存取的一共用記憶體中,該代表性執行緒的一指令係基於它們的執行緒ID原子性地讀取和更新儲存在該等其它執行緒中一或多者可存取的一共用記憶體中的資料,或類似者。該CTA程式亦可包括一指令來運算資料在該共用記憶體中要被讀取的一位址,利用該位址為執行緒ID的函數。藉由定義適當的函數和提供同步化技術,資料可藉由一CTA的一執行緒被寫入到共用記憶體中一給定的位置,並以一可預測的方式由該相同CTA的一不同執行緒自該位置讀取。因此,即可支援可在執行緒當中共用任何需要的資料型式,且在一CTA中任何執行緒能夠與該相同CTA中任何其它執行緒共用資料。如果有的話,在一CTA的執行緒當中資料共用的程度係由該CTA程式決定;因此,應瞭解到在使用CTA的一特定應用中,根據該CTA程式,一CTA的該等執行緒可以或不需要實際地彼此共用資料,該等術語"CTA”和「執行緒陣列」在此處為同義地使用。
第三C圖為根據本發明一具體實施例中第三B圖的SM 310的方塊圖。SM 310包括一指令L1快取370,其設置成經由L1.5快取335自記憶體接收指令和常數。一包繞排程器和指令單元312自指令L1快取370接收指令和常數,並根據該等指令和常數控制局部暫存器檔案304和SM 310功能性單元。SM 310功能性單元包括N個執行(執行或處理)單元302和P個載入儲存單元(LSU)303。
SM 310提供具有不同程度存取性的晶片上(內部)資料儲存。特殊暫存器(未示出)可由LSU 303讀取但不能寫入,並用於儲存定義每一執行緒的「位置」之參數。在一具體實施例中, 特殊暫存器包括每一執行緒(或SM 310內每一執行單元302)的一暫存器,用於儲存一執行緒ID;每一執行緒ID暫存器僅可由執行單元302的個別單元存取。特殊暫存器亦可包括額外的暫存器、其可由執行由儲存一CTA識別的一TMD 322(或由所有LSU 303)所代表的相同處理任務的所有執行緒來讀取、該等CTA維度、該CTA所屬的一格柵的該等維度(或如果TMD 322編碼一佇列任務而非一格柵任務時的佇列位置),以及該CTA被指定到的TMD 322之一識別。
如果TMD 322為一格柵TMD,TMD 322的執行造成固定數目的CTA被啟動及執行,以處理儲存在佇列525中固定數量的資料。CTA的數目係界定成是格柵的寬、高與深的乘積。該固定數量的資料可以儲存在TMD 322中,或者TMD 322可以儲存指向至將由該等CTA處理的資料之一指標。TMD 322亦儲存由該等CTA執行的該程式之一開始位址。
如果TMD 322為一佇列TMD,則使用TMD 322的一佇列特徵,代表要被處理的資料量並不一定是固定的。佇列項目儲存資料來由指定給TMD 322的該等CTA做處理。該等佇列項目亦可代表於一執行緒的執行期間由另一TMD 322產生的一子任務,藉此提供巢化的平行度。基本上,該執行緒或包括該執行緒的CTA之執行被中止,直到該子任務的執行完成為止。該佇列可儲存在TMD 322中或隔離於TMD 322,其中TMD 322儲存指向至該佇列的一佇列指標。較佳地是,當代表該子任務的TMD 322正在執行時,由該子任務產生的資料可被寫入到該佇列。該佇列可實作成一圓形佇列,所以資料的總量並不限於該佇列的大小。
屬於一網格的CTA具有隱式格柵寬度、高度和深度參數以指明該網格內個別CTA的位置。特殊暫存器回應於經由前端212自裝置驅動器103接收的該等命令而被寫入,且於一處理任務的執行期間不會改變。前端212排程每一處理任務來執 行。每一CTA關聯於一特定TMD 322來用於一或多個任務的並行執行。此外,一單一GPC 208可以並行地執行多個任務。
一參數記憶體(未示出)儲存運行時間參數(常數),其可被相同CTA(或任何LSU 303)內任何執行緒讀取但無法寫入。在一具體實施例中,裝置驅動器103在導引SM 310開始使用這些參數的一項任務之執行之前提供參數至該參數記憶體。任何CTA(或SM 310內任何執行單元302)內的任何執行緒能夠經由一記憶體介面214存取共通記憶體。共通記憶體的一些部份可被儲存在L1快取320中。
局部暫存器檔案304由每一執行緒使用做為暫存空間;每一暫存器被分配做為一執行緒的專屬使用,而在任何局部暫存器檔案304中的資料僅可由該暫存器被分配到的該執行緒來存取。局部暫存器檔案304可實作成被實體或邏輯性地區分成P條線路的一暫存器檔案,其每一者具有某個數目的項目(其中每個項目可以儲存例如32位元的字元)。一條線路被指定給N個執行單元302和P個載入儲存單元LSU 303的每一者,且在不同線路中的相對應的項目可存在有執行相同程式的不同執行緒之資料來實施SIMD執行。該等線路的不同部份可被分配給該等G個並行執行緒群組之不同的執行緒群組,所以在局部暫存器檔案304中一給定項目僅可由一特定執行緒存取。在一具體實施例中,局部暫存器檔案304內某些項目被保留來儲存執行緒識別及實作該等特殊暫存器之一。此外,一一致性L1快取375儲存N個執行單元302和P個載入儲存單元LSU 303之每一線路的一致性或常數值。
共用的記憶體306可由一單一CTA內的執行緒存取;換言之,在共用記憶體306中任何位置可由該相同CTA內任何執行緒存取(或可由SM 310內任何處理引擎存取)。共用的記憶體306可實作成利用一互連接的一共用暫存器檔案或共用的晶片上快取記憶體,其可允許任何處理引擎可讀取或寫入到 該共用記憶體中任何位置。在其它具體實施例中,共用的狀態空間可映射到晶片外記憶體的一每一CTA的區域之上,且被快取在L1快取320中。該參數記憶體可被實作成該相同共用的暫存器檔案或實作共用記憶體306的共用快取記憶體內一指定的區段,或是實作成一獨立的共用暫存器檔案或LSU 303具有唯讀性存取的晶片上快取記憶體。在一具體實施例中,實作該參數記憶體的該區域亦用於儲存該CTA ID與任務ID,以及CTA與網格維度或佇列位置,實作該等特殊暫存器的某些部份。在SM 310中每一LSU 303耦合至一統一位址映射單元352,其轉換提供用於載入與儲存在一統一記憶體空間中指定的指令之一位址成為在每一不同記憶體空間中的一位址。因此,一指令可用於藉由指定在該統一記憶體空間中一位址來存取該等局部、共用、或共通記憶體空間之任一者。
在每一SM 310中的L1快取320可用於快取私密的每一執行緒之局部資料,以及每一應用程式的共通資料。在一些具體實施例中,該由每一CTA共用的資料可被快取在L1快取320中。LSU 303經由一記憶體和快取互連接380耦合至共用記憶體306和L1快取320。
運算元快取
第四圖為根據本發明另一具體實施例中第三B圖的SM 310的方塊圖。雖然未明確示出,第四圖的SM 310除了明確示於第四圖中該等組件之外可包含第三C圖之SM 310的部份或所有該等組件,如上所述。如第四圖所示,SM 310包括包繞排程器和指令單元312、局部暫存器檔案304、和一或多個功能性執行單元,例如執行單元302或LSU 303。包繞排程器和指令單元312包括一解碼單元450和一分派單元470。解碼單元450接收要被分派到執行單元302的下一個指令。解碼單元450執行該指令的一完整解碼,並傳送該經解碼的指令至分派單元470。例如,解碼單元450將決定由該指令中該作業碼 所指定的該特定型式的指令,被指定為該指令之運算元的該等特定暫存器索引,以及用於儲存一指令的結果之一暫存器索引。在一些具體實施例中,指令可被兩次或四次發出,且解碼單元450可針對每一經發出的指令實作個別的解碼邏輯。分派單元470實作一FIFO,並寫入該等經解碼的數值到局部暫存器檔案304來執行。在同時發出多個指令的具體實施例中,分派單元470可以發出每一指令到SM 310的該等功能性單元的一不同部份。
在一具體實施例中,局部暫存器檔案304包括四個暫存器記憶庫(bank_0 422、bank_1 424、bank_2 426和bank_3 428)。在大多數習用的處理單元中,該局部暫存器檔案可以相當小。例如,該x86 CPU架構包括每一處理器核心有8個(32位元)或16個(64位元)的暫存器。相反地,局部暫存器檔案304的每一記憶庫可包括大量的暫存器,例如256個暫存器或更多,其可做為執行單元302的輸入。交叉開關420設置成連接該等暫存器記憶庫之每一者中該等多個暫存器至一執行單元302中的一運算元收集器440。執行單元302實作一資料路徑用於執行一作業。該資料路徑包括運算元收集器440、算術邏輯單元(ALU,“Arighmetic logic unit”)452、和一結果FIFO 454。運算元收集器440包括一些儲存元件441-446,其皆可耦合至ALU 452的該等輸入。每一儲存元件441-446可為一正反器、閂鎖、或任何技術上可行而能夠暫時地儲存一數值來供應做為一輸入到ALU 452的電路組件。該等儲存元件的該等輸出可被硬接線至包含ALU 452的該等電路元件,例如一加法器電路或一浮點乘法器電路。如所示,運算元收集器440包括六個儲存元件441-446。在其它具體實施例中,任何數目的儲存元件441-446皆可實作在執行單元302中。
在以往的包括相對較小之暫存器檔案的處理器設計中,一交叉開關或其它互連接可設置成於一單一時脈循環期間耦合 在一局部暫存器檔案中任何暫存器至該等資料路徑輸入中任何一者。再者,在習用的處理器中,一些暫存器,其數目等於該資料路徑之輸入的數目,皆可在一單一時脈循環中同時地連接至該等資料路徑輸入中任何一者。將可瞭解到局部暫存器檔案304的大小增加超過八個或十六個暫存器時會增加交叉開關420的複雜度。因此,在一些具體實施例中,於每一時脈循環期間交叉開關420僅可耦合來自每一暫存器記憶庫(例如422、424、426和428)的一單一暫存器至一特定儲存元件441-446。
上述的處理器架構(其中交叉開關420於一時脈循環期間僅耦合每個暫存器記憶庫的一單一暫存器至運算元收集器440)降低了交叉開關420的大小和複雜度,但該處理器架構亦針對經由執行單元302執行指令造成多種限制。例如,於每一時脈循環期間局部暫存器檔案304和運算元收集器440之間的頻寬等於在局部暫存器檔案304中暫存器記憶庫的數目。如所示,局部暫存器檔案304包括四個暫存器記憶庫,藉此可允許於一單一時脈循環期間最多可有四個運算元被寫入到運算元收集器440中。但是,因為運算元收集器440包括六個儲存元件441-446用於在每一指令期間提供輸入至ALU 452,該等運算元會需要在兩個連續時脈循環中被載入(在該第一時脈循環中四個運算元和在該第二時脈循環中兩個運算元)。此外,必須小心地藉由儲存相同指令所需要的運算元數值在不同的暫存器記憶庫422、424、426和428中來避免暫存器記憶庫衝突。例如,如果所有六個運算元皆儲存在bank_0 422中,則需要六個時脈循環來載入該等運算元到運算元收集器440中。在一具體實施例中,分派單元470包括有設置成確保每一指令的運算元被儲存在不同的暫存器記憶庫422、424、426和428中來避免記憶庫衝突的邏輯。在另一具體實施例中,驅動器103可包括實作有指令來使得驅動器103於該等平行處理器指令的 編譯期間在它們被傳送到PPU 202之前來檢查和避免記憶庫衝突。但是,即使實作有這種技術,某些記憶庫衝突仍無法輕易地被解決。
在一具體實施例中,運算元收集器440可使得關聯於多個指令的運算元同時快取在運算元收集器440之內。如所示,運算元收集器440包括對應於ALU 452之每一輸入的一或多個儲存元件(441(0)-441(R-1);442(0)-442(R-1)等)。分派單元470可包括有邏輯來控制針對每一指令有那些儲存器元件441(i)-446(i)的組合要連接至ALU 452。例如,如表1所示,在ALU 302上執行的一程式可以包括由驅動器103所產生並傳送至PPU 202的一組指令。一第一指令可為一併合的乘法-加法(FMA,“Fused multiply-add”)指令,其中包括三個運算元(R13、R11、R14)和一輸出(R1)。一第二指令可為一加法(ADD)指令,其中包括三個運算元(R6、R7、R8)和一輸出(R2)。一第三指令可為一乘法(MUL)指令,其中包括三個運算元(R6、R11和R13)。指明為X的運算元並未針對該給定的指令做為ALU 452的輸入,且對於本發明之目的而言可被忽略。
運算元收集器440可以在下一個指令期間重新使用來自該前一指令的一運算元。例如,在上述的該第二指令期間,儲存在局部暫存器檔案304中暫存器6、暫存器7和暫存器8中該等運算元數值被分別地載入到儲存元件441、442和443當中。在上述的該第三指令期間,在儲存元件441中的該數值可以重新使用,且僅有儲存在局部暫存器檔案304中暫存器11 和暫存器13的該等運算元數值被載入到運算元收集器440中。換言之,儲存元件441-446並不需要於每一指令期間被重新載入。分派單元470可以包括有邏輯來儲存目前被載入到運算元收集器440當中每一暫存器的該等索引。包括在分派單元470中的該邏輯可被實作成一查找表(即一快取表),其中包括對應於每一儲存元件441-446的一位置。每一位置可以儲存一數值來指明關聯於儲存在相對應的儲存元件441-446中該數值的該暫存器索引。當解碼單元450決定那些暫存器(即暫存器索引)要做為該下一指令的運算元時,分派單元470將檢查來決定對應於該暫存器索引的該暫存器數值是否由於一先前指令的排程而目前儲存在相同的儲存元件441-446中。較佳地是,如果相同的儲存元件441-446儲存該暫存器數值,於該相同指令循環期間來自相同暫存器記憶庫的另一暫存器數值可被載入到一不同的儲存元件441-446中。
在另一具體實施例中,運算元收集器440針對ALU 452的一給定資料路徑輸入可以儲存多組的暫存器數值(即分別儲存在儲存元件441-446中的運算元1-6)。在這些具體實施例中,運算元收集器440可包括針對ALU 452的每一資料路徑輸入之一組R個儲存元件441(0)、441(1)、...、441(R-1)。因此,來自先前R個指令的該等運算元可被快取在運算元收集器440中,並在後續指令中重新使用,以降低將運算元由局部暫存器檔案304的運算元載入到運算元收集器440中所需要的頻寬。例如,如果R等於2,則在上表1中所提出的該第一指令期間,暫存器13被載入到儲存元件441(0)中、暫存器11被載入到儲存元件442(0)中、和暫存器14被載入到儲存元件443(0)中。然後於該第二指令期間,暫存器6被載入到儲存元件441(1)中、暫存器7被載入到儲存元件442(1)中、和暫存器8被載入到儲存元件443(1)中。在該第三指令期間,該第一運算元數值(暫存器6)係儲存在儲存元件441(1)中,而該第二運 算元數值(暫存器11)係儲存在儲存元件442(0)中。
在一些具體實施例中,於一給定指令期間所載入的儲存元件441(i)-446(i)一給定子集合必須被並行地選擇來使用於該後續指令。換言之,於上述的該第三指令期間,分派單元能夠重新使用於該第一指令期間所載入的該等儲存元件441(0)-446(0),或是於該第二指令期間所載入的該等儲存元件441(1)-446(1),但非於該第二指令期間所載入的該第一儲存元件441(1)(即儲存該數值在暫存器6中)及於該第一指令期間所載入的該第二儲存元件442(0)(即儲存該數值在暫存器11中)。在其它具體實施例中,分派單元470可以包括有邏輯來用於在每一個別的儲存元件441-446之間選擇,並使得於不同指令期間儲存在不同的儲存元件441(i)-446(i)的組合中的暫存器數值可在一後續指令中重新使用。
將可瞭解到快取同調性可被監視來確保在儲存元件441-446中該等數值係等於局部暫存器檔案304中該等相對應暫存器中該等數值。在一具體實施例中,在該快取表中該等位置儲存一索引值,其可指定對應於儲存在相關聯的儲存元件441-446中該數值的該暫存器。每當一新數值被寫入到局部暫存器檔案304中一暫存器時,該快取表被搜尋來決定對應於該暫存器的一索引是否目前儲存在運算元收集器440中。如果運算元收集器440包括對應於該暫存器的一項目,則該快取表被更新,以將該索引自該位置移除(即在該快取表該位置中的該數值被設定為零來使運算元收集器440中該資料成為無效)。因此,如果該暫存器在稍後被指定為在一後續指令中的一運算元,分派單元470將由局部暫存器檔案304重新載入該數值到運算元收集器440中,以確保不會提供無效的數值到ALU 452。
第五圖例示根據本發明一示例性具體實施例中第四圖的運算元收集器440。如第五圖所示,運算元收集器440包括第 四圖的儲存元件441-446。如上所述,儲存元件441-446實作一快取用於儲存耦合至ALU 452的該等資料路徑輸入的暫存器數值。交叉開關420由分派單元470設置成將局部暫存器檔案304中多個暫存器耦合至儲存元件441-446。運算元收集器440亦包括複數個多工器511-516。多工器511具有耦合至一第一儲存元件441(0)的一第一輸入,及耦合至一第二儲存元件441(1)的一第二輸入。多工器511亦具有耦合至ALU 452的一第一資料路徑輸入的一輸出,其可提供一第一運算元數值到ALU 452的該邏輯。多工器512具有耦合至一第一儲存元件442(0)的一第一輸入,及耦合至一第二儲存元件442(1)的一第二輸入。多工器512亦具有耦合至ALU 452的一第二資料路徑輸入的一輸出,其可提供一第二運算元數值至ALU 452的邏輯。多工器513、514、515和516具有與前述那些分別相對於ALU 452的第三、第四、第五和第六資料路徑輸入的多工器511和512之類似連接。
分派單元470設置多工器511、512、513、514、515和516來在該等不同的儲存元件441(i)-446(i)之組合之間做選擇。如第五圖所示,耦合至多工器511-516的該控制信號可以耦合至該等多工器之每一者來選擇對應於相同之先前被載入的指令的所有該等儲存元件441(i)-446(i)。在其它具體實施例中,分派單元470可以供應一不同的控制信號至該等多工器511-516之每一者,以允許對應於不同指令的儲存元件441(i)-446(i)來耦合至ALU 452的該等資料路徑輸入。
在其它具體實施例中,運算元收集器440可包括不同的互連接邏輯,其使得該等儲存元件441-446中任何一者可連接至ALU 452的該等資料路徑輸入中任何一者。例如,一或多個交叉開關可實作在運算元收集器440內而非在多工器511-516內。例如,該等一或多個交叉開關可使得儲存元件442(1)連接於ALU 452的該第四資料路徑輸入,而儲存元件443(0)連接 於ALU 452的該第一資料路徑輸入。換言之,如果一運算元先前被載入到運算元快取440的任何儲存元件當中,該運算元將造成一運算元快取440命中。因此,參照到上表1中所提供的該等指令,因為於該等兩個先前指令期間由該第三指令所指定的該等三個運算元為先前被載入到運算元快取440之該等儲存元件中至少一元件當中,由該第三指令所指定的所有三個運算元皆可被重新使用,
第六圖例示根據本發明一示例性具體實施例中一種用於在實作有來源運算元收集器快取的一處理器核心上執行指令的方法600之流程圖。雖然該等方法步驟係配合第一、二、三A到三C、四和五圖之該等系統做說明,本技術專業人士將可瞭解到設置成以任何順序執行該等方法步驟的任何系統皆在本發明之範圍內。
方法600開始於步驟610,其中SM 310解碼一指令來決定由該指令所指定的複數運算元。每一運算元可被可指定成為對應於局部暫存器檔案304內一暫存器的一索引。在步驟612,SM 310決定該等運算元之一或多者是否被快取在運算元收集器440中。SM 310可以維持一快取表,其中儲存對應於儲存在運算元收集器440中該等暫存器的索引。分派單元470可以檢查對應於由該指令所指定的該等運算元之該等經解碼的暫存器索引與儲存在該快取表中的該等索引。
在步驟614,針對未儲存在運算元收集器440中的每一運算元,SM 310設置交叉開關420來將局部暫存器檔案304中該等經指定的暫存器耦合於運算元收集器440中的儲存元件441-446。在步驟616,SM 310更新該快取表來反映對應於儲存在運算元收集器440中暫存器數值的該等暫存器索引。在步驟618,SM 310設置ALU 452來使用儲存在運算元收集器440中該等運算元做為ALU 452的輸入來執行該指令。在步驟620,SM 310決定是否有額外的指令被排程來在ALU 452上 執行。如果有額外的指令被排程來執行,則方法600回到步驟610,其中係解碼該下一指令。但是,如果不再有指令被排程來執行,則方法600終止。
本發明一具體實施例可以實作成由一電腦系統使用的一程式產品。該程式產品的程式定義該等具體實施例的功能(包括此處所述的方法),並可包含在多種電腦可讀取儲存媒體上。例示性的電腦可讀取儲存媒體包括但不限於:(i)不可寫入儲存媒體(例如在一電腦內唯讀記憶體裝置,例如可由CD-ROM讀取的光碟唯讀記憶體(CD-ROM)碟片,快閃記憶體,ROM晶片,或任何其它種類的固態非揮發性半導體記憶體),其上可永久儲存資訊;及(ii)可寫入儲存媒體(例如在一磁碟機內的軟碟片、或硬碟機、或任何種類的固態隨機存取半導體記憶體),其上可儲存可改變的資訊。
本發明已經參照特定具體實施例在以上進行說明。但是本技術專業人士將可瞭解到在不背離附屬申請專利範圍所提出之本發明的廣義精神與範圍之下可對其進行多種修正與改變。因此前述的說明及圖面係在以例示性而非限制性的角度來看待。
100‧‧‧電腦系統
102‧‧‧中央處理單元
103‧‧‧裝置驅動器
104‧‧‧系統記憶體
105‧‧‧記憶體橋接器
106‧‧‧通訊路徑
107‧‧‧輸入/輸出橋接器
108‧‧‧輸入裝置
110‧‧‧顯示器
112‧‧‧平行處理子系統
113‧‧‧通訊路徑
114‧‧‧系統碟
116‧‧‧交換器
118‧‧‧網路轉接器
120,121‧‧‧嵌入卡
202‧‧‧平行處理單元
204‧‧‧平行處理記憶體
205‧‧‧輸入/輸出單元
206‧‧‧主控介面
207‧‧‧任務/工作單元
208‧‧‧通用處理叢集
210‧‧‧交叉開關單元
212‧‧‧前端
214‧‧‧記憶體介面
215‧‧‧區隔單元
220‧‧‧動態隨機存取記憶體
230‧‧‧處理叢集陣列
300‧‧‧任務管理單元
302‧‧‧執行單元
303‧‧‧載入儲存單元
304‧‧‧局部暫存器檔案
305‧‧‧管線管理員
306‧‧‧共用記憶體
310‧‧‧串流多處理器
312‧‧‧包繞排程器和指令單元
315‧‧‧紋路單元
320‧‧‧L1快取
321‧‧‧排程器表
322‧‧‧任務中介資料
325‧‧‧預先掃描場化作業
328‧‧‧記憶體管理單元
330‧‧‧工作分配交叉開關
335‧‧‧L1.5快取
340‧‧‧工作分配單元
345‧‧‧任務表
352‧‧‧統一位址映射單元
370‧‧‧指令L1快取
380‧‧‧記憶體和快取互連接
420‧‧‧交叉開關
422-428‧‧‧記憶庫
440‧‧‧運算元收集器
441-446‧‧‧儲存元件
450‧‧‧解碼單元
452‧‧‧算術邏輯單元
454‧‧‧結果先進先出
470‧‧‧分派單元
511-516‧‧‧多工器
所以,可以詳細瞭解本發明上述特徵之方式中,一更為特定的說明簡述如上,其可藉由參照到具體實施例來進行,其中一些例示於所附圖面中。但是其可注意到,所附圖面僅例示本發明的典型具體實施例,因此其並非要做為本發明之範圍的限制,其可允許其它同等有效的具體實施例。
第一圖為例示設置成實作本發明一或多種態樣之電腦系統的方塊圖;第二圖為根據本發明一具體實施例中第一圖之電腦系統的一平行處理子系統之方塊圖; 第三A圖為根據本發明一具體實施例中第二圖的該前端的方塊圖;第三B圖為根據本發明一具體實施例中第二圖之該等平行處理單元中之一者內一通用處理叢集的方塊圖;第三C圖為根據本發明一具體實施例中第三B圖的該串流多處理器之一部份的方塊圖;第四圖為根據本發明另一具體實施例中第三B圖的該串流多處理器之一部份的方塊圖;第五圖例示根據本發明一示例性具體實施例中第四圖的該運算元收集器;以及第六圖例示根據本發明一示例性具體實施例中一種用於在實作有來源運算元收集器快取的一處理器核心上執行指令的方法之流程圖。
302‧‧‧執行單元
304‧‧‧局部暫存器檔案
310‧‧‧串流多處理器
312‧‧‧包繞排程器和指令單元
420‧‧‧交叉開關
422-428‧‧‧記憶庫
440‧‧‧運算元收集器
441-446‧‧‧儲存元件
450‧‧‧解碼單元
452‧‧‧算術邏輯單元
454‧‧‧結果先進先出
470‧‧‧分派單元

Claims (10)

  1. 一種用於在實作有耦合至駐在一處理器核心內一資料路徑的至少一輸入之一來源運算元收集器快取的該處理器核心上執行指令的方法,該方法包括:解碼一指令,來決定由該指令所指定的複數運算元;針對在該等複數運算元中每一運算元,決定該運算元並未儲存在該來源運算元收集器快取中、將該運算元由一局部暫存器檔案載入到該來源運算元收集器快取當中;以及設置該處理器核心,來橫跨儲存在該來源運算元收集器快取中該等運算元執行該指令。
  2. 如申請專利範圍第1項之方法,進一步包含在當載入該運算元到該來源運算元收集器快取中時更新一快取表來將對應於該運算元的一暫存器索引關聯於在該來源運算元收集器快取中一儲存元件。
  3. 如申請專利範圍第1項之方法,其中該局部暫存器檔案包含複數暫存器記憶庫。
  4. 如申請專利範圍第3項之方法,進一步包含設置一交叉開關來將在該等複數暫存器記憶庫中一第一暫存器記憶庫中一暫存器耦合至在該來源運算元收集器快取中一第一儲存元件。
  5. 如申請專利範圍第1項之方法,其中該來源運算元收集器快取之大小可並行地儲存由該指令所指定的該等複數運算元和由另一經解碼的指令所指定的複數運算元。
  6. 一種用於來源運算元收集器快取的系統,該系統包含:一處理器核心,其包括用於執行指令的一資料路徑;一來源運算元收集器快取,其耦合至該資料路徑的至少一輸入;一局部暫存器檔案,其耦合至該來源運算元收集器快取;以及 一排程單元,其設置成:解碼一指令來決定由該指令所指定的複數運算元;針對在該等複數運算元中每一運算元,決定該運算元並未儲存在該來源運算元收集器快取中、將該運算元由該局部暫存器檔案載入到該來源運算元收集器快取當中;以及設置該處理器核心來橫跨儲存在該來源運算元收集器快取中該等運算元執行該指令。
  7. 如申請專利範圍第6項之系統,進一步包含一快取表,且其中在當載入該運算元到該來源運算元收集器快取當中時,該排程單元進一步設置成更新該快取表來將對應於該運算元的一暫存器索引關聯於在該來源運算元收集器快取中一儲存元件。
  8. 如申請專利範圍第6項之系統,其中該局部暫存器檔案包含複數暫存器記憶庫。
  9. 如申請專利範圍第6項之系統,進一步包含一交叉開關,其設置成將在該等複數暫存器記憶庫中一第一暫存器記憶庫中一暫存器耦合至在該來源運算元收集器快取中一第一儲存元件。
  10. 如申請專利範圍第6項之系統,其中該來源運算元收集器快取之大小可並行地儲存由該指令所指定的該等複數運算元和由另一經解碼的指令所指定的複數運算元。
TW101145702A 2011-12-14 2012-12-05 來源運算元收集器快取的方法和裝置 TWI490782B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/326,183 US8639882B2 (en) 2011-12-14 2011-12-14 Methods and apparatus for source operand collector caching

Publications (2)

Publication Number Publication Date
TW201337747A TW201337747A (zh) 2013-09-16
TWI490782B true TWI490782B (zh) 2015-07-01

Family

ID=48522295

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101145702A TWI490782B (zh) 2011-12-14 2012-12-05 來源運算元收集器快取的方法和裝置

Country Status (4)

Country Link
US (1) US8639882B2 (zh)
CN (1) CN103197916A (zh)
DE (1) DE102012222394B4 (zh)
TW (1) TWI490782B (zh)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8873750B2 (en) * 2013-03-14 2014-10-28 International Business Machines Corporation Instruction for performing a pseudorandom number generate operation
US9459869B2 (en) 2013-08-20 2016-10-04 Apple Inc. Intelligent caching for an operand cache
US9652233B2 (en) 2013-08-20 2017-05-16 Apple Inc. Hint values for use with an operand cache
US9378146B2 (en) 2013-08-20 2016-06-28 Apple Inc. Operand cache design
US9632783B2 (en) 2014-10-03 2017-04-25 Qualcomm Incorporated Operand conflict resolution for reduced port general purpose register
US10152452B2 (en) * 2015-05-29 2018-12-11 Intel Corporation Source operand read suppression for graphics processors
US9727944B2 (en) * 2015-06-22 2017-08-08 Apple Inc. GPU instruction storage
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10191747B2 (en) * 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9619394B2 (en) 2015-07-21 2017-04-11 Apple Inc. Operand cache flush, eviction, and clean techniques using hint information and dirty information
US9785567B2 (en) 2015-09-11 2017-10-10 Apple Inc. Operand cache control techniques
US10768935B2 (en) * 2015-10-29 2020-09-08 Intel Corporation Boosting local memory performance in processor graphics
US10613987B2 (en) 2016-09-23 2020-04-07 Apple Inc. Operand cache coherence for SIMD processor supporting predication
CN107066706B (zh) * 2017-03-27 2019-07-30 中国科学院计算技术研究所 Gpu ffma指令在双发射模式下的通量测试方法
CN109032668B (zh) * 2017-06-09 2023-09-19 超威半导体公司 具有高带宽和低功率向量寄存器堆的流处理器
US11163578B2 (en) * 2018-02-23 2021-11-02 Intel Corporation Systems and methods for reducing register bank conflicts based on a software hint bit causing a hardware thread switch
FR3083351B1 (fr) * 2018-06-29 2021-01-01 Vsora Architecture de processeur asynchrone
GB2580316B (en) * 2018-12-27 2021-02-24 Graphcore Ltd Instruction cache in a multi-threaded processor
US20200264891A1 (en) * 2019-02-20 2020-08-20 Nanjing Iluvatar CoreX Technology Co., Ltd. (DBA “Iluvatar CoreX Inc. Nanjing”) Constant scalar register architecture for acceleration of delay sensitive algorithm
US11036545B2 (en) * 2019-03-15 2021-06-15 Intel Corporation Graphics systems and methods for accelerating synchronization using fine grain dependency check and scheduling optimizations based on available shared memory space
US11029954B2 (en) * 2019-04-22 2021-06-08 Samsung Electronics Co., Ltd. Per-lane dynamic indexing in temporary registers
US10725837B1 (en) * 2019-11-07 2020-07-28 Nvidia Corporation Persistent scratchpad memory for data exchange between programs
EP4229505A4 (en) * 2020-10-15 2024-11-20 The Regents of University of California BREATHING OPERAND WINDOWS FOR EXPLOITING BYPASSING IN GRAPHICS PROCESSING UNITS
CN114489792B (zh) 2021-03-25 2022-10-11 沐曦集成电路(上海)有限公司 处理器装置及其指令执行方法
CN117132450B (zh) * 2023-10-24 2024-02-20 芯动微电子科技(武汉)有限公司 一种可实现数据共享的计算装置和图形处理器
CN118349282B (zh) * 2024-06-18 2024-10-29 北京辉羲智能科技有限公司 支持多发射的simt处理器、指令处理方法和芯片
CN120578422B (zh) * 2025-08-06 2026-01-27 摩尔线程智能科技(北京)股份有限公司 处理器、显卡、计算机设备、寄存器分配方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200705263A (en) * 2005-04-15 2007-02-01 Atmel Corp Microprocessor for executing byte-compiled JAVA code and method therefor
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US20110072243A1 (en) * 2009-09-24 2011-03-24 Xiaogang Qiu Unified Collector Structure for Multi-Bank Register File

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5687282A (en) * 1979-12-14 1981-07-15 Nec Corp Data processor
US4530050A (en) 1981-08-26 1985-07-16 Hitachi, Ltd. Central processing unit for executing instructions of variable length having end information for operand specifiers
US7339592B2 (en) * 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories
JP5181127B2 (ja) 2008-11-05 2013-04-10 亮太 塩谷 半導体集積回路
US8200949B1 (en) * 2008-12-09 2012-06-12 Nvidia Corporation Policy based allocation of register file cache to threads in multi-threaded processor
US10360039B2 (en) * 2009-09-28 2019-07-23 Nvidia Corporation Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
TW200705263A (en) * 2005-04-15 2007-02-01 Atmel Corp Microprocessor for executing byte-compiled JAVA code and method therefor
US20110072243A1 (en) * 2009-09-24 2011-03-24 Xiaogang Qiu Unified Collector Structure for Multi-Bank Register File

Also Published As

Publication number Publication date
CN103197916A (zh) 2013-07-10
DE102012222394A1 (de) 2013-06-20
TW201337747A (zh) 2013-09-16
US8639882B2 (en) 2014-01-28
DE102012222394B4 (de) 2025-02-20
US20130159628A1 (en) 2013-06-20

Similar Documents

Publication Publication Date Title
TWI490782B (zh) 來源運算元收集器快取的方法和裝置
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
TWI619075B (zh) 自動依附任務啟始
US8732713B2 (en) Thread group scheduler for computing on a parallel thread processor
US9436504B2 (en) Techniques for managing the execution order of multiple nested tasks executing on a parallel processor
TWI493451B (zh) 使用預解碼資料進行指令排程的方法和裝置
TWI489385B (zh) 一種用於預先擷取快取線的電腦實作方法與子系統
TWI490779B (zh) 無鎖的先進先出裝置
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
TWI501150B (zh) 無指令解碼而排程指令的方法和裝置
TWI533222B (zh) 處理任務的工作分配控制
US9069609B2 (en) Scheduling and execution of compute tasks
TWI489392B (zh) 多個應用程式分享的圖形處理單元
TW201333829A (zh) 分配運算工作的參考運數器
US9626191B2 (en) Shaped register file reads
CN103885902A (zh) 用于经由纹理硬件实施存储器访问操作的技术
US9798544B2 (en) Reordering buffer for memory access locality
CN103885903A (zh) 用于经由纹理硬件实施存储器访问操作的技术
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
TWI501156B (zh) 多頻時間切面組
TW201432573A (zh) 工作佇列型圖形處理單元工作創建
US9665920B1 (en) Simultaneous execution of compute and graphics applications