1. CUDA 图
CUDA 图提出了一种新的工作提交模型。在CUDA中,图是由一系列操作(如内核启动)组成,并通过依赖关系连接,这些操作的定义与执行是分开的。这样,图可以定义一次,然后重复启动。将图的定义与执行分开可以实现许多优化:首先,与流相比,CPU的启动开销减少,因为大部分设置工作提前完成;其次,将整个工作流呈现给CUDA,使得某些优化成为可能,这些优化在流的逐步工作提交机制中可能无法实现。
为了理解通过图可以实现的优化,考虑一下在流中发生的情况:当你将一个内核放入流时,主机驱动程序执行一系列操作来准备内核在GPU上的执行。这些操作是启动和执行内核所必需的开销,每次发出内核时都必须支付这些开销。对于执行时间较短的GPU内核,这些开销可能占整体端到端执行时间的一个重要比例。
使用图提交工作的过程分为三个阶段:定义、实例化和执行。
在定义阶段,程序创建图中操作的描述以及它们之间的依赖关系。
实例化阶段捕获图模板的快照,验证它,并执行大部分设置和初始化工作,目的是最小化启动时需要做的工作。结果实例称为可执行图。
可执行图可以像任何其他CUDA工作一样启动到流中。它可以被启动多次,而无需重复实例化。