三個英文單詞首字母的簡稱。具備表明性的有Message Passing Interface ,Multi Point Interface ,Multi points injection等。 html
對MPI的定義是多種多樣的,但不外乎下面三個方面,它們限定了MPI的內涵和外延: 一、MPI是一個庫,而不是一門語言。許多人認爲,MPI就是一種並行語言,這是不許確的。可是,按照並行語言的分類,能夠把FORTRAN+MPI或C+MPI看做是一種在原來串行語言基礎之上擴展後獲得的,並行語言MPI庫能夠被FORTRAN77/C/Fortran90/C++調用,從語法上說,它遵照全部對庫函數/過程的調用規則,和通常的函數/過程沒有什麼區別; 二、MPI是一種標準或規範的表明,而不特指某一個對它的具體實現,迄今爲止,全部的並行計算機制造商都提供對MPI的支持,能夠在網上免費獲得MPI在不一樣並行計算機上的實現,一個正確的MPI程序能夠不加修改地在全部的並行機上運行; 三、MPI是一種消息傳遞編程模型,併成爲這種編程模型的表明。事實上,標準MPI雖然很龐大,可是它的最終目的是服務於進程間通訊這一目標的; 解釋來源於《高性能計算之並行編程技術——
MPI並行程序設計》都志輝 編著 linux
四、MPI是多點接口(Multi Point Interface)的簡稱,是西門子公司開發的用於PLC之間通信的保密的協議。MPI通信是當通訊速率要求不高、通訊數據量不大時,能夠採用的一種簡單經濟的通信方式。MPI通訊可以使用PLC S7-200/300/400、操做面板TP/OP及上位機MPI/PROFIBUS通訊卡,如CP5512/CP5611/CP5613等進行數據交換。MPI網絡的通訊速率爲19.2Kbps~12Mbps,最多能夠鏈接32個節點,最大通信距離爲50m,可是可能經過中斷器來擴展長度。
解釋來源於《西門子工業網絡通訊指南》(上冊) 崔堅 主編 程序員
MPI(Message Passing Interface)是消息傳遞並行程序設計的標準之一,當前通用的是MPI1.1規範。正在制定的MPI2.0規範除支持消息傳遞外,還支持MPI的I/O規範和進程管理規範。MPI正成爲並行程序設計事實上的工業標準。
MPI的實現包括MPICH、LAM、IBM MPL等多個版本,最經常使用和穩定的是MPICH,曙光天潮系列的MPI以MPICH爲基礎進行了定製和優化。 算法
MPICH含三層結構,最上層是MPI的API,基本是點到點通訊,和在點到點通訊基礎上構造的集羣通訊(Collective Communication);中間層是ADI層(Abstract
Device Interface),其中device能夠簡單地理解爲某一種底層通訊庫,ADI就是對各類不一樣的底層通訊庫的不一樣接口的統一標準;底層是具體的底層通訊庫,例如工做站機羣上的p4通訊庫、曙光1000上的NX庫、曙光3000上的BCL通訊庫等。 數據庫
MPICH的1.0.12版本如下都採用第一代ADI接口的實現方法,利用底層device提供的通訊原語和有關服務函數實現全部的ADI接口,能夠直接實現,也能夠依靠必定的模板間接實現。自1.0.13版本開始,MPICH採用第二代ADI接口。 編程
咱們將MPICH移植到曙光3000高效通訊庫BCL(Basic Communication Library)上(簡稱MPI_BCL)。MPI_BCL的接口標準與MPICH版本1.1徹底一致,知足MPI1.1標準。同時,也支持ch_p4的通訊庫,即利用TCP/IP通訊機制。從網絡硬件角度說,MPI_BCL針對系統網絡,MPI_ch_p4針對高速以太網。 數組
做 者:張武生李建江 出版社: 清華大學出版社 出版時間:
2009 ISBN:
9787302186472 開本: 16 訂價:
39.50 元 緩存
《MPI並行程序設計實例教程》旨在經過示例全面介紹MP1並行程序開發庫的使用方法、程序設計技巧等方面的內容,力爭完整討論MP1規範所定義的各類特徵。主要也括MPI環境下開發並行程序經常使用的方法、模式、技巧等內容。在內容組織上力求全面綜合地反映MPl-1和MPI-2規範。對MPI所定義的各類功能、特徵分別給出可驗證和測試其工做細節的示例程序 安全
◆書中內容側重於以MPI庫爲基礎開發並行應用程序,對MP規範定義的各項功能和特徵在闡述其特色基礎上均配以實例加以說明和印證。 ◆書中所附實例儘可能採用獨立的功能劃分,其中的代碼片斷可直接用於並行應用程序開發 ◆在講述基本原理的同時,注重對各項消息傳遞和管理操做的功能及侷限性、適用性進行分析從而使熟讀此書的讀者可以編寫出適合應用特色,易維護、高效率的並行程序。 ◆與《MPI並行程序設計實例教程》配套的電子教案可在清華大學出版社網站下載。 服務器
第1章MPI並行環境及編程模型 1.1MPICH2環境及安裝和測試 1.1.1編譯及安裝 1.1.2配置及驗汪 1.1.3應用程序的編譯、連接 1.1.4運行及調試 1.1.5MPD中的安全問題 1.2MPI環境編程模型 1.2.1並行系統介紹 1.2.2並行編程模式 1.2.3MPI程序工做模式 1.3MPI消息傳遞通訊的基本概念 1.3.1消息 1.3.2緩衝區 1.3.3通訊子 1.3.4進樣號和l進程紕 1.3.5通價脅議 1.3.6隱形對象 第2章點到點通訊 2.1阻餈通訊 2.1.1標準通訊模式 2.1.2緩衝通訊模式 2.1.3就緒通訊模式 2.1.4同步通訊模式 2.1.5小結 2.2非阻塞通訊 2.2.1通訊結束測試 2.2.2非重複的非阻塞通訊 2.2.3可醺復的非阻塞通訊 2.2.4Probe和Cancel 2.3組合發送接收 2.3.1MPl_Send,MPI_RecvoMPl_Sendreev 2.3.2MPI_Bsend←→MPl_Sendrecv 2.3.3MPI_Rsend←→MPI_Sendrecv 2.3.4MPl_Ssend←→MPl_Sendrecv 2.3.5MPl_lsend←→MP1一Sendrecv 2.3.6MPl_Ibsend←→MPI_Sendrecv 2.3.7MPI_Irsend←→MPI_Sendrecv 2.3.8MPl_Issend,MPI_Irecv←→MPI_Sendrecv 2.3.9MPISend_init←→MPl_Sendrecv 2.3.10MPI一Bsendjinit←→MPl_Sendrecv 2.3.11MPI_Rsend_init←→MPI_Sendrecv 2.3.12MPl_Ssend_init,MPl_Recv_init←→MPl_Sendrecv 2.4點到點通訊總結 2.4.1關於預防死鎖 2.4.2關於阻塞與非阻塞、同步與異步 2.4.3關於操做的執行順序及「公平性」 第3章組與通訊子 3.1簡介 3.2組管理API 3.2.1組的構建及取消 3.2.2訪問組的相關信息和屬性 3.3組問通訊 3.3.1建立與取消 3.3.2訪問通訊子信息 3.4組間通訊 3.4.1訪問函數 3.4.2構造和取消函數 3.5屬性 3.5.1建立及釋放屬性操做 3.5.2訪問屬性操做 3.5.3設置及刪除屬性操做 3.5.4命名通訊子對象 3.6錯誤處理 3.7組及通訊子的小結 第4章集合通訊 4.11←→N 4.1.1MPI_Bcast 4.1.2MPI_Scatter/MPI_Scatterv 4.2N←→1 4.2.1MPl_Gather/MPI_Gatherv 4.2.2MPI_Reduce 4.3N←→N 4.3.1MPI_Allgather/MPI_Allgatherv. 4.3.2MPI_Allreduce 4.3.3MPl_Reducescatter 4.3.4MPI_Alltoall/MPIAlltoallv/MPI_Alltoallw 4.3.5MPI_Scan/MPI_Exscan 4.4同步操做--MPI_Barrier 第5章數據類型 5.1類型圖 5.2與數據類型相關的API函數 5.2.1建立 5.2.2訪問 5.2.3註冊與取消 5.3數據類型在通訊函數緩衝區的構成 5.4數據類型的屬性 5.4.1屬性建立與釋放 5.4.2屬性操做 5.4.3複製數據類型 5.4.4類型屬性舉例 5.4.5數據類型命名 5.5數據類型的析構 5.5.1獲取建立數據類型MPI函數所使用參數數量信息 5.5.2獲取建立數據類型MPI函數所使用實際參數信息 5.5.3示例 5.6打包/解包 第6章進程拓撲 第7章動態進程管理 第8章單向通訊/遠端內存訪問 第9章並行I/O 第10章MPI與外部環境的信息交互 第11章MPE 參考文獻
MPI並行程序設計
http://wenku.baidu.com/view/3d1a6df80242a8956bece43c.html
CUDA
CUDA(Compute Unified Device Architecture),顯卡廠商NVidia推出的運算平臺。 CUDA™是一種由NVIDIA推出的通用並行計算架構,該架構使GPU可以解決複雜的計算問題。它包含了CUDA指令集架構(ISA)以及GPU內部的並行計算引擎。開發人員如今能夠使用C語言來爲CUDA™架構編寫程序,C語言是應用最普遍的一種高級編程語言。所編寫出的程序因而就能夠在支持CUDA™的處理器上以超高性能運行。未來還會支持其它語言,包括FORTRAN以及C++。
簡介 計算行業正在從只使用CPU的「中央處理」向CPU與GPU並用的「協同處理」發展。爲打造這一全新的計算典範,NVIDIA®(英偉達™)發明了CUDA(Compute
Unified Device Architecturem,統一計算設備架構)這一編程模型,是想在應用程序中充分利用CPU和GPU各自的優勢。如今,該架構現已應用於GeForce®(精視™)、ION™(翼揚™)、Quadro以及Tesla GPU(圖形處理器)上,對應用程序開發人員來講,這是一個巨大的市場。
在消費級市場上,幾乎每一款重要的消費級視頻應用程序都已經使用CUDA加速或很快將會利用CUDA來加速,其中不乏Elemental Technologies公司、MotionDSP公司以及LoiLo公司的產品。
在科研界,CUDA一直受到熱捧。例如,CUDA現已可以對AMBER進行加速。AMBER是一款分子動力學模擬程序,全世界在學術界與製藥企業中有超過60,000名研究人員使用該程序來加速新葯的探索工做。
在金融市場,Numerix以及CompatibL針對一款全新的對手風險應用程序發佈了CUDA支持並取得了18倍速度提高。Numerix爲近400家金融機構所普遍使用。
CUDA的普遍應用造就了GPU計算專用Tesla GPU的崛起。全球財富五百強企業如今已經安裝了700多個GPU集羣,這些企業涉及各個領域,例如能源領域的斯倫貝謝與雪佛龍以及銀行業的法國巴黎銀行。
隨着微軟Windows
7與蘋果Snow Leopard操做系統的問世,GPU計算必將成爲主流。在這些全新的操做系統中,GPU將不只僅是圖形處理器,它還將成爲全部應用程序都可使用的通用並行處理器。
隨着顯卡的發展,GPU愈來愈強大,並且GPU爲顯示圖像作了優化。在計算上已經超越了通用的CPU。如此強大的芯片若是隻是做爲顯卡就太浪費了,所以NVidia推出CUDA,讓顯卡能夠用於圖像計算之外的目的。
目前只有G80、G9二、G9四、G9六、GT200、GF100平臺(即Geforce 8~Gecorce GTX480)的NVidia顯卡才能使用CUDA,工具集的核心是一個C語言編譯器。G80中擁有128個單獨的ALU,所以很是適合並行計算,並且數值計算的速度遠遠優於CPU。
CUDA的SDK中的編譯器和開發平臺支持Windows、Linux系統,能夠與Visual Studio2005集成在一塊兒。
Geforce8CUDA(Compute Unified Device Architecture)是一個新的基礎架構,這個架構能夠使用GPU來解決商業、工業以及科學方面的複雜計算問題。它是一個完整的GPGPU解決方案,提供了硬件的直接訪問接口,而沒必要像傳統方式同樣必須依賴圖形API接口來實現GPU的訪問。在架構上採用了一種全新的計算體系結構來使用GPU提供的硬件資源,從而給大規模的數據計算應用提供了一種比CPU更增強大的計算能力。CUDA採用C語言做爲編程語言提供大量的高性能計算指令開發能力,使開發者可以在GPU的強大計算能力的基礎上創建起一種效率更高的密集數據計算解決方案。
從CUDA體系結構的組成來講,包含了三個部分:開發庫、運行期環境和驅動(表2)。
開發庫是基於CUDA技術所提供的應用開發庫。目前CUDA的1.1版提供了兩個標準的數學運算庫——CUFFT(離散快速傅立葉變換)和CUBLAS(離散基本線性計算)的實現。這兩個數學運算庫所解決的是典型的大規模的並行計算問題,也是在密集數據計算中很是常見的計算類型。開發人員在開發庫的基礎上能夠快速、方便的創建起本身的計算應用。此外,開發人員也能夠在CUDA的技術基礎上實現出更多的開發庫。
運行期環境提供了應用開發接口和運行期組件,包括基本數據類型的定義和各種計算、類型轉換、內存管理、設備訪問和執行調度等函數。基於CUDA開發的程序代碼在實際執行中分爲兩種,一種是運行在CPU上的宿主代碼(Host
Code),一種是運行在GPU上的設備代碼(Device Code)。不一樣類型的代碼因爲其運行的物理位置不一樣,可以訪問到的資源不一樣,所以對應的運行期組件也分爲公共組件、宿主組件和設備組件三個部分,基本上囊括了全部在GPGPU開發中所須要的功能和可以使用到的資源接口,開發人員能夠經過運行期環境的編程接口實現各類類型的計算。
因爲目前存在着多種GPU版本的NVidia顯卡,不一樣版本的GPU之間都有不一樣的差別,所以驅動部分基本上能夠理解爲是CUDA-enable的GPU的設備抽象層,提供硬件設備的抽象訪問接口。CUDA提供運行期環境也是經過這一層來實現各類功能的。目前基於CUDA開發的應用必須有NVIDIA CUDA-enable的硬件支持,NVidia公司GPU運算事業部總經理Andy
Keane在一次活動中表示:一個充滿生命力的技術平臺應該是開放的,CUDA將來也會向這個方向發展。因爲CUDA的體系結構中有硬件抽象層的存在,所以從此也有可能發展成爲一個通用的GPGPU標準接口,兼容不一樣廠商的GPU產品
是一種針對支持CUDA功能的GPU(圖形處理器)的C語言開發環境。CUDA開發環境包括:
· 適用於GPU(圖形處理器)的CUDA FFT和BLAS庫
· 適用於GPU(圖形處理器)的gdb調試器(在2008年3月推出alpha版)
· CUDA運行時(CUDA runtime)驅動程序(目前在標準的NVIDIA GPU驅動中也提供)
CUDA開發者軟件開發包(SDK)提供了一些範例(附有源代碼),以幫助使用者開始CUDA編程。這些範例包括:
· 並行雙調排序
· 矩陣乘法
· 矩陣轉置
· 利用計時器進行性能評價
· 並行大數組的前綴和(掃描)
· 圖像卷積
· 使用Haar小波的一維DWT
· OpenGL和Direct3D圖形互操做示例
· CUDA BLAS和FFT庫的使用示例
· CPU-GPU C—和C++—代碼集成
· 二項式期權訂價模型
· Monte-Carlo期權訂價模型
· 並行Mersenne Twister(隨機數生成)
· 並行直方圖
· 圖像去噪
· Sobel邊緣檢測濾波器
· MathWorks MATLAB®
新的基於1.1版CUDA的SDK 範例如今也已經發布了。
· 在GPU(圖形處理器)上提供標準C編程語言
· 爲在支持CUDA的NVIDIA GPU(圖形處理器)上進行並行計算而提供了統一的軟硬件解決方案
· CUDA兼容的GPU(圖形處理器)包括不少:從低功耗的筆記本上用的GPU到高性能的,多GPU的系統。
· 支持CUDA的GPU(圖形處理器)支持並行數據緩存和線程執行管理器
· 標準FFT(快速傅立葉變換)和BLAS(基本線性代數子程序)數值程序庫
· 針對計算的專用CUDA驅動
· 通過優化的,從中央處理器(CPU)到支持CUDA的GPU(圖形處理器)的直接上傳、下載通道
· CUDA驅動可與OpenGL和DirectX圖形驅動程序實現互操做
· 支持Linux 32位/64位以及Windows XP 32位/64位 操做系統
· 爲了研究以及開發語言的目的,CUDA提供對驅動程序的直接訪問,以及彙編語言級的訪問
NVIDIA進軍高性能計算領域,推出了Tesla&CUDA高性能計算系列解決方案,CUDA技術,一種基於NVIDIA圖形處理器(GPU)上全新的並行計算體系架構,讓科學家、工程師和其餘專業技術人員可以解決之前沒法解決的問題,做爲一個專用高性能GPU計算解決方案,NVIDIA把超級計算可以帶給任何工做站或服務器,以及標準、基於CPU的服務器集羣
CUDA是用於GPU計算的開發環境,它是一個全新的軟硬件架構,能夠將GPU視爲一個並行數據計算的設備,對所進行的計算進行分配和管理。在CUDA的架構中,這些計算再也不像過去所謂的GPGPU架構那樣必須將計算映射到圖形API(OpenGL和Direct 3D)中,所以對於開發者來講,CUDA的開發門檻大大下降了。CUDA的GPU編程語言基於標準的C語言,所以任何有C語言基礎的用戶都很容易地開發CUDA的應用程序。
因爲GPU的特色是處理密集型數據和並行數據計算,所以CUDA很是適合須要大規模並行計算的領域。目前CUDA除了能夠用C語言開發,也已經提供FORTRAN的應用接口,將來能夠預計CUDA會支持C++、Java、Python等各種語言。可普遍的應用在圖形動畫、科學計算、地質、生物、物理模擬等領域。
2008年NVIDIA推出CUDA SDK2.0版本,大幅提高了CUDA的使用範圍。使得CUDA技術愈發成熟
支持CUDA的GPU銷量已逾1億,數以千計的軟件開發人員正在使用免費的CUDA軟件開發工具來解決各類專業以及家用應用程序中的問題。這些應用程序從視頻與音頻處理和物理效果模擬到石油自然氣勘探、產品設計、醫學成像以及科學研究,涵蓋了各個領域。目前市面上已經部署了超過一億顆支持CUDA的GPU,數以千計的軟件開發人員正在使用免費的CUDA軟件工具來爲各類應用程序加速。
CUDA 的核心有三個重要抽象概念: 線程組層次結構、共享存儲器、屏蔽同步( barrier
synchronization),可輕鬆將其做爲C 語言的最小擴展級公開給程序員。
CUDA 軟件堆棧由幾層組成,一個硬件驅動程序,一個應用程序編程接口(API)
和它的Runtime,還有二個高級的通用數學庫,CUFFT 和CUBLAS。硬件被設計成支持輕
量級的驅動和Runtime 層面,於是提升性能。
所支持的OS(operating system)
CUDA目前支持linux和Windows操做系統。進行CUDA開發須要依次安裝驅動、toolkit、SDK三個軟件。在安裝目錄/C/src目錄下有不少的例程能夠進行學習。
英偉摩達(NVIDIA摩機社區):http://www.nvmod.cn
《大規模並行處理器編程實戰》(英偉達官方網站推薦書籍)
《CUDA範例精解》(英偉達官方網站推薦書籍)
NVIDIA CUDA技術亮點何在
做爲圖形芯片領域的領頭羊, NVIDIA(英偉達)認爲GPU較CPU具備更強的浮點運算能力以及更大的帶寬等諸多優點,甚至連晶體管數量目前都是GPU略勝一籌,將來GPU將愈來愈多地取代CPU的數據處理職能。所以,英偉達在07年就提出了獨特的GPGPU(通用圖形處理器)概念。目前 NVIDIA(英偉達)新一代GPU都採用了統一渲染架構,這種架構相比以往使GPU的運算單元變得通用,並能夠根據圖形渲染處理的負載靈活地改變運算單元的任務。這種架構集成了多個支持頂點座標計算及三角形着色等多級處理的運算單元,各運算單元的任務能夠根據各級處理的負載進行調整。新架構的出現也使得在以浮點運算爲中心的通用處理中使用GPU成爲可能。
在這種趨勢下, NVIDIA(英偉達)定製了一個解決方案,被稱做Compute Unified Device Architecture,簡稱CUDA。這也就是今天咱們介紹的主角!
CUDA的編譯
CUDA的本質是NVIDIA爲自家的GPU編寫了一套編譯器NVCC極其相關的庫文件。CUDA的應用程序擴展名能夠選擇是.cu,而不是.cpp等。NVCC是一個預處理器和編譯器的混合體。當遇到CUDA代碼的時候,自動編譯爲GPU執行的代碼,也就是生成調用CUDA Driver的代碼。若是碰到Host C++代碼,則調用平臺本身的C++編譯器進行編譯,好比Visual Studio C++本身的Microsoft C++ Compiler。而後調用Linker把編譯好的模塊組合在一塊兒,和CUDA庫與標準CC++庫連接成爲最終的CUDA
Application。因而可知,NVCC模仿了相似於GCC同樣的通用編譯器的工做原理(GCC編譯CC++代碼本質上就是調用cc和g++)。整個CUDA平臺是經過運用顯卡內的流處理器進行數學運算,並經過GPU內部的緩存共享數據,流處理器之間甚至能夠互相通訊,同時對數據的存儲也再也不約束於以GPU的紋理方式,存取更加靈活,能夠充分利用統一架構的流輸出(stream out)特性,大大提升應用效率。
CUDA技術特點
CUDA的運算
目前的CUDA所用的運算方法是分開的,一部分由CPU負責,而另外一部分經過CUDA編譯器使用GPU進行運算。在CUDA的架構下,一個程序分爲兩個部份:host 端和device 端。Host 端是指在CPU 上執行的部份,而device 端則是在顯示芯片上執行的部份。Device端的程序又稱爲 「kernel」。一般host端程序會將數據準備好後,複製到顯卡的內存中,再由顯示芯片執行device端程序,完成後再由host端程序將結果從顯卡的內存中取回。
因爲顯示芯片大量並行計算的特性,它處理一些問題的方式,和通常CPU是不一樣的。好比在內存存取latency 的問題上,CPU 一般使用cache 來減小存取主內存的次數,以免內存latency 影響到執行效率,而顯示芯片則多半沒有cache(或很小),而利用並行化執行的方式來隱藏內存的latency(即,當第一個 thread 須要等待內存讀取結果時,則開始執行第二個thread,依此類推),效率提升很多。正如 NVIDIA(英偉達)公司Tesla GPU計算事業部高級產品經理Sumit Gupta先生曾經推過一個形象的例子,CPU的順序指令執行操做比如是一間辦公室裏的多個職員,若是每人須要將杯子裏的水倒入同一個桶內時,他們須要排成長隊按順序進行。而對於GPU來講,這些職員無需排隊,只要同時走到桶前將水倒入便可。因此,最適合利用CUDA處理的問題,是能夠大量並行化的問題,纔能有效隱藏內存的latency,並有效利用顯示芯片上的大量執行單元。使用CUDA
時,同時有上千個thread在執行是很正常的。所以,若是不能大量並行化的問題,使用CUDA就沒辦法達到最好的效率了。
GPU並行計算過程
CPU存取顯卡內存時只能透過PCI Express 接口,所以速度較慢(PCI Express x16 的理論帶寬是雙向各4GB/s),所以不能過多進行這類動做,以避免下降效率。在CUDA架構下,顯示芯片執行時的最小單位是thread。數個thread 能夠組成一個block。一個block 中的thread 能存取同一塊共享的內存,並且能夠快速進行同步的動做。每個block 所能包含的thread 數目是有限的,不過執行相同程序的block,能夠組成grid。不一樣block中的thread沒法存取同一個共享的內存,所以沒法直接互通或進行同步。所以,不一樣block中的thread能合做的程度是比較低的。不過,利用這個模式,可讓程序不用擔憂顯示芯片實際上能同時執行的thread數目限制。例如,一個具備不多量執行單元的顯示芯片,可能會把各個block中的thread順序執行,而非同時執行。不一樣的grid則能夠執行不一樣的程序。
在目前支持CUDA的GPU中,其流處理器個數是不能和CPU如今擁有的內核數量做類比的。CPU的每個核心都是一個完整的獨立處理架構,而GPU中的每一個流處理器並不徹底是這樣,而是以子組合方式運做,好比每8個流處理器組成一個Stream Multiprocessors (SM),其中分爲四個流處理器又分爲1小組,也能夠當作是有兩組4D的SIMD處理器。須要說明的是,若用戶擁有超過兩張或以上支持CUDA的顯卡,驅動程序將經過PCIe總線自動分配工做負載,進一步提高效能。
固然CUDA也有其弱勢的地方,並非全部的事情CUDA都可以很好地解決,好比像操做系統這樣複雜的指令和紛繁的分支循環而又用不多的線程來處理,這顯然就不是CUDA的強項了。高度並行的計算是CUDA的技術特性之一。
那些GPU支持CUDA?
在推出GeForce GTX 200系列前,CUDA短短兩年時間就已經發展了四個版本:
不一樣CUDA版本對比
目前,NVIDIA(英偉達)推出的GPU中,G80系列支持CUDA 1.0,而以後推出的G8四、G8六、G9二、G94和G96 則支持CUDA 1.1。
GeForce顯卡規格對比
CUDA 2.0—隨GeForce GTX 200登場
而NVIDIA(英偉達)在6月17日GeForce GTX 200系列發佈之時也推出了CUDA 2.0,加入雙精度運算支持,爲應用提供更準確的運算結果,而這項技術源自於多重處理器的專用單元。
多重處理器的專用單元框架
每個多重處理器都包含了8個主要的FMAD處理器和8和MUL處理器來實現一些特殊功能的計算等。這樣,一個64位的FMAD處理器就產生了。可是這樣的處理器對於64位的計算能力至關低下,8X的低速FMAD和16X的低速FMUL都是致使計算能力低下的緣由。這個支持64位也意味着能夠以它爲模板爲未來的更高級和新一代的GPU發展提供代碼或者應用程序的支持,從而獲得更好的甚至超過一個以上的64位處理器。每個多重處理器都具備兩個流處理線,這樣就沒必要依賴週期而同時處理兩個信號。
引入雙精度運算能力,能夠在必定程度上加強GT200在科學計算領域的適用性.儘管在實際的相關領域中其實有部分甚至只須要16位精度就足夠了,但GTX200核心的每個SM都包括了一個雙精度64Bit浮點運算單元,因此每一個週期GT200能達成1MAD*30SM=30MAD,在1.5GHz的shader頻率下能夠達到90 GFLOPS(MAD)的雙精度浮點性能, NVIDIA(英偉達)對其稱之爲能夠與8核Xeon處理器(我想應該是指45nm Hypertown內核Xeon E5440 2.83GHz)的水平。不過須要注意的是,Xeon每一個內核的浮點單元組合是每兩個週期完成一個ADDPD或者一個週期完成一個MULPD,在雙精度浮點峯值性能上"含金量"方面彷佛要比GT200每一個SM單週期MAD高一些。
NVIDIA(英偉達)的對手AMD在RV670上實現了硬件(非模擬)的FP64支持,雙精度MAD性能爲單精度MAD的1/5,GT200架構的雙精度浮點支持應該是 NVIDIA(英偉達)邁向雙精度浮點加速器的第一步,將來的架構極可能會把浮點雙精度的性能作到單精度的1/2水平,這將是很是可觀的。
CUDA將成爲又一個標準API接口
選擇CUDA的理由
目前CUDA已經應用在不少領域,包括在通用計算中的一些GPU加速,遊戲中的物理模擬等等,而在科學計算中,CUDA可發揮的功效就更大了。好比有限元的計算、神經元的研究計算、地質分析等等科學研究的領域;固然目前GPU計算的應用仍是處於一個早期的階段,大部分CUDA應用都是專業人員和相關的程序員在開發,隨着CUDA的普遍推行,之後會有實際的基於CUDA的程序,更多的程序員可以加入進來,而且開發一些能夠給你們平常應用帶來好處的程序,只要有支持CUDA的GPU就可以利用到GPU計算的好處。
CUDA 4.0提升多GPU效率
● CUDA帶給GPU行業無限可能
2007年能夠說是GPU發展史上翻天覆地的一年,在這一年微軟推出了DirectX 10 API標準,將傳統的Pixel Shader(頂點着色器)、Vertex Shader(像素着色器)和Geometry Shader(幾何着色器),三種硬件邏輯被整合爲一個全功能的統一着色器Shader。
這種API發展思路背後是微軟和NVIDIA、AMD對於整個GPU發展歷程的思考與轉型。它標誌着微軟開始支持GPU走向更強的可編程性,也標誌着Intel等傳統CPU製造廠商在將來幾年將要面對GPU的強硬挑戰,愈來愈多的高性能計算機和超級計算機已經開始以GPU做爲其運算能力提高的重要配件。
天河一號-A所採用的NVIDIA Tesla GPU
2007年一樣是NVIDIA值得回憶的一年,NVIDIA公司在這一年正式推出了CUDA整套方案,它是一個完整的通用計算產品。CUDA是Compute Unified Device Architecture(統一計算架構)的簡稱,是創建在GPU基礎之上的通用計算開發平臺,它是一個全新的軟硬件架構,能夠將GPU視爲一個並行數據計算的設備,對所進行的計算進行分配和管理。
NVIDIA提出的CUDA通用計算方案
簡單分析可知,CUDA是一種以C語言爲基礎的平臺,主要是利用顯卡強大的浮點運算能力來完成以往須要CPU才能夠完成的任務。這種整套方案的提出意味着程序員不再用去鑽研繁雜的底層彙編程序,而是在C語言的基礎上稍加學習就能掌握CUDA並經過它來調用GPU強大的浮點運算能力。
CUDA 4.0的3個顯著提高
這一版本的CUDA大幅度下降了編程難度,同時提高了GPU的編程和執行效率。CUDA 4.0主要的功能可以在Fermi架構的最新GPU上被髮揮出來,同時它可讓G80、G9二、GT200架構的GPU也擁有編程方式上的飛躍。
GPU統一虛擬尋址
● GPU統一虛擬尋址
在2011年2月28日,NVIDIA發佈了最新版本的CUDA工具包——CUDA 4.0。藉助該工具包,開發人員可以開發出在GPU上運行的並行應用程序。本次NVIDIA歷經兩年時間發佈了CUDA 4.0版本,這一版本爲咱們帶來了3個核心的編程與執行方式提高,它們分別是:
一、統一的虛擬尋址;
二、更直接的GPU間通訊;
三、加強型C++模板庫。
這3個關鍵性提高讓更多開發人員可以利用GPU計算,它們也成爲CUDA 4.0的核心提高之處。接下來咱們經過NVIDIA官方公佈的資料來簡單分析CUDA 4.0的不一樣之處。
多個GPU及其顯存能夠被視爲一體
首先提出的是「GPU統一虛擬尋址」概念,咱們第一次見到這一律念在Fermi架構發佈的報道中,Fermi架構帶領GPU全面走向高性能計算的重要表現就在於存儲體系的結構完善和GPU統一的虛擬尋址,結構部分中關村在線顯卡頻道以前進行了大量分析,細心的讀者確定收藏了咱們的技術分析類文章。
Fermi的發佈完全統一了GPU尋址空間,將不一樣的尋址簡化爲一種指令,這在之前的的GPU中是不敢想象的,內存地址取決於存儲位置:最低位是本地,而後是共享,剩下的是全局。這種統一尋址空間也是支持C++的必需前提。
本次CUDA 4.0版本的發佈可讓多個GPU以及CPU統一調用GPU顯存以及CPU內存,並將處理器(CPU+GPU)和存儲器(內存+顯存)視爲統一總體。在最大顯存爲6GB的Tesla產品中,多CPU和多GPU融合以後能夠爲整個系統帶來大容量存儲設備而且進行統一尋址。
GPU通訊和C++模板庫
● GPU通訊和C++模板庫
多GPU通訊在之前的CUDA版本中代價很大,只有專業的並行編程環境才能驅動多款GPU在同一系統內執行一個任務,而目前桌面級應用中,若是用戶的多塊顯卡同時存在於系統中,一個CUDA加速程序每每只能調用其中一個GPU核心。
從DirectX 10到DirectX 11的多線程變化
雖然咱們看到GPU在圖形操做時能夠有SLI速力或者CF交火能力,也有DirectX 提出的多線程渲染技術,可是高並行度的GPU通用計算領域在PC桌面級應用中反倒不能實現多款GPU聯合加速。
舊版的GPU Direct 1.0主要用於應用程序在網絡間通訊,新版的GPU Direct 2.0則轉入節點內通訊,支持P2P內存訪問、傳輸和同步,代碼更少,編程效率更高。在此以前,同一節點內的不一樣GPU互相訪問,須要繞道系統內存並進行兩次拷貝。就不用理會系統內存了,不一樣GPU能夠直接進行傳輸,只須要一個統一的存儲體系協議NVIDIA就搞定了整個問題。
說到GPU支持C++編程你們必定不會陌生,在Fermi架構發佈之時,C++模板庫模板庫就已經被NVIDIA不斷升級。Fermi是首款支持第二代PTX指令的GPU架構,咱們知道PTX 2.0使得GPU具有更強的可編程性、更精確和提供更高的性能。
Thrust C++模板化算法與數據結構
經過上圖可知,Thrust C++模板化算法與數據結構提供了強大的開源C++並行算法和數據結構。相似C++ STL標準模板庫;可在編譯時自動選擇最快的代碼路徑,在多核心CPU與GPU之間分配工做。
C/C++語言中全部變量和函數都是經過指針才能肯定對象,這樣存在編譯時分離的尋址空間沒法肯定指針的位置而致使沒法支持C/C++語言。PTX 2.0最爲突出的地方在於它提供的統一尋址空間的意義,將GPU當成「共享地址空間」的並行計算機。大量的算法是基於共享地址空間平臺的,這樣可以顯著推進GPU並行計算的發展。
CUDA 4.0引領行業如何發展
● CUDA 4.0引領行業如何發展
2011年2月28日,NVIDIA官方發佈了CUDA 4.0以及全新計算開發包的各項特性,而3月5日NVIDIA正式發佈了GPU通用計算開發包的CUDA 4.0 RC候選版,並提供給開發人員下載使用。
NVIDIA對本身的定位發生變化
從官方公佈的資料看來,NVIDIA的確是早有打算並雄心勃勃進入並行計算市場,目前NVIDIA擁有了從Tegra到Tesla的整套芯片產品線。而這條產品線從節能高效到高性能計算全面涵蓋,這的確是一家處於產業鏈上游的「超級」計算芯片公司。
CUDA從發佈開始,到目前已經到了4.0版,從NVIDIA提出CUDA這個概念,已經有將近四年的時間,在最近一年時間CUDA發展迅速,主要是Fermi架構推出以後GPU可編程性急劇提高,GPU和CPU的差距已經愈來愈近,二者關係也愈來愈緊密。
CUDA 4個版本發展歷程
上圖描述了NVIDIA CUDA發佈以來,從1.0版本官方大力宣傳和愛好者嘗試,到2.0版專用領域開始應用CUDA進行編程開發,3.0版本已經引來整個行業的關注,大量軟件開始基於CUDA進行基於GPU的加速開發,到今天推出4.0版本繼續下降開發難度提高開發效率。
除了上述敘述以外,咱們經過資料獲得CUDA 4.0架構版本還包含大量其它特性與功能,其中包括:
一、MPI與CUDA應用程序相結合——當應用程序發出MPI收發調用指令時,例如OpenMPI等改編的MPI軟件可經過Infiniband與顯卡顯存自動收發數據。
二、GPU多線程共享——多個CPU主線程可以在一顆GPU上共享運行環境,從而使多線程應用程序共享一顆GPU變得更加輕鬆。
三、單CPU線程共享多GPU——一個CPU主線程能夠訪問系統內的全部GPU。 開發人員可以垂手可得地協調多顆GPU上的工做負荷,知足應用程序中「halo」交換等任務的須要。
四、全新的NPP圖像與計算機視覺庫——其中大量圖像變換操做讓開發人員可以快速開發出成像以及計算機視覺應用程序。
五、全新、改良的功能
Visual Profiler中的自動性能分析功能
Cuda-gdb中的新特性以及新增了對MacOS的支持
新增了對C++特性的支持,這些特性包括新建/刪除以及虛擬等功能
全新的GPU二進制反彙編程序
3大核心提高可否帶來CUDA 4.0飛躍式發展
目前CUDA可以有效利用GPU強勁的處理能力和巨大的存儲器帶寬進行圖形渲染之外的計算,普遍應用於圖像處理、視頻傳播、信號處理、人工智能、模式識別、金融分析、數值計算、石油勘探、天文計算、流體力學、生物計算、分子動力學計算、數據庫管理、編碼加密等領域,並在這些領域中對CPU得到了一到兩個數量級的加速,取得了使人矚目的成績。