Re: [問題] class物件中用CUDA的kernal function?

看板C_and_CPP作者 (KITO)時間14年前 (2011/03/31 19:21), 編輯推噓4(402)
留言6則, 6人參與, 最新討論串2/2 (看更多)
可以說的東西很多 就回篇文好了 在 CUDA 上想用 C++ 可以, 但是非常雞助 主要就 C++ 語言的幾點特性來分析一下 1. Class 2. Constructor and destructor 3. Virtual Function 4. Template 5. Function Overloading 6. Operator Overloading 7. Default Parameters 8. Namespace 1. Class 在 CUDA 中可以使用 class 嗎? 當然可以, 但用起來大概跟 struct 相去不遠了, 原因下面會提到 2. Constructor and destructor 在 C++ 物件中, 最重要的兩個東西 Constructor 以及 destructor 在某些情況下會無用化, 例如你想要透過 cudaMalloc 來要空間的時候 會發現他根本不會呼叫 Constructor !!! 而即使你想要自己呼叫也會因為 address space 不同很多事情都不能做, 可以用的情況大概只剩 kernel function 中的 local variable 3. Virtual Function 在物件導向中, 最重要的 Virtual Function 受限於底層 PTX 不支援 indirect call/jump 所以根本不可能實作, 新的硬體好像會支援, 但別鬧了 這可是會引發 thread divergence 造成效能大降, 那 Non-virtual function 可以使用嗎? 答案是肯定的, 其實他只是 藏了一個 this pointer 當參數的函數而已 4. Template 5. Function Overloading 6. Operator Overloading 7. Default Parameters 8. Namespace 以上這些東西都是 Compile time 處理的, 安心的用吧 無聊的話可以去研究一下底層的實作, 這邊就不廢話了 撇除這些語言特性不說, 你還會面臨一個問題, 資料用 class 儲存 在 Memory 中的排列順序就會是一個 object 接著一個 object 放 問題在哪? 問題還是在於你扼殺了 Coalesced I/O 的機會, 以及在 Shared memory 遇到 Bank Conflict 等等 在 CUDA Progamming Guide 裡面提到的最佳化大部分也都用不上了 如果只是要用 C++ 把 kernal function 包起來沒問題, 運算部分請不要考慮了 CUDA 寫起來就像用 C 在刻組合語言一樣阿XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.60.218.62

03/31 19:23, , 1F
雞助XD
03/31 19:23, 1F

03/31 21:09, , 2F
感謝a大清楚的解釋XDD!請受小弟我一拜~
03/31 21:09, 2F

03/31 22:06, , 3F
利用 struct 的方式可以技巧性達到合併存取, 但不好寫.
03/31 22:06, 3F

03/31 23:42, , 4F
push..:)
03/31 23:42, 4F

04/01 00:21, , 5F
我想到cudaMalloc也許可以看看replacement new
04/01 00:21, 5F

04/04 21:47, , 6F
最後一句大推
04/04 21:47, 6F
文章代碼(AID): #1Db6FK5K (C_and_CPP)
文章代碼(AID): #1Db6FK5K (C_and_CPP)