当前位置: 首页 > news >正文

cuda多维线程的实例

1、注意:在多维中的变化时与平常的不一样,如下图所示,横向变换x,纵向变换y

2、cuda内置变量:

        1、thread(线程):

               一个线程可作为一个运算单元,多个thread可组成一个block(块).
        threadIdx.x:block中当前thread在x方向上的ID.
        threadIdx.y:block中当前thread在y方向上的ID.

        2、block(块):

                一个block中可包含多个thread,多个block可组成一个grid(网格).
                       blockIdx.x:grid中当前block在x方向上的ID.
                       blockIdx.y:grid中当前block在y方向上的ID.
                       blockDim.x:当前block中x方向上的thread数量.
                       blockDim.y:当前block中y方向上的thread数量.

        3、grid(网格):

                一个grid中可包含多个block.
         gridDim.x:当前grid中在x方向上的block数量.
       gridDim.y:当前grid中在y方向上的block数量.

3、网格与线程块大小的限制

        gridDim.x最大值--------2^31 - 1

        gridDim.y最大值--------2^16 - 1

        gridDim.z最大值--------2^16 - 1

        blockDim.x最大值----------1024

        blockDim.y最大值-----------1024

        blockDim.z最大值-----------64

        注意:线程块总的大小最大为1024!

4、二维网格、二维线程块

//二维网格、二维线程块
int tid = threadidx.y * blockDim.x + threadidx.x;
int bid =blockidx.y * gridDim.x + blockidx.x;
int id = blockId * (blockDim.x * blockDim.y) + tid;

5、三维网格、三维线程块:

//三维线程块
int tid = threadIdx.z * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x;
int bid = blockIdx.z * gridDim.x * gridDim.y + blocklIdx.y * gridDim.x + blockIdx.x;
int id = bid * (blockDim.x * blockDim.y * blockDim.z) + tid;

6、其他多种组合

//一维网格、一维线程块
int bid = blockIdx.x;
int id = blockIdx.x * blockDim.x + threadIdx.x;//二维网格、一维线程块
int bid = blockIdx.y * gridDim.x + blockIdx.x;
int id = bid * blockDim.x + threadIdx.x;//一维网格、二维线程块
int bid = blockIdx.x;
int id = blockIdx.x * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x;//二维网格、二维线程块
int bid = blockIdx.y * gridDim.x + blockIdx.x;
int id = bid * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x;//一维网格、三维线程块
int bid = 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 bid = blockIdx.y * gridDim.x + blockIdx.x;
int id = blockIdx.x * blockDim.x * blockDim.y * blockDim.z+ threadIdx.z * blockDim.y * blockDim.x+ threadIdx.y * blockDim.x + threadIdx.x;

7 、定义多维网格和线程块(c++构造函数语法):

dim3 grid_size(Gx, Gy, Gz);        //多维网格定义
dim3 block_size(Bx, By, Bz);       //多维线程块定义 

http://www.xdnf.cn/news/303913.html

相关文章:

  • 纷析云开源财务软件:重新定义企业财务自主权
  • 《Python星球日记》第35天:全栈开发(综合项目)
  • 基于 Flask的深度学习模型部署服务端详解
  • Linux 工具
  • docker + K3S + Jenkins + Harbor自动化部署
  • Opentack基础架构平台运维
  • iPhone或iPad想要远程投屏到Linux系统电脑,要怎么办?
  • react-12父子组件间的数据传递(子传父)(父传子)- props实现
  • Axure :列表详情、列表总数
  • Spring Boot 3.x集成SaToken使用swagger3+knife4j 4.X生成接口文档
  • 开源与商业:图形化编程工具的博弈与共生
  • ExtraMAME:复古游戏的快乐“时光机”
  • 信息论01:从通信到理论的飞跃
  • 第七章,VLAN技术
  • Github 2025-05-06Python开源项目日报 Top10
  • Kotlin与Java在Android生态中的竞争与互补关系
  • RT-Thread自用记录(暂定)
  • 第四章-初始化Direct3D
  • 餐饮部绩效考核管理制度与综合评估方法
  • 【java】程序设计基础 八股文版
  • 开放的力量:新零售生态的共赢密码
  • 每日算法-250506
  • weapp-vite - 微信小程序工具链的另一种选择
  • OpenGL超大分辨率图像显示
  • Windows玩游戏的时候,一按字符键就显示桌面
  • imapal sql优化之hint
  • Codeforces Round 1023 (Div. 2) (A-D)
  • USB学习【2】通讯的基础-反向不归零编码
  • 优势演员-评论家A2C详解:python从零实现
  • 【KWDB 创作者计划】一文掌握KWDB的时序表管理