
[{"content":"","date":"2026-06-10","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" cuda-oxide # 用 Rust 调用 CUDA 的完整路线:从 bindgen、driver API、runtime API,到 Rust 端封装一个能用的 kernel。\n按 series_order 顺序阅读。\n","date":"2026-06-10","externalUrl":null,"permalink":"/series/cuda-oxide/","section":"专题","summary":"cuda-oxide # 用 Rust 调用 CUDA 的完整路线:从 bindgen、driver API、runtime API,到 Rust 端封装一个能用的 kernel。\n按 series_order 顺序阅读。\n","title":"cuda-oxide","type":"series"},{"content":"","date":"2026-06-10","externalUrl":null,"permalink":"/tags/cuda-oxide/","section":"Tags","summary":"","title":"Cuda-Oxide","type":"tags"},{"content":"稍后更新。\n","date":"2026-06-10","externalUrl":null,"permalink":"/posts/cuda-oxide-01-intro/","section":"博客","summary":"本系列将用 Rust 写 CUDA。开篇正在筹备。","title":"cuda-oxide:开篇","type":"posts"},{"content":" HelloCUDA # 你写过 Hello, World。\n在这里,你将学会写 Hello, CUDA。\n开始写你的第一行CUDA → 面向中文开发者的 CUDA 入门、专题与速查。\n入门路径 按顺序读完,你就能写出第一个 kernel 了。\n01认识 CUDA 02安装环境 03Hello, CUDA 正在更新的专题 围绕一个主题持续更新,按顺序读最高效。\nSERIES cuda-oxide 用 Rust 写 CUDA — 从 bindgen 到能跑 kernel 1/12 ","date":"2026-06-10","externalUrl":null,"permalink":"/","section":"HelloCUDA","summary":" HelloCUDA # 你写过 Hello, World。\n在这里,你将学会写 Hello, CUDA。\n开始写你的第一行CUDA → 面向中文开发者的 CUDA 入门、专题与速查。\n入门路径 按顺序读完,你就能写出第一个 kernel 了。\n01认识 CUDA 02安装环境 03Hello, CUDA 正在更新的专题 围绕一个主题持续更新,按顺序读最高效。\nSERIES cuda-oxide 用 Rust 写 CUDA — 从 bindgen 到能跑 kernel 1/12 ","title":"HelloCUDA","type":"page"},{"content":"","date":"2026-06-10","externalUrl":null,"permalink":"/tags/rust/","section":"Tags","summary":"","title":"Rust","type":"tags"},{"content":"","date":"2026-06-10","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"2026-06-10","externalUrl":null,"permalink":"/posts/","section":"博客","summary":"","title":"博客","type":"posts"},{"content":"","date":"2026-06-10","externalUrl":null,"permalink":"/categories/%E4%B8%93%E9%A2%98/","section":"Categories","summary":"","title":"专题","type":"categories"},{"content":" 专题 # 每个专题是围绕一个主题的连续阅读路径,按顺序读最高效。\n","date":"2026-06-10","externalUrl":null,"permalink":"/series/","section":"专题","summary":"专题 # 每个专题是围绕一个主题的连续阅读路径,按顺序读最高效。\n","title":"专题","type":"series"},{"content":"","date":"2026-06-09","externalUrl":null,"permalink":"/tags/%E5%85%AC%E5%91%8A/","section":"Tags","summary":"","title":"公告","type":"tags"},{"content":"很高兴你能来到这里。\nHelloCUDA 是一个入门 CUDA 编程的地方。\n想投稿、有想看的主题、或者文章里发现了错,欢迎来信(联系方式)。\n","date":"2026-06-09","externalUrl":null,"permalink":"/posts/hello-cuda/","section":"博客","summary":"HelloCUDA 上线了——一个入门 CUDA 编程的地方。","title":"你好,HelloCUDA","type":"posts"},{"content":"","date":"2026-06-09","externalUrl":null,"permalink":"/categories/%E6%9D%82%E8%B0%88/","section":"Categories","summary":"","title":"杂谈","type":"categories"},{"content":"如果你是 CUDA 新手,按顺序读完这三章,你就能写出第一个 kernel。\n认识 CUDA # CUDA(全称 Compute Unified Device Architecture,统一计算设备架构) 是 NVIDIA 在 2006 年推出的通用 GPU 编程模型—— 让你能用接近 C/C++ 的语法,直接在 GPU 上调度成千上万个线程并行计算。\n为什么用 GPU? 一句话:CPU 擅长「快速做完一件事」,GPU 擅长「同时做很多件事」。 一颗现代 GPU 有上万个轻量线程,适合数据并行任务——同一段代码在不同数据上各跑一次。 深度学习、矩阵运算、图像处理、科学模拟全是这种模式,所以这些场景几乎都跑在 GPU 上。\nCUDA 不是单一一门语言,而是一整套:\n编程模型 —— kernel / 线程 / block / grid 这套并行抽象 编译器 —— nvcc,把 .cu 文件编成能跑的可执行 运行时 API —— cudaMalloc / cudaMemcpy / cudaLaunchKernel,管理 GPU 内存与执行 生态库 —— cuBLAS、cuDNN、CUTLASS、Thrust 等,常见操作不用从头写 读完接下来两章你会发现:写一个最简单的 CUDA 程序只需要几十行——难点不在语法, 而是先在脑子里建立「线程怎么分配、数据怎么搬」这个并行模型。\n一句话总结:CUDA = 用 C/C++ 风格的代码,让 GPU 并行跑一个函数。\n安装环境 # CUDA 装环境分两步:装驱动 + 装 Toolkit。两个都过了 nvidia-smi 和 nvcc --version 这两道关,就能开始写 kernel。\n你需要什么\n一张 NVIDIA GPU(2014 之后的卡基本都支持) 一个能装 NVIDIA 驱动的系统:Linux(推荐 Ubuntu)、Windows 10/11、或 Windows 上的 WSL2 没显卡?用云上 GPU 实例(Vast.ai / Lambda / 阿里云 / AWS EC2 G 系列)开一台远程机器,按小时付费,初学最划算 Apple Silicon 没有 NVIDIA,Intel Mac 2018 后也停了 CUDA 支持。想本地学 CUDA,要么换 Linux,要么用远程机器。\n装哪两个东西\nNVIDIA 驱动 —— 让 OS 能看到并控制 GPU。系统包管理器(apt install nvidia-driver-XXX)或 NVIDIA 官网都行 CUDA Toolkit —— 编译器 nvcc + 运行时库 + 头文件。去 developer.nvidia.com/cuda-downloads 按你的系统选版本,按官网给的命令一步步走最稳 装完把 nvcc 加进 PATH(写到 ~/.bashrc 或 ~/.zshrc):\nexport PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH 两条命令验装好\nnvidia-smi # 看到 GPU 表 + 驱动版本 → 驱动 OK nvcc --version # 看到 CUDA 版本号 → 编译器 OK 两条都过了,就可以进下一章写代码了。\nHello, CUDA # 第一个 CUDA 程序——完整的 hello.cu:\n#include \u0026lt;stdio.h\u0026gt; __global__ void hello() { printf(\u0026#34;Hello, CUDA from thread %d\\n\u0026#34;, threadIdx.x); } int main() { hello\u0026lt;\u0026lt;\u0026lt;1, 8\u0026gt;\u0026gt;\u0026gt;(); cudaDeviceSynchronize(); return 0; } 编译并运行:\nnvcc hello.cu -o hello ./hello 应该看到 8 行 Hello, CUDA from thread N(顺序不固定,线程是并行的)。\n几个关键字\n__global__ —— 标记一个 kernel(GPU 上执行、host 上启动的函数) threadIdx.x —— 当前线程的编号 \u0026lt;\u0026lt;\u0026lt;1, 8\u0026gt;\u0026gt;\u0026gt; —— 启动 1 个 block × 8 个 thread,一共 8 个线程 cudaDeviceSynchronize() —— 等 GPU 干完活再退出,否则 main 可能在 kernel 输出前就 return 了 跑出来就算入门成功。深入 grid / block / shared memory / warp / 内存模型这些,以后博客和专题里慢慢展开。\n下一步 # 读完入门三章,看你想往哪走:\n博客新特性解读、踩坑记录、行业观察 专题围绕一个主题的连续系列 —— cuda-oxide 等 速查工作中真正高频用到的命令、API、调试技巧 ","externalUrl":null,"permalink":"/start/","section":"从这里开始","summary":"如果你是 CUDA 新手,按顺序读完这三章,你就能写出第一个 kernel。\n认识 CUDA # CUDA(全称 Compute Unified Device Architecture,统一计算设备架构) 是 NVIDIA 在 2006 年推出的通用 GPU 编程模型—— 让你能用接近 C/C++ 的语法,直接在 GPU 上调度成千上万个线程并行计算。\n为什么用 GPU? 一句话:CPU 擅长「快速做完一件事」,GPU 擅长「同时做很多件事」。 一颗现代 GPU 有上万个轻量线程,适合数据并行任务——同一段代码在不同数据上各跑一次。 深度学习、矩阵运算、图像处理、科学模拟全是这种模式,所以这些场景几乎都跑在 GPU 上。\nCUDA 不是单一一门语言,而是一整套:\n编程模型 —— kernel / 线程 / block / grid 这套并行抽象 编译器 —— nvcc,把 .cu 文件编成能跑的可执行 运行时 API —— cudaMalloc / cudaMemcpy / cudaLaunchKernel,管理 GPU 内存与执行 生态库 —— cuBLAS、cuDNN、CUTLASS、Thrust 等,常见操作不用从头写 读完接下来两章你会发现:写一个最简单的 CUDA 程序只需要几十行——难点不在语法, 而是先在脑子里建立「线程怎么分配、数据怎么搬」这个并行模型。\n","title":"从这里开始","type":"start"},{"content":" 这里在做什么 # CUDA 是程序员理解 GPU 的最直接路径,但中文圈一直缺一个能按顺序读下去的 CUDA 资料站—— 要么是散在各处的零星博客,要么是只贴代码不讲为什么的速查。\nHelloCUDA 想填上这个空。不靠覆盖最全,靠把每一篇都写到能让人上手。\n你能在这里看到什么 # 入门路径 —— 从「什么是 CUDA」到「写出第一个 kernel」的连续阅读路径 专题系列 —— cuda-oxide(Rust × CUDA)、pycuda、cuBLAS 等围绕一个主题持续更新的系列 速查表 —— 工作中真正高频用到的命令、API、调试技巧,持续添加 博客 —— 新特性解读、踩坑记录、行业观察 此外,我在持续整理一份 推荐资源 —— 自己读过 / 用过、觉得值得的书、repo 与工具。\n想联系或投稿,见 联系方式。\n","externalUrl":null,"permalink":"/about/","section":"关于 HelloCUDA","summary":"这里在做什么 # CUDA 是程序员理解 GPU 的最直接路径,但中文圈一直缺一个能按顺序读下去的 CUDA 资料站—— 要么是散在各处的零星博客,要么是只贴代码不讲为什么的速查。\nHelloCUDA 想填上这个空。不靠覆盖最全,靠把每一篇都写到能让人上手。\n你能在这里看到什么 # 入门路径 —— 从「什么是 CUDA」到「写出第一个 kernel」的连续阅读路径 专题系列 —— cuda-oxide(Rust × CUDA)、pycuda、cuBLAS 等围绕一个主题持续更新的系列 速查表 —— 工作中真正高频用到的命令、API、调试技巧,持续添加 博客 —— 新特性解读、踩坑记录、行业观察 此外,我在持续整理一份 推荐资源 —— 自己读过 / 用过、觉得值得的书、repo 与工具。\n想联系或投稿,见 联系方式。\n","title":"关于 HelloCUDA","type":"about"},{"content":"想看的主题、想分享的资源、文章里发现的错误——都欢迎来信。\nGitHub @zTgx beautifularea@gmail.com ","externalUrl":null,"permalink":"/contact/","section":"联系 HelloCUDA","summary":"想看的主题、想分享的资源、文章里发现的错误——都欢迎来信。\nGitHub @zTgx beautifularea@gmail.com ","title":"联系 HelloCUDA","type":"contact"},{"content":"按工具/主题组织,持续添加。\nnvidia-smi # 最常用的 GPU 状态查看工具,几乎每个 CUDA 程序员每天都会敲十几次。\n基础信息 # nvidia-smi # GPU 列表、利用率、显存、温度、驱动 / CUDA 版本 nvidia-smi -L # 只列 GPU 名称和 UUID nvidia-smi -q # 全部属性(啰嗦但全) 实时监控 # nvidia-smi -l 1 # 每 1 秒刷新一次(自带) watch -n 1 nvidia-smi # 用 watch,屏幕不闪 nvidia-smi dmon # 单行多 GPU 实时数据(脚本友好) 显存与进程 # # 只看显存 nvidia-smi --query-gpu=memory.used,memory.free,memory.total --format=csv # 看哪些进程在占 GPU nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv 多 GPU 拓扑 # nvidia-smi topo -m # GPU 之间的连接方式(PCIe / NVLink / NVSwitch) 持久化 \u0026amp; 功耗(需要 root) # sudo nvidia-smi -pm 1 # 开启持久化模式,降低冷启动延迟 sudo nvidia-smi -pl 250 # 设置 GPU 功耗上限为 250W 注:-l 循环不要在生产环境里挂着跑,会持续轮询影响调度。\nnvcc # CUDA 编译器,把 .cu 文件编成能在 GPU 上跑的可执行。每次写 kernel 都绕不开。\n基础编译 # nvcc hello.cu -o hello # 默认架构编译,生成可执行 nvcc -O3 hello.cu -o hello # 开优化 nvcc -g -G hello.cu -o hello # 带 host + device 调试信息(给 cuda-gdb 用) 指定 GPU 架构 # 每张 GPU 有自己的 compute capability(架构号)。不指定的话 nvcc 会用默认值,可能没用到新指令,甚至跑不起来。\nnvcc -arch=sm_75 hello.cu -o hello # Turing(T4 / RTX 20) nvcc -arch=sm_80 hello.cu -o hello # Ampere(A100) nvcc -arch=sm_86 hello.cu -o hello # Ampere(RTX 30) nvcc -arch=sm_89 hello.cu -o hello # Ada Lovelace(RTX 40) nvcc -arch=sm_90 hello.cu -o hello # Hopper(H100) 不确定自己显卡是什么架构,先查一下:\nnvidia-smi --query-gpu=compute_cap --format=csv 多架构编译(发布常用) # 让同一个二进制能在多种卡上跑——开发时不常用,发包给别人时用:\nnvcc -gencode arch=compute_75,code=sm_75 \\ -gencode arch=compute_80,code=sm_80 \\ -gencode arch=compute_86,code=sm_86 \\ hello.cu -o hello 看 PTX / SASS # nvcc -ptx hello.cu -o hello.ptx # 生成中间表示 PTX(类汇编) nvcc -cubin hello.cu -o hello.cubin # 生成 GPU 二进制 cubin cuobjdump --dump-sass hello # 反汇编看真正运行的 SASS 指令 链接 CUDA 库 # nvcc main.cu -lcublas -lcudart -o main # 链 cuBLAS nvcc main.cu -lcudnn -o main # 链 cuDNN nvcc main.cu -lcurand -o main # 链 cuRAND(GPU 随机数) 注:-arch=sm_xx 是 -gencode arch=compute_xx,code=sm_xx 的简写。前者只产 SASS(机器码),后者产 PTX + SASS,跨架构兼容性更好——发布用 -gencode,自己开发用 -arch= 更简短。\n","externalUrl":null,"permalink":"/cheatsheet/","section":"速查表","summary":"按工具/主题组织,持续添加。\nnvidia-smi # 最常用的 GPU 状态查看工具,几乎每个 CUDA 程序员每天都会敲十几次。\n基础信息 # nvidia-smi # GPU 列表、利用率、显存、温度、驱动 / CUDA 版本 nvidia-smi -L # 只列 GPU 名称和 UUID nvidia-smi -q # 全部属性(啰嗦但全) 实时监控 # nvidia-smi -l 1 # 每 1 秒刷新一次(自带) watch -n 1 nvidia-smi # 用 watch,屏幕不闪 nvidia-smi dmon # 单行多 GPU 实时数据(脚本友好) 显存与进程 # # 只看显存 nvidia-smi --query-gpu=memory.used,memory.free,memory.total --format=csv # 看哪些进程在占 GPU nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv 多 GPU 拓扑 # nvidia-smi topo -m # GPU 之间的连接方式(PCIe / NVLink / NVSwitch) 持久化 \u0026 功耗(需要 root) # sudo nvidia-smi -pm 1 # 开启持久化模式,降低冷启动延迟 sudo nvidia-smi -pl 250 # 设置 GPU 功耗上限为 250W 注:-l 循环不要在生产环境里挂着跑,会持续轮询影响调度。\n","title":"速查表","type":"cheatsheet"},{"content":" 经典书 # 持续整理中。\n必读论文 # 持续整理中。\n必看 repo # 持续整理中。\n调试 \u0026amp; profiling 工具 # 持续整理中。\n课程视频 # 持续整理中。\n发现好资源,告诉我一声。\n","externalUrl":null,"permalink":"/resources/","section":"资源","summary":"经典书 # 持续整理中。\n必读论文 # 持续整理中。\n必看 repo # 持续整理中。\n调试 \u0026 profiling 工具 # 持续整理中。\n课程视频 # 持续整理中。\n","title":"资源","type":"resources"}]