首页 > 其他 > 详细

[CUDA]初学CUDA遇到的比较烧脑的问题

时间:2015-12-12 02:07:10      阅读:138      评论:0      收藏:0      [点我收藏+]

我们知道在cuda中设置global函数的调用方式的时候,可以传进多维参数。形如

	dim3 dimen1(4, 4);
	dim3 dimen2(3, 3);
	addKernel << <dimen1, dimen2 >> >(devA, devB, devC);

?这种时候我们如何知道一个线程所处的位置以及这个线程属于第几个线程呢?bubuko.com,布布扣

可以看出图中便是我们分配线程的布局。

?

对于处于某个线程格(block)中的某个线程(thread),我们已知的量有

该线程所在线程格的横纵坐标===>blockIdx.x,blockIdx.y

该线程在当前线程格中所处的横纵坐标===>threadIdx.x,threadIdx.y

每个线程格x,y方向的最大值blockDim.x,blockDim.y

每行/列线程格个数gridDim.x,gridDim.y

?

?

以上两条分别对应图中上下两个方格

那么就可以知道,这个线程所在的x,y坐标为

x =?threadIdx.x +?blockIdx.x * blockDim.x

y =?threadIdx.y +?blockIdx.y * blockDim.y

?

则可以知道当前线程的标号为 offset = 当前行中所处的位置 + 行数 * 每行线程个数

offset = x + y *?blockIdx.x *?gridDim.x

[CUDA]初学CUDA遇到的比较烧脑的问题

原文:http://bbezxcy.iteye.com/blog/2263549

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!