2017-03-20 21 views
3

当您从GPU上的主内核启动次内核时,会产生一些开销。造成或影响这种开销的因素是什么?例如内核代码的大小,启动内核的SM的占用情况,内核参数的大小等。什么因素影响动态并行内核启动的开销?

为了这个问题,让我们具有包容性,并将“开销”定义为以下总和时间间隔:

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

开始的指令:最后SM执行子的任何指令内核(或者可能最后由子内核指令写入致力于相关的内存空间)
结束:执行子内核启动后父内容的下一条指令。

+0

您提到的“开销”是否仅包含从启动调用到子内核启动的时间段? – xhg

+0

@aahung:请参阅编辑。 – einpoklum

回答

1

此答案不是基于设备端运行时实现的实验或知识,而是基于需要做什么来执行操作。

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

再次,没有测试/实验在这里证明上述任何。

+0

我倾向于不同意 - 再次,不是基于经验数据 - 至少有两个建议因素。块数量:设备会将其保存为某个数字,并根据需要分配更多块;对于所有的块没有预先分配任何东西。寄存器数量:在新内核启动之前没有寄存器值的初始化,所以我不明白为什么这会是一个问题。当然,我可能是错的,但我确实需要一些关于这方面的硬性事实... – einpoklum

+0

@einpokum:重新块和寄存器的数量:运行内核的状态需要保存在某个地方继续执行,一旦被调用者内核已完成运行。保存这个状态需要的资源取决于用于恢复其值的寄存器的数量,并且这取决于每个块。也许有一些秘密的存储寄存器值的方式不依赖于主存储器,那么访问它是非常棒的... –