[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-home-live-entry-setting":3,"site-header-contests":8,"site-header-camps":49,"study-material-detail-study-58":104},{"enabled":4,"title":5,"statusText":5,"buttonText":5,"campSlug":5,"stage":6,"classroomId":7,"hasClassroom":4},false,"",0,null,{"total":9,"list":10,"pageNum":44,"pageSize":45,"size":9,"startRow":44,"endRow":9,"pages":44,"prePage":6,"nextPage":6,"isFirstPage":46,"isLastPage":46,"hasPreviousPage":4,"hasNextPage":4,"navigatePages":47,"navigatepageNums":48,"navigateFirstPage":44,"navigateLastPage":44},3,[11,25,35],{"slug":12,"title":13,"logo":7,"liveUrl":14,"prize":15,"sponsor":16,"description":17,"organizer":18,"startTime":19,"endTime":20,"registrationDeadline":21,"status":22,"dashboardVisibility":23,"createdAt":24},"spring2026","2026春季启元人工智能大赛","https:\u002F\u002Fwww.bilibili.com\u002Fblackboard\u002Flive\u002Flive-activity-player.html?cid=1822703816&quality=0","200,000","麒麟软件有限公司","“2026春季启元人工智能大赛”是由启元实验室主办的面向全国人工智能领域开发者、科研人员及高校学生的权威赛事。大赛旨在促进与培养具备工程实践能力和创新能力的优秀人工智能领域开发者、推广国产软硬件技术与生态、助力国家人工智能产业高质量发展。\n各参赛选手需在规定的比赛周期内，依据赛事规则选定赛题并完成相应挑战，优胜者将共同角逐总额20万元的赛事奖金池，并且还将有机会获得实习和知名企业优质岗位内推资格。","启元实验室","2026-04-19 16:00:00","2026-07-13 16:00:00","2026-06-16 16:00:00","ongoing","private","2026-04-16 08:00:00",{"slug":26,"title":27,"logo":7,"liveUrl":14,"prize":28,"sponsor":7,"description":29,"organizer":18,"startTime":30,"endTime":31,"registrationDeadline":32,"status":33,"dashboardVisibility":23,"createdAt":34},"autumn2025","2025秋季启元人工智能大赛","150,000","“2025秋季启元人工智能大赛”是由启元实验室主办的面向全国人工智能领域开发者、科研人员及高校学生的权威赛事。大赛旨在促进与培养具备工程实践能力和创新能力的优秀人工智能领域开发者、推广国产软硬件技术与生态、助力国家人工智能产业高质量发展。","2025-11-08 08:00:00","2026-01-13 08:00:00","2025-12-30 08:00:00","ended","2025-11-03 08:00:00",{"slug":36,"title":37,"logo":7,"liveUrl":14,"prize":38,"sponsor":7,"description":39,"organizer":18,"startTime":40,"endTime":41,"registrationDeadline":42,"status":33,"dashboardVisibility":23,"createdAt":43},"summer2025","启元人工智能大赛(系统方向)","80,000","启元人工智能大赛由启元实验室主办，其中系统赛道基于启元实验室九源软件栈的相关开源项目，通过拉动开源社区力量，一方面促进国产智能计算生态的发展，另一方面也为人工智能系统方向的学生及从业者提供一个实践平台。","2025-07-08 08:00:00","2025-08-25 08:00:00","2025-07-22 08:00:00","2025-06-22 08:00:00",1,5,true,8,[44],{"total":45,"list":50,"pageNum":44,"pageSize":45,"size":45,"startRow":44,"endRow":45,"pages":44,"prePage":6,"nextPage":6,"isFirstPage":46,"isLastPage":46,"hasPreviousPage":4,"hasNextPage":4,"navigatePages":47,"navigatepageNums":103,"navigateFirstPage":44,"navigateLastPage":44},[51,62,73,84,94],{"id":52,"slug":53,"title":54,"logo":55,"publicLiveEmbedUrl":14,"description":56,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":16,"startTime":58,"endTime":59,"status":22,"dashboardVisibility":60,"createdAt":58,"updatedAt":61},"019eeeff-6b00-7d55-a629-efafded3e232","summer2026","2026年夏季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fuploads\u002F2026-06\u002F019eef7f-7816-7828-9309-79c2c61dd568.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=nXOYnOVFrKTQuYhqkPHDhHL6r%2BU%3D","由启元实验室发起的InfiniTensor大模型与人工智能系统训练营，面向开源社区、高校及产业界伙伴开放。活动以「普及AI全栈知识技术、培养工程实践与创新型人才、推广国产软硬件技术生态」为核心目标，助力国家人工智能产业高质量发展。","...","2026-06-22 08:00:00","2026-10-19 08:00:00","public","2026-10-12 08:00:00",{"id":63,"slug":64,"title":65,"logo":66,"publicLiveEmbedUrl":7,"description":67,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":68,"startTime":69,"endTime":70,"status":33,"dashboardVisibility":23,"createdAt":71,"updatedAt":72},"019af3f3-e06a-7245-aa8d-37dc99a69c73","winter2025","2025年冬季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fuploads\u002F2025-12\u002F019afc69-b7ca-7805-91fb-605429671c01.png?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=8JXf3%2FKr%2Fp6S3N8V72vLqLtx%2F6E%3D","由启元实验室发起的InfiniTensor大模型与人工智能系统训练营，面向开源社区、高校及产业界伙伴开放。活动以「普及AI全栈知识技术、培养工程实践与创新型人才、推广国产软硬件技术生态」为核心目标，助力国家人工智能产业高质量发展。 \n","新华三技术有限公司","2025-12-25 08:00:00","2026-03-27 08:00:00","2025-12-06 08:00:00","2026-10-22 20:24:30",{"id":74,"slug":36,"title":75,"logo":76,"publicLiveEmbedUrl":7,"description":77,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":78,"startTime":79,"endTime":80,"status":81,"dashboardVisibility":23,"createdAt":82,"updatedAt":83},"01980342-208c-7803-b3f3-19e1d31960ba","2025年夏季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fuploads\u002F2025-07\u002F0198045e-28fe-78f0-95fe-23835ce58395.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=AtdICYEE6k35KZDCyzwOjD3mmns%3D","InfiniTensor大模型与人工智能系统训练营由启元实验室及清华大学 AI 系统方向团队发起，面向开源社区、高校和产业界，普及人工智能各方面知识和技术，培养相关人才。训练营联合开源项目开发者、学术界大牛、工业界资深工程师参与授课与项目指导。课程采用「线上直播授课 + 在线答疑 + 项目实践辅导 」的方式进行，确保每位同学都能获得充分成长。训练营全程免费，通过视频、直播课、习题和项目实践，在人工智能飞速发展的背景下，为学员提供一窥深层技术的机会。","北京积算科技有限公司","2025-07-14 08:00:00","2025-09-30 08:00:00","upcoming","2025-07-13 08:00:00","2026-10-22 20:24:58",{"id":85,"slug":86,"title":87,"logo":88,"publicLiveEmbedUrl":7,"description":89,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":5,"startTime":90,"endTime":91,"status":81,"dashboardVisibility":23,"createdAt":92,"updatedAt":93},"01980cf9-a7d8-7796-ae86-0bbe05334add","winter2024","2024年冬季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Ftesting-cdn.infinitensor.com\u002Fuploads\u002F2025-07\u002F01981269-ce23-7624-a287-9f07dd0d85f6.jpg","InfiniTensor大模型与人工智能系统训练营由清华大学发起，面向开源社区、高校和产业界，普及人工智能各方面知识和技术，培养相关人才。训练营全程免费，通过视频、直播课、习题和项目实践，在人工智能飞速发展的背景下，为学员提供一窥深层技术的机会。报名学员请阅读“导学”课程页的训练营介绍。","2025-01-05 08:00:00","2025-03-22 08:00:00","2025-07-15 08:00:00","2026-10-22 20:24:39",{"id":95,"slug":96,"title":97,"logo":98,"publicLiveEmbedUrl":7,"description":99,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":5,"startTime":100,"endTime":101,"status":81,"dashboardVisibility":23,"createdAt":92,"updatedAt":102},"01980c20-363a-7dc3-8f5a-58a68e08dcc4","summer2024","2024年夏季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Ftesting-cdn.infinitensor.com\u002Fuploads\u002F2025-07\u002F01981269-fbfa-788a-afcd-17fa9be74ff9.jpg","InfiniTensor大模型与人工智能系统训练营由清华大学发起，面向开源社区和高校，普及人工智能各方面知识和技术，培养相关人才。训练营全程免费，通过课程、习题和项目实践，在人工智能飞速发展的背景下，为学员提供一窥深层技术的机会。","2024-07-20 08:00:00","2024-09-29 08:00:00","2026-10-22 20:24:49",[44],{"currentItem":105,"processedData":125},{"img":106,"keywords":107,"treeType":44,"description":108,"showStatus":44,"updateTime":109,"type":110,"title":111,"content":112,"nextArticle":113,"createTime":109,"sortOrder":117,"canonicalPath":118,"id":119,"contentType":120,"prevArticle":121},"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_fm.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=Tn1wC%2BdGYXe6%2BzqPBQQwyWgkino%3D","CUDA 编程,并行计算,InfiniTensor,GPU 开发,CUDA 入门,大模型系统","2026 夏训 CUDA 入门第一课，讲解并行核心概念、CPU\u002FGPU 架构差异与 CUDA 编程模型，搭配向量加法实战，演示核函数、内存操作、Grid-Stride 优化，附带性能分析、调试工具与零基础学习指引。","2026-10-22 20:38:11",2,"2026 夏季 InfiniTensor 训练营 CUDA 编程 1：并行编程导论与 CUDA 入门","![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw01.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=vhkRU%2FXGoKvNvT0cdPB%2F768mgY8%3D)\r\n\r\n\u003Cspan style=\"font-size:12px;color:#555;\">7 月 13 日， 2026 夏季 InfiniTensor 大模型与人工智能系统训练营 CUDA 编程方向第一课《并行编程导论与 CUDA 入门》开讲。本节课将从零开始，带你理解并行计算的核心概念、CPU 与 GPU 的架构差异，并通过一个向量加法的实战案例，掌握 CUDA 编程的基本流程与性能优化思维。\u003C\u002Fspan>\r\n\r\n\r\n## 课程定位与前置要求\r\n\r\n本课程专为 **“从小白到专业”** 的学习路径设计，即使你没有并行编程背景也能跟上。但为了保证学习效果，有两点前置建议：\r\n\r\n1.  **C++ 是必须的**：CUDA 是强实践导向的课程，编写 CUDA 程序需要 C++ 环境。\r\n2.  **计算机体系结构（加分项）**：如果学过计算机系统或体系结构，理解会更快；没学过也没关系，课程会覆盖所有必要知识点。\r\n\r\n💡 **学习建议**：本系列课程像“搭积木”一样由易到难。**动手实践的效果远胜于光听光看**，请务必跟随课程编写代码。此外，本课也是后续大模型推理、通信与并行、OpenCL、Triton 等进阶课程的基石。\r\n\r\n\r\n## 核心概念：串行 vs 并发 vs 并行\r\n\r\n在深入 GPU 之前，我们必须厘清三个容易混淆的概念：\r\n\r\n| 概念 | 英文 | 生活类比 | 核心特点 |\r\n| :--- | :--- | :--- | :--- |\r\n| **串行** | Sequential\u002FSerial | 1 个接待员，办完第1个人的事才办第 2 个 | 严格顺序、强阻塞性 |\r\n| **并发** | Concurrent | 1 个接待员，轮流处理多人任务（如让 A 填表时去处理 B） | 有顺序但非完全阻塞，单核切换 |\r\n| **并行** | Parallel | 4 个接待员，同时处理4个人的事 | **真·同时进行**，吞吐量翻倍 |\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw02.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=YLfO4jvUyfYvgKwGoO2DQ2xj7j8%3D)\r\n\r\n**为什么我们需要并行？**\r\n答案很简单：**最大化吞吐量和处理效率**。在计算机科学中，我们主要通过两种方式实现并行：\r\n\r\n-   **CPU 并行**：依靠多物理核心（如  8核CPU），常用于操作系统调度、Web 服务等复杂逻辑场景。\r\n-   **GPU 并行**：依靠海量简化核心，常用于科学计算、图形渲染、**深度学习**。\r\n\r\n\r\n## 全能战士 CPU vs 流水线工人 GPU\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw03.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=t9GTOr3XkHc2OvBXTOcRpDw0h5U%3D)\r\n\r\n理解硬件差异是写好 CUDA 代码的前提。\r\n\r\n### CPU：Central Processing Unit\r\n-   **定位**：全能战士，擅长复杂逻辑、控制流和调度。\r\n-   **特点**：少量复杂核心 + 复杂控制单元 + **低延迟**。\r\n-   **设计目标**：让单个任务尽快完成，避免系统卡顿。\r\n\r\n### GPU：Graphics Processing Unit\r\n-   **定位**：流水线工人，最初为图形渲染设计，现广泛用于 AI。\r\n-   **特点**：大量简化核心 + 简单控制单元 + **高吞吐**。\r\n-   **设计目标**：三个臭皮匠顶个诸葛亮，通过海量核心同时处理简单任务。\r\n\r\n> 以 NVIDIA A100 为例，其内部由多个 **SM (Streaming Multiprocessor)** 组成，每个 SM 内包含多个 **CUDA Core**（通用计算单元）。\r\n\r\n## CUDA 编程模型与硬件映射\r\n\r\nCUDA (Compute Unified Device Architecture) 是 NVIDIA 推出的并行计算平台和编程模型。\r\n\r\n### 四大关键特性\r\n\r\n1.  **宿主语言**：C\u002FC++（复用系统编程技能，门槛低）。\r\n2.  **异构协作**：CUDA 程序通常由 Host(CPU) 发起，并与 GPU 协同完成计算。\r\n3.  **SIMT 模式**：Single Instruction Multiple Threads（单指令多线程），同一指令被多个线程同时执行。\r\n4.  **自动调度**：开发者指定参数，CUDA 自动在后台进行资源调度和优化。\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw04.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=hDdBT%2Bwq%2BGiwaey5xG90FdtqQqo%3D)\r\n\r\n### 内存与运行流程\r\n\r\nCUDA 程序遵循 Host (CPU) 与 Device (GPU) 的交互模型：\r\n\r\n-   **Host Memory**：CPU 端内存（RAM）\r\n-   **Device Memory**：GPU 端全局内存（Global Memory）\r\n-   **连接**：通过总线 (Bus)通信\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw05.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=es1kcxSjM6RHf6Heq89cUCU1fY4%3D)\r\n\r\n\r\n## 实战：从 CPU 加法到 GPU 加法\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw06.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=P8D%2FipAoFdYtC1GOwiTY%2FRLtXHs%3D)\r\n\r\n### 1. 文件与编译\r\n\r\n-   CPU 代码：`.cpp` \u002F `.cc`，使用 `g++` 编译\r\n-   CUDA 代码：`.cu`，必须使用 `nvcc` (NVIDIA CUDA Compiler) 编译\r\n\r\n> **NVCC 编译流程**：分离 Host\u002FDevice 代码 → Device 代码编译为 PTX\u002FFatbin → Host 代码用 g++ 编译 → 链接生成可执行文件。\r\n\r\n### 2. 线程层级结构\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw07.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=sbkFdnB3uuG%2F9nouDpJvYUM2IiI%3D)\r\n\r\n\r\nCUDA 使用三级架构组织线程：\r\n\r\n-   **Grid**：一次 Kernel 启动所包含的全部 Thread Block 的集合\r\n-   **Block**：Grid 的划分单元\r\n-   **Thread**：最小运算单位\r\n\r\n**线程唯一索引公式**：\r\n\r\n```cpp\r\nint index = blockIdx.x * blockDim.x + threadIdx.x;\r\n```\r\n### 3. Kernel 函数定义与调用\r\n\r\n```cpp\r\n\u002F\u002F 核函数定义：使用 __global__ 标识\r\n__global__ void addKernel(float* C, const float* A, const float* B, int N) {\r\n    int idx = blockIdx.x * blockDim.x + threadIdx.x;\r\n    if (idx \u003C N) {\r\n        C[idx] = A[idx] + B[idx];\r\n    }\r\n}\r\n\u002F\u002F Host端调用：使用 \u003C\u003C\u003CGridDim, BlockDim>>> 语法\r\naddKernel\u003C\u003C\u003CgridDim, blockDim>>>(d_C, d_A, d_B, N);\r\n```\r\n\r\n### 4. 关键 API\r\n\r\n-   `cudaMalloc` \u002F `cudaFree`：设备端内存分配与释放。\r\n-   `cudaMemcpy`：Host 与 Device 之间的数据传输（需显式指定方向，如 `cudaMemcpyHostToDevice` 或 `cudaMemcpyDeviceToHost`）。\r\n\r\n\r\n## 性能分析：用数据说话\r\n\r\n### 实验结果对比\r\n\r\n| 配置 | 耗时 (ms) | 加速比 (vs CPU) | 备注 |\r\n| :--- | :--- | :--- | :--- |\r\n| CPU 单线程 | ~8.0 | 1.0x | 基准 |\r\n| GPU 1 线程\u002Fblock | ~2680 | 0.117x | 比 CPU 慢 8 倍 |\r\n| GPU 256 线程\u002Fblock | ~0.049 | 1185x | 显著提升 |\r\n| GPU 满载 | ~0.006 | 1350x | 接近峰值 |\r\n\r\n### 为什么 1 线程反而更慢？\r\n\r\n使用 Nsight Systems (nsys) 分析发现：\r\n\r\n-   在 1 线程配置下，**97.6%** 的时间都花在了 `cudaLaunchKernel` API 调用上。\r\n-   核函数发射开销远大于实际计算时间。\r\n-   反复从 Host 端启动 Kernel 的开销是主要的性能杀手。\r\n\r\n### 优化方案：Grid-Stride Loop\r\n\r\n将外部循环移入 Kernel 内部，减少 Kernel 发射次数：\r\n\r\n```cpp\r\n__global__ void addKernelStride(float* C, const float* A,\r\n                                const float* B, int N, int stride) {\r\n    int idx = blockIdx.x * blockDim.x + threadIdx.x;\r\n    \u002F\u002F 在 kernel 内部通过步长循环处理多个元素\r\n    for (int i = idx; i \u003C N; i += stride) {\r\n        C[i] = A[i] + B[i];\r\n    }\r\n}\r\n```\r\n\r\n**优化效果**：1 线程配置耗时从 2680ms 降至 69.58ms，验证了“减少 Kernel 发射次数”策略的有效性。\r\n\r\n### ⚠️ 重要发现\r\n\r\n即使优化后，单线程 GPU 仍比 CPU 慢。**GPU 的优势在于大规模并行的高吞吐，而非单核性能**。此外，`cudaMemcpy` 的传输耗时往往远超 Kernel 计算本身，这是后续课程优化的重点。\r\n\r\n\r\n## 实用工具与技巧\r\n\r\n### 获取设备信息\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw08.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=fPBwqv0JRDHPl6HT4QK9B11jVEw%3D)\r\n\r\n\r\n### 版本查看\r\n\r\n-   `nvcc --version`：查看实际使用的 CUDA Toolkit 版本。\r\n-   `nvidia-smi` 显示的版本：仅代表驱动支持的最高版本，不等于当前实际使用的 CUDA 版本。\r\n\r\n### 调试：CUDA-GDB\r\n\r\n编译时需添加 `-g` `-G` 标志：\r\n\r\n```bash\r\nnvcc -g -G add.cu -o add_cuda\r\n```\r\n- g：生成 Host 端调试信息。\r\n- G：生成 Device 端调试信息。\r\n\r\n### 监控 GPU 状态\r\n\r\n重点关注 GPU Utilization、显存占用、功率及进程列表。\r\n\r\n\r\n## 📝 课后 FAQ\r\n#### Q: 只学过 C 可以吗？\r\n>A: 理论上可以，但强烈建议补充 C++ 基础（先导课有提供相关资源）。\r\n\r\n#### Q: X、Y、 Z 有限制，所以我们需要在代码中明确指定X、Y、 Z 三个方向吗？\r\n>A: 目前示例仅使用了 X 维度，若使用 XYZ 三维需明确设置。\r\n\r\n#### Q: Grid-Stride Loop 到底是什么？\r\n>A: 当一个 Grid 无法一次处理完所有数据时，在 Kernel 内部通过步长循环处理剩余数据，避免在 Host 端反复发射 Kernel 带来的巨大开销。\r\n\r\n#### Q: 作业和往年一样吗？\r\n>A: 每季作业都会更新，请在第三节课后关注最新作业发布通知。\r\n\r\n\r\n\r\n## 加入训练营\r\n**InfiniTensor 官网**报名\u002F听课： [https:\u002F\u002Fwww.infinitensor.com]\r\n\r\n**视频号直播**： InfiniTensor 官方视频号\r\n\r\n**B站直播**： InfiniTensor 官方直播间\r\n\r\n**答疑交流**： 训练营官方社群⬇️\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002Fportal_news\u002F2026-xjq.png?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=CBE91uqTQZNN9IMrET%2BRfN7ACIg%3D)\r\n\r\n## 关注与交流\r\n\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002Fportal_news\u002Fnews_ewm02.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=Lka3EuPEGeug599LQCi%2B0AcQNxY%3D)",{"publishTime":7,"createTime":109,"canonicalPath":114,"id":115,"title":116},"\u002Fstudy-material\u002Fstudy-57","study-57","2025 冬季 InfiniTensor 训练营｜Python 入门",51,"\u002Fstudy-material\u002Fstudy-58","study-58","markdown",{"publishTime":7,"createTime":109,"canonicalPath":122,"id":123,"title":124},"\u002Fstudy-material\u002Fstudy-59","study-59","2026 夏季 InfiniTensor 训练营推理引擎 1：AI 模型导论与推理基础原理",{"htmlContent":126,"headings":127},"\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw01.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=vhkRU%2FXGoKvNvT0cdPB%2F768mgY8%3D\" alt=\"\">\u003C\u002Fp>\n\u003Cp>\u003Cspan style=\"font-size:12px;color:#555;\">7 月 13 日， 2026 夏季 InfiniTensor 大模型与人工智能系统训练营 CUDA 编程方向第一课《并行编程导论与 CUDA 入门》开讲。本节课将从零开始，带你理解并行计算的核心概念、CPU 与 GPU 的架构差异，并通过一个向量加法的实战案例，掌握 CUDA 编程的基本流程与性能优化思维。\u003C\u002Fspan>\u003C\u002Fp>\n\u003Ch2 id=\"课程定位与前置要求\">\u003Ca class=\"anchor\" href=\"#课程定位与前置要求\" aria-label=\"跳转到标题：课程定位与前置要求\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>课程定位与前置要求\u003C\u002Fh2>\u003Cp>本课程专为 \u003Cstrong>“从小白到专业”\u003C\u002Fstrong> 的学习路径设计，即使你没有并行编程背景也能跟上。但为了保证学习效果，有两点前置建议：\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>C++ 是必须的\u003C\u002Fstrong>：CUDA 是强实践导向的课程，编写 CUDA 程序需要 C++ 环境。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>计算机体系结构（加分项）\u003C\u002Fstrong>：如果学过计算机系统或体系结构，理解会更快；没学过也没关系，课程会覆盖所有必要知识点。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>💡 \u003Cstrong>学习建议\u003C\u002Fstrong>：本系列课程像“搭积木”一样由易到难。\u003Cstrong>动手实践的效果远胜于光听光看\u003C\u002Fstrong>，请务必跟随课程编写代码。此外，本课也是后续大模型推理、通信与并行、OpenCL、Triton 等进阶课程的基石。\u003C\u002Fp>\n\u003Ch2 id=\"核心概念-串行-vs-并发-vs-并行\">\u003Ca class=\"anchor\" href=\"#核心概念-串行-vs-并发-vs-并行\" aria-label=\"跳转到标题：核心概念：串行 vs 并发 vs 并行\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>核心概念：串行 vs 并发 vs 并行\u003C\u002Fh2>\u003Cp>在深入 GPU 之前，我们必须厘清三个容易混淆的概念：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth align=\"left\">概念\u003C\u002Fth>\n\u003Cth align=\"left\">英文\u003C\u002Fth>\n\u003Cth align=\"left\">生活类比\u003C\u002Fth>\n\u003Cth align=\"left\">核心特点\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>串行\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">Sequential\u002FSerial\u003C\u002Ftd>\n\u003Ctd align=\"left\">1 个接待员，办完第1个人的事才办第 2 个\u003C\u002Ftd>\n\u003Ctd align=\"left\">严格顺序、强阻塞性\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>并发\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">Concurrent\u003C\u002Ftd>\n\u003Ctd align=\"left\">1 个接待员，轮流处理多人任务（如让 A 填表时去处理 B）\u003C\u002Ftd>\n\u003Ctd align=\"left\">有顺序但非完全阻塞，单核切换\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>并行\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">Parallel\u003C\u002Ftd>\n\u003Ctd align=\"left\">4 个接待员，同时处理4个人的事\u003C\u002Ftd>\n\u003Ctd align=\"left\">\u003Cstrong>真·同时进行\u003C\u002Fstrong>，吞吐量翻倍\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw02.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=YLfO4jvUyfYvgKwGoO2DQ2xj7j8%3D\" alt=\"\">\u003C\u002Fp>\n\u003Cp>\u003Cstrong>为什么我们需要并行？\u003C\u002Fstrong>\u003Cbr>答案很简单：\u003Cstrong>最大化吞吐量和处理效率\u003C\u002Fstrong>。在计算机科学中，我们主要通过两种方式实现并行：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>CPU 并行\u003C\u002Fstrong>：依靠多物理核心（如  8核CPU），常用于操作系统调度、Web 服务等复杂逻辑场景。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>GPU 并行\u003C\u002Fstrong>：依靠海量简化核心，常用于科学计算、图形渲染、\u003Cstrong>深度学习\u003C\u002Fstrong>。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"全能战士-cpu-vs-流水线工人-gpu\">\u003Ca class=\"anchor\" href=\"#全能战士-cpu-vs-流水线工人-gpu\" aria-label=\"跳转到标题：全能战士 CPU vs 流水线工人 GPU\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>全能战士 CPU vs 流水线工人 GPU\u003C\u002Fh2>\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw03.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=t9GTOr3XkHc2OvBXTOcRpDw0h5U%3D\" alt=\"\">\u003C\u002Fp>\n\u003Cp>理解硬件差异是写好 CUDA 代码的前提。\u003C\u002Fp>\n\u003Ch3 id=\"cpu-central-processing-unit\">\u003Ca class=\"anchor\" href=\"#cpu-central-processing-unit\" aria-label=\"跳转到标题：CPU：Central Processing Unit\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>CPU：Central Processing Unit\u003C\u002Fh3>\u003Cul>\n\u003Cli>\u003Cstrong>定位\u003C\u002Fstrong>：全能战士，擅长复杂逻辑、控制流和调度。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>特点\u003C\u002Fstrong>：少量复杂核心 + 复杂控制单元 + \u003Cstrong>低延迟\u003C\u002Fstrong>。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>设计目标\u003C\u002Fstrong>：让单个任务尽快完成，避免系统卡顿。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"gpu-graphics-processing-unit\">\u003Ca class=\"anchor\" href=\"#gpu-graphics-processing-unit\" aria-label=\"跳转到标题：GPU：Graphics Processing Unit\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>GPU：Graphics Processing Unit\u003C\u002Fh3>\u003Cul>\n\u003Cli>\u003Cstrong>定位\u003C\u002Fstrong>：流水线工人，最初为图形渲染设计，现广泛用于 AI。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>特点\u003C\u002Fstrong>：大量简化核心 + 简单控制单元 + \u003Cstrong>高吞吐\u003C\u002Fstrong>。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>设计目标\u003C\u002Fstrong>：三个臭皮匠顶个诸葛亮，通过海量核心同时处理简单任务。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>以 NVIDIA A100 为例，其内部由多个 \u003Cstrong>SM (Streaming Multiprocessor)\u003C\u002Fstrong> 组成，每个 SM 内包含多个 \u003Cstrong>CUDA Core\u003C\u002Fstrong>（通用计算单元）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"cuda-编程模型与硬件映射\">\u003Ca class=\"anchor\" href=\"#cuda-编程模型与硬件映射\" aria-label=\"跳转到标题：CUDA 编程模型与硬件映射\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>CUDA 编程模型与硬件映射\u003C\u002Fh2>\u003Cp>CUDA (Compute Unified Device Architecture) 是 NVIDIA 推出的并行计算平台和编程模型。\u003C\u002Fp>\n\u003Ch3 id=\"四大关键特性\">\u003Ca class=\"anchor\" href=\"#四大关键特性\" aria-label=\"跳转到标题：四大关键特性\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>四大关键特性\u003C\u002Fh3>\u003Col>\n\u003Cli>\u003Cstrong>宿主语言\u003C\u002Fstrong>：C\u002FC++（复用系统编程技能，门槛低）。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>异构协作\u003C\u002Fstrong>：CUDA 程序通常由 Host(CPU) 发起，并与 GPU 协同完成计算。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SIMT 模式\u003C\u002Fstrong>：Single Instruction Multiple Threads（单指令多线程），同一指令被多个线程同时执行。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>自动调度\u003C\u002Fstrong>：开发者指定参数，CUDA 自动在后台进行资源调度和优化。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw04.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=hDdBT%2Bwq%2BGiwaey5xG90FdtqQqo%3D\" alt=\"\">\u003C\u002Fp>\n\u003Ch3 id=\"内存与运行流程\">\u003Ca class=\"anchor\" href=\"#内存与运行流程\" aria-label=\"跳转到标题：内存与运行流程\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>内存与运行流程\u003C\u002Fh3>\u003Cp>CUDA 程序遵循 Host (CPU) 与 Device (GPU) 的交互模型：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Host Memory\u003C\u002Fstrong>：CPU 端内存（RAM）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Device Memory\u003C\u002Fstrong>：GPU 端全局内存（Global Memory）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>连接\u003C\u002Fstrong>：通过总线 (Bus)通信\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw05.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=es1kcxSjM6RHf6Heq89cUCU1fY4%3D\" alt=\"\">\u003C\u002Fp>\n\u003Ch2 id=\"实战-从-cpu-加法到-gpu-加法\">\u003Ca class=\"anchor\" href=\"#实战-从-cpu-加法到-gpu-加法\" aria-label=\"跳转到标题：实战：从 CPU 加法到 GPU 加法\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>实战：从 CPU 加法到 GPU 加法\u003C\u002Fh2>\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw06.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=P8D%2FipAoFdYtC1GOwiTY%2FRLtXHs%3D\" alt=\"\">\u003C\u002Fp>\n\u003Ch3 id=\"1-文件与编译\">\u003Ca class=\"anchor\" href=\"#1-文件与编译\" aria-label=\"跳转到标题：1. 文件与编译\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>1. 文件与编译\u003C\u002Fh3>\u003Cul>\n\u003Cli>CPU 代码：\u003Ccode>.cpp\u003C\u002Fcode> \u002F \u003Ccode>.cc\u003C\u002Fcode>，使用 \u003Ccode>g++\u003C\u002Fcode> 编译\u003C\u002Fli>\n\u003Cli>CUDA 代码：\u003Ccode>.cu\u003C\u002Fcode>，必须使用 \u003Ccode>nvcc\u003C\u002Fcode> (NVIDIA CUDA Compiler) 编译\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>NVCC 编译流程\u003C\u002Fstrong>：分离 Host\u002FDevice 代码 → Device 代码编译为 PTX\u002FFatbin → Host 代码用 g++ 编译 → 链接生成可执行文件。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3 id=\"2-线程层级结构\">\u003Ca class=\"anchor\" href=\"#2-线程层级结构\" aria-label=\"跳转到标题：2. 线程层级结构\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>2. 线程层级结构\u003C\u002Fh3>\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw07.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=sbkFdnB3uuG%2F9nouDpJvYUM2IiI%3D\" alt=\"\">\u003C\u002Fp>\n\u003Cp>CUDA 使用三级架构组织线程：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Grid\u003C\u002Fstrong>：一次 Kernel 启动所包含的全部 Thread Block 的集合\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Block\u003C\u002Fstrong>：Grid 的划分单元\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Thread\u003C\u002Fstrong>：最小运算单位\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>线程唯一索引公式\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-cpp\">int index = blockIdx.x * blockDim.x + threadIdx.x;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"3-kernel-函数定义与调用\">\u003Ca class=\"anchor\" href=\"#3-kernel-函数定义与调用\" aria-label=\"跳转到标题：3. Kernel 函数定义与调用\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>3. Kernel 函数定义与调用\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-cpp\">\u002F\u002F 核函数定义：使用 __global__ 标识\n__global__ void addKernel(float* C, const float* A, const float* B, int N) {\n    int idx = blockIdx.x * blockDim.x + threadIdx.x;\n    if (idx &lt; N) {\n        C[idx] = A[idx] + B[idx];\n    }\n}\n\u002F\u002F Host端调用：使用 &lt;&lt;&lt;GridDim, BlockDim&gt;&gt;&gt; 语法\naddKernel&lt;&lt;&lt;gridDim, blockDim&gt;&gt;&gt;(d_C, d_A, d_B, N);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"4-关键-api\">\u003Ca class=\"anchor\" href=\"#4-关键-api\" aria-label=\"跳转到标题：4. 关键 API\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>4. 关键 API\u003C\u002Fh3>\u003Cul>\n\u003Cli>\u003Ccode>cudaMalloc\u003C\u002Fcode> \u002F \u003Ccode>cudaFree\u003C\u002Fcode>：设备端内存分配与释放。\u003C\u002Fli>\n\u003Cli>\u003Ccode>cudaMemcpy\u003C\u002Fcode>：Host 与 Device 之间的数据传输（需显式指定方向，如 \u003Ccode>cudaMemcpyHostToDevice\u003C\u002Fcode> 或 \u003Ccode>cudaMemcpyDeviceToHost\u003C\u002Fcode>）。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"性能分析-用数据说话\">\u003Ca class=\"anchor\" href=\"#性能分析-用数据说话\" aria-label=\"跳转到标题：性能分析：用数据说话\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>性能分析：用数据说话\u003C\u002Fh2>\u003Ch3 id=\"实验结果对比\">\u003Ca class=\"anchor\" href=\"#实验结果对比\" aria-label=\"跳转到标题：实验结果对比\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>实验结果对比\u003C\u002Fh3>\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth align=\"left\">配置\u003C\u002Fth>\n\u003Cth align=\"left\">耗时 (ms)\u003C\u002Fth>\n\u003Cth align=\"left\">加速比 (vs CPU)\u003C\u002Fth>\n\u003Cth align=\"left\">备注\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd align=\"left\">CPU 单线程\u003C\u002Ftd>\n\u003Ctd align=\"left\">~8.0\u003C\u002Ftd>\n\u003Ctd align=\"left\">1.0x\u003C\u002Ftd>\n\u003Ctd align=\"left\">基准\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">GPU 1 线程\u002Fblock\u003C\u002Ftd>\n\u003Ctd align=\"left\">~2680\u003C\u002Ftd>\n\u003Ctd align=\"left\">0.117x\u003C\u002Ftd>\n\u003Ctd align=\"left\">比 CPU 慢 8 倍\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">GPU 256 线程\u002Fblock\u003C\u002Ftd>\n\u003Ctd align=\"left\">~0.049\u003C\u002Ftd>\n\u003Ctd align=\"left\">1185x\u003C\u002Ftd>\n\u003Ctd align=\"left\">显著提升\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">GPU 满载\u003C\u002Ftd>\n\u003Ctd align=\"left\">~0.006\u003C\u002Ftd>\n\u003Ctd align=\"left\">1350x\u003C\u002Ftd>\n\u003Ctd align=\"left\">接近峰值\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"为什么-1-线程反而更慢\">\u003Ca class=\"anchor\" href=\"#为什么-1-线程反而更慢\" aria-label=\"跳转到标题：为什么 1 线程反而更慢？\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>为什么 1 线程反而更慢？\u003C\u002Fh3>\u003Cp>使用 Nsight Systems (nsys) 分析发现：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>在 1 线程配置下，\u003Cstrong>97.6%\u003C\u002Fstrong> 的时间都花在了 \u003Ccode>cudaLaunchKernel\u003C\u002Fcode> API 调用上。\u003C\u002Fli>\n\u003Cli>核函数发射开销远大于实际计算时间。\u003C\u002Fli>\n\u003Cli>反复从 Host 端启动 Kernel 的开销是主要的性能杀手。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"优化方案-grid-stride-loop\">\u003Ca class=\"anchor\" href=\"#优化方案-grid-stride-loop\" aria-label=\"跳转到标题：优化方案：Grid-Stride Loop\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>优化方案：Grid-Stride Loop\u003C\u002Fh3>\u003Cp>将外部循环移入 Kernel 内部，减少 Kernel 发射次数：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-cpp\">__global__ void addKernelStride(float* C, const float* A,\n                                const float* B, int N, int stride) {\n    int idx = blockIdx.x * blockDim.x + threadIdx.x;\n    \u002F\u002F 在 kernel 内部通过步长循环处理多个元素\n    for (int i = idx; i &lt; N; i += stride) {\n        C[i] = A[i] + B[i];\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>优化效果\u003C\u002Fstrong>：1 线程配置耗时从 2680ms 降至 69.58ms，验证了“减少 Kernel 发射次数”策略的有效性。\u003C\u002Fp>\n\u003Ch3 id=\"重要发现\">\u003Ca class=\"anchor\" href=\"#重要发现\" aria-label=\"跳转到标题：⚠️ 重要发现\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>⚠️ 重要发现\u003C\u002Fh3>\u003Cp>即使优化后，单线程 GPU 仍比 CPU 慢。\u003Cstrong>GPU 的优势在于大规模并行的高吞吐，而非单核性能\u003C\u002Fstrong>。此外，\u003Ccode>cudaMemcpy\u003C\u002Fcode> 的传输耗时往往远超 Kernel 计算本身，这是后续课程优化的重点。\u003C\u002Fp>\n\u003Ch2 id=\"实用工具与技巧\">\u003Ca class=\"anchor\" href=\"#实用工具与技巧\" aria-label=\"跳转到标题：实用工具与技巧\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>实用工具与技巧\u003C\u002Fh2>\u003Ch3 id=\"获取设备信息\">\u003Ca class=\"anchor\" href=\"#获取设备信息\" aria-label=\"跳转到标题：获取设备信息\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>获取设备信息\u003C\u002Fh3>\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_58_zw08.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=fPBwqv0JRDHPl6HT4QK9B11jVEw%3D\" alt=\"\">\u003C\u002Fp>\n\u003Ch3 id=\"版本查看\">\u003Ca class=\"anchor\" href=\"#版本查看\" aria-label=\"跳转到标题：版本查看\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>版本查看\u003C\u002Fh3>\u003Cul>\n\u003Cli>\u003Ccode>nvcc --version\u003C\u002Fcode>：查看实际使用的 CUDA Toolkit 版本。\u003C\u002Fli>\n\u003Cli>\u003Ccode>nvidia-smi\u003C\u002Fcode> 显示的版本：仅代表驱动支持的最高版本，不等于当前实际使用的 CUDA 版本。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"调试-cuda-gdb\">\u003Ca class=\"anchor\" href=\"#调试-cuda-gdb\" aria-label=\"跳转到标题：调试：CUDA-GDB\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>调试：CUDA-GDB\u003C\u002Fh3>\u003Cp>编译时需添加 \u003Ccode>-g\u003C\u002Fcode> \u003Ccode>-G\u003C\u002Fcode> 标志：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">nvcc -g -G add.cu -o add_cuda\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>g：生成 Host 端调试信息。\u003C\u002Fli>\n\u003Cli>G：生成 Device 端调试信息。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"监控-gpu-状态\">\u003Ca class=\"anchor\" href=\"#监控-gpu-状态\" aria-label=\"跳转到标题：监控 GPU 状态\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>监控 GPU 状态\u003C\u002Fh3>\u003Cp>重点关注 GPU Utilization、显存占用、功率及进程列表。\u003C\u002Fp>\n\u003Ch2 id=\"课后-faq\">\u003Ca class=\"anchor\" href=\"#课后-faq\" aria-label=\"跳转到标题：📝 课后 FAQ\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>📝 课后 FAQ\u003C\u002Fh2>\u003Ch4 id=\"q-只学过-c-可以吗\">\u003Ca class=\"anchor\" href=\"#q-只学过-c-可以吗\" aria-label=\"跳转到标题：Q: 只学过 C 可以吗？\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>Q: 只学过 C 可以吗？\u003C\u002Fh4>\u003Cblockquote>\n\u003Cp>A: 理论上可以，但强烈建议补充 C++ 基础（先导课有提供相关资源）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4 id=\"q-x-y-z-有限制-所以我们需要在代码中明确指定x-y-z-三个方向吗\">\u003Ca class=\"anchor\" href=\"#q-x-y-z-有限制-所以我们需要在代码中明确指定x-y-z-三个方向吗\" aria-label=\"跳转到标题：Q: X、Y、 Z 有限制，所以我们需要在代码中明确指定X、Y、 Z 三个方向吗？\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>Q: X、Y、 Z 有限制，所以我们需要在代码中明确指定X、Y、 Z 三个方向吗？\u003C\u002Fh4>\u003Cblockquote>\n\u003Cp>A: 目前示例仅使用了 X 维度，若使用 XYZ 三维需明确设置。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4 id=\"q-grid-stride-loop-到底是什么\">\u003Ca class=\"anchor\" href=\"#q-grid-stride-loop-到底是什么\" aria-label=\"跳转到标题：Q: Grid-Stride Loop 到底是什么？\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>Q: Grid-Stride Loop 到底是什么？\u003C\u002Fh4>\u003Cblockquote>\n\u003Cp>A: 当一个 Grid 无法一次处理完所有数据时，在 Kernel 内部通过步长循环处理剩余数据，避免在 Host 端反复发射 Kernel 带来的巨大开销。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4 id=\"q-作业和往年一样吗\">\u003Ca class=\"anchor\" href=\"#q-作业和往年一样吗\" aria-label=\"跳转到标题：Q: 作业和往年一样吗？\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>Q: 作业和往年一样吗？\u003C\u002Fh4>\u003Cblockquote>\n\u003Cp>A: 每季作业都会更新，请在第三节课后关注最新作业发布通知。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"加入训练营\">\u003Ca class=\"anchor\" href=\"#加入训练营\" aria-label=\"跳转到标题：加入训练营\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>加入训练营\u003C\u002Fh2>\u003Cp>\u003Cstrong>InfiniTensor 官网\u003C\u002Fstrong>报名\u002F听课： [\u003Ca href=\"https:\u002F\u002Fwww.infinitensor.com%5D\">https:\u002F\u002Fwww.infinitensor.com]\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>视频号直播\u003C\u002Fstrong>： InfiniTensor 官方视频号\u003C\u002Fp>\n\u003Cp>\u003Cstrong>B站直播\u003C\u002Fstrong>： InfiniTensor 官方直播间\u003C\u002Fp>\n\u003Cp>\u003Cstrong>答疑交流\u003C\u002Fstrong>： 训练营官方社群⬇️\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002Fportal_news\u002F2026-xjq.png?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=CBE91uqTQZNN9IMrET%2BRfN7ACIg%3D\" alt=\"\">\u003C\u002Fp>\n\u003Ch2 id=\"关注与交流\">\u003Ca class=\"anchor\" href=\"#关注与交流\" aria-label=\"跳转到标题：关注与交流\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>关注与交流\u003C\u002Fh2>\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002Fportal_news\u002Fnews_ewm02.jpg?Expires=1792752823&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=Lka3EuPEGeug599LQCi%2B0AcQNxY%3D\" alt=\"\">\u003C\u002Fp>\n",[128,130,133,136,139,142,145,147,149,152,155,158,161,164,167,169,172,175,178,180,182,184,187,190,193,197,200,203,206,208],{"id":129,"text":129,"level":110},"课程定位与前置要求",{"id":131,"text":132,"level":110},"核心概念-串行-vs-并发-vs-并行","核心概念：串行 vs 并发 vs 并行",{"id":134,"text":135,"level":110},"全能战士-cpu-vs-流水线工人-gpu","全能战士 CPU vs 流水线工人 GPU",{"id":137,"text":138,"level":9},"cpu-central-processing-unit","CPU：Central Processing Unit",{"id":140,"text":141,"level":9},"gpu-graphics-processing-unit","GPU：Graphics Processing Unit",{"id":143,"text":144,"level":110},"cuda-编程模型与硬件映射","CUDA 编程模型与硬件映射",{"id":146,"text":146,"level":9},"四大关键特性",{"id":148,"text":148,"level":9},"内存与运行流程",{"id":150,"text":151,"level":110},"实战-从-cpu-加法到-gpu-加法","实战：从 CPU 加法到 GPU 加法",{"id":153,"text":154,"level":9},"1-文件与编译","1. 文件与编译",{"id":156,"text":157,"level":9},"2-线程层级结构","2. 线程层级结构",{"id":159,"text":160,"level":9},"3-kernel-函数定义与调用","3. Kernel 函数定义与调用",{"id":162,"text":163,"level":9},"4-关键-api","4. 关键 API",{"id":165,"text":166,"level":110},"性能分析-用数据说话","性能分析：用数据说话",{"id":168,"text":168,"level":9},"实验结果对比",{"id":170,"text":171,"level":9},"为什么-1-线程反而更慢","为什么 1 线程反而更慢？",{"id":173,"text":174,"level":9},"优化方案-grid-stride-loop","优化方案：Grid-Stride Loop",{"id":176,"text":177,"level":9},"重要发现","⚠️ 重要发现",{"id":179,"text":179,"level":110},"实用工具与技巧",{"id":181,"text":181,"level":9},"获取设备信息",{"id":183,"text":183,"level":9},"版本查看",{"id":185,"text":186,"level":9},"调试-cuda-gdb","调试：CUDA-GDB",{"id":188,"text":189,"level":9},"监控-gpu-状态","监控 GPU 状态",{"id":191,"text":192,"level":110},"课后-faq","📝 课后 FAQ",{"id":194,"text":195,"level":196},"q-只学过-c-可以吗","Q: 只学过 C 可以吗？",4,{"id":198,"text":199,"level":196},"q-x-y-z-有限制-所以我们需要在代码中明确指定x-y-z-三个方向吗","Q: X、Y、 Z 有限制，所以我们需要在代码中明确指定X、Y、 Z 三个方向吗？",{"id":201,"text":202,"level":196},"q-grid-stride-loop-到底是什么","Q: Grid-Stride Loop 到底是什么？",{"id":204,"text":205,"level":196},"q-作业和往年一样吗","Q: 作业和往年一样吗？",{"id":207,"text":207,"level":110},"加入训练营",{"id":209,"text":209,"level":110},"关注与交流"]