免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
GPU及GPU通用計算編程模型簡介

以下內(nèi)容來自網(wǎng)絡(luò)總結(jié):

         NVIDIA公司在1999年發(fā)布GeForce256時首先提出GPU(圖形處理器)的概念,隨后大量復(fù)雜的應(yīng)用需求促使整個產(chǎn)業(yè)蓬勃發(fā)展至今。

    GPU英文全稱Graphic Processing Unit,中文翻譯為”圖形處理器”。GPU從誕生之日起就以超越摩爾定律的速度發(fā)展,運算能力不斷提升。業(yè)界很大研究者注意到GPU進行計算的潛力,于2003年SIGGRAPH大會上提出了GPGPU(General-purposecomputing on graphics units)的概念。GPU逐漸從由若干專用的固定功能單元(Fixed Function Unit)組成的專用并行處理器向以通用計算資源為主,固定功能單元為輔的架構(gòu)轉(zhuǎn)變。

    盡管GPU計算已經(jīng)開始嶄露頭角,但GPU并不能完全替代X86解決方案,很多操作系統(tǒng)、軟件以及部分代碼現(xiàn)在還不能運行在GPU上,所謂的GPU+CPU異構(gòu)超級計算機也并不是完全基于GPU進行計算。一般而言適合GPU運算的應(yīng)用有如下特征:運算密集、高度并行、控制簡單、分多個階段執(zhí)行,符合這些條件或者是可以改寫成類似特征的應(yīng)用程序,就能夠在GPU上獲取較高的性能。

    GPU是顯示卡的“心臟、大腦”,也就相當(dāng)于CPU在電腦中的作用,它決定了該顯卡的檔次和大部分性能,同時也是2D顯示卡和3D顯示卡的區(qū)別依據(jù)。2D顯示芯片在處理3D圖像和特效時主要依賴CPU的處理能力,稱為“軟加速”。3D顯示芯片是將三維圖像和特效處理功能集中在顯示芯片內(nèi),也即所謂的“硬件加速”功能。顯示芯片通常是顯示卡上最大的芯片(也是引腳最多的)?,F(xiàn)在市場上的顯卡大多采用NVIDIA(英偉達)和AMD兩家公司的圖形處理芯片。

GPU通用計算編程模型:

    GPU通用計算通常采用CPU+GPU異構(gòu)模式,由CPU負(fù)責(zé)執(zhí)行復(fù)雜邏輯處理和事務(wù)處理等不適合數(shù)據(jù)并行的計算,由GPU負(fù)責(zé)計算密集型的大規(guī)模數(shù)據(jù)并行計算。這種利用GPU強大處理能力和高帶寬彌補CPU性能不足的計算方式以發(fā)揮計算機潛在性能,在成本和性價比方面有顯著地優(yōu)勢。在2007年NIVDIA推出CUDA(Compute Unified DeviceArchitecture,統(tǒng)一計算設(shè)備架構(gòu))之前,GPU通用計算受硬件可編程性和開發(fā)方式的制約,開發(fā)難度較大。2007年以后,CUDA不斷發(fā)展的同時,其他的GPU通用計算標(biāo)準(zhǔn)也被相繼提出,如由Apple提出Khronos Group最終發(fā)布的OpenCL,AMD推出的Stream SDK,Microsoft則在其最新的Windows7系統(tǒng)中集成了DirectCompute以支持利用GPU進行通用計算。

    CUDA是一種將GPU作為數(shù)據(jù)并行計算設(shè)備的軟硬件體系,硬件上NVIDIA GeForce8系列以后的GPU(包括GeForce、ION、Quadro、Tesla系列)已經(jīng)采用支持CUDA的架構(gòu),軟件開發(fā)包上CUDA也已經(jīng)發(fā)展到CUDA Toolkit3.2(截止到2010年11月),并且支持Widows、Linux、MacOS三種主流操作系統(tǒng)。CUDA采用比較容易掌握的類C語言進行開發(fā),而且正在開發(fā)適用于CUDA架構(gòu)的用于科學(xué)計算的Fortran版本。無論是CUDA C-語言或是OpenCL,指令最終都會被驅(qū)動程序轉(zhuǎn)換成PTX(Parallel ThreadExecution,并行線程執(zhí)行,CUDA架構(gòu)中的指令集,類似于匯編語言)代碼,交由顯示核心計算。

CUDA編程模型將CPU作為主機(Host),GPU作為協(xié)處理器(co-processor)或者設(shè)備(Device)。在一個系統(tǒng)中可以存在一個主機和若干個設(shè)備。CPU、GPU各自擁有相互獨立的存儲地址空間:主機端內(nèi)存和設(shè)備端顯存。CUDA對內(nèi)存的操作與一般的C程序基本相同,但是增加了一種新的pinned memory;操作顯存則需要調(diào)用CUDA API存儲器管理函數(shù)。一旦確定了程序中的并行部分,就可以考慮把這部分計算工作交給GPU。運行在GPU上的CUDA并行計算函數(shù)稱為kernel(內(nèi)核函數(shù))。一個完整的CUDA程序是由一系列的設(shè)備端kernel函數(shù)并行步驟和主機端的串行處理步驟共同組成的。這些處理步驟會按照程序中相應(yīng)語句的順序依次執(zhí)行,滿足順序一致性。

CUDA SDK提供的API分為CUDA runtime API(運行時API)和CUDA driver API(驅(qū)動程序API)。CUDA runtime API在CUDA driver API的基礎(chǔ)上進行了封裝,隱藏了一些實現(xiàn)細(xì)節(jié),編程更加方便。CUDA runtime API函數(shù)前都有CUDA前綴。CUDA driver API是一種基于句柄的底層接口,可以加載二進制或匯編形式的kernel模塊,指定參數(shù)并啟動運算。CUDA driver API編程復(fù)雜,但有時能通過直接操作硬件的執(zhí)行實現(xiàn)一些更加復(fù)雜的功能或者獲得更高的性能。由于它使用的設(shè)備端代碼是二進制或者匯編代碼,因此可以在各種語言中調(diào)用。CUDA driver API所有函數(shù)的前綴為cu。另外CUDA SDK也提供了CUFFT(CUDA Fast Fourier Transform,基于CUDA的快速傅立葉變換)、CUBLAS(CUDA Basic Linear Algebra Subprograms,基于CUDA的基本矩陣與向量運算庫)和CUDPP(CUDA Data Parallel Primitives,基于CUDA的常用并行操作函數(shù))等函數(shù)庫,提供了簡單高效的常用函數(shù)供開發(fā)者直接使用。

從CUDA Toolkit3.0開始支持NVIDIA最新的Fermi架構(gòu),最大程度上利用Fermi架構(gòu)在通用計算方面的優(yōu)勢。CUDA 3.0也開始支持C++的繼承和模板機制提高編程靈活性,同時CUDA C/C++內(nèi)核現(xiàn)在以標(biāo)準(zhǔn)ELF格式進行編譯,開始支持硬件調(diào)試,還增加了一個新的Direct3D、OpenGL統(tǒng)一協(xié)作API,支持OpenGL紋理和Direct3D 11標(biāo)準(zhǔn),支持所有的OpenCL特征。

NVIDIA宣布最新版并行計算開發(fā)工具CUDA 6,相比此前的CUDA5.5有著革命性的巨大進步。CUDA 6的關(guān)鍵特性包括:同一尋址,可直接訪問CPU內(nèi)存、GPU顯存,無需在彼此之間手動拷貝數(shù)據(jù),可在大量編程語言中更簡單地添加GPU加速支持。

OpenCL(Open Computing Language,開放計算語言)是一個為異構(gòu)平臺編寫程序的框架,此異構(gòu)平臺可由CPU、GPU或其他類型的處理器組成。OpenCL由用于編寫kernels(在OpenCL設(shè)備上運行的函數(shù))的語言(基于C99)和一組用于定義并控制平臺的API組成。OpenCL提供了基于任務(wù)分區(qū)和數(shù)據(jù)分區(qū)的并行計算機制。

OpenCL最初由Apple公司開發(fā),Apple擁有其商標(biāo)權(quán),并在與AMD,IBM,Intel和NVIDIA技術(shù)團隊的合作之下初步完善。隨后,Apple將這一草案提交至Khronos Group。2008年6月16日,Khronos的通用計算工作小組成立。5個月后的2008年11月18日,該工作組完成了OpenCL 1.0規(guī)范的技術(shù)細(xì)節(jié)。該技術(shù)規(guī)范在由Khronos成員進行審查之后,于2008年12月8日公開發(fā)表。2010年6月14日,OpenCL1.1 發(fā)布。

OpenCL也是基于C的一個程式語言,分為Platform Layer、Runtime、Compiler三個部分:Platform Layer用來管理計算裝置,提供初始化裝置的界面,并用來建立compute contexts和work-queues。Runtime用來管理資源,并執(zhí)行程序的kernel。Compiler則是ISO C99的子集合,并加上了OpenCL特殊的語法。在OpenCL的執(zhí)行模型中,有所謂的Compute Kernel和Compute Program。Compute Kernel基本上類似于CUDA定義的kernel,是最基本的計算單元;而Compute Program則是Compute Kernel和內(nèi)建函數(shù)的集合,類似一個動態(tài)函數(shù)庫。很大程度上OpenCL與CUDA Driver API比較相像

自從2008年12月NVIDIA在SIGGRAPHAsia大會上在筆記本電腦上展示全球首款OpenCL GPU演示以來,AMD、NVIDIA、Apple、RapidMind、Gallium3D、ZiiLABS、IBM、Intel先后發(fā)布他們自己的OpenCL規(guī)范實現(xiàn)(當(dāng)一臺機器上存在不同廠家的支持OpenCL的設(shè)備時,這樣也給開發(fā)應(yīng)用程序帶來不統(tǒng)一的一些麻煩)。除了AMD和NVIDIA,其他廠商如S3、VIA等也紛紛發(fā)布他們支持OpenCL的硬件產(chǎn)品。

OpenCL是第一個面向異構(gòu)系統(tǒng)通用目的并行編程的開放式、免費標(biāo)準(zhǔn),也是一個統(tǒng)一的編程環(huán)境,便于軟件開發(fā)人員為高性能計算服務(wù)器、桌面計算系統(tǒng)、手持設(shè)備編寫高效輕便的代碼,而且廣泛適用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構(gòu)以及數(shù)字信號處理器(DSP)等其他并行處理器,在游戲、娛樂、科研、醫(yī)療等各種領(lǐng)域都有廣闊的發(fā)展前景,AMD-ATI、NVIDIA現(xiàn)在的產(chǎn)品都支持OPEN CL。

Directcompute是一種由Microsoft開發(fā)和推廣的用于GPU通用計算的應(yīng)用程序接口,集成在Microsoft DirectX內(nèi),允許Windows Vista或Windows 7平臺上運行的程序利用GPU進行通用計算。雖然DirectCompute最初在DirectX 11 API中得以實現(xiàn),但支持DX10的GPU可以利用此API的一個子集進行通用計算(DirectX 10內(nèi)集成Directcompute 4.0,DirectX 10.1內(nèi)集成Directcompute 4.1),支持DirectX11的GPU則可以使用完整的DirectCompute功能(DirectX 11內(nèi)集成Directcompute 5.0)。Directcompute和OpenCL都是開放標(biāo)準(zhǔn),得到NVIDIA CUDA架構(gòu)和ATI Stream技術(shù)的支持。

Windows 7增加了視頻即時拖放轉(zhuǎn)換功能,可以將電腦中的視頻直接轉(zhuǎn)換到移動媒體播放器上,如果電腦中的GPU支持Directcompute,那么這一轉(zhuǎn)換過程就將由GPU完成。其轉(zhuǎn)換速度將達到CPU的5-6倍。Internet Explorer 9加入了對Directcompute技術(shù)的支持,可以調(diào)用GPU對網(wǎng)頁中的大計算量元素做加速計算,另外Excel2010、Powerpoint2010均提供Directcompute技術(shù)支持。

AMD的流計算模型其實也包含了流處理器架構(gòu)和相應(yīng)的軟件包。AMD在2007年12月發(fā)布運行在Windows XP系統(tǒng)下的Steam SDK v1.0, 此SDK采用了Brook+作為開發(fā)語言,Brook+是AMD對斯坦福大學(xué)開發(fā)的Brook語言(基于ANSI C)的改進版本。Stream SDK為開發(fā)者提供對系統(tǒng)和平臺開放的標(biāo)準(zhǔn)以方便合作者開發(fā)第三方工具。軟件包包含了如下組件:支持Brook+的編譯器,支持流處理器的設(shè)備驅(qū)動CAL(Compute Abstraction Layer),程序庫ACML(AMD CoreMath Library)以及內(nèi)核函數(shù)分析器。

在Stream編程模型中,在流處理器上執(zhí)行的程序稱為kernel(內(nèi)核函數(shù)),每個運行在SIMD引擎的流處理器上的kernel實例稱為thread(線程),線程映射到物理上的運行區(qū)域稱為執(zhí)行域。流處理器調(diào)度線程陣列到線程處理器上執(zhí)行,直到所有線程完成后才能運行下一個內(nèi)核函數(shù)。

Brook+是流計算的上層語言,抽象了硬件細(xì)節(jié),開發(fā)者編寫能夠運行在流處理器上的內(nèi)核函數(shù),只需指定輸入輸出和執(zhí)行域,無需知道流處理器硬件的實現(xiàn)。Brook+語言中兩個關(guān)鍵特性是:Stream和Kernel。Stream是能夠并行執(zhí)行的相同類型元素的集合;Kernel是能夠在執(zhí)行域上并行執(zhí)行的函數(shù)。Brook+軟件包包含brcc和brt。brcc是一個源語言對源語言的編譯器,能夠?qū)rook+程序翻譯成設(shè)備相關(guān)的IL(IntermediateLanguage),這些代碼被后續(xù)鏈接、執(zhí)行。brt是一個可以執(zhí)行內(nèi)核函數(shù)的運行時庫,這些庫函數(shù)有些運行在CPU上,有些運行在流處理器上。運行在流處理器上的核函數(shù)庫又稱為CAL(Compute Abstraction Layer)。CAL是一個用C編寫的設(shè)備驅(qū)動庫,允許開發(fā)者在保證前端一致性的同時對流處理器核心從底層進行優(yōu)化。CAL提供了設(shè)備管理、資源管理、內(nèi)核加載和執(zhí)行、多設(shè)備支持、與3D 圖形API交互等功能。同時,Stream SDK也提供了常用數(shù)學(xué)函數(shù)庫ACML(AMD Core Math Library)供開發(fā)者快速獲得高性能的計算。ACML包括基本完整的線性代數(shù)子例程、FFT運算例程、隨機數(shù)產(chǎn)生例程和超越函數(shù)例程。

面對NVIDIA在GPU通用計算上的不斷創(chuàng)新,AMD也不甘示弱,不斷改進自己的Stream SDK。截止到2010年11月,AMD發(fā)布了Stream SDK v2.2,能夠在WindowsXP SP3、Windows 7和部分Linux發(fā)行版上運行,開始支持OpenCL 1.1規(guī)范和雙精度浮點數(shù)操作。

 

參考文獻:

1、  http://baike.baidu.com/view/1196.htm

2、  http://www.cnblogs.com/chunshan/archive/2011/07/18/2110076.html

3、  http://blog.csdn.net/caiye917015406/article/details/9166115

4、  http://www.rosoo.net/a/201306/16652.html


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
CPU GPU異構(gòu)計算編程簡介
OpenCL與CUDA關(guān)系的深入解析
OpenCL和CUDA全解釋
GPU 編程:CUDA 和 Python 中的實際示例
CUDA之異構(gòu)計算與CUDA
CUDA Toolkit 3.0 Downloads | NVIDIA Developer...
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服