主要内容

MATLABGPU上的功能

MATLAB功能gpuArray论据

Matlab中的数百个功能®如果您提供gpuArray论点

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

无论何时使用至少一个gpuArray作为数据输入参数,函数在GPU上执行。该函数生成一个gpuArray结果,除非返回MATLAB数据更合适(例如,大小)。您可以使用这两种方法混合输入gpuArray和MATLAB数组。要了解函数何时在GPU或CPU上运行的更多信息,请参阅gpuArray输入的特殊条件gpuArray-启用的函数包括离散傅里叶变换(快速傅里叶变换),矩阵乘法(m),左矩阵除法(MLDIVIDE.),以及其他数百个。有关更多信息,请参阅检查gpuArray-Supp万博1manbetxorted功能

检查gpuArray-万博1manbetx 支持的功能

如果MATLAB函数支持万博1manbetxgpuArray对象,您可以在其功能页面上查阅其他GPU使用信息。看到GPU阵列扩展能力部分位于函数页的末尾。

提示

有关支持的MATLAB函数的筛选列表万博1manbetxgpuArray对象,请参见功能列表(GPU-arrays)

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

工具箱名称 函数列表gpuArray万博1manbetx GPU特定文件
MATLAB 功能gpuArray万博1manbetx
统计和机器学习工具箱™ 功能gpuArray万博1manbetx(统计学和机器学习工具箱) 在GPU上分析和建模数据(统计学和机器学习工具箱)
图像处理工具箱™ 功能gpuArray万博1manbetx(图像处理工具箱) 计算能力(图像处理工具箱)
深度学习工具箱™

功能gpuArray万博1manbetx(深度学习工具箱)

*(参见GPU深度学习

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

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

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

你可以浏览gpuArray-万博1manbetx所有MathWorks支持的函数®s manbetx 845产品在以下链接下:gpuArray支万博1manbetx持功能。或者,您可以按产品筛选。在帮助栏,点击功能。在功能列表中,浏览左窗格以选择产品,例如MATLAB。在左窗格底部,选择GPU阵列.如果您选择的产品没有gpuArray-enabled函数,然后GPU阵列过滤器不可用。

GPU深度学习

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

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

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

检查或选择GPU

如果你有一个GPU, MATLAB会自动使用它进行GPU计算。您可以检查和选择您的GPU使用gpuDevice如果你有多个GPU,那么你可以使用gpudevicetable.检查系统中检测到的所有GPU的属性。您可以使用gpuDevice选择其中一个,或将多个GPU与并行池一起使用。有关示例,请参阅识别并选择GPU设备并行池中使用多个gpu.检查您的GPU是否支持,请参阅万博1manbetxGPU版万博1manbetx本支持

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

使用MATLAB功能与GPU

此示例演示如何使用gpuArray-使MATLAB函数能够与gpuArray物体。您可以使用gpuDevice函数。

gpuDevice
ans = CUDADevice with properties: Name: 'TITAN RTX' Index: 1 ComputeCapability: '7.5' 万博1manbetxSupportsDouble: 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万博1manbetxSupported: 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-Enabled Matlab功能。MATLAB会自动在GPU上运行计算。有关更多信息,请参见在GPU上运行MATLAB函数.例如,使用诊断EXPM.摩登派青年圆形的腹肌, 和fliplr在一起。

gpuE=expm(diag(gpuX,-1))*expm(diag(gpuX,1));gpuM=mod(round(abs(gpuE)),2);gpuF=gpuM+fliplr(gpuM);

绘制结果。

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

如果需要将数据从GPU传输回来,请使用收集. 将数据传输回CPU的成本很高,并且通常不需要,除非您需要将结果与不支持的函数一起使用万博1manbetxgpuArray

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

一般情况下,由于GPU和CPU的数值精度和算法的不同,在CPU和GPU上运行的代码会产生不同的结果。来自CPU和GPU的答案都是与真实分析结果相同的有效浮点近似,在计算过程中受到了不同的舍入行为。在这个例子中,结果是整数和圆形的消除四舍五入错误。

使用GPU锐化图像

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

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

图像=gpuArray(imread(“peppers.png”));

将图像转换为双打,并应用卷曲以获取渐变图像。然后,使用梯度图像,将图像锐化为一个因子数量

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

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

imshow(imresize([dimage,锐化],0.7));标题('原始图像(左)与锐化图像(右)');

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

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

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

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

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

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

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

[xGrid,ygrid] = meshgrid(x,y);z0 =复合物(Xgrid,Ygrid);count = =(大小(z0),“gpuArray”);

以下代码使用启用GPU的函数实现Mandelbrot算法。由于代码使用GPuarray,因此计算在GPU上进行。

z = z0;n=0:maxz=z.*z+z0;内部=abs(z)<=2;计数=计数+内部;结束计数=对数(计数);

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

ImagesC(X,Y,Count)Colormap([Jet(); flipud(Jet()); 0 0 0]);轴离开

在GPU上使用稀疏阵列

下面的函数支持稀疏万博1manbetxgpuArray对象。

ABS ACOS ACOSD ACOSH ACOTD ACOTH ACSC ACSCC ACSCH角度ASEC ASECD ASECH ASIN ASINAD ASINH ATAN ATANH BICG BICGSTAB CEIL CGS Columundering Conj COS COSD COT COT COTH COTH COTS CSC CSCD CSCH CTRANSPOTS DEG2RAD DIAP
结束EPS exp expint expm1查找修复楼层全球gmres gpuarray.speye imag isaundingingsisdiageg isempty isequal isequaln iminite isfloat isteger isslogical isnumeric iSreal isarpe istril istriu istriu istriu lenge log log2 log10 log1p lsqr minus mtimes mustbeundingyingtype ndims nextpow2 nnz
非安利斯·常规nul nzmax pcg plus qmr rad2deg真实reallog realsqrt round sec sec sec sec sec sech sig sin sind sinh sinpi size sprands spfun spones sprandsym sqrt sum sprandsym sqrt sum tan tanh tfqmr times(。*)跟踪Tril Triu Uminus底层

你可以创造一个稀疏的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是一种稀疏GPU阵列f = 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

gpuArray对象不支持索引。请使用万博1manbetx找到数组的非零元素及其行和列索引。然后,替换所需的值并构建新稀疏gpuArray

在GPU上处理复数

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

例如,如果创建一个gpuArray这可能有负元素,使用G = gpuArray(复杂(p)),然后你可以成功执行sqrt(G)

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

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

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

功能 实际输出的输入范围
助理文书主任(x) abs (x) < = 1
作用(x) x > = 1
acoth (x) abs (x) > = 1
acsc(x) abs (x) > = 1
亚欧会议(十) abs (x) > = 1
Asech(x) 0<=x<=1
Asin(x) abs (x) < = 1
阿塔恩(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:
>>sum(magic(10),gpuArray(2));
如果您的输入参数gpuArray对象包含维度、比例因子或迭代次数等项,然后该函数收集它们并在CPU上进行计算。函数仅在实际数据参数为时在GPU上运行gpuArray对象。

致谢

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

另请参阅

|

相关的例子

更多关于