GPU(CUDA)學習日記(十)------ Kernal 內核函數 參數的傳遞

       之前做了一個項目,內核函數什麼的編寫都沒有問題,但是處理完的圖片就是會產生條紋,這個問題困擾了我很長時間(真的很長時間。。。),我的內核函數傳入的參數有很多,我做過實驗,在host函數中給所有的參數都cudamalloc顯卡空間(當初以爲這樣處理會更省顯存一些,畢竟是開闢的線性存儲器globle memory空間),但是實驗結果是每一個參數都開闢cudamalloc的話,速度會降低,顯卡的顯存也沒有實質性的節省(反而感覺少了~)。不明白其中的道理,後來查了一下,看了許多大家的看法,最後得出的結論是:

1、在fermi架構之前的參數都是在shared mem中的,而fermi這代則全都放在了constant memory裏,內核參數在global memory裏沒有副本。

2、反覆對constant memory中的數值進行賦值與調用會發生意外錯誤,因爲你不知道內部具體的線程的執行順序,尤其是一個線程中for循環的時候。

3、內核函數中申請的變量都會存儲在寄存器中,所以參數如果過多的話,會大大降低寄存器的效率。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章