CUDA核函数开发基础与并行计算实战 - 第1节
一、GPU计算的历史与演进
聊GPU计算,得先从显卡说起。
早年的显卡,说白了就是专门画图的。那时候叫"图形加速卡",任务是把你电脑里的三角形、纹理、像素这些东西,快速渲染到屏幕上。CPU干这个太慢,于是大家想了个办法——搞个专门的硬件来做。
这个思路其实很朴素:通用的事情CPU做,专用的事情交给专用硬件。
但转折点出现在2006年左右。我记得那年NVIDIA发布了CUDA,一个划时代的东西。它让GPU不再只是"画图卡",而是变成了一个可以编程的并行计算设备。你想想看,GPU里有成百上千个核心,如果能让它们干点别的——比如科学计算、数据处理——那得多猛?
这就是GPU计算的本质:用大量相对简单的核心,并行处理大量相似的任务。
从那时起,GPU计算经历了几个阶段:
- 2006-2010年:萌芽期。CUDA刚出来,大家还在摸索。我记得当时文档少得可怜,踩坑是家常便饭。
- 2010-2015年:爆发期。深度学习火了,GPU成了标配。训练神经网络?没有GPU你基本别想。
- 2015年至今:成熟期。CUDA生态越来越完善,从科学计算到AI推理,GPU无处不在。
我个人觉得,GPU计算能走到今天,核心原因就一个:摩尔定律在CPU上快失效了,但GPU的并行路线还有巨大潜力。
二、CUDA的定位与优势
CUDA到底是什么?
官方说法是"统一计算设备架构"。但说白了,它就是NVIDIA给GPU开的一扇门——让你能用C++写代码,直接在GPU上跑。
它的定位很清晰:让开发者用相对熟悉的编程模型,利用GPU的并行计算能力。
CUDA的核心优势
我总结了几点,都是实际项目中体会到的:
| 优势 | 说明 |
|---|---|
| 并行能力强 | 一个GPU有几千个核心,理论上可以同时处理几千个任务 |
| 编程门槛低 | 用C++扩展,学过C/C++就能上手 |
| 生态成熟 | cuBLAS、cuDNN、Thrust等库,拿来即用 |
| 硬件亲和 | NVIDIA自家产品,优化到位 |
你可能会问:那AMD的ROCm呢?Intel的OneAPI呢?
嗯,这些我也用过。但说实话,CUDA的生态优势太大了。很多深度学习框架、科学计算库,都是优先支持CUDA。你在项目里用CUDA,基本不用担心"这个库能不能跑"的问题。
一句话总结:CUDA是目前最成熟、最通用的GPU编程平台。如果你刚入门GPU计算,从CUDA开始是最稳妥的选择。
三、CUDA开发环境搭建
这部分我踩过不少坑。环境搭不好,后面全是白搭。咱们一步步来。
3.1 NVIDIA驱动
驱动是基础中的基础。没有驱动,GPU就是一块废铁。
安装步骤:
- 去NVIDIA官网下载对应显卡的驱动
- 安装时选择"自定义安装",勾选"清洁安装"
- 重启电脑
- 在命令行输入
nvidia-smi,看到GPU信息就对了
小技巧:我习惯用 nvidia-smi -l 1 实时监控GPU状态。开发时开着它,能及时发现显存泄漏之类的问题。
3.2 CUDA Toolkit
Toolkit包含了编译器、库、调试工具等。没有它,你写不了CUDA代码。
安装要点:
- 版本要和驱动匹配。用
nvidia-smi看支持的CUDA版本 - 我建议安装最新稳定版,别追新
- 安装路径别带中文和空格
- 安装完成后,设置环境变量
CUDA_PATH
验证安装:
nvcc --version
能看到版本号,就说明装好了。
注意:我曾经遇到过一个问题——装了Toolkit但编译时找不到 cuda.h。后来发现是环境变量没配好。记得检查 PATH 里有没有 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\bin 这样的路径。
3.3 VS/CMake配置
开发环境我推荐两种:
- Visual Studio:Windows下最省心,自带CUDA项目模板
- CMake + 任意编辑器:跨平台,更灵活
Visual Studio配置
安装VS时勾选"使用C++的桌面开发"。然后新建项目,选择"CUDA"模板。嗯,就是这么简单。
CMake配置
这是我个人偏好的方式。写一个 CMakeLists.txt:
cmake_minimum_required(VERSION 3.18)
project(CUDA_Demo)
find_package(CUDA REQUIRED)
cuda_add_executable(main main.cu)
然后在命令行:
mkdir build
cd build
cmake ..
make
搞定。
避坑指南:用CMake时,记得把 .cu 文件后缀名写对。我见过有人写成 .cpp,结果编译器死活不认CUDA语法。
四、知识体系总览
为了让你对本章内容有个整体印象,我画了张图:
这张图把本章内容串起来了。从左到右,从历史到实践,一步步带你进入CUDA的世界。
好了,环境搭好了,基础概念也清楚了。接下来就可以真正开始写CUDA代码了。
想要更多资料,联系可可