刚开始学CUDA,对这三个东东的含义有点弄不明白
做两个矩阵相加的时候有下面这句代码
int i = blockIdx.x * blockDim.x + threadIdx.x;
请问一下 blockIdx.x blockDim.x threadIdx.x分别代表着什么
非常感谢。。。
楼主您好,
blockIdx是表示block在grid中的index。它拥有.x/.y和.z分量。
threadIdx是表示thread在block中的index. 它拥有.x/.y和.z分量。
感谢您的来访。祝您夜晚愉快!
LZ您好,横扫斑竹漏写了一个,我来补充一下:
blockDim是您规定的block的各方向的维度,blockDim.x指的是x方向的维度。以及也有.x/.y和.z分量。
上述三个分量具体硬件下的限值请查阅CUDA C Programming Guide Appendix F.
感谢您开启今日第一帖,祝您编码顺利~
非常感谢大半夜的回帖。。
这三个的解释我都知道,但是具体到某一个线程的时候就会犯迷糊
比如说上面那个矩阵相加的例子中二维数组是A[N][N]
那么跳出内核函数的条件就是i==N
int i = blockIdx.x * blockDim.x + threadIdx.x;
请问一下是怎么通过这个从0一直遍历到N的
blockDim.x的意思是每个block中有多少个线程么
谢谢两位版主的回复
刚刚又看了下书,终于弄明白了。灰常感谢。。。ps.表情里面为什么没有玫瑰花
您客气了。
论坛暂无此光能,但您可以单独上传一个玫瑰花的图片的。