运行MATLAB图形处理器功能说明

MATLAB带有gpuArray参数的函数

Matlab中的数百个功能®和其他工具箱自动运行在GPU上,如果你提供一个gpuArray论据。

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

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

检查GPU支持的功能金宝app

如果一个MATLAB函数支持GPU数组,你可以在它金宝app的函数页面上查阅额外的GPU使用信息。看到GPU数组在里面扩展功能部分在函数页面的末尾。

提示

有关支持GPU阵列的经过筛选的MATLAB列表,请参见金宝app功能列表(GPU-arrays)

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

工具箱名称 GPUARRAY支持列表金宝app
MATLAB 使用GPUArray支持金宝app
统计和机器学习工具箱™ 使用GPUArray支持金宝app
图像处理工具箱™ 使用GPUArray支持金宝app
深度学习工具箱™

使用GPUArray支持金宝app

*(参见深入学习GPU)

计算机视觉工具箱™ 使用GPUArray支持金宝app
Communications Toolbox™ 使用GPUArray支持金宝app
信号处理工具箱™ 使用GPUArray支持金宝app
音频工具箱™ 使用GPUArray支持金宝app
小波工具箱™ 使用GPUArray支持金宝app
曲线拟合工具箱™ 使用GPUArray支持金宝app

您可以从所有MathWorks浏览支持金宝appGPU支持的功能®下载188bet金宝搏产品在以下链接:GPU-金宝appsupported功能。或者,您可以按产品过滤。在这一点帮助栏,点击功能。在函数列表中,浏览左侧窗格选择一个产品,例如MATLAB。在左侧窗格的底部,选择GPU数组。如果选择没有启用GPU的功能的产品,那么GPU数组过滤器不可用。

深入学习GPU

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

有关深度学习工具箱中自动gpu支持的更多信息,请参见金宝appgpu上和并行的大数据深度学习(深度学习工具箱)。

对于使用定义为的网络的高级网络和工作流程dlnetwork对象或模型函数,将您的数据转换为gpuArray。使用使用GPUArray支持金宝app在GPU上运行自定义培训循环或预测。

查看或选择图形处理器

如果你有一个GPU,那么MATLAB会自动使用它进行GPU计算。你可以检查你的GPU使用gpuDevice函数。如果您有多个GPU,那么您可以使用gpuDevice选择其中一个,或使用具有并行池的多个GPU。例如,看到识别并选择图形处理器在一个并行池中使用多个gpu。要检查是否支持您的GPU,请参阅金宝appGPU支金宝app持发布

对于深度学习,MATLAB提供对多个gpu的自动并行支持。金宝app看到在多个gpu上使用MATLAB进行深度学习(深度学习工具箱)。

使用matlab函数与gpu

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

gpuDevice
ans = CUDADevice属性:名称:“GeForce 1080 GTX公司”指数:1 ComputeCapability:“6.1”SupportsDouble: 1 Drive金宝apprVersion: 10.1000 ToolkitVersion: 10.1000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475 e + 09年65535 65535]SIMDWidth: 32 TotalMemory: 8.5899 e + 09 AvailableMemory: 6.9012 e + 09 MultiprocessorCount: 20 ClockRateKHz: 1733500 ComputeMode:“违约”GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory:1 device金宝appsselected: 1

创建一个行向量,重复从-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.,国防部,回合,腹肌,和fliplr

* diag(gpuX,-1) = expm(diag(gpuX,-1));gpuM =国防部(圆(abs (gpuE)), 2);gpuF = gpuM + fliplr(gpuM);

策划的结果。

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

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

结果=聚集(GPUF);谁结果
名称大小字节类属性结果96x96 73728 double

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

使用GPU锐化图像

这个例子展示了如何使用gpuArrays和启用gpu的函数来锐化图像。

读取图像,然后用gpuArray函数。

形象= gpuArray (imread (“peppers.png”));

将图像转换为双精度,并应用卷积得到梯度图像。然后,利用梯度图像,将图像锐化一倍

dimage = im2double(图片);梯度= convn (dimage,(3)。/ 9,'相同') - convn (dimage,(5)。/ 25日'相同');数量= 5;锐化= dimage + amount.*gradient;

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

imshow (imresize ([dimage,磨),0.7));标题(“原始图像(左)vs锐化图像(右)”);

使用gpu支持的函数计算Mandelbrot集

这个例子展示了如何使用GPU支持的MATLAB函数来计算一个著名的数学结构:曼德尔布罗特集gpuDevice函数。

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

maxIterations = 500;gridSize = 1000;xlim = [-0.748766713922161, - 0.7487667707771757];ylim = [0.123640844894862, 0.123640851045266];

你可以使用gpuArray命令功能向GPU传输数据,并创建gpuArray,也可以直接在GPU上创建array。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。金宝app当你为任何启用GPU的函数提供一个gpuArray参数时,该函数会自动在GPU上运行。有关更多信息,请参见在GPU上运行MATLAB函数。为算法创建一个复杂的网格,并创建数组的结果。如果要在GPU上直接创建该阵列,请使用功能,并指定'gpuarray'

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

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

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

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

imagesc(x,y,count) colormap([jet();flipud(jet());0 0 0]);轴关闭

在GPU上使用稀疏阵列

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

abs angle bicg bicgstab ceil cgs classUnderlying conj c转置deg2rad diag end expm1 find fix floor full gmres gpuArray。speye image isdiag是空的
isequal isequaln isfloat isinteger islogical isnumeric isreal issparse istril istriu length log1p lsqr - mtimes ndimms nextpow2 nnz非零norm numel nzmax pcg
加上qmr rad2deg实实的realrealsqrt圆号大小稀疏spfun spones sprandsym平方根和tfqmr乘以(.*)trace转置tril triu uminus uplus

您可以通过调用创建一个稀疏的gpuArray稀疏的使用gpuArray输入,或通过调用gpuArray输入是稀疏的。例如,

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

稀疏的gpuarray不支持索引。金宝app相反,使用找到数组的非零元素及其行和列索引。然后,替换所需的值并构建新的稀疏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
正式启动(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));
如果您的输入参数gpuArrays包含诸如维度、缩放因子或迭代次数等项,那么该函数将收集它们并在CPU上计算。函数只在GPU上运行,当实际的数据参数是gpuArrays。

致谢

岩浆是一个利用GPU加速的线性代数例程库。在并行计算工具箱中为gpuArrays实现的线性代数函数利用MAGMA实现了高性能和准确性。

另请参阅

|

相关的例子

更多关于