專利名稱:一種異構多處理器中共享流內存的方法
技術領域:
本發(fā)明涉及一種數(shù)據(jù)并行計算技術,尤其史通過異構多處理器CPUs和GPUs 進行數(shù)據(jù)并行計算時共享流內存的方法。
背景技術:
隨著GPU逐漸納入高性能并行計算設備,GPU被按照一般目的的計算設備,開 發(fā)了越來越多的應用程序完成數(shù)據(jù)并行計算。今天,我們用供應商提供的專業(yè)接 口和專業(yè)GPU設備,設計這些應用程序,因此,即使CPU和GPU—起用于數(shù)據(jù)處 理系統(tǒng),CPU也不會負載過重,應用程序也可以運行在不同廠商的GPU上。
然而,隨著越來越多的CPU被嵌入多核完成數(shù)據(jù)并行計算,越來越多的數(shù)據(jù) 處理任務即可以用CPUs和GPUs完成。多個CPU或GPU組合的處理器簡寫CPUs和 GPUs,傳統(tǒng)意義上,GPUs和CPUs,是分別通過不同的程序環(huán)境編譯的,因此使得 CPU和GPU相互適應性不是很好。因此使應用同時利用好CPUs和GPUs處理資源是 非常困難的,從而需要一個新的數(shù)據(jù)處理系統(tǒng)克服上述困難。從而使應用能夠充 分利用好CPU和GPU各種處理資源。
發(fā)明內容
本發(fā)明的目的是提供一種異構多處理器中共享流內存的方法。 本發(fā)明的目的是按以下方式實現(xiàn)的,包括主處理器和計算處理器,運行在主 處理器中的應用程序,基于主處理器調用API,把可執(zhí)行程序從主處理器中加載到 計算處理器,并為計算處理器配置存儲能力,為計算處理器中的線程訪問某個變 量分配內存,計算處理器是GPU或者CPU;
步驟如下應用程序運行在主處理器中第一次調用API,為配有流內存的多個 處理器單元從包含局部變量的源代碼編譯一個或多個可執(zhí)行程序;然后第二次調 用API,去加載一個或多個可執(zhí)行程序到多個處理器單元中,并行執(zhí)行多個線程, 加載時,從一個處理器的局部存儲中分配局部存儲單元;并且加載時,從流內存
中分配第一個流存儲單元,當一個處理單元中同時執(zhí)行多個線程,這些線程基于
流內存的存儲單元訪問變量的值,對于包含流變量的源程序進一步包括第三次 調用API,在流內存中,為流變量分配第二個流存儲單元;基于第二個流存儲單元, 從多個處理器單元訪問流變量的變量值。
本發(fā)明的優(yōu)異效果是很好的使應用程序同時利用好CPUs和GPUs處理資源,提高應用程序處理海量數(shù)據(jù)的能力。
圖1是完成數(shù)據(jù)并行計算的計算設備配置圖; 圖2是多處理器并行執(zhí)行多線程共享流內存示意圖; 圖3是調度API完成內存分配的過程示意圖。
具體實施例方式
參照說明書附圖對本發(fā)明的一種異構多處理器中共享流內存的方法作以下詳 細地說明。
本發(fā)明中運行在主處理器上的應用,配置計算處理器的存儲能力,計算處理 器可以是CPU或者GPU,并且為計算處理中一組線程執(zhí)行的可執(zhí)行程序,訪問一個 變量分配存儲單元。被這組線程訪問的變量的值,或者來自計算處理器的局部內 存或者主處理器和計算處理器共享的流內存。通過API調用,應用完成內存的分 配和配置。第一次調用API時,為配有流內存的多個處理單元,從源代碼編譯一 個或多個可執(zhí)行程序;然后第二次調用API,去加載這些可執(zhí)行程序到多個處理單 元中,并且同時執(zhí)行多個線程。加載時,從一個處理器的局部存儲中分配局部存 儲單元,這個存儲單元用于保存源代碼中的局部變量;并且加載時從流內存中, 分配第一個流存儲單元,當一個處理單元中同時執(zhí)行多個線程,多個線程基于流 內存的存儲單元訪問局部變量的值。對于包含流變量的源程序進一步包括第三 次調用API,在流內存中,為流變量分配第二個流存儲單元;基于第二個流存儲單 元,可以從多個處理器單元,訪問流變量。在流緩存中為變量分配緩存單元,緩 存單元中保存流存儲單元中變量的值。 實施例
圖1是為完成應用數(shù)據(jù)并行處理的計算設備配置圖,在這個計算設備中,包 含中央處理器CPU和圖形處理器GPU,其中的主處理系統(tǒng)中有一個主處理器,可以 在網(wǎng)絡中上傳下載數(shù)據(jù)和結算結果,主處理器通過數(shù)據(jù)總線連接異構處理器CPUs 和GPUs。 CPU可以是多核的CPU, GPU是可以支持圖形處理和雙精度浮點運算的硬 件。函數(shù)庫保存源代碼和可執(zhí)行程序,編譯層負責編譯源代碼,應用通過API調 用,加載可執(zhí)行程序到運行層,運行層通過計算資源的分配,管理處理任務的執(zhí) 行,運算平臺層,負責物理計算設備的標識。編譯完成的可執(zhí)行程序,通過API 調用加載到運行層,運行時運行層根據(jù)處理器的數(shù)據(jù)文件,與編譯層交互,實時 編譯源代碼生成新的可執(zhí)行程序。運行層把符合條件的可執(zhí)行程序通過運算平臺 層分配到計算資源。圖2是多處理器并行執(zhí)行多線程共享流內存示意圖,這時應用程序通過API
調用已經(jīng)將可執(zhí)行程序從主處理器加載到計算處理器。可執(zhí)行程序在一個處理單
元中并行執(zhí)行多個線程,從圖中可見,計算處理器—1中有1到M個線程,計算處 理器—L中有1到N個線程, 一個計算處理中每個線程通過其私有內存訪問其局部 變量的值, 一個計算處理中的多個線程通過局部共享內存訪問變量的值,多個處 理中的線程基于流內存的存儲單元訪問流變量的值。例如,計算處理器—l中的私 有內存1存儲線程1要處理的局部變量的值;局部共享內存中存儲線程1禾P M需 要處理的變量值;而計算處理器—1線程M和計算處理器—L線程N,則通過流緩存
訪問流變量的值。局部共享內存也是基于流內存的存儲單元的。
圖3是調度API完成內存分配的過程示意圖,應用程序首先通過API調度,完 成源代碼的編譯,編譯生成一個或多個可執(zhí)行程序;然后再調用API加載可執(zhí)行 程序到處理單元,加載時完成對可執(zhí)行程序中局部變量的內存分配,這個內存分 配是基于處理器的局部存儲能力的,同時完成第一個流內存的分配,用于一個處 理器中多個線程同時訪問變量;最后第三次調用API,在流內存中為流變量分配第 二個流存儲單元,從而使多個處理器單元,訪問流變量。
權利要求
1.一種異構多處理器中共享流內存的方法,包括主處理器和計算處理器,其特征在于,運行在主處理器中的應用程序,基于主處理器調用API,把可執(zhí)行程序從主處理器中加載到計算處理器,并為計算處理器配置存儲能力,為計算處理器中的線程訪問某個變量分配內存,計算處理器是GPU或者CPU;步驟如下應用程序運行在主處理器中第一次調用API,為配有流內存的多個處理器單元從包含局部變量的源代碼編譯一個或多個可執(zhí)行程序;然后第二次調用API,去加載一個或多個可執(zhí)行程序到多個處理器單元中,并行執(zhí)行多個線程,加載時,從一個處理器的局部存儲中分配局部存儲單元;并且加載時,從流內存中分配第一個流存儲單元,當一個處理單元中同時執(zhí)行多個線程,這些線程基于流內存的存儲單元訪問變量的值,對于包含流變量的源程序進一步包括第三次調用API,在流內存中,為流變量分配第二個流存儲單元;基于第二個流存儲單元,從多個處理器單元訪問流變量的變量值。
2、根據(jù)權利要求1所述的方法,其特征在于,存儲單元是處理單元上配有的局部存儲器,或是流內存,流存儲單元是由運行在主處理器單元上的應用分配的, 流內存的存儲能力不包括局部存儲器的支持,在流緩存中為變量分配緩存單元, 緩存單元中保存流存儲單元中變量的值。
3、 根據(jù)權利要求1所述的方法,其特征在于,異構多處理器包括主處理器、一個或多個處理器單元、API庫;其中主處理器和處理器單元配有共享流內存; API庫中包含源代碼和可執(zhí)行程序; 一個或多個處理單元中至少有一個處理單元有局部存儲器,可執(zhí)行程序中局部變量的內存的分配是基于這個局部存儲器的存 儲能力。
4、 根據(jù)權利要求1所述的方法,其特征在于, 一個處理器單元至少包含一個 CPU或一個GPU。
全文摘要
本發(fā)明提供一種異構多處理器中共享流內存的方法,該方法是應用程序運行在主處理器上第一次調用API,為配有流內存的多個處理器單元從包含局部變量的源代碼編譯一個或多個可執(zhí)行程序;然后第二次調用API,去加載一個或多個可執(zhí)行程序到多個處理器單元中,并行執(zhí)行多個線程,加載時,從一個處理器的局部存儲中分配局部存儲單元;并且加載時,從流內存中,分配第一個流存儲單元,當一個處理單元中同時執(zhí)行多個線程,這些線程基于流內存的存儲單元訪問變量的值,對于包含流變量的源程序進一步包括第三次調用API,在流內存中,為流變量分配第二個流存儲單元;基于第二個流存儲單元,從多個處理器單元訪問流變量的變量值。
文檔編號G06F9/38GK101551761SQ200910014938
公開日2009年10月7日 申請日期2009年4月30日 優(yōu)先權日2009年4月30日
發(fā)明者王守昊, 健 魏 申請人:浪潮電子信息產(chǎn)業(yè)股份有限公司