我是Cuda编程的初学者。为我的简单问题道歉。
我阅读了一些文档和示例。如果我使用内核函数,我应该做类似
的事情kernelfun <<<number of block, number of thread>>>(args).
所以网格没有数字。我们是否需要设置我们计划使用的网格数量?
根据我的GPU,我应该如何设置块数和线程数?
因为我看到每个块的最大数量线程数是512.所以我应该设置线程数为512以完全使用GPU。
另一个问题是,当我设置块和线程的数量时,我应该计算项目使用的内存吗?或者计算机会自动安排这个,我不需要关心项目使用的内存。
答案 0 :(得分:1)
我相信内核启动参数是:
kernelfun <<<number of block, number of _threads_>>>(args).
至于设置网格数量 - 不,你不必做任何类似的事情。一个内核启动相当于一个网格,其中包含由线程组成的块和块,线程是执行内核代码的执行单元。
关于网格和块大小的其他问题很可能是重复的,因为这是一个非常着名的主题 - 例如,请参阅此SO thread。
至于最后一个问题,内存问题,如果块中的线程消耗的寄存器多于可用的寄存器,那么内核将无法成功执行。除此之外,我无法弄清楚你究竟在询问什么,所以如果这不能回答你的问题那么请添加其他细节,比如你关注哪种记忆等。