计算机体系结构 28:SMT 与共享资源
计算机体系结构 28:SMT 与共享资源
核心问题
单线程因为依赖或 cache miss 暂时不能发射时,执行槽会空着。细粒度多线程可以每周期换一个线程,减少整段空闲;同时多线程(SMT)还能在同一周期从多个线程挑选指令填充多个槽。它提高的是共享资源利用率,不会自动增加执行单元、cache 容量或互联带宽。
本篇用宽度为 2 的有限发射模型区分三种调度。当前主机没有硬件 SMT、逻辑兄弟线程或 PMU 证据。
附件:28-smt.json。
范围与证据等级
模型给两个线程各一条短指令流,其中包含 wait。单线程模式只运行 A;细粒度模式每拍只能从一个线程发射;SMT 模式允许同拍从 A、B 各取一条,但总发射宽度仍为 2。
证据等级是教学时序模型。它没有 ROB、cache、分支预测、物理寄存器、真实 NoC、线程优先级或公平性策略,因此只能解释“空槽怎样被另一线程利用”。
核心案例:发射宽度不等于可用吞吐
两个槽在某拍都空闲,不代表单线程一定能填满。若线程 A 的下一条指令等待前序结果,它不能凭空提供第二条就绪指令。线程 B 若有独立工作,SMT 调度器可以用 B 填其中一个槽。
本模型得到:只运行 A 需要 4 拍;每拍只选一个线程的细粒度交错需要 8 拍;允许同拍选择两个线程的 SMT 式发射需要 5 拍。数字只属于这两条固定指令流和当前调度规则。
共享资源也会反向限制收益。两个线程若同时争用同一 load/store 单元、cache 端口或互联出口,SMT 只能改变等待分布,不能越过资源容量。对单线程而言,另一个线程还可能驱逐其 cache 和预测器状态。
片上互联怎样进入同一问题
核心数增加后,请求要经过 ring、mesh 或其他互联到达共享 cache、目录或内存控制器。路由跳数、链路容量和热点决定排队。SMT 在核心内部填发射槽,NoC 在核心之间搬运请求;两者共享“有限资源上的多来源竞争”这一结构,但模型参数不能混用。
模式:先写资源预算,再谈并发收益
把每拍槽位、每级队列、每条链路容量写出来,再问哪些请求能并行。这个方法可迁移到 GPU warp、DMA 队列和存储系统。没有资源预算的“增加并发”只是负载变化,不是性能解释。
验收结果
运行 python3 examples/computer-architecture/run_batch.py 26-28 后,输出记录 issue_width=2、三种模式的周期数和 not_a_host_smt_measurement=true。
验收结论是:有限模型展示 SMT 可以跨线程填空槽,也展示总发射宽度仍是硬上限。它没有证明当前 CPU 启用了 SMT,没有识别逻辑兄弟线程,也没有提供吞吐提升或相互干扰的真机数据。
练习
若两个线程都只产生访存指令,而处理器每拍只有一个 load/store 端口,发射宽度为 2 是否还能让两条同时执行?
把模型改成线程 B 永远有就绪指令。若调度器总优先 B,需要增加什么规则才能讨论 A 的前进性?
模式速查
| 现象 | 首先核对 | 仍需的真机证据 |
|---|---|---|
| 空槽减少 | 每拍就绪集合与发射宽度 | 端口利用率、IPC |
| 两线程互相拖慢 | cache、队列、端口、带宽 | sibling 拓扑与 PMU |
| 核数增加后拥塞 | 路由与共享出口 | NoC/uncore 计数 |






