CUDA和图形内核执行顺序

时间:2014-02-07 02:18:20

标签: graphics cuda

我有一个类似的代码。

1)主机:启动图形内核 2)主机:启动CUDA内核(所有异步调用) 3)主持人:在主机上做一堆数字运算 4)回到第1步

我的问题是这样的。 CUDA API保证CUDA内核即使是异步也按启动顺序执行。这适用于渲染吗?假设我在GPU上正在进行一些渲染相关的计算。如果我启动异步CUDA调用,它们只会在渲染完成后执行吗?或者这两个操作会重叠吗?

此外,如果我在步骤2之后调用CUDA设备进行同步,它肯定会强制设备完成与CUDA相关的函数调用。渲染怎么样?它是否会在渲染相关操作完成之前停止主机?

1 个答案:

答案 0 :(得分:1)

调用CUDA内核以某种方式锁定GPU,因此不支持GPU的任何其他用法。主机代码的每个进程都必须在特定的上下文中执行设备代码,并且一次只能在一个设备上激活一个上下文。

Callig cudaDeviceSynchronize();阻止调用主机代码。完成所有设备代码流的执行后,控制权将返回到调用主机代码。

修改 请参阅this非常全面但有些过时的答案,您可以学习this论文,了解最新设备的功能。简而言之,启动CUDA内核,甚至在另一个线程同时使用的设备上调用cudaSetDevice()会因抛出一些错误而崩溃。如果您希望通过并发CUDA进程来利用GPU,则有可能(在仅限Linux的计算机上)在主机线程和CUDA API调用之间使用某种层间(称为MPS)。我在second链接中对此进行了描述。