【问题标题】:CUDA and Graphics Kernels Order of ExecutionCUDA 和图形内核执行顺序
【发布时间】:2014-02-07 02:18:20
【问题描述】:

我有一个类似这样的代码。

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

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

另外,如果我在第 2 步之后调用 CUDA 设备同步,它肯定会强制设备完成与 CUDA 相关的函数调用。渲染呢?它是否会在渲染相关操作也完成之前停止主机?

【问题讨论】:

    标签: graphics cuda


    【解决方案1】:

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

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

    编辑: 请参阅this 非常全面但有些过时的答案,您可以研究this 论文以了解最新设备的能力。简而言之,启动 CUDA 内核,甚至在被另一个线程同时使用的设备上调用 cudaSetDevice() 时会抛出一些错误而崩溃。如果您想通过并发 CUDA 进程来利用您的 GPU,则有可能(在仅 linux 的机器上)在主机线程和 CUDA API 调用之间使用某种中间层(称为 MPS)。这在我的second 链接中有所描述。

    【讨论】:

    • 如果调用 CUDA 代码时我的 GPU 仍在渲染怎么办?这些操作会重叠吗?渲染会中断吗?还是放慢了速度?
    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2015-09-28
    • 2012-12-16
    相关资源
    最近更新 更多