計算機工業(yè)從1960年代早期開始使用CPU這個術(shù)語。迄今為止,CPU從形態(tài)、設(shè)計到實現(xiàn)都已發(fā)生了巨大的變化,但是其基本工作原理卻一直沒有大的改變。 通常 CPU 由控制器和運算器這兩個主要部件組成。 傳統(tǒng)的 CPU 內(nèi)部結(jié)構(gòu)圖如圖所示:
傳統(tǒng)CPU內(nèi)部結(jié)構(gòu)圖(ALU計算模塊)
從圖中我們可以看到:實質(zhì)上僅單獨的ALU模塊(邏輯運算單元)是用來完成數(shù)據(jù)計算的,其他各個模塊的存在都是為了保證指令能夠一條接一條的有序執(zhí)行。這種通用性結(jié)構(gòu)對于傳統(tǒng)的編程計算模式非常適合,同時可以通過提升CPU主頻(提升單位時間內(nèi)執(zhí)行指令的條數(shù))來提升計算速度。 但對于深度學(xué)習(xí)中的并不需要太多的程序指令、 卻需要海量數(shù)據(jù)運算的計算需求, 這種結(jié)構(gòu)就顯得有些力不從心。尤其是在功耗限制下, 無法通過無限制的提升 CPU 和內(nèi)存的工作頻率來加快指令執(zhí)行速度, 這種情況導(dǎo)致 CPU 系統(tǒng)的發(fā)展遇到不可逾越的瓶頸。
并行加速計算的GPU
GPU 作為最早從事并行加速計算的處理器,相比 CPU 速度快, 同時比其他加速器芯片編程靈活簡單。
傳統(tǒng)的 CPU 之所以不適合人工智能算法的執(zhí)行,主要原因在于其計算指令遵循串行執(zhí)行的方式,沒能發(fā)揮出芯片的全部潛力。與之不同的是, GPU 具有高并行結(jié)構(gòu),在處理圖形數(shù)據(jù)和復(fù)雜算法方面擁有比 CPU 更高的效率。對比 GPU 和 CPU 在結(jié)構(gòu)上的差異, CPU大部分面積為控制器和寄存器,而 GPU 擁有更ALU(邏輯運算單元)用于數(shù)據(jù)處理,這樣的結(jié)構(gòu)適合對密集型數(shù)據(jù)進(jìn)行并行處理, CPU 與 GPU 的結(jié)構(gòu)對比如圖 所示。
第一代GPU(1999年以前),部分功能從CPU分離 , 實現(xiàn)硬件加速 , 以GE(GEOMETRY ENGINE)為代表,只能起到 3D 圖像處理的加速作用,不具有軟件編程特性。
第二代 GPU(1999-2005 年), 實現(xiàn)進(jìn)一步的硬件加速和有限的編程性。 1999年,英偉達(dá)發(fā)布了“專為執(zhí)行復(fù)雜的數(shù)學(xué)和幾何計算的” GeForce256 圖像處理芯片,將更多的晶體管用作執(zhí)行單元, 而不是像 CPU 那樣用作復(fù)雜的控制單元和緩存,將(TRANSFORM AND LIGHTING) 等功能從 CPU 分離出來,實現(xiàn)了快速變換,這成為 GPU 真正出現(xiàn)的標(biāo)志。之后幾年, GPU 技術(shù)快速發(fā)展,運算速度迅速超過 CPU。 2001年英偉達(dá)和ATI 分別推出的GEFORCE3和RADEON 8500,圖形硬件的流水線被定義為流處理器,出現(xiàn)了頂點級可編程性,同時像素級也具有有限的編程性,但 GPU 的整體編程性仍然比較有限。
第三代 GPU(2006年以后), GPU實現(xiàn)方便的編程環(huán)境創(chuàng)建, 可以直接編寫程序。 2006年英偉達(dá)與ATI分別推出了CUDA (Compute United Device Architecture,計算統(tǒng)一設(shè)備架構(gòu))編程環(huán)境和CTM(CLOSE TO THE METAL)編程環(huán)境, 使得 GPU 打破圖形語言的局限成為真正的并行數(shù)據(jù)處理超級加速器。