改改Python程式碼,執行速度還能提升6萬倍,Science:先別想摩爾定律了

機器之心發表於2020-06-06

這份最新研究指出,在後摩爾定律時代,人類所獲得的的算力提升將更大程度上來源於計算堆疊的「頂層」,即軟體、演算法和硬體架構,這將成為一個新的歷史趨勢。

改改Python程式碼,執行速度還能提升6萬倍,Science:先別想摩爾定律了

摩爾定律終結之後的效能提升途徑。

算力的提升可以為現代生活帶來諸多便利,例如,當前手機的功能比 25 年前房間大小的計算機都要強大,近一半的人可以上網,強大的超級計算機還可以用於藥物挖掘。人類社會已經了開始依賴計算機隨時間指數增長的強大效能了。


計算機效能的提高大部分要歸功於數十年來計算機部件的小型化。諾貝爾物理學獎獲得者理查德 · 費曼早就預見了這一點。在 1959 年致美國物理學會的演講中,他提到,「底部還有大量空間」。1975 年,英特爾創始人戈登 · 摩爾給出了這種部件小型化趨勢的預測,即積體電路上可容納的元器件數目約每隔 18-24 個月便會增加一倍,效能也將提升一倍。我們將其稱之為摩爾定律

不幸的是,這種趨勢正在走向消亡,因為「底部」已經沒有多少空間了。如果算力的提升停滯不前,那麼幾乎所有行業的生產力都將面臨挑戰。

在此背景下,MIT、英偉達、微軟的研究者在最新一期《Science》上發文指出,雖然「底部」已經沒有太多提升的空間,但「頂部」還有機會:在軟體、演算法以及硬體架構方面,我們都能夠找到提升計算效能的方法。

改改Python程式碼,執行速度還能提升6萬倍,Science:先別想摩爾定律了


論文連結:https://science.sciencemag.org/content/368/6495/eaam9744

軟體

我們可以透過效能工程(performance engineering)把軟體做得更加高效,即透過重構軟體加快其執行速度。效能工程能夠消除程式中的效率低下問題,這種問題被稱為軟體膨脹(software bloat),是由傳統軟體的開發策略造成的,即儘可能縮短軟體開發時間而不是縮短軟體執行時間。效能工程還可以根據執行的硬體來定製軟體,如利用並行處理器和向量單元。

為了說明效能工程的潛在收益,我們思考一個簡單的問題:將兩個 4096×4096 的矩陣相乘。首先用 Python 程式碼實現,程式碼在一臺現代計算機上做該矩陣乘法需要 7 個小時,如表 1 中的第一行(Version 1)所示,僅達到機器峰值效能的 0.0006%。

改改Python程式碼,執行速度還能提升6萬倍,Science:先別想摩爾定律了


但是,用 Java 實現的程式碼(Version 2)速度可以提高到原來的 10.8 倍,用 C 語言(Version 3)又可以提升到 Java 的 4.4 倍,執行時間比最初的 Python 版本快 47 倍。這種效能的提升來源於程式執行時運算元量的減少。

此外,根據硬體的特點來調整矩陣乘法的程式碼甚至可以讓執行速度提升 1300 倍。這樣的收益是來源於在 18 個處理核心上並行執行程式碼(Version 4),利用處理器的儲存層次結構(Version 5),矢量化程式碼(Version 6)以及使用英特爾的高階向量擴充套件指令集(AVX)(Version 7)。最終,程式碼最佳化的方法可以把這項任務所需的時間減少到 0.41 秒——跟需要 7 個小時執行的 Python 相比速度提升了 6 萬倍!

值得一提的是,用 Python 3 做同樣的事還要更慢,需要耗費 9 個小時。

演算法

演算法能夠為解決問題提供更有效的方法。實際上,自 20 世紀 70 年代末以來,演算法在解決最大流問題上的速度提升幾乎和硬體帶來的加速一樣多。但是,在已有的演算法問題上的進展是不均勻的和零散的,最終必將面臨收益遞減的情況。因此,目前最大收益常常來源於新問題領域的演算法(例如機器學習)以及開發能更好地反映新興硬體的新理論機器模型。

改改Python程式碼,執行速度還能提升6萬倍,Science:先別想摩爾定律了

圖 1:在求解頂點數 n=10^12,邊數 m=10^1.1 的圖形的最大流問題上的主要演算法進展。


圖 1 展示了最大流演算法隨時間的進展。在 38 年的資料中,最佳演算法的效能收益可與摩爾定律所帶來的收益相媲美,儘管過去 20 年,在該問題上並沒有提升效能的新演算法出現。該例子重點介紹了有關演算法的 3 個重要觀測結果:

1、在已有演算法上的改進是不均勻的,而且具有偶然性;

2、演算法創新得到的收益可以和摩爾定律相媲美;

3、解決任何已有的問題的演算法改進最後都會進展趨緩。


儘管對於已有問題的研究仍能獲得少量收益,但是演算法上的大量進展將來自於以下 3 個方面:

1、進軍新的問題領域;

2、解決可擴充套件性問題;

3、定製演算法以利用當前硬體。


硬體架構

在討論硬體架構之前,我們先來談談「Dennard 縮放比例定律」。

Dennard 縮放比例定律是一個鮮為人知但同樣重要的觀察結果,Robert Dennard 在 1974 年提出,隨著電晶體變得越來越小,它們的功率密度保持不變,因此功率的使用與面積成比例;電壓和電流的規模與長度成比例。

結合「摩爾定律」電晶體的數量大約每兩年翻一番,這意味著效能功耗比(每消耗一瓦功率,計算機可提供的計算速率)以同樣的速度增長,大約每兩年翻一番。

Dennard 縮放比例定律在提出之後的 30 年後結束,原因並不是因為電晶體的尺寸不再縮小,而是因為電流和電壓不能在繼續下降的同時保持可靠性了。隨後「多核時代」就到來了。

改改Python程式碼,執行速度還能提升6萬倍,Science:先別想摩爾定律了

圖 2:1985 年 - 2015 年,SPECint 效能(序列為主)、SPECint-rate 效能(並行)、微處理器時脈頻率提升的情況。座標起點為 1985 年的 Intel 80386 DX 微處理器。

上圖 2 展示了微處理器的三組基準資料:首先,如圖中綠點所示,從 1985 年到 2005 年,由於 Dennard 縮放比例定律的終結,時鐘速度在增長了 200 倍之後趨於平緩。


在 Dennard 縮放比例定律時代,由於時鐘速度提高和其他架構變化的推動,微處理器在 SPECint 和 SPECintrate 基準測試中的效能迅速提高,目的是在典型的使用者工作負載上對計算機效能建模。

SPECint 基準主要由序列程式碼組成,SPECint-rate 基準測試則是並行的。這兩個基準測試在單處理器計算機上的表現是相同的。但從 2004 年之後,由於機器新增了多個核心以及其他的顯式並行機制,兩者的效能出現差異。

實際上,從 2004 年到 2015 年,效能最佳的晶片上並行應用程式的效能增長了 30 倍,大概每兩年就會翻一番。相比之下,同期的 SPECint 基準(灰點)僅增加了三倍。

既然設計者已經接受了並行性,主要問題就是如何簡化處理器和利用應用程式的並行性。未來,兩種簡化策略將佔據主導地位:處理器簡化和領域專門化。

硬體架構是可簡化的。一種是透過簡化處理器,將複雜的處理核替換為電晶體數量需求更少的簡單處理核。由此釋放出的電晶體預算可重新分配到其他用途上,比如增加並行執行的處理核的數量,這將大幅提升可利用並行性問題的效率。

簡化的另一種形式是領域專門化(domain specialization),即針對特定應用程式定製硬體。這種專門化捨棄了某一領域不需要的處理功能,同時允許針對領域進行更多的自定義,比如降低機器學習應用程式的浮點精度。


在後摩爾時代,軟體、演算法和硬體體系架構的效能改進越來越依靠在堆疊的各個級別上進行併發更改。從工程管理和經濟的角度看,這類更改在大型系統元件中更容易實現,因為這些可重用的軟體通常具有超過一百萬行的程式碼,或者是擁有相當複雜的硬體。

如果一個組織和公司擁有此類的大型元件,透過重新設計模組度來獲得效能提升是比較容易的。此外,成本和收益可以合在一起考慮,這樣一來,大型元件中某一部分重要但昂貴的更改就能用該元件中其他部分的收益來彌補。

「底層」或許還有機會

在後摩爾時代,處於「底層」的制矽工藝改進將不再提供那麼顯著的計算機效能提升,但「頂層」的軟體效能更迭、演算法開發和硬體精簡,將使計算機應用程式的速度更快。與曾經「底層」明顯的收益不同,這些「頂層」的收益將會是參差不齊、零散且機會性的。而且,隨著對特定計算方法的探索不斷深入,這種邊際收益將會呈現遞減趨勢。


當然,一些新興技術也可能從「底層」推動發展,比如 3D 堆疊量子計算、光子學、超導電路、神經形態計算、石墨烯晶片。這些技術目前還處於起步階段,尚未成熟,暫時無法與基於矽的半導體技術競爭。但不可否認的是,它們的確具備長期潛力。

參考連結:https://science.sciencemag.org/content/368/6495/eaam9744

相關文章