将多个内核发送到要执行的设备时会发生什么?

时间:2013-04-20 10:55:04

标签: cuda gpu-programming

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

1 个答案:

答案 0 :(得分:3)

同一个CUDA设备的两个连续内核启动将同时运行如果

  1. 它们是从相同的CUDA上下文启动的。
  2. 它们在不同的CUDA流上执行。
  3. 设备支持并发(Compute 2.0及更高版本)。
  4. 有足够的资源(寄存器,共享内存,线程块)同时支持来自两个内核的线程块。
  5. 有关详细信息,请参阅this section in the CUDA C Programming Guide

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