使用 GPU 的 CUDA 同时启动多个内核

发布于 2024-09-05 08:04:15 字数 328 浏览 4 评论 0原文

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

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

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

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

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

Is it possible to launch two kernels that do independent tasks, simultaneously. For example if I have this Cuda code

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

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

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

Assuming that these kernels are independent, is there a facility to launch them at the same time allocating few grids/blocks for each. Does CUDA/OpenCL have this provision.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我ぃ本無心為│何有愛 2024-09-12 08:04:17

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

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

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

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

使用许多纹理或
大量本地内存较少
可能同时执行
其他内核。

Only devices with CUDA compute capability 2.0 and better (i.e. Fermi) can support multiple simultaneous kernel executions. See section 3.2.6.3 of the CUDA 3.0 programming guide, which states:

Some devices of compute capability 2.0
can execute multiple kernels
concurrently. Applications may query
this capability by calling
cudaGetDeviceProperties() and checking
the concurrentKernels property.

The maximum number of kernel launches
that a device can execute concurrently
is four.

A kernel from one CUDA context cannot
execute concurrently with a kernel
from another CUDA context.

Kernels that use many textures or a
large amount of local memory are less
likely to execute concurrently with
other kernels.

在你怀里撒娇 2024-09-12 08:04:17

您需要 SM 2.0 或更高版本才能实现并发内核。

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

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

You will need SM 2.0 or above for concurrent kernels.

To get concurrent execution you need to manually indicate that there is no dependence between the two kernels. This is because the compiler cannot determine that one kernel will not modify data being used in the other, this could be by reading from and writing to the same buffer which seems simple enough, but is actually much harder to detect since there can be pointers inside data structures and so on.

To express the independence you must launch the kernels in different streams. The fourth parameter in the triple-chevron syntax specifies the stream, check out the Programming Guide or the SDK concurrentKernels sample.

灵芸 2024-09-12 08:04:17

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

CUDA compatibility 2.1 = up to 16 Concurrent Kernels

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文