主要内容

与gpu加速相关

这个例子展示了如何使用GPU加速互相关。许多相关问题涉及大数据集和使用GPU可以更快解决。这个例子需要并行计算工具箱™用户许可。指GPU计算的需求(并行计算工具箱)看看支持gpu。金宝app

介绍

先学习一些基本的GPU的信息在你的机器。访问GPU,使用并行计算工具。

流(“基准GPU-accelerated互相关。\ n”);如果~ (parallel.gpu.GPUDevice.isAvailable)流([' \ n \ t * * GPU不可用。停止。* * \ n”]);返回;其他的dev = gpuDevice;流(检测到GPU (% s, % d多处理器计算能力% s)”,dev.Name、dev.MultiprocessorCount dev.ComputeCapability);结束
基准测试GPU-accelerated互相关。检测到GPU(泰坦Xp, 30多处理器计算能力6.1)

基准测试函数

因为CPU可以编写的代码移植到运行在GPU,一个函数可用于基准CPU和GPU。然而,由于代码从CPU、GPU执行异步测量性能时应采取特别的预防措施。在测量时间来执行一个函数之前,确保所有的GPU处理完成了执行设备上的“等待”的方法。这种额外的调用将对CPU性能没有影响。

这个例子基准三种不同类型的互相关。

基准简单的互相关

在第一种情况下,两个向量相等规模的阐述使用语法xcorr (u, v)。CPU执行时间比GPU执行时间是绘制矢量的大小。

流(' \ n \ n * * *基准测试向量互相关* * * \ n \ n”);流(“基准测试函数:\ n”);类型(“benchXcorrVec”);流(“\ n \ n”);大小= [2000 1 e4 e5 5 e5 1 e6);tc = 0(1,元素个数(大小));tg = 0(1,元素个数(大小));numruns = 10;s = 1:元素个数(大小);流(的运行xcorr % d元素…\ n”、大小(s));delchar = repmat (“\ b”1、numruns);a =兰德(大小(s), 1);b =兰德(大小(s), 1);tc (s) = benchXcorrVec (a, b, numruns);流([delchar' \ t \ tCPU时间:%。2 f \ n '女士),1000 * tc (s));tg (s) = benchXcorrVec (gpuArray (a), gpuArray (b), numruns);流([delchar' \ t \ tGPU时间:%。2 f \ n '女士),1000 * tg (s));结束%绘制结果无花果=图;ax =轴(“父”图);semilogx (ax、大小tc. / tg,“r * - - - - - -”);ylabel (ax,“加速”);包含(ax,向量的大小的);标题(ax,“XCORR GPU加速”);drawnow;
* * * * * *基准测试向量互相关基准测试函数:函数t = benchXcorrVec (u, v, numruns) %用于基准xcorr与向量输入CPU和GPU。% 2012年版权MathWorks公司timevec = 0 (1, numruns);gdev = gpuDevice;2 = 1:numruns ts =抽搐;o = xcorr (u, v);% #好< NASGU >等待(gdev) timevec (ii) = toc (ts);流('。');结束t = min (timevec);2000年底运行xcorr元素……CPU时间:0.21女士GPU时间:4.26运行xcorr女士的10000个元素…… CPU time : 1.03 ms GPU time : 4.37 ms Running xcorr of 100000 elements... CPU time : 14.04 ms GPU time : 6.28 ms Running xcorr of 500000 elements... CPU time : 55.98 ms GPU time : 16.09 ms Running xcorr of 1000000 elements... CPU time : 169.00 ms GPU time : 25.60 ms

基准测试矩阵列互相关

在第二种情况下,一个矩阵的列是成对地阐述产生一个大矩阵输出的相关性使用语法xcorr (a)。CPU执行时间比GPU执行时间策划反对矩阵A的大小。

流(' \ n \ n * * *基准矩阵列互相关* * * \ n \ n”);流(“基准测试函数:\ n”);类型(“benchXcorrMatrix”);流(“\ n \ n”);大小=地板(linspace(0100年11));大小(1)= [];tc = 0(1,元素个数(大小));tg = 0(1,元素个数(大小));numruns = 10;s = 1:元素个数(大小);流(“奔跑xcorr(矩阵)的% d x % d矩阵…\ n '、大小(s)、大小(s));delchar = repmat (“\ b”1、numruns);一个=兰德(大小(s));tc (s) = benchXcorrMatrix (a, numruns);流([delchar' \ t \ tCPU时间:%。2 f \ n '女士),1000 * tc (s));tg (s) = benchXcorrMatrix (gpuArray (a), numruns);流([delchar' \ t \ tGPU时间:%。2 f \ n '女士),1000 * tg (s));结束%绘制结果无花果=图;ax =轴(“父”图);情节(ax,大小。^ 2,tc. / tg,“r * - - - - - -”);ylabel (ax,“加速”);包含(ax,矩阵元素的);标题(ax,GPU加速的XCORR(矩阵));drawnow;
互相关* * * * * *基准矩阵列基准测试函数:函数t = benchXcorrMatrix (A, numruns) %用于基准xcorr与矩阵输入CPU和GPU。% 2012年版权MathWorks公司timevec = 0 (1, numruns);gdev = gpuDevice;2 = 1:numruns, ts =抽搐;o = xcorr(一个);% #好< NASGU >等待(gdev) timevec (ii) = toc (ts);流('。');结束t = min (timevec);结束运行xcorr 10 x 10矩阵(矩阵)……CPU时间:0.18女士GPU时间:5.00 ms运行xcorr矩阵(矩阵)20 x 20… CPU time : 0.48 ms GPU time : 4.83 ms Running xcorr (matrix) of a 30 x 30 matrix... CPU time : 0.85 ms GPU time : 4.84 ms Running xcorr (matrix) of a 40 x 40 matrix... CPU time : 3.38 ms GPU time : 5.57 ms Running xcorr (matrix) of a 50 x 50 matrix... CPU time : 5.60 ms GPU time : 5.22 ms Running xcorr (matrix) of a 60 x 60 matrix... CPU time : 8.49 ms GPU time : 5.39 ms Running xcorr (matrix) 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

基准测试的二维互相关

最后,两个矩阵,X和Y,交叉相关使用xcorr2 (X, Y)。允许X是Y固定的大小而有所不同。加速是策划反对第二个矩阵的大小。

流(' \ n \ n * * *基准测试二维互相关* * * \ n \ n”);流(“基准测试函数:\ n”);类型(“benchXcorr2”);流(“\ n \ n”);大小= (100,200,500,1000,1500,2000];tc = 0(1,元素个数(大小));tg = 0(1,元素个数(大小));numruns = 4;一个=兰德(100);s = 1:元素个数(大小);流(“奔跑xcorr2 100 x100矩阵和% d x % d矩阵…\ n '、大小(s)、大小(s));delchar = repmat (“\ b”1、numruns);b =兰德(大小(s));tc (s) = benchXcorr2 (a, b, numruns);流([delchar' \ t \ tCPU时间:%。2 f \ n '女士),1000 * tc (s));tg (s) = benchXcorr2 (gpuArray (a), gpuArray (b), numruns);流([delchar' \ t \ tGPU时间:%。2 f \ n '女士),1000 * tg (s));结束%绘制结果无花果=图;ax =轴(“父”图);semilogx (ax,大小。^ 2,tc. / tg,“r * - - - - - -”);ylabel (ax,“加速”);包含(ax,矩阵元素的);标题(ax,“XCORR2 GPU加速”);drawnow;流(' \ n \ nBenchmarking完成。\ n \ n”);
* * * * * *基准测试二维互相关基准测试函数:函数t = benchXcorr2 (X, Y, numruns) %用于基准xcorr2 CPU和GPU。% 2012年版权MathWorks公司timevec = 0 (1, numruns);gdev = gpuDevice;2 = 1:numruns, ts =抽搐;o = xcorr2 (X, Y);% #好< NASGU >等待(gdev) timevec (ii) = toc (ts);流('。');结束t = min (timevec);结束运行xcorr2 100 x100矩阵和100 x 100矩阵……CPU时间:20.35女士GPU时间:6.96运行xcorr2女士100 x100矩阵和200 x 200矩阵…… CPU time : 42.87 ms GPU time : 11.72 ms Running xcorr2 of a 100x100 matrix and 500 x 500 matrix... CPU time : 125.23 ms GPU time : 39.67 ms Running xcorr2 of a 100x100 matrix and 1000 x 1000 matrix... CPU time : 386.59 ms GPU time : 88.46 ms Running xcorr2 of 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上运行。这些函数包括fft、传输线、conv过滤器,fftfilt等等。在某些情况下,可以实现大的加速度相对于CPU。GPU加速信号处理函数的完整列表,查看GPU加速算法部分的信号处理工具箱™文档。

另请参阅

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