|
原帖由 悠闲的小猫 于 2011-3-27 18:34 发表 ![]()
对了。您的意图是:
根据voxelStatus的(x0,y0,z0)处的值,来设置BoxVoxelStatus(x0-W/2,y0-W/2,z0-W/2)到BoxVoxelStatus(x0+W/2,y0+W/2,z0+W/2)的值,最后再取出BoxVoxelStatus里这些值为1的点的坐标吗?
希望我没有理解错。。
原帖由 申宝明 于 2011-3-27 18:39 发表 ![]()
恩 恩 是啊是啊 就是这个逻辑啊 输出的是BoxVoxelStatus为1的对应的 x y z值啊 就是这些值和cpu计算出的不一样啊
我给你举个特例:
假设BoxWidth=2, 同时假设在threadIdx.x为2,blockIdx.x为3,blockIdx.y为4的时候,
才可以满足voxelStatus[index]==0, 那么:
你的第一次kernel标记了
BoxVoxelStatus[]中对应如下的点:
(1,2,3) (2,2,3) (1,3,3) (2,3,3)
(1,2,4) (2,2,4) (1,3,4) (2,3,4)
一共8个。
然后在你的第二个kernel里面,
你却会得到什么呢?根据你的写法, 是:
cudaBoxIndex_X[],cudaBoxIndex_Y[],cudaBoxIndex_Z[])
偏移a 3,2,1
偏移b 3,2,2
偏移c 3,3,1
偏移d 3,3,2
偏移e 4,2,1
偏移f 4,2,2
偏移g 4,3,1
偏移h 4,3,2
(a-h是0-7里面的8个数的某种可能的排列)
所以您看。。您第二个kernel取出的结果和您第一个kernel得到的结果,是不是有点不对?
跟据您的写法,您无法得到本回帖的第一段中提出的和第二段中您所确定的目的。
[ 本帖最后由 悠闲的小猫 于 2011-3-27 19:53 编辑 ] |
|