【问题标题】:How can I run more than 1 kernels on one GPU with CUDA?如何使用 CUDA 在一个 GPU 上运行多个内核?
【发布时间】:2011-05-01 20:15:33
【问题描述】:
kernel1 <<< blocks1, threads1, 0, stream1 >>> ( args ... );
...
kernel2 <<< blocks2, threads2, 0, stream2 >>> ( args ... );
...

我有两个内核要同时运行,
而且设备是GTX460,所以是费米架构。
cuda 工具包和 sdk 是 3.2 rc。

像上面的代码一样,两个内核被编码为同时运行,
但没有来自任何内核的响应。

内核在做什么有什么限制吗? 两个内核共享一些数据
他们有一些共同点。
如果我注释掉一个内核函数的大部分内容,程序就会停止。

请给我任何帮助。

【问题讨论】:

  • "如果我注释掉一个内核函数的大部分,那么程序就会停止。"这是什么意思?更多细节会有所帮助。
  • 你能发布更多信息吗?我很难理解你做了什么,你期望发生什么,以及实际发生了什么。

标签: cuda


【解决方案1】:

在不同流上运行的事实并不意味着它们将同时运行。 如果第一个内核所需的资源量足以允许运行第二个内核,那么情况就是如此,否则它们将串行运行。 确保在两次内核调用之后有一个 cudaSyncThreads(),或者在两个线程上同步。请记住,所有 cuda 调用都是异步的。

【讨论】:

  • 是的,如果我在每个块中使用较少的线程数,程序就会运行。谢谢。 :)
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多