Specifying thread Id in CUDA kernel in 3D -
i working convert 2d code 3d implementation
in 2d have following:
int row_number = blockidx.y * blockdim.y + threadidx.y int column_number = blockidx.x * blockdim.x + threadidx.x int threadid = row_number * grid_dimension + column_number i'm trying working in 3d
int row_number = int column_number = int depth_number = int threadid = row_number * grid_dimension + column_number + depth_number * grid_dimension * grid_dimension my first attempt has been this:
int row_number = blockidx.y * blockdim.y + threadidx.y int column_number = blockidx.x * blockdim.x + threadidx.x int depth_number = blockidx.z * blockdim.z + threadidx.z int threadid = row_number * grid_dimension + column_number + depth_number * grid_dimension * grid_dimension is expression threadid in 3d correct , if not how row, column, , depth numbers in 3d? i've seen expressions find blockid , threadid directly that's not quite have been looking for. if not problem might have other issues need investigate.
thanks.
you haven't defined mean grid_dimension.
certainly these formulations row/column/depth indices:
unsigned int row_number = blockidx.y * blockdim.y + threadidx.y; unsigned int column_number = blockidx.x * blockdim.x + threadidx.x; unsigned int depth_number = blockidx.z * blockdim.z + threadidx.z; to build globally unique thread id above variables, use:
unsigned long long idx = column_number + (row_number * griddim.x) + (depth_number * (griddim.x * griddim.y);
Comments
Post a Comment