1
CUDA 编程指南 3.1 中文版
译者:风辰
由于小弟的水平所限,此文档可能存在错误,如果你觉得本文档的某些内
容可能是错误,请联系我,我不能像高纳德一样给你 2.56 美元,但是我会尽
快修正它,谢谢!
在本次更新过程中,很多地方参考了 cyrosly 大牛的意见,对此表示感
谢!
任何人不得更改此文档内容或设置,更不能用于商业目的,否则后果自
负。
由于时间有限,本次更新不涉及驱动 API,在此向大家表示抱歉!
2
目录
第一章 导论........................................................................................................................................ 6
1.1 从图形处理到通用并行计算 ............................................................................................. 6
1.2 CUDA
TM
:一种通用并行计算架构 ....................................................................................... 7
1.3 一种可扩展的编程模型 ..................................................................................................... 8
1.4 文档结构 ............................................................................................................................. 9
第二章 编程模型 ............................................................................................................................. 10
2.1 内核.................................................................................................................................... 10
2.2 线程层次 ........................................................................................................................... 10
2.3 存储器层次 ....................................................................................................................... 12
2.4 异构编程 ........................................................................................................................... 13
2.5 计算能力 ........................................................................................................................... 15
第三章 编程接口 ............................................................................................................................. 16
3.1 用 nvcc 编译 ..................................................................................................................... 16
3.1.1 编译流程 ............................................................................................................... 16
3.1.2 二进制兼容性 ....................................................................................................... 17
3.1.3 PTX 兼容性 ............................................................................................................ 17
3.1.4 应用兼容性 ........................................................................................................... 17
3.1.5 C/C++兼容性 ......................................................................................................... 17
3.1.6 64 位兼容性 .......................................................................................................... 18
3.2 CUDA C ............................................................................................................................... 18
3.2.1 设备存储器 ........................................................................................................... 18
3.2.2 共享存储器 ........................................................................................................... 20
3.2.3 多设备 ................................................................................................................... 25
3.2.4 纹理存储器 ........................................................................................................... 26
3.2.5 表面存储器(surface) ......................................................................................... 29
3.2.6 分页锁定主机存储器 ........................................................................................... 31
3.2.7 异步并发执行 ....................................................................................................... 32
3.2.8 图形学互操作性 ................................................................................................... 35
3.2.9 错误处理 ............................................................................................................... 42
3.2.9 使用设备模拟模式调试(已删除) ....................................................................... 42
3.3 驱动 API ............................................................................................................................ 44
3.3.1 上下文 ................................................................................................................... 46
3.3.2 模块 ....................................................................................................................... 47
3.3.3 内核执行 ............................................................................................................... 47
3.3.4 设备存储器 ........................................................................................................... 49
3.3.5 共享存储器 ........................................................................................................... 52
3.3.6 多设备 ................................................................................................................... 53
3.3.7 纹理存储器 ........................................................................................................... 54
3.3.8 分页锁定主机存储器 ........................................................................................... 56
3.3.9 异步并发执行 ....................................................................................................... 56
3.3.10 图形学互操作性 ................................................................................................. 57
3.3.11 错误处理 ............................................................................................................. 65
3.4 运行时 API 和驱动 API 的互操作性 ............................................................................... 65
3.5 版本和互操作性 ............................................................................................................... 66
3.6 计算模式 ........................................................................................................................... 67
3
3.7 模式切换 ........................................................................................................................... 67
第四章 硬件实现 ............................................................................................................................. 68
4.1 SIMT 架构 ......................................................................................................................... 68
4.2 硬件多线程 ....................................................................................................................... 68
4.3 多设备................................................................................................................................ 69
第五章 性能优化指南 ..................................................................................................................... 71
5.1 总体性能优化策略 ........................................................................................................... 71
5.2 最大化利用率 ................................................................................................................... 71
5.2.1 应用层次 ............................................................................................................... 71
5.2.2 设备层次 ............................................................................................................... 71
5.2.3 多处理器层次 ....................................................................................................... 71
5.3 最大化存储器吞吐量 ....................................................................................................... 73
5.3.1 主机和设备的数据传输 ....................................................................................... 73
5.3.2 设备存储器访问 ................................................................................................... 74
5.4 最大化指令吞吐量 ........................................................................................................... 77
5.4.1 算术指令 ............................................................................................................... 77
5.4.2 控制流指令 ........................................................................................................... 79
5.4.3 同步指令 ............................................................................................................... 79
附录 A 支持 CUDA 的 GPU ................................................................................................................. 81
附录 B C 语言扩展 ........................................................................................................................... 83
B.1 函数类型限定符 ............................................................................................................... 83
B.1.1 __device__ ........................................................................................................... 83
B.1.2 __global__ ........................................................................................................... 83
B.1.3 __host__ ............................................................................................................... 83
B.1.4 限制 ....................................................................................................................... 83
B.2 变量类型限定符 ............................................................................................................... 84
B.2.1 __device__ ........................................................................................................... 84
B.2.2 __constant__ ....................................................................................................... 84
B.2.3 __shared__ ........................................................................................................... 84
B.2.4 volatile ............................................................................................................... 85
B.2.5 限制 ....................................................................................................................... 85
B.3 内置变量类型 ................................................................................................................... 86
B.3.1.................................................................................................................................. 86
B.3.2 dim3 类型 .............................................................................................................. 87
B.4 内置变量 ........................................................................................................................... 87
B.4.1 gridDim ................................................................................................................. 87
B.4.2 blockIdx ............................................................................................................... 87
B.4.3 blockDim ............................................................................................................... 87
B.4.4 threadIdx ............................................................................................................. 87
B.4.5 warpSize ............................................................................................................... 88
B.4.6 限制 ....................................................................................................................... 88
B.5 存储器栅栏函数 ............................................................................................................... 88
B.6 同步函数 ........................................................................................................................... 89
B.7 数学函数 ........................................................................................................................... 90
B.8 纹理函数 ........................................................................................................................... 90
B.8.1 tex1Dfetch() ....................................................................................................... 90
4
B.8.2 tex1D() ................................................................................................................. 91
B.8.3 tex2D() ................................................................................................................. 91
B.8.4 tex3D() ................................................................................................................. 91
B.9 表面函数(surface) ......................................................................................................... 91
B.9.1 surf1Dread() ....................................................................................................... 91
B.9.2 surf1Dwrite() ..................................................................................................... 91
B.9.3 surf2Dread() ....................................................................................................... 91
B.9.4 surf2Dwrite() ..................................................................................................... 91
B.10 时间函数 ......................................................................................................................... 92
B.11 原子函数 ......................................................................................................................... 92
B.11.1 数学函数 ............................................................................................................. 92
B.11.2 位逻辑函数 ......................................................................................................... 94
B.12 束表决(warp vote)函数 ........................................................................................... 94
B.13 取样计数器函数 ............................................................................................................. 95
B.14 格式化输出 ..................................................................................................................... 95
B.14.1 格式化符号 ......................................................................................................... 95
B.14.2 限制 ..................................................................................................................... 95
B.14.3 相关的主机端 API .............................................................................................. 96
B.14.4 例程 ..................................................................................................................... 96
B.15 执行配置 ......................................................................................................................... 97
B.16 发射绑定 ......................................................................................................................... 97
附录 C 数学函数 ............................................................................................................................ 100
C.1 标准函数.......................................................................................................................... 100
C.1.1 单精度浮点函数................................................................................................... 100
C.1.2 双精度浮点函数................................................................................................... 102
C.1.3 整型函数............................................................................................................... 104
C.2 内置函数.......................................................................................................................... 104
C.2.1 单精度浮点函数................................................................................................... 104
C.2.2 双精度浮点函数................................................................................................... 105
C.2.3 整型函数............................................................................................................... 106
附录 D C++语言特性 ...................................................................................................................... 108
D.1 多态.................................................................................................................................. 108
D.2 默认参数 ......................................................................................................................... 108
D.3 运算符重载(事实上在 2.0 之前的所有版本也都支持) ......................................... 109
D.4 命名空间 ......................................................................................................................... 109
D.5 函数模板 ......................................................................................................................... 110
D.6 类...................................................................................................................................... 110
D.6.1 像素数据类型 ..................................................................................................... 111
D.6.2 函数对象 ............................................................................................................. 111
附录 E nvcc 特性 ........................................................................................................................... 113
E.1 _noinline_ 和 __forceinline__ ............................................................................... 113
E.2 #pragma unroll ........................................................................................................... 113
E.3 __restrict__ ................................................................................................................. 113
附录 F 纹理获取 ............................................................................................................................ 115
F.1 最近点取样 ..................................................................................................................... 115
F.2 线性滤波 ......................................................................................................................... 115
5
F.3 查找表.............................................................................................................................. 116
附录 G 计算能力 ............................................................................................................................ 118
G.1 特性和技术规范 ............................................................................................................. 118
G.2 浮点标准 ......................................................................................................................... 119
G.3 计算能力 1.x .................................................................................................................... 120
G.3.1 架构 ....................................................................................................................... 120
G.3.2 全局存储器 ........................................................................................................... 120
G.3.3 共享存储器 ........................................................................................................... 121
G.4 计算能力 2.0 .................................................................................................................... 123
G.4.1 架构 ....................................................................................................................... 123
G.4.2 全局存储器 ......................................................................................................... 124
G.4.3 共享存储器 ......................................................................................................... 125
G.4.4 常量存储器 ......................................................................................................... 126