并行计算入门 (Introduction to Parallelism) Grigoriy Grigorev 2025-11-01 0 浏览 0 点赞 长文 ## 什么是并行计算? **并行计算(Parallelism)** 是指 **同时执行** 多个计算任务的能力。其核心目标是利用多个计算资源(如CPU的多个核心)来更快地解决一个大的问题。 想象一下洗一堆盘子。如果你一个人洗,你必须一个接一个地洗。但如果你有四个朋友帮忙,你们四个人就可以 **同时** 开始洗,从而将总时间缩短近四倍。这就是并行的本质:将一个大任务分解成多个可以同时处理的小块。 ## 并行 (Parallelism) vs. 并发 (Concurrency) 这两个概念经常被混淆,但它们描述的是不同的事情。 * **并行 (Parallelism)**: 是 **同时做** 多件事情。这需要硬件支持,比如一个多核处理器。 * **并发 (Concurrency)**: 是 **处理** 多件事情的能力。它是一种程序结构,允许任务交错执行,即使在单核处理器上也可以实现(通过快速的时间分片切换)。 一个简单的比喻:并发是一个人同时在两盘棋之间来回走动,轮流下一步;而并行是两个人分别同时下两盘棋。 ## 并行的不同层次 并行可以在计算机系统的不同层次上实现: 1. **位级并行 (Bit-Level Parallelism)**: 这是最底层的并行。随着处理器字长(word size)的增加(例如从8位到64位),处理器可以在一个时钟周期内处理更多的数据。这是早期计算性能提升的主要驱动力。 2. **指令级并行 (Instruction-Level Parallelism - ILP)**: 现代CPU可以在一个时钟周期内执行多条指令。这通过 **流水线(Pipelining)** 和 **超标量(Superscalar)** 架构等技术实现。编译器和CPU硬件会自动地重新排序指令,以最大化执行单元的利用率。 3. **数据并行 (Data Parallelism)**: 这是当我们将同一个操作应用到大量不同数据上时的情况。例如,将一张图片的所有像素亮度增加10%。SIMD(单指令多数据流)指令集(如SSE, AVX)和GPU(图形处理器)是实现数据并行的典型硬件。 4. **任务并行 (Task Parallelism)**: 这是最高层次的并行,也是程序员最常接触的。我们将一个大问题分解成多个功能上独立的任务,并将它们分配给不同的CPU核心或线程去执行。例如,在一个Web服务器中,一个线程处理数据库请求,另一个线程处理用户认证。 ## 并行的挑战 实现并行并非没有代价,它引入了新的复杂性: 1. **阿姆达尔定律 (Amdahl's Law)**: 该定律指出了并行计算的性能上限。一个程序的加速比,受限于其代码中 **无法并行化** 的那部分(串行部分)。即使你有无穷多的处理器,你的程序最快也只能以其串行部分的速度运行。 2. **通信开销**: 并行任务之间往往需要通信和同步,这会带来额外的开销。如果任务划分得太细,通信开销甚至可能超过并行带来的收益。 3. **同步问题**: * **竞态条件 (Race Conditions)**: 当多个线程同时访问和修改共享数据时,最终结果取决于它们执行的精确时序,这可能导致不可预测的错误。 * **死锁 (Deadlocks)**: 当两个或多个线程相互等待对方释放资源时,会形成一个永久的僵局,所有线程都无法继续执行。 ## 结论 并行计算是现代计算性能提升的关键。通过在不同层次上利用并行,我们能够解决以前无法企及的复杂问题。然而,编写正确且高效的并行程序需要对底层硬件和相关算法有深刻的理解,并小心处理随之而来的各种挑战。 阅读 ggrigorev.me 原文 本文的原始来源。 #多线程 #并发 #并行 #性能优化 #计算机体系结构