Graphics CUDA和图形内核的执行顺序

Graphics CUDA和图形内核的执行顺序,graphics,cuda,Graphics,Cuda,我有一个类似这样的代码 1) 主机:启动图形内核 2) 主机:启动CUDA内核(所有异步调用) 3) 主持人:对主持人做一系列的数字运算 4) 回到步骤1 我的问题是。CUDA API保证CUDA内核即使是异步的,也会按启动顺序执行。这是否适用于渲染?假设我在GPU上进行了一些与渲染相关的计算。如果启动异步CUDA调用,它们是否仅在渲染完成后执行?或者这两个操作会重叠 此外,如果我在步骤2之后调用CUDA设备同步,它肯定会强制设备完成CUDA相关函数调用。渲染呢?它是否会暂停主机,直到渲染相关操

我有一个类似这样的代码

1) 主机:启动图形内核 2) 主机:启动CUDA内核(所有异步调用) 3) 主持人:对主持人做一系列的数字运算 4) 回到步骤1

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


此外,如果我在步骤2之后调用CUDA设备同步,它肯定会强制设备完成CUDA相关函数调用。渲染呢?它是否会暂停主机,直到渲染相关操作完成?

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

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

编辑:
看到非常全面但有点过时的答案,你们可以研究一下这篇论文,看看最后的设备能做些什么。简而言之,在另一个线程同时使用的设备上启动CUDA内核,甚至调用
cudaSetDevice()
,都会抛出一些错误,从而导致崩溃。如果您希望通过并发CUDA进程来利用GPU,那么(在仅限linux的机器上)可以在主机线程和CUDA API调用之间使用某种层间(称为MPS)。这在我的链接中有描述。

如果调用CUDA代码时我的GPU仍在渲染,该怎么办?这些行动会重叠吗?渲染会被中断吗?还是慢下来?