主要内容

马铃薯在GPU上的功能

马铃薯函数gpuarray参数

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

a = gpuarray([1 0 1; -1 -2 0; 0 1 -1]);E = EIG(a);

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

检查GPU支持的功能金宝app

如果MATLAB功能有支持GPUARRAYS,您可金宝app以在其功能页面上查阅其他GPU使用信息。看GPU阵列扩展能力函数页面末尾的部分。

提示

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

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

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

使用GPUArray支持金宝app(深度学习工具箱)

*(另见深入学习GPU

计算机Vision Toolbox™ 使用GPUArray支持金宝app(电脑视觉工具箱) GPU代码生成和加速度(电脑视觉工具箱)
Communications Toolbox™ 使用GPUArray支持金宝app(通讯工具箱) 代码生成和加速支持金宝app(通讯工具箱)
信号处理工具箱™ 使用GPUArray支持金宝app(信号处理工具箱) 代码生成和GPU支持金宝app(信号处理工具箱)
音频工具箱™ 使用GPUArray支持金宝app(音频工具箱) 代码生成和GPU支持金宝app(音频工具箱)
小波工具箱™ 使用GPUArray支持金宝app(小波工具箱) 代码生成和GPU支持金宝app(小波工具箱)
曲线配件工具箱™ 使用GPUArray支持金宝app(曲线配件工具箱)

您可以从所有MathWorks浏览支持金宝appGPU支持的功能®下载188bet金宝搏产品在以下链接:GPU支金宝app持的功能。或者,您可以按产品过滤。在这一点help吧,点击功能。在“函数”列表中,浏览左窗格以选择产品,例如Matlab。在左窗格的底部,选择GPU阵列。如果选择没有启用GPU的功能的产品,那么GPU阵列过滤器不可用。

深入学习GPU

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

有关在深度学习工具箱中的自动GPU支持的更多信息,请参阅金宝app深入学习GPU和并行数据(深度学习工具箱)

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

检查或选择GPU

如果您有GPU,则Matlab会自动使用它以用于GPU计算。您可以使用使用的GPU检查GPudevice.功能。如果您有多个GPU,那么您可以使用GPudevice.选择其中一个,或使用具有并行池的多个GPU。例如,看到识别并选择GPU设备在并行池中使用多个GPU。检查是否支持您的GPU,请参阅金宝appGPU通金宝app过发布支持

对于深度学习,MATLAB为多个GPU提供自动并行支持。金宝app看在多个GPU上与MATLAB深入学习(深度学习工具箱)

使用matlab函数与gpu

此示例显示如何使用GPU的MATLAB函数与GPUARRAYS运行。您可以使用GPU的属性使用GPudevice.功能。

GPudevice.
ANS = CUDADevice与属性:名称: '的GeForce GTX 1080' 索引:1个ComputeCapability: '6.1' SupportsDouble:1 Dr金宝appiverVersion:10.1000 ToolkitVersion:10.1000 MaxThreadsPerBlock: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金宝app

创建一个行向量,重复从-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.摩擦ABS.,和Pliplr.

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

绘制结果。

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

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

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

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

使用GPU锐化图像

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

读取图像,并使用它将其发送到GPUGPUArray.功能。

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

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

DIMAGE = IM2DOUBLE(图像);梯度= convn(尺寸,yimage(3)./ 9,'同样') -  Convn(Dimage,One(5)./ 25,'同样');金额= 5;Sharpened = Dimage +金额。*渐变;

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

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阵列

x = gpuarray.linspace(xlim(1),xlim(2),gridsize);y = gpuarray.linspace(ylim(1),ylim(2),gridsize);谁X.y
名称大小字节类属性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算法。因为代码使用GPUARRAYS,所以计算发生在GPU上。

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

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

ImageC(X,Y,Count)Colormap([Jet(); flipud(Jet()); 0 0 0]);轴关闭

在GPU上使用稀疏阵列

以下功能支持稀疏GPUARRAYS。金宝app

ABS ACOS ACOSD ACOSC ACOTD ACSH ACSC ACSCD ACSCH角度ASEC ASECD ASECH ASIN ASIN ASINHATAN ATAN ATANH BICG BICGSTAB CEIL CGS Columundering Cong COS COSD COT COT COTH COTH COTH COTH COTH COTH COTH COTH COTH COTH
最终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
非安利斯·常规Numel NZMAX PCG PLUS QMR RAD2DEG真实Reallog Reallog RealSQRT轮秒SECS SEC SEC SEC SIN SINPI SINPI尺寸稀疏SPFUN SPONES SPRANDSYM SQRT SUM TAN TANT TANH TFQMR TIMES(。*)跟踪TRIL TRIUUMINUS底层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 0 0 0 0 0 0 1

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

在GPU上使用复杂数字

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

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

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

如果结果是复杂数据的GPUARRAY,并且所有虚部都是零的,则保留这些部件,数据保持复杂。这可能会产生影响sortIsreal.等等。

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

功能 实际输出的输入范围
Acos(x) abs(x)<= 1
Acosh(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上运行GPU时。例如,以下代码在GPU上运行,因为数据是第一个输入,在GPU上:

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

致谢

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

另请参阅

|

相关例子

更多关于