logo资料库

CUDA 编程指南4.0中文版.pdf

第1页 / 共193页
第2页 / 共193页
第3页 / 共193页
第4页 / 共193页
第5页 / 共193页
第6页 / 共193页
第7页 / 共193页
第8页 / 共193页
资料共193页,剩余部分请下载后查看
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
分享到:
收藏