主要内容

gpuを使用た相关高速化化

gpuを,ををして相关高速高速化をを示し示しますますます。。相关相关ののの多く多く多くはは,,,大大大大规模ななななデータデータデータセットセットセットセットセットををを扱うこと平行计算工具箱™ののがです。どのどのどのどのががサポートれているかかリリース别のgpuサポート(并行计算工具箱)を参照しください。

はじめに

まず,使用マシンののののの基本情报を学习しますますgpuにににににににアクセスするするは,,,,,,,,,,,,,,,,,,,,,,,,

fprintf('基准测试GPU加速交叉相关。\ n');如果〜(parallel.gpu.gpudevice.isavailable)fprintf([['\ n \ t ** gpu不可用。停下来。** \ n');返回;别的dev = gpudevice;fprintf(...“ GPU检测到(%s,%d多处理器,计算能力%s)”,,,,...dev.name,dev.multiprocessorcount,dev.computeCapability);结尾
基准测试GPU加速互相关。检测到GPU(Titan XP,30个多处理器,计算能力6.1)

ベンチマーク机能

cpu用书かたははははにしててできる,,,,,ためためつのをををををををををと性能测定な注意必要必要ですある关数の実行実行要したた时间时间时间ををを测定测定测定测定测定するするににのののののののののののののののののののののののののののののののCPUののの性能は影响を与え与え。。。。。

3つの,,つのつのなるタイプ相互のベンチマークを行います。

単纯な相关のベンチマーク

最初のとして同じサイズのののつのつのベクトル构文构文构文xcorr(u,v)を使用相互されています。。実行実行に対するに対するに対するに対するに対するに対するに対する実行実行时间の比は,ベクトルののサイズサイズサイズ

fprintf('\ n \ n ***基准矢量 - 矢量交叉相关*** \ n \ n');fprintf('基准测试功能:\ n');类型('benchxcorrvec');fprintf('\ n \ n');尺寸= [2000 1E4 1E5 5E5 1E6];tc = zeros(1,numel(size));tg =零(1,numel(size));numruns = 10;为了s = 1:numel(尺寸);fprintf('运行%d元素的XCorr ... \ n',尺寸(S));delchar = repmat('\ b',1,numruns);a = rand(尺寸(S),1);b = rand(尺寸(S),1);tc(s)= benchxcorrvec(a,b,numruns);fprintf([delchar'\ t \ tcpu时间:%.2f ms \ n'],1000*tc(s));tg(s)= benchxcorrvec(gpuarray(a),gpuarray(b),numruns);fprintf([delchar'\ t \ tgpu时间:%.2f ms \ n'],1000*tg(s));结尾%绘制结果无花果=图;ax =轴(“父母”, 无花果);semilogx(AX,大小,TC./TG,'r* - ');Ylabel(斧头,'加速');Xlabel(ax,“向量大小”);标题(斧头,'XCorr的GPU加速度');drawnow;
***基准测试矢量矢量互相关***基准测试函数:函数t = benchxcorrvec(u,v,numruns)%用于基准xcorr与CPU和GPU上的向量输入基准。%版权2012 The Mathworks,Inc。TimeVec = Zeros(1,NumRuns);gdev = gpudevice;ii = 1:numRuns ts = tic;o = xcorr(u,v);%#ok  wait(gdev)timevec(ii)= toc(ts);fprintf('。');结束t = min(timevec);结束运行2000个元素的XCORR ... CPU时间:0.21 MS GPU时间:4.26 MS运行10000个元素的XCORR ... CPU时间:1.03 MS GPU时间:4.37 MS运行100000个元素的XCORT ... CPU时间... CPU时间:14.04 msGPU时间:6.28 ms运行500000元素的XCORR ... CPU时间:55.98 MS GPU时间:16.09 MS运行XCORR 1000000元素... CPU时间:169.00 MS GPU时间:25.60 ms

行列のの相互相关マークマーク

2番目构文行列行列构文构文xcorr(a)をを使用してて対相互互互相关れれすべてすべてののの相关相关からからなる大きな大きな大きな行列行列行列行列出力出力出力出力さささてててててててて比率は行列行列に対してプロットれて。。。

fprintf('\ n \ n ***基准矩阵列交叉相交*** \ n \ n');fprintf('基准测试功能:\ n');类型('benchxcorrmatrix');fprintf('\ n \ n');尺寸=地板(linspace(0,100,11));尺寸(1)= [];tc = zeros(1,numel(size));tg =零(1,numel(size));numruns = 10;为了s = 1:numel(尺寸);fprintf('运行A%D x%D矩阵... \ n'的XCorr(矩阵),尺寸(s),尺寸(s));delchar = repmat('\ b',1,numruns);a = rand(尺寸(S));tc(s)= benchxcorrmatrix(a,numruns);fprintf([delchar'\ t \ tcpu时间:%.2f ms \ n'],1000*tc(s));tg(s)= benchxcorrmatrix(gpuarray(a),numruns);fprintf([delchar'\ t \ tgpu时间:%.2f ms \ n'],1000*tg(s));结尾%绘制结果无花果=图;ax =轴(“父母”, 无花果);情节(ax,尺寸。^2,tc./tg,'r* - ');Ylabel(斧头,'加速');Xlabel(ax,“矩阵元素”);标题(斧头,'XCorr(矩阵)的GPU加速度');drawnow;
***基准测试矩阵列互相关***基准测试函数:函数t = benchxcorrmatrix(a,numruns)%用于基准xcorr用cpu和gpu上的矩阵输入基准xcort。%版权2012 The Mathworks,Inc。TimeVec = Zeros(1,NumRuns);gdev = gpudevice;对于ii = 1:numruns,ts = tic;o = xcorr(a);%#ok  wait(gdev)timevec(ii)= toc(ts);fprintf('。');结束t = min(timevec);End运行10 x 10矩阵的XCORR(矩阵)... CPU时间:0.18 ms GPU时间:5.00 ms运行XCorr(矩阵)20 x 20矩阵... CPU时间... CPU时间:0.48 ms GPU时间:4.83 ms运行30 x 30矩阵的XCORR(矩阵)... CPU时间:0.85 ms GPU时间:40 x 40矩阵的运行Xcorr(矩阵)4.84 ms cpu时间... CPU时间:3.38 ms GPU时间:5.57 ms运行XCORR(运行Xcorr(50 x 50矩阵的矩阵... CPU时间:5.60 ms GPU时间:5.22 ms运行XCorr(矩阵)60 x 60矩阵... CPU时间:8.49 ms GPU时间:5.39 ms运行XCORR(矩阵)(矩阵) of a 70 x 70 matrix... CPU time : 20.43 ms GPU time : 5.92 ms Running xcorr (matrix) of a 80 x 80 matrix... CPU time : 26.79 ms GPU time : 6.24 ms Running xcorr (matrix) of a 90 x 90 matrix... CPU time : 40.04 ms GPU time : 6.89 ms Running xcorr (matrix) of a 100 x 100 matrix... CPU time : 49.69 ms GPU time : 7.32 ms

2次元相互相关ベンチマークマーク

X Y Y Y Y YのYのととがががががががががががががががががががががとととととととととととをををを使用してて相互さされ。。。。。。。。。ののののサイズ加速ののがプロットれててます。。

fprintf('\ n \ n ***基准2-D交叉相交*** \ n \ n');fprintf('基准测试功能:\ n');类型('benchxcorr2');fprintf('\ n \ n');尺寸= [100,200,500,1000,1500,2000];tc = zeros(1,numel(size));tg =零(1,numel(size));numruns = 4;a = rand(100);为了s = 1:numel(尺寸);fprintf('运行100x100矩阵和%d x%d矩阵的XCORR2 ... \ n',尺寸(s),尺寸(s));delchar = repmat('\ b',1,numruns);b = rand(尺寸(S));tc(s)= benchxcorr2(a,b,numruns);fprintf([delchar'\ t \ tcpu时间:%.2f ms \ n'],1000*tc(s));tg(s)= benchxcorr2(gpuarray(a),gpuarray(b),numruns);fprintf([delchar'\ t \ tgpu时间:%.2f ms \ n'],1000*tg(s));结尾%绘制结果无花果=图;ax =轴(“父母”, 无花果);semilogx(ax,大小。^2,tc./tg,'r* - ');Ylabel(斧头,'加速');Xlabel(ax,“矩阵元素”);标题(斧头,'XCorr2的GPU加速度');drawnow;fprintf('\ n \ nbenchmarking完成。\ n \ n');
***基准测试2-D交叉相关***基准测试函数:函数t = benchxcorr2(x,y,numruns)%用于基准在CPU和GPU上基准XCORR2。%版权2012 The Mathworks,Inc。TimeVec = Zeros(1,NumRuns);gdev = gpudevice;对于ii = 1:numruns,ts = tic;o = xcorr2(x,y);%#ok  wait(gdev)timevec(ii)= toc(ts);fprintf('。');结束t = min(timevec);端运行100x100矩阵和100 x 100矩阵的XCORR2 ... CPU时间:20.35 ms GPU时间:6.96 ms运行100x100矩阵的XCORR2和200 x 200矩阵... CPU时间...100x100矩阵和500 x 500矩阵的XCORR2 ... CPU时间:125.23 MS GPU时间:39.67 MS运行100x100矩阵的XCORR2和1000 x 1000矩阵... CPU时间... a 100x100 matrix and 1500 x 1500 matrix... CPU time : 788.38 ms GPU time : 165.04 ms Running xcorr2 of a 100x100 matrix and 2000 x 2000 matrix... CPU time : 1523.05 ms GPU time : 279.55 ms Benchmarking completed.

gpuにより化さたそのの信号关数关数

gpu上実行そののの处理关数がいくついくつかありありこれらこれらこれらののの关数关数关数にににににににはは,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ますgpuによってによって高速された信号处理关数すべての一覧についてについては,,,,,,,,,,,,,,,,,,,,,,gpuアルゴリズムの化の节参照して。。

参考

(并行计算工具箱)|(并行计算工具箱)|