MATLAB软件在GPU功能

MATLAB软件与gpuArray参数的函数

数百个功能的MATLAB®如果您提供通用论点。

A=gpuArray([1 0 1;-1-2 0;0 1-1]);e=eig(A);

当您使用至少一个gpuArray作为数据输入参数调用这些函数时,该函数将在GPU上执行。该函数生成一个gpuArray作为结果,除非返回的MATLAB数据更合适(例如,尺寸). 可以在同一个函数调用中使用gpuArray和MATLAB数组混合输入。要了解函数何时在GPU或CPU上运行的详细信息,请参阅特殊条件gpuArray输入. 启用GPU的功能包括离散傅里叶变换(FFT),矩阵乘法(mtimes),左矩阵分裂(mldivide),以及其他数百个。有关详细信息,请参见检查GPU支持的功能金宝app

检查GPU支持的功能金宝app

如果MATLAB功能有gpuArrays支持,您可金宝app以参考它的功能页面上附加GPU使用信息。看到GPU阵列在里面扩展功能在功能页面的末端部分。

小费

对于MATLAB的过滤列表的支持GPU阵列,请参见金宝app功能列表(GPU-阵列)

几个MATLAB工具箱包括内置GPU支持与功能。金宝app要查看的所有功能列出这些工具箱的支持gpuArrays,使用链接如下表所示。金宝app在预警指标列表功能有局限性或使用注意事项具体到在GPU上运行的功能。您可以查看使用说明和限制了所有的功能页面的扩展功能部分。有关更新个人启用GPU的功能的信息,请参阅发行说明。

工具箱名称 与gpuArray支持功能列表金宝app
MATLAB软件 与gpuArray支持功能金宝app
统计和机器学习工具箱™ 与gpuArray支持功能金宝app
图像处理工具箱™ 与gpuArray支持功能金宝app
深度学习工具箱™

与gpuArray支持功能金宝app

*(也可以看看深度学习与GPU的

计算机视觉工具箱™ 与gpuArray支持功能金宝app
通讯工具箱™ 与gpuArray支持功能金宝app
讯号处理工具箱™ 与gpuArray支持功能金宝app
音频工具箱™ 与gpuArray支持功能金宝app
小波工具箱™ 与gpuArray支持功能金宝app
曲线拟合工具箱™ 与gpuArray支持功能金宝app

您可以从所有MathWorks的浏览G金宝appPU支持的功能®下载188bet金宝搏产品通过以下链接:GPU支金宝app持的功能。另外,您也可以按产品进行过滤。在帮助栏,单击功能。在功能列表中,浏览左窗格中选择一个产品,例如,MATLAB。在左侧窗格的底部,选择GPU阵列。如果选择一个产品,没有启用GPU的功能,那么GPU阵列过滤不可用。

深度学习与GPU的

对于深度学习工具箱中的许多功能,GPU的支持是自动的,如果你有一个合适的GPU和并行计算工具箱™。金宝app你并不需要将数据转换为gpuArray。以下是,默认情况下,在GPU(如果可用)运行函数的不完全名单。

有关在深学习工具箱自动GPU支持的更多信息,请参阅金宝app深度学习与大数据在GPU和并行(深学习工具箱)。

对于先进的网络和工作流,使用网络定义为数据链路网络对象或模型函数,将数据转换为gpuArray。使用与gpuArray支持功能金宝app运行在GPU上的定制培训循环或预测。

检查或选择一个GPU

如果你有一个GPU,那么MATLAB会自动将其用于GPU计算。您可以使用检查你的GPU学生功能。如果你有多个GPU,那么你可以使用学生选择其中的一个,或者使用多个GPU与并行库。对于一个示例,请参见识别并选择一个GPU使用多个GPU在并行池. 要检查是否支持GPU,请参阅金宝appGPU发金宝app布支持

对于深度学习,MATLAB提供了多GPU并行自动支持。金宝app看到深度学习与MATLAB在多GPU(深学习工具箱)。

与使用GPU功能的MATLAB

这个例子说明了如何使用启用GPU-功能的MATLAB与gpuArrays操作。您可以检查使用的GPU的性能学生功能。

学生
ans=cudDevice,带属性:Name:'GeForce GTX 1080'索引:1可计算性:'6.1'支持:1驱动版本:10.1000 toolkit版本:10.1000 max金宝appshreadsperblock:1024 MaxShmemPerBlock:49152 maxshreadblocksize:[1024 1024 64]MaxGridSize:[2.1475e+09 65535 65535]SIMDWidth:32总内存:8.5899e+09可用内存:6.9012e+09多处理器计数:20时钟频率kHz:1733500计算机代码:“默认”GPUOverlapsTransfers:1内核执行超时:1 CanMapHostMemory:1设备支持:1设备选择:1

创建重复的值从-15至15将其传送到GPU,并创建一个gpuArray一个行向量,使用通用功能。

X=[-15:15 0-15:15 0-15:15];gpuX=gpuArray(X);whos平均用户体验
名称大小字节类属性gpuX 1x95 4 gpuArray

与gpuArrays操作,使用任何支持GPU-MATLAB功能。MATLAB自动运行在GPU上计算。欲了解更多信息,请参阅在GPU上运行MATLAB功能. 例如,使用诊断expm国防部回合ABSfliplr

gpuE = expm(DIAG(gpuX,-1))* expm(DIAG(gpuX,1));gpuM = MOD(圆(ABS(gpuE)),2);gpuF = gpuM + fliplr(gpuM);

绘制的结果。

于imagesc(gpuF);颜色表(翻转(灰色));

如果需要从GPU传输数据,请使用收集。收集回来的CPU可能是昂贵的,并且通常是没有必要的,除非你需要与不支持gpuArray函数使用你的结果。金宝app

导致=聚集(gpuF);谁是结果
名称大小字节类属性的结果96x96的73728双

一般有可能在结果的差异,如果你的CPU上运行的代码,由于数值精度和GPU和CPU之间的差异算法。CPU和GPU的答案都同样有效浮点近似真实分析结果,计算期间具有经受了不同的舍入。在这个例子中,结果是整数,回合消除舍入错误。

锐化图像使用GPU

此示例演示如何使用gpuarray和启用GPU的函数锐化图像。

读取图像,并利用其发送给GPU通用功能。

图像=gpuArray(imread('胡椒.png'));

将图像转换为双倍,并应用卷积来获得梯度图像。然后,使用渐变图像,将图像锐化为

DIMAGE = im2double(图像);梯度= CONVN(DIMAGE,酮(3)./ 9,'相同')-convn(尺寸,1(5)。/25,'相同');量= 5;锐化= DIMAGE +量*梯度。

调整大小,打印并比较原始图像和锐化图像。

imshow(imresize([尺寸,锐化],0.7));标题(“原始图像(左)与锐化后的图像(右)”);

使用启用GPU的函数计算Mandelbrot集

这个例子展示了如何使用启用GPU的MATLAB函数来计算一个著名的数学结构:Mandelbrot集。使用学生功能。

定义参数。曼德尔布罗算法遍历的实部和虚部的网格。下面的代码定义的迭代中,网格尺寸和网格限值的数量。

maxIterations = 500;gridSize = 1000;XLIM = [-0.748766713922161,-0.748766707771757];ylim = [0.123640844894862,0.123640851045266];

您可以使用通用功能将数据传送到GPU,并创建一个通用,也可以直接在GPU上创建数组。通用提供可用于创建数据数组的许多函数的GPU版本,例如linspace。欲了解更多信息,请参阅创建GPU直接阵列

X = gpuArray.linspace(XLIM(1),XLIM(2),gridSize);Y = gpuArray.linspace(ylim(1),ylim(2),gridSize);谁是Xÿ
名称大小字节类属性x 1x1000 4 gpuArray y 1x1000 4 gpuArray

许多MATLAB功能支持gpuArrays。金宝app当您提供一个gpuArray参数到任何支持GPU功能,该功能在GPU上自动运行。欲了解更多信息,请参阅在GPU上运行MATLAB功能. 为算法创建一个复杂的网格,并创建数组计数为了结果。若要直接在GPU上创建此数组,请使用一个工作,并指定'gpuArray'

[XGRID,YGRID] = meshgrid(X,Y);Z0 =络合物(XGRID,YGRID);计数=酮(大小(Z0),'gpuArray');

下面的代码使用启用GPU的函数实现Mandelbrot算法。因为代码使用gpuarray,所以计算在GPU上进行。

Z = Z0;对于N = 0:maxIterations Z = Z * Z + Z 0;内部= ABS(Z)<= 2;计数=计数+内部;结束计数= LOG(计数);

当计算完成后,绘制的结果。

图像c(x,y,count)颜色映射([jet();flipud(jet());0 0 0]);轴

与一个GPU稀疏矩阵工作

以下函数支持稀疏gpuarray。金宝app

ABS角度BICG BICGSTAB小区CGS classUnderlying连词ctranspose deg2rad诊断结束的expm1找到修复地板全GMRES gpuArray.speye IMAG isaUnderlying isdiag的isEmpty
ISEQUAL isequaln isfloat isinteger ISLOGICAL ISNUMERIC伊斯雷尔issparse istril istriu长度log1p LSQR减去mtimes为ndims nextpow2 NNZ非零范数numel nzmax PCG
加上QMR rad2deg真正realsqrt圆形标志尺寸稀疏spfun spones sprandsym开方和TFQMR倍(。*)跟踪转TRIL triu UMINUS UPLUS

您可以通过调用使用gpuArray输入,或通过调用通用具有稀疏输入。例如,

X = [0 1 0 0 0;0 0 0 0 1]
0 1 0 0 0 0 0 0 0 1
S =稀疏(x)的
(1,2)1(2,5)1
G = gpuArray(S);%G是稀疏gpuArraygt=转置(g);%GT是一个稀疏gpuArrayf =完全(GT)%f是一个完整的gpuArray
0 0 1 0 0 0 0 0 0 1

稀疏gpuArrays不支持索引。金宝app取而代之的是,使用来定位该阵列和其行和列索引的非零元素。然后,替换你想要的值,并建立一个新的稀疏gpuArray。

与一个GPU复数起作用

如果在GPU上运行的函数的输出可能是复杂的,你必须明确指定其输入参数一样复杂。这适用于通用或调用由运行的代码中调用的函数arrayfun

例如,如果创建一个gpuArray可能有负面因素,使用G=gpuArray(复合物(p)),那么你就可以成功执行SQRT(G)

或者,在一个函数传递给arrayfun如果X是实数的向量,并且一些元件具有负值,平方英尺(x)产生一个错误;相反,你应该叫sqrt(复合物(x))

如果结果是一个复杂数据的gpuArray,并且所有的虚部都为零,那么这些部分将被保留,并且数据保持复杂。使用时可能会产生影响分类是真实的,等等。

下表列出了可能返回的复杂数据,有超过其输出保持实际的输入范围内沿的功能。

功能 输入范围为真正的输出
ACOS(x)的 abs(x)<=1
ACOSH(x)的 X> = 1
acoth(x)的 绝对值(x)>=1
acsc(x) 绝对值(x)>=1
ASEC(x)的 绝对值(x)>=1
asech(x)的 0 <= X <= 1
ASIN(x)的 abs(x)<=1
ATANH(x)的 abs(x)<=1
日志(X) X> = 0
log1p(x)的 X> = -1
对数10(x) X> = 0
对数2(x) X> = 0
功率(X,Y) X> = 0
reallog(x)的 X> = 0
realsqrt(x)的 X> = 0
平方英尺(x) X> = 0

特殊条件gpuArray输入

启用GPU的功能仅在数据位于GPU上时在GPU上运行。例如,以下代码在GPU上运行,因为数据(第一个输入)在GPU上:

>>总和(gpuArray(魔(10)),2);
但是,此代码不在GPU上运行,因为第一个输入的数据不在GPU上:
>>和(魔法(10),gpuArray(2));
如果你的输入参数gpuArrays包含CPU上的项目,如尺寸,缩放因子,或迭代次数,那么功能可采集他们并计算。功能只在当实际数据参数是gpuArrays在GPU上运行。

致谢

岩浆是利用GPU加速的线性代数例程库。并行计算工具箱中为gpuarray实现的线性代数函数利用MAGMA实现了高性能和高精度。

也可以看看

|

相关的例子

更多关于