所述前綴可以是“slave_”前綴。這么做的目的是為了避免運(yùn)算控制核心和運(yùn)算核心的函數(shù)命名沖突。
[0036]第三步驟S3:鏈接器將重命名后第一對(duì)象文件與第二對(duì)象文件鏈接融合為統(tǒng)一的可執(zhí)行程序。
[0037]優(yōu)選地,鏈接融合的具體流程如下:
[0038]a)將運(yùn)算控制核心的文件頭與運(yùn)算核心的文件頭,融合為一個(gè)新的針對(duì)異構(gòu)眾核架構(gòu)的新文件頭。
[0039]b)針對(duì)運(yùn)算控制核心的指令段的第一命名(例如后綴為.text)和運(yùn)算核心的指令段的第二命名(例如后綴為.textl),融合后將保留這兩個(gè)不同的指令段(即運(yùn)算控制核心的指令段和運(yùn)算核心的指令段),并由運(yùn)行支撐環(huán)境自動(dòng)將具有第一命名的指令段指令加載到運(yùn)算控制核心,將具有第二命名的指令段指令加載到運(yùn)算核心。
[0040]c)運(yùn)算控制核心和運(yùn)算核心的數(shù)據(jù)段(.data)融合為一個(gè)統(tǒng)一的數(shù)據(jù)段(.data),作為程序的共享數(shù)據(jù)段。通過(guò)普通方式定義的變量都放在共享數(shù)據(jù)段。
[0041]d)將運(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ǔ)空間上。
[0042]具體地,例如,在運(yùn)算控制核心中,運(yùn)算控制核心支持—thread關(guān)鍵字,通過(guò)—thread定義的變量為運(yùn)算控制核心私有變量,存放在.tdata段。在運(yùn)算核心中,運(yùn)算核心支持—thread和—thread_local關(guān)鍵字,通過(guò)—thread定義的變量為運(yùn)算核心私有變量,存放在.tdata_private段,通過(guò)—thread_local定義的變量為運(yùn)算核心局存變量,存放在.tdata_local段。融合后將保留這三個(gè)段,并由運(yùn)行支撐環(huán)境在程序執(zhí)行前將其分別加載到運(yùn)算控制核心的私有數(shù)據(jù)空間、運(yùn)算核心的私有數(shù)據(jù)空間和運(yùn)算核心的內(nèi)部存儲(chǔ)空間上。
[0043]e)將運(yùn)算控制核心的只讀段(.rodata)和運(yùn)算核心的只讀段(.rodata)融合為一個(gè)只讀段(.rodata)。
[0044]本發(fā)明針對(duì)異構(gòu)眾核的特殊結(jié)構(gòu),實(shí)現(xiàn)了一種能夠自動(dòng)融合異構(gòu)代碼、實(shí)現(xiàn)多層次存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)排放的技術(shù),該技術(shù)大大提升了異構(gòu)眾核芯片的好用性和易用性,用戶只需要編寫針對(duì)運(yùn)算控制核心和運(yùn)算核心的符合編程習(xí)慣的程序,由編譯器來(lái)實(shí)現(xiàn)代碼融合,對(duì)用戶基本透明,并且提供了多種關(guān)鍵字的編譯器支持,方便用戶充分利用異構(gòu)眾核芯片的多級(jí)存儲(chǔ)層次。
[0045]此外,需要說(shuō)明的是,除非特別指出,否則說(shuō)明書中的術(shù)語(yǔ)“第一”、“第二”、“第三”等描述僅僅用于區(qū)分說(shuō)明書中的各個(gè)組件、元素、步驟等,而不是用于表示各個(gè)組件、元素、步驟之間的邏輯關(guān)系或者順序關(guān)系等。
[0046]可以理解的是,雖然本發(fā)明已以較佳實(shí)施例披露如上,然而上述實(shí)施例并非用以限定本發(fā)明。對(duì)于任何熟悉本領(lǐng)域的技術(shù)人員而言,在不脫離本發(fā)明技術(shù)方案范圍情況下,都可利用上述揭示的技術(shù)內(nèi)容對(duì)本發(fā)明技術(shù)方案作出許多可能的變動(dòng)和修飾,或修改為等同變化的等效實(shí)施例。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所做的任何簡(jiǎn)單修改、等同變化及修飾,均仍屬于本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種異構(gòu)代碼融合的編譯和生成方法,其特征在于包括: 第一步驟:利用運(yùn)算控制核心編譯器和運(yùn)算核心編譯器分別為運(yùn)算控制核心和運(yùn)算核心生成第一對(duì)象文件和第二對(duì)象文件; 第二步驟:運(yùn)算核心編譯器自動(dòng)實(shí)現(xiàn)對(duì)第一對(duì)象文件中的函數(shù)的重命名,在函數(shù)名的前加上前綴; 第三步驟:鏈接器將重命名后第一對(duì)象文件與第二對(duì)象文件鏈接融合為統(tǒng)一的可執(zhí)行程序。2.根據(jù)權(quán)利要求1所述的異構(gòu)代碼融合的編譯和生成方法,其特征在于,第一對(duì)象文件和第二對(duì)象文件是后綴為.ο的文件。3.根據(jù)權(quán)利要求1或2所述的異構(gòu)代碼融合的編譯和生成方法,其特征在于,所述前綴是“slave_”前綴。4.根據(jù)權(quán)利要求1或2所述的異構(gòu)代碼融合的編譯和生成方法,其特征在于,鏈接融合包括: 將運(yùn)算控制核心的文件頭與運(yùn)算核心的文件頭,融合為一個(gè)新的針對(duì)異構(gòu)眾核架構(gòu)的新文件頭; 針對(duì)運(yùn)算控制核心的指令段的第一命名和運(yùn)算核心的指令段的第二命名,融合后將保留運(yùn)算控制核心的指令段和運(yùn)算核心的指令段,并由運(yùn)行支撐環(huán)境自動(dòng)將具有第一命名的指令段指令加載到運(yùn)算控制核心,將具有第二命名的指令段指令加載到運(yùn)算核心; 運(yùn)算控制核心和運(yùn)算核心的數(shù)據(jù)段融合為一個(gè)統(tǒng)一的數(shù)據(jù)段,作為程序的共享數(shù)據(jù)段; 將運(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ǔ)空間上; 將運(yùn)算控制核心的只讀段和運(yùn)算核心的只讀段融合為一個(gè)只讀段。5.根據(jù)權(quán)利要求1或2所述的異構(gòu)代碼融合的編譯和生成方法,其特征在于,鏈接融合的具體流程如下: 將運(yùn)算控制核心的文件頭與運(yùn)算核心的文件頭,融合為一個(gè)新的針對(duì)異構(gòu)眾核架構(gòu)的新文件頭; 針對(duì)運(yùn)算控制核心的指令段的后綴.text和運(yùn)算核心的指令段的后綴.textl,融合后將保留運(yùn)算控制核心的指令段和運(yùn)算核心的指令段,并由運(yùn)行支撐環(huán)境自動(dòng)將具有后綴.text的指令段指令加載到運(yùn)算控制核心,將具有后綴.textl的指令段指令加載到運(yùn)算核心。 運(yùn)算控制核心和運(yùn)算核心各自的后綴為.data的數(shù)據(jù)段融合為一個(gè)統(tǒng)一的后綴為.data的數(shù)據(jù)段,作為程序的共享數(shù)據(jù)段; 針對(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ǔ)空間上; 將運(yùn)算控制核心的后綴為.rodata的只讀段和運(yùn)算核心的后綴為.rodata的只讀段融合為后綴為.rodata的一個(gè)只讀段。
【專利摘要】本發(fā)明提供了一種異構(gòu)代碼融合的編譯和生成方法,包括:利用運(yùn)算控制核心編譯器和運(yùn)算核心編譯器分別為運(yùn)算控制核心和運(yùn)算核心生成第一對(duì)象文件和第二對(duì)象文件;運(yùn)算核心編譯器自動(dòng)實(shí)現(xiàn)對(duì)第一對(duì)象文件中的函數(shù)的重命名,在函數(shù)名的前加上前綴;鏈接器將重命名后第一對(duì)象文件與第二對(duì)象文件鏈接融合為統(tǒng)一的可執(zhí)行程序。
【IPC分類】G06F9/45
【公開號(hào)】CN105426226
【申請(qǐng)?zhí)枴緾N201510828419
【發(fā)明人】王飛, 尉紅梅, 沈莉, 管茂林, 漆鋒濱
【申請(qǐng)人】無(wú)錫江南計(jì)算技術(shù)研究所
【公開日】2016年3月23日
【申請(qǐng)日】2015年11月24日