CUDA线程组织

线程组织基本介绍

线程与进程

进程是程序的一次执行,线程是进程内的一个相对独立的可执行单元。CUDA的并行计算就是通过多线程并行执行实现的。

线程的层次结构

在这里插入图片描述
在这里插入图片描述

软硬件对应关系

在这里插入图片描述

执行流程

在这里插入图片描述

线程索引

在这里插入图片描述

计算线程索引

(1)多维网格大小、线程块大小定义:dim3 grid_size(gx,gy,gz), block_size(dx,dy,dz)
(2)x维度是最内层(变化最快),z维度是最外层(变化最慢)
(3)线程索引通用公式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线程限制

函数:_host_cudaError_t cudaGetDeviceProperties (cudaDeviceProp* prop, int device)
功能:返回计算机设备信息
在这里插入图片描述

device_prop.cu代码:

#include <cuda_runtime.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
    int decive_id = 0;
    if (argc > 1) {
        decive_id = atoi(argv[1]);
    }
    // 设置主机当前所要用的设备
    cudaSetDevice(decive_id);
    cudaDeviceProp prop;
    // 获取设备信息
    cudaGetDeviceProperties(&prop, decive_id);
    printf("Device id: %d\n", decive_id);
    printf("设备名称: %s\n", prop.name);
    printf("每个线程块的最大寄存器数: %d\n", prop.regsPerBlock);
    printf("一个线程束中包含的最大线程数量: %d\n", prop.warpSize);
    printf("一个线程快中可以包含的最大线程数量: %d\n", prop.maxThreadsPerBlock);
    printf("在多维线程块数组中,每一维可以包含的最大线程数量: %d, %d, %d\n", prop.maxThreadsDim[0], prop.maxThreadsDim[1], prop.maxThreadsDim[2]);
    printf("在一个线程格中,每一维可以包含的线程块数量: %d, %d, %d\n",  prop.maxGridSize[0], prop.maxGridSize[1], prop.maxGridSize[2]);
    printf("设备上流多处理器的数量(SM): %d\n", prop.multiProcessorCount);
    printf("设备上全局内存总量: %g GB\n", prop.totalGlobalMem/(1024.0*1024*1024));
    printf("在一个线程块中可使用的最大共享内存数量数量: %g KB\n", prop.sharedMemPerBlock/1024.0);
    printf("每个SM的最大共享内存: %g KB\n", prop.sharedMemPerMultiprocessor/1024.);
    printf("常量内存总量: %g KB\n", prop.totalConstMem/1024.0);

    return 0;
}
nvcc -o device_prop device_prop.cu
./device_prop

运行结果:

Device id: 0
设备名称: NVIDIA GeForce RTX 3080
每个线程块的最大寄存器数: 65536
一个线程束中包含的最大线程数量: 32
一个线程快中可以包含的最大线程数量: 1024
在多维线程块数组中,每一维可以包含的最大线程数量: 1024, 1024, 64
在一个线程格中,每一维可以包含的线程块数量: 2147483647, 65535, 65535
设备上流多处理器的数量(SM): 70
设备上全局内存总量: 11.7631 GB
在一个线程块中可使用的最大共享内存数量数量: 48 KB
每个SM的最大共享内存: 100 KB
常量内存总量: 64 KB
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值