【廣告】
程序的運(yùn)行過程,實(shí)際上是程序涉及到的、未涉及到的一大堆的指令的執(zhí)行過程。當(dāng)程序要執(zhí)行的部分被裝載到內(nèi)存后,CPU要從內(nèi)存中取出指令,然后指令解了碼(以便知道類型和操作數(shù),簡單的理解為CPU要知道這是什么指令),然后執(zhí)行該指令。再然后取下一個指令、解了碼、執(zhí)行,以此類推直到程序退出。
在計算機(jī)體系結(jié)構(gòu)中,CPU 是對計算機(jī)的所有硬件資源(如存儲器、輸入輸出單元) 進(jìn)行控制調(diào)配、執(zhí)行通用運(yùn)算的核心硬件單元。CPU 是計算機(jī)的運(yùn)算和控制核心。計算機(jī)系統(tǒng)中所有軟件層的操作,終都將通過指令集映射為CPU的操作。
由于CPU訪問內(nèi)存以得到指令或數(shù)據(jù)的時間要比執(zhí)行指令花費(fèi)的時間長很多,因此在CPU內(nèi)部提供了一些用來保存關(guān)鍵變量、臨時數(shù)據(jù)等信息的通用寄存器。所以,CPU需要提供 一些特定的指令,使得可以從內(nèi)存中讀取數(shù)據(jù)存入寄存器以及可以將寄存器數(shù)據(jù)存入內(nèi)存。
因為CPU有大量的緩存和復(fù)雜的邏輯控制單元,因此它非常擅長邏輯控制、串行的運(yùn)算。相比較而言,GPU因為有大量的算術(shù)運(yùn)算單元,因此可以同時執(zhí)行大量的計算工作,它所擅長的是大規(guī)模的并發(fā)計算, 計算量大但是沒有什么技術(shù)含量,而且要重復(fù)很多次。這樣一說,我們利用GPU來提高程序運(yùn)算速度的方法就顯而易見了。使用CPU來做復(fù)雜的邏輯控制,用GPU來做簡單但是量大的算術(shù)運(yùn)算,就能夠大大地提高程序的運(yùn)行速度。
CPU有強(qiáng)大的算術(shù)運(yùn)算單 元,可以在很少的時鐘周期內(nèi)完成算術(shù)計算。同時,有很大的緩存可以保存很多數(shù)據(jù)在里面。此外,還有復(fù)雜的邏輯控制單元,當(dāng)程序有多個分支的時候, 通過提供分支預(yù)測的能力來降低延了時。GPU是基于大的吞吐量設(shè)計,有很多的算術(shù)運(yùn)算單元和很少的緩存。同時GPU支持大量的線程同時運(yùn)行,如果他們需要訪問同一個數(shù)據(jù),緩存會合并這些訪問,自然會帶來延了時的問題。盡管有延了時,但是因為其算術(shù)運(yùn)算單元的數(shù)量龐大,因此能夠達(dá)到一個非常大的吞吐量的效果。