主要内容

马铃薯GPU上的功能

马铃薯功能与GPUArray.争论

MATLAB中的数百个函数®如果您提供a,则其他工具箱在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.),矩阵乘法(时间),左矩阵司(莫德利维)和数百人。有关更多信息,请参见检查gpuArray-Supp金宝apported功能

查看GPUArray.-金宝app支持函数

如果MATLAB功能有支持金宝appGPUArray.对象,您可以在其功能页上查阅其他GPU使用信息。请参阅GPU阵列在里面扩展能力部分位于函数页的末尾。

提示

对于支持的MATLAB函数的过滤列表金宝appGPUArray.对象,参见功能列表(GPU-arrays)

几个MATLAB工具箱包括内置的函数GPUArray.金宝app支持。查看支持的这些工具箱中的所有函数的列表金宝appGPUArray.对象,请使用下表中的链接。带有信息指示器的列表中的函数具有特定于在GPU上运行该函数的限制或用法说明。您可以在函数参考页的扩展功能部分查看使用说明和限制。有关个人帐户更新的信息,请参见GPUArray.-已启用的功能,请参阅发行说明。

工具箱名称 具有以下功能的函数列表:GPUArray.金宝app 特定于GPU的文档
马铃薯 功能与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

如果你有一个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函数.例如,使用诊断矩阵指数函数摩擦腹肌Pliplr.在一起。

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

绘制结果。

显示亮度图像(gpuF);colormap(翻转(灰色));

如果需要将数据从GPU传输回来,请使用收集.将数据转回CPU可能是昂贵的,并且通常无需,除非您需要使用不支持的函数使用结果金宝appGPUArray.

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

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

使用GPU锐化图像

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

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

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

将图像转换为双倍,并应用卷积以获得梯度图像。然后,使用梯度图像,将图像锐化一倍

dimage = im2double(图片);梯度= convn (dimage,(3)。/ 9,“一样”) -  Convn(Dimage,One(5)./ 25,“一样”);数量= 5;锐化=图像+数量。*梯度;

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

imshow(imresize([尺寸,削尖],0.7));标题('原始图像​​(左)与锐化图像(右)');

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

此示例显示了如何使用启用GPU的MATLAB函数来计算众所周知的数学结构:Mandelbrot Set。使用该GPU检查您的GPUGPudevice.函数。

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

maxIterations=500;gridSize=1000;xlim=[-0.748766713922161,-0.748766707771757];ylim=[0.123640844894862,0.123640851045266];

你可以使用GPUArray.函数将数据传输到GPU并创建GPUArray.,也可以直接在GPU上创建阵列。GPUArray.提供GPU版本的许多功能,您可以使用这些功能创建数据阵列,例如Linspace.。有关详细信息,请参阅直接创建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。金宝app当您为任何启用了GPU的函数提供gpuArray参数时,该函数将在GPU上自动运行。有关更多信息,请参见在GPU上运行MATLAB函数.为算法创建一个复杂网格,并创建数组结果。要直接在GPU上创建此数组,请使用那些函数,并指定'gpuarray'

[xGrid,yGrid]=网格网格(x,y);z0=复合体(xGrid,yGrid);计数=个(大小(z0),'gpuarray');

以下代码使用支持GPU的函数实现Mandelbrot算法。因为代码使用GPUARRAYS,所以计算发生在GPU上。

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

计算完成后,绘制结果。

imagesc(x,y,count)颜色映射([jet();flipud(jet());0]);轴

在GPU上使用稀疏阵列

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

abs acos acosd acosh acot acotd acoth acsc acscd acsch acsch角asec asecd asech asin asin asin asin asin atan atan和ATAH bicg bicgstab ceil cgs类基础联合cosd cosh cosh cosh COST coth csc csc csc csc csc csc csc csc CTR TRANSPOSE deg2rad DIAGE
end eps exp expint expm1 find fix floor full gmres gpuArray.speye imag IsUnderground isdiag isempty isequal isfinite isfloat isinteger islogical isnumeric isreal IsParse istril istriu IsUndergrounding Type length log2 log10 log1p lsqr减去mtimes必须为Undergrounding Type ndims nextpow2 nnz
非零范数numel nzmax pcg加qmr rad2deg real reallog realsqrt round sec secd sech sin sin sinh sinh sinpi大小稀疏spfun响应sprandsym sqrt tan和tan tfqmr时间(.*)跟踪转置tril triu uminus UnderingType uplus

您可以创建一个稀疏的GPUArray.要么打电话稀疏的与A.GPUArray.输入,或通过调用GPUArray.使用稀疏输入。例如,

x=[01 0 0;01]
0 1 0 0 0 0 0 0 0 1
s=稀疏(x)
(1,2)1(2,5)1
g=gpuArray(s);%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)生成错误;您应该调用sqrt(综合体(x))

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

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

作用 实际输出的输入范围
这些“可信赖医疗组织”(x) abs (x) < = 1
作用(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
对数(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(magic(10)),2);
但是,此代码不在GPU上运行,因为数据(第一个输入)不在GPU上:
>>总和(魔术(10),GPUARRAY(2));
如果你的输入参数GPUArray.对象包含维度、比例因子或迭代次数等项,然后该函数收集它们并在CPU上进行计算。函数仅在实际数据参数为时在GPU上运行GPUArray.对象。

致谢

岩浆是利用GPU加速的线性代数例程图书馆。实施线性代数函数GPUArray.并行计算工具箱中的对象利用MAGMA实现高性能和高精度。

另请参阅

|

相关的例子

更多关于