并发内核和CUDA流的行为

时间:2013-02-25 00:06:44

标签: cuda parallel-processing nvidia

我想知道,如果我在一个流中运行一个包含10个1000个线程的内核来分析数据数组,然后启动一个内核,需要10个1000个线程的块来分析第二个流中的另一个数组,会发生什么?

我卡上的非活动线程是否会开始分析我的第二个阵列? 或者第二个流将暂停,直到第一个流必须完成?

谢谢。

1 个答案:

答案 0 :(得分:1)

一般来说,如果内核是从同一个应用程序的不同(非默认)流和all requirements for execution of concurrent kernels are met发出的,并且有足够的可用资源(SM,特别是 - 我想这就是你的意思通过“非活动线程”来调度两个内核,然后第二个内核的一些块将开始沿着已经执行的第一个内核的块的一侧执行。这可能发生在已安排第一个内核的块的相同SM上,或者可能发生在其他未占用的SM上,或两者都发生(例如,如果您的GPU有14个SM,工作分配器将分配10个块10个SM上的第一个内核,剩下4个在那时未使用。)

如果另一方面,你的内核有需要32KB共享内存使用的线程块,而你的GPU有8个SM,那么第一个内核的线程块将有效地“消耗”8个SM,第二个内核的线程块在第一个内核的某些线程块“耗尽”即已完成并已退役之前,内核不会开始执行。这只是资源利用率的一个例子,可能会阻止并发执行。当然,如果您启动的内核中包含许多线程块(比如100个或更多),那么第一个内核将主要占用机器,第二个内核将不会开始执行,直到第一个内核基本完成。

如果你在“cuda并发内核”的右上角搜索,你会发现许多问题,突出了与观察并发内核执行相关的一些挑战。