使用GPUs的好處
在相同的價格和功耗范圍內(nèi),圖形處理器 GPU 比 CPU 提供了更高的指令吞吐量和內(nèi)存帶寬, 許多應(yīng)用程序利用這些更高的功能在 GPU 上比在 CPU 上運行得更快。相比較其他計算設(shè)備,如 FPGA,也是非常節(jié)能的,但其提供了比 GPU 少得多的編程靈活性。
GPU 和 CPU 之間的這種性能差異之所以存在,是因為它們在設(shè)計時考慮到了不同的目標(biāo)。CPU 被設(shè)計成能夠盡可能快地執(zhí)行一系列操作(稱為線程) ,并且能夠并行地執(zhí)行幾十個這樣的線程。GPU 被設(shè)計成能夠并行執(zhí)行數(shù)以千計的線程(緩沖較慢的單線程性能以獲得更大的吞吐量)。
作為一個并行數(shù)據(jù)計算設(shè)備的圖形處理器單元僅僅幾年的時間,可編程的圖形處理器單元演變成為了一匹絕對的計算悍馬,正如圖所示。
當(dāng)極高的內(nèi)存帶寬驅(qū)動多核處理器時,GPU 為圖型和非圖型處理提供了難以置信的計算資源
這個演變背后的主要原因是由于GPU 被設(shè)計用于高密度和并行計算,更確切地說是用于圖形渲染
因此更多的晶體管被投入到數(shù)據(jù)處理而不是數(shù)據(jù)緩存和流量控制
示圖顯示了 CPU 芯片資源與 GPU 芯片資源的示例分布
將更多的晶體管用于數(shù)據(jù)處理,例如浮點運算,有利于高度并行的計算;GPU 可以通過計算隱藏存儲器訪問延遲,而不需要依賴大型數(shù)據(jù)緩存和復(fù)雜的流控制來避免長的存儲器訪問延遲,因為這兩者在晶體管方面都很昂貴。
一般來說,應(yīng)用程序具有并行部分和順序部分的混合,因此系統(tǒng)設(shè)計采用 GPU 和 CPU 的混合,以最大限度地提高整體性能。具有高度并行性的應(yīng)用程序可以利用圖形處理器的這種大規(guī)模并行處理機(jī)特性來獲得比 CPU 更高的性能。
更加具體地看,GPU 是特別適合于并行數(shù)據(jù)運算的問題-同一個程序在許多并行數(shù)據(jù)元素,并帶有高運算密度(算術(shù)運算與內(nèi)存操作的比例)。由于同一個程序要執(zhí)行每個數(shù)據(jù)元素,降低了對復(fù)雜的流量控制要求; 并且,因為它執(zhí)行許多數(shù)據(jù)元素并且據(jù)有高運算密度,內(nèi)存訪問的延遲可以被忽略
并行數(shù)據(jù)處理,意味著數(shù)據(jù)元素以并行線程處理。處理大量數(shù)據(jù)集,例如數(shù)組的應(yīng)用程序可以使用一個并行數(shù)據(jù)的編程模型來加速計算。
在3D 渲染上,大的像素集和頂點被映射到并行線程。同樣,圖像和媒體處理的應(yīng)用程序例如圖像處理,錄像編碼和解碼,圖像縮放比例,立體視覺,以及圖像識別也可以映射圖像塊和像素到并行處理線程。
實際上,在圖像領(lǐng)域外,許多算法同樣可以通過并行數(shù)據(jù)處理得到加速、物理模擬到金融計算或者生物計算均可。
然而直到今天,盡管強(qiáng)大的計算能力包裝進(jìn)了GPU,而它對非圖形應(yīng)用的有效支持依然有限
- GPU 只能通過圖型API 來編程,導(dǎo)致新手很難學(xué)習(xí)和非圖形API 上很不充分的應(yīng)用
- GPU 程序可以從DRAM 收集數(shù)據(jù)元素。但GPU 程序不能寫入信息到DRAM 的任何部分,相比CPU 喪失了很多編程的靈活性
- 有些應(yīng)用是由于DRAM 內(nèi)存帶寬而形成的瓶頸,未能充分利用GPU 的計算能力
CUDA: 一個通用的并行計算平臺和編程模型
2006年11月,NVIDIA 推出了 CUDA,這是一個通用的并行計算平臺和編程模型,利用 NVIDIA 圖形處理器中的并行計算引擎
比 CPU 更有效的方式解決許多復(fù)雜的計算問題。
CUDA: 一個在GPU 上計算的新架構(gòu)CUDA(Compute Unified Device Architecture) 統(tǒng)一計算設(shè)備架構(gòu),在GPU 上發(fā)布的一個新的硬件和軟件架構(gòu),它不需要映射到一個圖型API 便可在GPU 上管理和進(jìn)行并行數(shù)據(jù)計算。從G80 系列和以后的型號都可以支持。操作系統(tǒng)的多任務(wù)機(jī)制通過幾個CUDA 和圖型應(yīng)用程序協(xié)調(diào)運行來管理訪問GPU。
CUDA 軟件堆棧由幾層組成,如圖所示:一個硬件驅(qū)動程序,一個應(yīng)用程序編程接口(API)和它的Runtime, 還有二個高級的通用數(shù)學(xué)庫,CUFFT 和CUBLAS。硬件被設(shè)計成支持輕量級的驅(qū)動和Runtime 層面,因而提高性能。
CUDA API 更像是C 語言的擴(kuò)展,以便最小化學(xué)習(xí)的時間
CUDA 提供一般DRAM 內(nèi)存尋址方式:“發(fā)散” 和“聚集”內(nèi)存操作
從而提供最大的編程靈活性。從編程的觀點來看,它可以在DRAM的任何區(qū)域進(jìn)行讀寫數(shù)據(jù)的操作,就像在CPU 上一樣
CUDA 允許并行數(shù)據(jù)緩沖或者在On-chip 內(nèi)存共享,可以進(jìn)行快速的常規(guī)讀寫存取,在線程之間共享數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-610772.html
應(yīng)用程序可以最小化數(shù)據(jù)到DRAM 的overfetch 和round-trips ,從而減少對DRAM 內(nèi)存帶寬的依賴文章來源地址http://www.zghlxwxcb.cn/news/detail-610772.html
到了這里,關(guān)于《CUDA C++ Programming Guide》第一章 CUDA介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!