国产精品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>

      一種異構(gòu)代碼融合的編譯和生成方法

      文檔序號(hào):9667178閱讀:982來(lái)源:國(guó)知局
      一種異構(gòu)代碼融合的編譯和生成方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種異構(gòu)代碼融合的編譯和生成方法。
      【背景技術(shù)】
      [0002]異構(gòu)眾核是一種比較特殊的芯片,往往配備有功能完備的運(yùn)算控制核心和功能精簡(jiǎn)的運(yùn)算核心,兩種核心具有不同的指令集和不同的存儲(chǔ)層次。為充分利用這兩種不同結(jié)構(gòu)的核心,且使用方便,必須要有一個(gè)統(tǒng)一編址的針對(duì)異構(gòu)眾核的可執(zhí)行程序,使得該程序可以在異構(gòu)眾核芯片上運(yùn)行,并且根據(jù)用戶需求將任務(wù)分配到運(yùn)算控制核心和運(yùn)算核心上,且充分利用異構(gòu)眾核的多個(gè)存儲(chǔ)層次。
      [0003]現(xiàn)有異構(gòu)技術(shù)主要代表是CUDA (Compute Unified Device Architecture,統(tǒng)一計(jì)算架構(gòu))。CUDA 是 NVDIA 的 GPGPU (General-Purpose Computing on Graphics ProcessingUnit,通用圖形處理器單元)模型,它使用C語(yǔ)言為基礎(chǔ),可以直接以大家熟悉的編程語(yǔ)言,寫出在異構(gòu)芯片上執(zhí)行的程序,而不需要學(xué)習(xí)特定的芯片指令或結(jié)構(gòu)。
      [0004]CUDA架構(gòu)下程序往往分成主機(jī)(host)端和設(shè)備(device)端兩個(gè)部分,主機(jī)端是在CPU上執(zhí)行的部分,而設(shè)備端則是在GPU上執(zhí)行的部分。通常需要主機(jī)端程序?qū)?shù)據(jù)準(zhǔn)備好后,復(fù)制到GPU的內(nèi)存,再由GPU執(zhí)行設(shè)備端程序,完成后再由主機(jī)端程序?qū)⒔Y(jié)果從GPU的內(nèi)存中取回。
      [0005]但是,CUDA的顯著缺點(diǎn)是沒(méi)有實(shí)現(xiàn)統(tǒng)一的內(nèi)存模型,數(shù)據(jù)需要在主機(jī)端和設(shè)備端頻繁轉(zhuǎn)移,因此造成訪存延遲而影響程序的運(yùn)行性能。

      【發(fā)明內(nèi)容】

      [0006]本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)中存在上述缺陷,提供一種能夠較好地避免因數(shù)據(jù)復(fù)制造成的訪存延遲的異構(gòu)代碼融合的編譯和生成方法。
      [0007]根據(jù)本發(fā)明,提供了一種異構(gòu)代碼融合的編譯和生成方法,包括:
      [0008]第一步驟:利用運(yùn)算控制核心編譯器和運(yùn)算核心編譯器分別為運(yùn)算控制核心和運(yùn)算核心生成第一對(duì)象文件和第二對(duì)象文件;
      [0009]第二步驟:運(yùn)算核心編譯器自動(dòng)實(shí)現(xiàn)對(duì)第一對(duì)象文件中的函數(shù)的重命名,在函數(shù)名的前加上前綴;
      [0010]第三步驟:鏈接器將重命名后的第一對(duì)象文件與第二對(duì)象文件鏈接融合為統(tǒng)一的可執(zhí)行程序。
      [0011]優(yōu)選地,第一對(duì)象文件和第二對(duì)象文件是后綴為.ο的文件
      [0012]優(yōu)選地,所述前綴是“slave_”前綴。
      [0013]優(yōu)選地,鏈接融合包括:
      [0014]將運(yùn)算控制核心的文件頭與運(yùn)算核心的文件頭,融合為一個(gè)新的針對(duì)異構(gòu)眾核架構(gòu)的新文件頭;
      [0015]針對(duì)運(yùn)算控制核心的指令段的第一命名和運(yùn)算核心的指令段的第二命名,融合后將保留運(yùn)算控制核心的指令段和運(yùn)算核心的指令段,并由運(yùn)行支撐環(huán)境自動(dòng)將具有第一命名的指令段指令加載到運(yùn)算控制核心,將具有第二命名的指令段指令加載到運(yùn)算核心;
      [0016]運(yùn)算控制核心和運(yùn)算核心的數(shù)據(jù)段融合為一個(gè)統(tǒng)一的數(shù)據(jù)段,作為程序的共享數(shù)據(jù)段;
      [0017]將運(yùn)算控制核心支持中的由運(yùn)算控制核心支持的第一關(guān)鍵字所定義的變量作為運(yùn)算控制核心私有變量,存在運(yùn)算控制核心私有段中;將運(yùn)算核心中的第一關(guān)鍵字所定義的變量作為運(yùn)算核心私有變量,存在運(yùn)算核心私有段中;將運(yùn)算核心中的第二關(guān)鍵字所定義的變量作為運(yùn)算核心內(nèi)部變量,存在運(yùn)算核心內(nèi)部段中;而且融合后保留運(yùn)算控制核心私有段、運(yùn)算核心私有段和運(yùn)算核心內(nèi)部段,并且由運(yùn)行支撐環(huán)境在程序執(zhí)行前將運(yùn)算控制核心私有段、運(yùn)算核心私有段和運(yùn)算核心內(nèi)部段,分別加載到運(yùn)算控制核心的私有數(shù)據(jù)空間、運(yùn)算核心的私有數(shù)據(jù)空間和運(yùn)算核心的內(nèi)部存儲(chǔ)空間上;
      [0018]將運(yùn)算控制核心的只讀段和運(yùn)算核心的只讀段融合為一個(gè)只讀段。
      [0019]優(yōu)選地,鏈接融合的具體流程如下:
      [0020]將運(yùn)算控制核心的文件頭與運(yùn)算核心的文件頭,融合為一個(gè)新的針對(duì)異構(gòu)眾核架構(gòu)的新文件頭;
      [0021]針對(duì)運(yùn)算控制核心的指令段的后綴.text和運(yùn)算核心的指令段的后綴.textl,融合后將保留運(yùn)算控制核心的指令段和運(yùn)算核心的指令段,并由運(yùn)行支撐環(huán)境自動(dòng)將具有后綴.text的指令段指令加載到運(yùn)算控制核心,將具有后綴.textl的指令段指令加載到運(yùn)算核心。
      [0022]運(yùn)算控制核心和運(yùn)算核心各自的后綴為.data的數(shù)據(jù)段融合為一個(gè)統(tǒng)一的后綴為.data的數(shù)據(jù)段,作為程序的共享數(shù)據(jù)段;
      [0023]針對(duì)運(yùn)算控制核心支持的—thread關(guān)鍵字,將運(yùn)算控制核心的通過(guò)—thread定義的變量作為運(yùn)算控制核心私有變量,存放在.tdata段;針對(duì)運(yùn)算核心支持—thread和—thread_local關(guān)鍵字,將運(yùn)算核心的通過(guò)—thread定義的變量作為運(yùn)算核心私有變量,存放在.tdata_private段,而且將運(yùn)算核心的通過(guò)—thread_local定義的變量作為運(yùn)算核心局存變量,存放在.tdata_local段;融合后將保留.tdata段、.tdata_private段和.tdata_local段,并由運(yùn)行支撐環(huán)境在程序執(zhí)行前將.tdata段、.tdata_private段和.tdata_local段分別加載到運(yùn)算控制核心的私有數(shù)據(jù)空間、運(yùn)算核心的私有數(shù)據(jù)空間和運(yùn)算核心的內(nèi)部存儲(chǔ)空間上;
      [0024]將運(yùn)算控制核心的后綴為.rodata的只讀段和運(yùn)算核心的后綴為.rodata的只讀段融合為后綴為.rodata的一個(gè)只讀段。
      [0025]本發(fā)明通過(guò)混合鏈接和運(yùn)算節(jié)點(diǎn)程序換名實(shí)現(xiàn)了異構(gòu)代碼融合技術(shù),通過(guò)支持多種關(guān)鍵字來(lái)實(shí)現(xiàn)異構(gòu)數(shù)據(jù)融合,充分利用異構(gòu)眾核芯片的多存儲(chǔ)層次。
      【附圖說(shuō)明】
      [0026]結(jié)合附圖,并通過(guò)參考下面的詳細(xì)描述,將會(huì)更容易地對(duì)本發(fā)明有更完整的理解并且更容易地理解其伴隨的優(yōu)點(diǎn)和特征,其中:
      [0027]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的異構(gòu)代碼融合的編譯和生成方法的流程圖。
      [0028]圖2示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的異構(gòu)代碼融合的編譯和生成方法的示意圖。
      [0029]需要說(shuō)明的是,附圖用于說(shuō)明本發(fā)明,而非限制本發(fā)明。注意,表示結(jié)構(gòu)的附圖可能并非按比例繪制。并且,附圖中,相同或者類似的元件標(biāo)有相同或者類似的標(biāo)號(hào)。
      【具體實(shí)施方式】
      [0030]為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實(shí)施例和附圖對(duì)本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。
      [0031]本發(fā)明通過(guò)生成一種融合兩種針對(duì)不同指令集代碼的可執(zhí)行程序,能夠在異構(gòu)眾核芯片的所有處理器上執(zhí)行,并根據(jù)用戶需求將數(shù)據(jù)排布在相應(yīng)的存儲(chǔ)層次。本發(fā)明通過(guò)將異構(gòu)代碼和數(shù)據(jù)融合成統(tǒng)一的可執(zhí)行程序,運(yùn)算控制核心和運(yùn)算核心的地址空間一致,內(nèi)存共享,除特殊情況外(需要將數(shù)據(jù)在主存和運(yùn)算控制核心局部?jī)?nèi)存之間移動(dòng)的時(shí)候),一般不需要做數(shù)據(jù)的移動(dòng),能較好地避免因數(shù)據(jù)復(fù)制造成的訪存延遲,且便于用戶使用。
      [0032]本發(fā)明主要實(shí)現(xiàn)兩個(gè)技術(shù),一是通過(guò)混合鏈接和運(yùn)算節(jié)點(diǎn)程序換名實(shí)現(xiàn)的異構(gòu)代碼融合技術(shù),二是通過(guò)支持多種關(guān)鍵字來(lái)實(shí)現(xiàn)異構(gòu)數(shù)據(jù)融合,充分利用異構(gòu)眾核芯片的多存儲(chǔ)層次。具體地,圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的異構(gòu)代碼融合的編譯和生成方法的流程圖。圖2示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的異構(gòu)代碼融合的編譯和生成方法的示意圖。
      [0033]如圖1和圖2所示,根據(jù)本發(fā)明優(yōu)選實(shí)施例的異構(gòu)代碼融合的編譯和生成方法包括:
      [0034]第一步驟S1:利用運(yùn)算控制核心編譯器和運(yùn)算核心編譯器分別為運(yùn)算控制核心和運(yùn)算核心生成第一對(duì)象文件和第二對(duì)象文件;例如,第一對(duì)象文件和第二對(duì)象文件是不同的后綴為.ο的文件;在該步驟中,用戶可以編寫符合傳統(tǒng)編程習(xí)慣的代碼即可。
      [0035]第二步驟S2:運(yùn)算核心編譯器自動(dòng)實(shí)現(xiàn)對(duì)第一對(duì)象文件中的函數(shù)的重命名,在函數(shù)名的前加上前綴;例如
      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1