用户
 找回密码
 立即注册
发表于 2013-8-1 20:52:17
z5253882 发表于 2013-8-1 13:40
但是如果是多次调用核函数的话,那不就变成类似串行的了吗?而且一次只能用一个grid的线程,那max grid d ...

LZ您好:

1:多次调用kernel,那么每个kernel对应的grid确实是一个接着一个执行的。但这又有什么关系呢?你一个grid执行的时候也不是说一个周期全部结果都出来的,线程们也是一批一批执行的。以及这个和效率也没有直接关系。

2:“而且一次只能用一个grid的线程,那max grid dimensions:<63353 63353 63353>不就是没用了吗?”——我和横扫斑竹同样无法理解您的逻辑。
以及,这里面是65535而不是63353;
以及这个数量是和计算能力版本相关的,您使用3.x版本计算能力的显卡可以实现((2^31)-1)*65535*65535大小的grid;
以及这个dimension是按照block数量计算的,实际换算到线程数量还需要乘以每个block内部线程数量的;
以及这个限制不是同时可用的grid数量。

3:我不是夜猫子的,我白天一般也在,但不保证每天每时每刻都在,也不保证周末都在,也不保证每个帖子都能立即回答,也不保证每晚都在。我回帖的时刻是我在的时刻,但反之不成立。

大致如此,供您参考。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-8-7 23:09:44
本帖最后由 z5253882 于 2013-8-7 23:27 编辑

版主好,版主很辛苦也很细心很负责
1.我的想法是如果能够一次性调用多个(N个)grid来满足我要的线程数(如果我有足够多的线程),那么不管我完成一次调用需要多少个周期,如果能grid能并行起来的话,效率总归是一个核函数一个核函数调用的N倍左右;
2.这个肯定是我理解有问题。版主你看我这么说对不对,如果是下面这样
max threads per block:1024
max thread dimensions<1024 1024 64>
max grid dimensions<65535 65535 65535>
那我每个grid的最大线程数就是65535*1024*65535*1024*65535*64,这个是我每次调用核函数能调用的线程最大的数目
使用道具 举报 回复 支持 反对
发表于 2013-8-7 23:33:04
z5253882 发表于 2013-8-7 23:09
横扫版主你好,我看前面ice版主的意思是一个核函数只能调用一个grid中的线程,如果我需要调用的线程数超 ...

LZ您好:

1:多次调用kernel,kernel执行之间确实是串行的(一般情况),但是每个kernel执行的时候,将有一整个grid的线程为您服务,此时这些线程是并行的,并且一般能比较充分地利用您的GPU资源。所以是无妨的。

2:请您对max grid dimensions的理解请依据CUDA C Programming Guide的说法,以及我前面的解释是与该手册一致的。以及我们无法理解您的表述的。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-8-12 14:44:29
z5253882 发表于 2013-7-30 21:48
谢谢。我想拆分成多个grid,但是不知道怎么对不同grid进行操作,我目前能解决的就是对同一个grid下的线程 ...

在核函数外面加循环
使用道具 举报 回复 支持 反对
发表于 2013-8-12 17:50:10
z5253882 发表于 2013-8-7 23:09
版主好,版主很辛苦也很细心很负责1.我的想法是如果能够一次性调用多个(N个)grid来满足我要 ...

LZ您好:

今天发现您12#的内容被重新编辑过,这使得13#原本针对的内容不复存在。

请您以后对于新的看法和补充重新开楼表述,以免造成看帖之人的困惑,以及以此表示对原回帖的尊重。

对于您12#我现在看到的内容,我重新答复如下:

1:您的看法是错误的,一次kernel执行本身只有一个grid,在grid很小的时候,可以通过多stream的方式同时并行多个kernel/grid,并行的数量并不多,如16个。
以及,您对您所谓的“多个grid并行”的看法和对效率的估计完全是错误的。
在grid中线程数较多的时候,是无法实现grid并行的,所以此种情况下,您的前提无法成立。
在grid中线程数量较少并使用多stream的时候,可以实现较少数量的grid并行,但是无法达到您所设想的效率提升。

换句话说,您的看法的逆否命题大致为“只使用一个grid,则无法高效率地使用GPU”,这明显是不成立的。

2:您的看法依然是错误的。

您应该用您的GPU所支持的一个grid中最多能容纳的block数量*每个block所能容纳的最多threads数量得到您grid中最多可容纳的线程数量。

您这里给出了“max threads per block:1024”,但是随后“那我每个grid的最大线程数就是65535*1024*65535*1024*65535*64”又违背了这一点。

也即,block三个维度方向上尺寸的最大值并不能同时达到。

大致如此。
使用道具 举报 回复 支持 反对
发表于 2013-8-12 21:47:12
ice 发表于 2013-8-12 17:50
LZ您好:

今天发现您12#的内容被重新编辑过,这使得13#原本针对的内容不复存在。

这个是我考虑不周到,以后如果有修改的话我会重新开帖的。
还是要谢谢ice版主,这下对这个清楚很多了。
使用道具 举报 回复 支持 反对
发表于 2013-8-12 21:48:22
branty031 发表于 2013-8-12 14:44
在核函数外面加循环

嗯,我会考虑的,谢谢
使用道具 举报 回复 支持 反对
12
发新帖
您需要登录后才可以回帖 登录 | 立即注册