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

3
当您在GPU上从主内核中启动次要内核时,会有一些开销。哪些因素影响或影响此开销的数量?例如,内核代码的大小,正在启动内核的SM的占用率,内核参数的大小等。
为了这个问题,让我们包容,并将“开销”定义为以下时间间隔的总和:
开始:一个SM看到启动指令 结束:一个SM开始执行子内核的指令
加上
开始:最后一个SM执行任何子内核的指令(或者子内核指令的最后写入提交到相关的内存空间) 结束:在子内核启动之后执行父级下一个指令。

你提到的“开销”是否仅包括从启动调用到子内核启动的时间段? - xhg
@aahung:请查看编辑。 - einpoklum
1个回答

1
这个答案并非基于实验或设备端运行时实现的知识,而是关于执行操作所需做的思考。
我认为启动的网格配置和寄存器使用会产生一些影响,因为需要将状态保存在某个地方才能使SM继续移动到另一个内核。此外,启动的块数可能会产生一些影响,因为我不知道设备运行时如何处理所有配置。另一方面,我不明白被调用者寄存器使用/代码大小为什么会有很大的影响。
同样,这里没有任何测试/实验来证明以上任何内容。

我倾向于不同意至少两个建议因素,但这并非基于实证数据。块数:设备只会将其作为一个数字存储在某个地方,并根据需要分派更多的块;没有为所有块预先分配任何内容。寄存器数:在启动新内核之前,不会初始化寄存器值,因此我不认为这会成为问题。当然,我可能是错的,但我确实想要一些硬性事实... - einpoklum
@einpokum:关于块和寄存器的数量:运行内核的状态需要保存在某个地方,以便在被调用的内核完成运行后继续执行。保存这个状态需要资源,这些资源取决于用于恢复它们的值的寄存器数量,以及每个块的寄存器数量。也许有一种秘密的方式可以存储寄存器值,而不依赖于主存储器,那么,如果能够访问它,那就太好了... - Florent DUGUET

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接