图片网站 模板如何提高网站的自然排名
文章目录
- 1. 一维网格一维线程块
- 2. 二维网格二维线程块
- 3. 三维网格三维线程块
- 4. 不同组合形式
- 4.1 一维网格一维线程块
- 4.2 一维网格二维线程块
- 4.3 一维网格三维线程块
- 4.4 二维网格一维线程块
- 4.5 二维网格二维线程块
- 4.6 二维网格三维线程块
- 4.7 三维网格一维线程块
- 4.8 三维网格二维线程块
- 4.9 三维网格三维线程块
1. 一维网格一维线程块
定义grid与block尺寸:
dim3 grid_size(4);
dim3 block_size(8);
调用核函数:
kernal_fun<<<grid_size, block_size>>>(...);
具体索引方式如下图所示, b l o c k I d x . x blockIdx.x blockIdx.x 从0~3, t h r e a d I d x . x threadIdx.x threadIdx.x 从0~7
计算方式:
i n t i d = b l o c k I d x . x ∗ b l o c k D i m . x + t h r e a d I d x . x int \ id = blockIdx.x * blockDim.x + threadIdx.x int id=blockIdx.x∗blockDim.x+threadIdx.x
2. 二维网格二维线程块
定义grid与block尺寸
dim3 grid_size(2,2);
dim3 block_size(4,4);
调用核函数:
kernal_fun<<<grid_size, block_size>>>(...);
具体线程索引方式如下图所示, b l o c k I d x . x blockIdx.x blockIdx.x 和 b l o c k I d x . y blockIdx.y blockIdx.y 从0到1, t h r e a d I d x . x threadIdx.x threadIdx.x 和 t h r e a d I d x . y threadIdx.y threadIdx.y从0到3:
计算方式:
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d . y ∗ g i r d D i m . x i n t t h r e a d I d = t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x i n t i d = b l o c k I d ∗ ( b l o c k D i m . x ∗ b l o c k D i m . y ) + t h r e a d I d \begin{align*} &int \ blockId = blockIdx.x + blockId.y*girdDim.x \\ &int \ threadId = threadIdx.y * blockDim.x + threadIdx.x \\ &int \ id = blockId*(blockDim.x*blockDim.y) + threadId \end{align*} int blockId=blockIdx.x+blockId.y∗girdDim.xint threadId=threadIdx.y∗blockDim.x+threadIdx.xint id=blockId∗(blockDim.x∗blockDim.y)+threadId
3. 三维网格三维线程块
定义grid和block尺寸:
dim3 grid_size(2,2,2);
dim3 block_size(4,4,2);
调用核函数:
kernal_fun<<<grid_size, block_size>>>(...);
具体线程索引方式如图所示:
- b l o c k I d x . x blockIdx.x blockIdx.x 从0到1
- b l o c k I d x . y blockIdx.y blockIdx.y 从0到1
- b l o c k I d x . z blockIdx.z blockIdx.z 从0到1
- t h r e a d I d x . x threadIdx.x threadIdx.x 从0到3
- t h r e a d I d x . y threadIdx.y threadIdx.y 从0到3
- t h r e a d I d x . z threadIdx.z threadIdx.z 从0到1
计算方式:
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g i r d D i m . x + g r i d D i m . x ∗ g r i d D i m . y ∗ b l o c k I d x . z i n t t h r e a d I d = t h r e a d I d x . z ∗ b l o c k D i m . x ∗ b l o c k D i m . y + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x i n t i d = b l o c k I d ∗ ( b l o c k D i m . x ∗ b l o c k D i m . y ∗ b l o c k D i m . z ) + t h r e a d I d \begin{align*} &int \ blockId = blockIdx.x + blockIdx.y*girdDim.x + gridDim.x * gridDim.y*blockIdx.z \\ &int \ threadId = threadIdx.z * blockDim.x * blockDim.y+ threadIdx.y * blockDim.x + threadIdx.x \\ &int \ id = blockId*(blockDim.x*blockDim.y*blockDim.z) + threadId \end{align*} int blockId=blockIdx.x+blockIdx.y∗girdDim.x+gridDim.x∗gridDim.y∗blockIdx.zint threadId=threadIdx.z∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.xint id=blockId∗(blockDim.x∗blockDim.y∗blockDim.z)+threadId
4. 不同组合形式
4.1 一维网格一维线程块
i n t b l o c k I d = b l o c k I d x . x i n t i d = b l o c k I d x . x ∗ b l o c k D i m . x + t h r e a d I d x . x \begin{align*} &int \ blockId = blockIdx.x \\ &int \ id = blockIdx.x*blockDim.x + threadIdx.x \end{align*} int blockId=blockIdx.xint id=blockIdx.x∗blockDim.x+threadIdx.x
4.2 一维网格二维线程块
i n t b l o c k I d = b l o c k I d x . x i n t i d = b l o c k I d x . x ∗ b l o c k D i m . x ∗ b l o c k D i m . y + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x \begin{align*} &int \ blockId = blockIdx.x \\ &int \ id = blockIdx.x*blockDim.x*blockDim.y + threadIdx.y*blockDim.x + threadIdx.x \end{align*} int blockId=blockIdx.xint id=blockIdx.x∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x
4.3 一维网格三维线程块
i n t b l o c k I d = b l o c k I d x . x i n t i d = b l o c k I d x . x ∗ b l o c k D i m . x ∗ b l o c k D i m . y ∗ b l o c k D i m . z + t h r e a d I d x . z ∗ b l o c k D i m . y ∗ b l o c k D i m . x + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId = blockIdx.x \\ int \ id = blockIdx.x*blockDim.x*blockDim.y*blockDim.z +threadIdx.z*blockDim.y*blockDim.x +threadIdx.y*blockDim.x+threadIdx.x int blockId=blockIdx.xint id=blockIdx.x∗blockDim.x∗blockDim.y∗blockDim.z+threadIdx.z∗blockDim.y∗blockDim.x+threadIdx.y∗blockDim.x+threadIdx.x
4.4 二维网格一维线程块
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g r i d D i m . x i n t i d = b l o c k I d ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId=blockIdx.x+blockIdx.y∗gridDim.x \\ int \ id=blockId∗blockDim.x+threadIdx.x int blockId=blockIdx.x+blockIdx.y∗gridDim.xint id=blockId∗blockDim.x+threadIdx.x
4.5 二维网格二维线程块
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g r i d D i m . x i n t i d = b l o c k I d ∗ b l o c k D i m . x ∗ b l o c k D i m . y + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId=blockIdx.x+blockIdx.y∗gridDim.x \\ int \ id=blockId∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x int blockId=blockIdx.x+blockIdx.y∗gridDim.xint id=blockId∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x
4.6 二维网格三维线程块
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g r i d D i m . x i n t i d = b l o c k I d ∗ b l o c k D i m . x ∗ b l o c k D i m . y ∗ b l o c k D i m . z + t h r e a d I d x . z ∗ b l o c k D i m . x ∗ b l o c k D i m . y + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId=blockIdx.x+blockIdx.y∗gridDim.x \\ int \ id=blockId∗blockDim.x∗blockDim.y∗blockDim.z+threadIdx.z∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x int blockId=blockIdx.x+blockIdx.y∗gridDim.xint id=blockId∗blockDim.x∗blockDim.y∗blockDim.z+threadIdx.z∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x
4.7 三维网格一维线程块
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g r i d D i m . x + b l o c k I d x . z ∗ g r i d D i m . x ∗ g r i d D i m . y i n t i d = b l o c k I d ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId=blockIdx.x+blockIdx.y∗gridDim.x+blockIdx.z∗gridDim.x∗gridDim.y\\ int \ id=blockId∗blockDim.x+threadIdx.x int blockId=blockIdx.x+blockIdx.y∗gridDim.x+blockIdx.z∗gridDim.x∗gridDim.yint id=blockId∗blockDim.x+threadIdx.x
4.8 三维网格二维线程块
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g r i d D i m . x + b l o c k I d x . z ∗ g r i d D i m . x ∗ g r i d D i m . y i n t i d = b l o c k I d ∗ b l o c k D i m . x ∗ b l o c k D i m . y + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId=blockIdx.x+blockIdx.y∗gridDim.x+blockIdx.z∗gridDim.x∗gridDim.y \\ int \ id=blockId∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x int blockId=blockIdx.x+blockIdx.y∗gridDim.x+blockIdx.z∗gridDim.x∗gridDim.yint id=blockId∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x
4.9 三维网格三维线程块
i n t b l o c k I d = b l o c k I d x . x + b l o c k I d x . y ∗ g r i d D i m . x + b l o c k I d x . z ∗ g r i d D i m . x ∗ g r i d D i m . y i n t i d = b l o c k I d ∗ b l o c k D i m . x ∗ b l o c k D i m . y ∗ b l o c k D i m . z + t h r e a d I d x . z ∗ b l o c k D i m . x ∗ b l o c k D i m . y + t h r e a d I d x . y ∗ b l o c k D i m . x + t h r e a d I d x . x int \ blockId=blockIdx.x+blockIdx.y∗gridDim.x+blockIdx.z∗gridDim.x∗gridDim.y \\ int \ id=blockId∗blockDim.x∗blockDim.y∗blockDim.z+threadIdx.z∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x int blockId=blockIdx.x+blockIdx.y∗gridDim.x+blockIdx.z∗gridDim.x∗gridDim.yint id=blockId∗blockDim.x∗blockDim.y∗blockDim.z+threadIdx.z∗blockDim.x∗blockDim.y+threadIdx.y∗blockDim.x+threadIdx.x