• 沒有找到結果。

su-per function unit (SFU) 和一個double precision unit , 做為計算單精準度及雙精準度 浮點數的數學運算 ,此為所有流處理器共用 。 而每個流處理器都有自己的暫存器及本地

記憶體 (loacl memory) ,兩者差別在容量大小及存取的速度 ,暫存器容量小但速度快 ,

所以會優先使用 ,如果容量不夠才會用到本地記憶體 。

2.3.2 軟體執行方式

在早期當繪圖卡還是非常昂貴的年代,繪圖的計算大部分還是交由 CPU 完成 ,電 腦繪圖 API 可由 1997年提出的 OpenGL (open graphics library)[39]談起 。 OpenGL 為一跨平台語言 ,只要該型號的繪圖卡擁有其協定, 不論其硬體架構為何,即可以軟體 的方式提供硬體支援,達到繪圖效果 。 而另一套擁有繪圖功能的 API 為 Microsoft 提 出的 DirectX[40, 41] ,但只支援 Microsoft 作業系統 。

現今技術下,螢幕上圖形的呈現大部分以繪圖卡實現,而螢幕顯示的圖形將由設計 者以軟體的方式定義, 再交由繪圖卡將此圖形設計轉換為像素呈現至螢幕上,而繪圖的 步驟以OpenGL 的 rendering pipeline 為例說明:

1. 頂點處理(vertex processing) :解讀設計者的圖形定義並產生頂點以表示物體表面 並給予三維座標 。 再以vertex shader 函式完成將物體的三維座標轉換至螢幕的二 維座標 。

2. 幾何處理(primitive assembly) : 將頂點與頂點之間以點 、 線及面來呈現 ,並以 ge-ometry shader函式組合成 3D 幾何圖形 。

3. 光柵化(rasterization) :由於2D 螢幕無法顯示真實3D 物件,因此以圖形學中二 維平面描述三維座標的方式,3D 幾何圖形轉換成 2D 螢幕可顯示的圖形 。

4. 影像區塊處理(fragment processing) :將光柵化後的 2D影像以fragment shader 函式處理,將之切割成各個圖像區塊後再填上顏色 、 亮度等參數 。

近年來,隨著繪圖卡的普及與技術提升, 繪圖卡內的處理器個數已經超越 CPU ,因 此使用繪圖卡當作資料計算的想法開始萌芽 。 然而 ,使用OpenGL 或者DirectX ,即使 只為了數值相加,該API 還是會計算與繪圖有關的函式如紋理計算 、 頂點著色與像素著 色等 。因此,為了讓繪圖卡只執行一般計算,提出了OpenCL (open computing language)[42,

43]。 OpenCL可在異質性裝置進行平行化運算,如 CPU對圖形處理器 ,並且可在擁有

OpenCL 協定的所有種類與型號的圖形處理器上執行 ,提供兩種平行化模式– task

par-allelism和data parallelism , 但目前的圖形處理器主要以data parallelism 為主 。 假設 只為了數值相加,則不需要上敘所有和影像呈現有關的步驟, 只需要 :

1. 載入:將待運算資料由主記憶體放入 GPU 的記憶體上 。

2. 調動運算核心:驅動GPU 上的運算核心 ,並給予每個運算核心的工作內容,以大 量的運算核心數量執行平行計算 。

3. 回傳:將運算結果傳回主記憶體 。

2.4 CUDA

為了讓圖形處理器可以處理非圖形數據, NVIDIA2007年提出一套程式架構語 言 CUDA[44, 45] ,優點為由於 CUDA 語言與 C/C++ 相容, 對程式開發者而言相對 好學習, 因此以CUDA為主的相關應用及研究便開始出現[46, 47] ,但缺點為CUDA

能於NVIDIA 發行的圖形處理器上執行 ,以下介紹 CUDA 架構與其執行模式 。

Grid

相關文件