1

我有一个在我的 GPU (GeForce 690) 上运行并使用单个块的内核。它在大约160几微秒内运行。我的计划是分别启动8这些内核,每个内核只使用一个块,因此每个内核都将在单独的 SM 上运行,然后它们将同时运行,希望在大约160几微秒内。

但是,当我这样做时,总时间会随着每个内核线性增加:320如果我运行2内核,则为微秒,内核约为490微秒3,等等。

我的问题:我是否需要在某处设置任何标志以使这些内核同时运行?还是我必须做一些不明显的事情?

4

1 回答 1

4

正如@JackOLantern 所指出的,并发内核需要使用流,这是GPU 上所有形式的异步活动调度所必需的。一般来说,它还需要计算能力为 2.0 或更高的 GPU。如果您在应用程序中不使用流,则所有 cuda API 和内核调用都将按照它们在代码中发出的顺序依次执行,从一个调用/内核到下一个调用/内核没有重叠。

请查看JackOlantern 引用的并发内核 cuda 示例,而不是在这里提供完整的教程。

另请注意,由于各种原因,在 Windows 上实际见证并发执行可能会更加困难。如果您运行并发内核示例,它将很快指示您所在的环境(操作系统、驱动程序等)是否提供并发执行。

于 2013-07-03T15:11:41.777 回答