CPU浮點運算與整點運算分別決定其什麼方面性能?

手機benchmark分別測算了這兩方面性能。他們分別對手機何種方面的性能產生影響,優秀的CPU如何搭配這兩種性能?


Benchmark King -- Spec2006 已經給出答案了:

Spec2006 整數測試項目:

  • Perl腳本語言,
  • Bzip壓縮,
  • Gcc編譯器,
  • Mcf調度組合優化,
  • Gomrk人工智慧圍棋,
  • Hmmer基因序列搜索,
  • Sjeng人工智慧國際象棋,
  • Libquantum模擬量子計算機,
  • H264視頻編碼和壓縮,
  • OMNETPP大型網路通訊模擬,
  • ASTAR尋路演算法,
  • XALANCBMK文檔處理(XML)

Spec2006 浮點測試項目: (僅列前三條)

  • Bwaves流體力學(對三維瞬跨音速粘帖行流中衝擊波的模擬)
  • Gamess量子化學(三種SCF自洽場計算: 跑嘧啶分子, 水和Cu2+離子, 三唑離子)
  • Milc量子色動力學(四維SU(3)格點規範理論的模擬, 研究QCD量子色動力學, 夸克和膠子)

...

實際上日常的絕大多數應用都是整數計算為主的程序(會包含少量浮點指令), 而只有科學計算程序會包含大量浮點代碼. 這個結論和常識並不符, 但是經得起推敲. 實際上可以用整數單元做的工作, 編譯器一般不會特地動用浮點單元; 有時, 一些高精度數據結構要靠浮點單元來計算, 但是這些代碼混入整個程序後, 浮點操作所佔的比例仍然不高.

用數據說話:
在Windows上找了幾個常見應用, 動態執行並採樣, 進行指令類型分析, 其中指令分成四類:
[M]Memory 指訪存指令 (Load, Store, Push, Pop..)
[B]Branch 指跳轉指令(Jmp, Call, Return, Jcc..)
[I]Integer 指整數計算指令(Add, Mul, Cmp, MovReg..)
[F]Floating Point 指浮點計算指令(Fadd, Fmul, Fcmp, Fmov..)

結果如下:
MS-Office-Word [M]39.2% [B]22.9% [Int]37.6% [Fp]0.0%
MS-Office-Excel [M]40.1% [B]21.7% [Int]36.6% [Fp]0.1%

Web-Youtube [M]32.7% [B]12.4% [I]42.8% [F]8.8%
Web-Pandora [M]36.0% [B]18.1% [I]31.3% [F]12.7%

Game-Quake3 [M]45.0% [B]11.6% [In31.4% [F]10.6%
Game-PeaceKeeper [M]40.4% [B]21.2% [I]36.6% [F]1.1%

Benchmark-3DMark-CPU [M]41.3% [B]10.5% [I]28.3% [F]18.4%
Benchmark-3DMark-Graphic [M]42.9% [B]18.8% [I]33.1% [F]3.4%
Benchmark-PCMark-Communication [M]33.6% [B]11.4% [I]51.1% [F]1.4%
Benchmark-PCMark-Music [M]35.3% [B]19.4% [I]37.0% [F]5.7%


從結果可以看出, 浮點單元的應用遠少於預期. 有的特定代碼比如流媒體(Pandora), 測試軟體(3DMark)可能在某些場景下集中進行浮點計算, 但比例不高. 而整數計算是無所不在, 這是因為整數計算單元不但要負責計算, 還會負責控制程序流. 像Compare+Branch這樣的指令通常會用整數單元來執行, 因此整數單元的使用場景更多.

引申到AMD於2011年發布的桌面處理器架構Bulldozer, 其中就有加強整數計算單元, 減少浮點計算單元的邏輯:

可以看到Bulldozer模塊中, 兩個線程會共用同一個浮點計算單元. 這款處理器本是為伺服器應用而設計的, 減少了使用頻率低的浮點計算單元.

但是, 實際中也有用高頻浮點計算的程序
比如科學計算程序:
Spec2006-Fp-Bwaves [Mem]28.6%+ [Brn]2.9%+ [Int]18.3%+ [Fp]49.8%+
比如部分遊戲:
Game-Doom3 [Mem]21.1%+ [Brn]8.9%+ [Int]21.2%+ [Fp]46.6%+
這就說明了GPU的必要性, 一旦程序中浮點計算的代碼比例過高, 軟體層會更偏向使用GPU來計算, 因為GPU的並行數量大, 對於遊戲/科學計算這樣的固定模式浮點計算非常合適.

總結:
整數計算性能, 浮點計算性能, 訪存性能, 分支預測正確率. 這些都只是CPU綜合能力的子項. 評價CPU的性能應該結合具體應用來測量, 比如:

  • 使用Spec2006測量CPU的複雜問題求解能力,
  • 使用3DMark測量CPU在遊戲中的表現,
  • 使用PCMark來測量場景場景(音頻, 壓縮, 通訊等),
  • 使用MobileMark測量CPU在辦公軟體中的效果.

而許多手機Bench/免費的Bench, 往往都是Toy Bench, 它們的核心測量代碼不過千行, 只能測試CPU在某種特定場景下的速度, 和實用相差甚遠, 沒有實際應用的價值.
題主要求的"優秀CPU", 狹義的說, 至少需要能快速運行上整數, 浮點, 訪存, 分支這四類指令才可以.


這兩種運算都是處理運算的。
在之前的最開始的CPU裡面是沒有浮點運算單元的,只有整點運算單元,那時候 的機器只能在處理整點運算上面顯得得心應手,但是你要計算浮點運算,卻需要電腦上的程序(軟體)來計算,電腦的硬體並不能處理。也或者是你可以自己從市場上買一個浮點運算單元插在自己的電腦主機上,當做外設補充CPU本身的不足。

在當時之所以沒有集成浮點元算在CPU內部是受價格因素的影響,當然也有技術方面的影響。現在隨著技術發展,晶元的價格也越來越便宜,浮點和整點都已集成在CPU內部。而且他們的運算速度也越來越快,處理數據的功能也愈加強大。

只是從課堂上老師口中聽來的,還望有真正深入了解的補充。


請問Ricky Li:

請問 "在Windows上找了幾個常見應用, 動態執行並採樣, 進行指令類型分析, 其中指令分成四類" 怎麼測試?

用 AMD工具code analysis 怎樣進行設定才能夠 按照指令類型 整數 浮點數來分,我下載這個軟體後,弄了半天沒弄清楚。 小生愚昧,還請大神不吝賜教!!


推薦閱讀:

你認為 iPhone 和 Android 系手機各自的優缺點是什麼?
如何評價LG G4?
為什麼好多 Android 手機的計算器都有這樣的問題呢?
像三星 (Samsung) 這樣在硬體性能測試 Benchmark 跑分中作弊的現象普遍嗎?
手機安全軟體作用到底有多大?

TAG:手機 | 智能手機 | 中央處理器CPU | 移動通信 | 架構 | Android手機 | 硬體 | 移動終端 |