主要内容

马铃薯GPU上的功能

马铃薯函数gpuarray参数

Matlab中的数百个功能®如果您提供a,则其他工具箱在GPU上自动运行GPUArray.争论。

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

每当您称之为至少一个GPUARRAY作为数据输入参数的任何这些函数时,都会在GPU上执行该函数。除非返回MATLAB数据更合适,否则该函数会产生GPUARRAY(例如,大小).可以在同一个函数调用中使用gpuArray和MATLAB数组混合输入。要了解更多关于函数在GPU或CPU上运行的信息,请参见GPUArray输入的特殊条件.支持GPU的功能包括离散傅里叶变换(FFT.),矩阵乘法(m),左矩阵司(莫德利维)和数百人。有关更多信息,请参见检查GPU支持的功能万博1manbetx

检查GPU支持的功能万博1manbetx

如果一个MATLAB函数支持gpuArrays,您万博1manbetx可以在其功能页面查询更多的GPU使用信息。看到GPU阵列在里面扩展能力部分位于函数页的末尾。

提示

对于支持GPU阵列的MATLAB函数的过滤列表,请参阅万博1manbetx功能列表(GPU-arrays)

几个MATLAB工具箱包括带内置GPU支持的功能。万博1manbetx要查看支持GPUArrays的这些工具箱中所有函数的列表,请使用下表中的链接。万博1manbetx具有警告指示符的列表中的函数具有特定于在GPU上运行功能的限制或使用说明。您可以检查“功能参考”页面的扩展功能部分中的使用说明和限制。有关启用个人GPU功能的更新的信息,请参阅发行说明。

工具箱名称 支持gpuArray的函数列表万博1manbetx GPU特定文件
马铃薯 使用GPUArray支持万博1manbetx
统计和机器学习工具箱™ 使用GPUArray支持万博1manbetx(统计学和机器学习工具箱)
图像处理工具箱™ 使用GPUArray支持万博1manbetx(图像处理工具箱) GPU计算(图像处理工具箱)
深度学习工具箱™

使用GPUArray支持万博1manbetx(深度学习工具箱)

*(参见深入学习GPU

计算机视觉工具箱™ 使用GPUArray支持万博1manbetx(计算机视觉工具箱) GPU代码生成和加速度(计算机视觉工具箱)
Communications Toolbox™ 使用GPUArray支持万博1manbetx(通讯工具箱) 代码生成和加速支持万博1manbetx(通讯工具箱)
信号处理工具箱™ 使用GPUArray支持万博1manbetx(信号处理工具箱) 代码生成和GPU支持万博1manbetx(信号处理工具箱)
音频工具箱™ 使用GPUArray支持万博1manbetx(音频工具箱) 代码生成和GPU支持万博1manbetx(音频工具箱)
小波工具箱™ 使用GPUArray支持万博1manbetx(小波工具箱) 代码生成和GPU支持万博1manbetx(小波工具箱)
曲线拟合工具箱™ 使用GPUArray支持万博1manbetx(曲线拟合工具箱)

您可以从所有MathWorks浏览支持万博1manbetxGPU支持的功能®s manbetx 845产品在以下链接:GPU支万博1manbetx持的功能.或者,您可以按产品过滤。在这一点帮助栏,点击功能.在“函数”列表中,浏览左窗格以选择产品,例如Matlab。在左窗格的底部,选择GPU阵列.如果选择没有启用GPU的功能的产品,那么GPU阵列过滤器不可用。

深入学习GPU

对于深度学习工具箱中的许多功能,如果您有合适的GPU和并行计算工具箱™,GPU支持是自动的。万博1manbetx您无需将数据转换为GPUArray。以下是默认情况下的非详尽函数列表,如果可用则在GPU上运行。

有关在深度学习工具箱中的自动GPU支持的更多信息,请参阅万博1manbetxgpu和并行的大数据深度学习(深度学习工具箱)

对于使用定义为的网络的高级网络和工作流程dlnetwork.(深度学习工具箱)对象或模型功能,将数据转换为GPUArray。用使用GPUArray支持万博1manbetx(深度学习工具箱)在GPU上运行自定义培训循环或预测。

检查或选择GPU

如果你有一个GPU, MATLAB会自动使用它进行GPU计算。您可以检查您的GPU使用GPudevice.函数。如果您有多个GPU,那么您可以使用GPudevice.选择其中一个,或使用具有并行池的多个GPU。例如,看到识别并选择GPU设备并行池中使用多个gpu.要检查您的GPU是否被支持,请参见万博1manbetxGPU通万博1manbetx过发布支持

对于深度学习,MATLAB为多个gpu提供自动并行支持。万博1manbetx看到基于MATLAB的多gpu深度学习(深度学习工具箱)

使用matlab函数与gpu

这个例子展示了如何使用支持gpu的MATLAB函数来操作gpuArrays。您可以检查您的GPU属性使用GPudevice.函数。

GPudevice.
ANS =带有属性的Cudadevice:名称:'GeForce GTX 1080'索引:1 Computapapabity:'6.1'支持DOUPE:1驱动程序:10.1000工具包:万博1manbetx101000 MAXSHREADSPERCLOCK:1024 MAXSHMEMPERBLOCK:49152 MAXTHREADBLOCKSIZE:[1024 1024 64] MAXGRIDSIZE:[2.1475E + 0965535 65535] SIMDWIDTH:32 TotalMemory:8.5899E + 09可用性:6.9012E + 09多处理器:1733500 CompleMode:'默认'GPuoverLapStransfers:1 KernelexecutionTimeout:1 CanmaphostMemory:1 DemableOpported:1万博1manbetx

创建一个行向量,重复从-15到15的值。要将其传输到GPU并创建GPUArray,请使用GPUArray.函数。

X = [-15:15 0 -15:15 0 -15:15];gpuX = gpuArray (X);谁gpuX
名称大小字节类属性gpux 1x95 4 gpuarray

要使用GPUARRASTED,请使用启用任何GPU的MATLAB功能。MATLAB自动在GPU上运行计算。有关更多信息,请参见在GPU上运行MATLAB函数.例如,使用组合诊断EXPM.摩擦腹肌, 和Pliplr.

GPUE = EXPM(DIAG(GPUX,-1))* EXPM(DIAG(GPUX,1));gpum = mod(圆形(abs(abs(abs)),2);gpuf = gpum + fliplr(gpum);

绘制结果。

ImageC(GPUF);Colormap(翻转(灰色));

如果需要将数据从GPU传输回来,请使用收集.收集回CPU可能是昂贵的,并且通常没有必要,除非您需要使用不支持GPUARRAY的函数使用结果。万博1manbetx

结果=聚集(GPUF);谁结果
Name Size Bytes Class Attributes result 96x96 73728 double

通常,如果您在CPU上运行CPU的代码,则可能存在差异,因为GPU和CPU之间的数值精度和算法差异。对CPU和GPU的答案是对真实分析结果的同等有效的浮点近似,在计算期间经过不同的圆形OFF。在此示例中,结果是整数和消除四舍五入错误。

使用GPU锐化图像

此示例显示如何使用GPUArrays和支持GPU的功能锐化图像。

读取图像,并将其发送到GPU使用GPUArray.函数。

image = gpuarray(imread('peppers.png'));

将图像转换为双精度,并应用卷积来获得梯度图像。然后,利用梯度图像,将图像锐化一个因子数量

dimage = im2double(图片);梯度= convn (dimage,(3)。/ 9,'相同的') -  Convn(Dimage,One(5)./ 25,'相同的');数量= 5;锐化=图像+数量。*梯度;

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

imshow(imresize([尺寸,削尖],0.7));标题('原始图像​​(左)与锐化图像(右)');

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

此示例显示了如何使用启用GPU的MATLAB函数来计算众所周知的数学结构:Mandelbrot Set。使用该GPU检查您的GPUGPudevice.函数。

定义参数。Mandelbrot算法在实部和虚部组成的网格上迭代。下面的代码定义了迭代次数、网格大小和网格限制。

最大= 500;gridsize = 1000;XLIM = [-0.748766713922161,-0.7487667077771757];ylim = [0.12364084894862,0.123640851045266];

你可以使用GPUArray.将数据传输到GPU并创建一个功能GPUArray.,也可以直接在GPU上创建阵列。GPUArray.提供GPU版本的许多功能,您可以使用这些功能创建数据阵列,例如Linspace..有关更多信息,请参见直接创建GPU阵列

xlim x = gpuArray.linspace (xlim (1), (2), gridSize);ylim y = gpuArray.linspace (ylim (1), (2), gridSize);谁xy
名称大小字节类属性x 1x1000 4 gpuarray y 1x1000 4 gpuarray

许多MATLAB函数支持gpuArrays。万博1manbetx当您为任何启用了GPU的函数提供gpuArray参数时,该函数将在GPU上自动运行。有关更多信息,请参见在GPU上运行MATLAB函数.为算法创建一个复杂网格,并创建数组结果。要直接在GPU上创建此数组,请使用那些功能,并指定'gpuarray'

[Xgrid,Ygrid] = meshgrid(x,y);z0 =复合物(Xgrid,Ygrid);count = =(大小(z0),'gpuarray');

以下代码使用支持GPU的函数实现Mandelbrot算法。因为代码使用GPUARRAYS,所以计算发生在GPU上。

z = z0;n = 0:maxIterations z = z。* z + z0;内部= abs(z)<= 2;count =内部计数+;结束count = log(count);

完成计算时,请绘制结果。

Imagesc (x,y,count) colormap([jet();flipud(jet());0 0 0]);轴离开

在GPU上使用稀疏阵列

以下功能支持稀疏GPUARRAYS。万博1manbetx

abs acos acosh acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd acosd
最终EPS exp expint expm1查找修复楼层全球gmres gpuarray.speye imag isaundingingsisdiagegisementy isequal isequaln isfinite isfloat isinteger isslogical isnumeric isreal issparse istril istriu istriu isderyingyingype leng log log2 log10 log1p lsqr minus mtimes mustbeunderingtype ndims nextpow2 nnz
nonzeros norm numel nzmax pcg plus qmr rad2deg real reallog realsqrt round sec second sech sign sinind sinh sinpi size sparse spfun spones sprandsym sqrt sum tan tand tanh tfqmr times (.*) trace transpose tritriu uminus underlyingType uplus

您可以通过调用来创建稀疏的GPUArray稀疏的使用gpuArray输入,或者通过调用GPUArray.使用稀疏输入。例如,

x = [0 1 0 0 0;0 0 0 0 1]
0 1 0 0 0 0 0 0 0 1
s = sparse(x)
(1,2)1(2,5)1
g = gpuarray;%g是稀疏的gpuarraygt = ' (g);%gt是一个稀疏的gpuarrayf = full(gt)% f是一个完整的gpuArray
0 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1

稀疏gpuArrays不支持索引。万博1manbetx相反,使用定位数组的非零元素及其行和列下标。然后,替换您想要的值并构造一个新的稀疏gpuArray。

在GPU上处理复数

如果在GPU上运行的函数的输出可能是复杂的,则必须明确地将其输入参数指定为复杂的。这适用于GPUArray.或运行的代码中调用的函数Arrayfun.

例如,如果创建可能具有负元素的GPUARRAY,请使用G = gpuArray(复杂(p)),然后你可以成功执行sqrt(g)

或者,在传递给的函数中Arrayfun., 如果x是实数向量,有些元素是负数,sqrt (x)生成错误;相反,你应该打电话√复杂(x))

如果结果是一个包含复杂数据的gpuArray,并且所有虚部都为零,则保留这些部分,数据仍然是复杂的。这在使用时可能会产生影响种类伊斯雷尔, 等等。

下表列出了可能返回复杂数据的函数,以及输出保持真实的输入范围。

功能 实际输出的输入范围
Acos(x) abs (x) < = 1
作用(x) x > = 1
acoth (x) abs (x) > = 1
ACSC(x) abs (x) > = 1
ASEC(x) abs (x) > = 1
Asech(x) 0 <= x <= 1
Asin(x) abs (x) < = 1
atanh(x) abs (x) < = 1
log(x) x > = 0
log1p (x) x> = -1
log10 (x) x > = 0
log2 (x) x > = 0
电源(x,y) x > = 0
Reallog(x) x > = 0
Realsqrt(x) x > = 0
sqrt (x) x > = 0

GPUArray输入的特殊条件

数据在图形处理器上时,才能在图形处理器上运行使能图形处理器功能。例如,下面的代码在GPU上运行,因为第一个输入的数据在GPU上:

>>总和(GPUARRAY(魔术(10)),2);
然而,这段代码不能在GPU上运行,因为第一个输入的数据不在GPU上:
>>总和(魔术(10),GPUARRAY(2));
如果输入参数GPUARRADE包含尺寸,缩放因子或迭代次数等项目,则该功能会在CPU上聚集并计算它们。当实际数据参数是GPUARRAYS时,函数仅在GPU上运行。

致谢

岩浆是利用GPU加速的线性代数例程图书馆。线性代数在并行计算工具箱中为GPUARRAYS实现的函数利用岩浆实现高性能和准确性。

另请参阅

|

相关的例子

更多关于