2015-04-30 53 views
1

我是cuda编程的新手。我正在开发Kepler GPU,它有内核的最大线程数

3.2 compute_capability 
1024 max_threads_per_block 
1 Multiprocessor 
2048 max._threads per_Multiprocessor 
2147483647 grid size 

这是否意味着我只能为内核分配2048?那么如何处理这个大网格?

我的应用程序包含了大量的矩阵计算。

谢谢

回答

3

您需要了解关于CUDA编程的更多信息。

您可以在内核中拥有超过1024或2048个线程(即网格)。

1024的限制是每个块的限制。如果你是初学者,2048号码是你不需要过多关注的。

在内核启动:

mykernel<<<A,B>>>(...); 

B参数是每块的线程。它被限制为1024.

A参数是每个网格块。它仅限于2^31-1(Kepler GPU上的x尺寸)。所以你理论上可以在cc3.x设备上以一维网格启动(2^31-1)* 1024线程。

+0

谢谢你的回答。我以为GPU只有一个SM,SM可以有最多2048个线程,最大内核线程将是2048 – user8462

+3

即使GPU只有1个SM,你也可以启动一个内核包含许多块,并且这些块将在空间和资源允许的情况下循环通过该SM。 2048号码让你了解SM *在任何给定时刻*可以处理多少线程(最大值),即同时发生。但是当threadblocks完成他们的工作时,他们将“退出”SM并且新的线程块可以开始运行。 –

+0

因此,当GPU在SIMT上工作时,并不意味着所有线程必须同时占用SM。再次感谢。 – user8462