美文网首页
gpu线程索引

gpu线程索引

作者: 无敌科 | 来源:发表于2019-08-01 11:02 被阅读0次

线程索引的计算公式

一个Grid可以包含多个Blocks,Blocks的组织方式可以是一维的,二维或者三维的。block包含多个Threads,这些Threads的组织方式也可以是一维,二维或者三维的。

CUDA中每一个线程都有一个唯一的标识ID—ThreadIdx,这个ID随着Grid和Block的划分方式的不同而变化,这里给出Grid和Block不同划分方式下线程索引ID的计算公式。

1、 grid划分成1维,block划分为1维

    int threadId = blockIdx.x *blockDim.x + threadIdx.x;  

2、 grid划分成1维,block划分为2维  

    int threadId = blockIdx.x * blockDim.x * blockDim.y+ threadIdx.y * blockDim.x + threadIdx.x;  

3、 grid划分成1维,block划分为3维  

    int threadId = blockIdx.x * blockDim.x * blockDim.y * blockDim.z  

                       + threadIdx.z * blockDim.y * blockDim.x  

                       + threadIdx.y * blockDim.x + threadIdx.x;  

4、 grid划分成2维,block划分为1维  

    int blockId = blockIdx.y * gridDim.x + blockIdx.x;  

    int threadId = blockId * blockDim.x + threadIdx.x;  

5、 grid划分成2维,block划分为2维 

    int blockId = blockIdx.x + blockIdx.y * gridDim.x;  

    int threadId = blockId * (blockDim.x * blockDim.y)  

                       + (threadIdx.y * blockDim.x) + threadIdx.x;  

6、 grid划分成2维,block划分为3维

    int blockId = blockIdx.x + blockIdx.y * gridDim.x;  

    int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z)  

                       + (threadIdx.z * (blockDim.x * blockDim.y))  

                       + (threadIdx.y * blockDim.x) + threadIdx.x;  

7、 grid划分成3维,block划分为1维 

    int blockId = blockIdx.x + blockIdx.y * gridDim.x  

                     + gridDim.x * gridDim.y * blockIdx.z;  

    int threadId = blockId * blockDim.x + threadIdx.x;  

8、 grid划分成3维,block划分为2维  

    int blockId = blockIdx.x + blockIdx.y * gridDim.x  

                     + gridDim.x * gridDim.y * blockIdx.z;  

    int threadId = blockId * (blockDim.x * blockDim.y)  

                       + (threadIdx.y * blockDim.x) + threadIdx.x;  

9、 grid划分成3维,block划分为3维

    int blockId = blockIdx.x + blockIdx.y * gridDim.x  

                     + gridDim.x * gridDim.y * blockIdx.z;  

    int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z)  

                       + (threadIdx.z * (blockDim.x * blockDim.y))  

                       + (threadIdx.y * blockDim.x) + threadIdx.x;   

---------------------

原文:https://blog.csdn.net/dcrmg/article/details/54867507

相关文章

网友评论

      本文标题:gpu线程索引

      本文链接:https://www.haomeiwen.com/subject/psqqdctx.html