CUDA 入门记录
前言(建议略过):
以下绝大部内容基于 NVIDIA CUDA 编程指南,同时 CUDA C Programming Guide - NVIDIA Documentation Hub 作为辅助。
网络资源繁杂,笔者希望在学习记录之余,以最简洁的形式将相关知识传达出去,为读者初次学习相关知识节约时间与精力,为中文互联网资源贡献薄力。
才疏学浅,若出现错误请直接指正。
Chapter 1. 介绍CUDA
1.1 WHAT
什么是 CUDA ?
官方说法:一个在GPU 上计算的新架构CUDA(Compute Unified Device Architecture) 统一计算设备架构,在GPU 上发布的一个新的硬件和软件架构,它不需要映射到一个图型API 便可在GPU 上管理和进行并行数据计算。
简单的说:CUDA 是 NVIDIA 官方开发的 GPU 的编程接口,不再需要通过 OpenGL 等类似图型规范和相关API使用 GPU 进行大规模并行计算。
1.2 HOW
如何使用 CUDA 进行 GPU 编程?
可参考步骤:
- 根据显卡安装 CUDA 和 cuDNN
- 下载 Visual Studio
- 创建一个 CUDA 项目模板
- 运行样例
详细环境配置步骤网上教程已经很丰富了,此处不再赘述。
1.3 WHY
为什么学习 CUDA 编程?
这个问题相信读者已有自己的答案。
个人而言,对于不满足于仅仅会使用 AI 框架的我,学习 CUDA 能够进一步深入 AI模型 计算时的细节,进一步深入底层。同时,“计算”一词对当今时代也有更多重要的意义。
Chapter 2. CUDA 编程模型
2.1 GPU :超多线程的协处理器
GPU 被设计用于高密度且并行的计算,如图形渲染。因此,更多的晶体管被投入到数据处理而不是数据缓存和流量控制。
在 CUDA 编程中,GPU 通常被称为设备(Device),而CPU及内存等被称为主机(Host)。
对于一个程序,我们将并行数据和高密度计算部分卸载到设备上。所谓并行数据和高密度计算即一个以不同数据作为输入执行许多次的相同计算程序。将其分散到设备的多个线程中,可极大缓解 CPU 的压力。
补充,在 CUDA 编程中,上述提到的计算程序被编译设备的指令序列,称为Kernel程序。
设备并不能直接和主机通讯,所以在使用设备时伴有数据由主机拷贝到设备,计算完后再拷贝回去的过程。