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

一種優(yōu)化模式自動生成方法及優(yōu)化裝置的制造方法_3

文檔序號:9750550閱讀:來源:國知局
使用32K。
[Ο?Ο?] 私有內存為一個work-1tem所獨享,一般對應于寄存器。帶寬最高。
[0107]本地內存和私有內存位于GPU的芯片上,稱為片上內存,是數(shù)據(jù)本地化常用的存儲資源。
[0108]全局內存位于GPU卡上,但在芯片之外(相當于CPU的內存)。
[0109]可以理解的是,除了上述描述的GHJ系統(tǒng)架構,本發(fā)明實施例還可以應用在其他GHJ系統(tǒng)架構上,具體此處不作限定。
[0110]本發(fā)明實施例利用最佳優(yōu)先搜索技術從專家編寫的GHJ優(yōu)化程序中生成優(yōu)化模式。專家在從源程序寫成GPU優(yōu)化程序的過程,實際上是利用程序變換技術從多個維度、多個步驟逐步生成最優(yōu)的GPU程序。本發(fā)明實施例在程序變換庫和其他編譯器分析技術的基礎上,逐步生成從源代碼到目標代碼所用到的優(yōu)化序列,即優(yōu)化模式。
[0111]本發(fā)明實施例應用位于軟件(編譯)層,本發(fā)明實施例中的優(yōu)化裝置主要由編譯器構成,還可以包括其他應用程序,具體此處不作限定。
[0112]為了方便理解本發(fā)明實施例,首先在此介紹本發(fā)明實施例描述中會引入的術語:
[0113]基本塊(Basic Block,BB):程序的中間表示上單進單出的指令序列。
[0114]區(qū)域(reg1n):—個流圖中只具有單個入口節(jié)點的部分。
[0?15] 程序結構:在本設計書中,程序結構是指C程序中的循環(huán)(f or,whi I e,d0..whi Ie)、if等程序區(qū)域。
[0116]本發(fā)明實施例提供了一種優(yōu)化模式自動生成方法及優(yōu)化裝置,用于提高工作效率,節(jié)約人力資源。
[0117]請參閱圖1,本發(fā)明實施例中優(yōu)化模式自動生成方法的一個實施例包括:
[0118]101、優(yōu)化裝置獲取源程序及源程序對應的GPU優(yōu)化程序;
[0119]優(yōu)化裝置獲取源程序,及源程序對應的GPU優(yōu)化程序,其中,源程序是指未經(jīng)編譯的,按照一定的程序設計語言規(guī)范書寫的,人類可讀的文本文件,通常由高級語言編寫,GPU優(yōu)化程序是源程序通過程序變換,從多個維度、多個步驟逐步生成的,該GPU優(yōu)化程序可以是優(yōu)化裝置調用專家分析總結成的知識庫得到的,也可以通過其他方式獲取,具體此處不作限定。
[0120]102、優(yōu)化裝置確定源程序對應的第一基本塊集合,及GPU優(yōu)化程序對應的第二基本塊集合;
[0121]優(yōu)化裝置確定源程序對應的第一基本塊集合,及GPU優(yōu)化程序對應的第二基本塊集合,具體地,優(yōu)化裝置通過編譯器掃描源程序及GPU優(yōu)化程序,將源程序及GPU優(yōu)化程序翻譯成中間表示形式,將源程序及GPU優(yōu)化程序的中間表示按照基本塊定義進行劃分,得到源程序對應的第一基本塊集合,及GPU優(yōu)化程序對應的第二基本塊集合。
[0122]需要說明的是,中間表示是以一種介于源程序語言和機器語言之間的中間語言表示程序的一種形式,其作用是使程序的結構在邏輯上更為簡單明確。中間表示形式可以包括:逆波蘭記號、四元式或三元式,還可以包括其他形式,具體此處不作限定。
[0123]103、優(yōu)化裝置建立第一基本塊集合與第二基本塊集合的第一對應關系;
[0124]優(yōu)化裝置確定源程序對應的第一基本塊集合,及GPU優(yōu)化程序對應的第二基本塊集合后,建立第一基本塊集合與第二基本塊集合的第一對應關系。需要說明的是,本發(fā)明實施例中第一對應關系指的是第一基本塊集合到第二基本塊集合的映射,但是,這里的映射并不是一般定義中的映射,第一基本塊集合中的每一個基本塊不一定都能在第二基本塊集合中找到對應的基本塊,當?shù)谝换緣K集合中的基本塊在第二基本塊集合中找不到對應的基本塊時,該基本塊映射為空。另外,這里第一對應關系指的只是可能的映射關系,即不能確定是否存在映射關系,基本塊之間的對應關系在后續(xù)的過程中可能會發(fā)生變化。
[0125]104、優(yōu)化裝置根據(jù)程序變換庫及第一對應關系輸出多個具有第一對應關系的基本塊對對應的程序變換序列。
[0126]優(yōu)化裝置建立第一對應關系后,根據(jù)程序變換庫及第一對應關系輸出多個具有第一對應關系的基本塊對對應的程序變換序列。需要說明的是,每個基本塊對包含至少一個屬于第一基本塊集合的基本塊,程序變換序列用于優(yōu)化源程序。
[0127]還需要說明的是,程序變換庫可以是優(yōu)化裝置預先建立的,也可以是優(yōu)化裝置從其他裝置中獲取到的,具體此處不作限定。該程序變換庫中的內容包括程序變換的分類及程序變換的特性,按照變換維度可以包括:GI3U任務管理變換(例如數(shù)據(jù)傳輸、認為隊列建立、任務調度和任務組織等),同步控制、數(shù)據(jù)管理(例如全局存儲、常數(shù)存儲、局部存儲和私有存儲的分配使用),向量化并行或傳統(tǒng)的程序變換(例如循環(huán)合并、循環(huán)分裂、循環(huán)展開等),該程序變化庫中還可以包括其他內容,具體此處不作限定。
[0128]優(yōu)化裝置獲取源程序及GPU優(yōu)化程序,確定源程序對應的第一基本塊集合及GPU優(yōu)化程序對應的第二基本塊集合,并建立第一基本塊集合與第二基本塊集合的第一對應關系,根據(jù)預置的程序變換庫及第一對應關系輸出具有該第一對應關系的基本塊對對應的程序變化序列。也就是說,用戶只需要輸入源程序及與該源程序對應的GPU優(yōu)化程序,優(yōu)化裝置就能自動識別出該源程序對應的優(yōu)化模式,不需要人工提取優(yōu)化模式,節(jié)約人力資源。
[0129]基于上述圖1對應的實施例,在本發(fā)明實施例的一些實施例中,優(yōu)化裝置建立第一基本塊集合與第二基本塊集合的第一對應關系可以通過如下方式:
[0130]步驟1、優(yōu)化裝置確定GPU優(yōu)化程序中用于優(yōu)化該源程序的核心程序;
[0131]優(yōu)化裝置利用區(qū)域分析技術對GPU優(yōu)化程序的中間表示進行區(qū)域分析,從而得到GHJ優(yōu)化程序包含的程序結構,例如:主機端控制程序、kerne I函數(shù)、kernel內部的任務分配語句、kernel內部的同步語句、向量讀寫操作和向量計算操作等。而GPU優(yōu)化程序包含的程序結構中存在一些用來支持GHJ并行的程序結構,包括主機控制程序等,這些代碼區(qū)域是用來支持程序在GPU設備上執(zhí)行的,與具體算法本身無關系,優(yōu)化裝置將這些與具體算法無關的程序結構去除掉,即得到GPU優(yōu)化程序中用于優(yōu)化該源程序的核心程序。
[0132]步驟2、優(yōu)化裝置對核心程序進行逆變換得到目標程序;
[0133]優(yōu)化裝置將核心程序中的kerne I程序內聯(lián)到主機端程序中,對kerne I的向量并行計算、向量讀寫操作等kernel內優(yōu)化變換進行分析,根據(jù)分析結果對核心程序進行逆程序變換得到目標程序。
[0134]步驟3、優(yōu)化裝置確定目標程序對應的第三基本塊集合;
[0135]優(yōu)化裝置得到目標程序后,對目標程序的中間表示按照基本塊定義進行劃分得到目標程序對應的第三基本塊集合。
[0136]步驟4、優(yōu)化裝置建立第三基本塊集合中的基本塊與第二基本塊集合中的基本塊之間的等價關系;
[0137]優(yōu)化裝置得到第三基本塊集合后,針對第三基本塊集合中的每一個基本塊,在第二基本塊集合中找到與該基本塊等價的等價基本塊,建立該基本塊與等價基本塊之間的等價關系。
[0138]步驟5、優(yōu)化裝置建立第一基本塊集的基本塊合與第三基本塊集合的基本塊之間的對應關系;
[0139]優(yōu)化裝置在建立第三基本塊集合中的基本塊與第二基本塊集合中的基本塊之間的等價關系的同時,建立第一基本塊集合中基本塊與第三基本塊集合中基本塊之間的對應關系,具體可以通過如下幾種方式:
[0140]方式一、基本塊的程序形式相同。
[0141]優(yōu)化裝置建立第一基本塊集合與第三基本塊集合中程序形式相同的基本塊之間的對應關系,其中程序形式包括三元組及操作數(shù)。
[0142]需要說明的是,三元組是數(shù)據(jù)結構里的概念,主要是用來存儲稀疏矩陣的一種壓縮方式,也叫三元組表。假設以順序存儲結構來表示三元組表,則得到稀疏矩陣富人一種壓縮存儲方式,即三元組順序表,簡稱三元組表。操作數(shù)指出指令執(zhí)行的操作所需要數(shù)據(jù)的來源,是匯編語言指令的一個字段,它規(guī)定了指令中進行數(shù)字運算的量。
[0143]還需要說明的是,這里優(yōu)化裝置建立的對應關系指的是不同集合之間的對應關系。具體地,優(yōu)化裝置確定程序形式相同的第一基本塊與第三基本塊,并建立第一基本塊與第三基本塊之間的對應關系,其中,第一基本塊屬于第一基本塊集合,第三基本塊屬于第三基本塊集合。
[0144]具體地,優(yōu)化裝置可以通過如下方式確定第一基本塊與三基本塊的程序形式相同:
[0145](I)、第一基本塊對應的代碼與第三基本塊對應的代碼相同,例如第一基本塊對應的代碼為:a [Height-1 ] = b[Height_l ]+2,第三基本塊對應的代碼為:a[Height-l] =b[Height-l]+20
[0146](2)、第一基本塊對應的代碼形式與第三基本塊對應的代碼形式相同,如第一基本塊對應的代碼為:a[i]=b[i]+2,第三基本塊對應的代碼為:a[0]=b[0]+2。
[0147](3)、第一基本塊和/或第三基本塊通過預處理后能夠得到兩個程序形式相同的基本塊,例如第一基本塊對應的代碼為:
[0148]^pDst = (*pSrcl+*(pSrcl+l )+*(pSrcl+2)+*(pSrcl+3)
[0149]+*pSrc2+*(pSrc2+l)+*(pSrc2+2)+*(pSrc2+3)
[0150]+*pSrc3+*(pSrc3+l)+*(pSrc3+2)+*(pSrc3+3)
[0151]+*pSrc4+*(pSrc4+l)+*(pSrc4+2)+*(pSrc4+3)+8)>>4;
[0152]pDst++;
[0153]pSrcl+ = 4;pSrc2+ = 4;pSrc3+ = 4;pSrc4+ = 4;
[0154]對第一基本塊進行前向表達式替換得到如下表達式:
[0155]temp+=*pPadSrc+*(pPadSrc+l)+*(pPadSrc+2)+*(pPadSrc+3)+
[0156]*(pPadSrc+3*nWidth)+*(pPadSrc+3*nwidth+l)+*(pPadSrc+3*nWidth+2)
[0157]+*(pPadSrc+3*nwidth+3)+
[0158]*(pPadSrc+2*nWidth)+*(pPadSrc+2*nwidth+l)+*(pPadSrc+2*nWidth+2)
[0159]+*(pPadSrc+2*nwidth+3)+
[0160]*(pPadSrc+3*nWidth)+*(pPadSrc+3*nwidth+l)+*(pPadSrc+3*nWidth+2)
[0161]+*(pPadSrc+3*nwidth+3)0
[0162]第三基本塊對應的代碼為:
[0163]temp+=*pPadSrc+*(pPadSrc+l)+*(pPadSrc+2)+*(pPadSrc+3);
[0164]temp+=*(pPadSrc+nWidth)+*(pPadSrc+nwidth+l)+*(pPadSrc+nWidth+2)+*(pPadSrc+nwidth+3);
[0165]temp+=*(pPadSrc+2*nWidth)+*(pPadSrc+2*nwidth+l)+*(pPadSrc+2*nWidt h+2)+*(pPadSrc+2*nwidth+3);
[0166]temp+=*(pPadSrc+3*nWidth)+*(pPadSrc+3*nwidth+l)+*(pPadSrc+3*nWidt h+2)+*(pPadSrc+3*nwidth+3);
[0167]對第三基本塊進行前向表達式替換得到如下表達式:
[0168]*PDst+ = *pSrc+*(pSrcl+l )+*(pSrc 1+2)+* (pSrc 1+3) +
[0169]*(pSrcl+3*nWidth)+*(pSrcl+3*nwidth+l)+*(pSrcl+3*nWidth+2)
[0170]+*(pSrcl+3*nwidth+3)+
[0171]*(pSrcl+2*nWidth)+*(pSrcl+2*nwidth+l)+*(pSrcl+2*nWidth+2)
[0172]+*(pSrcl+2*nwidth+3)+
[0173]*(pSrcl+3*nWidth)+*(pSrcl+3*nwidth+l)+*(pSrcl+3*nWidth+2)
[0174]+*(pSrcl+3*nwidth+3)o
[0175]方式二、基本塊的程序形式相似度高于預置閾值。
[0176]步驟(I)、優(yōu)化裝置確定源程序對應的第一程序結構集合及目標程序對應的第三程序結構集合;
[0177]具體地,上述步驟102中將源程序翻譯成中間表示后,利用區(qū)域分析技術對源程序的中間表示進行區(qū)域分析,即能得到源程序中包含的程序結構,這些程序結構組成第一程序結構集合。另外通過上述的方式得到目標程序后,對目標程序的中間表示進行區(qū)域分析,即能得到目標程序中包含的程序結構,這些程序結構組成第三程序結構集合。
[0178]步驟(2)、優(yōu)化裝置建立第一程序結構集合中的程序結構與第三程序結構集合中的程序結構之間的程序對應關系;
[0179]確定第一程序結構集合及第三程序結構集合后,優(yōu)化裝置建立第一程序結構集合中的程序結構與第三程序結構集合中的的程序對應關系,需要說明的是,這里的程序對應關系指的是不同集合之間的對應
當前第3頁1 2 3 4 5 6 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
济源市| 宁阳县| 祁连县| 平阳县| 阳江市| 祁东县| 阜平县| 蒲城县| 古丈县| 浦江县| 黑水县| 大姚县| 七台河市| 甘洛县| 内乡县| 治县。| 都昌县| 景德镇市| 金昌市| 广宁县| 奎屯市| 阿拉善盟| 拜泉县| 四子王旗| 呈贡县| 古田县| 大化| 花垣县| 庆元县| 西藏| 宜宾市| 新丰县| 南丰县| 东莞市| 长白| 西乌| 宕昌县| 连南| 那坡县| 庆安县| 棋牌|