我有一個C++項目,在C++中使用CUDA與DLL。如何以正確的方式在C++中使用CUDA在C++項目和DLL之間傳輸數據?
現在我從主項目傳遞2個指針到DLL。在DLL內部,陣列將被複制到設備內存。一些計算將與他們一起完成。然後,陣列將被複制回主機。
我聽說用數據重疊的方法數據傳輸會更好。但在這種情況下我怎麼能做到這一點?複製功能cudaMemcpyAsync
要求固定內存是異步的,並且傳遞的指針不是正確的?
我使用的臨時解決方案是使用memcpy
將傳遞的數組複製到固定數組。然後,我使用流來重疊數據。之後,再次使用memcpy
從固定內存數組複製到傳遞數組。我想,CPU的東西顯然不是一個好方法。
我們可以做些什麼,比如當兩個CUDA都將固定內存數組從主項目傳遞到DLL時?
非常感謝提前。
您可以使用['cudaHostRegister'](http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html#group__CUDART__MEMORY_1g36b9fe28f547f28d23742e8c7cd18141)將簡單主機內存轉換爲固定內存。 – sgarizvi
這似乎是一個,我會檢查。謝啦。 – Harry
@ sgar91請發表你的建議,使用'cudaHostRegister()'作爲答案。這樣哈利可以接受它,人們會知道這個問題已經得到解答。 – Tom