【发布时间】:2012-05-06 10:59:49
【问题描述】:
什么更好?我需要分几个步骤处理数据,在我看来,我有 2 个选项: 1)使用一个大内核 2) 每一步使用带有一个内核的流
在执行内核之前会有一些延迟,但在这种情况下真的很重要吗?大内核的延迟与几个较小内核的延迟总和是否相同?
与另一种相比,一种方式有什么优势吗?
谢谢大家。
【问题讨论】:
标签: cuda
什么更好?我需要分几个步骤处理数据,在我看来,我有 2 个选项: 1)使用一个大内核 2) 每一步使用带有一个内核的流
在执行内核之前会有一些延迟,但在这种情况下真的很重要吗?大内核的延迟与几个较小内核的延迟总和是否相同?
与另一种相比,一种方式有什么优势吗?
谢谢大家。
【问题讨论】:
标签: cuda
Fermi 卡上内核的启动延迟约为 10us,因此无需担心。这是有道理的——要在游戏中渲染场景,必须运行许多不同的着色器(它们是内核)。
内核必须从全局内存中读取将要处理的数据,并将结果写回全局内存。因此,每个单独的内核都意味着完整的读/写周期。如果您能够在一个大内核中将多个步骤链接在一起,您可能能够加快速度,但仍被单个读/写周期包围。
例如,如果您需要执行操作 A、B 和 C,链接它们可能会给您 READ - A - B - C - WRITE,而单独的内核会给您 READ - A - WRITE - READ - B - WRITE - 读 - C - 写。
请记住,即使您运行单个内核,您仍然可以通过将单独的步骤分解为单独的设备功能来保持代码的可读性。
【讨论】: