使用一个大内核还是cuda流更好?

使用一个大内核还是cuda流更好?,cuda,Cuda,什么更好?我需要分几个步骤处理数据,在我看来,我有两个选择: 1) 使用一个大内核 2) 为每个步骤使用具有一个内核的流 在执行内核之前会有一些延迟,但在这种情况下这真的很重要吗?一个大内核的延迟与几个小内核的延迟之和相同吗 一种方法与另一种方法相比有什么优势吗 谢谢各位。费米卡上内核的启动延迟大约为10us,所以无需担心。这很有意义——要在游戏中渲染场景,必须运行许多不同的着色器(它们是内核) 内核必须从全局内存读取要处理的数据,并将结果写回全局内存。因此,每个单独的内核都意味着完整的读/写周

什么更好?我需要分几个步骤处理数据,在我看来,我有两个选择: 1) 使用一个大内核 2) 为每个步骤使用具有一个内核的流

在执行内核之前会有一些延迟,但在这种情况下这真的很重要吗?一个大内核的延迟与几个小内核的延迟之和相同吗

一种方法与另一种方法相比有什么优势吗


谢谢各位。

费米卡上内核的启动延迟大约为10us,所以无需担心。这很有意义——要在游戏中渲染场景,必须运行许多不同的着色器(它们是内核)

内核必须从全局内存读取要处理的数据,并将结果写回全局内存。因此,每个单独的内核都意味着完整的读/写周期。如果您能够将多个步骤链接到一个大内核中,并且仍然由一个读/写周期包围,那么您可能能够加快速度

例如,如果您需要执行操作A、B和C,链接它们可能会导致读-写-写-写,而单独的内核会导致读-写-读-写-读-写-读-写


请记住,即使只运行一个内核,也可以通过将单独的步骤分解为单独的设备函数来保持代码的可读性。

大内核也有较大的寄存器占用,这可能会对性能产生重大影响。我没有检查过,但理论上,如果在链中的步骤之间不共享变量,编译器应该能够继续重用寄存器,以便寄存器的总使用量仅等于使用最多的步骤的使用量。即便如此,这也是一个很好的观点,共享内存的使用也应该以同样的方式考虑。换句话说,如果链中一个步骤的资源使用率比其他步骤高得多,它可能会降低其他步骤的占用率,因此最好单独运行。谢谢,我将使用设备函数和一个大内核。