• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      CPU—OpenMP和GPU—CUDA并行計算技術對矩陣乘法運算的加速效果分析

      2017-12-29 19:16:31張巖
      科技視界 2017年26期
      關鍵詞:并行計算

      張巖

      【摘 要】本文對比了CPU-OpenMP和GPU-CUDA并行計算技術對不同階矩陣乘法運算相對于CPU單線程計算的加速效果。結果表明,CPU-OpenMP并行的計算加速比與矩陣階數無關,且低于所采用的線程數目。GPU-CUDA并行的計算加速比隨矩陣階數的增加顯著增加,最大計算加速比可達570倍以上。相對于CPU單線程計算結果,CPU-OpenMP并行計算未產生誤差,而GPU-CUDA并行計算會產生誤差。結果表明,GPU-CUDA并行適合高階數矩陣乘法的加速計算,而CPU-OpenMP并行適合低階數矩陣乘法的加速計算。

      【關鍵詞】矩陣乘法;并行計算;CPU-OpenMP;GPU-CUDA

      中圖分類號: TP391 文獻標識碼: A 文章編號: 2095-2457(2017)26-0045-003

      Accelerating Effect Analysis of Matrix Multiplication with CPU-OpenMP and GPU-CUDA Parallel Computing

      ZHANG Yan

      (Beijing Normal University Affiliated High School West High School Class 1, Beijing 100042,China)

      【Abstract】This paper compares the accelerating effects of CPU-OpenMP and GPU-CUDA parallel computing on the computation of different-order matrix multiplication over CPU single-thread. The results show that the computational speedup of CPU-OpenMP parallelism is independent of matrix order and lower than the number of threads used. GPU-CUDA parallel computing speedup ratio increases significantly with the increase of the matrix order, the maximum computational speedup up to 570 times. Relative to the CPU single-thread calculations, CPU-OpenMP parallel computing did not produce errors, and GPU-CUDA parallel computing will produce errors. The results show that GPU-CUDA parallel is suitable for accelerated computing of high-order matrix multiplication, while CPU-OpenMP parallel is suitable for accelerated computing of low-order matrix multiplication.

      【Key words】Matrix multiplication; Parallel computing; CPU-OpenMP; GPU-CUDA

      0 前言

      在信息化技術不斷發(fā)展的今天,人們處在“大數據”時代。由于數據量巨大,普通的串行計算方式計算效率低下,無法滿足人們對數據進行快速處理的需求。因此,如何能夠提高計算機處理“大數據”的計算效率已成為人們日益關注的話題。為了減少計算時間、提升計算效率,并行計算的出現成為解決上述問題的有效方法。與普通的串行計算相比,并行計算將計算任務分配到計算機的多個處理器協(xié)同處理,從而提高計算效率。

      隨著并行計算結果的發(fā)展,并行算法也逐漸成熟。目前,人們采用的并行計算技術大致可能分為兩種:一是基于CPU(Central Processing Unit)多核多線程的并行計算;二是基于GPU(Graphics Processing Unit)的通用并行計算。對于CPU并行計算,根據并行粒度的不同可分為“共享式內存結構”和 “分布式內存結構”[1]。對于“共享式內存結構”的并行計算,OpenMP(Open Multi-Processing)作為該類型計算技術的代表,已被廣泛應用于數據處理及科學計算中。采用OpenMP做并行計算具有編程簡單、源程序改變小等優(yōu)點[2]?;贕PU的并行計算技術是近年來發(fā)展起來的新技術。與基于CPU的并行計算相比,GPU并行計算具有硬件成本低、加速效果顯著的優(yōu)點。隨著NVIDIA通用計算架構CUDA(Compute Unified Device Architecture)的提出,人們用GPU做并行計算的編程難度大為降低[3]。

      本文旨在采用CPU-OpenMP和GPU-CUDA并行計算技術進行不同階矩陣的乘法運算,并對比這兩種并行計算技術相對于串行計算(CPU單線程)的加速效果。此外,我們也對GPU-CUDA計算所產生的計算誤差進行了簡要分析。

      1 CPU-OpenMP和GPU-CUDA并行計算技術

      CPU-OpenMP是一種API(Application Program Interface),用于編寫可移植的多線程應用程序,并且無需進行復雜的線程創(chuàng)建、同步、負載平衡和銷毀工作。CPU-OpenMP能廣泛應用在Windows和Linux等多種平臺上,具有可移植性好的優(yōu)點。在Visual Studio 2010 編程環(huán)境下是用OpenMP API時,需打開項目屬性里的OpenMP支持選項。CPU-OpenMP的編程實現十分簡單,只需在原來串行計算程序里的for循環(huán)語句里加入#pragma omp parallel for語句即可實現并行計算[2]。如圖1所示,CPU-OpenMP并行計算的思路是主線程將共享內存里的數據分配到不同的分線程里進行計算,各個分線程完成計算任務后將結果返回到主線程,主線程再負責分配各個分線程下一步的計算任務。在CPU-OpenMP代碼編寫過程中,需對不同線程內的變量屬性進行區(qū)分,避免不同線程里的私有變量被其他線程的計算修改。endprint

      圖2是GPU-CUDA的計算架構示意圖。GPU-CUDA采用CPU-GPU異構模式協(xié)同工作,將CPU稱為Host,GPU作為Host的協(xié)處理器,即Device。CPU負責串行代碼的執(zhí)行,由GPU負責執(zhí)行高度并行化的浮點數計算任務。GPU的運算任務被編寫在Kernel函數里。如圖2所示,每個線程網格(Grid)由多個相同大小和維度的線程塊(Block)組成,若干個線程(Thread)又組成了線程塊,所以一個Grid就對應了一個Kernel函數。

      本研究中CPU單線程和CPU-OpenMP多線程運算的程序代碼是用C語言編寫的,GPU-CUDA運算的程序代碼是用CUDA C編寫的。所采用的硬件型號為CPU(Intel Xeon E5-1680 v4, 3.4GHz)和GPU(NVIDIA GeForce GTX1080Ti),操作系統(tǒng)和運行環(huán)境為Windows7和Visual Studio 2010,CUDA版本為CUDA 7.0。

      2 CPU-OpenMP和GPU-CUDA計算效率對比

      首先,隨機產生兩個n階方陣An×n和Bn×n,本文中n的取值分別為n=500,1000,2000,4000,8000,矩陣元素類型為float。隨后,根據矩陣相乘運算規(guī)則計算An×n·Bn×n,即矩陣元素(AB)ij= A B =A B +A B +…+A B ,分別采用CPU單線程、CPU-OpenMP多線程和GPU-CUDA并行技術計算不同階數矩陣的乘法,統(tǒng)計相應的計算時間,并獲得CPU-OpenMP和GPU-CUDA的計算效率加速比。對于GPU-CUDA的計算結果,計算其相對于CPU運算的最大相對誤差。本文中,CPU-OpenMP計算線程數和GPU-CUDA計算線程塊內的線程數都設置為8。

      表1是采用CPU單線程計算不同階數矩陣乘法所需的計算時間??梢钥吹剑S著矩陣階數的增加,CPU單線程計算時間明顯增加。此外,由于矩陣乘法的計算量是隨著矩陣階數的增加呈指數增加的,采用CPU單線程計算時所需計算時間也是呈指數增加。對于8000階矩陣乘法,直接采用CPU單線程計算的計算效率已經十分低下,無法滿足人們對大通量數據快速處理的要求。

      表1 CPU單線程計算不同階矩陣乘法所需時間

      采用CPU-OpenMP多線程并行計算將原來單線程的計算任務分配給多個CPU線程分工執(zhí)行,從而提高計算效率。表2列出了采用CPU-OpenMP八線程并行計算得到不同階矩陣乘法所需的計算時間??梢钥吹?,CPU-OpenMP八線程計算時間隨著矩陣階數的增加也呈指數級增加趨勢。然而,相對于CPU單線程計算,CPU-OpenMP八線程計算所需的計算時間明顯降低。由此可見,采用CPU-OpenMP多線程并行計算可顯著提升計算效率。

      下面我們采用GPU-CUDA并行技術計算不同階數的矩陣乘法。首先,在GPU(Device)的顯存上為計算矩陣分配內存空間;其次,將CPU(Host)上的矩陣數據復制到GPU顯存中,并在GPU上運行Kernel函數進行矩陣乘法運算。在本文所采用的CUDA C程序中,Kernel函數里的內存類型為Global。矩陣乘法計算結束后,把GPU顯存上存儲的計算結果復制到CPU內存上,釋放GPU顯存并統(tǒng)計計算時間。表3給出了采用GPU-CUDA并行技術計算不同階數矩陣相乘的計算時間。與表1和表2 對比可以發(fā)現,對于高階數的矩陣乘法(n >2000),GPU-CUDA所需的計算時間遠遠低于CPU單線程計算和CPU-OpenMP八線程計算。對于低階數的矩陣乘法(n =500),GPU-CUDA的計算時間與CPU單核計算時間相差不大,并且慢于CPU-OpenMP八線程計算時間。由此可見,采用GPU-CUDA并行技術對于具有較大的運算量的計算任務具有顯著的加速效果,但對于較小運算量的計算任務加速效果不明顯。

      為了能夠更好的展示和比較并行計算的加速效果,圖3給出了CPU-OpenMP八線程計算和GPU-CUDA計算相對于CPU單線程的計算加速比。其中,圖3(a)的縱坐標用線性表示,圖3(b)的縱坐標用指數表示,并且圖3(b)上標出了不同階數矩陣乘法的計算加速比。從圖3(a)可以看出,相對于不同階數的矩陣乘法,CPU-OpenMP八線程計算的加速比變化不大,基本在6左右,低于所采用的線程數目。從圖3(b)可以發(fā)現,隨著矩陣階數的增加,GPU-CUDA獲得的計算加速比顯著增大。當矩陣階數為n=8000時,GPU-CUDA的計算加速比達到了570倍以上,這樣的加速效果是相當可觀的。

      對比CPU單線程計算和CPU-OpenMP多線程并行計算的結果,發(fā)現兩種計算手段得到的矩陣數據是完全相同的,即CPU-OpenMP多線程并行計算不會產生計算誤差。然而,對比發(fā)現,采用GPU-CUDA得到的矩陣數據與CPU計算得到的結果有所差異,這可能是由于GPU與CPU 對于float浮點數協(xié)議的差異[6]。為了體現GPU-CUDA并行計算所帶來的誤差,我們對比了GPU-CUDA與CPU對不同階矩陣乘法的計算結果,并統(tǒng)計了最大相對誤差,其計算方式為RE=MAX{[(AB) -(AB) ]/(AB) },計算結果見表4??梢钥闯觯瑢τ诘碗A數的矩陣乘法(n=500),GPU-CUDA計算得到的矩陣數據誤差較大;對于其他階數的矩陣,GPU-CUDA計算得到的矩陣數據誤差較小,甚至為0(n=1000).結合圖3(b)給出的計算加速比對比圖,可以發(fā)現高階數矩陣乘法的計算更加適合用GPU-CUDA進行加速,此時加速比大且誤差較??;低階數矩陣乘法的計算選用GPU-CUDA加速時需慎重,因為GPU-CUDA可能會給出較大的計算誤差。因此,對于低階數矩陣乘法,宜選用CPU-OpenMP方法進行加速。

      3 結論

      本文分別采用CPU單線程、CPU-OpenMP多線程和GPU-CUDA并行計算技術,對不同階數的矩陣乘法進行計算并比較了計算時間。隨著矩陣階數的增加,CPU單線程所需的計算時間成線性增加。對于不同階數的矩陣乘法,CPU-OpenMP多線程計算都可以加快計算效率,計算加速比低于所采用的線程數目。GPU-CUDA的計算加速比隨矩陣階數的增加顯著增加。當矩陣階數為n=8000時,GPU-CUDA的計算加速比達到了570倍以上。相對于CPU單線程計算結果,CPU-OpenMP的計算結果沒有產生誤差,而GPU-CUDA計算結果會產生誤差。GPU-CUDA的最大相對誤差分析表明GPU-CUDA并行計算技術更加適合高階數的矩陣乘法的加速計算,而CPU-OpenMP更加適合低階數的矩陣乘法的加速計算。

      【參考文獻】

      [1]唐兵,Laurent BOBELIN,賀海武.基于MPI和OpenMP混合編程的非負矩陣分解并行算法[J].計算機科學,2017,44(03):51-54.

      [2]周漫,車欣.大規(guī)模稠密線性方程組求解的并行計算方法[J].信息與電腦(理論版),2016(11):88-89.

      [3]周海芳,高暢,方民權.基于CUBLAS和CUDA的MNF并行算法設計與優(yōu)化[J].湖南大學學報(自然科學版),2017,44(04):147-156.

      [4]Blaise Barney,OpenMP tutorials [M]:https://computing.llnl.gov/tutorials/openMP/.

      [5]NVIDIA,CUDA C programming guide[M].NVIDIA Corporation,2015:11.

      [6]遲學斌,王彥棢,王玨,劉芳.并行計算與實現技術[M]. 北京:科學出版社,2015.endprint

      猜你喜歡
      并行計算
      基于Hadoop的民航日志分析系統(tǒng)及應用
      軟件導刊(2017年1期)2017-03-06 00:10:08
      基于自適應線程束的GPU并行粒子群優(yōu)化算法
      云計算中MapReduce分布式并行處理框架的研究與搭建
      矩陣向量相乘的并行算法分析
      大經貿(2016年9期)2016-11-16 16:25:33
      并行硬件簡介
      不可壓NS方程的高效并行直接求解
      基于GPU的超聲場仿真成像平臺
      基于Matlab的遙感圖像IHS小波融合算法的并行化設計
      科技視界(2016年11期)2016-05-23 08:13:35
      大數據背景的IT平臺架構探索
      科技視界(2015年30期)2015-10-22 11:44:33
      基于枚舉的并行排序與選擇算法設計
      博罗县| 漯河市| 宜春市| 洪泽县| 谷城县| 安图县| 富锦市| 江陵县| 泌阳县| 加查县| 修武县| 青龙| 乡城县| 松潘县| 都昌县| 息烽县| 陇西县| 年辖:市辖区| 方正县| 澎湖县| 临桂县| 新晃| 上蔡县| 竹北市| 新晃| 曲靖市| 青神县| 新巴尔虎左旗| 福州市| 蒙山县| 二连浩特市| 湘潭市| 莫力| 丰都县| 深泽县| 久治县| 文化| 扬中市| 衡水市| 颍上县| 镇平县|