2 并行優化-阿姆達爾定律
從90s到本世紀初,“面向摩爾定律程式設計”的套路越來越用不下去了。奔騰4開始,Intel意識到通過提升主頻“難”以性能提升。開始推出多核CPU,提升“吞吐率”而非“響應時間”。即通過并行提高性能。
但要使用這種思想,需滿足以下條件:
-
需要進行的計算,本身即可分解成幾個可并行任務
比如向量的點乘運算
- 需要能夠分解好問題,并確定幾個人的結果能夠彙總到一起
- 在“彙總”這個階段,是沒有辦法并行進行的,還是得順序執行,一步一步來
這就引出了阿姆達爾定律(Amdahl’s Law):
對一個程式優化後,處理器并行運算之後效率提升的情況可用如下公式表示:
優化後的執行時間 = 受優化影響的執行時間/加速倍數+不受影響的執行時間
比如向量點乘,同時計算向量的一小段點積,就是并行提高部分計算性能。但最終還是要在一個人那彙總相加,這部分時間無法并行優化,即不受影響的執行時間。
比如向量
- 點積需100ns
- 加法需要20ns
總共需要120ns。這裡通過并行4個CPU有了4倍的加速度。那麼最終優化後,就有了100/4+20=45ns。
即使增加并行度來提供加速倍數,比如有100個CPU,整個時間也需要100/100+20=21ns,是以并非越多就肯定越快。
3 讓性能再次提升
無論是簡單提升主頻,還是增加CPU核心數,通過并行提升性能,都會遇到瓶頸。
僅靠“堆硬體”,已經不能很好地滿足性能。于是,工程師們需要從其他方面開始下功夫。
在“摩爾定律”和“并行計算”之外,在整個計算機組成層面,還有如下:
3.1 大機率事件
深度學習,整個計算過程中基本都是向量矩陣計算。是以用GPU替代CPU,大幅度提升了深度學習的模型訓練過程,Google不滿足GPU性能,還推出了TPU。
3.2 流水線
現代的工廠裡的生産線叫“流水線”。可以把裝配iPhone這樣的任務拆分成一個個細分的任務,讓每個人都隻需要處理一道工序,最大化整個工廠的生産效率。
CPU就是一個運算工廠,把CPU指令執行的過程進行拆分,細化運作。
3.3 預測
預測下一步而非苦等上一步結果,即提前運算。就像循環通路數組時,你也會猜到下一步會通路數組下一項。比如“分支和冒險”、“局部性原理”。
參考
- 《深入了解計算機作業系統》
- https://www.eda365.com/portal.php?mod=view&aid=53086