0
我異步地調用內核KerA
和KerB
。內核KerC
依賴於KerB
完成,但獨立於KerA
。那麼如何以這樣的方式撥打cudaDeviceSynchronize()
這意味着KerC
等待KerB
完成但不是KerA
?僅爲特定內核調用cudaDeviceSynchronize()
Time -------------------------->
| KerA ------------------------>
| KerB ------> | KerC --------->
謝謝。我之前沒有使用固定內存,所以請你也可以澄清使用「'cudaMemcpyAsync」與來自'pinned'內存的主機的要求。目前,我正在使用Thrust將100MB數據上傳到設備,而無需在我的代碼開始處使用流 - 如果稍後在我的代碼中使用流,每個流是否仍具有讀取此數據的權限?我可以使用多少固定內存 - 超過100MB?如果沒有固定的內存,流將無法工作? – mchen 2013-05-07 13:44:47
此外,流可以進一步拆分成子流? – mchen 2013-05-07 13:49:52
如果你想做一些異步的memcpy,你需要擔心固定內存和['cudaMallocHost'](http://docs.nvidia.com/cuda/cuda-runtime-api/index.html#group__CUDART__MEMORY_1g9f93d9600f4504e0d637ceb43c91ebad)。是的,每個流都可以訪問全局內存,但是您需要確保不同的流不會產生RAW/WAW危害(「並行操作使用的數據應該是獨立的」)。不,據我所知,沒有子流這樣的東西(除非我們正在談論最新的支持動態並行的GPU)。 – BenC 2013-05-07 14:10:57