我们是否需要在cuda编程中设置网格数量?

时间:2014-09-26 11:57:22

标签: cuda

我是Cuda编程的初学者。为我的简单问题道歉。

我阅读了一些文档和示例。如果我使用内核函数,我应该做类似

的事情
kernelfun <<<number of block, number of thread>>>(args).

所以网格没有数字。我们是否需要设置我们计划使用的网格数量?

根据我的GPU,我应该如何设置块数和线程数? enter image description here

因为我看到每个块的最大数量线程数是512.所以我应该设置线程数为512以完全使用GPU。

另一个问题是,当我设置块和线程的数量时,我应该计算项目使用的内存吗?或者计算机会自动安排这个,我不需要关心项目使用的内存。

1 个答案:

答案 0 :(得分:1)

我相信内核启动参数是:

kernelfun <<<number of block, number of _threads_>>>(args).

至于设置网格数量 - 不,你不必做任何类似的事情。一个内核启动相当于一个网格,其中包含由线程组成的块和块,线程是执行内核代码的执行单元。

关于网格和块大小的其他问题很可能是重复的,因为这是一个非常着名的主题 - 例如,请参阅此SO thread

至于最后一个问题,内存问题,如果块中的线程消耗的寄存器多于可用的寄存器,那么内核将无法成功执行。除此之外,我无法弄清楚你究竟在询问什么,所以如果这不能回答你的问题那么请添加其他细节,比如你关注哪种记忆等。