1

假设我已经向设备发送了两个连续的内核调用。它是等待完成第一个还是同时执行它们?如果它们是并行执行的,它们是否会相互交叉以进行内存访问?在 CUDA 中用于这种情况的范例是什么?

4

1 回答 1

3

在以下情况下,对同一 CUDA 设备的两个连续内核启动将同时运行:

  1. 它们是从相同的 CUDA 上下文启动的。
  2. 它们在不同的 CUDA 流上执行。
  3. 设备支持并发(Compute 2.0 及更高版本)。
  4. 有足够的资源(寄存器、共享内存、线程块)来同时支持来自两个内核的线程块。

有关详细信息,请参阅CUDA C 编程指南中的此部分

正如 sgar91 所评论的,如果这些内核共享全局内存,那么程序员有责任编写一个正确同步的程序以避免竞争条件。如果两个内核只读取相同的内存,那么就不会存在竞争条件。

于 2013-04-23T00:24:20.737 回答