- FMT(fine-grained multithreading)又叫交叉多線程或指令交錯多線程
– 每個時鍾周期都進行線程的切換,多個線程交替執行,同一個周期只從一個線程發射指令到功能部件
– 理論上,FMT通過有效的調度可以完全隱藏存儲延時,即在存儲操作完成之前不從同一個線程取指
- CMT(coarse-grained multithreading)又叫阻塞多線程或塊交錯多線程
– 連續執行一個線程的指令,直到遇到長延時操作才切換到另一個線程,也是同一個周期只能從一個線程發射指令
– 在線程切換發生之前,一個線程可以全速運行
– CMT中的線程切換時機非常重要
- SMT(simultaneous multithreading) 同時多線程(SMT)
– 每個周期把來自多個線程的指令發射到多個功能部件去執行,已經沒有線程切換的概念
– 能夠同時開發單個應用中的指令級並行和多個應用間的線程級並行
– Intel的超線程(Hyper-Threading,簡稱HT)技術就是SMT的一種變體,並被應用在Xeon處理器和Pentium4處理器中
下面對比他們的不同,以下圖為例:
此圖含義:從上到下為時鍾周期,4個方塊為4個發射槽。
FMT一個周期只允許一個線程發射指令。分析前2個時鍾周期,第一個時鍾周期線程4占有,它只發射一條指令,如 a=3;第二個時鍾周期,切換到線程2,線程2發射2條可以並行執行的指令,如 a=b+c,d=e+f;之后切換到線程3...如此往復。
CMT個周期也只允許一個線程發射指令。但是與FMT不同的是只有遇到長延時操作才切換到另一個線程。故一個線程可以較長時間占有發射槽。
FMT和CMT通過線程切換可以隱藏存儲延時,因此減少了發射槽的垂直浪費。但由於FMT和CMT在同一個時鍾周期里只能從一個線程發射指令,因此指令級並行不足造成的水平浪費仍然存在。
SMT能夠減少發射槽的水平浪費和垂直浪費(1)每個周期可以發射來自不同線程的指令去執行,通過線程級並行來彌補單線程指令級並行的不足,從而減少水平浪費(2)當某個線程因為長延時操作導致無法發射指令時,可以選擇發射其他線程的指令,通過隱藏延時來減少垂直浪費,SMT的圖分析不予贅述。