quanzhang100 发表于 2013-11-25 15:19
dim3 dimBlock(16,16);
dim3 dimGrid(16,16);
MatrixAdd(a,b,c);
楼主您好,请问题建议您新开主题。
(1)1维的,相当于第二和第三个维度都是1, 等于(..., 1, 1)这种。
同理,2维的,可以看成是(..., ..., 1)
(2)因为您限定了前提,总的threads数目一定,那么我们可以知道,如果block大了,自然grid里的总blocks数目会减少。反之,如果block过小,则总blocks数目会较大。
一般情况下,建议初学者不要使用过大的block(1024这种的),使用256之类的较好。初学者可能在较大的blocks上取得较低的achieved occupancy.
但一般情况下,如果代码写的好点,过大和过小的其实都没事。(对于您,我建议您总是使用256这样的,除非您的问题的确需要较大的block)
(3)一个线程占用的资源多少和block的大小无关的,因为属于线程的资源基本上主要是寄存器。你使用过小的block,对于block所拥有的资源(例如shared memory), 势必只能导致在较少数量的线程中共用,也是不利的。所以不要追求过小,不好的。
关于这些疑问,实际上因为您没有基本的对CUDA的认识造成的,建议您打开CUDA C Programming Guide的第一章,阅读完几页再回来看我的回复,会加深理解。
(手册在论坛的资源下载区有下载)
感谢您的来访。 |