CUDA GPU的異構程式開發流程

2021-06-18 16:43:07 字數 1764 閱讀 9484

異構程式開發的特點決定了開發與傳統開發手段還是有一些列不同的,通俗的說有一定的講究。針對本專案,本章列出幾條重要的值得注意的地方,從開發過程上指導整個流程,以保證程式的質量+

和優化。對異構程式的開發,針對自己的開發業務,簡單的敘述整個開發流程如圖:

這個過程文字敘述為:

過程1:資料準備

。過程2:業務邏輯設計

更加業務需求的功能,設計業務層的類,投資組合類大體上有4

個功能,每個功能直接又是有依賴關係的,這個過程產生的軟體產品是——類圖。

過程3:業務邏輯實現

指的是在cpu

中實現,可以被其他

呼叫的介面;我建議將可並行和非可並行的事物邏輯都封裝在這個業務類中,如果有並行的處理模組,在下乙個軟體過程中處理。這個過程產生的軟體產品是——類的.h和

.cpp

。我時刻提醒自己——不急於求成並行模組的核心程式書寫。

過程4:資料詞典設計

為什麼把這個過程放在這個地方,其實是不對的,因為資料從資料庫中出來,到最後計算出來的資料存入資料庫,這個整個過程都涉及到的東西,不應該放到這個地方。就像圖中表示的一樣,資料詞典貫穿始終。

但是,放在這個過程中是有一定意義的,因為乙個資料塊放到乙個gpu

中進行平行計算,並且要從裝置中拷貝出來,乙個好的資料型別,對裝置與主機傳遞的頻寬和裝置記憶體的使用都是具有重要意義的。很簡單的說,誰都不願意把一群沒計算意義的

string

型別的字串拷貝到

gpu中,只作為標示乙個計算結果的

id來用,對吧。所以,資料詞典設計也是乙個迭代的過程,開發過程中發現資料詞典可以優化,盡量優化!

資料詞典的設計,原則是以裝置gpu

為服務物件,青睞裝置原則。

何謂輕重之分,資料詞典的設計,在異構開發中顯得很重要。我們不求一步到位,但求改進。

過程5:核心程式設計

核心程式就是在gpu

上開發的平行計算程式。

過程3中如果某個功能模組發現並行粒度很大,那麼,我們要開始做真正有意義的事情了。

為了強調程式架構的清晰——

我們先建立.cuh

檔案,宣告要平行計算的功能模組,注意,我們過程

3中的業務功能只需要包含這個

.cuh

檔案,就可以呼叫封裝好的平行計算模組啦。

接著我們建立.cu

檔案,注意,所有核心操作的符號,必須在

cu檔案中實現。我們在

cu檔案中實現核心函式,處理並行的資料。

是的,核心程式我們不要嫌多寫個頭檔案,多乙個標頭檔案,對於程式的架構是很有幫助的,工程化!

過程6:迭代優化

這裡有兩個意義上的優化:

第一,我們始終不能忘記業務上是否還可以進一步的優化;

第二,我們最期待的核心程式演算法上的優化。

也許第二個是我們會更加有挑戰,很簡單的例子,我的排序演算法就是比你的排序演算法高階、快速;或者我的程式就是比你的程式使用的記憶體少、指令吐量大。我們在開發核心程式時,盡量不要浪費核心的資源,更杜絕可能的情況下記憶體越界和顯露,這個後果不是軟體崩潰,而是系統藍屏!

最後一條,圖中沒有加,就是每乙個版本,我們都儲存記錄,分析效率,作為自己優化程式的階段性產品。我試圖從cpu到gpu的每個版本都進行了版本定稿,這樣,整個過程將是有趣的,我看到每個版本都在提公升,會很得意。是的,原來——

我提醒自己注意,異構程式,步步為營,一步乙個版本,逐個比較,穩定提高效率和質量!

參考:

springMVC mybatis開發的流程

1.1配置的資訊主要有 org.springframework.web.context.contextloaderlistener contextconfiglocation contextconfiglocation web inf mvc.xml 1mvc package com.ouma.sp...

使用工作流開發應用程式

使用工作流開發應用程式 nease 原創 參與分 191,專家分 250 發表 2003 8 25 下午9 12 更新 2003 8 26 上午8 09 版本 1.0 閱讀 5581次 在 forrester report 提出的關於工作流程概念定義中,將工作流程比喻為 資訊河流 即日常的業務處理或...

python程式的控制 Python程式控制流程

一 順序 是從上而下,從左到右進行 二 選擇 單分支 if 條件 條件成立時要執行的 if i 3 5 0 and i 3 6 0 print 這個最小數是 i 雙分支 if 條件 條件成立時要執行的 else 條件不成立時要執行的 if x 4 0 and x 100 0 or x 400 0 p...