logo资料库

CUDA编程指南5.0中文版.pdf

第1页 / 共240页
第2页 / 共240页
第3页 / 共240页
第4页 / 共240页
第5页 / 共240页
第6页 / 共240页
第7页 / 共240页
第8页 / 共240页
资料共240页,剩余部分请下载后查看
目 录
第一章 导论
1.1 从图形处理到通用并行计算
1.2 CUDATM:一种通用并行计算架构
1.3 一种可扩展的编程模型
1.4 文档结构
第二章 编程模型
2.1 内核
2.2 线程层次
2.3 存储器层次
2.4 异构编程
2.5 计算能力
第三章 编程接口
3.1 用nvcc编译
3.1.1 编译流程
3.1.1.1 离线编译
3.1.1.2 即时编译
3.1.2 二进制兼容性
3.1.3 PTX兼容性
3.1.4 应用兼容性
3.1.5 C/C++兼容性
3.1.6 64位兼容性
3.2 CUDA C运行时
3.2.1 初始化
3.2.2 设备存储器
3.2.3 共享存储器
3.2.4 分页锁定主机存储器
3.2.4.1 可分享存储器(portable memory)
3.2.4.2 写结合存储器
3.2.4.3 被映射存储器
3.2.5 异步并发执行
3.2.5.1 主机和设备间异步执行
3.2.5.2 数据传输和内核执行重叠
3.2.5.3 并发内核执行
3.2.5.4 并发数据传输
3.2.5.5 流
3.2.5.6 事件
3.2.5.7 同步调用
3.2.6 多设备系统
3.2.6.1 枚举设备
3.2.6.2 设备指定
3.2.6.3 流和事件行为
3.2.6.4 p2p存储器访问
3.2.6.5 p2p存储器复制
3.2.6.6 统一虚拟地址空间
3.2.6.7 错误检查
3.2.7 调用栈
3.2.8 纹理和表面存储器
3.2.8.1 纹理存储器
3.2.8.2 表面存储器(surface)
3.2.8.3 CUDA 数组
3.2.8.4 读写一致性
3.2.9 图形学互操作性
3.2.9.1 OpenGL互操作性
3.2.9.2 Direct3D互操作性
3.2.9.3 SLI(速力)互操作性
3.3 版本和兼容性
3.4 计算模式
3.5 模式切换
3.6 Windows上的Tesla计算集群模式
第四章 硬件实现
4.1 SIMT 架构
4.2 硬件多线程
第五章 性能指南
5.1 总体性能优化策略
5.2 最大化利用率
5.2.1 应用层次
5.2.2 设备层次
5.2.3 多处理器层次
5.3 最大化存储器吞吐量
5.3.1 主机和设备的数据传输
5.3.2 设备存储器访问
5.3.2.1 全局存储器
5.3.2.2 本地存储器
5.3.2.3 共享存储器
5.3.2.4 常量存储器
5.3.2.5 纹理和表面存储器
5.4 最大化指令吞吐量
5.4.1 算术指令
5.4.2 控制流指令
5.4.3 同步指令
附录 A 支持CUDA的GPU
附录 B C语言扩展
B.1 函数类型限定符
B.1.1 __device__
B.1.2 __global__
B.1.3 __host__
B.1.4 _noinline_ 和 __forceinline__
B.2 变量类型限定符
B.2.1 __device__
B.2.2 __constant__
B.2.3 __shared__
B.2.4 __restrict__
B.3 内置变量类型
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
B.3.2 dim3类型
B.4 内置变量
B.4.1 gridDim
B.4.2 blockIdx
B.4.3 blockDim
B.4.4 threadIdx
B.4.5 warpSize
B.5 存储器栅栏函数
B.6 同步函数
B.7 数学函数
B.8 纹理函数
B.8.1 纹理对象函数
B.8.1.1 tex1Dfetch()
B.8.1.2 tex1D()
B.8.1.3 tex2D()
B.8.1.4 tex3D()
B.8.1.5 tex1DLayered()
B.8.1.6 tex2DLayered()
B.8.1.7 texCubemap()
B.8.1.8 texCubemapLayered()
B.8.1.9 tex2Dgather()
B.8.2 纹理参考函数
B.8.2.1 tex1Dfetch()
B.8.2.2 tex1D()
B.8.2.3 tex2D()
B.8.2.4 tex3D()
B.8.2.5 tex1DLayered()
B.8.2.6 tex2DLayered()
B.8.2.7 texCubemap()
B.8.2.8 texCubemapLayered()
B.8.2.9 tex2Dgather()
B.9 表面函数(surface)
B.9.1 表面对象函数
B.9.1.1 surf1Dread()
B.9.1.2 surf1Dwrite()
B.9.1.3 surf2Dread()
B.9.1.4 surf2Dwrite()
B.9.1.5 surf3Dread()
B.9.1.6 surf3Dwrite()
B.9.1.7 surf1DLayeredread()
B.9.1.8 surf1DLayeredwrite()
B.9.1.9 surf2DLayeredread()
B.9.1.10 surf2DLayeredwrite()
B.9.1.11 surfCubemapread()
B.9.1.12 surfCubemapwrite()
B.9.1.13 surfCubemapLayeredread()
B.9.1.14 surfCubemapLayeredwrite()
B.9.2 表面引用API
B.9.2.1 surf1Dread()
B.9.2.2 surf1Dwrite()
B.9.2.3 surf2Dread()
B.9.2.4 surf2Dwrite()
B.9.2.5 surf3Dread()
B.9.2.6 surf3Dwrite()
B.9.2.7 surf1DLayeredread()
B.9.2.8 surf1DLayeredwrite()
B.9.2.9 surf2DLayeredread()
B.9.2.10 surf2DLayeredwrite()
B.9.2.11 surfCubemapread()
B.9.2.12 surfCubemapwrite()
B.9.2.13 surfCubemapLayeredread()
B.9.2.14 surfCubemapLayeredwrite()
B.10 时间函数
B.11 原子函数
B.11.1 数学函数
B.11.1.1 atomicAdd()
B.11.1.2 atomicSub()
B.11.1.3 atomicExch()
B.11.1.4 atomicMin()
B.11.1.5 atomicMax()
B.11.1.6 atomicInc()
B.11.1.7 atomicDec()
B.11.1.8 atomicCAS()
B.11.2 位逻辑函数
B.11.2.1 atomicAnd()
B.11.2.2 atomicOr()
B.11.2.3 atomicXor()
B.12 束表决(warp vote)函数
B.13 束洗牌函数
B.13.1 概览
B.13.2 在束内广播一个值
B.13.3 计算8个线程的前缀和
B.13.4 束内求和
B.14 取样计数器函数
B.15 断言
B.16 格式化输出
B.16.1 格式化符号
B.16.2 限制
B.16.3 相关的主机端API
B.16.4 例程
B.17 动态全局存储器分配
B.17.1 堆存储器分配
B.17.2 与设备存储器API的互操作
B.17.3 例程
B.17.3.1 每个线程的分配
B.17.3.2 每个线程块的分配
B.17.3.3 在内核启动之间持久的分配
B.18 执行配置
B.19 启动绑定
B.20 #pragma unroll
B.21 SIMD 视频指令
附录 C 数学函数
C.1 标准函数
C.1.1 单精度浮点函数
C.1.2 双精度浮点函数
C.2 内置函数
C.2.1 单精度浮点函数
C.2.2 双精度浮点函数
附录 D C++语言支持
D.1 代码例子
D.1.1 数据类
D.1.2 派生类
D.1.3 类模板
D.1.4 函数模板
D.1.5 函子类
D.2 限制
D.2.1 预处理符号
D.2.2 限定符
D.2.2.1 设备存储器限定符
D.2.2.2 Volatile限定符
D.2.3 指针
D.2.4 运算符
D.2.4.1 赋值运算符
D.2.4.2 地址运算符
D.2.5 函数
D.2.5.1 编译器生成的函数
D.2.5.2 函数参数
D.2.5.3 函数内静态变量
D.2.5.4 函数指针
D.2.5.5 函数递归
D.2.6 类
D.2.6.1 数据成员
D.2.6.2 函数成员
D.2.6.3 虚函数
D.2.6.4 虚基类
D.2.6.5 Windows相关
D.2.7 模板
附录 E 纹理获取
E.1 最近点取样
E.2 线性滤波
E.3 查找表
附录 F 计算能力
F.1 特性和技术规范
F.2 浮点标准
F.3 计算能力1.x
F.3.1 架构
F.3.2 全局存储器
F.3.2.1 计算能力1.0和1.1的设备
F.3.2.2 计算能力1.2和1.3的设备
F.3.3 共享存储器
F.3.3.1 32位步长访问
F.3.3.2 32位广播访问
F.3.3.3 8位和16位访问
F.3.3.4 大于32位访问
F.4 计算能力2.x
F.4.1 架构
F.4.2 全局存储器
F.4.3 共享存储器
F.4.3.1 32位步长访问
F.4.3.2 大于32位访问
F.4.4 常量存储器
F.5 计算能力3.x
F.5.1 架构
F.5.2 全局存储器访问
F.5.3 共享存储器
F.5.3.1 64位模式
F.5.3.2 32位模式
附录 G 驱动API
G.1 上下文
G.2 模块
G.3 内核执行
G.4 运行时API和驱动API的互操作性
G.5 注意
CUDA编编编程程程指指指南南南5.0中中中文文文版版版 风风风辰辰辰
目目目 录录录 3 4 7 i 1 3 7 1 目录 第一章 导论 1.1 从图形处理到通用并行计算 1.2 CUDAT M :一种通用并行计算架构 1.3 一种可扩展的编程模型 1.4 文档结构 第二章 编程模型 2.1 内核 2.2 线程层次 8 2.3 存储器层次 11 2.4 异构编程 11 2.5 计算能力 11 第三章 编程接口 15 3.1 用nvcc编译 15 3.1.1 编译流程 16 3.1.1.1 离线编译 16 3.1.1.2 即时编译 16 3.1.2 二进制兼容性 17 3.1.3 PTX兼容性 17 3.1.4 应用兼容性 18 3.1.5 C/C++兼容性 19 64位兼容性 19 3.1.6 3.2 CUDA C运行时 19
ii CUDA编程指南5.0中文版 3.2.1 初始化 20 3.2.2 设备存储器 20 3.2.3 共享存储器 24 3.2.4 分页锁定主机存储器 32 3.2.4.1 可分享存储器(portable memory) 34 3.2.4.2 写结合存储器 34 3.2.4.3 被映射存储器 34 3.2.5 异步并发执行 35 3.2.5.1 主机和设备间异步执行 35 3.2.5.2 数据传输和内核执行重叠 36 3.2.5.3 并发内核执行 36 3.2.5.4 并发数据传输 36 3.2.5.5 流 37 3.2.5.6 事件 41 3.2.5.7 同步调用 42 3.2.6 多设备系统 42 3.2.6.1 枚举设备 42 3.2.6.2 设备指定 42 3.2.6.3 流和事件行为 43 p2p存储器访问 44 3.2.6.4 p2p存储器复制 45 3.2.6.5 3.2.6.6 统一虚拟地址空间 45 3.2.6.7 错误检查 46 3.2.7 调用栈 47 3.2.8 纹理和表面存储器 47 3.2.8.1 纹理存储器 47 3.2.8.2 表面存储器(surface) 60 3.2.8.3 CUDA 数组 65
目录 iii 3.2.8.4 读写一致性 66 3.2.9 图形学互操作性 66 3.2.9.1 OpenGL互操作性 67 3.2.9.2 Direct3D互操作性 70 SLI(速力)互操作性 82 3.2.9.3 3.3 版本和兼容性 82 3.4 计算模式 83 3.5 模式切换 84 3.6 Windows上的Tesla计算集群模式 85 第四章 硬件实现 87 4.1 SIMT 架构 87 4.2 硬件多线程 88 第五章 性能指南 91 5.1 总体性能优化策略 91 5.2 最大化利用率 91 5.2.1 应用层次 91 5.2.2 设备层次 92 5.2.3 多处理器层次 92 5.3 最大化存储器吞吐量 94 5.3.1 主机和设备的数据传输 95 5.3.2 设备存储器访问 96 5.3.2.1 全局存储器 96 5.3.2.2 本地存储器 98 5.3.2.3 共享存储器 99 5.3.2.4 常量存储器 100 5.3.2.5 纹理和表面存储器 100 5.4 最大化指令吞吐量 100
iv CUDA编程指南5.0中文版 5.4.1 算术指令 101 5.4.2 控制流指令 104 5.4.3 同步指令 105 附录 A 支持CUDA的GPU 107 附录 B C语言扩展 109 B.1 函数类型限定符 109 109 109 109 110 B.2 变量类型限定符 110 111 111 constant shared 112 113 restrict B.3 内置变量类型 115 noinline 和 forceinline device B.2.3 B.2.4 B.1.2 B.1.3 B.2.1 B.2.2 global host B.1.1 B.1.4 device 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 115 B.3.2 dim3类型 115 B.4 内置变量 115 B.4.1 gridDim 115 B.4.2 blockIdx 115 B.4.3 blockDim 117 B.4.4 threadIdx 117 B.4.5 warpSize 117
目录 v B.8.1.5 B.8.1.8 B.8.1.9 B.8.1.6 B.8.1.7 B.8.1.2 B.8.1.3 B.8.1.4 B.8.1.1 B.5 存储器栅栏函数 117 B.6 同步函数 119 B.7 数学函数 120 B.8 纹理函数 120 B.8.1 纹理对象函数 120 tex1Dfetch() 120 tex1D() 121 tex2D() 121 tex3D() 121 tex1DLayered() 121 tex2DLayered() 122 texCubemap() 122 texCubemapLayered() 122 tex2Dgather() 123 B.8.2 纹理参考函数 123 tex1Dfetch() 123 tex1D() 124 tex2D() 124 tex3D() 125 tex1DLayered() 125 tex2DLayered() 125 texCubemap() 125 texCubemapLayered() 126 tex2Dgather() 126 B.9 表面函数(surface) 126 B.9.1 表面对象函数 127 surf1Dread() 127 surf1Dwrite() 127 B.8.2.1 B.8.2.2 B.8.2.3 B.8.2.4 B.8.2.5 B.8.2.6 B.8.2.7 B.8.2.8 B.8.2.9 B.9.1.1 B.9.1.2
vi CUDA编程指南5.0中文版 B.9.1.7 B.9.1.8 B.9.1.4 B.9.1.5 B.9.1.6 B.9.1.3 surf2Dread() 127 surf2Dwrite() 128 surf3Dread() 128 surf3Dwrite() 128 surf1DLayeredread() 129 surf1DLayeredwrite() 129 surf2DLayeredread() 129 B.9.1.9 B.9.1.10 surf2DLayeredwrite() 130 B.9.1.11 surfCubemapread() 130 B.9.1.12 surfCubemapwrite() 131 B.9.1.13 surfCubemapLayeredread() 131 B.9.1.14 surfCubemapLayeredwrite() 131 B.9.2 表面引用API 132 surf1Dread() 132 surf1Dwrite() 132 surf2Dread() 132 surf2Dwrite() 133 surf3Dread() 133 surf3Dwrite() 133 surf1DLayeredread() 134 surf1DLayeredwrite() 134 surf2DLayeredread() 135 B.9.2.9 B.9.2.10 surf2DLayeredwrite() 135 B.9.2.11 surfCubemapread() 135 B.9.2.12 surfCubemapwrite() 136 B.9.2.13 surfCubemapLayeredread() 136 B.9.2.14 surfCubemapLayeredwrite() 137 B.10 时间函数 137 B.9.2.2 B.9.2.3 B.9.2.5 B.9.2.6 B.9.2.7 B.9.2.8 B.9.2.1 B.9.2.4
分享到:
收藏