1
有幾種不同形式的任務並行性可用於CUDA。我們可以在內核執行的同時來回執行內存拷貝。在這種情況下,我們必須使用cudaHostAlloc將主機內存分配爲固定內存,並且可以使用流並行執行事件。但是如果我只關心使用流並行運行幾個內核,我是否必須使用固定內存,或者我可以使用正常的未固定內存(即使用malloc)?併發內核執行需要使用固定內存
謝謝
有幾種不同形式的任務並行性可用於CUDA。我們可以在內核執行的同時來回執行內存拷貝。在這種情況下,我們必須使用cudaHostAlloc將主機內存分配爲固定內存,並且可以使用流並行執行事件。但是如果我只關心使用流並行運行幾個內核,我是否必須使用固定內存,或者我可以使用正常的未固定內存(即使用malloc)?併發內核執行需要使用固定內存
謝謝
只要你在調用單獨的流內核,CUDA將嘗試並行運行的內核。
內核只能引用有存儲器地址的存儲器;您可以獲得主機內存的設備內存地址的唯一方法是將其分配爲映射的固定內存。如果啓用UVA,則會自動發生;否則你必須用cudaDeviceMapHost調用cudaSetDeviceFlags(),並用cudaHostAllocMapped標誌調用cudaHostAlloc()。
因此,如果目標是同時運行的內核引用固定內存,那麼問題的答案是肯定的,您必須使用固定內存,並且必須映射內存。