欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種跨平臺(tái)程序轉(zhuǎn)譯方法及裝置

文檔序號(hào):40436219發(fā)布日期:2024-12-24 15:10閱讀:11來源:國(guó)知局
一種跨平臺(tái)程序轉(zhuǎn)譯方法及裝置

本發(fā)明涉及計(jì)算機(jī)軟件和編譯器,并特別涉及一種跨平臺(tái)程序轉(zhuǎn)譯方法、裝置、存儲(chǔ)介質(zhì)、計(jì)算機(jī)程序產(chǎn)品和電子設(shè)備。


背景技術(shù):

1、隨著神經(jīng)網(wǎng)絡(luò)工作負(fù)載對(duì)計(jì)算需求的持續(xù)增長(zhǎng),深度學(xué)習(xí)加速器(dla)最近受到了極大的關(guān)注。事實(shí)上,一些常見的深度學(xué)習(xí)加速器dla(例如,具有tensor?core的nvidiagpu、google?tpu、graphcore?ipu和cambricon?mlu)已經(jīng)被部署在像microsoft、google和amazon這樣的云服務(wù)和互聯(lián)網(wǎng)服務(wù)公司的數(shù)據(jù)中心中。然而,盡管這些設(shè)備在工業(yè)界得到了廣泛部署,但這種異構(gòu)數(shù)據(jù)中心存在兩個(gè)主要問題:(1)編程難度大。dla因其極高的并行性、復(fù)雜的內(nèi)存層次結(jié)構(gòu)和特殊的指令集架構(gòu)(isa)而使得編程尤為困難;(2)硬件利用率低。異構(gòu)數(shù)據(jù)中心的總體硬件利用率通常很低,因?yàn)闉橐粋€(gè)平臺(tái)(深度學(xué)習(xí)加速器)編寫的程序(深度學(xué)習(xí)程序、智能應(yīng)用程序、kernel函數(shù)、核函數(shù))不能直接在另一個(gè)平臺(tái)上運(yùn)行,即便該平臺(tái)當(dāng)前未被占用。理想情況下,如果我們只需要編寫一次程序,并能在不同的dla上運(yùn)行,即實(shí)現(xiàn)“一次編寫,到處運(yùn)行”,那么就可以解決數(shù)據(jù)中心中異構(gòu)dla的編程難題和利用率問題。

2、為了解決這一問題,源到源程序轉(zhuǎn)譯(transcompilation)成為了一個(gè)有吸引力的解決方案。理想的轉(zhuǎn)譯系統(tǒng)可以實(shí)現(xiàn)“一次編寫,到處運(yùn)行”的目標(biāo),即開發(fā)者只需編寫一次代碼,即可在不同的dla平臺(tái)上運(yùn)行,無需針對(duì)每種硬件手動(dòng)調(diào)整和優(yōu)化。然而,盡管這一目標(biāo)具有重要的實(shí)際意義,但現(xiàn)有的轉(zhuǎn)譯技術(shù)仍面臨諸多挑戰(zhàn)。

3、現(xiàn)有的dla程序轉(zhuǎn)譯方法主要可以分為三類:基于規(guī)則的方法、符號(hào)合成方法和數(shù)據(jù)驅(qū)動(dòng)的方法。

4、(1)基于規(guī)則的方法需要專家為不同的編程語言和平臺(tái)手動(dòng)定義一系列的轉(zhuǎn)換規(guī)則,如抽象語法樹(ast)的轉(zhuǎn)換規(guī)則,然后利用模式匹配技術(shù)來解析輸入的源程序。然而,這種方法的缺點(diǎn)在于需要大量的專家手工定義規(guī)則,且難以適應(yīng)快速發(fā)展的硬件新技術(shù)。

5、(2)符號(hào)合成方法,如利用smt(satisfiability?modulo?theories)求解器的搜索式程序合成,盡管能夠在理論上保證生成代碼的語義正確性,但這類方法往往計(jì)算成本高昂,難以擴(kuò)展到大型通用程序。此外,這些方法通常也需要精確指定輸入的約束條件,這對(duì)于非專家用戶來說是一個(gè)較大的障礙。

6、(3)數(shù)據(jù)驅(qū)動(dòng)的方法通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)來生成代碼,近年來由于神經(jīng)機(jī)器翻譯技術(shù)的成功而變得越來越流行。它使用序列到序列的模型自動(dòng)翻譯c++、java和python程序。盡管這種方法可以減少人工參與,并在某些情況下能快速生成代碼,但它們?cè)诠δ苷_性和生成程序的性能方面往往無法與專家手動(dòng)優(yōu)化的代碼相匹敵。

7、總之,盡管當(dāng)前的深度學(xué)習(xí)加速器編程和轉(zhuǎn)譯技術(shù)在實(shí)際應(yīng)用中已取得一定的進(jìn)展,但它們?cè)诔绦虻囊浦残?、正確性和性能等方面仍存在不足。這些技術(shù)挑戰(zhàn)正是本研究所要解決的核心問題,也是推動(dòng)深度學(xué)習(xí)加速器技術(shù)進(jìn)一步發(fā)展的關(guān)鍵所在。

8、上述程序轉(zhuǎn)譯的策略包括的三大類:基于規(guī)則的方法、數(shù)據(jù)驅(qū)動(dòng)的方法和符號(hào)合成方法。基于規(guī)則的方法需要專家定義的轉(zhuǎn)換規(guī)則,通常針對(duì)特定的語言對(duì)。例如,fcuda是一個(gè)將cuda代碼自動(dòng)轉(zhuǎn)換為fpga可執(zhí)行代碼的轉(zhuǎn)譯器。fcuda定義了一套數(shù)據(jù)通信、計(jì)算優(yōu)化和并行映射的轉(zhuǎn)換規(guī)則,這些規(guī)則基于抽象語法樹(ast)進(jìn)行模式匹配,最終用于cuda到fpga的轉(zhuǎn)譯,這些技術(shù)依賴于手動(dòng)創(chuàng)建的專用轉(zhuǎn)換規(guī)則。這個(gè)方法需要對(duì)源語言和目標(biāo)語言都有深入的了解,而且需要大量的專家手動(dòng)代價(jià)。

9、數(shù)據(jù)驅(qū)動(dòng)的方法,通過從監(jiān)督或非監(jiān)督的語料庫(kù)中訓(xùn)練神經(jīng)網(wǎng)絡(luò),繼機(jī)器翻譯的成功之后獲得了關(guān)注。利用序列到序列模型在c++、java和python之間進(jìn)行翻譯。近期的工作利用大型語言模型(如codex、starcoder、codegen、codet5、codegeex、llama、gemini和gpt-4)進(jìn)行程序轉(zhuǎn)譯,表現(xiàn)出優(yōu)異的性能。然而,這些方法雖然人力成本低,往往不能確保翻譯代碼的功能正確性,特別是在不同dla之間。

10、符號(hào)合成是第三類方法,它從特定領(lǐng)域語言(dsl)或輸入輸出對(duì)生成語義正確的代碼。c2taco利用引導(dǎo)枚舉合成器,通過自動(dòng)生成的輸入輸出示例將c張量代碼翻譯到tacodsl。雖然這些方法在小規(guī)模項(xiàng)目中有效,但它們嚴(yán)重依賴于成本高昂的基于搜索的smt求解器,并面臨在較大、現(xiàn)實(shí)世界應(yīng)用中的局限性。

11、總之,現(xiàn)有技術(shù)需要大量的專家人力勞動(dòng)開銷,面臨功能不正確的挑戰(zhàn),或者可擴(kuò)展性有限,因此無法自動(dòng)在具有不同編程模型的dla之間翻譯程序。


技術(shù)實(shí)現(xiàn)思路

1、本發(fā)明提出了一個(gè)神經(jīng)符號(hào)合成框架,其中翻譯作為一系列l(wèi)lm輔助的轉(zhuǎn)換進(jìn)行,并通過小規(guī)模的符號(hào)合成確保每個(gè)轉(zhuǎn)換的功能等效性,從而能夠?qū)崿F(xiàn)無需人工干預(yù)的全自動(dòng)轉(zhuǎn)譯、保證功能正確的轉(zhuǎn)譯和能解決通用程序的轉(zhuǎn)譯方法。本發(fā)明的目的是解決上述現(xiàn)有技術(shù)的自動(dòng)化、正確性和通用性問題,提出了一種基于神經(jīng)符號(hào)合成的跨平臺(tái)程序轉(zhuǎn)譯方法及系統(tǒng)。

2、針對(duì)現(xiàn)有技術(shù)的不足,如圖8所示,本發(fā)明提出一種跨平臺(tái)程序轉(zhuǎn)譯方法,其中包括:

3、并行化步驟,獲取用于在源平臺(tái)運(yùn)行的源程序,通過大語言模型將源程序中并行內(nèi)置變量轉(zhuǎn)換為基于循環(huán)指令的串行程序,根據(jù)目標(biāo)平臺(tái)深度學(xué)習(xí)加速器的硬件性能,將該串行程序進(jìn)行循環(huán)分割并通過目標(biāo)平臺(tái)的內(nèi)置并行變量綁定到目標(biāo)平臺(tái),得到輸入代碼;

4、存儲(chǔ)轉(zhuǎn)換步驟,檢查該輸入代碼的存儲(chǔ)使用情況,并根據(jù)預(yù)設(shè)的存儲(chǔ)層次來對(duì)該輸入代碼的存儲(chǔ)進(jìn)行裝飾,得到輸入程序;

5、張量化步驟,將該輸入程序中存在的張量運(yùn)算還原成標(biāo)量計(jì)算,使用該目標(biāo)平臺(tái)的張量運(yùn)算指令重新表達(dá)該標(biāo)量計(jì)算,得到用于在該目標(biāo)平臺(tái)運(yùn)行的目的程序,該目標(biāo)平臺(tái)的深度學(xué)習(xí)加速器運(yùn)行該目的程序,得到運(yùn)行結(jié)果。

6、所述的跨平臺(tái)程序轉(zhuǎn)譯方法,其中該并行化步驟包括:

7、通過大語言模型將源程序中并行內(nèi)置變量轉(zhuǎn)換為基于循環(huán)指令的串行程序后,對(duì)串行程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的串行程序執(zhí)行基于符號(hào)合成的修復(fù)處理;

8、根據(jù)該硬件性能中的集群和核心數(shù),將該串行程序進(jìn)行循環(huán)分割,對(duì)分割結(jié)果程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的分割結(jié)果程序執(zhí)行基于符號(hào)合成的修復(fù)處理;

9、將該分割結(jié)果程序進(jìn)行并行化,通過目標(biāo)平臺(tái)的內(nèi)置并行變量綁定到目標(biāo)平臺(tái),得到輸入代碼,對(duì)輸入代碼進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的輸入代碼執(zhí)行基于符號(hào)合成的修復(fù)處理。

10、所述的跨平臺(tái)程序轉(zhuǎn)譯方法,其中該存儲(chǔ)轉(zhuǎn)換步驟包括:

11、利用大語言模型的知識(shí)理解該源程序的計(jì)算語義,檢索編程手冊(cè)獲取該計(jì)算語義的存儲(chǔ)空間需求,借助大語言模型執(zhí)行對(duì)該輸入代碼的讀寫進(jìn)行裝飾,以將緩沖區(qū)映射到目標(biāo)平臺(tái)mlu的存儲(chǔ)空間;對(duì)該輸入程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的輸入程序執(zhí)行基于符號(hào)合成的修復(fù)處理。

12、所述的跨平臺(tái)程序轉(zhuǎn)譯方法,其中該張量化步驟包括:

13、識(shí)別該輸入程序中原始標(biāo)量訪存或運(yùn)算操作所對(duì)應(yīng)的程序區(qū)域,從編程手冊(cè)中檢索內(nèi)置張量指令的描述和示例以對(duì)程序進(jìn)行標(biāo)記,采用大語言模型對(duì)標(biāo)記的程序進(jìn)行轉(zhuǎn)換以重新表達(dá)該標(biāo)量計(jì)算;對(duì)該目的程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的目的程序執(zhí)行基于符號(hào)合成的修復(fù)處理。

14、所述的跨平臺(tái)程序轉(zhuǎn)譯方法,其中該修復(fù)處理包括:

15、根據(jù)循環(huán)索引或變量名稱確定進(jìn)行程序變換的局部程序片段,通過二分查找的方法來比較變換前后的程序執(zhí)行軌跡,確定錯(cuò)誤程序片段;

16、枚舉出該錯(cuò)誤程序片段中各循環(huán)索引變量、循環(huán)邊界、變量大小或張量語義的約束,輸入符號(hào)合成求解器,將求解出的程序片段替換該錯(cuò)誤程序片段。

17、如圖9所示,本發(fā)明還提出了一種跨平臺(tái)程序轉(zhuǎn)譯裝置,其中包括:

18、并行化模塊,獲取用于在源平臺(tái)運(yùn)行的源程序,通過大語言模型將源程序中并行內(nèi)置變量轉(zhuǎn)換為基于循環(huán)指令的串行程序,根據(jù)目標(biāo)平臺(tái)深度學(xué)習(xí)加速器的硬件性能,將該串行程序進(jìn)行循環(huán)分割并通過目標(biāo)平臺(tái)的內(nèi)置并行變量綁定到目標(biāo)平臺(tái),得到輸入代碼;

19、存儲(chǔ)轉(zhuǎn)換模塊,檢查該輸入代碼的存儲(chǔ)使用情況,并根據(jù)預(yù)設(shè)的存儲(chǔ)層次來對(duì)該輸入代碼的存儲(chǔ)進(jìn)行裝飾,得到輸入程序;

20、張量化模塊,將該輸入程序中存在的張量運(yùn)算還原成標(biāo)量計(jì)算,使用該目標(biāo)平臺(tái)的張量運(yùn)算指令重新表達(dá)該標(biāo)量計(jì)算,得到用于在該目標(biāo)平臺(tái)運(yùn)行的目的程序,該目標(biāo)平臺(tái)的深度學(xué)習(xí)加速器運(yùn)行該目的程序,得到運(yùn)行結(jié)果。

21、所述的跨平臺(tái)程序轉(zhuǎn)譯裝置,其中該并行化模塊包括:

22、通過大語言模型將源程序中并行內(nèi)置變量轉(zhuǎn)換為基于循環(huán)指令的串行程序后,對(duì)串行程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的串行程序執(zhí)行基于符號(hào)合成的修復(fù)處理;

23、根據(jù)該硬件性能中的集群和核心數(shù),將該串行程序進(jìn)行循環(huán)分割,對(duì)分割結(jié)果程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的分割結(jié)果程序執(zhí)行基于符號(hào)合成的修復(fù)處理;

24、將該分割結(jié)果程序進(jìn)行并行化,通過目標(biāo)平臺(tái)的內(nèi)置并行變量綁定到目標(biāo)平臺(tái),得到輸入代碼,對(duì)輸入代碼進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的輸入代碼執(zhí)行基于符號(hào)合成的修復(fù)處理;

25、該存儲(chǔ)轉(zhuǎn)換模塊包括:

26、利用大語言模型的知識(shí)理解該源程序的計(jì)算語義,檢索編程手冊(cè)獲取該計(jì)算語義的存儲(chǔ)空間需求,借助大語言模型執(zhí)行對(duì)該輸入代碼的讀寫進(jìn)行裝飾,以將緩沖區(qū)映射到目標(biāo)平臺(tái)mlu的存儲(chǔ)空間;對(duì)該輸入程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的輸入程序執(zhí)行基于符號(hào)合成的修復(fù)處理;

27、該張量化模塊包括:

28、識(shí)別該輸入程序中原始標(biāo)量訪存或運(yùn)算操作所對(duì)應(yīng)的程序區(qū)域,從編程手冊(cè)中檢索內(nèi)置張量指令的描述和示例以對(duì)程序進(jìn)行標(biāo)記,采用大語言模型對(duì)標(biāo)記的程序進(jìn)行轉(zhuǎn)換以重新表達(dá)該標(biāo)量計(jì)算;對(duì)該目的程序進(jìn)行單元測(cè)試,對(duì)未通過單元測(cè)試的目的程序執(zhí)行基于符號(hào)合成的修復(fù)處理;

29、該修復(fù)處理包括:

30、根據(jù)循環(huán)索引或變量名稱確定進(jìn)行程序變換的局部程序片段,通過二分查找的方法來比較變換前后的程序執(zhí)行軌跡,確定錯(cuò)誤程序片段;

31、枚舉出該錯(cuò)誤程序片段中各循環(huán)索引變量、循環(huán)邊界、變量大小或張量語義的約束,輸入符號(hào)合成求解器,將求解出的程序片段替換該錯(cuò)誤程序片段。

32、本發(fā)明還提出了一種電子設(shè)備,其中包括所述的一種跨平臺(tái)程序轉(zhuǎn)譯裝置,且該電子設(shè)備或連接有信息顯示設(shè)備,該信息顯示設(shè)備用于以用戶設(shè)置的顯示參數(shù)、屬性或通過人工智能模型,顯示該運(yùn)行結(jié)果。

33、本發(fā)明還提出了一種存儲(chǔ)介質(zhì),用于存儲(chǔ)一種執(zhí)行所述跨平臺(tái)程序轉(zhuǎn)譯方法的計(jì)算機(jī)程序。

34、本發(fā)明還提出了一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,其中該計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)任一所述跨平臺(tái)程序轉(zhuǎn)譯方法的步驟。

35、由以上方案可知,本發(fā)明的優(yōu)點(diǎn)在于:

36、本發(fā)明提出的跨平臺(tái)程序轉(zhuǎn)譯方法是第一個(gè)能夠在各種不同的深度學(xué)習(xí)加速器上完成全自動(dòng)程序轉(zhuǎn)譯的工作。具體來說:

37、我們?cè)谒姆N不同的深度學(xué)習(xí)加速器(dla)及其編程接口上進(jìn)行了實(shí)驗(yàn),包括使用c語言的intel?dl?boost、使用cuda?c代碼的nvidia?gpu、使用hip代碼的amd?mi以及使用bang?c代碼的cambricon?mlu。結(jié)果顯示,本發(fā)明正確地翻譯了不同dla程序,平均功能準(zhǔn)確率達(dá)到了95%,這顯著優(yōu)于現(xiàn)有的基于大型語言模型和符號(hào)合成方法的技術(shù)(它們的功能正確性平均只有15%)。此外,轉(zhuǎn)譯程序的性能甚至達(dá)到了其對(duì)應(yīng)專家手工優(yōu)化程序的101%。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
玉树县| 济南市| 津南区| 明光市| 宿松县| 樟树市| 汉源县| 留坝县| 突泉县| 五原县| 德化县| 林州市| 五指山市| 襄城县| 南昌市| 邓州市| 武宁县| 彰化县| 共和县| 康乐县| 万盛区| 南澳县| 林口县| 方山县| 贵州省| 都江堰市| 仁化县| 宜昌市| 佛冈县| 玛沁县| 灌阳县| 醴陵市| 上思县| 通河县| 桐城市| 东源县| 合川市| 民权县| 广东省| 思茅市| 团风县|