不斷擴充的 SIMD 指令集會不會讓 CPU 從 GPU 手中奪回失去的並行計算市場?

背景知識:

Intel 預計於 2015 年發布的 Knights Landing 處理器中引入了 AVX-512 指令集,把 SIMD 的寬度提高到 512 位,相當於一次處理 16 個單精度浮點。

作為對比,Nvidia 的 Kepler 架構中一個 SMX 包含 192 個單精度浮點單元,但是頻率大約只相當於 CPU 的一半,這樣算下來單個 SMX 的峰值計算能力只是支持 AVX-512 的 x86 核心的 6 倍。

如果將來 Intel 繼續將 SIMD 指令的寬度擴展到 1024 位,同時在單個核心中實現簡單 SIMD 指令(加、減、乘、乘加等)的三發射,那麼從單個核心來看,x86 的理論性能將達到現在 Nvidia GPU 的同等水平。

從核心數量上看,完整的 GK110 晶元包括 15 個 SMX。而伺服器級別的 CPU 也早就達到了 15 核。

問題:

1. CPU 會不會按照這條道路發展?

2. 如果按照這條道路發展,將來 CPU 能否奪回目前被 GPU 等協處理器佔據的並行計算市場?

P.S. 其實 Knights Landing 也是協處理器,在並行計算中的地位與 GPU 類似。我這裡主要關心的還是中央處理器,即同樣的技術會不會應用到 CPU 中並帶來怎樣的影響。


一個三頭六臂的CPU也敵不過一個有十萬天兵天將的GPU。

CPU的大量晶體管花在了cache和控制器(好像是85%),真正計算的部分很少。即便SIMD拉寬,比例變化仍然不大。畢竟CPU的目標是通用、靈活、低延遲。

而GPU幾乎所有晶體管都用在計算,cache不多,控制器甚至可以不要,在CPU上通過驅動跑也行。NV的GPU,結構上就是一堆運算器的集合,運算器之間MIMD,內部SIMD。目標是專用之餘儘可能通用、高吞吐(無所謂延遲)、高流水線。

目標的不同導致了設計的不同,設計的不同導致了分工的不同。


CPU和協處理器都撞內存牆以前都肯定不會有通用CPU能和協處理器競爭。撞牆時說不定CPU/GPU融合已經完成了。

1. 會,SIMD變寬是趨勢,但是對於通用CPU來說變化會很慢。通用CPU用到SIMD指令機會沒那麼多,此時更寬的SIMD單元就是浪費晶體管。而對於專門處理DLP任務的knights landing來說,SIMD其實才是本體吧。

2. 一段時間內不會,同樣工藝水平下,你說的擴展SIMD,多發射等等都只會把CPU拉到和協處理器一個水平,然後被更多晶體管用來堆Gflops的協處理器打敗。這個處理器雖然Gflops上去了,但單線程性能或者核心數量會下降,作為通用處理器來說性能不均衡。這是對latency優化的通用CPU和對throughput優化的協處理器的區別。

Intel在CPU塞SIMD的同時,NV正在GPU里塞denver

未來某天可能因為撞內存牆,多堆5倍還是10倍Gflops反正都卡在內存上。此時可能會有CPU的Gflops爆了GPU的後代,而GPU的後代跑操作系統各種流暢的現象出現。


顯然不能。首先,GPU好像也有SIMD。其次,GPU和CPU的架構就不一樣,人家一個控制器帶好幾十個運算器傻算的架勢,你CPU打了雞血也拼不過的。


除了SIMD寬度的擴展,還有可能的其他幾個手段:

1.增加每核VPU數量

2.優化流水線

3.增加類似FMA的操作。

……


1. CPU 會不會按照這條道路發展?

如果你指的是 SIMD 的話,不是一直這麼發展的么?從最開始的MMX,到現在的AVX-512,還會再繼續走下去——至少騙騙消費者也好啊。如果是眾核的話,不會(超算專用的 CPU 除外——Xeon Phi Roadmap 有替代處理器的計劃)

在日常應用中,可向量化算術計算只是一部分,還有很大一部分是跳轉/判斷/不可向量化的計算。所以盲目地在家用處理器上搞SIMD意義並不大——不如把你的分支預測內存存取什麼的做好。

Xeon Phi 是一款特別的產品,它的核心並不帶分支預測等現代處理器技術(KNC是的,KNL的話還沒看資料),完全是為了計算而生。它具體的日常應用的性能數據我並不清楚,只是上次和 Intel 的夥計聊天的時候他們提到如果不用閹割的 Linux 而用完整版的話,Xeon Phi 需要半個小時才能啟動好。

至於NV GPU除了浮點以外的(整數/邏輯等)性能,想用它跑日常應用,呵呵。

2. 如果按照這條道路發展,將來 CPU 能否奪回目前被 GPU 等協處理器佔據的並行計算市場?

不能

看 Intel 的努力程度了。Symmetric Mode 很好用啊,偷懶神器,OpenMP 化一下就很好了,但是 Intel 推薦的不是 Offload Mode 么,你看我每天寫那麼多 #pragma offload 煩不煩 煩不煩 煩不煩 煩不煩啊。

還是 dummy&<&<&<256, 256&>&>&> 好用。

有新應用的話我也樂意寫 CUDA,但是誰叫我們用的是 Phi 的集群呢


前面幾位回答的比較詳細了,那麼我從另外一個點闡述一下,在外面手機打字,不好排版,寫的比較亂還請諒解。

GPU的多處理器體系結構只是類似SIMD的SIMT結構可不是簡單的SIMD。

SIMT定義:為管理和執行數百個線程以高效的運行多個不同程序,多處理器使用SIMT結構,通過調用warp創建、管理、調度和執行並行線程組的並發線程。

SIMT和SIMD相同點:允許一條指令在多個數據通路上執行。

SIMT和SIMD不同點:SIMT應用一條指令到多個並行獨立線程,不僅僅是數據通路;SIMT一條指令控制一個單獨線程而SIMD一條指令控制一個多條數據通路一起組成向量

另外,SIMT的分支代碼比SIMD更有效率,因為要比SIMD寬度要窄

綜上所述,可以看出即使CPU SIMD的寬度更大也無法在一定程度上代替GPU並行計算,因為GPU並不單單是一種SIMD,如果想用CPU SIMD代替GPU SIMT那麼除非讓CPU同時兼具SIMD和SIMT運算,這種做法類似現在桌面端的CISC兼容RISC、ARM用Thumb-2技術讓Thumb和ARM的ISA融合實現了Thumb代碼的密度和ARM性能這些將技術互相融合。但CPU本身是串列設計,大部分晶體管用於Cache、邏輯單元、控制單元等,所以,在我看來CPU SIMD始終無法代替GPU SIMT


不能啊。設計都不一樣。cpu就好比工程師繪圖搬磚都會,gpu就好比農民工兄弟(無歧視)只會搬磚。但是一個工程師搬磚的速度肯定是比不上1000個農民工兄弟同時搬磚的速度。但是農民工兄弟不會繪圖調度。


主要還是不斷擴充的NV圖卡售價

以gflops/$來算的,其實SKYLAKE E5甚至比NV的P100要好,只不過節點密度上比不了P100

想像一下,高度向量優化的GPU加速器的向量浮點運算單價比向量串列通吃的CPU還貴。。。NV最近實在是太坑了。


一個系統一般來說不止一個核,不管是專用的還是通用的系統中,真的沒有必要把每個核都做成一樣。

就算都做成很寬的VLIW,也不會每個核都搞那麼多矢量寄存器,一個32*16的矢量寄存器就佔了5k門。

就算都有不少矢量寄存器,也不會都搞那麼多執行單元,單精度浮點的乘法、倒數、開方、自然指數這些也都占不少資源。

面積太大能耗比太低,競爭力就下去了,方案或者產品就被pk下去了。


從intel最近五年的微架構改進來看,用SIMD取代可編程管線都是扯淡。

話說題主知道SSE全系的SIMD位移都有bug嗎。


sub-word SIMD 和 vector 還是有點不一樣的


@Shu Zhang 贊同,就補充兩點:

1. SIMD指令集繼續加寬的限制,現在cache line都是64bytes(512bits)的,如果要將SIMD指令繼續加寬,勢必cache line都要加寬了。這樣導致的cache coherency的代價,cache lines被整體替換掉,導致的cache misses可能性增加,以及加寬execution path帶來的能耗問題,這些問題都有待論證。

2. AMD和Intel都在把CPU和GPU放到同一個晶元上,做成APU,並統一CPU,GPU對內存訪問,消除PCIe傳輸的瓶頸。

參看 AMD hUMA和Getting the Most from OpenCL1.2: How to Increase Performance by Minimizing Buffer Copies on Intel Processor Graphics


GPU不過是曇花一現罷了,沒有東西好用只好用它,有了協處理器,GPU最多還能風光10年吧


問題是能耗比不佔優。堆cpu達到和gpu浮點計算能力相同,能耗和成本太高。


「奪回」本身就是個無聊的行為。。你寫小說呢?奪回有哪些意義呢?


吐個槽,SIMD編程模型不好用,不如GPU……


推薦閱讀:

GPU如此之強能否替代CPU?
為什麼電腦城的小弟小妹們沒系統地學過相關理論知識,卻這麼了解硬體?
移動 GPU 和桌面 GPU 的差距有哪些?
目前gpu渲染方面,哪些geforce卡比較有性價比?
如何評價 Nvidia 發布的 SOC Tegra X1?

TAG:中央處理器CPU | 計算機 | 圖形處理器GPU | 並行計算 |