本文是一個轉載,覺得介紹的簡單而且精闢,對應要認識cpu和gpu的我來說,很好,原文地址:http://hc.csdn.net/article.html?arcid=2810268
異構計算的英文名稱是Heterogeneous computing,主要是指使用不同類型指令集和體系架構的計算單元組成系統的計算方式。常見的計算單元類別包括CPU、GPU等協處理器、DSP、ASIC、FPGA等。我們常說的並行計算正是異構計算中的重要組成部分異構計算近年來得到更多關注,主要是因爲通過提升CPU時鐘頻率和內核數量而提高計算能力的傳統方式遇到了散熱和能耗瓶頸。而與此同時,GPU等專用計算單元雖然工作頻率較低,具有更多的內核數和並行計算能力,總體性能/芯片面積的比和性能/功耗比都很高,卻遠遠沒有得到充分利用。
CPU的設計讓其比較擅長於處理不規則數據結構和不可預測的存取模式,以及遞歸算法、分支密集型代碼和單線程程序。這類程序任務擁有複雜的指令調度、循環、分支、邏輯判斷以及執行等步驟。而GPU擅於處理規則數據結構和可預測存取模式。而APU的設計理念則正是讓CPU和GPU完美合作,集合兩者的長處,用異構計算來達到整體性能的最佳化。
目前,已經有50款領先的應用能夠利用AMD APU進行加速,而後續的應用也將陸續到來——異構計算普及的一刻應該是近在咫尺了。
再談談現在正在流行的異構計算CPU+GPU。
CPU和GPU的本質區別
CPU的目標是快速執行單一指令流;
CPU將其用於亂序執行、寄存器重命名、分支預測以及巨大的cache上,這些設計都是爲了加速單一線程的執行速度;
CPU利用cache來降低內存訪問延遲;
CPU通過大量的cache和分支預測來降低延遲,這些機制消耗了大量的晶體管的電能;
CPU每個核心支持1~2個線程;
CPU切換線程的代價是數百個時鐘週期;
CPU通過SIMD(單指令多數據)來處理矢量數據;
Intel的CPU沒有集成內存控制器;
GPU的目標是快速執行大量的並行指令流;
GPU將晶體管用於處理器陣列、多線程管理、共享內存、內存控制器;
這些設計並不着眼於提高單一線程的執行速度,而是爲了使GPU可以同時執行成千上萬的線程;
實現線程間通信,並提供極高的內存帶寬;
GPU使用cache來放大內存帶寬;
GPU通過同時運行上千個線程來隱藏延遲,等待內存訪問的線程會被切換掉,GPU切換線程不耗時間;
對於支持CUDA的GPU,每個流處理器可以同時處理1024個線程;
GPU切換線程的代價是0,事實上GPU通常每個時鐘週期都切換線程;
GPU則使用SIMT(單指令多線程),SIMT的好處是無需開發者費力把數據湊成合適的矢量長度,並且SIMT允許每個線程有不同的分支;
支持CUDA的GPU集成有8個內存控制器,GPU的內存帶寬通常是CPU的十倍。
CPU的長項是整數計算,GPU的優勢則是浮點計算。
對於整機性能而言,CPU和GPU都是性能的保障,合理的搭配纔是重中之重,才能給用戶帶來最強的綜合性能。