用于64位地址模式優(yōu)化的算法
【專(zhuān)利說(shuō)明】用于64位地址模式優(yōu)化的算法
[0001]相關(guān)申請(qǐng)的交叉引用
[0002]本申請(qǐng)要求享有于2011年11月7日提交的、申請(qǐng)?zhí)枮?1/556,782的美國(guó)臨時(shí)專(zhuān)利申請(qǐng)以及于2012年10月24日提交的、申請(qǐng)?zhí)枮?3/659,786的美國(guó)專(zhuān)利申請(qǐng)的優(yōu)先權(quán)。這些申請(qǐng)的每一個(gè)通過(guò)援引并入本文。
技術(shù)領(lǐng)域
[0003]本發(fā)明總地涉及計(jì)算機(jī)處理,并且更具體地,涉及用于64位地址模式優(yōu)化的算法。
【背景技術(shù)】
[0004]開(kāi)發(fā)者使用編譯器從高級(jí)源代碼生成可執(zhí)行程序。典型地,編譯器配置為接收(例如以C++或Java所編寫(xiě)的)程序的高級(jí)源代碼、確定程序?qū)⒃谄渖蠄?zhí)行的目標(biāo)硬件平臺(tái)(例如X86處理器)、以及隨后將高級(jí)源代碼翻譯成可以在目標(biāo)硬件平臺(tái)上執(zhí)行的匯編級(jí)代碼。該配置提供以下優(yōu)點(diǎn):使開(kāi)發(fā)者能夠編寫(xiě)單個(gè)高級(jí)源代碼程序并且隨后指定該程序的目標(biāo)為跨諸如移動(dòng)設(shè)備、個(gè)人計(jì)算機(jī)或服務(wù)器的各種各樣的硬件平臺(tái)而執(zhí)行。
[0005]一般地,編譯器包括三個(gè)部件:前端、中端和后端。前端配置為確保高級(jí)源代碼滿(mǎn)足編程語(yǔ)言語(yǔ)法和語(yǔ)義,由此前端生成高級(jí)源代碼的第一中間表示(IR)。中端配置為接收和優(yōu)化第一 IR,其通常涉及,例如移除第一 IR中所包括的不可達(dá)代碼,如果有的話。在優(yōu)化第一 IR之后,中端生成第二 IR用于后端處理。特別地,后端接收第二 IR并將第二 IR翻譯成匯編級(jí)代碼。
[0006]為了促進(jìn)高效的匯編級(jí)代碼的生成,減少匯編級(jí)代碼中所引用的寄存器數(shù)目和其中所包括的地址計(jì)算代碼量是可取的。一種用來(lái)實(shí)現(xiàn)這些減少的方法在本文中稱(chēng)為“寄存器加偏移量”方法,其涉及生成引用基地址寄存器和常量偏移量的匯編級(jí)指令。例如在CUDA?架構(gòu)中,可以經(jīng)由匯編級(jí)指令“Id.global.f32fl2, [rdl2+64] ”將值從全局存儲(chǔ)器加載到寄存器“Π2”,其中“rdl2”是基地址寄存器且“64”是常量偏移量。根據(jù)該方法,多個(gè)存儲(chǔ)器地址有益地能夠共享相同的基地址寄存器“rdl2”。例如當(dāng)“rdl2”存儲(chǔ)值“16”時(shí),表達(dá)式[rdl2+64]使得存儲(chǔ)在存儲(chǔ)器地址[80]的值被加載到全局存儲(chǔ)器地址“f 12”。類(lèi)似地,當(dāng)“rdl2”存儲(chǔ)值“20”時(shí),表達(dá)式[rdl2+64]使得存儲(chǔ)在存儲(chǔ)器地址[84]的值被加載到全局存儲(chǔ)器地址“Π2”。因此,理想的情況是,編譯器能夠識(shí)別可簡(jiǎn)化為實(shí)現(xiàn)“寄存器加偏移量”方法的匯編級(jí)指令的高級(jí)指令。
[0007]在一些情況下,可根據(jù)以上方法加以簡(jiǎn)化的普遍類(lèi)型的高級(jí)指令包括引用由32位表達(dá)式所偏移的64位基存儲(chǔ)器地址的高級(jí)指令。該格式的示例為“64位基地址+ (uint64_t) (32位表達(dá)式)”,其中32位表達(dá)式(經(jīng)由“uint64_t”類(lèi)型轉(zhuǎn)換符號(hào))被類(lèi)型轉(zhuǎn)換為64位以使得該32位表達(dá)式所得的值是64位。實(shí)現(xiàn)以上格式的高級(jí)指令的示例為“&p+(uint64_t) (-20*x+30*y+1100) ”。鑒于上述“寄存器加偏移量”方法,理想的情況是,確定是否可以從高級(jí)指令中的表達(dá)式“(_20*X+30*y+1100) ”中提取常量偏移量。不幸的是,64位類(lèi)型轉(zhuǎn)換在做出這類(lèi)確定時(shí)引入數(shù)個(gè)復(fù)雜的問(wèn)題,尤其是當(dāng)表達(dá)式包括無(wú)符號(hào)整數(shù)運(yùn)算時(shí)。特別地,數(shù)個(gè)編程語(yǔ)言標(biāo)準(zhǔn),諸如用于C/C++的標(biāo)準(zhǔn),設(shè)計(jì)無(wú)符號(hào)計(jì)算以當(dāng)溢出發(fā)生時(shí)產(chǎn)生環(huán)繞(wrap-around)值。結(jié)果是常規(guī)編譯器時(shí)常不能有效地將合格的高級(jí)指令翻譯為實(shí)現(xiàn)“寄存器加偏移量”方法的匯編級(jí)指令。
[0008]因此,本領(lǐng)域需要允許從高級(jí)指令中提取常量偏移量以將其用在所生成的實(shí)現(xiàn)“寄存器加偏移量”方法的匯編級(jí)指令中的技術(shù)。
【發(fā)明內(nèi)容】
[0009]本發(fā)明的一個(gè)實(shí)施例闡述一種用于從包括在計(jì)算機(jī)程序的高級(jí)源代碼中的64位類(lèi)型轉(zhuǎn)換表達(dá)式中提取存儲(chǔ)器地址偏移量的方法。該方法包括以下步驟:接收64位類(lèi)型轉(zhuǎn)換表達(dá)式,其中64位類(lèi)型轉(zhuǎn)換表達(dá)式包括一個(gè)或多個(gè)32位表達(dá)式;確定用于一個(gè)或多個(gè)32位表達(dá)式中的每一個(gè)的范圍;通過(guò)對(duì)32位表達(dá)式的范圍求和來(lái)計(jì)算總范圍;確定總范圍是用于32位無(wú)符號(hào)整數(shù)的范圍的子集;基于用于一個(gè)或多個(gè)32位表達(dá)式的范圍來(lái)計(jì)算存儲(chǔ)器地址偏移量;以及生成引用存儲(chǔ)器地址偏移量的至少一個(gè)匯編級(jí)指令。
[0010]所公開(kāi)實(shí)施例的一個(gè)優(yōu)勢(shì)是編譯器配置為從計(jì)算機(jī)程序的高級(jí)指令中提取存儲(chǔ)器地址常量偏移量以使得可將其用在實(shí)現(xiàn)本文所述的“寄存器加偏移量”方法的匯編級(jí)指令中。結(jié)果是,存在由計(jì)算機(jī)程序所引用的寄存器數(shù)目的整體減少以及其中所包括的地址計(jì)算的復(fù)雜性的整體下降。有利地,計(jì)算機(jī)程序可以更高效地執(zhí)行在處理器上并且可以允許其他計(jì)算機(jī)程序利用所釋放的寄存器。
【附圖說(shuō)明】
[0011]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實(shí)施例得到對(duì)如上面所簡(jiǎn)要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對(duì)其范圍的限制,本發(fā)明可以具有其他等效的實(shí)施例。
[0012]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖。
[0013]圖2A-2B示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的、用于從計(jì)算機(jī)程序的高級(jí)指令中提取常量偏移量以將其用在實(shí)現(xiàn)“寄存器加偏移量”方法的匯編級(jí)指令中的方法步驟的流程圖。
【具體實(shí)施方式】
[0014]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對(duì)本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒(méi)有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。
[0015]系統(tǒng)概述
[0016]圖1為示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲(chǔ)器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲(chǔ)器104。存儲(chǔ)器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個(gè)或多個(gè)用戶(hù)輸入設(shè)備108 (例如鍵盤(pán)、鼠標(biāo))接收用戶(hù)輸入并且經(jīng)由通信路徑106和存儲(chǔ)器橋105將該輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCI)Express、加速圖形端口或超傳輸鏈路)耦連到存儲(chǔ)器橋105 ;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110的圖形子系統(tǒng),顯示設(shè)備110可以是任意常規(guī)的陰極射線管、液晶顯示器、發(fā)光二極管顯示器等。系統(tǒng)盤(pán)114也連接到I/O橋107并且可以配置為存儲(chǔ)內(nèi)容和應(yīng)用程序和數(shù)據(jù)以由CPU102和并行處理子系統(tǒng)112使用。系統(tǒng)磁盤(pán)114為應(yīng)用程序和數(shù)據(jù)提供非易失性存儲(chǔ)并且可以包括固定的和可移動(dòng)的硬盤(pán)驅(qū)動(dòng)器、閃存設(shè)備以及CD-ROM (光盤(pán)只讀存儲(chǔ)器)、DVD-R0M (數(shù)字多功能光盤(pán)ROM)、藍(lán)光、HD-DVD (高清DVD)或其他磁性、光學(xué)或固態(tài)存儲(chǔ)設(shè)備。
[0017]交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB )或其他端口連接、壓縮磁盤(pán)(⑶)驅(qū)動(dòng)器、數(shù)字多功能光盤(pán)(DVD)驅(qū)動(dòng)器、膠片錄制設(shè)備及類(lèi)似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
[0018]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處