cuda是基于標(biāo)準(zhǔn)c語(yǔ)言的,你先把c語(yǔ)言的基礎(chǔ)學(xué)好,然后動(dòng)手自己寫一些c語(yǔ)言的程序,等對(duì)c語(yǔ)言有一定的功底之后,再看cuda,cuda與c語(yǔ)言的不同之處我覺(jué)得在于那個(gè)內(nèi)核函數(shù),以及如何劃分線程塊和柵格的緯度和大小,以及如何實(shí)現(xiàn)對(duì)于線程的索引的搜索,讓每一個(gè)線程處理對(duì)應(yīng)的一個(gè)變量或者幾個(gè)變量。
然后是cuda的一些基礎(chǔ)的語(yǔ)法,這些你可以看一些簡(jiǎn)單的cuda的例子,例如矩陣相加的例子,通過(guò)這些程序的例子可以很好的理解這些語(yǔ)法。最好自己動(dòng)手寫寫才會(huì)保證不出錯(cuò)誤,因?yàn)閷慶uda比寫c確實(shí)要麻煩很多。
希望可以對(duì)你有所幫助。祝你好運(yùn)。
CUDA CUDA(Compute Unified Device Architecture),顯卡廠商N(yùn)Vidia推出的運(yùn)算平臺(tái)。
CUDA是一種由NVIDIA推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問(wèn)題。 它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計(jì)算引擎。
開(kāi)發(fā)人員現(xiàn)在可以使用C語(yǔ)言來(lái)為CUDA架構(gòu)編寫程序,C語(yǔ)言是應(yīng)用最廣泛的一種高級(jí)編程語(yǔ)言。所編寫出的程序于是就可以在支持CUDA的處理器上以超高性能運(yùn)行。
將來(lái)還會(huì)支持其它語(yǔ)言,包括FORTRAN以及C++。 隨著顯卡的發(fā)展,GPU越來(lái)越強(qiáng)大,而且GPU為顯示圖像做了優(yōu)化。
在計(jì)算上已經(jīng)超越了通用的CPU。如此強(qiáng)大的芯片如果只是作為顯卡就太浪費(fèi)了,因此NVidia推出CUDA,讓顯卡可以用于圖像計(jì)算以外的目的。
目前只有G80、G92、G94和GT200平臺(tái)的NVidia顯卡才能使用CUDA,工具集的核心是一個(gè)C語(yǔ)言編譯器。G80中擁有128個(gè)單獨(dú)的ALU,因此非常適合并行計(jì)算,而且數(shù)值計(jì)算的速度遠(yuǎn)遠(yuǎn)優(yōu)于CPU。
CUDA的SDK中的編譯器和開(kāi)發(fā)平臺(tái)支持Windows、Linux系統(tǒng),可以與Visual Studio2005集成在一起。 Geforce8CUDA(Compute Unified Device Architecture)是一個(gè)新的基礎(chǔ)架構(gòu),這個(gè)架構(gòu)可以使用GPU來(lái)解決商業(yè)、工業(yè)以及科學(xué)方面的復(fù)雜計(jì)算問(wèn)題。
它是一個(gè)完整的GPGPU解決方案,提供了硬件的直接訪問(wèn)接口,而不必像傳統(tǒng)方式一樣必須依賴圖形API接口來(lái)實(shí)現(xiàn)GPU的訪問(wèn)。在架構(gòu)上采用了一種全新的計(jì)算體系結(jié)構(gòu)來(lái)使用GPU提供的硬件資源,從而給大規(guī)模的數(shù)據(jù)計(jì)算應(yīng)用提供了一種比CPU更加強(qiáng)大的計(jì)算能力。
CUDA采用C語(yǔ)言作為編程語(yǔ)言提供大量的高性能計(jì)算指令開(kāi)發(fā)能力,使開(kāi)發(fā)者能夠在GPU的強(qiáng)大計(jì)算能力的基礎(chǔ)上建立起一種效率更高的密集數(shù)據(jù)計(jì)算解決方案。 從CUDA體系結(jié)構(gòu)的組成來(lái)說(shuō),包含了三個(gè)部分:開(kāi)發(fā)庫(kù)、運(yùn)行期環(huán)境和驅(qū)動(dòng)(表2)。
開(kāi)發(fā)庫(kù)是基于CUDA技術(shù)所提供的應(yīng)用開(kāi)發(fā)庫(kù)。目前CUDA的1.1版提供了兩個(gè)標(biāo)準(zhǔn)的數(shù)學(xué)運(yùn)算庫(kù)——CUFFT(離散快速傅立葉變換)和CUBLAS(離散基本線性計(jì)算)的實(shí)現(xiàn)。
這兩個(gè)數(shù)學(xué)運(yùn)算庫(kù)所解決的是典型的大規(guī)模的并行計(jì)算問(wèn)題,也是在密集數(shù)據(jù)計(jì)算中非常常見(jiàn)的計(jì)算類型。開(kāi)發(fā)人員在開(kāi)發(fā)庫(kù)的基礎(chǔ)上可以快速、方便的建立起自己的計(jì)算應(yīng)用。
此外,開(kāi)發(fā)人員也可以在CUDA的技術(shù)基礎(chǔ)上實(shí)現(xiàn)出更多的開(kāi)發(fā)庫(kù)。 運(yùn)行期環(huán)境提供了應(yīng)用開(kāi)發(fā)接口和運(yùn)行期組件,包括基本數(shù)據(jù)類型的定義和各類計(jì)算、類型轉(zhuǎn)換、內(nèi)存管理、設(shè)備訪問(wèn)和執(zhí)行調(diào)度等函數(shù)。
基于CUDA開(kāi)發(fā)的程序代碼在實(shí)際執(zhí)行中分為兩種,一種是運(yùn)行在CPU上的宿主代碼(Host Code),一種是運(yùn)行在GPU上的設(shè)備代碼(Device Code)。不同類型的代碼由于其運(yùn)行的物理位置不同,能夠訪問(wèn)到的資源不同,因此對(duì)應(yīng)的運(yùn)行期組件也分為公共組件、宿主組件和設(shè)備組件三個(gè)部分,基本上囊括了所有在GPGPU開(kāi)發(fā)中所需要的功能和能夠使用到的資源接口,開(kāi)發(fā)人員可以通過(guò)運(yùn)行期環(huán)境的編程接口實(shí)現(xiàn)各種類型的計(jì)算。
由于目前存在著多種GPU版本的NVidia顯卡,不同版本的GPU之間都有不同的差異,因此驅(qū)動(dòng)部分基本上可以理解為是CUDA-enable的GPU的設(shè)備抽象層,提供硬件設(shè)備的抽象訪問(wèn)接口。CUDA提供運(yùn)行期環(huán)境也是通過(guò)這一層來(lái)實(shí)現(xiàn)各種功能的。
目前基于CUDA開(kāi)發(fā)的應(yīng)用必須有NVIDIA CUDA-enable的硬件支持,NVidia公司GPU運(yùn)算事業(yè)部總經(jīng)理Andy Keane在一次活動(dòng)中表示:一個(gè)充滿生命力的技術(shù)平臺(tái)應(yīng)該是開(kāi)放的,CUDA未來(lái)也會(huì)向這個(gè)方向發(fā)展。由于CUDA的體系結(jié)構(gòu)中有硬件抽象層的存在,因此今后也有可能發(fā)展成為一個(gè)通用的GPGPU標(biāo)準(zhǔn)接口,兼容不同廠商的GPU產(chǎn)品 CUDA 工具包是一種針對(duì)支持CUDA功能的GPU(圖形處理器)的C語(yǔ)言開(kāi)發(fā)環(huán)境。
CUDA開(kāi)發(fā)環(huán)境包括: · nvcc C語(yǔ)言編譯器 · 適用于GPU(圖形處理器)的CUDA FFT和BLAS庫(kù) · 分析器 · 適用于GPU(圖形處理器)的gdb調(diào)試器(在2008年3月推出alpha版) · CUDA運(yùn)行時(shí)(CUDA runtime)驅(qū)動(dòng)程序(目前在標(biāo)準(zhǔn)的NVIDIA GPU驅(qū)動(dòng)中也提供) · CUDA編程手冊(cè) CUDA開(kāi)發(fā)者軟件開(kāi)發(fā)包(SDK)提供了一些范例(附有源代碼),以幫助使用者開(kāi)始CUDA編程。這些范例包括: · 并行雙調(diào)排序 · 矩陣乘法 · 矩陣轉(zhuǎn)置 · 利用計(jì)時(shí)器進(jìn)行性能評(píng)價(jià) · 并行大數(shù)組的前綴和(掃描) · 圖像卷積 · 使用Haar小波的一維DWT · OpenGL和Direct3D圖形互操作示例 · CUDA BLAS和FFT庫(kù)的使用示例 · CPU-GPU C—和C++—代碼集成 · 二項(xiàng)式期權(quán)定價(jià)模型 · Black-Scholes期權(quán)定價(jià)模型 · Monte-Carlo期權(quán)定價(jià)模型 · 并行Mersenne Twister(隨機(jī)數(shù)生成) · 并行直方圖 · 圖像去噪 · Sobel邊緣檢測(cè)濾波器 · MathWorks MATLAB? 新的基于1.1版CUDA的SDK 范例現(xiàn)在也已經(jīng)發(fā)布了。
技術(shù)功能 ·在GPU(圖形處理器)上提供標(biāo)準(zhǔn)C編程語(yǔ)言 · 為在支持CUDA的NVIDIA GPU(圖形處理器)上進(jìn)行并行計(jì)算而提供了統(tǒng)一的軟硬件解決方案 · CUDA兼容的GPU(圖形處理器)包括很多:從低功耗的筆記本上用的GPU到高性能的,多GPU的系統(tǒng)。 · 支持CUDA的。
CPU相當(dāng)于大腦,我們可以將顯卡比喻為一名畫家,CPU(相當(dāng)于先大腦構(gòu)思)先需要告訴顯卡需要畫什么,這時(shí)顯卡就會(huì)按照CPU的要求畫出一張一張的圖片,一張一張的圖片我們可以稱之為幀數(shù),接著顯示器會(huì)將這些圖片進(jìn)行連貫高速播放,我們?cè)陲@示器中即可看到連貫的畫面。
性能好的顯卡(好的畫家)能夠畫出更多更好看的圖片,使得我們能夠通過(guò)顯示器看到的畫面就更加流暢,更加清晰。 顯卡架構(gòu):越新越好所謂的架構(gòu)就是顯卡使用的技術(shù),每一代的顯卡架構(gòu)越新,技術(shù)就越成熟,計(jì)算能力越強(qiáng),比方說(shuō),老式的汽車發(fā)動(dòng)機(jī)與新型的發(fā)動(dòng)機(jī),新型的發(fā)動(dòng)機(jī)可能會(huì)在老式的汽車發(fā)動(dòng)機(jī)的基礎(chǔ)上出現(xiàn)新的改進(jìn),讓它更加性能更優(yōu)越,并且更加省油。
顯卡流處理器:越多越好我們每次在顯卡參數(shù)看見(jiàn)CUDA核心,就是所謂的顯卡的流處理器,簡(jiǎn)稱SP,也可以稱之為渲染管,這也是顯卡重要的核心參數(shù)之一。流處理器的數(shù)量越多,那么顯卡的畫圖的能力就越強(qiáng),速度也越快,可以理解為一個(gè)老畫家在畫圖。
(如果比較顯卡之間的流處理器數(shù)量,必須同一代的顯卡進(jìn)行比較才有意義。 ) 核心頻率:越高越好如果核心頻率越高,那么顯卡的性能無(wú)疑也越強(qiáng),性能強(qiáng)了那么就會(huì)造成功耗越高,反之,核心頻率低,性能就會(huì)弱,發(fā)熱量自然越小。
獨(dú)立顯卡顯存帶寬:顯存位寬*顯存頻率=顯存帶寬顯卡的顯存位寬可以比喻為馬路,馬路造的越寬,那么能夠通過(guò)的汽車就會(huì)越多,而顯存頻率可以比喻為汽車的速度,顯存頻率越快,數(shù)據(jù)傳輸速度就越快。 因此顯卡的位寬和頻率的性能影響較大。
顯存容量:顯存是顯卡臨時(shí)存儲(chǔ)的功能,顯存的重要性不及架構(gòu)、流處理器、核心頻率、顯存帶寬,但是對(duì)于小白來(lái)說(shuō),基本都是以顯卡的顯存大小,來(lái)判斷顯卡的好壞,這是一個(gè)錯(cuò)誤的觀念,導(dǎo)致了一些奸商會(huì)使用顯存的賣點(diǎn)來(lái)忽悠小白。 比方說(shuō),GTX1060 3G顯存顯卡,雖然只有3GB顯存,但是性能無(wú)疑比GTX1050Ti 4G顯存顯卡強(qiáng)。
大顯存也絕對(duì)有用,但是重要性不大,有一些大型游戲比較吃顯存,如果顯存不夠,性能再?gòu)?qiáng),也會(huì)爆顯存。顯卡的顯存可以比喻為是一個(gè)停車場(chǎng),若是停車場(chǎng)的馬路不夠?qū)挘ㄎ粚挘敲雌嚨乃俣纫膊粔蚩欤@存頻率),那么停車場(chǎng)的吞吐量就會(huì)很小,即使超大停車場(chǎng)(大顯存)純屬浪費(fèi)資源。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥(niǎo). 頁(yè)面生成時(shí)間:4.420秒