2016-12-29 93 views
2

GPU真快,當談到paralleled computation並且不與爲15-30執行CPU(有的甚至報道50)倍的速度然而, GPU內存是非常有限的比較CPU內存和GPU內存與CPU之間的通信速度並不快。假設我們有一些數據不適合GPU ram,但我們仍然想使用 這是奇蹟般的計算。我們可以做的就是將這些數據分成幾塊,然後將它們逐個送入GPU。發送大量數據到GPU可能需要一段時間,有人可能會想,如果我們將數據分成兩部分並喂入前半部分,則運行內核,然後在內核運行時喂另一半。將數據傳輸到GPU內核同時運行,以節省時間

通過這個邏輯,我們應該節省一些時間,因爲數據傳輸應該去上,而計算是,希望沒有打擾它的工作,完成後,它就可以說,好吧,繼續它的工作,而不需要等待新的數據路徑。

我必須說我是新來的gpgpu,新來的cuda,但我一直在嘗試簡單的cuda代碼,並且注意到用於在CPU和GPU之間傳輸數據的函數cudaMemcpy會在kerner運行時阻塞。它會一直等到內核完成,然後才能完成它的工作。


我的問題,是有可能實現類似的東西上面,如果是那樣,可能一個顯示一個例子或提供如何可以做一些信息源?

謝謝!

+0

我需要幫助提出更好的技巧, 會真的很棒, 謝謝! –

回答

6

是有可能實現類似的東西上面

是的,這是可能的描述。你所描述的是一個流水線算法,並且CUDA具有各種異步功能來啓用它。

asynchronous concurrent execution section of the programming guide涵蓋了CUDA中的必要元素以使其工作。要使用您的示例,存在cudaMemcpy的非阻止版本,稱爲cudaMemcpyAsync。您需要了解CUDA 以及如何使用它們。

我也建議this presentation它涵蓋了大部分需要的東西。

最後,here是一個工作的例子。這個特定的例子恰好使用CUDA流回調,但這些對於基本流水線來說不是必需的。它們使額外的面向主機的處理能夠在流水線中的各個點異步觸發,但基本的數據分塊以及在處理過程中傳輸數據不依賴於流回調。還要注意該答案中鏈接的CUDA示例代碼,這可能對學習/學習有用。

+0

謝謝你的快速回答,我會研究它。 –