当前位置: 首页 > 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);       //多维线程块定义 

相关文章:

  • 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上
  • 【星海随笔】信息安全管理与法律法规
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元
  • 4月外汇储备增加410亿美元,黄金储备连续6个月增加
  • 外交部回应西班牙未来外交战略:愿与之一道继续深化开放合作
  • “80后”海南琼海市长傅晟,去向公布
  • 建筑瞭望|融入自然的新泳池,治愈了中央公园的历史旧伤
  • 吴清:全力支持中央汇金公司发挥好类“平准基金”作用