鬼佬大哥大
  • / 8
  • 下載費用:30 金幣  

一種向量點積的OPENCL自動化實現方法.pdf

摘要
申請專利號:

CN201510446624.0

申請日:

2015.07.27

公開號:

CN105068971A

公開日:

2015.11.18

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效IPC(主分類):G06F 17/16申請日:20150727|||公開
IPC分類號: G06F17/16 主分類號: G06F17/16
申請人: 東南大學
發明人: 戚隆寧; 汪晨; 黃少珉
地址: 210096江蘇省南京市四牌樓2號
優先權:
專利代理機構: 南京蘇高專利商標事務所(普通合伙)32204 代理人: 孟紅梅
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201510446624.0

授權公告號:

||||||

法律狀態公告日:

2018.05.15|||2015.12.16|||2015.11.18

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

本發明公開了一種向量點積的OpenCL自動化實現方法,適用于支持OpenCL的處理器,包括如下步驟:(一)輸入OpenCL內核代碼實現向量點積所需的參數信息;(二)根據所輸入的參數信息生成OpenCL內核代碼。本發明通過獲取向量點積的數據類型、向量長度、向量內存分布位置、向量點積次數、點積參數的數據類型以及具體數值,自動生成向量點積的OpenCL內核代碼,適用于向量點積的各種情況,并達到OpenCL內核自動化設計的目的。

權利要求書

1.一種向量點積的OpenCL自動化實現方法,其特征在于,包括如下步驟:(1)輸入OpenCL內核代碼實現向量點積所需的參數信息,所述參數信息包括:向量數據類型、向量長度、向量內存分布位置、點積次數、點積后處理公式、與向量內存分布相對應的點積參數類型和數值;(2)根據所輸入的參數信息生成OpenCL內核代碼。2.根據權利要求1所述的向量點積的OpenCL自動化實現方法,其特征在于,所述步驟(2)中包括:按照向量數據類型、向量長度生成向量定義代碼;按照點積參數類型和數值,生成向量點積參數定義代碼;按照向量內存分布位置,生成向量加載代碼;若點積次數為1,生成一個向量與點積參數之間的點積計算代碼;若點積次數大于1,則生成各個向量與其對應點積參數之間的點積計算代碼,并按照所輸入的點積后處理公式生成各點積結果值的處理代碼。3.根據權利要求1所述的向量點積的OpenCL自動化實現方法,其特征在于,所述向量長度的范圍為1-36,所述向量內存分布位置采用坐標的形式表示,橫坐標和縱坐標的數值范圍為0-35,內存數量與向量長度相等。4.根據權利要求1所述的向量點積的OpenCL自動化實現方法,其特征在于,所述步驟(2)中在生成代碼之前還包括對輸入的參數信息進行校驗的步驟。5.根據權利要求4所述的向量點積的OpenCL自動化實現方法,其特征在于,所述校驗包括數據類型匹配校驗、向量長度匹配校驗、點積次數與向量內存分布位置以及點積參數組數校驗。6.根據權利要求1所述的向量點積的OpenCL自動化實現方法,其特征在于,所述點積次數為1次或2次。

說明書

一種向量點積的OpenCL自動化實現方法

技術領域

本發明涉及向量運算技術,具體涉及一種向量點積的OpenCL自動化實現方法。

背景技術

向量點積運算是使用較為普遍的向量運算,在圖像處理、工業設計等領域被廣泛使用。向量點積運算的形式是行向量與列向量相乘累加,最終得到一個標量結果。向量點積的計算量較大,對計算設備的性能要求較高,不過該運算具有很強的規律性,而且數據之間沒有依賴關系,并行計算成為提高向量點積性能的一種有效手段。

OpenCL是一種面向計算設備的開放運算語言,可用于并行計算的設計。OpenCL符合C99標準,并且針對并行計算的特點進行了擴展,適合于通用計算的開發。OpenCL抽象了硬件特性,提供了統一的開發接口,具有良好的可移植性。

傳統的向量點積OpenCL方法僅僅從某一特定的應用需求出發,完成了一次向量點積運算的OpenCL設計,并沒有充分考慮向量點積的所有特點。傳統的方法使用面非常有限,一旦向量點積的需求增加,就需要重新設計。而且傳統方法沒有規范地設計OpenCL程序,沒有充分考慮設計的性能。因此,需要針對向量點積的特點,定制一套適用的OpenCL自動化實現方法,以充分適應向量點積的各種情況、實現OpenCL內核的自動化設計和規范設計。

發明內容

發明目的:為實現多種形式向量點積OpenCL內核代碼的自動化設計,本發明提供一種向量點積的OpenCL自動化實現方法。

技術方案:為了實現上述目的,本發明采用的技術方案為:

一種向量點積的OpenCL自動化實現方法,包括如下步驟:

(1)輸入OpenCL內核代碼實現向量點積所需的參數信息,所述參數信息包括:向量數據類型、向量長度、向量內存分布位置、點積次數、點積后處理公式、與向量內存分布相對應的點積參數類型和數值;

(2)根據所輸入的參數信息生成OpenCL內核代碼。

進一步地,所述步驟(2)中包括:按照向量數據類型、向量長度生成向量定義代碼;按照點積參數類型和數值,生成向量點積參數定義代碼;按照向量內存分布位置,生成向量加載代碼;若點積次數為1,生成一個向量與點積參數之間的點積計算代碼;若點積次數大于1,則生成各個向量與其對應點積參數之間的點積計算代碼,并按照所輸入的點積后處理公式生成各點積結果值的處理代碼。

進一步地,所述向量長度的范圍為1-36,所述向量內存分布位置采用坐標的形式表示,橫坐標和縱坐標的數值范圍為0-35,內存數量與向量長度相等。

進一步地,所述步驟(2)中在生成代碼之前還包括對輸入的參數信息進行校驗的步驟。所述校驗包括數據類型匹配校驗、向量長度匹配校驗、點積次數與向量內存分布位置以及點積參數組數校驗。

有益效果:本發明從應用角度出發,考慮向量數據類型、向量長度、向量內存分布位置、向量點積次數、點積參數數據類型和數值等向量點積的因素,是針對向量點積應用提出的OpenCL自動化實現方法,能夠達到OpenCL內核自動化設計的目的。

與傳統的向量點積的OpenCL方法相比,本方法具有如下優勢:

(1)充分考慮了向量點積的各種情況。向量點積運算的情況有很多種,向量的數據類型、向量長度、點積參數的數據類型、點積參數等因素在不同的向量點積場景下都不相同。本發明充分考慮可上述影響因素,針對向量點積的特點,設計了向量信息輸入的步驟,較為完整地涵蓋了上述影響因素,可以滿足絕大多數的向量點積需求。

(2)OpenCL代碼生成自動化。傳統的向量點積OpenCL方法根據特定的向量點積情況進行設計,但是向量點積的情況受到很多因素的影響,需要根據需求改動OpenCL代碼。本發明根據向量信息,自動生成OpenCL代碼,可以適用各種向量點積的情況,輔助OpenCL設計。

(3)OpenCL代碼設計規范化。本發明嚴格按照向量點積的步驟生成OpenCL代碼,完全分離的向量數據的加載與計算,可以充分利用內核指令特點,避免了訪存與計算指令的沖突。

綜上所述,對于向量點積的應用,與傳統的OpenCL方法相比,本發明所提出的OpenCL自動化實現方法充分考慮了向量點積的各種影響因素,可以實現代碼的自動化生成,而且設計更加規范。

附圖說明

圖1為本發明實施例的主要流程圖;

圖2為本發明實施例中參數信息輸入流程圖;

圖3為本發明實施例中向量內存分布位置示意圖;

圖4為本發明實施例中內核代碼生成流程圖。

具體實施方式

下面結合附圖進一步解釋本發明。

如圖1所示,本發明實施例公開的一種向量點積的OpenCL自動化實現方法,主要包括:輸入OpenCL內核代碼實現向量點積所需的參數信息和根據所輸入的參數信息生成OpenCL內核代碼兩大步驟。其中,所輸入的參數信息包括向量數據類型、向量長度、向量內存分布位置、點積次數、點積后處理公式、與向量內存分布相對應的點積參數類型和數值。

輸入信息的主要流程如圖2所示,可依次輸入需要進行點積運算的向量的數據類型、長度M、內存分布位置、向量點積次數N、與向量進行點積運算的點積參數數據類型和點積參數的數值。當點積次數為1時,只需輸入一個向量和一組對應的點積參數,當點積次數大于1時,如2次,需要輸入兩個向量和兩組對應的點積參數,并同時提供點積后處理公式,以便得到兩個點積結果后再進一步運算從而得到最終的運算結果。

輸入向量的數據類型,可以是OpenCL標準支持的所有數據類型。輸入向量長度的范圍為1-36。向量的內存分布位置采用坐標的形式表示,以工作項位置為基準點,基準坐標(0,0),后續輸入所需數據的坐標,橫、縱坐標數值范圍是0-35,需要注意的是輸入的內存數量需要等于向量長度。如圖3所示向量內存分布位置為兩行兩列,基準坐標為(0,0),輸入后續輸入坐標(0,1)、(1,0)、(1,1),輸入的內存數量為4個。向量點積次數可以是1次或2次或更多次數,如果向量點積次數為2次,兩次向量點積的結果分別為Gx、Gy,需要輸入點積后處理公式F(Gx,Gy),確定各次向量點積的結果之間的運算關系。向量點積需要輸入與向量內存分布中的每個元素所對應的點積參數,首先輸入點積參數類型,然后按照向量內存分布的坐標位置依次輸入點積參數的數值,并存儲在數組中。點積參數的數據類型可以是短整型、整型、單精度浮點型或雙精度浮點型,四種類型可以滿足絕大多數向量點積的計算需求。點積參數的組數與點積次數相同,如果向量點積次數是2,需要輸入兩組參數。

如示例一,實現一個長度為4的整型向量的1次點積,輸入的參數可分別為:向量數據類型為整型、向量長度為4、內存分布形式為2×2如圖3所示,其位置以坐標(0,0)為基準,描述為(0,1)、(1,0)、(1,1)、向量點積次數為1、點積參數為整型、點積參數為(15、25、33、20);

如示例二,實現兩個長度為4的整型向量的2次點積,求取2次點積結果的積,輸入的參數可分別為:向量數據類型為整型、向量長度為4、內存分布形式為2×2如圖3所示,同示例一(兩個向量的位置分布相同)、向量點積次數為2、點積參數為整型、兩組點積參數分別為(15、25、33、20)、(35、25、15、30)、后處理公式為F(Gx,Gy)=Gx×Gy,其中Gx、Gy分別為兩次向量點積的結果。

生成OpenCL內核代碼的主要流程如圖3所示,主要包括:確定內核參數、確定工作項、確定向量點積參數、加載向量數據、點積計算、多次向量點積之間的計算以及輸出點積結果。

內核的輸入參數為原數據、目標數據的指針,無需輸出參數。OpenCL將基準位置映射到具體的硬件計算單元,并且對應工作項(dx,dy)。向量點積運算需要明確點積參數,根據輸入的點積參數類型和數值,生成向量點積參數定義代碼,并輸出到內核代碼中,如示例一,當整型參數為(15、25、33、20)時,生成內核代碼“intpara[4]={15,20,33,20}”。當點積次數為2時,需要確定兩組點積參數,例如示例二,當兩組整型參數分別為(15、25、33、20)、(35、25、15、30)時,生成內核代碼“intpara_1[4]={15,20,33,20};intpara_2[4]={35,25,15,30}”。讀取向量的數據類型、長度和坐標位置,加載向量數據,生成相應的向量定義和向量數據加載代碼,如示例一滿足圖3所示元素分布,四個元素的位置分別為[dx][dy]、[dx][dy+1]、[dx+1][dy]、[dx+1][dy+1],按照該位置順序加載向量數據。

int4vec_0=src[dx][dy],vec_1=src[dx][dy+1],vec_2=src[dx+1][dy],vec_3=src[dx+1][dy+1],其中src指原數據地址。

數據的加載完成后才可以進行點積計算,如示例一,

int4result=vec_0*para[0];

result+=vec_1*para[1];

result+=vec_2*para[2];

result+=vec_3*para[3];

數據的加載與計算需要完全分離,如果相互混雜,無法充分利用內核指令特點,導致訪存與計算指令的沖突。

例如示例一的訪存與計算代碼為:

int4vec_0=src[dx][dy];

int4result=vec_0*para[0];

int4vec_1=src[dx][dy+1];

result+=vec_1*para[1];

int4vec_2=src[dx+1][dy];

result+=vec_2*para[2];

int4vec_3=src[dx+1][dy+1];

result+=vec_3*para[3];

數據訪存與計算交替進行,導致訪存與計算指令的沖突,內核效率下降。

當需要進行兩次向量點積計算時,需要按照點積后處理公式F(Gx,Gy)進行點積之間的計算,例如示例二,計算公式為F(Gx,Gy)=Gx×Gy,生成內核代碼“F=GX*GY”。完成上述步驟后,輸出點積的結果。

為了更好的生成內核代碼,可對輸入的參數進行校驗以防生成代碼過程中或代碼運行過程中出錯。此處可以根據我們設計的各參數之間的約束關系進行校驗,主要包括:數據類型匹配校驗,如向量數據類型與點積參數數據類型是否支撐運算,點積參數類型與點積參數數值是否匹配;向量長度匹配校驗,如向量內存分布位置包含的內存數目與向量長度是否匹配;參數組數與點積次數匹配校驗,如點積次數與向量內存分布位置組數是否匹配,如點積次數與點積參數組數是否匹配;后處理公式中參數個數匹配等等。

以上所述僅是本發明的優選實施方式,應當指出:對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。

關 鍵 詞:
一種 向量 OPENCL 自動化 實現 方法
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:一種向量點積的OPENCL自動化實現方法.pdf
鏈接地址:http://www.wwszu.club/p-6385978.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
鬼佬大哥大