5

是否可以同时启动两个执行独立任务的内核。例如,如果我有这个 Cuda 代码

// host and device initialization
.......
.......

// launch kernel1
myMethod1 <<<.... >>> (params);

// launch kernel2
myMethod2 <<<.....>>> (params);

假设这些内核是独立的,是否有一种工具可以同时启动它们,为每个内核分配几个网格/块。CUDA/OpenCL 是否有此规定。

4

3 回答 3

6

只有具有 CUDA 计算能力 2.0 和更好的设备(即 Fermi)才能支持多个同时内核执行。请参阅 CUDA 3.0 编程指南的第 3.2.6.3 节,其中指出:

一些计算能力 2.0 的设备可以同时执行多个内核。应用程序可以通过调用 cudaGetDeviceProperties()和检查concurrentKernels属性来查询此功能。

一个设备可以同时执行的内核启动的最大数量是四。

来自一个 CUDA 上下文的内核不能与来自另一个 CUDA 上下文的内核同时执行。

使用许多纹理或大量本地内存的内核不太可能与其他内核同时执行。

于 2010-06-14T10:27:11.367 回答
6

并发内核需要 SM 2.0 或更高版本。

要获得并发执行,您需要手动指示两个内核之间没有依赖关系。这是因为编译器无法确定一个内核不会修改另一个内核中使用的数据,这可能是通过读取和写入同一个缓冲区,这看起来很简单,但实际上更难检测,因为内部可能有指针数据结构等等。

为了表达独立性,您必须在不同的流中启动内核。三人字形语法中的第四个参数指定流,请查看编程指南或 SDK concurrentKernels 示例。

于 2010-06-17T10:29:14.677 回答
3

CUDA 兼容性 2.1 = 最多 16 个并发内核

于 2012-03-20T07:45:16.817 回答