Upload
whitney-gibbs
View
212
Download
0
Embed Size (px)
Citation preview
1ITCS 4/5010 CUDA Programming, UNC-Charlotte, B. Wilkinson, Jan 28, 2013, 3-DBlocks.ppt
Addressing 2-D grids with 3-D blocks
Class Discussion Notes
2
Given two-dimensional addressing, row, column
Use the general 2-D to 1-D flattening equation:
index = col + row * Ncol
where Ncol is the total number of columns in a row to get a unique ID.
Equation can be used multiple times in 2D/3D grids/blocks to get unique thread ID.
General Approach
3Thread
blockIdx.x
blockIdx.y
Block
Grid
threadID.x
threadID.y
x
y
We have already considered 2-D grids and 2-D blocks
4
Applicable when mapping 2-D data array onto grid.Determine number of threads to the chosen thread, row and column:
col = blockIdx.x*blockDim.x+threadIdx.xrow = blockIdx.y*blockDim.y+threadIdx.y
Then use:
ThreadID = col + row * N
where N = no of columns of threads in grid. N = blockDim.x * gridDim.x
Substituting we would get:
ThreadID = (blockIdx.x*blockDim.x+threadIdx.x) + (blockIdx.y*blockDim.y+threadIdx.y)* (blockDim.x * gridDim.x)= blockIdx.x*blockDim.x+threadIdx.x+ blockIdx.y*blockDim.y* blockDim.x * gridDim.x + threadIdx.y*blockDim.x *gridDim.x
Global thread ID – one approach
5
Using the general 2-D to 1-D flattening equation:index = column + row * Ncolumn
Block ID within grid:
blockID = blockIdx.x + blockIdx.y * gridDim.x
Thread ID within block:
BlockthreadID = threadIdx.x + threadIdx.y * blockDim.x
Then substitute BlockthreadID and blockID into flattening equation again to get threadID
Global thread ID - Another approach
6
2-D Grids and 3-D blocks
threadID.z
Thread
blockIdx.y
Block
Grid
threadID.y
threadID.x
blockIdx.x
7
We have global thread ID not considering z direction.
Call it threadIDxy
Using the general 2-D to 1-D flattening equation:
index = col + row * Ncol
threadID = threadID.z + threadIDxy * blockDim.z
3D Global thread ID One approach
8
2-D Address, (x, y) and block sizes Dx and Dy
Unique global thread ID = x + y Dx
3-D Address, (x, y, z) and block sizes Dx, Dy, and Dz.
Unique global thread ID = x + y Dx + zDxDy
3D Global thread ID Another approach
Questions