過去30年里,CPU設計者主要從三個方面提高CPU性能,頭兩個就是從線性執行流程上考慮的:
1、時鐘速度
2、執行優化
3、緩存
提升時鐘速度將增大單位時間的時鐘周期數。讓CPU跑得更快,就意味著能讓同樣工作或多或少更快完成。
優化指令執行,可以在每個時鐘周期內完成更多工作。目前的CPU中,一些指令被不同程度地做了優化,如管線、分支預測、同一時鐘周期內執行更多指令,甚至指令流再排序支持亂序執行等[譯注5]。引入這些技術的目的是讓指令流更好、更快執行,降低延遲時間,挖掘每一時鐘周期內芯片的工作潛能。
在這里,有必要對指令再排序作個簡單說明。我剛才提到的部分指令優化手段,其實已遠非普通意義上的優化。這些優化可能改變程序原意,造成程序不響應程序員的正常要求。這可是個大問題。CPU設計師都是心智健全且經過嚴格訓練的好同志,正常情況下,他們連蒼蠅都不愿傷害,自然也無意破壞你的程序。而在最近幾年里,盡管知道指令重組有破壞程序語義的風險,但為了提升每個時鐘周期內的工作效率,他們已經習慣于積極開展這類有風險的優化工作。難道海德先生[譯注6]復活了?當然不是。這種積極性清楚表明,芯片設計師承受了交付速度更快CPU的巨大壓力;在這種壓力下,為了讓軟件跑得更快,他們不得不冒改變程序意思,甚至應用崩潰的風險。拿兩個有名的例子來說——寫操作再排序和讀操作再排序[譯注7]。允許處理器對寫操作再排序是非常令人吃驚的,讓大多數程序員意外,一般來說這個特性必須關閉,因為在寫操作被處理器武斷地再排序條件下,程序員很難保證程序正確執行。讀操作再排序也有明顯的問題,但大多數情況下這個特性是開啟的;因為相對來說它更容易把握一些,而且人們對性能的要求,讓操作系統和操作環境設計師只能選擇讓程序員在一定程度吃點苦頭,畢竟,這比直接放棄性能優化機會的罪責小一些。
第三個是增大與RAM分離的片內高速緩存。RAM一直比CPU慢很多,因此讓數據近可能靠近處理器就很重要——當然那就是片內了[譯注8]。片內緩存持續飚升了很多年,現在的主流芯片商出售的CPU都帶有2M甚至更高的二級緩存。值得一提的是,今后,三種提升CPU性能的傳統手段里,增加緩存將碩果僅存。我會在后面更詳細說明緩存的重要性。
我寫這么多的意思是什么呢?
最重要的是我們必須認識到,傳統性能提升方法與并發沒有直接關系。過去任何方法帶來的速度提升,無論是順序(非并行的單線程或單進程)、還是并發執行的程序,都能直接受益。這點很重要,我們目前大量的程序都是單線程的,而且在未來仍然有重要的存在價值。
當然,適當時候,我們重新編譯程序,可以利用CPU的新指令(如MMX、SSE[譯注9])和新特性提升系統性能。但總的來說,即使放棄使用新指令和新特性,不做任何更改,老程序在新CPU也會跑得更快,讓人心花怒放。
文章來源于領測軟件測試網 http://www.kjueaiud.com/