【发布时间】:2012-01-09 07:27:01
【问题描述】:
为了隐藏调用 cuda 内核的延迟,是否支持调用一系列内核而不必返回 CPU 调用下一个内核?因此,一系列内核可以在 GPU 设备上出列。在处理可能达到指令大小限制并希望创建更多模块化以减少整体指令大小的较大内核时,这似乎很重要。 (内联可能不是一个好的解决方案)
(如果它很重要,我正在使用 JCuda,如果这对实现此功能造成限制,请告诉我。)
【问题讨论】:
为了隐藏调用 cuda 内核的延迟,是否支持调用一系列内核而不必返回 CPU 调用下一个内核?因此,一系列内核可以在 GPU 设备上出列。在处理可能达到指令大小限制并希望创建更多模块化以减少整体指令大小的较大内核时,这似乎很重要。 (内联可能不是一个好的解决方案)
(如果它很重要,我正在使用 JCuda,如果这对实现此功能造成限制,请告诉我。)
【问题讨论】:
您指的是什么指令大小限制?我不知道。
所有 CUDA 内核调用(>> 或 cuLaunch 等)都是异步的,这意味着控制权立即返回给 CPU。 CUDA 驱动程序将包括内核启动在内的硬件命令推送到硬件出列的命令队列中。因此,如果您在没有其他干预 CPU 工作或 CUDA 调用的情况下调用多个后续 CUDA 内核,它们将由 GPU 异步执行而不会“返回 CPU”,并且在 CUDA API 将命令排入队列后,控制权将立即返回给 CPU。
有关详细信息,请参阅 CUDA 编程指南。
【讨论】: