一種優(yōu)化模式自動(dòng)生成方法及優(yōu)化裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,尤其涉及一種優(yōu)化模式自動(dòng)生成方法及優(yōu)化裝置。
【背景技術(shù)】
[0002]近年來,隨著以圖形處理器(Graphics Processing Unit,GPU)技術(shù)為基礎(chǔ)搭建的計(jì)算平臺(tái)的應(yīng)用領(lǐng)域變得越來越廣泛,更多的程序開發(fā)人員需要在GHJ平臺(tái)上進(jìn)行軟件開發(fā),并且需要對(duì)以前的非GPU程序進(jìn)行改寫。相較于以前的主流處理器平臺(tái),例如Intel或者AMD公司的X86處理器,GPU計(jì)算平臺(tái)具有更復(fù)雜的存儲(chǔ)結(jié)構(gòu)和并行執(zhí)行單元集合,這使得在GPU平臺(tái)上編程變得更復(fù)雜,例如,為了使得應(yīng)用程序充分利用GPU的計(jì)算資源,用戶必須學(xué)習(xí)每個(gè)GPU計(jì)算平臺(tái)的體系結(jié)構(gòu)特點(diǎn),并設(shè)計(jì)具體的優(yōu)化方法。
[0003]在由GPU構(gòu)建的計(jì)算平臺(tái)上編寫程序,目前多使用⑶DA或OpenCL編寫程序。CUDA可以使用在包含NVIDIA GPU的平臺(tái)上,而OpenCL可以使用在任意GPU平臺(tái)上,因此OpenCL的適應(yīng)性更加廣泛,一份用OpenCL寫好的代碼可以運(yùn)行在不同的GPU平臺(tái)上,即在A GPU平臺(tái)上可以正確執(zhí)行的OpenCL程序,在B GPU平臺(tái)上也可以正確執(zhí)行。
[0004]將從其他語(yǔ)言編寫的程序(例如C語(yǔ)言程序)變換成一個(gè)優(yōu)化OpenCL程序過程中所進(jìn)行的各種程序變換序列,稱之為優(yōu)化模式。
[0005]如果已經(jīng)知道某個(gè)應(yīng)用程序適合的優(yōu)化模式,那么由程序員或者編譯器來根據(jù)該模式來生成最終的OpenCL程序,將大大降低GPU程序開發(fā)的復(fù)雜度,從而能夠顯著提高GPU平臺(tái)上的程序開發(fā)效率。
[0006]目前,利用模式來優(yōu)化應(yīng)用程序的一個(gè)重要技術(shù)是采用自適應(yīng)調(diào)優(yōu)庫(kù)的形式。由專家程序員將某個(gè)或者某一類算法分析總結(jié)成庫(kù)的形式,然后專家在實(shí)現(xiàn)這些算法時(shí)針對(duì)某些計(jì)算平臺(tái)進(jìn)行有對(duì)性的優(yōu)化以獲取盡可能好的性能,最后,將這些算法的優(yōu)化實(shí)現(xiàn)包裝成庫(kù)的形式,并為用戶提供一個(gè)函數(shù)接口。用戶通過在應(yīng)用程序直接調(diào)用這些庫(kù)函數(shù)接口來利用這些專家的優(yōu)化經(jīng)驗(yàn)。這種技術(shù)方案的一個(gè)代碼表性例子就是BLAS庫(kù),BLAS庫(kù)是一個(gè)線性代碼庫(kù),用以提供標(biāo)量、向量和矩陣之間的相互運(yùn)算。
[0007]基于自適應(yīng)調(diào)優(yōu)庫(kù)的技術(shù)方案將優(yōu)化模式以庫(kù)的形式提供給用戶使用,雖然能夠減輕其他程序員的負(fù)擔(dān),但也優(yōu)化模式的提取需要人工總結(jié),需要耗費(fèi)較多人力資源,并且抽象出的優(yōu)化模式通用性差,通常只能針對(duì)某個(gè)具體算法有效。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實(shí)施例提供了一種優(yōu)化模式自動(dòng)生成方法及優(yōu)化裝置,用于提高工作效率,節(jié)約人力資源。
[0009]有鑒于此,本發(fā)明第一方面提供了一種優(yōu)化模式自動(dòng)生成方法,具體為優(yōu)化裝置獲取源程序以及與源程序?qū)?yīng)的GPU優(yōu)化程序,確定源程序?qū)?yīng)的第一基本塊集合以及GPU優(yōu)化程序?qū)?yīng)的第二基本塊集合,再建立第一基本塊集合與第二基本塊集合的第一對(duì)應(yīng)關(guān)系,根據(jù)程序變換庫(kù)以及對(duì)應(yīng)關(guān)系輸出多個(gè)具有該第一對(duì)應(yīng)關(guān)系的程序變換序列。
[0010]其中,源程序是指未經(jīng)編譯的,案子一定程序設(shè)計(jì)語(yǔ)言規(guī)范書寫的人類可讀文本文件,通過由高級(jí)語(yǔ)言辨析,GHJ優(yōu)化程序是該源程序通過程序變換從多個(gè)維度逐漸生成的,從源程序到GPU優(yōu)化程序所用到的優(yōu)化序列即程序變換序列,即優(yōu)化模式。另外,這里的對(duì)應(yīng)關(guān)系可以包含對(duì)應(yīng)空的情況,也就是第一基本塊集合中的每一個(gè)基本塊不一定都能在第二基本塊集合中找到對(duì)應(yīng)的基本塊,當(dāng)?shù)谝换緣K集合中的基本塊在第二基本塊集合中找不到對(duì)應(yīng)的基本塊時(shí),該基本塊對(duì)應(yīng)空。因此這里具有第一關(guān)系的基本塊對(duì)包含至少一個(gè)屬于第一基本塊集合的基本塊。
[0011]本方案中,優(yōu)化裝置獲取源程序及GPU優(yōu)化程序,確定源程序?qū)?yīng)的第一基本塊集合及GPU優(yōu)化程序?qū)?yīng)的第二基本塊集合,并建立第一基本塊集合與第二基本塊集合的第一對(duì)應(yīng)關(guān)系,根據(jù)預(yù)置的程序變換庫(kù)及第一對(duì)應(yīng)關(guān)系輸出多個(gè)具有該第一對(duì)應(yīng)關(guān)系的基本塊對(duì)對(duì)應(yīng)的程序變換序列。也就是說,用戶只需要輸入源程序及與該源程序?qū)?yīng)的GPU優(yōu)化程序,優(yōu)化裝置就能自動(dòng)識(shí)別出該源程序?qū)?yīng)的優(yōu)化模式,不需要人工提取優(yōu)化模式,節(jié)約人力資源。
[0012]結(jié)合本發(fā)明第一方面,在本發(fā)明第一方面的第一實(shí)施方式中,優(yōu)化裝置根據(jù)程序變換庫(kù)及第一對(duì)應(yīng)關(guān)系輸出多個(gè)具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)對(duì)應(yīng)的程序變換序列的方式具體為:
[0013]優(yōu)化裝置根據(jù)程序變換庫(kù)為具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)分配程序變換序列,如果具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)中屬于第一基本塊集合的基本塊能夠通過對(duì)應(yīng)的程序變換序列得到屬于同一基本塊對(duì)的第二基本塊集合中的基本塊,或通過對(duì)應(yīng)的程序變換序列后基本塊對(duì)應(yīng)的代碼都被消除的情況下,輸出該基本塊對(duì)對(duì)應(yīng)的程序變換序列。
[0014]本發(fā)明實(shí)施例提供了一種優(yōu)化裝置輸出程序變換序列的具體過程,提高了方案的可實(shí)現(xiàn)性。
[0015]結(jié)合本發(fā)明第一方面或本發(fā)明第一方面的第一實(shí)施方式,在本發(fā)明第一方面的第二實(shí)施方式中,優(yōu)化裝置根據(jù)程序變換庫(kù)為具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)分配程序變換序列,如果具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)中屬于第一基本塊集合的基本塊不能夠通過對(duì)應(yīng)的程序變換序列得到屬于同一基本塊對(duì)的第二基本塊集合中的基本塊,或不能夠通過對(duì)應(yīng)的程序變換序列將該基本塊對(duì)應(yīng)的代碼都消除的情況下,對(duì)第一基本塊集合和第二基本塊集合中的基本塊進(jìn)行更新,然后建立更新后的第一基本塊集合的基本塊與更新后的第二基本塊集合的基本塊間的第二對(duì)應(yīng)關(guān)系,再根據(jù)程序變換庫(kù)及第二對(duì)應(yīng)關(guān)系,輸出多個(gè)具有第二對(duì)應(yīng)關(guān)系的基本塊對(duì)對(duì)應(yīng)的程序變換序列,這里第二關(guān)系的定義與前述第一關(guān)系的定義相似,此處不再贅述。
[0016]本發(fā)明實(shí)施例提供了另一種優(yōu)化裝置輸出程序變換序列的具體過程,提高了方案的可實(shí)現(xiàn)性,提高了方案的靈活性。
[0017]結(jié)合本發(fā)明第一方面、本發(fā)明第一方面的第一實(shí)施方式或本發(fā)明第一方面的第二實(shí)施方式,在本發(fā)明第一方面的第三實(shí)施方式中,優(yōu)化裝置建立第一基本塊集合與第二基本塊集合的第一對(duì)應(yīng)關(guān)系具體可以通過如下方式:
[0018]優(yōu)化裝置確定GPU優(yōu)化程序中用于優(yōu)化源程序的核心程序,對(duì)核心程序進(jìn)行逆程序變換得到目標(biāo)程序,確定目標(biāo)程序?qū)?yīng)的第三基本塊集合,建立第三基本塊集合中的基本塊與第二基本塊集合中的基本塊之間的等價(jià)關(guān)系,同時(shí)建立第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系,根據(jù)該等價(jià)關(guān)系及該對(duì)應(yīng)關(guān)系,建立第一基本塊集合與第二基本塊集合的第一對(duì)應(yīng)關(guān)系。
[0019]本發(fā)明實(shí)施例提供了一種優(yōu)化裝置建立第一對(duì)應(yīng)關(guān)系的具體方式,提高了方案的可實(shí)現(xiàn)性。
[0020]結(jié)合本發(fā)明第一方面的第三實(shí)施方式,在本發(fā)明第一方面的第四實(shí)施方式中,優(yōu)化裝置通過如下方式建立第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系:
[0021]優(yōu)化裝置建立第一基本塊集合與第三基本塊集合中程序形式相同的基本塊之間的對(duì)應(yīng)關(guān)系,其中,程序形式包括三元組及操作數(shù),對(duì)應(yīng)關(guān)系指的是不同基本塊集合之間的。三元組是數(shù)據(jù)結(jié)構(gòu)里的概念,主要是用來存儲(chǔ)稀疏矩陣的一種壓縮方式,也叫三元組表。操作數(shù)指出指令執(zhí)行的操作所需要數(shù)據(jù)的來源,是匯編語(yǔ)言指令的一個(gè)字段,它規(guī)定了指令中進(jìn)行數(shù)字運(yùn)算的量。
[0022]本發(fā)明實(shí)施例提供了一種優(yōu)化裝置建立第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系的具體方式,提高了方案的可實(shí)現(xiàn)性。
[0023]結(jié)合本發(fā)明第一方面的第三實(shí)施方式或第四實(shí)施方式,在本發(fā)明第一方面的第五實(shí)施方式中,優(yōu)化裝置可以通過如下方式建立第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系:
[0024]優(yōu)化裝置確定源程序?qū)?yīng)的第一程序結(jié)構(gòu)集合及目標(biāo)程序?qū)?yīng)的第三程序結(jié)構(gòu)集合,建立第一程序結(jié)構(gòu)集合中的程序結(jié)構(gòu)與第三程序結(jié)構(gòu)集合中的程序結(jié)構(gòu)之間的程序?qū)?yīng)關(guān)系,建立至少一個(gè)程序結(jié)構(gòu)區(qū)域,其中每個(gè)程序區(qū)域包至少一對(duì)具有程序?qū)?yīng)關(guān)系的程序結(jié)構(gòu),再建立第一基本塊集合與第三基本塊集合中程序形式相似度高于閾值且屬于同一程序結(jié)構(gòu)區(qū)域的基本塊之間的對(duì)應(yīng)關(guān)系,這里對(duì)應(yīng)關(guān)系指的是不同基本塊集合之間的。
[0025]本發(fā)明實(shí)施例提供了另一種優(yōu)化裝置建立第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系的具體方式,提高了方案的靈活性。
[0026]結(jié)合本發(fā)明第一方面的第三實(shí)施方式、第四實(shí)施方式或第五實(shí)施方式,在本發(fā)明第一方面的第六實(shí)施方式中,優(yōu)化裝置確定GPU優(yōu)化程序中用于優(yōu)化源程序的核心程序過程具體為:
[0027]優(yōu)化裝置確定GPU優(yōu)化程序?qū)?yīng)的第二程序結(jié)構(gòu)集合,確定第二程序結(jié)構(gòu)集合中用于支持GHJ并行的目標(biāo)程序結(jié)構(gòu),從GPU優(yōu)化程序中去掉目標(biāo)程序結(jié)構(gòu)對(duì)應(yīng)的程序代碼,以得到核心程序。
[0028]本發(fā)明實(shí)施例提供了一種優(yōu)化裝置確定核心程序的具體方式,提高了方案的可實(shí)現(xiàn)性。
[0029]結(jié)合本發(fā)明第一方面的第三實(shí)施方式、第四實(shí)施方式、第五實(shí)施方式或第六實(shí)施方式,在本發(fā)明第一方面的第七實(shí)施方式中,優(yōu)化裝置建立第一基本塊集合與第二基本塊集合的對(duì)應(yīng)關(guān)系的過程具體為:
[0030]優(yōu)化裝置確定第一目標(biāo)基本塊集合,其中,第一目標(biāo)基本塊集合是由第二基本塊集合中和第三基本塊集合中具有等價(jià)關(guān)系的基本塊組成的;隨后確定確定第二目標(biāo)基本塊集合,第二目標(biāo)基本塊集合是由第一基本塊集合的子集,這個(gè)子集中的每個(gè)基本塊與第一目標(biāo)基本塊集合中屬于第三基本塊集合中的基本塊具有對(duì)應(yīng)關(guān)系;最后建立第三目標(biāo)基本塊集合與第二目標(biāo)基本塊集合之間的對(duì)應(yīng)關(guān)系,第三目標(biāo)基本塊集合為第一目標(biāo)基本塊集合與第二基本塊集合的交集。
[0031]本發(fā)明實(shí)施例提供了多種優(yōu)化裝置建立第一基本塊集合與第二基本塊集合的對(duì)應(yīng)關(guān)系的具體過程,提高了方案的靈活性。
[0032 ]本發(fā)明第二方面提供了一種優(yōu)化裝置,包括:
[0033]獲取模塊,用于獲取源程序及與源程序?qū)?yīng)的圖形處理器GPU優(yōu)化程序;
[0034]確定模塊,用于確定獲取模塊獲取的源程序?qū)?yīng)的第一基本塊集合,及GPU優(yōu)化程序?qū)?yīng)的第二基本塊集合;
[0035]建立模塊,用于建立確定模塊確定的第一基本塊集合與第二基本塊集合的第一對(duì)應(yīng)關(guān)系;
[0036]輸出模塊,用于根據(jù)程序變換庫(kù)及建立模塊建立的第一對(duì)應(yīng)關(guān)系輸出多個(gè)具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)對(duì)應(yīng)的程序變換序列,每個(gè)基本塊對(duì)包含至少一個(gè)屬于第一基本塊集合的基本塊,程序變換序列用于優(yōu)化源程序。
[0037]本發(fā)明實(shí)施例中,獲取模塊可以獲取源程序及GPU優(yōu)化程序,確定模塊可以確定源程序?qū)?yīng)的第一基本塊集合及GPU優(yōu)化程序?qū)?yīng)的第二基本塊集合,建立模塊可以建立第一基本塊集合與第二基本塊集合的第一對(duì)應(yīng)關(guān)系,輸出模塊可以根據(jù)預(yù)置的程序變換庫(kù)及第一對(duì)應(yīng)關(guān)系輸出多個(gè)具有該第一對(duì)應(yīng)關(guān)系的基本塊對(duì)對(duì)應(yīng)的程序變換序列。也就是說,用戶只需要輸入源程序及與該源程序?qū)?yīng)的GPU優(yōu)化程序,優(yōu)化裝置就能自動(dòng)識(shí)別出該源程序?qū)?yīng)的優(yōu)化模式,不需要人工提取優(yōu)化模式,節(jié)約人力資源。
[0038]結(jié)合本發(fā)明第二方面,在本發(fā)明第二方面的第一實(shí)施方式中,
[0039]輸出模塊,還用于根據(jù)程序變換庫(kù)為具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)分配程序變換序列,在具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)中屬于第一基本塊集合的基本塊能夠通過程序變換序列得到屬于同一基本塊對(duì)的第二基本塊集合中的基本塊或空的情況下,輸出基本塊對(duì)對(duì)應(yīng)的程序變換序列。
[0040]本發(fā)明實(shí)施例提供了一種輸出模塊輸出程序變換序列的具體方式,提高了方案的可實(shí)現(xiàn)性。
[0041]結(jié)合本發(fā)明第二方面或本發(fā)明第二方面的第一實(shí)施方式,在本發(fā)明第二方面的第二實(shí)施方式中,
[0042]輸出模塊,用于根據(jù)程序變換庫(kù)為具有第一對(duì)應(yīng)關(guān)系的基本塊對(duì)分配程序變換序列,在具有第一對(duì)應(yīng)關(guān)系基本塊對(duì)中屬于第一基本塊集合的基本塊不能夠通過程序變換序列得到屬于同一基本塊對(duì)的第二基本塊集合中的基本塊或空的情況下,對(duì)第一基本塊集合和第二基本塊集合中的基本塊進(jìn)行更新;
[0043]建立模塊,還用于建立更新后的第一基本塊集合的基本塊與更新后的第二基本塊集合的基本塊間的第二對(duì)應(yīng)關(guān)系;
[0044]輸出模塊,還用于根據(jù)程序變換庫(kù)及第二對(duì)應(yīng)關(guān)系,輸出多個(gè)具有第二對(duì)應(yīng)關(guān)系的基本塊對(duì)對(duì)應(yīng)的程序變換序列,每個(gè)具有第二對(duì)應(yīng)關(guān)系的基本塊對(duì)包含至少一個(gè)屬于更新后的第一基本塊集合的基本塊。
[0045]本發(fā)明實(shí)施例提供了另一種輸出模塊輸出程序變換序列的具體方式,提高了方案的靈活性。
[0046]結(jié)合本發(fā)明第二方面、本發(fā)明第二方面的第一實(shí)施方式或第二實(shí)施方式,在本發(fā)明第二方面的第三實(shí)施方式中,
[0047]建立模塊,還用于確定GPU優(yōu)化程序中用于優(yōu)化源程序的核心程序,對(duì)確定的核心程序進(jìn)行逆程序變換得到目標(biāo)程序,定確定的目標(biāo)程序?qū)?yīng)的第三基本塊集合,建立第三基本塊集合中的基本塊與第二基本塊集合中的基本塊之間的等價(jià)關(guān)系,同時(shí)建立第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系,根據(jù)等價(jià)關(guān)系及第一基本塊集合中的基本塊與第三基本塊集合中的基本塊之間的對(duì)應(yīng)關(guān)系,建立第一基本塊集合與第二基本塊集合的對(duì)應(yīng)關(guān)系。
[0048]本發(fā)明實(shí)施例提供了一種建立模塊建立第一基本塊集合與第二基本塊集合的具體過程,提高了方案的可實(shí)現(xiàn)性。
[0049]結(jié)合本發(fā)明本發(fā)明第二方面的第三實(shí)施方式,在本發(fā)明第二方面的第四實(shí)施方式中,
[0050]建立模塊,還用于建立第一基本塊集合與第三基本塊集合中程序形式相同的基本塊之間的對(duì)應(yīng)關(guān)系,其中,程序形式包括三元組及操作數(shù)。這里建立模塊建立的對(duì)應(yīng)關(guān)系是不同基本塊集合的基本塊之間的。
[0051]結(jié)合本發(fā)明本發(fā)明第二方面