Cuda 哪些因素会影响动态并行内核启动的开销?

Cuda 哪些因素会影响动态并行内核启动的开销?,cuda,dynamic-parallelism,Cuda,Dynamic Parallelism,当您从GPU上的主内核中启动辅助内核时,会有一些开销。造成或影响这一间接费用金额的因素有哪些?e、 g.内核代码的大小、启动内核的SM的占用率、内核参数的大小等 为了解决这个问题,让我们将“开销”定义为以下时间间隔的总和: 开始:SM看到启动指令 结束:SM开始执行子内核的指令 加上 开始:最后一个SM执行子内核的任何指令(或者子内核指令的最后一次写入被提交到相关内存空间) 结束:在子内核启动后执行父级的下一条指令。这个答案不是基于设备端运行时实现的实验或知识,而是关于执行操作需要做什么的思考

当您从GPU上的主内核中启动辅助内核时,会有一些开销。造成或影响这一间接费用金额的因素有哪些?e、 g.内核代码的大小、启动内核的SM的占用率、内核参数的大小等

为了解决这个问题,让我们将“开销”定义为以下时间间隔的总和:

开始:SM看到启动指令
结束:SM开始执行子内核的指令

加上

开始:最后一个SM执行子内核的任何指令(或者子内核指令的最后一次写入被提交到相关内存空间)

结束:在子内核启动后执行父级的下一条指令。

这个答案不是基于设备端运行时实现的实验或知识,而是关于执行操作需要做什么的思考

我假设启动的网格配置和寄存器使用会产生一些影响,因为状态需要保存在某个地方,以便让SM移动到另一个内核。 此外,启动的块的数量可能会有一些影响,因为我看不出设备运行时如何处理所有配置。 另一方面,我不明白为什么被调用方寄存器的使用/代码大小会产生巨大的影响


同样,这里没有任何测试/实验来证明上述任何一点

您提到的“开销”是否只包括从启动调用到子内核启动的时间段?@aahung:请参见编辑。我倾向于不同意至少两个建议因素,这也是基于经验数据的。块数:设备将把它作为一个数字保存在某处,并根据需要分配更多的块;没有为所有街区预先分配任何东西。寄存器数量:在启动一个新内核之前,没有初始化寄存器值,所以我不明白为什么这会成为一个问题。当然,我可能错了,但我确实想要一些关于这方面的硬事实…@einpokum:Re块和寄存器的数量:运行内核的状态需要保存在某个地方,以便在被调用内核运行完毕后继续执行。保存此状态需要的资源取决于用于恢复其值的寄存器的数量,这对于每个块都是如此。也许有一种不依赖于主存储器的存储寄存器值的秘密方法,那么,能够访问它就太好了。。。