專利名稱:可索引類型變換的制作方法
可索引類型變換
背景技術(shù):
計(jì)算機(jī)系統(tǒng)通常包括一個(gè)或多個(gè)通用處理器(諸如,中央處理器(CPU))以及一個(gè)或多個(gè)專用數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)(諸如,圖形處理單元(GPU)或CPU中的單指令多數(shù)據(jù) (SIMD)執(zhí)行單元)。通用處理器通常執(zhí)行計(jì)算機(jī)系統(tǒng)上的通用處理,并且數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)通常執(zhí)行計(jì)算機(jī)系統(tǒng)上的數(shù)據(jù)并行處理(例如圖形處理)。通用處理器通常具有實(shí)現(xiàn)數(shù)據(jù)并行算法的能力,但這樣做卻沒有在數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)中找到優(yōu)化的硬件資源。結(jié)果,通用處理器在執(zhí)行數(shù)據(jù)并行算法時(shí)比數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)低效得多。數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)傳統(tǒng)地起通用處理器在計(jì)算機(jī)系統(tǒng)上執(zhí)行程序時(shí)的輔助作用。 隨著為數(shù)據(jù)并行算法優(yōu)化的硬件的作用由于數(shù)據(jù)并行計(jì)算機(jī)節(jié)點(diǎn)處理能力的增強(qiáng)而逐漸增大,期望增強(qiáng)編程者對數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)進(jìn)行編程的能力,并且使對數(shù)據(jù)并行計(jì)算節(jié)點(diǎn)的編程變得更為容易。
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容是為了以簡化的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。一高級編程語言提供了用于數(shù)據(jù)并行處理環(huán)境中的可索引類型上的可擴(kuò)展變換集。用于該語言的編譯器將每個(gè)變換實(shí)現(xiàn)為來自可索引類型的映射,以允許每個(gè)變換可被應(yīng)用到其他變換上。在編譯時(shí)間,編譯器標(biāo)識(shí)數(shù)據(jù)并行源代碼中的每個(gè)可索引類型上的變換的序列,并生成數(shù)據(jù)并行可執(zhí)行代碼以將序列實(shí)現(xiàn)為運(yùn)行時(shí)使用變換映射的組合操作。 編譯器也包含優(yōu)化處理,該優(yōu)化處理是基于至數(shù)據(jù)并行可執(zhí)行代碼的變換的序列。
包括、合并在本發(fā)明書內(nèi)并構(gòu)成其一部分的附圖提供了對各實(shí)施例的進(jìn)一步理解。附圖示出各實(shí)施例,并且與說明書一起用于解釋本發(fā)明的原理。其他實(shí)施例和各實(shí)施例的許多預(yù)期優(yōu)點(diǎn)將隨著參考下面的詳細(xì)描述進(jìn)行更好的理解而得到認(rèn)識(shí)。附圖的元素不一定相對于彼此是比例正確的。相同的附圖標(biāo)記指代對應(yīng)的類似部分。圖1是示出了計(jì)算機(jī)系統(tǒng)中的編譯器環(huán)境的一實(shí)施例的框圖。圖2是示出了將變換集應(yīng)用到可索引類型的一實(shí)施例的框圖。圖3A到3N是示出了可被應(yīng)用到可索引類型的變換的各個(gè)實(shí)施例的框圖。圖4是示出了被配置為實(shí)現(xiàn)編譯器環(huán)境的計(jì)算機(jī)系統(tǒng)的一實(shí)施例的框圖。圖5是示出具有被配置為使用變換集來執(zhí)行數(shù)據(jù)并行代碼的數(shù)據(jù)并行計(jì)算引擎的計(jì)算機(jī)系統(tǒng)的一實(shí)施例的框圖。
具體實(shí)施例方式在以下詳細(xì)描述中,對附圖進(jìn)行了參考,附圖構(gòu)成了實(shí)施例的一部分且在其中作為示例示出了可在其中實(shí)踐本發(fā)明的各特定實(shí)施例。就此,諸如“頂部”、“底部”、“前方”、 “后方”、“前導(dǎo)”、“尾部”等的方向性術(shù)語參考所描述的附圖的取向來使用。因?yàn)楦鲗?shí)施例的各組件可以被定位為多個(gè)不同的取向,所以方向性術(shù)語出于說明的目的來使用而不是限制??梢岳斫?,可以使用其它實(shí)施例并且可以做出結(jié)構(gòu)上或邏輯上的改變而不背離本發(fā)明的范圍。因此,以下詳細(xì)描述并不旨在限制,并且本發(fā)明的范圍由所附權(quán)利要求來限定。應(yīng)該理解,此處描述的各示例性實(shí)施例的特征可相互組合,除非另外具體注明。圖1是示出計(jì)算機(jī)系統(tǒng)(諸如圖4所示的且在下文中將詳細(xì)描述的計(jì)算機(jī)系統(tǒng) 100)中的編譯器環(huán)境10的一實(shí)施例的框圖,其中計(jì)算機(jī)系統(tǒng)正在執(zhí)行指令以對具有數(shù)據(jù)并行(DP)部分14的代碼12進(jìn)行編譯。在被編譯時(shí),DP部分14中的DP代碼以及代碼12 中的其他非DP代碼(即,通用代碼)生成一個(gè)或多個(gè)可執(zhí)行代碼,例如圖1中所示的一個(gè)或多個(gè)通用(GP)可執(zhí)行代碼32和一個(gè)或多個(gè)DP可執(zhí)行代碼34。在其他實(shí)施例中,編譯器 20可生成一個(gè)或多個(gè)GP可執(zhí)行代碼32以各自包括一個(gè)或多個(gè)DP可執(zhí)行代碼34,或可生成一個(gè)或多個(gè)DP可執(zhí)行代碼34而不生成任何GP可執(zhí)行代碼32。響應(yīng)于對具有數(shù)據(jù)并行擴(kuò)展的編譯器20的調(diào)用而生成編譯器環(huán)境10以編譯代碼12的所有或所選模塊。例如,該調(diào)用可以由編程者或計(jì)算機(jī)系統(tǒng)的其他用戶、計(jì)算機(jī)系統(tǒng)中的其他代碼、或另一個(gè)計(jì)算機(jī)系統(tǒng)(未示出)的其他代碼來生成。GP可執(zhí)行代碼32表示旨在用于在一個(gè)或多個(gè)通用處理器(例如中央處理單元 (CPU))上執(zhí)行的程序。GP可執(zhí)行代碼32包括來自一個(gè)或多個(gè)通用處理器的指令集的低級指令。DP可執(zhí)行代碼34表示旨在且優(yōu)化用于在一個(gè)或多個(gè)數(shù)據(jù)并行(DP)優(yōu)化計(jì)算節(jié)點(diǎn) (諸如,在圖5中所示的且在下文中詳細(xì)描述的DP優(yōu)化計(jì)算節(jié)點(diǎn)211)上執(zhí)行的數(shù)據(jù)并行程序或算法(諸如,加陰影程序)。DP優(yōu)化計(jì)算節(jié)點(diǎn)通常是圖形處理單元(GPU)或通用處理器的SIMD單元,但也可包括通用處理器的標(biāo)量執(zhí)行單元或一些計(jì)算環(huán)境中的其他合適設(shè)備。 在一個(gè)實(shí)施例中,DP可執(zhí)行代碼34包括DP字節(jié)代碼,在DP優(yōu)化計(jì)算節(jié)點(diǎn)上執(zhí)行之前使用設(shè)備驅(qū)動(dòng)程序(未示出)該DP字節(jié)代碼從DP優(yōu)化計(jì)算節(jié)點(diǎn)的指令集轉(zhuǎn)換為低級指令。在其他實(shí)施例中,DP可執(zhí)行代碼34包括來自一個(gè)或多個(gè)DP優(yōu)化計(jì)算節(jié)點(diǎn)的指令集的低級指令,其中低級指令是由編譯器20插入的。因此,GP可執(zhí)行代碼32可由一個(gè)或多個(gè)通用處理器(諸如,CPU)直接執(zhí)行,并且DP可執(zhí)行代碼34要么可由一個(gè)或多個(gè)DP優(yōu)化計(jì)算節(jié)點(diǎn)直接執(zhí)行,要么可在轉(zhuǎn)換成DP優(yōu)化計(jì)算節(jié)點(diǎn)的低級指令之后由一個(gè)或多個(gè)DP優(yōu)化計(jì)算節(jié)點(diǎn)來執(zhí)行。在一個(gè)實(shí)施例中,代碼12包括來自具有數(shù)據(jù)并行擴(kuò)展的高級通用編程語言(之后稱為GP語言)的指令序列,這些數(shù)據(jù)并行擴(kuò)展形成存儲(chǔ)在一個(gè)或多個(gè)模塊的集合中的程序。GP語言可允許程序被編寫為不同部分(即模塊),使得每個(gè)模塊都可以被存儲(chǔ)在可以由計(jì)算機(jī)系統(tǒng)訪問的單獨(dú)的文件或者位置中。GP語言提供用于對包括一個(gè)或多個(gè)通用處理器和一個(gè)或多個(gè)專用DP優(yōu)化計(jì)算節(jié)點(diǎn)的計(jì)算環(huán)境進(jìn)行編程的單個(gè)語言。使用GP語言,編程者可將通用處理器和DP源代碼均包含在代碼12中,用于由通用處理器和DP計(jì)算節(jié)點(diǎn)分別執(zhí)行,并且協(xié)調(diào)通用處理器和DP源代碼的執(zhí)行。代碼12在該實(shí)施例中可以表示任何合適類型的代碼,諸如應(yīng)用、庫函數(shù)或操作系統(tǒng)服務(wù)??梢酝ㄟ^將諸如C或C++之類的廣泛適用的高級和通用編程語言擴(kuò)展以包括數(shù)據(jù)并行特征來形成GP語言。其中可出現(xiàn)DP特征的通用語言的其他示例包括JavaTM,PHP,Visual Basic, Perl, Python , C#, Ruby, Delphi, Fortran, VB, F#, OCaml, Haskell, Erlang, NESL,Chapel,以及Jav必cript 。GP語言可包括豐富的鏈接能力,該鏈接能力允許程序的不同部分被包括在如圖1中用代碼12示出的不同模塊中。數(shù)據(jù)并行特征提供了編程工具, 該編程工具利用DP優(yōu)化計(jì)算節(jié)點(diǎn)的專用架構(gòu)來使數(shù)據(jù)并行操作能比使用通用處理器(即非DP優(yōu)化計(jì)算節(jié)點(diǎn))更快或更有效地執(zhí)行。GP語言也可以是使編程者能對通用處理器和 DP優(yōu)化計(jì)算節(jié)點(diǎn)兩者進(jìn)行編程的另一合適的高級通用編程語言。在另一個(gè)實(shí)施例中,代碼12包括來自形成程序的高級數(shù)據(jù)并行編程語言(此后稱 DP語言)的指令序列。DP語言提供了用于對具有一個(gè)或多個(gè)DP優(yōu)化計(jì)算節(jié)點(diǎn)的計(jì)算環(huán)境中的DP優(yōu)化計(jì)算節(jié)點(diǎn)進(jìn)行編程的專用語言。使用DP語言,編程者生成代碼12中的旨在用于在DP優(yōu)化計(jì)算節(jié)點(diǎn)上執(zhí)行的DP源代碼。DP語言提供編程工具,這些編程工具利用DP 優(yōu)化計(jì)算節(jié)點(diǎn)的專用架構(gòu)來使數(shù)據(jù)并行操作能比使用通用處理器更快或更有效地執(zhí)行。DP 語言可以是現(xiàn)有的 DP 編程語言,諸如 HLSL,GLSL, Cg, C, C++, NESL, Chapel, CUDA, OpenCL, Accelerator, Ct, PGI GPGPU Accelerator, CAPS GPGPU Accelerator, Brook+, CAL, APL, Fortran 90(以及更高版本),Data Parallel C, DAPPLE,或APL.。代碼12在該實(shí)施例中可以表示任何合適類型的DP源代碼,諸如應(yīng)用、庫函數(shù)或操作系統(tǒng)服務(wù)。代碼12包括具有指定用于在DP優(yōu)化計(jì)算節(jié)點(diǎn)上執(zhí)行的代碼的一個(gè)或多個(gè)模塊中的一個(gè)或多個(gè)部分14。在使用GP語言來編寫代碼12的一個(gè)實(shí)施例中,GP語言使編程者能在定義矢量函數(shù)時(shí)使用注釋16 (諸如,declspec (vector)...)來將GP代碼12的一部分 14指定為DP源代碼。注釋16與旨在用于在DP優(yōu)化計(jì)算節(jié)點(diǎn)上執(zhí)行的矢量函數(shù)的函數(shù)名 17(例如vector_func)相關(guān)聯(lián)。代碼部分14也可包括在調(diào)用點(diǎn)(諸如,forall, reduce, scan,或sort)對矢量函數(shù)的一個(gè)或多個(gè)調(diào)用18 (諸如,forall. . .,vector_func,...)。對應(yīng)于調(diào)用點(diǎn)的矢量函數(shù)被稱為內(nèi)核函數(shù)。內(nèi)核函數(shù)可調(diào)用代碼12中的其他矢量函數(shù)(即, 其他DP源代碼),并可被視為矢量函數(shù)調(diào)用圖中的根。內(nèi)核函數(shù)也可使用由代碼12所定義的類型(諸如,class或struct)。這些類型可以或可以不被注釋成DP源代碼。在其他實(shí)施例中,其他合適的編程語言構(gòu)造可被用于將代碼12的部分14指定為DP源代碼和/或通用處理器代碼。此外,在代碼12用DP語言編寫的實(shí)施例中可省略注釋16。參考圖2,代碼12的高級語言提供了變換集40,該變換集40用于在數(shù)據(jù)并行處理環(huán)境中的可索引類型42上使用??伤饕愋?2是實(shí)現(xiàn)一個(gè)或多個(gè)下標(biāo)算符連同秩(rank) (為非負(fù)整數(shù))以及表示為元素_類型elementjype的類型的任何類型。如果索引<N> 是表示整數(shù)(即,任何類型的整數(shù)數(shù)據(jù)類型)的N元組的類型,那么索引<N>的一實(shí)例是N 個(gè)整數(shù)的集合(i0,il,. . .,im),其中m等于N-I (即,N元組)。秩N的索引算符采用索引 <N>的N元組實(shí)例,并將該實(shí)例與被稱為元素類型(element type)的類型的另一實(shí)例相關(guān)聯(lián),其中元素類型定義了可索引類型42中的每個(gè)元素。在一個(gè)實(shí)施例中,可索引類型42定義了下述算符中的一個(gè)或多個(gè)
其中index—declarator釆用以下形式
const index<rank>&idx ;const index<rank>idx ;index<rank>&idx ;或index<rank>idx.在其他實(shí)施例中,算符可以是函數(shù)、函子或更通用的表示。具有給定秩和元素類型的可索引類型的種類具有被稱為場的初始化對象??伤饕愋褪强伤饕愋?2以及變換 40兩者的多種情況??伤饕愋途哂卸嗝骟w的形狀——即,可索引類型可被代數(shù)地表示為有限個(gè)由坐標(biāo)軸的線性函數(shù)所形成的半平面的交點(diǎn)。編譯器20將每個(gè)變換40實(shí)現(xiàn)為來自可索引類型42的映射,以允許每個(gè)變換40 被應(yīng)用到其他變換40。在編譯時(shí)間,編譯器20標(biāo)識(shí)代碼12中每個(gè)可索引類型42上的變換40的序列,并生成DP可執(zhí)行代碼34以將這些序列實(shí)現(xiàn)為運(yùn)行時(shí)使用變換映射的組合操作。編譯器20也包含優(yōu)化處理,該優(yōu)化處理基于至DP可執(zhí)行代碼34的變換的序列。在執(zhí)行時(shí),DP可執(zhí)行代碼34將變換40的集合應(yīng)用到可索引類型42以生成經(jīng)變換的可執(zhí)行類型44。變換40的集合可包括以下的任何合適的組合轉(zhuǎn)置(transpose)、擴(kuò)展(spread)、 移位(shift)、環(huán)狀移位(CShift)、分片(tile)、投射(project)、投影(projections)、分裂 (split)、暈繞(halo)、鄰接(neighborhood)、內(nèi)置(interior)、分區(qū)(section)、調(diào)整形狀 (reshape)、只讀(reacLonly)、以及用戶定義的變換。轉(zhuǎn)置(transpose)、擴(kuò)展(spread)、 移位(shift)和環(huán)狀移位(cshift)變換40表示變換范圍模式,而分片(tile)、投射 (project)、投影(projections)和分裂(split)變換40表示范圍模式。參考圖3A至3N 示出了變換40。圖3A表示轉(zhuǎn)置(transpose)變換40A。轉(zhuǎn)置變換40A將可索引類型42A的兩個(gè)維度交換,以生成經(jīng)變換的可索引類型44A。在一個(gè)實(shí)施例中,轉(zhuǎn)置變換4012A將指定的維度移動(dòng)到最右側(cè)位置。例如,指定了 χ維的轉(zhuǎn)置變換40A可將可索引類型42A的χ維和y維交換,以生成如圖3A所示的經(jīng)變換的可索引類型44A。在另一個(gè)實(shí)施例中,轉(zhuǎn)置變換40A交換兩個(gè)指定的維度。圖;3B示出擴(kuò)展(spread)變換40B。擴(kuò)展變換40B在指定插槽向可索引類型42B 添加一維度,以生成經(jīng)變換的可索引類型44B。在圖;3B的實(shí)施例中,指定了 χ維的擴(kuò)展變換 40B向可索引類型42B的僅有y維添加了 χ維,以生成經(jīng)變換的可索引類型44Β。雖然在圖 3Β中進(jìn)行了圖示,但所添加的維度僅僅是概念性地添加的并且可以具有無限的廣度。圖3C示出移位(shift)變換40C。移位變換40C將可索引類型42C的指定維度移位一指定線性距離以生成經(jīng)變換的可索引類型44C。在圖3C的示例中,移位變換40C指定了 χ維并且線性距離為一,以在生成經(jīng)變換的可索引類型44C時(shí)將可索引類型42C的χ維移位一。圖3D示出環(huán)狀移位(cshift)變換40D。環(huán)狀移位變換40D將可索引類型42D的指定維度移位一指定的旋轉(zhuǎn)距離以形成經(jīng)變換的可索引類型44D。在圖3D的示例中,環(huán)狀移位變換40D指定了 χ維并且旋轉(zhuǎn)距離為一,以在生成經(jīng)變換的可索引類型44D時(shí)將可索引類型42D的χ維旋轉(zhuǎn)一。圖3E示出分片(tile)變換40E。分片變換40E將可索引類型42E劃分為相同大小的子陣列集合,以生成經(jīng)變換的可索引類型44E。在圖3E的示例中,分片變換4(^將虹4 的可索引類型42E劃分為的經(jīng)變換的可索引類型44E。圖3F示出了投射(project)變換40F。投射變換40F在可索引類型42F上針對指定的維度切片進(jìn)行維度縮減,以生成經(jīng)變換的可索引類型作44F為超平面。在圖3F的示例中,投射變換40F將可索引類型42F縮減至y維的第二行,以生成變換的可索引類型44F作為一加有陰影的超平面。圖3G示出了投影(projection)變換40G。投影變換40G生成在給定方向上的所有可能投射變換的集合。在圖3G的示例中,投影變換40G從可索引變換42G生成在可索引類型44G的y方向(即,所有行)上的所有可能投射變換的集合。圖3H示出分裂(split)變換40H。分裂變換40H將可索引類型42H沿著非邊界支點(diǎn)進(jìn)行分裂,以生成具有2R個(gè)子陣列的經(jīng)變換陣列44H,其中R是可索引類型42H的維度數(shù)。在可索引類型42H的邊界支點(diǎn)上發(fā)生分裂變換40H的退化形式,以生成具有2B個(gè)子陣列的經(jīng)變換可索引類型44H,其中B是在包含可索引類型42H中的邊界支點(diǎn)的邊界的維度。 在圖3H的示例中,分裂變換40H將可索引類型42H沿著非邊界支點(diǎn)進(jìn)行分裂,以生成具有四個(gè)子陣列的經(jīng)變換陣列44H。圖31示出暈繞(halo)變換401。暈繞變換401接收分片后的可索引類型421 (即, 使用分片變換40E變換后的可索引類型4 ,并生成經(jīng)變換的可索引類型441以包括來自可索引類型421的在對應(yīng)分片之外一指定距離內(nèi)的元素集合。在圖31的示例中,暈繞變換 401生成經(jīng)變換的可索引類型441以包括在虛線方塊461之內(nèi)的元素集合以及位于剩余分片的對應(yīng)方塊之內(nèi)的元素集合,虛線方塊461表示在可索引類型42J中的對應(yīng)分片之外的指定距離。在其他實(shí)施例中,指定距離可以由圓形或另一個(gè)合適形狀來表示。圖3J示出鄰接(neighborhood)變換40J。鄰接變換40J生成經(jīng)變換的可索引類型44J以包括來自可索引類型42J的位于對應(yīng)元素的指定距離內(nèi)的元素集合。在圖3J的示例中,鄰接變換40J生成經(jīng)變換的可索引類型44J以包括在虛線方塊46J之內(nèi)的元素集合以及位于剩余未加陰影元素的對應(yīng)圓形之內(nèi)的元素集合,虛線方塊46J表示可索引類型 42J的加陰影元素的指定距離。在其他實(shí)施例中,指定距離可以由圓形或另一個(gè)合適形狀來表不。圖I示出內(nèi)置(interior)變換40K。內(nèi)置變換40K生成經(jīng)變換的可索引類型44K 以包括可索引類型42K中的離開可索引類型42K的邊界至少一指定距離的所有元素。在圖 3K的示例中,內(nèi)置變換40K生成經(jīng)變換的可索引類型44K以包括可索引類型42K中的離開可索引類型42K的邊界至少一個(gè)元素的元素。圖3L示出分區(qū)(section)變換40L。分區(qū)變換40L生成經(jīng)變換的可索引類型44L 以包括可索引類型42L中的指定矩形分區(qū)的元素。矩形分區(qū)可由與可索引類型42L的偏移值以及可索引類型42L的每個(gè)維度的廣度來指定。在圖3L的示例中,分區(qū)變換40L生成經(jīng)變換的可索引類型44L以使用指定偏移值(1,1)、x維的廣度3以及y維的廣度2包括來自可索引類型42L中的加陰影元素。圖3M示出調(diào)整形狀(reshape)變換40M。調(diào)整形狀變換40M將可索引類型42M 變形為具有不同形狀的經(jīng)變換的可索引類型44M,同時(shí)保持可索引類型42M的總廣度(即, 總的N維的量)。在圖3M的示例中,調(diào)整形狀變換40M將具有總廣度為四(即,4x1陣列)的一維可索引類型42M(即,4x1陣列)變形為具有總廣度為四的二維經(jīng)變換的可索引類型 44M(即,2x2 陣列)。圖3N示出只讀(reacLonly)變換40N。只讀變換40N根據(jù)可索引類型42N生成不可修改的經(jīng)變換可索引類型44N,而不改變可索引類型42N的形狀或物理表示。在圖3N的示例中,只讀變換40N根據(jù)可索引類型42N生成不可修改的經(jīng)變換可索引類型44N(如加陰影元素所示),而不改變可索引類型42N的形狀或物理表示。如上所述,轉(zhuǎn)置(transpose)、擴(kuò)展(spread)、移位(shift)和環(huán)狀移位(cshift) 變換40表示變換范圍模式,而分片(tile)、投射(project)、投影(projections)和分裂 (split)變換40表示范圍模式。變換范圍模式包括可由從索引<N>向索引<M>(對于一定的M和N)的變換所表示的那些變換40。使用變換范圍模式變換40,編譯器20可在編譯時(shí)間中準(zhǔn)確推測正在發(fā)生什么變換序列。例如,擴(kuò)展變換40B(擴(kuò)展<1>)是在插槽1上添加維度的操作。因此可索引類型 42 (f (x0,Xl,x2))(即,秩3的可索引類型)被變換為新的可索引類型擴(kuò)展<I> (f),其是秩 4的可索引類型,從而擴(kuò)展<l>(f) (x0,xl,x2,x3) = f(x0,x2,x3) ( SP,插槽1為空)。作為另一個(gè)示例,考慮轉(zhuǎn)置變換40A (轉(zhuǎn)置<0,2 ,其是將維度0與維度2進(jìn)行交換的操作,以使得對于秩3的可索引類型42(f),轉(zhuǎn)置<0,2>(f) (x0,xl,x2) = f(x2,xl,x0)o還有一個(gè)示例涉及移位變換40C (移位<1,5> (f)),其表示將維度1移位5,使得移位<1,5> (f) (x0, xl,x2) = f(x0,xl+5,x2)。又有一個(gè)示例涉及環(huán)狀移位變換40D(環(huán)狀移位<0,-2>(f)), 其表示將維度0環(huán)狀移位-2,并要求場網(wǎng)格以便有意義。當(dāng)float4類型的2維可索引類型 42f在網(wǎng)格(10,20)上,且網(wǎng)格是基點(diǎn)在(0,0)且在垂直方向上具有長度10并在水平方向上具有長度20的矩形時(shí),環(huán)狀移位<0,-2>(f) (x0,xl) = f((x0-2)% 10,xl)。最后一個(gè)示例,使用網(wǎng)格(10,20)上的float4類型的2D可索引類型42' f的調(diào)整形狀變換40M改變網(wǎng)格矩形的維度(諸如,調(diào)整形狀<5,40>(f)->改變?yōu)榫W(wǎng)格(5,40);調(diào)整形狀<200>(f)-> 改變?yōu)榫W(wǎng)格(200);以及調(diào)整形狀<10,2,10>(f)->改變?yōu)榫W(wǎng)格(10,2,10))。范圍模式涉及可索引類型的集合。令可索引類型<N>為秩N的任何可索引類型 42,表示索引算符對類型索引<N>的實(shí)例動(dòng)作。下標(biāo)算符的返回類型(即,元素類型)是可索引類型<N>::元素_類型(Indexable<N>::element_type)。分片變換40E、投影變換40G 以及分裂變換40H的演算得出下述的同形性。對于分片,分片 < 網(wǎng)格_分片 > 可索引類型 <N>->范圍〈N,可索引類型〈N》是被限制在網(wǎng)格_分片,且由可索引類型<N>/網(wǎng)格_分片所索引的可索引類型<N>的集合。更具體地,如果網(wǎng)格描述了可索引類型<N>的形狀,那么范圍〈N,可索引類型〈N》是被限制在由網(wǎng)格_范圍=(網(wǎng)格+網(wǎng)格_分片-1)/網(wǎng)格_分片中的偏移值所解釋的網(wǎng)格_分片中的可索引類型<N>的集合。因此,當(dāng)由分片〈網(wǎng)格_ 分片 >(可索引類型<N>)所創(chuàng)建時(shí),網(wǎng)格_范圍是范圍〈N,可索引類型<N>>的形狀。對于投影,投影<0> 可索引類型<N>->范圍<1,可索引類型<N-D>是可索引類型<N>在0方向中的N-I維度切片的I-D集合。例如,如果可索引類型<2>是float4像素的102虹10對屏幕,那么投影<0>(可索引類型<2>)是在102^10 屏幕中的所有行的集合。對于分裂,分裂<idx> 可索引類型<N>->范圍〈N,可索引類型〈N》是被限制于通過對“索引<N>idx”進(jìn)行分裂所確定的元素網(wǎng)格的可索引類型<N>的所有N維子集的集合。例如,當(dāng)可索引類型<2>是float4像素的1024x1024屏幕且idx = {512,512},那么分裂<idx>得出具有偏移值為{0,0}、{0,512}、{512,0}、{512,512}的4個(gè)廣度為512x512的子對象。在三維中,這樣的內(nèi)部分裂變換得出8個(gè)子對象。如果分裂變換不是在內(nèi)部的(類似{0,512}),那么分裂變換得出具有偏移值{0,0}、{0,512}的廣度為10MX512的2個(gè)子對象。在此使用術(shù)語 “被限制在元素網(wǎng)格的可索引類型<N>”,因?yàn)椴淮嬖诖鎯?chǔ)器操作。相反,可索引類型<N>的原始存儲(chǔ)器儲(chǔ)存被限制為若干更小的網(wǎng)格(即,元素網(wǎng)格),這些更小的網(wǎng)格構(gòu)成有效索引 <N>點(diǎn)的原始集合的劃分,對有效索引<N>點(diǎn)的原始集合原始地定義了可索引類型<N>的索引算符。由變換40所構(gòu)建的所有“范圍”實(shí)例采用了可索引類型<N>andexable<N>)的定義或形狀的原始域,其不喪失一般性地被稱為可索引類型<N>.網(wǎng)格。通過定義,可索引類型<N>的所有索引算符對由可索引類型<N>.網(wǎng)格所描述的每一個(gè)索引<N>動(dòng)作。在形成范圍〈Ni,可索引類型<N2》中,形成可索引類型<N>.網(wǎng)格的劃分,并且由范圍<N1,可索引類型<N2>>所定義的集合是被限制為N2-維度劃分(由索引<N1>的Nl-維度集參數(shù)化的集合)的原始可索引類型<N>。由編譯器20在編譯時(shí)所推斷的優(yōu)化處理是范圍<N,可索引類型<N>>為原始可索引類型<N>的劃分。編譯器20也可執(zhí)行下述的變換40的優(yōu)化處理。 當(dāng)編譯器20檢測到轉(zhuǎn)置變換40A (轉(zhuǎn)置(i,j)),并且i或j中的一個(gè)是具有存儲(chǔ)器中的單位跨度布局的維度(假設(shè)i是單位跨度維度),那么編譯器20試圖訪問j方向中的存儲(chǔ)器,因?yàn)樵谵D(zhuǎn)置變換40A之后j現(xiàn)在是單位跨度維度。編譯器20試圖實(shí)現(xiàn)在由Yi Yang等人所著的“用于存儲(chǔ)器優(yōu)化和并行化管理的GPGPU編譯器(A GPGPU Compiler for Memory Optimization and Parallelism Management),,(ACM程序設(shè)計(jì)語言專業(yè)組(Sigplan)通知, 2010年6月,第6刊,第45卷,第86-97頁,其全文結(jié)合在此作為引用)中第3. 2,3. 3,3. 7 節(jié)所描述的優(yōu)化處理。編譯器20也將優(yōu)化處理應(yīng)用到對“單位跨度維度”的概念有所改動(dòng)的任何變換40上。編譯器20可進(jìn)一步在大部分情況中應(yīng)用在上述的Yang參考文獻(xiàn)中第 3. 5和3. 6節(jié)的優(yōu)化處理。編譯器20也可執(zhí)行如下優(yōu)化處理對任何變換40,將表示計(jì)算域的隱循環(huán)展開并阻塞。該優(yōu)化處理類似于上述Yang參考文獻(xiàn)中第3. 5節(jié)的優(yōu)化處理。當(dāng)編譯器20檢測到擴(kuò)展變換40B (擴(kuò)展<k>)時(shí),編譯器20知道它不需要關(guān)注維度k。編譯器20通常跟蹤全部變換40中哪個(gè)維度具有單位跨度存儲(chǔ)器布局。通過經(jīng)由擴(kuò)展<k>識(shí)別維度k是“空的”,編譯器20知道對維度k不需要進(jìn)行跟蹤。例如,在移位<1, 12> (擴(kuò)展<1> (f)) =擴(kuò)展<1> (f)中,編譯器20知道因?yàn)榫S度1為空且對其移位12不進(jìn)行任何操作。其他示例包括投影<1>(擴(kuò)展<l>(f)) =f ;投影<1,12>(擴(kuò)展<l>(f)) =f//投影<1,12>是在1到12維度中f的切片;環(huán)狀移位<1,12> (擴(kuò)展<1> (f)) =擴(kuò)展 <l>(f);調(diào)整形狀<10,5,2>(擴(kuò)展<l>(f)) =擴(kuò)展<1>(調(diào)整形狀<10,2>(f));分片<8, 4,16>(擴(kuò)展 <l>(f)) =擴(kuò)展 <1>(分片 <8,16>(f));分裂 <512,64,128>(擴(kuò)展 <l>(f)) =擴(kuò)展<1>(分裂<512,128>(f))。編譯器20對于暈繞變換401、鄰接變換40J、內(nèi)置變換 40K以及只讀變換40N執(zhí)行類似的優(yōu)化處理以及帶狀挖掘和循環(huán)交換。當(dāng)編譯器20檢測到移位變換40C時(shí),編譯器20知道按照由移位變換40C所指定的量和方向改變編譯器20的邊界檢查代碼。
投射變換40F(投射<_1,_Val>)意味著通過固定_I = _Val而將_1維度投射出去。例如,如果_I =0并且可索引類型42,f是ΙΟΜχΙΟΜ像素,那么投射<0,512>(f)是通過{0,512}的像素的垂直切片。當(dāng)單位跨度維度已經(jīng)被投射出去時(shí)編譯器20執(zhí)行優(yōu)化處理以進(jìn)行跟蹤,在該情況中,編譯器20實(shí)現(xiàn)在“用于存儲(chǔ)器優(yōu)化和并行化管理的GPGPU編譯器(A GPGPU Compiler for Memory Optimization and Parallelism Management),,(其全文結(jié)合在此作為引用)中第3. 2和3. 3節(jié)所描述的優(yōu)化處理。暈繞變換401可由描述每個(gè)點(diǎn)具有多少有效鄰接點(diǎn)的值索引<N>所指定。例如, 上述的102^10 像素示例可被劃分為16x16個(gè)分片。因此,被應(yīng)用到分片后的可索引陣列42的暈繞<2,4>暗示在每個(gè)分片周圍在垂直方向上的每一側(cè)有另外兩個(gè)像素可被訪問, 且在水平方向上有另外四個(gè)像素可被訪問。對于非分片可索引類型,暈繞<idx>暗示在_1 維度的兩側(cè)可訪問idx[_I]個(gè)額外的點(diǎn)。暈繞函數(shù)等式暈繞<idx>(范圍〈N,可索引類型 <Μ ) =范圍〈N,暈繞<idx> (可索引類型<M>) >允許編譯器20關(guān)于邊界檢查進(jìn)行假設(shè)。內(nèi)置變換40K(內(nèi)置<idx>)是暈繞變換401的非分片逆處理。內(nèi)置<idx>采用可索引類型42并通過idx被限制??紤]10MX1024的示例,則內(nèi)置<8,8>(f).網(wǎng)格·廣度 ={1008,1008}且內(nèi)置<8,8>(f).網(wǎng)格.偏移 ={8,8} 0換句話說,通過將f限制于由從 χ和y軸兩者形成距離為8的圍塊而定義的子網(wǎng)格來形成內(nèi)置<8,8> (f)。內(nèi)置<idx>允許編譯器20在邊界檢查中作出假設(shè)。函數(shù)等式是暈繞<idx>(內(nèi)置<idx>(f)) =f。鄰接變換40J (鄰接<idx>)被編譯器20用于對分片進(jìn)行緩存,或用于編譯器優(yōu)化處理中的緩存阻隔。特別是,鄰接<64,64>(f)指示編譯器20分片循環(huán)為64x64個(gè)索引分片。只讀變換40N(只讀<f>)指示編譯器20由f所表示的存儲(chǔ)器可以任何形式跨多個(gè)DP計(jì)算節(jié)點(diǎn)或多個(gè)單獨(dú)進(jìn)程分布。因此,編譯器20和對應(yīng)的運(yùn)行時(shí)代碼可在將經(jīng)只讀變換后的可索引類型44分布到不同的存儲(chǔ)器或一致性域之后避免對原始存儲(chǔ)器中發(fā)生的改動(dòng)進(jìn)行檢查。圖4是示出被配置為實(shí)現(xiàn)圖1所示的編譯器環(huán)境10的計(jì)算機(jī)系統(tǒng)的實(shí)施例的框圖。計(jì)算機(jī)系統(tǒng)100包括一個(gè)或多個(gè)處理器封裝102、存儲(chǔ)器系統(tǒng)104、零個(gè)或多個(gè)輸入/輸出設(shè)備106、零個(gè)或多個(gè)顯示設(shè)備108、零個(gè)或多個(gè)外圍設(shè)備110、和零個(gè)或多個(gè)網(wǎng)絡(luò)設(shè)備112。處理器封裝102、存儲(chǔ)器系統(tǒng)104、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備 110和網(wǎng)絡(luò)設(shè)備112使用包括任何合適的類型、數(shù)量和配置的控制器、總線、接口、和/或其他有線或無線連接的一組互連114來進(jìn)行通信。計(jì)算機(jī)系統(tǒng)100表示出于通用或?qū)S媚康亩渲玫娜魏魏线m的處理設(shè)備。計(jì)算機(jī)系統(tǒng)100的示例包括服務(wù)器、個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、平板計(jì)算機(jī)、個(gè)人數(shù)字助理 (PDA)、移動(dòng)電話、智能手機(jī)、和音頻/視頻設(shè)備。計(jì)算機(jī)系統(tǒng)100的組件(即,處理器封裝 102、存儲(chǔ)器系統(tǒng)104、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110、網(wǎng)絡(luò)設(shè)備112和互連114)可包含在公共外殼(未示出)中或任何合適數(shù)量的獨(dú)立外殼(未示出)中。每個(gè)處理器封裝102都包括一個(gè)或多個(gè)處理元件(在圖5中示出),所述處理元件形成被配置為執(zhí)行指令(即,軟件)的執(zhí)行硬件。每個(gè)處理器封裝102都可以包括具有相同或不同架構(gòu)和/或指令集的處理元件。例如,處理元件可以包括順序執(zhí)行元件、超標(biāo)量執(zhí)行元件、以及數(shù)據(jù)并行執(zhí)行元件(例如GPU執(zhí)行元件)的任何組合。每個(gè)處理元件都被配置為訪問并執(zhí)行存儲(chǔ)在存儲(chǔ)器系統(tǒng)104中的指令。這些指令可包括基本輸入輸入系統(tǒng) (BIOS)或固件(未示出)、操作系統(tǒng)(OS) 122、GP代碼12、編譯器20、以及帶有DP可執(zhí)行代碼34的GP可執(zhí)行代碼32。每個(gè)執(zhí)行元件都可以結(jié)合或響應(yīng)于從輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110、和/或網(wǎng)絡(luò)設(shè)備112所接收到的信息來執(zhí)行指令。計(jì)算機(jī)系統(tǒng)100引導(dǎo)并執(zhí)行OS 122。OS 122包括如下指令這些指令可以由執(zhí)行元件來執(zhí)行以管理計(jì)算機(jī)系統(tǒng)100的組件并提供允許程序訪問并使用這些組件的一組功能。在一個(gè)實(shí)施例中,OS 122是Windows操作系統(tǒng)。在其他實(shí)施例中,OS 122是適于和計(jì)算機(jī)系統(tǒng)100 —起使用的另一操作系統(tǒng)。計(jì)算機(jī)系統(tǒng)100執(zhí)行編譯器20以如上所述地從 GP代碼12生成GP可執(zhí)行代碼32和DP可執(zhí)行代碼34。計(jì)算機(jī)系統(tǒng)100可以使用一個(gè)或多個(gè)處理元件來執(zhí)行GP可執(zhí)行代碼32以及DP可執(zhí)行代碼34,這將在下面參考圖5的實(shí)施例予以描述。存儲(chǔ)器系統(tǒng)104包括被配置成存儲(chǔ)指令和數(shù)據(jù)的任何合適的類型、數(shù)量和配置的易失性或非易失性存儲(chǔ)設(shè)備。存儲(chǔ)器系統(tǒng)104的儲(chǔ)存設(shè)備表示儲(chǔ)存計(jì)算機(jī)可執(zhí)行指令(即, 軟件)的計(jì)算機(jī)可讀儲(chǔ)存介質(zhì),計(jì)算機(jī)可執(zhí)行指令包括OS 122、GP代碼12、編譯器20、GP 可執(zhí)行代碼32以及DP可執(zhí)行代碼34。指令可由計(jì)算機(jī)系統(tǒng)100執(zhí)行以執(zhí)行在此所述的 OS 122,GP代碼12、編譯器20、GP可執(zhí)行代碼32以及DP可執(zhí)行代碼34的功能和方法。存儲(chǔ)器系統(tǒng)104存儲(chǔ)從處理器封裝102、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110和網(wǎng)絡(luò)設(shè)備112接收的指令和數(shù)據(jù)。存儲(chǔ)器系統(tǒng)104將存儲(chǔ)的指令和數(shù)據(jù)提供給處理器封裝 102、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110和網(wǎng)絡(luò)設(shè)備112。存儲(chǔ)器系統(tǒng)104中的存儲(chǔ)設(shè)備的示例包括硬盤驅(qū)動(dòng)器、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、閃存驅(qū)動(dòng)器和卡、以及諸如磁盤和CD和DVD之類的光盤。輸入/輸出設(shè)備106包括被配置成將指令或數(shù)據(jù)從用戶輸入到計(jì)算機(jī)系統(tǒng)100并將指令或數(shù)據(jù)從計(jì)算機(jī)系統(tǒng)100輸出到用戶的任何合適的類型、數(shù)量和配置的輸入/輸出設(shè)備。輸入/輸出設(shè)備106的示例包括鍵盤、鼠標(biāo)、觸摸墊、觸摸屏、按鈕、撥盤、旋鈕和開關(guān)。顯示設(shè)備108包括被配置成向計(jì)算機(jī)系統(tǒng)100的用戶輸出文本和/或圖形信息的任何合適的類型、數(shù)量和配置的顯示設(shè)備。顯示設(shè)備108的示例包括監(jiān)視器、顯示屏和投影儀。外圍設(shè)備110包括被配置成用計(jì)算機(jī)系統(tǒng)100中的一個(gè)或多個(gè)其他組件來操作以執(zhí)行通用或?qū)S锰幚砉δ艿娜魏魏线m的類型、數(shù)量和配置的外圍設(shè)備。網(wǎng)絡(luò)設(shè)備112包括被配置成允許計(jì)算機(jī)系統(tǒng)100通過一個(gè)或多個(gè)網(wǎng)絡(luò)(未示出) 進(jìn)行通信的任何合適的類型、數(shù)量和配置的網(wǎng)絡(luò)設(shè)備。網(wǎng)絡(luò)設(shè)備112可根據(jù)任何合適的網(wǎng)絡(luò)協(xié)議和/或配置來操作以允許計(jì)算機(jī)系統(tǒng)100將信息發(fā)送給網(wǎng)絡(luò)或者從網(wǎng)絡(luò)接收信息。圖5是示出了具有被配置為執(zhí)行DP可執(zhí)行代碼34的計(jì)算引擎210的計(jì)算機(jī)系統(tǒng) 200的實(shí)施例的框圖。計(jì)算引擎210包括一個(gè)或多個(gè)計(jì)算節(jié)點(diǎn)211。每個(gè)計(jì)算節(jié)點(diǎn)211是共享一存儲(chǔ)器層級的計(jì)算資源的集合。每個(gè)計(jì)算節(jié)點(diǎn)211包括一個(gè)或多個(gè)處理元件(PE)212 的集合、以及存儲(chǔ)DP可執(zhí)行代碼34的存儲(chǔ)器214。PE 212執(zhí)行DP可執(zhí)行代碼34并將由 DP可執(zhí)行代碼34生成的結(jié)果儲(chǔ)存在存儲(chǔ)器214中。特別地,PE 212執(zhí)行DP可執(zhí)行代碼34 以將至少一個(gè)變換40應(yīng)用到可索引類型42以生成如圖5所示的并且如上所描述的經(jīng)變換的可索引類型44。具有帶有被優(yōu)化為數(shù)據(jù)并行計(jì)算(即,執(zhí)行DP程序或算法)的硬件架構(gòu)的一個(gè)或多個(gè)計(jì)算資源的計(jì)算節(jié)點(diǎn)211被稱為DP優(yōu)化計(jì)算節(jié)點(diǎn)211。DP優(yōu)化計(jì)算節(jié)點(diǎn)211的示例包括其中處理元件212的集合包含一個(gè)或多個(gè)GPU的節(jié)點(diǎn)、以及其中處理元件212的集合包含通用處理元件102中的SIMD單元集合的節(jié)點(diǎn)。不具有帶有被優(yōu)化為數(shù)據(jù)并行計(jì)算的硬件架構(gòu)的計(jì)算資源的計(jì)算資源的計(jì)算節(jié)點(diǎn)211(即,僅僅具有通用處理元件的處理器封裝102)被稱為非DP優(yōu)化計(jì)算節(jié)點(diǎn)211。在這樣的計(jì)算節(jié)點(diǎn)211中,存儲(chǔ)器214可與存儲(chǔ)器104(諸如,由GPU所使用的GPU存儲(chǔ)器)分離,或可以是存儲(chǔ)器104(諸如,由通用處理元件102中的SIMD單元所使用的存儲(chǔ)器)的一部分。在圖5的實(shí)施例中,計(jì)算機(jī)系統(tǒng)100(圖4中所示)形成主機(jī)計(jì)算節(jié)點(diǎn),該主機(jī)計(jì)算節(jié)點(diǎn)被配置為向計(jì)算節(jié)點(diǎn)211提供DP可執(zhí)行代碼34以供執(zhí)行,以及使用互連114(圖4) 接收由DP可執(zhí)行代碼34所生成的結(jié)果。主機(jī)計(jì)算節(jié)點(diǎn)包括共享一存儲(chǔ)器層級(即,存儲(chǔ)器104)的通用計(jì)算資源(即,處理器封裝102的通用處理元件)的集合。主機(jī)計(jì)算節(jié)點(diǎn)可配置有對稱多處理體系架構(gòu)(SMP),并且也可被配置為使用例如非一致存儲(chǔ)器訪問(NUMA) 體系架構(gòu)來最大化存儲(chǔ)器104的存儲(chǔ)器位置。主機(jī)計(jì)算節(jié)點(diǎn)的OS 122(圖4)被配置為執(zhí)行DP調(diào)用點(diǎn)以使DP可執(zhí)行代碼34被 DP優(yōu)化計(jì)算節(jié)點(diǎn)或非DP優(yōu)化計(jì)算節(jié)點(diǎn)211所執(zhí)行。在存儲(chǔ)器214與存儲(chǔ)器104分離的實(shí)施例中,主機(jī)計(jì)算節(jié)點(diǎn)使DP可執(zhí)行代碼34以及一個(gè)或多個(gè)可索引類型42從存儲(chǔ)器104被復(fù)制到存儲(chǔ)器214。在存儲(chǔ)器104包括存儲(chǔ)器214的實(shí)施例中,主機(jī)計(jì)算節(jié)點(diǎn)可將存儲(chǔ)器 104中的DP可執(zhí)行代碼34和/或一個(gè)或多個(gè)可索引類型42的副本指定為存儲(chǔ)器214,和/ 或可將DP可執(zhí)行代碼34和/或一個(gè)或多個(gè)可索引類型42從存儲(chǔ)器104的一部分復(fù)制到形成存儲(chǔ)器214的存儲(chǔ)器104的另一部分。在計(jì)算節(jié)點(diǎn)211和主機(jī)計(jì)算節(jié)點(diǎn)之間的復(fù)制處理可以是同步點(diǎn),除非被指定為是異步的。主機(jī)計(jì)算節(jié)點(diǎn)和每一個(gè)計(jì)算節(jié)點(diǎn)211可同時(shí)彼此獨(dú)立地執(zhí)行代碼。主機(jī)計(jì)算節(jié)點(diǎn)和每一個(gè)計(jì)算節(jié)點(diǎn)211可在同步點(diǎn)進(jìn)行交互以協(xié)調(diào)節(jié)點(diǎn)計(jì)算。在一個(gè)實(shí)施例中,計(jì)算引擎210表示圖形卡,其中一個(gè)或多個(gè)圖形處理單元(GPU) 包括PE 212和與存儲(chǔ)器104(圖4)分離的存儲(chǔ)器214。在該實(shí)施例中,圖形卡的驅(qū)動(dòng)程序 (未示出)可以將DP可執(zhí)行代碼34的字節(jié)代碼轉(zhuǎn)換成所述GPU的指令集以供所述GPU的 PE 212執(zhí)行。在另一實(shí)施例中,計(jì)算引擎210由一個(gè)或多個(gè)GPU(即PE 212)的組合來形成,所述GPU與一個(gè)或多個(gè)通用執(zhí)行元件以及存儲(chǔ)器104(圖4)的一部分214 —起被包括在處理器封裝102(圖4)中。在該實(shí)施例中,可以在計(jì)算機(jī)系統(tǒng)100上配備附加的軟件來將DP可執(zhí)行代碼;34的字節(jié)代碼轉(zhuǎn)換成處理器封裝102中的GPU的指令集。在另一實(shí)施例中,計(jì)算引擎210由處理器封裝102(圖4)的一個(gè)或多個(gè)執(zhí)行元件中的一個(gè)或多個(gè)SIMD單元以及存儲(chǔ)器104(圖4)的一部分214的組合所形成。在該實(shí)施例中,可以在計(jì)算機(jī)系統(tǒng)100上配備附加的軟件來將DP可執(zhí)行代碼34的字節(jié)代碼轉(zhuǎn)換成處理器封裝102中的SIMD單元的指令集。在又一實(shí)施例中,計(jì)算引擎210由處理器封裝102(圖4)的一個(gè)或多個(gè)執(zhí)行元件的一個(gè)或多個(gè)標(biāo)量處理流水線以及存儲(chǔ)器104(圖4)的一部分214的組合所形成。在該實(shí)施例中,可以在計(jì)算機(jī)系統(tǒng)100上配備附加的軟件來將DP可執(zhí)行代碼34的字節(jié)代碼轉(zhuǎn)換成處理器封裝102中的標(biāo)量處理流水線的指令集。 盡管此處說明并描述了具體實(shí)施例,但本領(lǐng)域技術(shù)人員可以理解,可用各種替換和/或等價(jià)實(shí)現(xiàn)來替換此處示出并描述的具體實(shí)施例而不背離本發(fā)明的范圍。本申請旨在覆蓋此處討論的具體實(shí)施例的任何改編或變型。因此,本發(fā)明旨在僅由權(quán)利要求書及其等效方案來限制。
權(quán)利要求
1.一種由計(jì)算機(jī)系統(tǒng)(100/200)中的編譯器00)所執(zhí)行的方法,所述方法包括在被配置為在一個(gè)或多個(gè)數(shù)據(jù)并行優(yōu)化計(jì)算節(jié)點(diǎn)(211)上執(zhí)行的數(shù)據(jù)并行源代碼(14)中標(biāo)識(shí)可索引類型0 上的兩個(gè)或多個(gè)變換GO)的集合;以及從所述數(shù)據(jù)并行源代碼中生成數(shù)據(jù)并行可執(zhí)行代碼(34),以使得所述數(shù)據(jù)并行可執(zhí)行代碼將在所述可索引類型上的所述兩個(gè)或多個(gè)變換GO)的集合實(shí)現(xiàn)為組合操作。
2.如權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)并行源代碼是用帶有數(shù)據(jù)并行擴(kuò)展的高級通用編程語言來編寫的。
3.如權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)并行源代碼是用高級數(shù)據(jù)并行編程語言來編寫的。
4.如權(quán)利要求1所述的方法,其特征在于,所述兩個(gè)或多個(gè)變換的集合中的至少一個(gè)形成變換范圍模式。
5.如權(quán)利要求1所述的方法,其特征在于,所述兩個(gè)或多個(gè)變換的集合中的至少一個(gè)形成范圍模式。
6.如權(quán)利要求1所述的方法,其特征在于,所述兩個(gè)或多個(gè)變換的集合包括以下中的至少一個(gè)轉(zhuǎn)置、擴(kuò)展、移位、環(huán)狀移位、分片、投射、投影、分裂、暈繞、鄰接、內(nèi)置、分區(qū)、調(diào)整形狀、以及只讀。
7.如權(quán)利要求1所述的方法,其特征在于,所述一個(gè)或多個(gè)數(shù)據(jù)并行優(yōu)化計(jì)算節(jié)點(diǎn)包括至少一個(gè)圖形處理單元。
8.如權(quán)利要求1所述的方法,其特征在于,所述一個(gè)或多個(gè)數(shù)據(jù)并行優(yōu)化計(jì)算節(jié)點(diǎn)包括至少一個(gè)通用處理器。
9.一種存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀儲(chǔ)存介質(zhì)(104/214),所述計(jì)算機(jī)可執(zhí)行指令在由計(jì)算機(jī)系統(tǒng)(100/200)執(zhí)行時(shí)執(zhí)行一種方法,所述方法包括在旨在用于在一個(gè)或多個(gè)數(shù)據(jù)并行優(yōu)化計(jì)算節(jié)點(diǎn)(211)上執(zhí)行的數(shù)據(jù)并行源代碼 (14)中標(biāo)識(shí)應(yīng)用到可索引類型G2)的兩個(gè)或多個(gè)變換^))的序列;以及根據(jù)所述數(shù)據(jù)并行源代碼來生成數(shù)據(jù)并行可執(zhí)行代碼(34),所述數(shù)據(jù)并行可執(zhí)行代碼優(yōu)化了所述可索引類型上的所述兩個(gè)或多個(gè)變換的序列的實(shí)現(xiàn)。
10.如權(quán)利要求9所述的計(jì)算機(jī)可讀儲(chǔ)存介質(zhì),其特征在于,所述兩個(gè)或多個(gè)變換的集合中的至少第一個(gè)形成變換范圍模式。
全文摘要
一高級編程語言提供了用于數(shù)據(jù)并行處理環(huán)境中的可索引類型上的可擴(kuò)展變換集。用于該語言的編譯器將每個(gè)變換實(shí)現(xiàn)為來自可索引類型的映射,以允許每個(gè)變換可被應(yīng)用到其他變換。在編譯時(shí)間,編譯器標(biāo)識(shí)數(shù)據(jù)并行源代碼中的每個(gè)可索引類型上的變換的序列,并生成數(shù)據(jù)并行執(zhí)行代碼以將序列實(shí)現(xiàn)為運(yùn)行時(shí)使用變換映射的組合操作。編譯器也包含優(yōu)化處理,該優(yōu)化處理基于至數(shù)據(jù)并行執(zhí)行代碼的變換序列。
文檔編號(hào)G06F9/45GK102314370SQ20111019261
公開日2012年1月11日 申請日期2011年6月29日 優(yōu)先權(quán)日2010年6月30日
發(fā)明者C·D·卡拉罕二世, L·張, P·F·林塞斯, R·莫洛伊, W·朱, Y·萊瓦諾尼 申請人:微軟公司