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。
如果一个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 |
深度学习工具箱™ | *(参见深入学习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支持是自动的。金宝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进行深度学习(深度学习工具箱)。
这个例子展示了如何使用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。在此示例中,结果是整数和回合
消除舍入误差。
这个例子展示了如何使用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支持的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]);轴关闭
下面的函数支持稀疏的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上运行的函数的输出可能是复杂的,则必须明确地将其输入参数指定为复杂的。这适用于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 |
开启图形处理器功能只有在图形处理器上有数据时,图形处理器才能开启。例如,下面的代码运行在GPU上,因为第一个输入的数据在GPU上:
> >总和(gpuArray(魔法(10)),2);
> >总和(魔法(10),gpuArray (2));
岩浆是一个利用GPU加速的线性代数例程库。在并行计算工具箱中为gpuArrays实现的线性代数函数利用MAGMA实现了高性能和准确性。