曦云系列通用计算GPU运行时API编程指南
1. 概述
2. 编程模型
2.1. 程序结构
2.2. 执行模型
2.3. 内存层次模型
2.4. 核函数
2.5. 动态并行
2.6. 图编程
2.7. MPS多进程服务
3. 编程接口
3.1. 设备管理
3.1.1. 查询设备信息
3.1.2. 选择运行设备
3.1.3. 初始化设备
3.2. 内存管理
3.2.1. 内存申请与释放
3.2.2. 内存拷贝
3.3. 流和事件
3.3.1. 流
3.3.1.1. 代码示例
3.3.1.2. 流管理函数
3.3.2. 事件
3.3.2.1. 代码示例
3.3.2.2. 事件管理函数
3.3.3. 操作并发
3.3.3.1. 使用异步流进行并发
3.3.3.2. 设置流之间依赖
3.3.4. 流回调
3.4. 同步
3.4.1. 系统级同步
3.4.2. 线程块级/线程束级同步
3.4.3. 用户细粒度并行同步
3.4.3.1. 协作组API
3.4.3.2. 线程组集体操作
3.4.3.3. 协作组示例
3.5. 流序内存分配
3.5.1. 基本接口
3.5.2. 内存池和内存池数据结构
3.5.3. 默认内存池
3.5.4. 显式内存池
3.5.5. 物理页面缓存行为
3.5.6. 多GPU的设备可访问性支持
3.5.7. IPC内存池
3.5.7.1. 创建和共享IPC内存池
3.5.7.2. 在导入进程中设置访问权限
3.5.7.3. 从导出的IPC内存池创建和共享分配
3.5.7.4. IPC导出内存池限制
3.5.7.5. IPC导入内存池限制
3.6. 多设备系统编程
3.6.1. 多设备管理
3.6.2. 点对点通信
3.6.2.1. 点对点访问
3.6.2.2. 点对点内存复制
3.6.3. 多GPU设备间的同步
3.7. 动态并行
3.7.1. 核函数
3.7.1.1. 异步启动
3.7.1.2. 启动环境配置
3.7.1.3. 用设备端运行时API启动
3.7.2. 内存管理
3.7.2.1. 内存声明和使用
3.7.2.2. 全局内存
3.7.2.3. 零拷贝内存
3.7.2.4. 常量内存
3.7.2.5. 共享内存和私有内存
3.7.2.6. 私有内存
3.7.3. 设备管理
3.7.4. 流和事件
3.7.4.1. 排序和并发
3.7.4.2. 同步
3.7.5. API附加说明
3.7.6. 代码示例
3.7.7. 性能分析
3.7.8. 限制和注意事项
3.7.8.1. 内存限制
3.7.8.2. API错误和启动失败
3.8. 图编程接口
3.8.1. 显式图编程接口
3.8.2. 流捕获图编程接口
3.8.3. 实例化图更新
3.8.3.1. 整图更新
3.8.3.2. 单个节点更新
3.8.3.3. 启用或禁用节点(Individual Node Enable)
3.8.3.4. 实例化图更新的限制
3.8.4. 图编程的注意事项
3.8.4.1. 图编程的调试接口
3.9. MPS多进程服务
3.9.1. MPS多进程服务控制
3.9.1.1. MPS多进程服务行为说明
3.9.1.2. MPS多进程服务使用限制
4. 编译和调试
4.1. 离线编译和静态运行
4.1.1. Makefile编译和示例
4.1.1.1. CMake编译和示例
4.2. 运行时编译和动态加载
4.3. 代码托管(Binary Cache)
4.3.1. 更改Binary Cache 文件支持Size
4.3.2. 自定义Cache文件路径
4.3.3. 关闭Binary Cache功能
4.4. 环境变量
4.5. 主机代码调试信息
4.6. 设备代码调试信息
4.6.1. 使用GPU printf
4.6.2. 使用GPU Trap Handler
5. 附录
5.1. 术语/缩略语
曦云系列通用计算GPU运行时API编程指南
索引
索引