CUDA 编程指南 4.0 中文版
译者:风辰
由于小弟的水平所限,此文档可能存在错误,如果你觉得本文档的
某些内容可能是错误,请联系我,谢谢!
由于这样或者那样的原因,此翻译版将可能会是“绝版”,谢谢大家
的支持。
任何人不得更改此文档内容或设置,更不能用于商业目的,本人不
承担任何责任。
目录
第一章 导论 ......................................................................................................................... 1
1.1 从图形处理到通用并行计算 ................................................................................ 1
1.2 CUDATM:一种通用并行计算架构 ...................................................................... 3
1.3 一种可扩展的编程模型 ........................................................................................ 3
1.4 文档结构 ................................................................................................................ 5
第二章 编程模型 ................................................................................................................. 7
2.1 内核 ........................................................................................................................ 7
2.2 线程层次 ................................................................................................................ 7
2.3 存储器层次 .......................................................................................................... 10
2.4 异构编程 .............................................................................................................. 11
2.5 计算能力 .............................................................................................................. 13
第三章 编程接口 ............................................................................................................... 15
3.1 用 nvcc 编译 ......................................................................................................... 15
3.1.1 编译流程 ................................................................................................... 15
3.1.1.1 离线编译 ........................................................................................ 15
3.1.1.2 即时编译 ........................................................................................ 16
3.1.2 二进制兼容性 ........................................................................................... 17
3.1.3 PTX 兼容性 ................................................................................................ 17
3.1.4 应用兼容性 ............................................................................................... 17
3.1.5 C/C++兼容性 ............................................................................................. 18
3.1.6 64 位兼容性 ............................................................................................... 18
3.2 CUDA C 运行时 ................................................................................................... 18
3.2.1 初始化 ....................................................................................................... 19
3.2.2 设备存储器 ............................................................................................... 19
3.2.3 共享存储器 ............................................................................................... 22
3.2.4 分页锁定主机存储器 ............................................................................... 28
3.2.4.1 可分享存储器(portable memory) .............................................. 28
3.2.4.2 写结合存储器 ................................................................................ 28
3.2.4.3 被映射存储器 ................................................................................ 28
3.2.5 异步并发执行 ........................................................................................... 29
3.2.5.1 主机和设备间异步执行 ................................................................ 29
3.2.5.2 数据传输和内核执行重叠 ............................................................ 30
3.2.5.3 并发内核执行 ................................................................................ 30
4
3.2.5.4 并发数据传输 ................................................................................ 30
3.2.5.5 流 .................................................................................................... 30
3.2.5.6 事件 ................................................................................................ 33
3.2.5.7 同步调用 ........................................................................................ 34
3.2.6 多设备系统 ............................................................................................... 34
3.2.6.1 枚举设备 ........................................................................................ 34
3.2.6.2 设备选择 ........................................................................................ 34
3.2.6.3 流和事件行为 ................................................................................ 35
3.2.6.4 p2p 存储器访问 .............................................................................. 35
3.2.6.5 p2p 存储器复制 .............................................................................. 36
3.2.7 统一虚拟地址空间 ................................................................................... 37
3.2.8 错误检查 ................................................................................................... 37
3.2.9 调用栈 ....................................................................................................... 38
3.2.10 纹理和表面存储器 ................................................................................. 38
3.2.10.1 纹理存储器 .................................................................................. 38
3.2.10.2 表面存储器(surface) .................................................................... 44
3.2.10.3 CUDA 数组 .................................................................................. 46
3.2.10.4 读写一致性 .................................................................................. 47
3.2.11 图形学互操作性 ..................................................................................... 47
3.2.11.1 OpenGL 互操作性 ........................................................................ 47
3.2.11.2 Direct3D 互操作性 ....................................................................... 50
3.2.11.3 SLI(速力)互操作性 ................................................................. 58
3.3 驱动 API .............................................................................................................. 58
3.3.1 上下文 ....................................................................................................... 61
3.3.2 模块 ........................................................................................................... 62
3.3.3 内核执行 ................................................................................................... 63
3.3.4 设备存储器 ............................................................................................... 65
3.3.5 共享存储器 ............................................................................................... 69
3.3.6 分页锁定主机存储器 ............................................................................... 71
3.3.7 异步并发执行 ........................................................................................... 71
3.3.7.1 流 .................................................................................................... 72
3.3.7.2 事件 ................................................................................................ 72
3.3.7.3 同步调用 ........................................................................................ 73
目录
3.3.8 多设备系统 ............................................................................................... 73
3.3.8.1 设备枚举 ........................................................................................ 73
3.3.8.2 p2p 存储器访问 .............................................................................. 74
3.3.8.3 p2p 存储器拷贝 .............................................................................. 74
3.3.9 统一虚拟地址空间 ................................................................................... 75
3.3.10 错误检查 ................................................................................................. 75
3.3.11 调用栈 ..................................................................................................... 76
3.3.12 纹理存储器和表面存储器 ..................................................................... 76
3.3.12.1 纹理存储器 .................................................................................. 76
3.3.12.2 表面存储器 .................................................................................. 78
3.3.13 图形学互操作性 ..................................................................................... 80
3.3.13.1 OpenGL 互操作性 ........................................................................ 80
3.3.10.2 Direct3D 互操作性 ....................................................................... 82
3.4 运行时 API 和驱动 API 的互操作性 ................................................................. 91
3.5 版本和互操作性 .................................................................................................. 91
3.6 计算模式 .............................................................................................................. 92
3.7 模式切换 .............................................................................................................. 92
3.8 Windows 上的 Tesla 计算集群模式 ..................................................................... 93
第四章 硬件实现 ............................................................................................................... 95
4.1 SIMT 架构 ............................................................................................................ 95
4.2 硬件多线程 .......................................................................................................... 96
第五章 性能指南 ............................................................................................................... 99
5.1 总体性能优化策略 .............................................................................................. 99
5.2 最大化利用率 ...................................................................................................... 99
5.2.1 应用层次 ................................................................................................... 99
5.2.2 设备层次 ................................................................................................... 99
5.2.3 多处理器层次 ......................................................................................... 100
5.3 最大化存储器吞吐量 ........................................................................................ 101
5.3.1 主机和设备的数据传输 ......................................................................... 102
5.3.2 设备存储器访问 ..................................................................................... 103
5.3.2.1 全局存储器 .................................................................................. 103
5.3.2.2 本地存储器 .................................................................................. 104
5.3.2.3 共享存储器 .................................................................................. 105
6
5.3.2.4 常量存储器 .................................................................................. 105
5.3.2.5 纹理和表面存储器 ...................................................................... 106
5.4 最大化指令吞吐量 ............................................................................................ 106
5.4.1 算术指令 ................................................................................................. 106
5.4.2 控制流指令 ............................................................................................. 109
5.4.3 同步指令 ................................................................................................. 109
附录 A 支持 CUDA 的 GPU ........................................................................................... 113
附录 B C 语言扩展 ........................................................................................................... 117
B.1 函数类型限定符 ................................................................................................ 117
B.1.1 __device__ ................................................................................................ 117
B.1.2 __global__ ................................................................................................ 117
B.1.3 __host__ .................................................................................................... 117
B.1.4 _noinline_ 和 __forceinline__ ................................................................ 118
B.2 变量类型限定符 ................................................................................................ 118
B.2.1 __device__ ................................................................................................ 118
B.2.2 __constant__ ............................................................................................. 118
B.2.3 __shared__ ................................................................................................ 119
B.2.4 __restrict__ .............................................................................................. 120
B.3 内置变量类型 ................................................................................................... 121
B.3.1 char1、uchar1、char2、uchar2、char3、uchar3、char4、uchar4、short1、
ushort1、short2、ushort2、short3、ushort3、short4、ushort4、int1、uint1、int2、
uint2、int3、uint3、int4、uint4、long1、ulong1、long2、ulong2、long3、ulong3、
long4、ulong4、float1、float2、float3、float4、double2 ............................ 121
B.3.2 dim3 类型 ................................................................................................ 122
B.4 内置变量 ........................................................................................................... 122
B.4.1 gridDim .................................................................................................... 122
B.4.2 blockIdx ................................................................................................... 122
B.4.3 blockDim ................................................................................................. 122
B.4.4 threadIdx .................................................................................................. 122
B.4.5 warpSize .................................................................................................. 122
B.5 存储器栅栏函数 ............................................................................................... 122
B.6 同步函数 ........................................................................................................... 124
B.7 数学函数 ........................................................................................................... 125
目录
B.8 纹理函数 ........................................................................................................... 125
B.8.1 tex1Dfetch() ............................................................................................. 125
B.8.2 tex1D() ..................................................................................................... 126
B.8.3 tex2D() ..................................................................................................... 126
B.8.4 tex3D() ..................................................................................................... 126
B.8.5 tex1DLayered() ........................................................................................ 126
B.8.6 tex2DLayered() ........................................................................................ 127
B.9 表面函数(surface) ............................................................................................. 127
B.9.1 surf1Dread() ............................................................................................. 127
B.9.2 surf1Dwrite() ........................................................................................... 127
B.9.3 surf2Dread() ............................................................................................. 127
B.9.4 surf2Dwrite() ........................................................................................... 128
B.10 时间函数 ......................................................................................................... 128
B.11 原子函数 .......................................................................................................... 128
B.11.1 数学函数 ............................................................................................... 129
B.11.1.1 atomicAdd() ................................................................................ 129
B.11.1.2 atomicSub() ................................................................................. 129
B.11.1.3 atomicExch() ............................................................................... 129
B.11.1.4 atomicMin() ................................................................................ 130
B.11.1.5 atomicMax() ................................................................................ 130
B.11.1.6 atomicInc() .................................................................................. 130
B.11.1.7 atomicDec() ................................................................................. 130
B.11.1.8 atomicCAS() ............................................................................... 131
B.11.2 位逻辑函数 ........................................................................................... 131
B.11.2.1 atomicAnd() ................................................................................ 131
B.11.2.2 atomicOr() ................................................................................... 131
B.11.2.3 atomicXor() ................................................................................. 131
B.12 束表决(warp vote)函数 .............................................................................. 131
B.13 取样计数器函数 ............................................................................................. 132
B.14 格式化输出 ..................................................................................................... 132
B.14.1 格式化符号 .......................................................................................... 133
B.14.2 限制 ...................................................................................................... 133
B.14.3 相关的主机端 API ............................................................................... 134
8
B.14.4 例程 ...................................................................................................... 134
B.15 动态全局存储器分配 ..................................................................................... 135
B.15.1 堆存储器分配 ...................................................................................... 136
B.15.2 与设备存储器 API 的互操作 .............................................................. 136
B.15.3 例程 ...................................................................................................... 136
B.15.3.1 每个线程的分配 ....................................................................... 136
B.15.3.2 每个线程块的分配 ................................................................... 137
B.15.3.3 在内核启动之间持久的分配 ................................................... 138
B.16 执行配置 ......................................................................................................... 140
B.17 发射绑定 ......................................................................................................... 140
B.18 #pragma unroll .................................................................................................. 143
附录 C 数学函数 ............................................................................................................. 145
C.1 标准函数 ........................................................................................................... 145
C.1.1 单精度浮点函数 .................................................................................... 145
C.1.2 双精度浮点函数 .................................................................................... 148
C.1.3 整型函数 ................................................................................................ 150
C.2 内置函数 ........................................................................................................... 150
C.2.1 单精度浮点函数 .................................................................................... 151
C.2.2 双精度浮点函数 .................................................................................... 152
C.2.3 整型函数 ................................................................................................ 153
C.2.4 类型转换函数 ........................................................................................ 154
附录 D C++语言支持 ...................................................................................................... 157
D.1 代码例子 ........................................................................................................... 157
D.1.1 数据类 .................................................................................................... 157
D.1.2 派生类 .................................................................................................... 158
D.1.3 类模板 .................................................................................................... 158
D.1.4 函数模板 ................................................................................................ 159
D.2 限制 ................................................................................................................... 160
D.2.1 限定符 .................................................................................................... 160
D.2.1.1 设备存储器限定符 ..................................................................... 160
D.2.1.2 Volatile 限定符 ............................................................................. 161
D.2.2 指针 ........................................................................................................ 161
D.2.3 运算符 .................................................................................................... 161