做CUDA專案的一些心路歷程

2021-10-03 16:17:58 字數 1064 閱讀 8483

1)要注意資料型別,在進行cudamemcpy()的時候,要注意資料型別的統一,即使你float的陣列裡存的是資料是沒有小數的整數型別,但當你想要把資料從裝置端拷貝回主機端的時候,一定要new乙個float型別的陣列去存放。

2)要注意核函式裡,陣列的索引一定不要超過範圍,否則會出現全是0的情況。特別要注意當乙個陣列用於儲存座標,另乙個陣列存放資料。用該儲存座標的陣列去索引存放資料的陣列時,要確保儲存的座標值不會超過陣列的索引大小。

3)在進行陣列從裝置端到宿主端的copy時,記憶體大小一定要小於等於所申請的大小,不能比申請的記憶體大小大,不然也會出現全是0的情況,一定要謹慎。不然找乙個錯誤就要找好久。。。

1)在做演算法的cuda加速時,一定要先熟悉演算法,而不是根據別人的c++\c **去直接翻譯成cuda,最好的話可以看該演算法的matlab版本(個人認為matlab的**更直觀,而且在資料處理方面視覺化程度較高),在了解清楚該演算法後,再用並行的思想去思考該如何編寫cuda**。

2)在規劃執行緒塊大小時,可以根據演算法的內容,選擇『』少執行緒,多寄存『』或者「多執行緒,少暫存器」。這完全取決於你的演算法內容。

3)共享記憶體多用於 某些資料需要被頻繁訪問,或者陣列的某些位置需要被頻繁索引到 。比如:歸約演算法,同時要注意儲存體衝突(bank confilt)

若只是簡單的賦值操作,或者讀寫操作,可以直接在全域性記憶體上操作

4)當專案裡需要插入一些固定的資料,比如一些矯正矩陣,空氣參考矩陣,可以使用頁鎖定記憶體,快速複製到裝置端,在不使用的時候釋放頁鎖定記憶體,把虛擬記憶體放出來。

5)在利用cuda的一些高階庫時,比如cublas,cusolver,cufft。可以去官網的工具手冊找對應的例子,還有關於函式的引數解釋,能幫助你快速的了解並掌握。

我感覺cuda在做一些有序的演算法問題時,會很難寫(可能本人能力有限。。),但是總是會有解決的方法的,只要你對演算法足夠的了解,人是活的嘛!

總之,你要對你要寫的東西十分熟悉,然後多利用並行思想去思考。如果可以的話,去了解gpu.cpu的硬體構成,會對你寫**有很大的幫助,因為**最後都是要在硬體上去執行的。我對gpu的硬體感觸最深的一點就是流水化的程度很高。

關於做專案的一些感想

最近比較忙,本來不打算寫這篇文章的,但是最近經常聽到同學們討論關於跟指導老師做專案會不會影響到自己的學習,並且還有不少同學看到別人跟老師做專案,自己也盲目地想去找老師去做專案,沒有從實踐去考慮過。還有就是少數的同學認為,參加這種沒有工資的專案,不就是浪費時間,大材小用 嗎?對於這種現象,以下是我個人...

小白用vue寫專案的心路歷程,前後端資料互動篇

const path require path module.exports 主要看 api 物件中的值,target寫上要傳送資料的目標url,相信大家也看到了兩個相同的值,下邊那個是可以讓你在呼叫axios的時候省去 這段 直接寫介面名 這個還是比較方便的。changeorigin 是控制是否跨...

做專案的一些心得體會

發信人 sunshineyaya sunshine 信區 innovation 標 題 創新實驗 經驗分享 系列 no。1 發信站 北郵人論壇 mon feb 13 22 21 57 2012 站內 今天在這裡發這個帖子,也算是幫同學乙個忙,談談自己這半年來做專案的一些經驗。其實說經驗,談不上,自己...