cuda簡介- www - Home
文章推薦指數: 80 %
CUDA 是NVIDIA 的GPGPU 模型,它使用C 語言為基礎,可以直接以大多數人熟悉的C 語言,寫出在顯示晶片上執行的程式,而不需要去學習特定的顯示晶片的指令或是特殊的結構。
cuda簡介
CUDA簡介 現代的顯示晶片已經具有高度的可程式化能力,由於顯示晶片通常具有相當高的記憶體頻寬,以及大量的執行單元,因此開始有利用顯示晶片來幫助進行一些計算工作的想法,即GPGPU。
CUDA即是NVIDIA的GPGPU模型。
NVIDIA的新一代顯示晶片,包括GeForce8系列及更新的顯示晶片都支援CUDA。
NVIDIA免費提供CUDA的開發工具(包括Windows版本和Linux版本)、程式範例、文件等等,可以在CUDAZone下載。
GPGPU的優缺點使用顯示晶片來進行運算工作,和使用CPU相比,主要有幾個好處:顯示晶片通常具有更大的記憶體頻寬。
例如,NVIDIA的GeForce8800GTX具有超過50GB/s的記憶體頻寬,而目前高階CPU的記憶體頻寬則在10GB/s左右。
顯示晶片具有更大量的執行單元。
例如GeForce8800GTX具有128個"streamprocessors",時脈為1.35GHz。
CPU時脈通常較高,但是執行單元的數目則要少得多。
和高階CPU相比,顯示卡的價格較為低廉。
例如目前一張GeForce8800GT包括512MB記憶體的價格,和一顆2.4GHz四核心CPU的價格相若。
當然,使用顯示晶片也有它的一些缺點:顯示晶片的運算單元數量很多,因此對於不能高度平行化的工作,所能帶來的幫助就不大。
顯示晶片目前通常只支援32bits浮點數,且多半不能完全支援IEEE754規格,有些運算的精確度可能較低。
目前許多顯示晶片並沒有分開的整數運算單元,因此整數運算的效率較差。
顯示晶片通常不具有分支預測等複雜的流程控制單元,因此對於具有高度分支的程式,效率會比較差。
目前GPGPU的程式模型仍不成熟,也還沒有公認的標準。
例如NVIDIA和AMD/ATI就有各自不同的程式模型。
整體來說,顯示晶片的性質類似streamprocessor,適合一次進行大量相同的工作。
CPU則比較有彈性,能同時進行變化較多的工作。
CUDA架構CUDA是NVIDIA的GPGPU模型,它使用C語言為基礎,可以直接以大多數人熟悉的C語言,寫出在顯示晶片上執行的程式,而不需要去學習特定的顯示晶片的指令或是特殊的結構。
在CUDA的架構下,一個程式分為兩個部份:host端和device端。
Host端是指在CPU上執行的部份,而device端則是在顯示晶片上執行的部份。
Device端的程式又稱為"kernel"。
通常host端程式會將資料準備好後,複製到顯示卡的記憶體中,再由顯示晶片執行device端程式,完成後再由host端程式將結果從顯示卡的記憶體中取回。
由於CPU存取顯示記憶體時只能透過PCIExpress介面,因此速度較慢(PCIExpressx16的理論頻寬是雙向各4GB/s),因此不能太常進行這類動作,以免降低效率。
在CUDA架構下,顯示晶片執行時的最小單位是thread。
數個thread可以組成一個block。
一個block中的thread能存取同一塊共用的記憶體,而且可以快速進行同步的動作。
每一個block所能包含的thread數目是有限的。
不過,執行相同程式的block,可以組成grid。
不同block中的thread無法存取同一個共用的記憶體,因此無法直接互通或進行同步。
因此,不同block中的thread能合作的程度是比較低的。
不過,利用這個模式,可以讓程式不用擔心顯示晶片實際上能同時執行的thread數目限制。
例如,一個具有很少量執行單元的顯示晶片,可能會把各個block中的thread循序執行,而非同時執行。
不同的grid則可以執行不同的程式(即kernel)。
Grid、block和thread的關係,如下圖所示:每個thread都有自己的一份register和localmemory的空間。
同一個block中的每個thread則有共用的一份sharememory。
此外,所有的thread(包括不同block的thread)都共用一份globalmemory、constantmemory、和texturememory。
不同的grid則有各自的globalmemory、constantmemory和texturememory。
這些不同的記憶體的差別,會在之後討論。
執行模式由於顯示晶片大量平行計算的特性,它處理一些問題的方式,和一般CPU是不同的。
主要的特點包括:記憶體存取latency的問題:CPU通常使用cache來減少存取主記憶體的次數,以避免記憶體latency影響到執行效率。
顯示晶片則多半沒有cache(或很小),而利用平行化執行的方式來隱藏記憶體的latency(即,當第一個thread需要等待記憶體讀取結果時,則開始執行第二個thread,依此類推)。
分支指令的問題:CPU通常利用分支預測等方式來減少分支指令造成的pipelinebubble。
顯示晶片則多半使用類似處理記憶體latency的方式。
不過,通常顯示晶片處理分支的效率會比較差。
因此,最適合利用CUDA處理的問題,是可以大量平行化的問題,才能有效隱藏記憶體的latency,並有效利用顯示晶片上的大量執行單元。
使用CUDA時,同時有上千個thread在執行是很正常的。
因此,如果不能大量平行化的問題,使用CUDA就沒辦法達到最好的效率了。
Home CUDA簡介 安裝CUDA第一個CUDA程式改良第一個程式第二個CUDA程式GPU的硬體架構Copyright(c)2007Ping-CheChen
Signin|RecentSiteActivity|ReportAbuse|PrintPage|PoweredByGoogleSites
延伸文章資訊
- 1GPU高效能運算環境—CUDA與GPU Cluster介紹 - 計中首頁
CUDA (Compute Unified Device Architecture) 是NVIDIA提出,可在NVIDIA圖形處理器進行平行運算的計算環境。程式設計者可以利用CUDA的C語言 ...
- 2CUDA | 統一計算架構- GIGABYTE 技嘉科技
統一計算架構是什麼? CUDA為統一計算架構(Compute Unified Device Architecture)的縮寫,由NVIDIA 於2006 年推出,並指出: · 你為什麼需要它? ...
- 3【平行運算】CUDA教學(一) 概念介紹 - 都會阿嬤
CUDA (Compute Unified Device Architecture,統一計算架構) 是NVIDIA 研發的平行運算平台及編程模型,可利用繪圖處理單元(GPU) 的能力大幅提升運算效能。
- 4什麼是CUDA? - NVIDIA 台灣官方部落格
它遠不止如此。CUDA 是一種平行編程的模型和架構,讓使用GPU 進行一般計算變得簡單而優雅。開發人員仍舊使用熟悉的C、 ...
- 5硬體加速搞不懂?CUDA讓一切變得更簡單 - 電腦DIY
說到平行運算效能不得順便提一下目前全球排名第一、三、四名的超級電腦都使用NVIDIA的GPU,相信很多人一定覺得這很奇妙,為什麼超級電腦不是使用CPU來運算而是GPU?其實 ...