2012-11-28 74 views
0

當運行併發副本時&內核操作:
如果我的內核runTime是dataCopy操作長度的兩倍,我會在每次內核運行時獲得2個副本嗎?
我看到的流示例顯示1:1關係。 (拷貝時間=內核運行時間。)我想知道當有什麼不同時會發生什麼。每次內核啓動時是否總是有一個拷貝操作(最大)?或者複製操作是否獨立於內核啓動運行?即如果運行&複製時間以這種方式工作,那麼我可能會爲每次內核啓動完成5次複製操作。
(我試圖找出有多少複製操作到內核發射前排隊)併發:短副本,長內核

一對一:(一次複製=內核運行時)
< --stream1Copy - > < --stream2Cop​​y - >
.............................. < -stream1Kernel->

二對一:(複製時間= 1/2內核運行時間)
< -stream1Copy-> < -stream2Cop​​y-> < -stream3Copy->
............................ < ---------- stream1Kernel --------- --->

回答

1

你可以爲每個內核啓動一個以上的副本。只有一個副本(具有雙複製引擎的設備上的每個方向)可以在特定的時間運行到特定的GPU,但是一旦這個副本完成,另一個副本可以立即啓動。比所關注的內核推出流等將完全異步運行於內核啓動流發出的異步複製,假設niether流流0(這還假定你正在使用的固定內存即cudaHostAlloc創建相關的主機端的緩衝區。)

您可能需要閱讀的最佳實踐指南的relevant section

您經常看到1:1計算和複製分析的原因是,假定複製的數據將被內核調用使用(或由其生成),因此邏輯上我們可以想到塊數據這種方式。但是,如果將代碼構建爲一系列副本更容易,那麼應該沒有問題。當然,如果您可以將所有數據分批存儲到一次cudaMemcpy調用中,那麼這將比傳輸相同數據的一系列副本更有效率。

visual profiler將幫助你看到究竟是怎麼回事比較數據拷貝操作內核操作,在時間軸的方式。

+0

我的視覺探查的理解是,這是隻爲贏環境。有沒有類似的工具nonWin環境? – Doug

+1

是的,在Linux環境中,您可以運行使用'nvvp'命令視覺分析器或者如果你有CUDA 5,您可以通過運行'nsight'命令,從Eclipse的nsight版工具中查看。您可能需要查看我在答案中鏈接的文檔,特別是[本節](http://docs.nvidia.com/cuda/profiler-users-guide/index.html#visual-profiler)。 –