回覆列表
  • 1 # 超能網

    簡單來講在現代計算機環境下的日常使用中,整點運算效能影響如壓縮與解壓縮,計算機程序排程,編譯器語法分析,計算機電路輔助設計,遊戲AI處理型別的操作。而浮點運算單元主要影響CPU的科學計算效能,如流體力學,量子力學等,而更貼近我們日常能見到的應用就是多媒體相關的應用,如音影片的編解碼,影象處理等操作。

    ZEN的核心架構圖

    而我們通常在測試CPU時使用如Sandra 2018,Super Pi,wPrime,Fritz Chess Benchmark,WinRAR,7-zip,x264 FHD Benchmark等軟體,這些測試軟體就能夠體現處理器理論整數運算單元和浮點運算單元效能的。

    在具體使用的軟體中,如壓縮解壓軟體WinRAR,7-zip,程式設計師使用的GCC編譯器,網路路由的選擇,遊戲中的AI以及我們日常試用作業系統排程都是整點運算。而我們在使用lightroom等影象處理軟體,語音識別,影片的編解碼,以及科學家使用Matlab進行科學計算時都用到了浮點運算能力。

    對於玩家最關心的就是這些到底對遊戲有什麼影響。首先CPU承擔著整個計算機中的任務程序分配問題,所以如果遊戲程式碼最佳化不好,進行頻繁的Draw Call操作,會非常消耗CPU任務排程資源。同時現在遊戲AI做操作行為判斷時,也是使用整點運算單元的。而現在很多遊戲加入了防盜版機制,在運行遊戲時頻繁的加解密會消耗浮點運算效能。所以有朋友使用較老的硬體執行新遊戲時,會非常影響遊戲執行幀率。

    所以整點運算效能和浮點運算效能都反映了CPU處理資料的能力。但是整點運算效能還反映了控制程式流的的能力。

    在計算機中,定點數不一定是整數,而浮點數也不一定是小數。在計算機中,定點數是指小數點固定的數,而浮點數是指小數點不固定的數。在計算機中採用IEEE 754標準進行浮點數的儲存的,他可以精確的的表示某一個數據。

    在早期浮點運算單元並沒有一開始就加入到CPU設計中的。但是在計算機中,運算單元都是邏輯電路,由浮點數的定義我們可以知道,在早期僅有整點數運算單元而不帶有浮點數處理單元的 處理器上,處理浮點數的階碼、尾數的計算以及規格化就成為了很困難的事情,導致早期CPU在科學計算中依舊非常的緩慢。所以Intel就設計了獨立於8086和8088處理器外的8087數學輔助處理器。到後來隨著計算機不再是科學家的工具,也逐漸進入了公眾視野,Intel在80486DX處理器核心內首次集成了浮點運算單元。

    Intel 8087協處理器

    Intel Core i7 7700k處理器的CPU-Z資訊

    早期的Intel x87系列數學運算輔助處理器只是作為一個提高浮點運算速度的處理器,而在現代處理器中,浮點計算功能會透過SIMD(Single Instruction Multiple Data,單指令多資料流)的技術實現平行計算能力。在開啟CPU-Z後,開支援指令集一欄可以看到,現代處理器帶有的SSE指令集就有處理浮點運算的能力。而在之後的發展中,也逐漸引入了SSE2,SSE3,SSE4,AVX,FMA等更加適用於現代軟體開發的擁有強大浮點運算能力的指令集。

    那接下來就有問題了,現代處理器加入了很多高度並行化的浮點運算單元,相較以往單純CPU的浮點運算能力有了非常大的飛躍,但是相對於現代的圖形處理器來說,這麼些浮點運算能力是不夠看的,那為什麼不像幾十年前一樣不在CPU中整合浮點運算單元呢??

    Nvidia Geforce 256核心照片

    對於這個問題,首先大家要了解為什麼會獨立出來圖形處理器這種專有硬體的。在20世紀90年代,計算機多媒體逐漸開始興盛起來,在1998年到1999年間,Intel和AMD的CPU中已經擁有了SSE或3DNow!這樣的SIMD浮點運算指令集。但是隨著電子遊戲的發展,計算機的使用者對於計算機的圖形效能有了更高的要求,但是此時的CPU內浮點運算效能並不滿足需求,所以在此後圖形處理器開始負擔更多的浮點運算工作。

    Nvidia CUDA核心工作流程

    但圖形處理器的使用者看到如此高效能的浮點運算處理器的時候就在思考如何能讓這類裝置承擔除了圖形計算之外的浮點計算效能。乘著GPGPU(General-purpose GPU)概念的逐漸興起,顯示卡上的統一渲染架構的出現,也讓這種計算方式真正成為現實。Nvidia在2007年正式釋出了CUDA平行計算平臺。之後也出現瞭如openCL的通用計算API(應用程式程式設計介面)。

    到此我們突然發現,GPU都來搶CPU的浮點運算飯碗了,但為什麼CPU非但沒有取消浮點運算單元,反而其浮點運算效能越來越強??

    AMD推土機架構示意圖

    其實並不是沒有人想到這樣的情況,而是已經與產品這麼做了,就是AMD的推土機架構。這個架構放棄了之前的一個核心就由一套整數運算單元和浮點運算單元的組合,而是讓兩個核心共享一個浮點運算單元組成一個簇,而AMD將這種架構叫做CMT,又稱為群集多執行緒技術,之後又將相對與Intel有優勢的GPU核心整合進CPU中,產生了APU處理器。AMD當時還為此成立了HSA基金會,為解決CPU和GPU的記憶體統一定址問題,也提出了hUMA技術並用在了Sony的PS4遊戲機上。

    Sony Playstation 4主機,CPU和GPU共享8GB GDDR5記憶體

    那為什麼廠商做了這麼多還是做不到用大規模的GPU取代CPU中的浮點運算單元呢?運算精度才是重點。CPU中的浮點運算單元是為了更高精度浮點運算準備的。如在最新Intel處理器中的AVX指令集可以處理512位擴充套件資料,這樣大大提升了計算精度和速度。而GPU中的處理器都是為高度平行計算而設計的結構相對簡單的核心,這些核心每一個都是SIMD處理器,但是能夠處理的資料精度是有限的,在Nvidia以及AMD圖形處理器上支援的資料精度大多是單精度和雙精度浮點計算(FP32和FP64),甚至隨著機器學習,深度學習,神經網路的流行,最新的圖形處理器甚至支援了半精度浮點運算(FP16)。其次,由於在計算精度上相較於CPU中的浮點運算單元不高,所以在這些處理器中也沒有內建資料校驗和資料補償處理的運算單元。所以對於使用GPU進行科學計算的人,需要在程式設計階段就避免這樣的問題。同時CPU和GPU在設計上就是非常不同的,CPU的浮點單元個數很少,但是單個浮點運算單元所提供的效能是很強的。而GPU中是用過海量的SIMD單元堆砌出來的浮點運算能力。在CPU設計時,還需要設計大量的多級快取來提高CPU的運算速度。而GPU中通常只為這些SIMD處理單元內建不多的快取,而提供大量的記憶體(視訊記憶體)。

    所以綜合上面的分析,我們可以得出的結論是雖然GPU擁有更強大的浮點運算效能,但是限於其計算單元的設計,統一記憶體架構的設計,其還是不能完全取代CPU中的浮點運算核心。CPU中的整點運算單元在肩負著如壓縮解壓,編譯器編譯程式,網路路由,控制程式流等任務同時,其浮點運算核心也依舊在處理著影象處理,科學計算等需要更高精度計算的任務。

  • 中秋節和大豐收的關聯?
  • 如何訓練一年級孩子看圖寫話?