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

一種基于GPU片上的數(shù)據處理方法與流程

文檔序號:11654088閱讀:364來源:國知局
一種基于GPU片上的數(shù)據處理方法與流程

本發(fā)明是關于計算機領域,具體涉及數(shù)據分析和并行計算領域,尤其涉及一種基于gpu片上的數(shù)據處理方法。



背景技術:

gpu早期用于圖形處理,之后逐漸用于一般的計算任務,利用gpu的眾核特性進行并行計算,加速任務處理。雖然gpu的每個性能在計算能力上弱于cpu的性能,但其內核數(shù)量遠多于cpu內核。實驗表明,對于一般可并行的計算任務而言,gpu的性能可達到cpu的數(shù)十倍。由于gpu結構的特殊性,一般用于對可高度并行的任務進行加速,而對于其他任務的加速效果可能尚不足以彌補cpu與gpu之間轉換所消耗的代價。通常情況下,在多數(shù)實際系統(tǒng)部署中,任務處理以cpu為主,其中可高度并行的部分使用gpu處理,提高任務處理速度。

由于gpu的計算吞吐率的增長速度遠大于其片下存儲帶寬的增長,因此要充分合理的利用片上存儲才能有效的利用gpu的計算資源。不同gpu片上存儲的容量增長速度不同,如寄存器文件的容量增長速度比共享資源的容量增長速度快很多,因此在一個gpu上的最優(yōu)化執(zhí)行代碼并不一定適用于其他gpu。現(xiàn)有的gpu程序性能優(yōu)化方法主要通過修改gpu程序代碼,受限于應用程序類別和gpu設備參數(shù),該優(yōu)化方法的通用性和可移植性較差。

對于應用開發(fā)者而言,手動調節(jié)片上存儲的問題主要表現(xiàn)在:一是gpu的三類片上存儲均對性能有所影響,但對于某個應用中指定的數(shù)據元素而言,很難確定合適的片上存儲資源的分配情況;二是不同時期gpu之間資源的發(fā)展是非線性的,因此不同gpu的最優(yōu)化片上資源使用情況也不同。



技術實現(xiàn)要素:

本發(fā)明提出一種gpu片上的數(shù)據處理方法,對給定的gpu程序自動進行片上存儲空間的優(yōu)化,從而提高gpu程序的處理性能。

為了達到上述目的,本發(fā)明采用的技術方案為:

一種基于gpu片上的數(shù)據處理方法,包括以下步驟:分析gpu程序代碼,統(tǒng)計當前gpu片上共享存儲空間的所有數(shù)組變量;將統(tǒng)計得到的所有數(shù)組變量按訪問次數(shù)排序;選擇訪問次數(shù)最高的數(shù)組變量從共享存儲空間遷移到寄存器或l1緩存;若遷移后的系統(tǒng)性能優(yōu)于遷移前的性能,則從共享存儲空間中遷移出更多的數(shù)組變量,否則終止。

優(yōu)選的,統(tǒng)計當前gpu片上共享存儲空間的所有數(shù)組變量,包括采用變量統(tǒng)計流程(collectarray)統(tǒng)計當前gpu程序中存儲在片上共享存儲空間的所有數(shù)組變量。

優(yōu)選的,變量統(tǒng)計流程(collectarray)包括:分析編程序代碼;找出其中所有存儲在片上共享存儲空間內的數(shù)組變量,記為smarray。

優(yōu)選的,統(tǒng)計當前gpu片上共享存儲空間的所有數(shù)組變量,包括采用參數(shù)統(tǒng)計流程(collectlnfo)統(tǒng)計每個共享存儲數(shù)組變量的相關參數(shù)。

優(yōu)選的,參數(shù)統(tǒng)計流程(collectlnfo)包括:統(tǒng)計smarray中每個共享存儲數(shù)組變量的參數(shù)信息,包括訪問次數(shù)、是否被多線程訪問以及下標是否為常數(shù)三個參數(shù);對于smarray中某個數(shù)組變量arrayi而言,其訪問次數(shù)記為arrayi.count。依次遍歷gpu程序,若數(shù)組變量arrayi的該次訪問在條件語句中,則假設本次訪問有一半的概率可被執(zhí)行,即arrayi.count+=0.5;若本次訪問在循環(huán)體內且循環(huán)次數(shù)為常數(shù),則訪問次數(shù)arrayi.count+=loops,若循環(huán)體次數(shù)為變量則arrayi.count+=loops_app,其中l(wèi)oops表示常量的循環(huán)次數(shù),loops_app表示近似的非常量的循環(huán)次數(shù);loops_app是經驗值;對于smarray中某個數(shù)組變量arrayi而言,該參數(shù)記為arrayi.threads,如果數(shù)組變量arrayi在某次訪問中被多個線程訪問則arrayi.threads=true,否則arrayi.threads=false;對于smarray中某個數(shù)組變量arrayi而言,該參數(shù)記為arrayi.constant,如果數(shù)組變量arrayi的長度為常量則arrayi.constant=true,否則arrayi.constant=false。

優(yōu)選的,將統(tǒng)計得到的所有數(shù)組變量按訪問次數(shù)排序,包括采用變量排序流程(sortarray)將所有共享存儲數(shù)組變量按其訪問次序從高到低排序,具體為:調用程序開發(fā)平臺集成的快速排序函數(shù);將smarray中的數(shù)組變量按照每個數(shù)組變量的訪問次數(shù)從高到低排序。

優(yōu)選的,選擇訪問次數(shù)最高的數(shù)組變量從共享存儲空間遷移到寄存器或l1緩存,包括采用變量遷移流程(promotearray)將部分共享存儲數(shù)組變量從共享存儲空間遷移到其他片上存儲空間。

優(yōu)選的,變量遷移流程(promotearray)包括:選擇當前smarray中訪問次數(shù)最高的數(shù)組變量arrayi;若arrayi.threads=false且arrayi.constant=true,則arrayi遷移到寄存器中,否則遷移到l1緩存中;進一步判斷若arrayi.threads=false且arrayi.constant=false,則arrayi遷移到l1緩存的局部存儲空間中;否則遷移到l1緩存的全局存儲空間中。

優(yōu)選的,若遷移后的系統(tǒng)性能優(yōu)于遷移前的性能,則從共享存儲空間中遷移出更多的數(shù)組變量,否則終止包括:估算數(shù)組變量arrayi遷移后的任務處理時間new_runtime,若new_runtime>current_runtime,則撤銷本次遷移操作并終止整個優(yōu)化過程;否則將數(shù)組變量arrayi從smarray中刪除,并重復執(zhí)行promotearray()算法。

一種采用基于gpu片上的數(shù)據處理方法的數(shù)據處理設備,數(shù)據處理設備內部設有gpu(圖形處理器)。

與現(xiàn)有技術相比,本發(fā)明的優(yōu)點和積極效果在于:

1、本發(fā)明可以與傳統(tǒng)的提升gpu程序性能的方法共同使用,在傳統(tǒng)的優(yōu)化方法基礎上進一步提高性能;

2、可以自主執(zhí)行,不需要應用程序開發(fā)者手動對gpu程序修改;

3、適用性很廣,可以適用于各種類型的gpu應用程序以及當前所有的gpu設備,但對性能的提升程度與具體的應用類型和gpu設備有關。

附圖說明

通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:

圖1總體方案流程框圖

圖2變量統(tǒng)計流程框圖

圖3參數(shù)統(tǒng)計流程框圖

圖4變量排序流程框圖

圖5變量遷移流程框圖

圖6變量遷移流程框圖

具體實施方式

本發(fā)明提出一種基于gpu片上的數(shù)據處理方法,對給定的gpu程序自動進行片上存儲空間的優(yōu)化,從而提高gpu程序的處理性能。

collectarray():用于統(tǒng)計當前gpu程序中的所有共享存儲數(shù)組變量;

collectlnfo():用于統(tǒng)計每個共享存儲數(shù)組變量的相關參數(shù);

sortarray():用于將共享存儲數(shù)組變量按訪問次數(shù)的降序排序;

promotearray():用于確定將那些共享存儲數(shù)據變量的遷移到其他存儲空間;

collectvariables():用于優(yōu)化共享存儲數(shù)組變量及其相關參數(shù)的統(tǒng)計過程;

下面結合附圖和實施例對本申請作進一步的詳細說明??梢岳斫獾氖?,此處所描述的具體實施例僅僅用于解釋相關發(fā)明,而非對該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與發(fā)明相關的部分。

需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本申請。

總體方案如下,如圖1所示:

101、首先分析gpu程序代碼,統(tǒng)計當前片上共享存儲空間的所有數(shù)組變量,包括每個數(shù)組變量的訪問次數(shù)、是否用于多線程通信、數(shù)組下表是否為常量等參數(shù)。

102、其次將統(tǒng)計得到的所有數(shù)組變量按訪問次數(shù)排序。

103、然后選擇訪問次數(shù)最高的數(shù)組變量從共享存儲空間遷移到寄存器或l1緩存。

104、若遷移后的系統(tǒng)性能優(yōu)于遷移前的性能,則從共享存儲空間中遷移出更多的數(shù)組變量,否則終止優(yōu)化流程。

具體實施方式如下,變量統(tǒng)計流程框圖如圖2所示:

201、分析代碼:首先利用gpu程序編譯工具對當前gpu程序進行編譯。

202、找出變量:然后找出其中所有存儲在片上共享存儲空間內的數(shù)組變量。

203、記為smarray。

參數(shù)統(tǒng)計流程框圖如圖3所示:

301、統(tǒng)計參數(shù):統(tǒng)計smarray中每個共享存儲數(shù)組變量的參數(shù)信息,包括訪問次數(shù)、是否被多線程訪問以及下標是否為常數(shù)三個參數(shù)。

302、arrayi的長度為常量:對于smarray中某個數(shù)組變量arrayi而言,該參數(shù)記為arrayi.constant,如果數(shù)組變量arrayi的長度為常量則arrayi.constant=true,否則arrayi.constant=false。

303、arrayi的次數(shù)為常量:對于smarray中某個數(shù)組變量arrayi而言,其訪問次數(shù)記為arrayi.count。依次遍歷gpu程序,若數(shù)組變量arrayi的該次訪問在條件語句中,則假設本次訪問有一半的概率可被執(zhí)行,即arrayi.count+=0.5;若本次訪問在循環(huán)體內且循環(huán)次數(shù)為常數(shù),則訪問次數(shù)arrayi.count+=loops,若循環(huán)體次數(shù)為變量則arrayi.count+=loops_app,其中l(wèi)oops表示常量的循環(huán)次數(shù),loops_app表示近似的非常量的循環(huán)次數(shù)。loops_app是經驗值,其獲取方法如下:統(tǒng)計開源的gpu標準測試程序或其他業(yè)務相關的gpu程序在運行過程中,每個循環(huán)次數(shù)為不確定的循環(huán)體的實際執(zhí)行次數(shù),然后將其累加并求得平均執(zhí)行次數(shù)即為loops的近似取值。

304、arrayi被多線程訪問:對于smarray中某個數(shù)組變量arrayi而言,該參數(shù)記為arrayi.threads,如果數(shù)組變量arrayi在某次訪問中被多個線程訪問則arrayi.threads=true,否則arrayi.threads=false。

變量排序流程框圖如圖4所示:

401、調用程序開發(fā)平臺集成的快速排序函數(shù)。

402、按訪問次數(shù)排序:將smarray中的數(shù)組變量按照每個數(shù)組變量的訪問次數(shù)從高到低排序。

變量遷移流程框圖如圖5、圖6所示:

變量遷移是一個迭代過程,每次迭代判斷是否需要將當前smarray中訪問次數(shù)最高的共享存儲數(shù)組變量遷移到其他存儲空間。

501、arrayi遷移到寄存器:首先選擇當前smarray中訪問次數(shù)最高的數(shù)組變量arrayi而言,若arrayi.threads=false且arrayi.constant=true,則arrayi遷移到寄存器中。

502、arrayi遷移到l1緩存的局部存儲空間:進一步判斷若arrayi.threads=false且arrayi.constant=false,則arrayi遷移到l1緩存的局部存儲空間中。

503、arrayi遷移到l1緩存的全局存儲空間:否則遷移到l1緩存的全局存儲空間中。

600、然后,估算數(shù)組變量arrayi遷移后的任務處理時間new_runtime,若new_runtime>current_runtime,則撤銷本次遷移操作并終止整個優(yōu)化過程;否則將數(shù)組變量arrayi從smarray中刪除,并重復執(zhí)行promotearray()算法。

變量統(tǒng)計和參數(shù)統(tǒng)計在執(zhí)行過程中需要多次遍歷gpu程序,時間開銷較大。為了提高系統(tǒng)的效率,變量統(tǒng)計和參數(shù)統(tǒng)計在執(zhí)行可同時執(zhí)行,在一次遍歷gpu程序的過程中完成smarray及每個數(shù)組變量所有參數(shù)的統(tǒng)計。因為在gpu程序中變量需要先聲明后才能使用,因此可以確定每個數(shù)組變量arrayi是否存儲在共享存儲空間中,然后再統(tǒng)計arrayi.count、arrayi.threads、arrayi.constant等相關參數(shù)。

具體算法表述如下:

其中,所述kernal和list均為gpu程序的變量類型,kernal為當前的gpu程序,smarray為kernal中所有共享存儲數(shù)組變量的列表,!eof(kernal)表示順序遍歷kernal程序直到遍歷完整個程序為止,arrayi表示kernal中的一個共享存儲數(shù)組變量,smarray.add(arrayi)表示將arrayi表插入到列表smarray中,arrayi.count參數(shù)為浮點類型,表示數(shù)組變量arrayi的訪問次數(shù),arrayi.threads和arrayi.constant參數(shù)均為布爾類型,分別表示數(shù)組變量arrayi是否被多線程訪問和是否為常數(shù)下標,access表示對數(shù)組變量arrayi的訪問。

通過上述過程,提供一種gpu片上的數(shù)據處理方法,可以與當前的更新設備和手動優(yōu)化gpu程序的方法項結合,適用于各類gpu應用程序也可以在各種gpu設備上進行移植,尤其適用于大數(shù)據領域,可以對gpu程序的性能進行一定的提升。

以上描述僅為本申請的較佳實施例以及對所運用技術原理的說明。本領域技術人員應當理解,本申請中所涉及的發(fā)明范圍,并不限于上述技術特征的特定組合而成的技術方案,同時也應涵蓋在不脫離所述發(fā)明構思的情況下,由上述技術特征或其等同特征進行任意組合而形成的其它技術方案。例如上述特征與本申請中公開的(但不限于)具有類似功能的技術特征進行互相替換而形成的技術方案。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宝兴县| 大城县| 正阳县| 肥城市| 镇赉县| 尚义县| 高密市| 武定县| 若羌县| 淮阳县| 洪洞县| 郸城县| 昌黎县| 门头沟区| 甘谷县| 自治县| 綦江县| 黎城县| 固阳县| 武城县| 夹江县| 吉安市| 曲阜市| 哈尔滨市| 科技| 舟曲县| 阜新市| 永昌县| 陇西县| 广东省| 吴江市| 女性| 安康市| 华坪县| 北辰区| 建平县| 德保县| 易门县| 金川县| 德昌县| 米林县|