處理器的時脈週期與機器週期
制外單位 · 量:同步的間隔,也是計算工作的尺度
2004 年秋,英特爾取消了一款本應跑在十吉赫上的處理器,這並非技術上的失敗,而是承認了一堵物理的牆:把晶片趕快一倍,功耗就要四倍,它索性熔了。持續三十年的頻率競賽在一天之內終結,隨之終結的還有按盒子上的數字來評判機器的習慣。
週期本身就是時脈訊號兩個邊沿之間的那段間隔,晶片上所有同步的部分正是踩著這一步同時翻轉的。它的倒數是頻率,所以五吉赫下的一個週期只有兩成奈秒;在這點時間裡光走六釐米,訊號沿銅線走得還要少——比晶片本身還窄。
01 · 定義
週期是時脈訊號的週期,也就是兩個同向邊沿之間的間隔,晶片上同步的元件在這兩點一起改變狀態。機器週期是處理器完成一個完整動作所用的整數個時脈週期;在流水線機器裡,它被反過來的尺度取代——每條指令所用的週期數,而這個數的倒數又說明一個週期裡有多少條指令走出流水線。
週期的長度不是自然定的,而是晶片上的佈線定的:它不得短於兩個觸發器之間最慢的那條路,還要算上觸發器自身的延遲和留給引數離散的餘量。於是有了設計者慣用的一招——把一條長的邏輯路徑切成兩級流水線:週期減半,頻率翻倍,而指令如今要走完整段樓梯。
然而限住頻率的不是邏輯,而是功耗:動態功耗隨頻率增長,也隨電壓的平方增長,而電壓又必須抬高,好讓電路在更高的頻率上趕得上。熱量因此大致按頻率的三次方走,正是在這條三次方的依賴上,吉赫的競賽停在了四左右。
最後,週期是一種長度並不恆定的單位。電源管理每秒改動頻率上百次,隨負載和溫度而變,所以從週期數上判斷不出過去了多少時間,卻能判斷出做了多少工作:週期計數器數的不是秒,而是計算的步子,它真正的價值就在這裡。
用滑塊牽著頻率走,留意兩條朝相反方向分開的曲線。綠的是訊號在一個週期裡來得及走的距離:頻率越高,這條路越短,到五吉赫時它比晶片本身還小。深紅的是去一趟記憶體要花多少週期:它以奈秒計的延遲幾乎不變,於是以週期計便只會增長。
把工作切成級之後,設計者縮短了週期,但一條指令如今要走完整段樓梯,它自身的延遲不減反增。只有當各級裡填著不同的指令時,好處才顯出來;而一旦分支預測失誤,整條流水線都得清空——越深,代價越大。
02 · 換算
頻率、週期、工作
輸入一個頻率或一個週期長度,此卡便會給出倒數、一個週期裡訊號走的路,以及以週期計的記憶體訪問代價。第一族按定義就是精確的,第二族依據一個核心的平均值,第三族依據今日記憶體層級的典型延遲。
訊號沿走線的速度取六成光速;在此卡的細項設定中可改為一半。
按頻率作比較,只能比同樣的核心,因為每條指令的週期數在不同架構之間相差數倍:一臺機器一個週期取四條指令,另一臺勉強一條。正因如此,以吉赫計的數字退出了廣告,取而代之的是成套的測試,它們量的已不是週期,而是做成的工作。
| 數值 | 說明 | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · 數量級
對數標度:從一個週期到排程器的時間視窗04 · 測量儀器
什麼定下週期,什麼數著週期
週期的源頭是一小片石英,通常在幾十兆赫上振盪,精度約為千萬分之一。晶片上的吉赫並非來自它,而是來自把這個基準頻率倍頻,於是整臺機器的穩定性,繼承自一粒米大小的礦石。
鎖相環把振盪器分頻後的頻率與基準相比,一路微調到相位吻合;改動分頻比,頻率就能在執行中改變。正是它讓電源管理在閒置時把週期降到幾百兆赫,又在還有熱餘量的幾秒鐘裡把它抬進渦輪加速。
核心之內坐著一批暫存器,數著週期、完成的指令、快取的落空和預測失誤的分支,而且可以從執行中的程式裡直接讀出。由這些數得出每條指令的週期數——它是衡量程式碼在某一晶片上貼合得好不好的唯一誠實尺度。
要看見週期本身,需要一臺能以幾皮秒的解析度抓住邊沿的儀器;也正是它顯示出那些讓頻率無法再往上抬的東西:相位抖動、訊號到達晶片各個角落的偏斜,以及邊沿在長線上的塌陷。
05 · 書寫規則
週期與赫茲不是一回事
頻率寫成赫茲,兆和吉的詞頭要大寫;週期數則寫成整數,不帶任何單位,因為週期不是 SI 單位。效能指標用大寫、不加點,並註明屬於哪個核心;把頻率和效能混作一個量是不允許的。
第一種寫法把兩個不同的量混在一起:週期數無量綱,而赫茲量的是頻率。第二種違反了詞頭的大小寫,兆和吉是必須大寫的。第三種按頻率去比較那些每條指令週期數相差數倍的架構,這樣的比較推不出任何結論。第四種把一個可變的量當成了固定的量。
07 · 歷史部分
三十年的競賽與取消的那一天
第一款單晶片處理器所用的頻率,今天的晶片在一微秒的零頭裡就走過了,而它每條指令要花八個週期。那時的機器週期是個字面意義上的概念:讀取指令、譯碼、取數、計算、寫回——每一級各佔一個週期,一個接一個嚴格排隊。
各級一學會同時處理不同的指令,慣用的尺度就斷了:一條指令仍走五個週期,但每個週期都有一條走出流水線。只好把數法倒過來,說每條指令多少個週期;在好機器上,這個數落到了一以下——也就是說,一個週期裡完成的指令多於一條。
一款三十一級流水線的架構是為頻率而造的,結果撞上了熱:承諾的十吉赫所要的散熱,在一臺桌上型電腦箱裡是不可想象的。專案關停,業界轉向多核——不是因為多核更好,而是因為功耗的三次方增長沒有留下別的路。
今天的核心沒有單一的頻率:閒置時降到幾百兆赫,負載下爬向五吉赫,只要熱餘量還在就一直守著。說明書上的數字成了順境下的一個許諾,廠商和評測者都不再照著它比較機器了。
一種在測量途中長度就在變的單位
週期對計量學家來說安排得很不趁手:它的長度不由基準定,而由晶片上的佈線定,而且在同一顆處理器上每秒要變上百次,因為電源管理會把頻率去遷就負載和溫度。所以週期計數器不能拿來量時間,儘管它從外面看像一隻鍾;信賴它的程式,頻率挪了多少,它就錯多少。
可是對於週期本來為之而生的那件事,它比任何時間單位都更合用。數週期,量的不是時長,而是計算工作的分量;正因如此,每條指令的週期數在頻率任何變動之下都保持可比——它說的是程式碼在晶片上貼合得好不好,而不是過去了多少秒。
目錄 · 計量單位
每個量都有一份檔案
七個 SI 基本單位,二十二個有专名的導出單位,以及若干制外量 — 少了它們,工程与曆法都轉不動。