主要内容

运行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输入的特殊条件gpuArray-启用的函数包括离散傅里叶变换(fft)、矩阵乘法(mtimes)、左矩阵除法(mldivide),以及数以百计的其他例子。有关更多信息,请参见检查gpuArray-Supp金宝apported功能

检查gpuArray支金宝app持功能

如果一个MATLAB函数有支持金宝appgpuArray,可在其功能页面查看GPU使用情况的附加信息。看到GPU数组扩展功能部分位于函数页的末尾。

提示

用于筛选MATLAB函数的支持列表金宝appgpuArray对象,请参见功能列表(GPU-arrays)

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

工具箱的名字 函数列表gpuArray金宝app GPU-Specific文档
MATLAB 功能与gpuArray金宝app
统计和机器学习工具箱™ 功能与gpuArray金宝app(统计学和机器学习工具箱) 在GPU上分析和建模数据(统计学和机器学习工具箱)
图像处理工具箱™ 功能与gpuArray金宝app(图像处理工具箱) GPU计算(图像处理工具箱)
深度学习工具箱™

功能与gpuArray金宝app(深度学习工具箱)

*(参见gpu深度学习

在gpu和云上并行扩展深度学习(深度学习工具箱)

基于MATLAB的多gpu深度学习(深度学习工具箱)

计算机视觉工具箱™ 功能与gpuArray金宝app(计算机视觉工具箱) GPU代码生成和加速(计算机视觉工具箱)
通信工具箱™ 功能与gpuArray金宝app(通信工具箱) 代码生成和加速支持金宝app(通信工具箱)
信号处理工具箱™ 功能与gpuArray金宝app(信号处理工具箱) 代码生成和GPU支持金宝app(信号处理工具箱)
音频工具箱™ 功能与gpuArray金宝app(音频工具箱) 代码生成和GPU支持金宝app(音频工具箱)
小波工具箱™ 功能与gpuArray金宝app(小波工具箱) 代码生成和GPU支持金宝app(小波工具箱)
曲线拟合工具箱™ 功能与gpuArray金宝app(曲线拟合工具箱)

您可以浏览gpuArray所金宝app有MathWorks支持的函数®下载188bet金宝搏以下连结的产品:gpuArray支金宝app持功能.或者,您可以按产品进行过滤。在帮助栏,点击功能.在函数列表中,浏览左侧窗格选择一个产品,例如MATLAB。在左侧窗格的底部,选择GPU数组.如果您选择的产品没有gpuArray-enabled函数,然后GPU数组过滤器不可用。

gpu深度学习

对于深度学习工具箱中的许多功能,如果你有合适的GPU和并行计算工具箱™,GPU支持是自动的。金宝app您不需要将数据转换为gpuArray.下面是一个非详尽的函数列表,默认情况下,在GPU上运行(如果有的话)。

有关深度学习工具箱中自动GPU支持的更多信息,请参见金宝app在gpu和云上并行扩展深度学习(深度学习工具箱)

用于使用定义为的网络的高级网络和工作流dlnetwork(深度学习工具箱)对象或模型函数,将数据转换为gpuArray.使用功能与gpuArray金宝app(深度学习工具箱)在GPU上运行自定义训练循环或预测。

检查或选择图形处理器

如果你有一个GPU, MATLAB会自动使用它进行GPU计算。您可以检查和选择您的GPU使用gpuDevice作用如果您有多个GPU,那么您可以使用gpuDeviceTable检查系统中检测到的所有gpu的属性。您可以使用gpuDevice选择其中一个,或者使用多个gpu和一个并行池。例如,请参见识别并选择GPU设备并行池中使用多个gpu.要检查您的GPU是否被支持,请参见金宝appGPU支金宝app持情况

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

使用MATLAB函数与GPU

这个例子展示了如何使用gpuArray-enabled MATLAB函数进行操作gpuArray对象。您可以检查您的GPU属性使用gpuDevice函数。

gpuDevice
ans = CUDADevice with properties: Name: 'TITAN RTX' Index: 1 ComputeCapability: '7.5' 金宝appSupportsDouble: 1 DriverVersion: 11.2000 ToolkitVersion: 11 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 2.5770e+10 AvailableMemory:2.4177e+10 MultiprocessorCount: 72 ClockRateKHz: 1770000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 Device金宝appSupported: 1 DeviceAvailable: 1 DeviceSelected: 1

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

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

操作与gpuArray对象,使用任何gpuArray启用了MATLAB函数。MATLAB在GPU上自动运行计算。有关更多信息,请参见在GPU上运行MATLAB函数.例如,使用诊断接头expm国防部圆形的腹肌,fliplr在一起。

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

策划的结果。

imagesc(gpuF);彩色贴图(翻转(灰色));

如果需要将数据从GPU传输回来,请使用收集.将数据传输回CPU是非常昂贵的,并且通常是没有必要的,除非您需要使用不支持的函数来处理结果金宝appgpuArray

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

一般情况下,由于GPU和CPU的数值精度和算法的不同,在CPU和GPU上运行的代码会产生不同的结果。来自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 8000 gpuArray y 1x1000 8000 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上使用稀疏阵列

下面的函数支持稀疏金宝appgpuArray对象。

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

稀疏的gpuArray对象不支持索引。金宝app相反,使用找到定位数组的非零元素及其行和列下标。然后,替换您想要的值并构造一个新的稀疏gpuArray

在GPU上处理复数

如果在GPU上运行的函数的输出可能很复杂,则必须将其输入参数显式指定为复杂。这适用于gpuArray或运行的代码中调用的函数arrayfun

例如,如果创建一个gpuArray可能有负面因素,使用G = gpuArray(复杂(p)),则可以成功执行sqrt (G)

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

如果结果是agpuArray当所有的虚部都为零时,保留这些部分,数据仍然是复杂的。这在使用时可能会产生影响排序伊斯雷尔,等等。

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

函数 实际输出的输入范围
助理文书主任(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));
如果你的输入参数gpuArray对象包含维度、比例因子或迭代次数等项,然后该函数收集它们并在CPU上进行计算。函数仅在实际数据参数为时在GPU上运行gpuArray对象。

致谢

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

另请参阅

|

相关的例子

更多关于