首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解CUDA依赖检查

理解CUDA依赖检查
EN

Stack Overflow用户
提问于 2013-02-26 08:01:04
回答 1查看 986关注 0票数 1

CUDA编程指南提供了以下语句:

对于支持并发内核执行且具有计算能力3.0或更低版本的设备,任何需要进行依赖项检查以查看流内核启动是否完成的操作: 只有当所有先前内核的线程块从CUDA上下文中的任何流开始执行时,‣才能开始执行; ‣阻止所有后续内核从CUDA上下文中的任何流启动,直到正在检查的内核启动完成为止。

我在这里迷路了。什么是依赖检查?我是否可以说,在某些设备内存上执行内核需要对所有以前的内核进行依赖检查,或者对涉及相同设备内存的内存进行传输?如果这是真(可能不是真),则根据上述语句,此依赖项检查将阻塞来自任何其他流的所有以后的内核,因此以后不会发生异步或并发执行,这似乎不正确。

如有任何解释或详细说明,将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 17:33:53

首先,我建议您访问nvidia的网站-网站,并在并发和流上观看网络研讨会。

此外,还应考虑以下几点:

  • 发出给同一流的命令被视为依赖于,例如,您可以在之后将内核插入到流中,这是该内核将访问的一些数据的副本。内核“依赖”于可用数据的。
  • 因此,同一流中的命令保证执行sequentially (或同步执行,通常用作同义词)。
  • 但是,不同流中的命令是独立的,可以并发运行。
  • 因此,依赖关系只为程序员所知,并使用流表示(以避免错误)!

以下仅对应于具有计算能力3.0或更低的设备(如quide中所述)。如果您想更多地了解对流调度行为的更改,使用计算能力3.5,请查看HyperQ和相应的示例。此时,我还想参考线程,在其中我找到了HyperQ示例:)

关于您的第二个问题:我不太明白您所说的“某些设备内存上的内核执行”或“涉及设备内存的内核执行”是什么意思,所以我将您的语句简化为:

内核执行需要对所有以前的内核和内存传输进行依赖检查。

最好是:

CUDA操作需要进行依赖项检查,以查看前面在同一流中的操作是否已经完成。

我认为你在这里的问题是“开始执行”这个短语。这意味着仍然可以有独立的内核启动(即在不同的流上),如果这些内核都已经开始执行和足够的设备资源,那么内核的启动将是与以前内核并行的

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15084141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档