亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

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

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

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