簡體   English   中英

如何從多個CPU線程管理相同的CUDA內核調用?

[英]How to manage same CUDA kernel call from multiple CPU threads?

我有一個cuda內核,當從單個CPU線程調用時,它可以正常工作。 但是,當從多個CPU線程(〜100)調用同一內核時,大多數內核似乎根本不執行,因為結果全為零。有人可以指導我如何解決此問題嗎?

在當前版本的內核中,我在內核調用結束時使用cudadevicesynchronize() 在這種情況下,在cudaMalloc()和內核調用之前添加sync命令會有幫助嗎?

還有另一件事需要澄清。 即,如果兩個CPU線程執行相同的cudaMalloc()命令,則后者會覆蓋GPU內存中的前者還是會創建自己的內存?

在此先感謝您的幫助

通常,一個CPU線程可用於調用CUDA內核。 但是,從CUDA 4.0開始,多個CPU線程可以共享上下文。 您可以使用cuCtxSetCurrent將內核的上下文綁定到當前線程。 有關此API函數的更多信息,請參見此處

另一個解決方法是創建一個保存上下文的GPU工作線程,並將任何CUDA請求傳遞給該線程。

關於您的其他問題,我沒有設置適當線程的上下文,我記得cudaMalloc甚至不會執行(我使用JCuda,因此行為可能有所不同)。 但是,如果當前將上下文設置為調用內核,則不會覆蓋內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM