国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于編譯期間的向量化和存儲(chǔ)器合并的算法

      文檔序號:6495605閱讀:237來源:國知局
      用于編譯期間的向量化和存儲(chǔ)器合并的算法
      【專利摘要】本發(fā)明的一個(gè)實(shí)施例闡述用于減少包括在計(jì)算機(jī)程序中的匯編指令的數(shù)目的技術(shù)。該技術(shù)涉及接收包括多個(gè)節(jié)點(diǎn)的有向無環(huán)圖(DAG),其中每個(gè)節(jié)點(diǎn)包括計(jì)算機(jī)程序的匯編指令,分層次地解析多個(gè)節(jié)點(diǎn)以識(shí)別可向量化的并可由單個(gè)經(jīng)向量化的匯編指令所代替的至少兩個(gè)匯編指令,以及用單個(gè)經(jīng)向量化的匯編指令代替該至少兩個(gè)匯編指令。
      【專利說明】用于編譯期間的向量化和存儲(chǔ)器合并的算法
      [0001]相關(guān)申請的交叉引用
      [0002]本申請要求享有于2011年11月7日提交的、序列號為61/556,782的美國臨時(shí)專利申請以及于2012年10月25日提交的、序列號為13/660,986的美國專利申請的優(yōu)先權(quán)。這些申請的每一個(gè)通過援弓I并入本文。
      【技術(shù)領(lǐng)域】
      [0003]本發(fā)明總地涉及計(jì)算機(jī)處理,并且更具體地,涉及用于編譯期間的向量化和存儲(chǔ)器合并的算法。
      【背景技術(shù)】
      [0004]開發(fā)者使用編譯器從高級源代碼生成可執(zhí)行程序。通常編譯器配置為接收(例如以C++或Java所編寫的)程序的高級源代碼、確定程序?qū)⒃谄渖蠄?zhí)行的目標(biāo)硬件平臺(tái)(例如X86處理器)以及之后將高級源代碼轉(zhuǎn)譯成可以在目標(biāo)硬件平臺(tái)上執(zhí)行的匯編級代碼。該配置提供以下優(yōu)點(diǎn):使開發(fā)者能夠編寫單個(gè)高級源代碼程序并且之后指定該程序的目標(biāo)為跨諸如移動(dòng)設(shè)備、個(gè)人計(jì)算機(jī)或服務(wù)器的各種各樣的硬件平臺(tái)執(zhí)行。
      [0005]一般地,編譯器包括三個(gè)部件:前端、中端和后端。前端配置為確保高級源代碼滿足編程語言語法和語義,由此前端單元生成高級源代碼的第一中間表示(IR)。中端配置為接收和優(yōu)化第一 IR,其通常涉及例如移除第一 IR中所包括的不可達(dá)代碼,如果有的話。優(yōu)化第一 IR之后,中端生成第二 IR用于后端處理。特別地,后端接收第二 IR并將第二 IR轉(zhuǎn)譯成匯編級代碼。
      [0006]匯編級代碼包括可直接執(zhí)行在處理器上的低級匯編指令,該處理器為目標(biāo)硬件平臺(tái)的一部分。很好理解的是,包括在所生成的匯編級代碼中的指令的數(shù)目事實(shí)上可以顯著大于包括在高級源代碼中的指令的數(shù)目。例如,簡單的高級源代碼指令“x=y+z”將可能被編譯為一系列匯編指令,該一系列匯編指令將包括用于以下各項(xiàng)的指令:將y和z的值加載到包括在目標(biāo)硬件平臺(tái)中的存儲(chǔ)器子系統(tǒng)的寄存器中、執(zhí)行存儲(chǔ)在寄存器中的值的加法以及將值的和存儲(chǔ)到另一個(gè)寄存器中。盡管處理器能夠快速執(zhí)行這些匯編指令中的每一個(gè),但是匯編指令可引用相同或相似的存儲(chǔ)器區(qū)域,如以下在示例中所闡述的,其在目標(biāo)硬件平臺(tái)內(nèi)引入執(zhí)行冗余和/或低效。
      [0007]例如,考慮第一、第二、第三和第四匯編指令,其導(dǎo)致處理器與存儲(chǔ)器子系統(tǒng)接口并讀取分別存儲(chǔ)在存儲(chǔ)器位置的第一、第二、第三和第四相鄰段中的數(shù)據(jù)。還考慮單個(gè)匯編指令-本文稱為“經(jīng)向量化的”匯編指令-可以用來代替第一、第二、第三和第四指令。特別地,這類單個(gè)經(jīng)向量化的匯編指令當(dāng)執(zhí)行時(shí)將開發(fā)利用可用的大帶寬存儲(chǔ)器操作,其將導(dǎo)致處理器同時(shí)讀取分別存儲(chǔ)在存儲(chǔ)器位置的第一、第二、第三和第四段的數(shù)據(jù),從而將執(zhí)行匯編指令所要求的處理器周期的數(shù)目減少四倍。不幸地,傳統(tǒng)的編譯器不包括識(shí)別這些冗余和實(shí)現(xiàn)代碼替換的邏輯。
      [0008]因此,本領(lǐng)域需要的是用于生成更高效的匯編代碼的技術(shù)。
      【發(fā)明內(nèi)容】

      [0009]本發(fā)明的一個(gè)實(shí)施例闡述一種用于減少包括在計(jì)算機(jī)程序中的匯編指令的數(shù)目的方法。該方法包括以下步驟:接收包括多個(gè)節(jié)點(diǎn)的有向無環(huán)圖(DAG),其中每個(gè)節(jié)點(diǎn)包括計(jì)算機(jī)程序的匯編指令,分層次地解析多個(gè)節(jié)點(diǎn)以識(shí)別可向量化的并可由單個(gè)經(jīng)向量化的匯編指令所代替的至少兩個(gè)匯編指令,以及用單個(gè)經(jīng)向量化的匯編指令代替該至少兩個(gè)匯編指令。
      [0010]所公開的實(shí)施例的一個(gè)優(yōu)勢是編譯器自動(dòng)識(shí)別可通過向量化被簡化的計(jì)算機(jī)程序的匯編指令。特別地,編譯器用經(jīng)向量化的匯編指令代替所識(shí)別的匯編指令,從而減少處理器執(zhí)行程序所要求的周期的數(shù)目。此外,結(jié)果是處理器和存儲(chǔ)器子系統(tǒng)之間的帶寬可以被更高效地利用以及實(shí)現(xiàn)能耗的減少和對正在訪問存儲(chǔ)器子系統(tǒng)的其他實(shí)體的帶寬可用性增加。
      【專利附圖】

      【附圖說明】
      [0011]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實(shí)施例得到對如上面所簡要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對其范圍的限制,本發(fā)明可以具有其他等效的實(shí)施例。
      [0012]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖。
      [0013]圖2A-2B示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于生成更高效的匯編指令集以執(zhí)行的方法步驟的流程圖。
      [0014]圖3A-3H示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的、如何將圖2A-2B的方法步驟應(yīng)用到示范性的有向無環(huán)圖(DAG)。
      【具體實(shí)施方式】
      [0015]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。
      [0016]系統(tǒng)概述
      [0017]圖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è)用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(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可以是任何傳統(tǒng)的陰極射線管、液晶顯示器、發(fā)光二極管顯示器等。系統(tǒng)盤114也連接到I/O橋107并且可以配置為存儲(chǔ)內(nèi)容和應(yīng)用程序和數(shù)據(jù)以由CPU102和并行處理子系統(tǒng)112使用。系統(tǒng)盤114為應(yīng)用程序和數(shù)據(jù)提供非易失性存儲(chǔ)并且可以包括固定的和可移動(dòng)的硬盤驅(qū)動(dòng)器、閃存設(shè)備以及⑶-ROM (光盤只讀存儲(chǔ)器)、DVD-ROM (數(shù)字多功能光盤ROM)、藍(lán)光、HD-DVD (高清DVD)或其他磁性、光學(xué)或固態(tài)存儲(chǔ)設(shè)備。
      [0018]交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮磁盤(CD)驅(qū)動(dòng)器、數(shù)字多功能光盤(DVD)驅(qū)動(dòng)器、膠片錄制設(shè)備等也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
      [0019]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時(shí)保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個(gè)實(shí)施例中,可以將并行處理子系統(tǒng)112與一個(gè)或多個(gè)其他系統(tǒng)元件集成在單個(gè)子系統(tǒng)中,諸如結(jié)合存儲(chǔ)器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。
      [0020]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包括一個(gè)或多個(gè)并行處理單元(PTO),每個(gè)并行處理單元都耦連到本地并行處理(PP)存儲(chǔ)器。一般地,并行處理子系統(tǒng)112包括U個(gè)PPU,其中U>=1。在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或所有PI3U是具有渲染管線的圖形處理器,渲染管線可配置為經(jīng)由存儲(chǔ)器橋105和第二通信路徑113實(shí)施與以下各項(xiàng)相關(guān)的各種操作:從由CPU102和/或系統(tǒng)存儲(chǔ)器104所提供的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù)、與本地并行處理存儲(chǔ)器(其可用作包括例如傳統(tǒng)幀緩沖區(qū)的圖形存儲(chǔ)器)相互作用以存儲(chǔ)并更新像素?cái)?shù)據(jù)、傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110等。在一些實(shí)施例中,并行處理子系統(tǒng)112可以包括操作為圖形處理器的一個(gè)或多個(gè)PPU或用于通用計(jì)算的一個(gè)或多個(gè)其他PPU。PPU可以相同或不同,并且每個(gè)PPU可以具有專用并行處理存儲(chǔ)器設(shè)備或不具有專用并行處理存儲(chǔ)器設(shè)備。
      [0021]應(yīng)該理解,圖1的系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、CPU102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲(chǔ)器104直接連接到CPU102而不是通過橋,并且其他設(shè)備經(jīng)由存儲(chǔ)器橋105和CPU102與系統(tǒng)存儲(chǔ)器104通信。在其他替代性拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU102,而不是連接到存儲(chǔ)器橋105。而在其他實(shí)施例中,I/O橋107和存儲(chǔ)器橋105可能被集成到單個(gè)芯片上而不是作為一個(gè)或多個(gè)分立設(shè)備存在。大型實(shí)施例可以包括兩個(gè)或兩個(gè)以上的CPU102以及兩個(gè)或兩個(gè)以上的并行處理子系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O橋 107。
      [0022]編譯中的向量化和存儲(chǔ)器合并
      [0023]如本文所更詳細(xì)闡述的,本發(fā)明涉及執(zhí)行在圖1的計(jì)算機(jī)系統(tǒng)100上的編譯器150,其配置為實(shí)現(xiàn)對組成特定計(jì)算機(jī)程序的匯編指令進(jìn)行簡化的算法。具體地,編譯器150配置為接收存儲(chǔ)匯編指令的節(jié)點(diǎn)的有向無環(huán)圖(DAG)。通過代表存儲(chǔ)在節(jié)點(diǎn)中的匯編指令之間的依賴性的各有向邊,DAG中的節(jié)點(diǎn)的每一個(gè)連接到DAG中的另一個(gè)節(jié)點(diǎn)。僅出于示例性的目的,示范性的匯編指令集在圖3A中示出為代碼352,以及代表這些匯編指令以及在指令之間的依賴性的DAG的示例在圖3A中示出為原始DAG300。如上所述,編譯器150處理所接收的DAG以識(shí)別可被減少為更簡單、更高效的指令的匯編指令。以下為編譯器150處理DAG的方式的詳細(xì)描述。
      [0024]圖2A-2B示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的、用于生成更高效的匯編指令集以執(zhí)行的方法步驟的流程圖。盡管結(jié)合圖1的系統(tǒng)描述了該方法步驟,但是本領(lǐng)域普通技術(shù)人員應(yīng)該理解配置為以任何次序?qū)嵤┰摲椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
      [0025]如所示的,方法200始于步驟202,其中編譯器150接收包括多個(gè)節(jié)點(diǎn)和在節(jié)點(diǎn)之間的有向邊的有向無環(huán)圖(DAG),其中每個(gè)節(jié)點(diǎn)包括匯編指令。如圖3A所示,每個(gè)節(jié)點(diǎn)與指向不同節(jié)點(diǎn)以代表該節(jié)點(diǎn)的匯編指令對不同節(jié)點(diǎn)的匯編指令具有的依賴性的至少一個(gè)有向邊相關(guān)聯(lián)。另外,DAG的示例在圖3A中示出為原始DAG300,以及代碼352(從其獲得原始DAG300)的匯編指令之間的各依賴性,其由節(jié)點(diǎn)之間的方向邊所代表。
      [0026]在步驟204,編譯器150生成“未處理”集、“就緒”集和“止用”集。這些集中的每一個(gè)配置為對DAG的節(jié)點(diǎn)進(jìn)行臨時(shí)存儲(chǔ)。在步驟206,編譯器150將DAG中的全部節(jié)點(diǎn)添加到“未處理”集。以此方式,“未處理”集被初始化以包括所接收的DAG的全部匯編指令,由此編譯器150開始解析“未處理”集以根據(jù)步驟208的標(biāo)準(zhǔn)識(shí)別被認(rèn)為是獨(dú)立的匯編指令,在以下進(jìn)行描述。
      [0027]在步驟208,編譯器150解析“未處理”集中的節(jié)點(diǎn)以識(shí)別I)不具有任何前驅(qū)(predecessor)的節(jié)點(diǎn),或者2)其前驅(qū)已經(jīng)全部移動(dòng)到“止用”集的節(jié)點(diǎn)。關(guān)于1),編譯器150解析每個(gè)節(jié)點(diǎn)以識(shí)別僅具有向外邊的節(jié)點(diǎn),例如圖3A所示的節(jié)點(diǎn)“tid.x”、“4”、“PARAM0”、“4”、“8”和“12”。值得注意的是,在步驟208的第一次執(zhí)行期間,“止用”集尚不包括任何節(jié)點(diǎn),所以僅識(shí)別不具有任何前驅(qū)的I)節(jié)點(diǎn)。
      [0028]在步驟210,編譯器150確定根據(jù)步驟208的標(biāo)準(zhǔn)是否有任何節(jié)點(diǎn)被識(shí)別。如果在步驟210編譯器150確定根據(jù)步驟208的標(biāo)準(zhǔn)有節(jié)點(diǎn)被識(shí)別,那么方法200前進(jìn)到步驟212,在以下進(jìn)行描述。否則,因?yàn)闆]有根據(jù)本文所述的技術(shù)可被減少的匯編指令,所以方法200結(jié)束。
      [0029]在步驟212,編譯器150將在步驟208所識(shí)別的節(jié)點(diǎn)從“未處理”集移動(dòng)到“就緒”集。圖3A和圖3B之間示出了該移動(dòng)的示例,其涉及將三個(gè)不同的節(jié)點(diǎn)從“未處理”集移動(dòng)到“就緒”集。在步驟214,編譯器150解析“就緒”集中的節(jié)點(diǎn)并將包括不可向量化的匯編指令的每個(gè)節(jié)點(diǎn)移動(dòng)到“止用”集。圖3B將包括不可向量化的匯編指令的各節(jié)點(diǎn)示出為不可向量化的節(jié)點(diǎn)356。
      [0030]在步驟216,編譯器150針對“就緒”集中的每個(gè)節(jié)點(diǎn)將包括基于加載的匯編指令的節(jié)點(diǎn)分組到“加載”集中,并將包括基于存儲(chǔ)的匯編指令的節(jié)點(diǎn)分組到“存儲(chǔ)”集中。
      [0031]在步驟218,編譯器150解析被分組在“加載”集中的節(jié)點(diǎn)并合并包括在節(jié)點(diǎn)中的匯編指令以用經(jīng)向量化的匯編指令代替該匯編指令。根據(jù)一個(gè)實(shí)施例,編譯器150配置為通過識(shí)別加載彼此相鄰的存儲(chǔ)器地址的匯編指令來對匯編指令進(jìn)行向量化。為了簡潔,下面的技術(shù)描述其中僅兩個(gè)匯編指令被識(shí)別并引用相鄰存儲(chǔ)器地址的場景;然而,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到本發(fā)明的實(shí)施例可擴(kuò)展為考慮對更大數(shù)目的匯編指令進(jìn)行向量化。[0032]在一個(gè)實(shí)施例中,如果I)第一匯編指令所引用的存儲(chǔ)器地址為“[a]”的形式-以及第一匯編指令加載“η”字節(jié)的數(shù)據(jù),2)第二匯編指令所引用的存儲(chǔ)器地址為“ [a+n] ”的形式,以及3) “a”與“2*n”對齊,則編譯器150識(shí)別兩個(gè)匯編指令可組合為一個(gè)經(jīng)向量化的匯編指令。如果滿足這些標(biāo)準(zhǔn),那么編譯器150用經(jīng)向量化的匯編指令代替第一匯編指令和第二匯編指令,該經(jīng)向量化的匯編指令當(dāng)執(zhí)行時(shí)導(dǎo)致存儲(chǔ)器地址[a]和[a+n] 二者分別與第一匯編指令和第二匯編指令中所指定的數(shù)據(jù)同時(shí)加載。圖3F和3G之間示出了對匯編指令進(jìn)行向量化的示例。特別地,在圖3F中,四個(gè)節(jié)點(diǎn)引用可被向量化為單個(gè)的、經(jīng)向量化的匯編加載指令的不同匯編加載指令。因此,在圖3G中,用單個(gè)的、經(jīng)向量化的匯編指令(“VLD4[Idx] ”)代替四個(gè)單獨(dú)的加載命令。
      [0033]在步驟220,編譯器150解析被分組在“存儲(chǔ)”集中的節(jié)點(diǎn)并合并包括在節(jié)點(diǎn)中的匯編指令以用經(jīng)向量化的指令代替匯編指令。步驟220由編譯器150根據(jù)與上述關(guān)于步驟218所描述的相同技術(shù)來實(shí)行。然而,因?yàn)椴襟E220針對存儲(chǔ)數(shù)據(jù)的匯編指令,所以用于代替匯編指令的任何經(jīng)向量化的指令導(dǎo)致由所代替的匯編指令所指定的存儲(chǔ)器地址被同時(shí)讀取。
      [0034]在步驟222,編譯器150將“就緒”集中的所有不可向量化的節(jié)點(diǎn)移動(dòng)到“止用”集,由此方法200返回步驟208。在該點(diǎn)處,節(jié)點(diǎn)可已經(jīng)添加到“止用”集,其可導(dǎo)致“未處理”集中的新的節(jié)點(diǎn)按照步驟208的標(biāo)準(zhǔn)2)被識(shí)別。例如,在圖3B中,匯編指令“SHL”和“LOAD”的全部前驅(qū)已經(jīng)添加到“止用”集,所以“SHL”和“LOAD”按照步驟208的標(biāo)準(zhǔn)2)被識(shí)別。
      [0035]因此,執(zhí)行方法步驟208-222直到“未處理”集中的全部節(jié)點(diǎn)已經(jīng)移入“止用”集為止。結(jié)果是,止用集中的節(jié)點(diǎn)可以說明節(jié)點(diǎn)的簡化的DAG,其匯編指令比包括在步驟202所接收的DAG中的節(jié)點(diǎn)的匯編指令更高效地執(zhí)行。
      [0036]圖3A-3H示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的、圖2A-2B的方法200對圖3A的原始DAG300的執(zhí)行。另外,原始DAG300基于包括在代碼352中的指令,其中匯編指令(即節(jié)點(diǎn))之間的有向邊代表匯編指令之間的依賴性。如圖3A所示,根據(jù)圖2A的步驟206將原始DAG300的全部節(jié)點(diǎn)添加到“未處理”集,其通過鑰354來捕捉。
      [0037]圖3B示出了方法步驟208-222的第一次執(zhí)行,其中根據(jù)步驟208的標(biāo)準(zhǔn)六個(gè)匯編指令被識(shí)別。六個(gè)所識(shí)別的匯編指令都不是可向量化的,所以將它們添加到止用集,如圖3C所示。圖3C還示出了由方法步驟208-222的第二次執(zhí)行所識(shí)別的下兩個(gè)匯編指令:“SHL”和“LOAD”。另外,這兩個(gè)匯編指令都不是可向量化的,所以將它們添加到“止用”集,如圖3D所示。圖3D還示出了由方法步驟208-222的第三次執(zhí)行所識(shí)別的下一個(gè)匯編指令:“ADD”。另外,該匯編指令不是可向量化的,所以將該匯編指令添加到“止用”集,如圖3E所示。圖3E還示出了由方法步驟208-222的第四次執(zhí)行所識(shí)別的下四個(gè)匯編指令:“ADD”、"LOAD[Idx] ”、“ADD”和“ADD”。在這四個(gè)匯編指令中,“LOAD[Idx] ”匯編指令是可向量化的,所以不將該匯編指令移動(dòng)到“止用”集。然而,三個(gè)“ADD”匯編指令不是可向量化的,所以將它們移動(dòng)到“止用”集。圖3F示出了這類移動(dòng)。
      [0038]根據(jù)方法步驟208-222的第五次執(zhí)行,編譯器150識(shí)別可向量化的三個(gè)匯編指令:“L0AD[Idx+4] ”、“L0AD[Idx+8] ”、“LOAD[Idx+12] ”。因此,根據(jù)步驟 218,這些匯編指令-隨著保留在“就緒”集中的“ LOAD [ I dx] ”匯編指令一起,被用圖3G中示出為“ VLD4 [ I dx] ”的單個(gè)經(jīng)向量化的匯編指令所代替。最后,將匯編指令“VLD[Idx] ”添加到“止用”集,如圖3H所示。因此,包括在原始DAG300中的匯編指令的數(shù)目減少三個(gè),其提高代碼352的總效率。
      [0039]總之,本發(fā)明的實(shí)施例闡述用于減少包括在計(jì)算機(jī)程序中的匯編指令的數(shù)目的技術(shù)。編譯器150接收包括多個(gè)節(jié)點(diǎn)的有向無環(huán)圖(DAG),其中每個(gè)節(jié)點(diǎn)通過有向邊連接到至少一個(gè)其他節(jié)點(diǎn)并包括計(jì)算機(jī)程序的匯編指令。將節(jié)點(diǎn)從“未處理”集移動(dòng)到“就緒”集,然后到“止用”集。特別地,識(shí)別不具有任何前驅(qū)的“未處理”集中的節(jié)點(diǎn)-或者其前驅(qū)已經(jīng)全部移動(dòng)到“止用”集的“未處理”集中的節(jié)點(diǎn)-并將其移入“就緒”集。之后編譯器150處理“就緒”集中的節(jié)點(diǎn)并用一個(gè)或多個(gè)經(jīng)向量化的匯編指令代替可向量化的匯編指令。之后將節(jié)點(diǎn)移動(dòng)到“止用”集,由此重復(fù)前述技術(shù)直到全部節(jié)點(diǎn)已被處理并已移入“止用”集。
      [0040]本文所公開的技術(shù)的一個(gè)優(yōu)勢是由編譯器150自動(dòng)檢查所編譯的匯編指令用于附加的優(yōu)化機(jī)會(huì)。具體地,編譯器150能夠檢測可用更少或更簡單的經(jīng)向量化的匯編指令代替的可向量化的匯編指令。以此方式,計(jì)算機(jī)程序所包括的指令的總數(shù)目可以潛在地減少,其提高計(jì)算機(jī)程序的總執(zhí)行效率。此外,更少或更高效的匯編指令導(dǎo)致任何被分派以執(zhí)行計(jì)算機(jī)程序的處理器的周期更少,其與能量節(jié)省直接相關(guān)。
      [0041]本發(fā)明的一個(gè)實(shí)施例可被實(shí)施為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實(shí)施例的各功能(包括本文中描述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上。示出的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括但不限于:(i)不可寫入的存儲(chǔ)介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲(chǔ)器設(shè)備,諸如可由光盤只讀存儲(chǔ)器(CD-ROM)驅(qū)動(dòng)器讀取的CD-ROM盤、閃存、只讀存儲(chǔ)器(ROM)芯片或任何類型的固態(tài)非易失性半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)永久性信息jP(ii)可寫入的存儲(chǔ)介質(zhì)(例如,磁盤驅(qū)動(dòng)器或硬盤驅(qū)動(dòng)器內(nèi)的軟盤或者任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)可更改的信息。
      [0042]以上已參照特定實(shí)施例對本發(fā)明進(jìn)行了描述。然而,本領(lǐng)域技術(shù)人員將理解的是,可對此做出各種修改和變化,而不脫離如隨附權(quán)利要求書中所闡述的本發(fā)明的較寬精神和范圍。因此,前面的描述以及附圖應(yīng)被視為是示例性的而非限制性的。
      [0043]因此,本發(fā)明的實(shí)施例的范圍由以下權(quán)利要求闡述。
      【權(quán)利要求】
      1.一種用于減少包括在計(jì)算機(jī)程序中的匯編指令的數(shù)目的方法,包括:接收包括多個(gè)節(jié)點(diǎn)的有向無環(huán)圖(DAG),其中每個(gè)節(jié)點(diǎn)包括所述計(jì)算機(jī)程序的匯編指令;分層次地解析所述多個(gè)節(jié)點(diǎn)以識(shí)別可向量化的并能由單個(gè)經(jīng)向量化的匯編指令所代替的至少兩個(gè)匯編指令;以及用所述單個(gè)經(jīng)向量化的匯編指令代替所述至少兩個(gè)匯編指令。
      2.根據(jù)權(quán)利要求1所述的方法,其中分層次地解析所述多個(gè)節(jié)點(diǎn)包括:將所述多個(gè)節(jié)點(diǎn)拷貝到第一節(jié)點(diǎn)集中;確定所述至少兩個(gè)節(jié)點(diǎn)為:不具有任何前驅(qū)的節(jié)點(diǎn),或者其前驅(qū)已經(jīng)全部移動(dòng)到第二節(jié)點(diǎn)集的節(jié)點(diǎn);將所述至少兩個(gè)節(jié)點(diǎn)移動(dòng)到第三節(jié)點(diǎn)集;以及從所述第三節(jié)點(diǎn)集移除不包括可向量化的匯編指令的全部節(jié)點(diǎn)。
      3.根據(jù)權(quán)利要求2所述的方法,其中代替所述至少兩個(gè)匯編指令進(jìn)一步包括將所述至少兩個(gè)節(jié)點(diǎn)從所述第三節(jié)點(diǎn)集移動(dòng)到所述第二節(jié)點(diǎn)集。
      4.根據(jù)權(quán)利要求2所述的方法,其中從所述第三節(jié)點(diǎn)集移除不包括可向量化的匯編指令的全部節(jié)點(diǎn)包括將所述節(jié)點(diǎn)的一些而非全部從所述第三節(jié)點(diǎn)集移動(dòng)到所述第二節(jié)點(diǎn)集。
      5.根據(jù)權(quán)利要求2所述的方法,進(jìn)一步包括將所述至少兩個(gè)節(jié)點(diǎn)分組到加載存儲(chǔ)器操作組或者存儲(chǔ)存儲(chǔ)器操作組中。
      6.根據(jù)權(quán)利要求1所述的方法,其中識(shí)別所述至少兩個(gè)匯編指令是可向量化的包括:識(shí)別與所述至少兩個(gè)匯編指令相關(guān)聯(lián)的、引用存儲(chǔ)在第一存儲(chǔ)器地址處的η字節(jié)數(shù)據(jù)的第一匯編指令;識(shí)別與所述至少兩個(gè)匯編指令相關(guān)聯(lián)的、引用偏離所述第一存儲(chǔ)器地址η字節(jié)的第二存儲(chǔ)器地址的第二匯編指令;以及確定所述第一存儲(chǔ)器地址以等于η字節(jié)數(shù)據(jù)的兩倍的值開始。
      7.根據(jù)權(quán)利要求6所述的方法,其中所述經(jīng)向量化的匯編指令當(dāng)執(zhí)行時(shí)導(dǎo)致所述第一存儲(chǔ)器地址和所述第二存儲(chǔ)器地址大體上同時(shí)被引用。
      8.根據(jù)權(quán)利要求6所述的方法,其中通過將第一值寫入所述第一存儲(chǔ)器地址以及將第二值寫入所述第二存儲(chǔ)器地址來引用所述第一存儲(chǔ)器地址和所述第二存儲(chǔ)器地址。
      9.根據(jù)權(quán)利要求6所述的方法,其中通過從所述第一存儲(chǔ)器地址讀取第一值以及從所述第二存儲(chǔ)器地址讀取第二值來引用所述第一存儲(chǔ)器地址和所述第二存儲(chǔ)器地址。
      10.一種用于減少包括在計(jì)算機(jī)程序中的匯編指令的數(shù)目的系統(tǒng),所述系統(tǒng)包括:處理器,其配置為:接收包括多個(gè)節(jié)點(diǎn)的有向無環(huán)圖(DAG),其中每個(gè)節(jié)點(diǎn)包括所述計(jì)算機(jī)程序的匯編指令;分層次地解析所述多個(gè)節(jié)點(diǎn)以識(shí)別可向量化的并能由單個(gè)經(jīng)向量化的匯編指令所代替的至少兩個(gè)匯編指令;以及用所述單個(gè)經(jīng)向量化的匯編指令代替所述至少兩個(gè)匯編指令。
      【文檔編號】G06F9/45GK103608774SQ201280029582
      【公開日】2014年2月26日 申請日期:2012年11月6日 優(yōu)先權(quán)日:2011年11月7日
      【發(fā)明者】維諾德·格羅弗, 曼朱納斯·庫德魯, 麥克爾·墨菲 申請人:輝達(dá)公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
      1