互斥锁与锁粒度
约 60 分钟
互斥锁与锁粒度
从“线程更多为什么没有更快”开始
先看真实任务:提交互斥锁与锁粒度的输入、分区、调度、结果摘要和串并行对照。只报告并行版更快没有意义,因为输入、版本、工作者数、预热、正确性和窗口都可能变化。本节先固定串行基线及可观察输出,再问哪些工作独立、哪些依赖形成关键路径、哪些共享状态带来同步或通信。(唯一锚点 PC-04-02-A《互斥锁与锁粒度》。)
核心机制是:固定互斥锁与锁粒度的工作单元、依赖和共享状态,先串行基线,再构造并行时间线与成本模型。先画任务节点、数据所有者和先行关系,对每条边注明数据、同步或消息。没有时间线时,“同时执行”只是愿望,竞态、死锁、重复工作和尾部等待都无法定位。(唯一锚点 PC-04-02-B《互斥锁与锁粒度》。)
第一步:串行基线与结果契约
第一步先写确定性的串行参考或手算过程,保存输入、完整输出、校验摘要和原始操作计数。整数结果应逐项一致;浮点规约若改变顺序,要声明误差界、比较方式和可复现模式。性能优化不能以错误答案换速度。(唯一锚点 PC-04-02-C《互斥锁与锁粒度》。)
接着把规模写成元素数、边数、任务数、消息字节和工作集等变量,分别列计算工作、跨度、同步、通信、调度、分配和缓存失效。Big-O相同仍可能因关键路径、局部性与常数开销表现相反。(唯一锚点 PC-04-02-D《互斥锁与锁粒度》。)
接着:逐步构造并行计划
接着把工作划成可编号单元,为每个单元写输入范围、输出位置、读取集、写入集和前置依赖。先用两个工作者手推合法交错,再手推最坏交错;同时写同一位置或无happens-before的一读一写,必须以所有权、局部规约、原子、同步或消息重构。(唯一锚点 PC-04-02-E《互斥锁与锁粒度》。)
简化模型有14个单元,每个3次基本操作,计算工作 14×3=42。随后另列线程创建、任务入队、屏障、缓存行转移和消息开销,不能把它们偷藏进常数;粒度太细时并行开销会超过有效工作。(唯一锚点 PC-04-02-F《互斥锁与锁粒度》。)
然后:确定性实验与时间线
然后运行固定调度或离散事件仿真,输出分区、任务领取、依赖完成和合并顺序;真实CPU线程测量则把调度波动与结果契约分开。四组测试覆盖单工作者、工作者多于任务、不能整除的余数和高度不均负载。(唯一锚点 PC-04-02-G《互斥锁与锁粒度》。)
记录解释器/编译器、核心数、输入种子、重复次数和原始结果。用中位数与分位数展示分布,保留冷启动和异常值并说明规则。一次墙钟变快不能证明机制,需由计数、trace或瓶颈模型支持。(唯一锚点 PC-04-02-H《互斥锁与锁粒度》。)
最后:故障注入与边界复核
最后主动去掉同步、减小块、制造长任务、让消息乱序、让工作集越过缓存或提高串行比例。边界是:规模、工作者数、块大小、分布或交错改变时必须重新验证。先预测首个错误或性能拐点,再用校验、任务时间线和成本分解定位。(唯一锚点 PC-04-02-I《互斥锁与锁粒度》。)
常见误区包括把并发当并行、把线程数当加速比、把平均时间当尾延迟、把无数据竞争当结果确定、把原子当复合事务、把GPU线程当CPU线程、把发送完成当对端已消费。每项都要构造最小反例。(唯一锚点 PC-04-02-J《互斥锁与锁粒度》。)
工作、跨度、内存与通信
同一算法同时检查工作W、跨度T∞、处理器数P、内存流量、通信量与同步次数。理想时间下界为 max(W/P,T∞),实际时间还叠加调度、同步、通信和缓存成本;公式只有在规模和假设明确时才成立。(唯一锚点 PC-04-02-K《互斥锁与锁粒度》。)
向前连接Programming II的抽象、测试和资源生命周期,向后连接分布式系统的消息、故障与一致性。并行课研究工作分解、依赖和资源映射,性能工程要求用可重复测量证明瓶颈与优化因果。(唯一锚点 PC-04-02-L《互斥锁与锁粒度》。)
在线练习与严格验收
本节绑定单选、多选和计算题;章节另有确定性Python实验,均四个测试且不依赖GPU。代码题输出稳定结果、计划或计数,不用不可复现的墙钟阈值判分。完成后补第五个退化输入并解释复杂度与正确性。(唯一锚点 PC-04-02-M《互斥锁与锁粒度》。)
下课前闭卷自检
一,写串行结果契约。二,画任务DAG与关键路径。三,列读写集。四,解释固定互斥锁与锁粒度的工作单元、依赖和共享状态,先串行基线,再构造并行时间线与成本模型。五,构造余数或长尾反例。六,分解计算、同步、通信和内存成本。七,说明如何复现实验。(唯一锚点 PC-04-02-N《互斥锁与锁粒度》。)
若答案仍是“多开线程”“换GPU”“加锁就行”,回到串行基线、任务时间线和成本模型。合格标准是结果可复核、提升可重复、瓶颈有证据,并知道条件改变时结论为何失效。(唯一锚点 PC-04-02-O《互斥锁与锁粒度》。)
Practice
本课练习
先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。