我正在創建一個內核來管理位於結構和數組上的大量變量。 我知道如果我使用通過cudaMalloc
(全局內存......對嗎?)分配的變量,計算速度會非常慢(我試過了,結果比我的算法的順序版慢)。內核變量位置
如果我將數據的數組拷貝到內核的變量上,我會提高性能嗎?
內核內存(它應該被稱爲「本地內存」,對吧?)應該比全局內存更快?
我正在創建一個內核來管理位於結構和數組上的大量變量。 我知道如果我使用通過cudaMalloc
(全局內存......對嗎?)分配的變量,計算速度會非常慢(我試過了,結果比我的算法的順序版慢)。內核變量位置
如果我將數據的數組拷貝到內核的變量上,我會提高性能嗎?
內核內存(它應該被稱爲「本地內存」,對吧?)應該比全局內存更快?
本地內存和全局內存一樣慢。如果您的數據太大而無法存儲在寄存器或共享內存中,並且您不需要寫入操作,則可以嘗試使用緩存的紋理內存或恆定內存,因此速度比全局內存快。
我認爲你對CUDA的工作方式有些困惑。我會盡力盡力提供幫助,但我強烈建議您參閱CUDA Programming Guide以及CUDA附帶的示例。對於你在結構上的工作,我會推薦Black Scholes的例子。
我知道如果我使用通過cudaMalloc分配的變量(全局內存......對嗎?),計算將會非常緩慢(我已經嘗試過了,結果比順序版本的我alghoritm)
是的,你確實分配到GPU設備與cudaMalloc全局內存,更正。計算速度不一定很慢,但根據您對慢速的定義,將大量數據複製到設備(GPU)內存的過程可能會很慢。限制將內存複製到CUDA中的設備總是有好處的。
如果我將數據的數組複製到內核變量上,我會提高性能嗎?內核內存(它應該被稱爲「本地內存」,對吧?)應該比全局內存更快?
這種說法沒有道理,我不認爲你知道設備內存是如何工作的。
不要擔心內存優化,直到你更進一步。尤其是您應該檢查每個CUDA都需要調用錯誤,特別是CudaMalloc和CudaMemcpy,否則您將遇到一些嚴重問題。
如果您打算真正學習GPU編程,我建議您閱讀很多關於它並查看示例程序。如果不是的話,那麼你絕對應該檢查一下現有的使用GPU的軟件,而不是程序員。尤其是Thrust非常適合此目的,特別是對於Map/Reduce樣式的任務。