一、并行處理
所謂并行處理就是同時處理多個計算程序,應用程序處理器典型的設計是使用單線程盡可能快的去執(zhí)行應用程序,這種類型的處理器通常包含標量操作單元和程序控制器。GPU是被設計用來同時執(zhí)行大量線程的處理器,GPU處理器的典型設計是使用多處理器并行的處理多個任務。
OpenCL編程語言可以幫助我們使用GPU或者多核處理器的并行能力。OpenCL是一種開放標準的變成語言,它能夠使開發(fā)者在GPU或者其他類型的多核處理器上運行通用計算任務。
二、并行類型
1.數(shù)據(jù)并行
數(shù)據(jù)并行,任務并行和流水線(pipelines)并行是主要的并行類型。
數(shù)據(jù)并行是將數(shù)據(jù)劃分為不同的數(shù)據(jù)元素或者數(shù)據(jù)塊,使得處理器可以并行的處理不同的數(shù)據(jù)元素。多個處理器可以同時的讀寫和處理不同的數(shù)據(jù)。因此數(shù)據(jù)并行要求數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可以滿足多個處理器同時讀寫的要求。GPU進行通用計算,最典型的應用便是數(shù)據(jù)并行。通過OpenCL等編程語言可以很輕松的實現(xiàn)不同的線程以相同的方式處理不同的數(shù)據(jù)。如下圖所示:可以使用9個線程,同時完成9組數(shù)據(jù)的相加。

2.任務并行
任務并行,是指一個任務被分解為多個小任務,由多個處理器同時處理。任務并行的一個簡單例子便是在網(wǎng)頁上播放一段視頻,為了能夠在網(wǎng)頁上播放視頻,我們的設備需要做如下幾個任務:
運行一個執(zhí)行通信的網(wǎng)絡堆棧
從外部服務器請求數(shù)據(jù)
分析數(shù)據(jù)
解碼視頻數(shù)據(jù)
解碼音頻數(shù)據(jù)
渲染視頻幀數(shù)據(jù)
播放音頻數(shù)據(jù)
下圖顯示了播放在線視頻的時候應用程序同時操作的系統(tǒng);

3.流水線并行
流水線是通過多個不同的計算階段處理數(shù)據(jù),在流水線上多個階段可以同時操作,但是他們操作的是不同的數(shù)據(jù)。流水線通常擁有相當少的階段。下面是一個關于流水線的例子,一個錄像程序必須執(zhí)行的幾個階段:
從圖像傳感器捕捉圖像數(shù)據(jù),并且計算亮度級別
根據(jù)鏡頭效果修正圖像數(shù)據(jù)
修正圖像數(shù)據(jù)的對比度,色彩平衡和曝光
壓縮圖像數(shù)據(jù)
將圖像數(shù)據(jù)添加到視頻文件
將視頻數(shù)據(jù)寫入存儲器
這些階段必須按照順序執(zhí)行,但是他們可以同時在視頻中的不同幀上執(zhí)行。
我們將6個處理階段,對應6中顏色,分別表示6個處理單元:

按照串行的處理方式,處理一幀圖像需要串行的經(jīng)過6個處理單元,假設需要300us的延遲,每一個處理單元消耗50us。這是一種組合邏輯的實現(xiàn)過程,我們只需要每300us輸入一幀圖像即可,不需要在處理單元內(nèi)部做同步。
如果使用流水線技術,那么處理流程將完全不同,流水線技術是一種指令疊加技術,能夠增加系統(tǒng)的吞吐量,但是同時會帶來每一幀數(shù)據(jù)的處理延遲會增加。具體處理流程如下圖所示:

圖中給出了A、B、C三幀數(shù)據(jù)的處理流程;當A進入第二階段的時候,B便可以進入第一階段,當B進入第二階段的時候,C便可以進入第一階段,以此類推;但是需要注意的是,我們需要在每一個階段的結(jié)束位置添加寄存器,用于數(shù)據(jù)同步。假設寄存器延遲為20us(請忽略單位,寄存器延遲不會達到us級別,為了計算方便這里做了不合實際的假設)。那么處理3幀數(shù)據(jù),需要消耗的時間為:
8×(50 + 20) = 560 us;
而串行處理方式需要消耗300 × 3 = 900 us;但是不使用流水線獲取每一幀數(shù)據(jù)輸入到輸出的延遲為300us,而加入流水線技術后,獲取數(shù)據(jù)的延遲為420us。
不使用流水線時,系統(tǒng)的吞吐量為:1/300;使用流水線后,系統(tǒng)的吞吐量為:3/420= 1/140;可以看到系統(tǒng)的吞吐量增加了2.14倍(注:吞吐量的計算忽略單位,倍數(shù)的計算是準確的)。所以通過使用流水線技術可以顯著增加系統(tǒng)的吞吐量,但是會增加系統(tǒng)的延遲。
但是流水線在使用過程中也存在弊端,以上的任務劃分是均分的,但是在實際使用中,由于任務劃分的不均勻,會造成流水線產(chǎn)生不同的延遲,不合理的階段劃分,很容易導致流水線阻塞,造成性能降低。
三.混合使用不同的并行方式及其并行加速限制
在具體的應用中可以綜合使用不同的并行方式,例如在一個音頻分析的應用中,就可以同時使用以上三種并行方式。
可以使用任務并行來獨立的計算音符
使用音頻生成流水線和處理模塊來創(chuàng)造獨特的音符
在流水線內(nèi)部,一些處理階段可以使用數(shù)據(jù)并行來加速計算
但同時并行加速也有他的限制,假設你的應用程序能夠完全并行化,那么使用10個處理器來執(zhí)行,可以將程序性能提升10倍,但是很少有應用程序可以完全并行化,程序中很大可能會存在串行部分,而串行部分則會限制程序的并行化數(shù)量。
Amdahl定律描述了并行程序可以實現(xiàn)的最大加速,Amdahl定律的公式如下:
Speedup = 1/(s + p / n);其中,s表示應用程序中串行的部分,p表示應用程序中并行的部分,n表述處理器的數(shù)量。
下圖展示了不同數(shù)量的處理器對串行比例不同的應用程序所能提供的加速比率變化曲線:

在后續(xù)的文章中會更加細致的介紹如何使用OpenCL在移動端GPU上對應用程序進行并行化。
-
處理器
+關注
關注
68文章
20084瀏覽量
243914 -
gpu
+關注
關注
28文章
5050瀏覽量
134032 -
編程語言
+關注
關注
10文章
1957瀏覽量
38607
原文標題:原來GPU這么簡單,一定要看!
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式多核處理器硬件結(jié)構(gòu)分析與對排序算法進行并行化優(yōu)化
面向多核處理器的低級并行程序驗證
每日一教labview視頻教程【1.10】labview多核并行運行編程
GPU
探討采用C6000系列多核DSP的并行計算(OpenCL、OpenMP)實現(xiàn)大規(guī)模電磁系統(tǒng)的暫態(tài)仿真及其控制系統(tǒng)
多核處理器的優(yōu)點
ARM Mali-T600系列GPU OpenCL開發(fā)人員指南
嵌入式ARM多核處理器并行化優(yōu)化探究
基于NI LabVIEW圖形化編程對多核處理器和其他并行硬件進行編程

OpenCL編程語言可以幫助我們使用GPU或者多核處理器的并行能力
評論