日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab 使用GPU加速 转载

發布時間:2023/12/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab 使用GPU加速 转载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在matlab中使用GPU加速,來加速矩陣運算。

首先如前面所說,并不是所有GPU都能在maltab中進行加速的,貌似只有NVDIA的顯卡可以吧。

硬件:GeForce GTX 980

軟件:Matlab 2015a ?(Matlab 2012以后的版本才帶有GPU加速的工具箱)

下面開始介紹怎么玩GPU加速

第一步:在matlab命令窗口,運行gpuDevice,查看自己的顯卡是否具備GPU加速功能

gpuDevice

正常情況下matlab會輸出如下結果代表具備GPU加速功能:

CUDADevice with properties:Name: 'GeForce GTX 980'Index: 1ComputeCapability: '5.2'SupportsDouble: 1DriverVersion: 7.5000ToolkitVersion: 6.5000MaxThreadsPerBlock: 1024MaxShmemPerBlock: 49152MaxThreadBlockSize: [1024 1024 64]MaxGridSize: [2.1475e+09 65535 65535]SIMDWidth: 32TotalMemory: 4.2950e+09AvailableMemory: 3.3203e+09MultiprocessorCount: 16ClockRateKHz: 1380000ComputeMode: 'Default'GPUOverlapsTransfers: 1KernelExecutionTimeout: 1CanMapHostMemory: 1DeviceSupported: 1DeviceSelected: 1

第二步:CPU和GPU之間的數據交換,大致有如下幾個函數和功能:

? ? ? ? ? (1)、將數據從CPU中搬入GPU,函數:gpuArray,用法 M = gpuArray(M);

? ? ? ? ? (2)、在GPU中計算完成后,將數據搬出到CPU存儲,函數:gather,用法M=gather(M)。

下面給大家看看最簡單的用法以及處理同樣矩陣運算時的時間對比:

clear all clc M = rand(2000,2000); % 生成一個隨機矩陣 tic [A1,B1] = eig(M); % 求該隨機矩陣的特征值和特征向量 t1=toc tic M = gpuArray(M); % 將數據從CPU中搬到GPU [A2,B2] = eig(M); % 求特征值和特征向量 A2 = gather(A2); % 將數據從GPU中搬到CPU t2 = toc

輸出結果(運行時間對比):

t1 = 14.1483 t2 = 9.1567

總結:雖然加速不是特別明顯,不過還是非常給力的,需要說明的是,一般的GPU對于單精度型的數據運算加速更明顯一點,因此我們在編寫代碼時,最好能夠將數據從double型轉換為single型,即M=single(M),然后在使用M=gpuArray(M),將數據搬遷到GPU進行計算,下面看看轉換為單精度型后的時間對比:

clear all clc M = rand(2000,2000); % 生成一個隨機矩陣 tic [A1,B1] = eig(M); % 求該隨機矩陣的特征值和特征向量 t1=toctic M = single(M); % 將數據轉換為單精度型 M = gpuArray(M); % 將數據從CPU中搬到GPU [A2,B2] = eig(M); % 求特征值和特征向量 A2 = gather(A2); % 將數據從GPU中搬到CPU t2 = toc

運行結果:

t1 = 14.8332 t2 = 5.0963

GPU對eig和svd進行加速,和cpu運行時間對比

clear all A = rand(2000,2000); tic A1 = gpuArray(single(A)); [U,S,V] = svd(A1,'econ'); A2 = U*S*V'; A3 = gather(A2); t = toc tic [U1,S1,V1] = svd(A,'econ'); A4 = U1*S1*V1'; t2 = tocerror = norm(A3-A4,'fro')tic A1 = gpuArray(single(A)); [vv,dd] = eig(A1); t3 = toc

結果:

t = 3.1564 t2 = 7.1644 error = 0.0032 t3 = 5.2244 t4 = 17.6389

  

 

是不是加速更明顯了呢?  

注:1、單精度型初始化矩陣函數例:X=rand(10,'single'); ?%定義在CPU上的一個10x10的隨機初始化數組 

? ? ? 2、直接在GPU中初始化矩陣例:GX=rand(10,'gpuArray'); ??%直接在GPU設備上隨機初始化一個10x10的數組 

  3、判斷數據DATA是否存在于GPU內存中例:TF=existOnGPU(DATA)

? ? ? 4、計算效率統計例:t=gputimeit(F,N)???????? %返回執行F操作N次所需的時間,當N=1時可以缺省 

轉載于:https://www.cnblogs.com/phyzrx/p/7475201.html

總結

以上是生活随笔為你收集整理的Matlab 使用GPU加速 转载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。