首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CUDA图中的节点如何连接?

CUDA图中的节点如何连接?
EN

Stack Overflow用户
提问于 2018-10-12 00:20:58
回答 1查看 579关注 0票数 2

CUDA graphs是从多个操作中综合复杂操作的一种新方法。使用“流捕获”,您似乎可以运行多种操作,包括CuBlas和类似的库操作,并将它们捕获为单个“元内核”。

对我来说,不清楚的是这些图的数据流是如何工作的。在捕获阶段,我为输入分配了内存A,为临时值分配了内存B,为输出分配了内存C。但是,当我在图中捕捉到这一点时,我没有捕捉到内存分配。因此,当我实例化这些图的多个副本时,它们不能共享输入内存A、临时工作区B或输出内存C。

那么这是如何工作的呢?也就是说,当我调用cudaGraphLaunch时,我看不到提供输入参数的方法。我捕获的图基本上是从一个cudaMemcpyHostToDevice开始的,这个图如何知道要复制哪个主机内存以及将其放在哪里?

背景:我发现CUDA在内核启动时存在严重的瓶颈;我的AVX2代码在移植到CUDA时要慢13倍。内核本身看起来很好(根据NSight的说法),这只是安排数十万次内核启动的开销。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 03:02:46

内存分配通常在图定义/实例化或“捕获”之外完成。

但是,graphs提供了"memory copy" nodes,您通常需要在其中执行cudaMemcpy类型操作。

在图形定义时,您将为每个图形节点传递一组参数(这取决于节点类型,例如,如果是内存复制节点,则为cudaMemcpy操作的参数;如果是内核节点,则为内核参数)。这些参数确定执行该图时将使用的实际内存分配。

如果您想要使用一组不同的分配,一种方法是用不同的参数实例化另一个具有不同参数的节点。这可以通过重复整个过程,或者从现有图开始,对节点参数进行更改,然后用这些更改实例化一个图来完成。

目前,在cuda图中,不可能执行节点参数到特定图/节点的运行时绑定(即,在图的“启动”点)。当然,在未来的版本中可能会引入新的功能。

请注意,CUDA10中有一个名为simpleCudaGraphs的CUDA示例代码,它演示了内存复制节点和内核节点的使用,以及如何在节点之间创建依赖关系(有效地执行依赖关系)。

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

https://stackoverflow.com/questions/52764753

复制
相关文章

相似问题

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