CUDA優化
三、 CUDA程式的優化
對於一個問題來說,往往有很多辦法可以解決它。選擇那個方法,這是一個問題,而且是一個與政策、技術,甚至陰謀相關的問題,具體怎麼做,往往考量很多。或者說條件不一樣,評判的標準不一樣,選擇的方法也就不一樣。程式設計也類似,一般來說,不是為了特地使用GPU,就沒有必要沒有原因就將原來的CPU程式碼修改為GPU。
說這段話,是因為發現有很多人在不適合GPU的情況下,卻使用它,結果當然很壞具了。
使用CUDA可分兩種情況,一種是從頭到尾從新設計;一種是已經有了序列的版本,但不能滿足速度要求,想通過使用CUDA來加快速度,此時可以考慮將程式碼中最耗時的部分使用CUDA重寫。
3.1 選擇合適的工具
由於歷史的原因,我們目前所使用的序列程式設計模式是完全一致的,說白了就是以控制為中心,雖然物件導向說是以資料為中心,但是我認為其本質上還是以控制為中心,大家想想看你寫物件導向的程式碼時,其整個中心是不是處理邏輯?是不是系統要做什麼?而目前的並行程式設計模式卻分為資料並行和任務並行,或者分散式儲存並行和共享儲存並行,CUDA是基於資料並行和共享儲存器的並行,如果你有OpenMP或者MPI的程式設計經驗,相信你也許也會有這種看法。
所以如果你要解決的問題並不是資料並行的或者共享儲存器的,使用CUDA就絕不是一個好的選擇。
3.2 優化最應該優化的地方-優化準則
相信很多人都知道80%-20%定律,也就是說程式的80%時間花在執行20%的程式碼上,如果我們將那20%的程式碼加速了10倍,最終也才加速一點點,如果我們將那80%加速了一倍,最終的結果將加速近一倍。
根據公式s = 1/(f + (1-f)/p),其中f是程式中序列程式碼的比重,p是處理器數目。可知f越大,s就越小。這也許解釋了nv的說法(儘量讓更多的程式碼在GPU上執行,就算沒有加速比)。也就是儘量提高並行程式碼的比重。這潛在的能夠提升程式的並行效率,fermi的某些功能顯然是向前邁進了一些,但是nv是不是真的能夠達到他們的設想,那就是另一回事了。
對於一個問題來說,往往有很多辦法可以解決它。選擇那個方法,這是一個問題,而且是一個與政策、技術,甚至陰謀相關的問題,具體怎麼做,往往考量很多。或者說條件不一樣,評判的標準不一樣,選擇的方法也就不一樣。程式設計也類似,一般來說,不是為了特地使用GPU,就沒有必要沒有原因就將原來的CPU程式碼修改為GPU。
說這段話,是因為發現有很多人在不適合GPU的情況下,卻使用它,結果當然很壞具了。
使用CUDA可分兩種情況,一種是從頭到尾從新設計;一種是已經有了序列的版本,但不能滿足速度要求,想通過使用CUDA來加快速度,此時可以考慮將程式碼中最耗時的部分使用CUDA重寫。
3.1 選擇合適的工具
由於歷史的原因,我們目前所使用的序列程式設計模式是完全一致的,說白了就是以控制為中心,雖然物件導向說是以資料為中心,但是我認為其本質上還是以控制為中心,大家想想看你寫物件導向的程式碼時,其整個中心是不是處理邏輯?是不是系統要做什麼?而目前的並行程式設計模式卻分為資料並行和任務並行,或者分散式儲存並行和共享儲存並行,CUDA是基於資料並行和共享儲存器的並行,如果你有OpenMP或者MPI的程式設計經驗,相信你也許也會有這種看法。
所以如果你要解決的問題並不是資料並行的或者共享儲存器的,使用CUDA就絕不是一個好的選擇。
3.2 優化最應該優化的地方-優化準則
相信很多人都知道80%-20%定律,也就是說程式的80%時間花在執行20%的程式碼上,如果我們將那20%的程式碼加速了10倍,最終也才加速一點點,如果我們將那80%加速了一倍,最終的結果將加速近一倍。
根據公式s = 1/(f + (1-f)/p),其中f是程式中序列程式碼的比重,p是處理器數目。可知f越大,s就越小。這也許解釋了nv的說法(儘量讓更多的程式碼在GPU上執行,就算沒有加速比)。也就是儘量提高並行程式碼的比重。這潛在的能夠提升程式的並行效率,fermi的某些功能顯然是向前邁進了一些,但是nv是不是真的能夠達到他們的設想,那就是另一回事了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23057064/viewspace-663911/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CUDA優化之指令優化優化
- 漫談CUDA優化優化
- CUDA程式優化心得之序列優化優化
- CUDA總體優化策略優化
- CUDA優化之執行配置和暫存器優化優化
- CUDA 矩陣乘法終極優化指南矩陣優化
- CUDA程式優化心得之錯誤處理優化
- CUDA 有 unified memory 還需要記憶體優化嗎?Nifi記憶體優化
- cuda優化之常量儲存器和紋理儲存器優化
- 第七篇:使用 CUDA 進行計算優化的兩種思路優化
- cuda程式最佳化-2.訪存最佳化
- CUDA
- cuda 流
- cmake cuda
- 前端效能優化(JS/CSS優化,SEO優化)前端優化JSCSS
- ubuntu 14.04 安裝cuda 7.5/CUDA 8.0Ubuntu
- 效能優化案例-SQL優化優化SQL
- MSSQL優化之索引優化SQL優化索引
- cuda和cudatoolkit
- CUDA簡介
- CUDA架構架構
- CUDA進階第三篇:CUDA計時方式
- Android效能優化----卡頓優化Android優化
- 資料庫優化 - SQL優化資料庫優化SQL
- 【前端效能優化】vue效能優化前端優化Vue
- 前端效能優化 --- 圖片優化前端優化
- sql優化之邏輯優化SQL優化
- [效能優化]DateFormatter深度優化探索優化ORM
- SQL優化:limit分頁優化SQL優化MIT
- (mysql優化-3) 系統優化MySql優化
- MySQL 效能優化之索引優化MySql優化索引
- MySQL優化-安裝配置優化MySql優化
- Web效能優化:圖片優化Web優化
- MySQL 效能優化之SQL優化MySql優化
- CUDA學習筆記-1: CUDA程式設計概覽筆記程式設計
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL