SMT 多线程建模:资源共享与竞争
更新时间:2026-10-01。SMT 让一个核同时跑多个线程,性能模型的关键是“共享带来的增益”与“争抢带来的损失”同时存在。
本文要回答的问题
- SMT 凭什么提升吞吐,上限在哪?
- 多线程如何互相拖慢?
- 模型要度量哪些公平性指标?
一、SMT 原理
单个线程因 cache miss、依赖停顿会留下空闲发射槽;SMT 用另一线程的指令填补,提高执行单元利用率和总吞吐(通常非成倍)。共享的是取指/解码、执行单元、缓存等;每个线程有独立架构状态(寄存器、PC、预测器状态部分共享)。
二、共享策略
取指策略决定每周期从哪个/哪些线程取指(轮询、按停 stall 优先、ICOUNT 等);后端资源可以分区(静态保证)或全竞争(高利用但互相挤压)。策略影响吞吐与单线程延迟。
三、增益与损失

一个线程的工作集可能挤占另一线程的缓存(互相 evict),分支历史也可能被污染,导致单线程性能下降。SMT 还扩大微架构侧信道面。
四、度量
除总吞吐/IPC 外,要看每线程 IPC、加权加速、公平性(fairness)、单线程 QoS:一个线程是否被“饿死”。gem5 可配置 SMT 线程数与取指策略,跑同构/异构混合负载。
五、常见坑
- 以为 SMT 吞吐线性翻倍。
- 只测总吞吐,忽略单线程延迟被拖慢。
- 缓存/预测器共享污染未建模。
- 不看公平性,出现饿死线程却以为正常。
- 忽略混合负载同构与异构的巨大差异。
小结
SMT 用空闲槽换总吞吐,但共享缓存/预测器会互相污染、牺牲单线程延迟,必须同时度量吞吐与公平性。下一篇 DRAM 调度与行列缓冲建模。
总结
SMT 建模要同时算清“填空闲发射槽带来的总吞吐增益”和“缓存/分支器污染、单线程延迟恶化带来的损失”,取指策略与后端分区/竞争方式决定二者平衡,评估时除总 IPC 外必须看每线程 IPC、公平性和 QoS,防止线程被饿死。