- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CUDAIntroduction
Compute Unified Device Architecture統一計算架構介紹 CUDA 簡介 CUDA(Compute Unified Device Architecture,統一計算架構)是由NVIDIA所推出的一種整合技術,是該公司對於GPGPU的正式名稱。透過這個技術,用家可利用NVIDIA的GeForce 8以後的GPU和較新的Quadro GPU進行計算。亦是首次可以利用GPU作為C-編譯器的開發環境。NVIDIA行銷的時候,往往將編譯器與架構混合推廣,造成混亂。實際上,CUDA架構可以相容OpenCL或者自家的C-編譯器(NVCC)。無論是CUDA C-語言或是OpenCL,指令最終都會被驅動程式轉換成PTX代碼,交由顯示核心計算。 概要 以GeForce 8800 GTX為例,其核心擁有128個內處理器。利用CUDA技術,就可以將那些內處理器串通起來,成為執行緒處理器去解決資料密集的計算。而各個內處理器能夠交換、同步和共享資料。利用NVIDIA的C-編譯器,通過驅動程式,就能利用這些功能。亦能成為流處理器,讓應用程式利用進行運算。 GeForce 8800 GTX顯示卡的運算能力可達到520GFlops,如果建設SLI系統,就可以達到1TFlops。 但程式設計師在利用CUDA技術時,須分開三種不同的記憶體,要面對繁複的執行緒層次,編譯器亦無法自動完成多數任務,以上問題就提高了開發難度。而將來的G100會採用第二代的CUDA技術,提高效率,降低開發難度。 CUDA 可應用的範圍 視訊編碼加速 目前,已有軟體廠商利用CUDA技術,研發了一個Adobe Premiere Pro的外掛程式。通過外掛程式,使用者就可以利用顯示核心去加速H.264/MPEG-4 AVC的編碼速度。速度是單純利用CPU作軟體加速的7倍左右。 利用CUDA技術,配合適當的軟體(例如MediaCoder),就可以利用顯示核心進行高畫質視訊編碼加速。視訊解碼方面,同樣可以利用CUDA技術實現。此前,NVIDIA的顯示核心本身已整合PureVideo單元。可是,實現相關加速功能的一個微軟API-DXVA,偶爾會有加速失效問題。所以利用CoreAVC配合CUDA,變相在顯示核心上實現軟體解碼,解決相容性問題。另外,配合適當的引擎,顯示核心就可以計算光線跟蹤。NVIDIA就放出了自家的Optix即時光線跟蹤引擎,透過CUDA技術利用GPU計算光線跟蹤。 物理加速 在NVIDIA收購AGEIA後,NVIDIA取得相關的物理加速技術,即是PhysX物理引擎。配合CUDA技術,顯示卡可以模擬成一顆PhysX物理加速晶片。目前,全系列的GeForce 8顯示核心都支援CUDA。而NVIDIA亦不會再推出任何的物理加速卡,顯示卡將會取代相關產品。 為了將CUDA推向民用,NVIDIA會舉行一系列的編程比賽,要求參賽者開發程式,充分利用CUDA的計算潛能。但是,要將GPGPU普及化,還要看微軟能否在Windows作業系統中,提供相關的編程介面。(註: 在2008年8月,NVIDIA推出了CUDA 2.0。) 為何使用 GPU? GPU 與 CPU 的差別 這兩者的主要差異在於”浮點運算的能力” ,GPU的特長在於:密集運算、高度平行運算(特別是適用於圖形的渲染);這麼多的晶體管線設計,為的就是強化資料的處裡,這跟CPU著重於資料的快取以及流程控制是不同的,示意圖說明如下: 程式處理流程 通用的平行運算架構 nVIDIA在2006年11月提出了CUDA?的架構,這是一個通用的平行運算架構,擁有一個全新的平行運算編程模型以及指令集架構,它使得nVIDIA GPU能夠比CPU更有效率的去解決許多複雜的問題。 CUDA提供開發者基於像是C這樣一個高階語言的軟件環境來進行開發,也允許其他的高階語言,例如,CUDA Fortran、OpenCL和DirectCompute等等。示意圖如下: 可彈性的編程模型 可彈性編程它有三個核心關鍵: 階層化的線程群組 共享的記憶體 同步執行時所使用的壁壘 允許線程之間彼此合作來解決每一個子問題,同時也會自動調整解決問題的架構。事實上,每一個線程塊可以在任何有效的處理器核心被預定,所以一個可被編譯的CUDA程式可以在擁有任意核心數目的處理器上被執行(參考下頁圖示),所以程式只有在運算時才需要知道處理器的實際物理數量。 這個彈性的編程模型使CUDA的架構能跨越廣闊的市場,而這個架構也僅僅只是去調整處理器的數目和記憶體要如何分配切割。 可彈性編程模型示意圖 CUDA 對應的 PTX 程式碼、cubin 資訊 CUDA 的編譯過程 範例(一) 下列的範例是如何用 C++ 自GPU的image 陣列中取得紋理(texture)
文档评论(0)