主要内容

运行MATLABGPU上的功能

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-Supp金宝apported功能

检查GPU-Supp金宝apported功能

如果一个MATLAB函数支持gpuArrays,您金宝app可以在其功能页面查询更多的GPU使用信息。看到GPU数组扩展功能部分位于函数页的末尾。

提示

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

一些MATLAB工具箱包含内置GPU支持的函数。金宝app要查看这些工具箱中支持gpuArrays的所有函数的列表,请使用下表中的链接。金宝app带有警告指标的列表中的功能,在GPU上运行时会有一定的限制或使用说明。您可以在功能参考页面的扩展功能部分查看使用说明和限制。有关单个启用gpu功能的更新的信息,请参阅发布说明。

工具箱的名字 GPUARRAY支持列表金宝app GPU-specific文档
MATLAB 支持gpuArray的函数金宝app
统计和机器学习工具箱™ 支持gpuArray的函数金宝app(统计学和机器学习工具箱)
图像处理工具箱™ 支持gpuArray的函数金宝app(图像处理工具箱) GPU计算(图像处理工具箱)
深度学习工具箱™

支持gpuArray的函数金宝app(深度学习工具箱)

*(参见gpu深度学习

计算机视觉工具箱™ 支持gpuArray的函数金宝app(计算机视觉工具箱) GPU代码生成和加速(计算机视觉工具箱)
通信工具箱™ 支持gpuArray的函数金宝app(通信工具箱) 代码生成和加速支持金宝app(通信工具箱)
信号处理工具箱™ 支持gpuArray的函数金宝app(信号处理工具箱) 代码生成和GPU支持金宝app(信号处理工具箱)
音频工具箱™ 支持gpuArray的函数金宝app(音频工具箱) 代码生成和GPU支持金宝app(音频工具箱)
小波工具箱™ 支持gpuArray的函数金宝app(小波工具箱) 代码生成和GPU支持金宝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.要检查您的GPU是否被支持,请参见金宝appGPU支金宝app持情况

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

使用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.9012e+09 MultiprocessorCount: 20 ClockRateKHz: 1733500 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 Device金宝appSupported: 1 DeviceSelected: 1

创建一个行向量,重复从-15到15的值。要将其转移到GPU并创建gpuArray,请使用gpuArray函数。

X = [-15:15 0 -15:15 0 -15:15];gpuX = gpuArray (X);谁gpuX
Name Size Bytes Class Attributes gpuX 1x95 4 gpuArray . Name Size Bytes Class Attributes

要使用gpuArrays,请使用任何支持gpu的MATLAB函数。MATLAB在GPU上自动运行计算。有关更多信息,请参见在GPU上运行MATLAB函数.例如,使用组合诊断接头expm国防部圆形的腹肌,fliplr

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

策划的结果。

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

如果需要将数据从GPU传输回来,请使用收集.收集回CPU的代价可能很高,而且通常没有必要,除非您需要将结果与不支持gpuArray的函数一起使用。金宝app

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

一般来说,如果你在CPU上运行代码,结果可能会有所不同,这是由于数值精度和GPU和CPU之间的算法差异。在CPU和GPU上的答案都是有效的浮点逼近的真实分析结果,在计算过程中受到了不同的舍入。在这个例子中,结果是整数和圆形的消除四舍五入错误。

使用GPU锐化图像

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

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

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

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

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

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

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

使用使能图形处理器的功能计算Mandelbrot集

这个例子展示了如何使用支持gpu的MATLAB函数来计算一个著名的数学结构:Mandelbrot集合。检查您的GPU使用gpuDevice函数。

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

maxIterations = 500;gridSize = 1000;Xlim = [-0.748766713922161, -0.748766707771757];Ylim = [0.123640844894862, 0.123640851045266];

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

xlim x = gpuArray.linspace (xlim (1), (2), gridSize);ylim y = gpuArray.linspace (ylim (1), (2), gridSize);谁xy
Name Size Bytes Class Attributes 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);数= 1(大小(z0),“gpuArray”);

下面的代码使用使能gpu的函数实现了Mandelbrot算法。因为代码使用了gpuArrays,所以计算发生在GPU上。

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

计算完成后,将结果绘制出来。

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

在GPU上使用稀疏阵列

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

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
end eps exp expint expm1 find fix floor full gmres gpuArray。isdiag isempty isequal isequaln isfinite isfloat isinteger islogical isnumeric isreal issparse istril istriu isUnderlyingType length log log2 log10 log1p lsqr minus mtimes mustBeUnderlyingType 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 1
0 1 0 0 0 0 0 0 0 1
s =稀疏(x)
(1,2) 1 (2,5) 1
g = gpuArray(年代);% g是一个稀疏gpuArraygt = ' (g);% gt是一个稀疏gpuArrayf =全(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不支持索引。金宝app相反,使用找到找到数组的非零元素及其行和列索引。然后,替换所需的值并构建新的稀疏GPUArray。

在GPU上处理复数

如果运行在GPU上的函数的输出可能是复杂的,那么必须显式地将其输入参数指定为complex。这适用于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
正如(x) abs (x) < = 1
atanh (x) abs (x) < = 1
日志(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上进行计算。只有当实际的数据参数是gpuArrays时,函数才能在GPU上运行。

致谢

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

另请参阅

|

相关的例子

更多关于