我有一个在我的GPU(GeForce 690)上运行的内核并使用一个块。它运行大约160
微秒。我的计划是分别启动8
这些内核,每个内核只使用一个块,因此每个内核都运行在一个单独的SM上,然后它们全部同时运行,希望大约{{1}微秒。
然而,当我这样做时,总时间随每个内核线性增加:160
微秒如果我运行320
内核,2
内核大约490
微秒,等
我的问题:我是否需要在某处设置任何标志以使这些内核同时运行?或者我必须做一些不明显的事情吗?
答案 0 :(得分:4)
由于@JackOLantern表示并发内核需要使用流,这是GPU上all forms of asynchronous activity scheduling所需的。一般而言,它还需要具有2.0或更高计算能力的GPU。如果您不在应用程序中使用流,则所有cuda API和内核调用将按照在代码中发出的顺序依次执行,而不会从一个调用/内核重叠到下一个调用/内核。
请点击JackOlantern引用的concurrent kernels cuda sample,而不是在此处提供完整的教程。
另请注意,出于各种原因,实际目睹并发执行在Windows上可能会更加困难。如果您运行并发内核示例,它将很快指示您所在的环境(操作系统,驱动程序等)是否提供并发执行。