当前位置: 首页 > 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://autopsy.wjrtg.cn
http://bulldog.wjrtg.cn
http://bedsheet.wjrtg.cn
http://castiron.wjrtg.cn
http://arcjet.wjrtg.cn
http://arytenoidal.wjrtg.cn
http://capnomancy.wjrtg.cn
http://argo.wjrtg.cn
http://agaragar.wjrtg.cn
http://breccia.wjrtg.cn
http://berceau.wjrtg.cn
http://arrivederci.wjrtg.cn
http://astrometry.wjrtg.cn
http://baba.wjrtg.cn
http://brakesman.wjrtg.cn
http://anatomise.wjrtg.cn
http://biodynamical.wjrtg.cn
http://cavern.wjrtg.cn
http://bachelorism.wjrtg.cn
http://allogamous.wjrtg.cn
http://adatom.wjrtg.cn
http://bauble.wjrtg.cn
http://ambience.wjrtg.cn
http://atheistic.wjrtg.cn
http://atabal.wjrtg.cn
http://achlorhydria.wjrtg.cn
http://banish.wjrtg.cn
http://bronchography.wjrtg.cn
http://anodontia.wjrtg.cn
http://capsid.wjrtg.cn
http://www.dtcms.com/a/174562.html

相关文章:

  • C++中指针使用详解(4)指针的高级应用汇总
  • 标题:基于自适应阈值与K-means聚类的图像行列排序与拼接处理
  • 一个关于fsaverage bem文件的说明
  • 五一感想:知识产权加速劳动价值!
  • window 显示驱动开发-线程和同步级别一级(二)
  • SecureCrt设置显示区域横列数
  • PDF扫描件交叉合并工具
  • 从PotPlayer到专业播放器—基于 RTSP|RTMP播放器功能、架构、工程能力的全面对比分析
  • MySQL 8.4.5 源码编译安装指南
  • NLP 和大模型技术路线
  • Baichuan-Audio: 端到端语音交互统一框架
  • C#中读取文件夹(包含固定字样文件名)
  • 通过Kubernetes 外部 DNS控制器来自动管理Azure DNS 和 AKS
  • 算法中的数学:算术基本定理
  • QuecPython+腾讯云:快速连接腾讯云l0T平台
  • Hive优化秘籍:大数据处理加速之道
  • OpenGL超大分辨率图像显示
  • 恩智浦 GoPoint 全面解析:初学者的嵌入式 AI 学习指南
  • venv和pyenv在mac上
  • 【星海随笔】信息安全管理与法律法规
  • python3使用:macOS上通过Homebrew安装pip库
  • C++GO语言微服务项目之 go语言基础语法
  • Linux——特殊权限管理
  • 【STM32单片机】#14 PWR电源控制
  • 神经网络之互动练习详解:从基础到拟合非线性数据
  • C++ 内存泄漏相关
  • OpenShift AI - OpenShift 支持的 NVIDIA GPU 共享和分区技术 2
  • Netty 的 Reactor 模型
  • 我用cursor 搭建了临时邮箱服务-Temp Mail 365
  • K-means