[英]Priority of concurrent CUDA kernel execution
我有兩個可以同時執行的內核(A和B)。 我需要內核A盡快完成(進行結果的MPI交換)。 所以我可以在一個流中執行它們:A然后B.
但是,內核A的線程塊很少,所以如果我按順序運行A和B,則在A運行時GPU沒有被充分利用。
是否可以與具有更高優先級的A同時執行A和B?
例如,我希望內核B的線程塊只有在內核A 沒有未啟動的塊時才開始執行。
據我所知,如果我在一個流中啟動內核A,並且在主機代碼中的下一行,在另一個流中啟動內核B,我不保證B中的線程塊實際上不會先執行?
NVIDIA現在提供了一種優先處理CUDA內核的方法。 這是一個相當新的功能,因此您需要升級到CUDA 5.5才能使用。
對於您的情況,您將在高優先級CUDA流中啟動kernel A
,並在低優先級CUDA流中啟動kernel B
你可能想要的功能是cudaStreamCreateWithPriority(..., priority)
。
cudaDeviceProp::streamPrioritiesSupported
。 cudaDeviceGetStreamPriorityRange
應該告訴你GPU上有多少優先級。 cudaDeviceGetStreamPriorityRange
的語法有點cudaDeviceGetStreamPriorityRange
; 值得一看CUDA手冊,看看它是如何工作的。 有關CUDA Runtime API手冊中優先級設置的更詳細文檔:
cudaError_t cudaStreamCreateWithPriority(cudaStream_t *pStream,
unsigned int flags, int priority)
Create an asynchronous stream with the specified priority.
Parameters
pStream = Pointer to new stream identifier
flags = Flags for stream creation. See cudaStreamCreateWithFlags for a list of
valid flags that can be passed
priority = Priority of the stream. Lower numbers represent higher priorities. See
cudaDeviceGetStreamPriorityRange for more information about the
meaningful stream priorities that can be passed.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.