一个GPU中可能有多少个CUDA网格?
一个GPU设备上是否可以存在两个网格?或者说,一个GPU设备只能有一个网格吗?
Kernel1<<gridDim, blockDim>>(dst1, param1);
Kernel1<<gridDim, blockDim>>(dst2, param2);
两个以上的内核是同时运行还是顺序运行?
一个GPU中可能有多少个CUDA网格?
一个GPU设备上是否可以存在两个网格?或者说,一个GPU设备只能有一个网格吗?
Kernel1<<gridDim, blockDim>>(dst1, param1);
Kernel1<<gridDim, blockDim>>(dst2, param2);
当然可以让多个内核相对异步地运行(因此可能是并发的),但需要使用cuda流API才能实现这一点。
你可能想查看CUDA C程序员指南中的第3.2.5节“异步并发执行”,以了解有关流和并发内核执行的更多信息。此外,nvidia CUDA SDK 中有许多示例,例如简单流,可以说明这些概念。并发内核示例展示了如何同时运行多个内核(使用流)。请注意,同时运行内核需要计算能力为2.0或更高的硬件。Kernel1
实例并行运行的例子:cudaStream_t stream1; cudaStreamCreate(&stream1);
cudaStream_t stream2; cudaStreamCreate(&stream2);
Kernel1<<gridDim, blockDim, 0, stream1>>(dst1, param1);
Kernel1<<gridDim, blockDim, 0, stream2>>(dst2, param2);
Kernel1<<<g, b>>>()
,然后启动一个具有特定流的内核Kernel2<<<g, b, 0, stream>>>()
,那么Kernel2
将等待Kernel1
完成。Kernel1<<<g, b>>>()
),Nvidia 就称之为“使用 NULL 流”。cudaEvents
,即使您将内核分布到多个流中,您的工作有时也可能被序列化。