架構的工藝(the craft of architecture)
技術來來去去——真空管讓位給電晶體,單核心讓位給多核心,而明天也許會帶來小晶片、光子學,或尚未被想像出來的東西。但每一個時代底下,坐著同一份恆久的工藝:那種界定一位好架構師的、有紀律、量化、以取捨為驅動的思考方式。架構的工藝是比任何單一技術都活得更久的本領——誠實衡量、針對取捨推理,並把你有限的電晶體、功率與時間預算,花在收益最大之處的習慣。一位爬完整道階梯的讀者,帶走的正是這份工藝,即便他學過的那些具體技術會被取代。
兩條原則構成這份工藝的骨幹,值得隨身帶到任何地方。第一條是讓常見情況變快:找出你的工作負載花最多時間在做的那件事,並最佳化它,即便犧牲罕見情況也在所不惜——因為花在幾乎從不發生之事上的力氣是浪費。第二條是 Amdahl 定律,每一項最佳化的數學謙抑者:如果一段佔總時間比例 f 的程式被加速了,無論你把那一段加速到多快,整體加速比都是有上限的,因為沒被動到的剩餘部分仍然得跑。如果一件工作有 90% 能變得無限快、但 10% 動不了,整件工作最多只能加速十倍。Amdahl 定律就是為什麼把核心加倍很少讓效能加倍,以及為什麼程式的序列部分是一切的天花板。
兩者合起來給出架構師的世界觀:在最佳化之前先量測(直覺會騙人;對真實的工作負載做基準測試)、攻擊主要的成本,並尊重那個由「你無法加速之物」所設下的極限。這個世界觀被濃縮在效能鐵律裡——執行時間等於指令數乘以每指令週期數乘以週期時間——它堅持沒有單一的魔法旋鈕,只有三個誠實的因子可以去推。這份工藝也意味著拒絕廉價的迷思:時脈頻率更高並不自動更快、管線提升吞吐量卻不提升單指令延遲、更多核心不會給出免費的線性加速、而一個基準測試只量到它所量的東西。在一個免費加速已然消失、每一分增益都必須被設計出來的後摩爾世界裡,這份量化、誠實、知曉取捨的工藝比以往任何時候都更核心——它是計算機結構裡,沒有任何新技術能讓它過時的那一部分。
一位工程師對一個程式做剖析,發現它把 95% 的時間花在某個內層迴圈裡。依 Amdahl 定律,即便把其他一切都變成瞬間完成,也只能讓程式加速約 5%,而把那一個迴圈變快兩倍,卻能把整個執行時間砍掉近一半。這份工藝就是懂得先量測、再把力氣傾注在主導的那 95%——而非那微不足道的 5%。
先量測、最佳化常見情況、尊重 Amdahl 定律——這份工藝在每一次技術更迭中存活下來。
這份工藝是對抗迷思的防線:時脈頻率更高並不自動更快、管線提升吞吐量而非單指令延遲、更多核心不會給出免費的線性加速(Amdahl 定律框住它),而一個基準測試只量到它所量的東西。在最佳化之前先誠實量測。