1. 程式人生 > >GPU平行計算入門1——背景知識

GPU平行計算入門1——背景知識

專有名詞:

GPGPU 通用圖形處理器 (英語:General-purpose computing on graphics processing units,簡稱GPGPU或GP²U),利用處理圖形任務的圖形處理器來計算原本由中央處理器處理的通用計算任務,這些通用計算常常與圖形處理沒有任何關係。由於現代圖形處理器強大的並行處理能力和可程式設計流水線,令流處理器可以處理非圖形資料。特別在面對單指令流多資料流(SIMD),且資料處理的運算量遠大於資料排程和傳輸的需要時,通用圖形處理器在效能上大大超越了傳統的中央處理器應用程式。

CUDA(Compute Unified Device Architecture,統一計算架構[1])

是由NVIDIA所推出的一種整合技術,是該公司對於GPGPU的正式名稱。通過這個技術,使用者可利用NVIDIA的GeForce 8以後的GPU和較新的Quadro GPU進行計算。亦是首次可以利用GPU作為C-編譯器的開發環境。NVIDIA營銷的時候[2],往往將編譯器與架構混合推廣,造成混亂。實際上,CUDA可以相容OpenCL或者自家的C-編譯器。無論是CUDA C-語言或是OpenCL,指令最終都會被驅動程式轉換成PTX程式碼,交由顯示核心計算。

OpenCL(Open Computing Language,開放計算語言)是一個為異構平臺編寫程式的框架,此異構平臺可由CPU,GPU或其他型別的處理器組成。OpenCL由一門用於編寫kernels(在OpenCL裝置上執行的函式)的語言(基於C99)和一組用於定義並控制平臺的API組成。OpenCL提供了基於任務分割槽和資料分割槽的平行計算機制。

OpenCL類似於另外兩個開放的工業標準OpenGL和OpenAL,這兩個標準分別用於三維圖形和計算機音訊方面。OpenCL擴充了GPU圖形生成之外的能力。OpenCL由非盈利性技術組織Khronos Group掌管。

關於CUDA和OpenCL的對比:

觀點一:

從很多方面來看,CUDA和OpenCL的關係都和DirectX與OpenGL的關係很相像。如同DirectX和OpenGL一樣,CUDA和OpenCL中,前者是配備完整工具包、針對單一供應商(NVIDIA)的成熟的開發平臺,後者是一個開放的標準。
雖然兩者抱著相同的目標:通用平行計算。但是CUDA僅僅能夠在NVIDIA的GPU硬體上執行,而OpenCL的目標是面向任何一種Massively
Parallel Processor,期望能夠對不同種類的硬體給出一個相同的程式設計模型。由於這一根本區別,二者在很多方面都存在不同:
1)開發者友好程度。CUDA在這方面顯然受更多開發者青睞。原因在於其統一的開發套件(CUDA Toolkit, NVIDIA GPU
Computing SDK以及NSight等等)、非常豐富的庫(cuFFT, cuBLAS, cuSPARSE, cuRAND, NPP,
Thrust)以及NVCC(NVIDIA的CUDA編譯器)所具備的PTX(一種SSA中間表示,為不同的NVIDIA
GPU裝置提供一套統一的靜態ISA)程式碼生成、離線編譯等更成熟的編譯器特性。相比之下,使用OpenCL進行開發,只有AMD對OpenCL的驅動相對成熟。
2)跨平臺性和通用性。這一點上OpenCL佔有很大優勢(這也是很多National
Laboratory使用OpenCL進行科學計算的最主要原因)。OpenCL支援包括ATI,NVIDIA,Intel,ARM在內的多類處理器,並能支援執行在CPU的並行程式碼,同時還獨有Task-Parallel
Execution Mode,能夠更好的支援Heterogeneous
Computing。這一點是僅僅支援資料級並行並僅能在NVIDIA眾核處理器上執行的CUDA無法做到的。
3)市場佔有率。作為一個開放標準,缺少背後公司的推動,OpenCL顯然沒有佔據通用平行計算的主流市場。NVIDIA則憑藉CUDA在科學計算、生物、金融等領域的推廣牢牢把握著主流市場。

觀點二:

OpenCL實際上是什麼?
OpenCL實際上是針對異構系統進行並行程式設計的一個全新的API,OpenCL可以利用GPU進行一些平行計算的工作。
OpenGL是針對圖形的,而OpenCL則是針對平行計算的API。
OpenCL開發的過程中,技術平臺均為NVIDIA的GPU,實際上OpenCL是基於NVIDIA
GPU的平臺進行開發的。另外OpenCL的第一次演示也是執行在NVIDIA的GPU上。
從本質上來說,OpenCL就是一個相當於Windows平臺中DirectX那樣的技術。或者說,它是一個連線硬體和軟體的API介面。在這一點上,它和OpenGL類似,不過OpenCL的涉及範圍要比OpenGL大得多,它不僅是用來作用於3D圖形。如果用一句話描述,OpenCL的作用就是通過呼叫處理器和GPU的計算資源,釋放硬體潛力,讓程式執行得更快更好。
CUDA實際上是什麼?
CUDA架構是原生的,專門為計算介面而建造的這樣的一個架構,這種硬體架構包括指令集都是非常適合於這種平行計算,為異構計算而設計的一整套的架構。CUDA架構可以支援API,包括OpenCL或者DirectX,同時CUDA還支援C、C++語言,還包括Fortran、Java、Python等各種各樣的語言。

OpenCL與CUDA的關係是什麼?
CUDA和OpenCL的關係並不是衝突關係,而是包容關係。OpenCL是一個API,在第一個級別,CUDA架構是更高一個級別,在這個架構上不管是OpenCL還是DX11這樣的API,還是像C語言、Fortran、DX11計算,都可以支援。作為程式開發員來講,一般他們只懂這些語言或者API,可以採用多種語言開發自己的程式,不管他選擇什麼語言,只要是希望呼叫GPU的計算能,在這個架構上都可以用CUDA來程式設計。
關於OpenCL與CUDA之間的技術區別,主要體現在實現方法上。基於C語言的CUDA被包裝成一種容易編寫的程式碼,因此即使是不熟悉晶片構造的科研人員,也可能利用CUDA工具編寫出實用的程式。而OpenCL雖然句法上與CUDA接近,但是它更加強調底層操作,因此難度較高,但正因為如此,OpenCL才能跨平臺執行。
CUDA是一個平行計算的架構,包含有一個指令集架構和相應的硬體引擎。OpenCL是一個平行計算的應用程式程式設計介面(API),在NVIDIA
CUDA架構上OpenCL是除了C for CUDA外新增的一個CUDA程式開發途徑。
如果你想獲得更多的對硬體上的控制權的話,你可以使用OpenCL這個API來進行程式設計,如果對API不是太瞭解,也可以用CUDA
C語言來程式設計,這是兩種不同程式設計的方式,他們有他們相同點和不同點。但是有一點OpenCL和CUDA
C語言進行開發的時候,在平行計算這塊,他們的概念是差不多的,這兩種程式在程式上是有很大的相似度,所以程式之間的相互移植相對來說也是比較容易。
CUDA C語言與OpenCL的定位不同,或者說是用人群不同。CUDA
C是一種高階語言,那些對硬體瞭解不多的非專業人士也能輕鬆上手;而OpenCL則是針對硬體的應用程式開發介面,它能給程式設計師更多對硬體的控制權,相應的上手及開發會比較難一些。
程式設計師的使用習慣也是非常重要的一方面,那些在X86 CPU平臺使用C語言的人員,會很容易接受基於CUDA
GPU平臺的C語言;而習慣於使用OpenGL圖形開發的人員,看到OpenCL會更加親切一些,在其基礎上開發與圖形、視訊有關的計算程式會非常容易。

相關推薦

GPU平行計算入門1——背景知識

專有名詞: GPGPU 通用圖形處理器 (英語:General-purpose computing on graphics processing units,簡稱GPGPU或GP²U),利用處理圖形任務的圖形處理器來計算原本由中央處理器處理的通用計算任務,這些

GPU平行計算

GPU平行計算包括同步模式和非同步模式: 非同步模式: 同步模式: 非同步模式的特點是速度快,不用等待其他GPU計算完畢再更新,但是更新的不確定性可能導致到達不了全域性最優。 同步模式需要等到所有GPU計算完畢,並計算平均梯度,最後賦值,缺點是需要等待最後一個GPU

平行計算-CUDA開發】淺談GPU平行計算新趨勢

 隨著GPU的可程式設計性不斷增強,GPU的應用能力已經遠遠超出了圖形渲染任務,利用GPU完成通用計算的研究逐漸活躍起來,將GPU用於圖形渲染以外領域的計算成為GPGPU(General Purpose computing on graphics proces

海思HI35xx平臺軟體開發快速入門背景知識

前言:  安防領域最近幾年可謂暗流湧動,作為安防業的雙寡頭,大華股份與海康威視憑藉行業的東風,兩家公司的成長速度異常強勁,在國際市場上已經和應用廠家進行廝殺。 2015年兩家公司雙雙晉升“全球安放50強”,海康排名第二,大華排名第五。以華為海思為代表國產晶片解決方案不斷走強,

平行計算入門案例

首先是cuda程式設計,分三步,把資料從記憶體拷貝進視訊記憶體,GPU進行計算,將結果從視訊記憶體拷貝回記憶體。cuda-C程式氣泡排序案例:#include "cuda_runtime.h" #include "device_launch_parameters.h" #i

課程總結 -- CPU/GPU平行計算基礎(CPU篇)

上學期選修了Prof. Tolga Soyata的“GPU Parallel Programming using C/C++”課程。該課程主要分兩部分:前半部分通過講解CPU並行程式來介紹平行計算的原理和思路;後半部分講解如何用CUDA在GPU上進行平行計算。本

利用GPU平行計算來加速簡單積分過程的實驗

由於CPU的摩爾定律已經不再適用,目前加速程式的最佳選擇就是通過GPU並行。經過幾天的摸索後,完成了這個利用GPU加速積分演算法的小實驗。 數值積分中最常用的方法之一就是辛普森積分法,首先我們寫出一段三階辛普森積分的小程式: double Simpson_integ (i

CPU與GPU平行計算聯絡與區別

最近在做利用GPU實現並行渲染的工作,前天同學問我CPU和GPU在多執行緒和平行計算方面的區別具體是什麼,雖然做了幾個月這方面的工作,但我一下子答卻不知道從何答起,因此在這裡做一下整理。 一、CPU和GPU的區別 CPU((Central Processing Uni

平行計算-CUDA開發:淺談GPU平行計算新趨勢

前幾天偶然之間與同事談論到ROM,RAM,FLASH一些知識,而突然之間當我們去說這些英文單詞的

一起做實驗 | 多GPU平行計算訓練深度神經網路

科技你好關注我們·成為科技潮人2018年2月25日,平昌東奧會閉幕式上,備受矚目的“北京八分鐘”

89、tensorflow使用GPU平行計算

''' Created on May 25, 2017 @author: p0079482 ''' # 分散式深度學習模型訓練模式 # 在一臺機器的多個GPU上並行訓練深度學習模型 from datetime import datetime import os impor

NO.1:自學tensorflow之路------神經網絡背景知識

英文 梯度下降 傳播 激活 Go sub doc 統計學 又是 引言   從本周,我將開始tensorflow的學習。手頭只有一本《tensorflow:實戰Google深度學習框架》,而這本書又講的非常粗淺。tensorflow中文社區中的翻譯的谷歌官方教程十分詳細,是自

C++AMP 遇見C++ AMP 在GPU上做平行計算

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Ubuntu16.04:CUDA學習筆記(一):GPU背景知識

host:CPU,記憶體 device:GPU,視訊記憶體 我是純粹小白,裡面的一些圖是根據我自己的理解畫的,可能並不一定對 一,GPU和CPU執行程式的區別 (圖片來源:CUDA_C_Programming-Guide) 可以看到GPU有跟多的cores,你可以先把cores理

jenkins X實踐系列(1) —— 背景知識

本文介紹jenkins X(以下簡稱jx)相關的背景技術。 jenkins X 簡介 Jenkins X 是一個高度整合化的CI/CD平臺,基於Jenkins和Kubernetes實現,旨在解決微服務體系架構下的雲原生應用的持續交付的問題,簡化整個雲原生應用的開發、執行和部署過程。 jx 基於gitop

基礎及一些背景知識1

一、馮諾依曼體系 運算器、控制器、儲存器、輸入裝置、輸出裝置 二、計算機的一些硬體 1.CPU CPU是 central processing unit 的縮寫,即中央處理器。有運算器和控制器組成,是整個計算機最重要的部分。關於CPU的一些概念: 主頻:C

CUDA學習筆記(一):GPU背景知識

host:CPU,記憶體 device:GPU,視訊記憶體 我是純粹小白,裡面的一些圖是根據我自己的理解畫的,可能並不一定對 GPU的背景知識 GPU的每一個core(計算核心)都有兩個計算單元 輸

書-1.1web開發背景知識

摘自jsp+servlet+tomcat 應用開發,從零開始學這本書 本節的重點是介紹web開發的一些基本知識,在本節中首先簡單介紹web訪問的基本原理,然後對http超文字傳輸協議進行簡單介紹,最後介紹靜態網頁與動態網頁的區別,以及各種web伺服器的優缺點。

Go語言入門1-基礎知識

1.常用命令 go get 獲取遠端包 go run 直接執行程式 go build 測試編譯,檢查是否有編譯錯誤 go fmt 格式化原始碼(部分IDE在儲存時自動呼叫) go install 編譯包檔案並編譯整個程式 go test 執行測試檔案

GPU】基於Python的GPU加速平行計算 -- pyCUDA

Python實現的CUDA – pyCUDA Nvidia的CUDA 架構為我們提供了一種便捷的方式來直接操縱GPU 並進行程式設計,但是基於 C語言的CUDA實現較為複雜,開發週期較長。而pyth