CUDA学习笔记
CUDA基础概念
CUDA 内置变量
1. 线程和块索引变量
这些变量用于确定当前线程在网格(grid)和块(block)中的位置:
变量名 | 数据类型 | 说明 |
---|---|---|
threadIdx |
dim3 |
当前线程在 block 内的索引(x, y, z 分量) |
blockIdx |
dim3 |
当前 block 在 grid 内的索引(x, y, z 分量) |
blockDim |
dim3 |
block 的维度(每个 block 的线程数,x, y, z 分量) |
gridDim |
dim3 |
grid 的维度(每个 grid 的 block 数,x, y, z 分量) |
2. 计算能力相关的常量
这些变量描述了 GPU 的硬件特性:
变量名 | 数据类型 | 说明 |
---|---|---|
warpSize |
int |
一个 warp 的线程数(通常是 32) |
__CUDA_ARCH__ |
int |
编译目标的计算能力(如 700 表示 SM 7.0) |
3. 内存和同步变量
这些变量用于控制内存访问和线程同步:
变量名 | 说明 |
---|---|
__shared__ |
定义共享内存(每个 block 共享) |
__constant__ |
定义常量内存(只读,全局可见) |
__device__ |
定义全局设备变量(所有线程可见) |
__syncthreads() |
块内线程同步(等待所有线程执行到此处) |
4. 数学和特殊函数
CUDA 提供了一些内置数学函数(如 sin
, exp
, atomicAdd
):
类别 | 示例函数 |
---|---|
数学运算 | sin , cos , exp , log , sqrt |
原子操作 | atomicAdd , atomicSub , atomicMax |
类型转换 | __float2half , __int2float_rn |
5. 其他特殊变量
变量名 | 说明 |
---|---|
clock() |
获取 GPU 时钟周期(用于计时) |
nanosleep() |
线程休眠(ns 级延迟) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 一只大笨熊!
评论