【CUDA】并行计算基本概念

发布时间:2026/7/18 20:45:56
【CUDA】并行计算基本概念 数据并行 vs 任务并行 + Amdahl 定律一、为什么先学这个?不理解会踩什么坑新手容易把"并行"当成一个笼统的概念, 一提并行就是"多线程同时跑",不区分具体是哪一种并行方式。 问题是: 数据并行 和 任务并行 需要的硬件结构、编程模型完全不同, GPU(尤其CUDA)天生是为数据并行设计的, 如果拿一个任务并行的问题硬套到GPU上,会发现怎么写都别扭、 性能也上不去——因为问题本身的"形状"就不适合GPU这套硬件。 另外,"加了并行就一定能线性加速"是最常见的错误预期, Amdahl定律直接给出了这种预期错在哪、上限在哪, 不理解这个定律,很容易在GPU优化上做无用功 (比如拼命优化一段已经占比很小的代码)。二、数据并行(Data Parallelism)2.1 定义数据并行:把同一份操作/逻辑,同时应用到一大批不同的数据上, 各份数据的处理过程彼此独立,互不依赖。 关键特征: "做什么"是一样的(同一段逻辑/同一条指令流) "对谁做"是不一样的(每个线程/每个处理单元拿到不同的数据)2.2 例子向量加法:C[i] = A[i] + B[i] 对每一个下标 i,做的都是"取A[i]、取B[i]、相加、写回C[i]"这同一件事, 不同 i 之间互不依赖,谁先算完谁后算完都不影响结果 → 典型的数据并行问题 图像处理中的灰度化: 每个像素都做"根据RGB算出灰度值"这同一个公式, 像素与像素之间互不依赖 → 同样是数据并行 矩阵乘法中的

相关新闻