什么更好?我需要分几步处理数据,在我看来,我有两个选择: 1)使用一个大内核 2)为每个步骤使用带有一个内核的流
在执行内核之前有一些延迟,但在这种情况下它真的很重要吗?大内核的延迟是否与几个较小内核的延迟总和相同?
与其他方式相比,单向有任何优势吗?
谢谢你们。
答案 0 :(得分:3)
费米卡上内核的启动延迟大约为10us,所以无需担心。这是有意义的 - 在游戏中渲染场景,必须运行许多不同的着色器(它们是内核)。
内核必须读取它将从全局内存处理的数据,并将结果写回全局内存。因此每个独立的内核都意味着完整的读/写周期。如果你能够在一个大内核中将多个步骤链接在一起,你仍然可以加快速度,但仍然可以通过一个读/写周期进行括号。
例如,如果你需要执行操作A,B和C,链接它们可能会给你READ - A - B - C - WRITE,而单独的内核会给你READ - A - WRITE - READ - B - WRITE - 读 - C - 写。
请记住,即使您运行的是单个内核,您仍然可以通过单独的步骤分离设备功能来保持代码的可读性。