多核心處理器(multicore processor)
幾十年來,讓電腦變快的辦法是讓一個工人跑得更快——把時脈拉高,讓晶片上那顆唯一的大腦每秒多做幾步。後來這條路撞牆了:更快的時脈會燒掉更多電、放出比小晶片散得掉還多的熱,所以大約在 2005 年,業界停止了拚時脈的競賽。晶片廠不再追求一個越來越快的工人,而是把好幾個完整的工人並排放在同一片矽上。多核心處理器(multicore processor)就是一顆晶片上載著兩個、四個、八個或更多完整的 CPU——稱為核心(core)——每個核心都能同時跑自己那一串指令。
每個核心都是一顆完整的處理器:它有自己的程式計數器、自己的暫存器、自己的算術單元,通常還有自己的小型私有快取。核心們通常共享較大的末層快取,以及通往主記憶體的路徑。如果你有四個核心和四件彼此獨立的工作,四個就能同時跑,每秒大約完成單核心四倍的工作量。作業系統把軟體執行緒排程到核心上,決定誰在哪裡跑。
誠實面對其陷阱。核心更多並不會自動讓程式變快。一串單一的工作仍然只在一個核心上、以一個核心的速度跑——額外的核心會閒著,除非把工作切成能平行跑的片段,而把工作正確地切開很難。Amdahl 定律對更多核心能買到多少加速設下了硬天花板,核心之間必須透過共享記憶體協調(這要花時間),而且許多日常程式頑固地是循序的。多核心與其說是勝利,不如說是被迫的撤退:當我們再也無法把一個核心做得快很多時,我們就做更多核心,把平行化的難題丟給程式設計師。
一顆四核心的筆電晶片。開一個瀏覽器、一個音樂播放器、一個下載、一個病毒掃描:作業系統能把每個放在各自的核心上,四件事同時推進。但若跑一個只做一長串彼此相依計算的程式,它只用一個核心——另外三個閒著,你那顆「快四倍」的晶片對這項任務完全沒變快。
彼此獨立的工作能跨核心平行;單一相依的鏈不能——這正是多核心時代的整個挑戰。
核心共享指令集架構,但多核心晶片是微架構的選擇。核心數加倍很少讓真實效能加倍:大多數程式有一段循序部分會封頂收益(Amdahl 定律),而協調共享記憶體要花真實的時間。