1. 程式人生 > >gpu和cpu區別

gpu和cpu區別

數據流 速度 數據 線程數 data 延時 應用 cti 指令


GPU的功耗遠遠超過CPU
Cache, local memory: CPU > GPU
Threads(線程數): GPU > CPU
Registers: GPU > CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread數目大,register也必須得跟著很大才行。
SIMD Unit(單指令多數據流,以同步方式,在同一時間內執行同一條指令): GPU > CPU。

在計算機上運行的程序從性能的角度來說大致可分為三類:
(1) I/O intensive;
(2) Memory intensive
(3) Compute-intensive。
  (1)I/O intensive的程序其性能瓶頸是I/O,也就是說程序運行的大部分時間花在了硬盤讀寫/網絡通信上,而I/O處在計算機體系結構金字塔的最底層,速度非常慢。最近炒的很火的big data 討論的就是這一類應用程序。幾百TB 甚至到PB級別的數據往哪擱,只能放在硬盤上。一臺機器容量太小CPU太少怎麽辦,搞幾百臺甚至上千臺機器用網線連起來分布處理。所以這塊全是I/O, 現在大的互聯網公司不多搞幾個上千節點的集群肯定撐不住。
  (2)Memory intensive的程序其性能瓶頸在內存訪問,程序中有大量的隨機訪問內存的操作,但是基本沒有I/O, 這類程序已經比第一類程序快一個數量級了,但是和寄存器的速度還是沒法比。目前大部分應用程序都屬於這類。個人電腦裏裝的的各種軟件基本就是這類,如果有點I/O, 立刻就會非常得卡。
以上提到的這兩類程序的應用最廣泛,涵蓋了大部分有用的計算機軟件,但遺憾的是GPU在這兩塊毫無用處, GPU只有在計算密集型的程序有些作用。I/O是瓶頸的程序,花在計算的時間可以忽略不計,再怎麽用GPU加速也沒用。 含有大量內存隨機訪問的程序也不適合在GPU上執行,大量的隨機訪問甚至可以使GPU的行為由並行變為串行。
什麽類型的程序適合在GPU上運行?
  (1)計算密集型的程序。所謂計算密集型(Compute-intensive)的程序,就是其大部分運行時間花在了寄存器運算上,寄存器的速度和處理器的速度相當,從寄存器讀寫數據幾乎沒有延時。可以做一下對比,讀內存的延遲大概是幾百個時鐘周期;讀硬盤的速度就不說了,即便是SSD, 也實在是太慢了。
  (2)易於並行的程序。GPU其實是一種SIMD(Single Instruction Multiple Data)架構, 他有成百上千個核,每一個核在同一時間最好能做同樣的事情。
  滿足以上兩點,就可以用GPU做運算了。 不過你還得先用CUDA或者Open CL 把能在GPU上運行的程序寫出來, 這也是很麻煩的,寫一下就知道了。 而且GPU的架構比較特殊,要想寫出高效率的程序,要花很多很多時間。筆者想說寫GPU程序是一件很蛋疼的事情。
  GPU在某些地方很有用,但應用面比較窄,遠遠沒有某公司聲稱的那麽有用。當今還是Intel的天下, 現在計算機的速度已經很快了,計算其實已經不是什麽大問題。I/O才是最需要解決的問題。 記得曾經看過N家的GTC峰會,黃某人吹得神乎其神,連筆者都被感動了,多少多少T FLOPS的計算速度。 程序運行時間從100 秒 變成 1秒 其實沒多重要,你倒杯水的功夫就100秒了。運行時間從100天縮短到1天才是大貢獻。 前者就是GPU做的事情,後者才是我們真正需要的。


gpu:數量大,計算簡單,重復多次
cpu :數量不那麽大,計算復雜,重復性低

gpu和cpu區別