NVIDIA 现在提供了一种优先处理 CUDA 内核的方法。这是一个相当新的功能,因此您需要升级到 CUDA 5.5 才能使用。
对于您的情况,您将kernel A
在高优先级 CUDA 流中启动,并kernel B
在低优先级 CUDA 流中启动。您可能想要的功能是cudaStreamCreateWithPriority(..., priority)
.
- 要使用此功能,您需要具有 Compute Capability 3.5 或更高版本的 GPU。要检查您的 GPU 是否支持优先级,请查看
cudaDeviceProp::streamPrioritiesSupported
.
cudaDeviceGetStreamPriorityRange
应该告诉您 GPU 上有多少优先级可用。for 的语法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.