gpu程式設計可以解決哪些問題

時間 2021-06-09 09:29:56

1樓:Ranger

GPU具有高度並行運算的結構,可以用來加速一些重複,不依賴其他資料,可以單獨並行運算並且運算並不太複雜的演算法。最簡單的例子就是在計算機視覺和影象處理方面的應用,GPU常常被用來加速那些每個畫素位置都需要進行的某種操作,從而得到你要的結果。

舉例說明:

1. 邊緣檢測常見的運算元有Canny,Sobel,但這些運算元一般都是乙個二維的矩陣。而邊緣檢測的過程就是在每個畫素的位置提取出來乙個和運算元矩陣一樣大小的畫素塊,然後和運算元進行卷積,得到乙個magnitude值(中文可能叫幅值吧),然後判斷和預先設定的閾值的差別。

所以,整個過程每個畫素位置的卷積操作,都是單獨進行的,那麼這樣就可以用GPU來加速運算。乙個9x0系列的gpu對這樣的運算能加速幾十倍甚至上百倍。

2. Region growing(邊緣增長),這個演算法一般用來做分割。步驟一般是提取一些初始的種子點,然後判斷每個種子和周圍鄰域畫素點的差別,差別大於或者小於某個閾值,那麼把這個鄰域的畫素點也包含在種子點集合裡。

這個過程不斷的迭代,直到種子的集合不再更新。那麼這個例子就可以看到,種子的集合在不斷更新,而且每次都依賴於前乙個集合,這樣就很難平行計算了,用CPU序列更高效一點。

類似的例子有很多,在網上可以看到很多教程。除以以外,當你安裝完成CUDA之後,會有很多自帶例子,是乙個不錯的入門方式。

在程式設計中,盡量少一些kernel的呼叫,每個kernel中盡量少迴圈,少if else,盡量讓每個kernel做簡單重複的計算。除此以外要注意block尺寸的選擇,一般選32的倍數(因為warp的原因),但是具體16乘8,8乘16,32乘32等等等等尺寸,最好都大量測試一遍,看看哪個運算時間最少。最後,就是盡量在程式已經實現了之後,再利用不同的memory進行加速,比如texture memory,shared memory以及constant memory,這些記憶體都屬於cached on-chip(其中texture和constant是因為有texture cache和constant cache而且 read only),會比global memory快很多。

至於程式設計,建議先使用CUDA,因為NVIDiA的緣故,所謂維護更好,遇到問題之後查相關的錯誤網上也比較多解答。再之後可以學習一下OpenCL,語言和CUDA很相似,這樣就很容易上手了。而且OpenCL的好處是,面向各種device,比如NVIDiA,比如AMD,以及德州儀器生產的keystone 2和keystone 3系列DSP。

希望這堆羅里羅嗦有幫助:)

GPU程式設計的IO瓶頸如何解決

H博士 RTX I O is here 但是用的是Windows的DirectStorage介面,加快遊戲素材檔案的讀取和解壓。希望以後能有更廣泛的應用。 饃饃黑 這個問題感覺以後會火,占個坑。目前來看ps5的GPU IO解決方案或許就是AMD SSG的低成本加強版,通過硬體CU和軟體API的綜合作...

為什麼可以程式設計 程式能解決哪些問題 不能解決哪些問題

可以解決的是,可被描述為演算法的可計算問題。不可以解決的,就是他的對立面,不可描述為演算法,不可計算問題。舉個例子 1 1 等於幾,這是可以計算的,加數 被加數可以數位化,加法的演算法明確,一步可以出結果。同理,複雜計算可以無線分割成小的計算的疊加。這些是可計算問題。不可計算問題,比如 生命的意義是...

天體物理 宇宙學中,程式設計用來解決哪些問題?

在核天體物理裡我接觸到的主要有兩個方面 對實驗資料進行擬合,提取我們所需要的引數 如光學勢引數 譜因子等 天體物理核反應網路方程。根據實驗得到的反應截面作為引數輸入到網路方程中,計算星體演化過程中核素豐度的變化。 章魚喵 其實程式設計用來處理任何想處理的問題。比如很多時候資料太多,所以對資料的整理重...