数百个功能的MATLAB®和其他工具箱,如果你提供一个在GPU上的自动运行gpuArray
论点。
A = gpuArray([1 0 1 -1 -2 0 0 1 -1]);E = EIG(A);
每当你调用任何这些函数与至少一个gpuArray作为数据输入参数,GPU上的函数执行。该函数生成一个gpuArray作为结果,除非返回MATLAB数据更合适的(例如,尺寸
)。你可以混合在同一个函数调用中同时使用gpuArray和MATLAB阵列输入。要了解更多关于当GPU或CPU的功能运行时,看到特殊条件gpuArray输入。启用GPU-功能包括离散傅立叶变换(FFT
),矩阵乘法(mtimes
),左矩阵分裂(mldivide
),和数百人。欲了解更多信息,请参阅检查GPU支持的功能万博1manbetx。
如果MATLAB功能有gpuArrays支持,您可万博1manbetx以参考它的功能页面上附加GPU使用信息。看到GPU阵列在里面扩展功能在功能页面的末端部分。
对于MATLAB的过滤列表的支持GPU阵列,请参见万博1manbetx功能列表(GPU-阵列)。
几个MATLAB工具箱包括内置GPU支持与功能。万博1manbetx要查看的所有功能列出这些工具箱的支持gpuArrays,使用链接如下表所示。万博1manbetx在预警指标列表功能有局限性或使用注意事项具体到在GPU上运行的功能。您可以查看使用说明和限制了所有的功能页面的扩展功能部分。有关更新个人启用GPU的功能的信息,请参阅发行说明。
工具箱名称 | 与gpuArray支持功能列表万博1manbetx |
---|---|
MATLAB | 与gpuArray支持功能万博1manbetx |
统计和机器学习工具箱™ | 与gpuArray支持功能万博1manbetx |
图像处理工具箱™ | 与gpuArray支持功能万博1manbetx |
深度学习工具箱™ | *(也可以看看深度学习与GPU的) |
计算机视觉工具箱™ | 与gpuArray支持功能万博1manbetx |
通讯工具箱™ | 与gpuArray支持功能万博1manbetx |
信号处理工具箱™ | 与gpuArray支持功能万博1manbetx |
音频工具箱™ | 与gpuArray支持功能万博1manbetx |
小波工具箱™ | 与gpuArray支持功能万博1manbetx |
曲线拟合工具箱™ | 与gpuArray支持功能万博1manbetx |
您可以从所有MathWorks的浏览G万博1manbetxPU支持的功能®s manbetx 845产品通过以下链接:GPU支万博1manbetx持的功能。另外,您也可以按产品进行过滤。在帮帮我栏中,单击功能。在功能列表中,浏览左窗格中选择一个产品,例如,MATLAB。在左侧窗格的底部,选择GPU阵列。如果选择一个产品,没有启用GPU的功能,那么GPU阵列过滤不可用。
对于深度学习工具箱中的许多功能,GPU的支持是自动的,如果你有一个合适的GPU和并行计算工具箱™。万博1manbetx你并不需要将数据转换为gpuArray。以下是,默认情况下,在GPU(如果可用)运行函数的不完全名单。
有关在深学习工具箱自动GPU支持的更多信息,请参阅万博1manbetx深度学习与大数据在GPU和并行(深学习工具箱)。
对于先进的网络和工作流,使用网络定义为dlnetwork
对象或模型功能,您的数据转换为gpuArray。采用与gpuArray支持功能万博1manbetx运行在GPU上的定制培训循环或预测。
如果你有一个GPU,那么MATLAB会自动将其用于GPU计算。您可以使用检查你的GPUgpuDevice
功能。如果你有多个GPU,那么你可以使用gpuDevice
选择其中的一个,或者使用多个GPU与并行库。对于一个示例,请参见识别并选择一个GPU和使用多个GPU在并行池。要检查您的GPU支持,请参阅万博1manbetxGPU支万博1manbetx持方式发布。
对于深度学习,MATLAB提供了多GPU并行自动支持。万博1manbetx看到深度学习与MATLAB在多GPU(深学习工具箱)。
这个例子说明了如何使用启用GPU-功能的MATLAB与gpuArrays操作。您可以检查使用的GPU的性能gpuDevice
功能。
gpuDevice
ANS = CUDADevice与属性:名称: '的GeForce GTX 1080' 索引:1个ComputeCapability: '6.1' SupportsDouble:1 Dr万博1manbetxiverVersion:10.1000 ToolkitVersion:10.1000 MaxThreadsPerBlock:1024 MaxShmemPerBlock:49152 MaxThreadBlockSize:[1024 1024 64] MaxGridSize:[2.1475e + 0965535 65535] SIMDWidth:32 TotalMemory:8.5899e + 09 AvailableMemory:6.9012e + 09 MultiprocessorCount:20 ClockRateKHz:1733500 ComputeMode: '默认' GPUOverlapsTransfers:1 KernelExecutionTimeout:1 CanMapHostMemory:1 DeviceSupported万博1manbetx:1 DeviceSelected:1
创建重复的值从-15至15将其传送到GPU,并创建一个gpuArray一个行向量,使用gpuArray
功能。
X = [-15:15 0 -15:15 0 -15:15];gpuX = gpuArray(X);谁是gpuX
名称大小字节类属性gpuX 1x95 4 gpuArray
与gpuArrays操作,使用任何支持GPU-MATLAB功能。MATLAB自动运行在GPU上计算。欲了解更多信息,请参阅在GPU上运行MATLAB功能。例如,使用的组合诊断
,expm
,MOD
,回合
,ABS
和fliplr
。
gpuE = expm(DIAG(gpuX,-1))* expm(DIAG(gpuX,1));gpuM = MOD(圆(ABS(gpuE)),2);gpuF = gpuM + fliplr(gpuM);
绘制的结果。
于imagesc(gpuF);颜色表(翻转(灰色));
如果您需要转移从GPU,采用数据备份收集
。收集回来的CPU可能是昂贵的,并且通常是没有必要的,除非你需要与不支持gpuArray函数使用你的结果。万博1manbetx
导致=聚集(gpuF);谁是结果
名称大小字节类属性的结果96x96的73728双
一般有可能在结果的差异,如果你的CPU上运行的代码,由于数值精度和GPU和CPU之间的差异算法。CPU和GPU的答案都同样有效浮点近似真实分析结果,计算期间具有经受了不同的舍入。在这个例子中,结果是整数,回合
消除了舍入误差。
这个例子说明了如何使用gpuArrays并启用GPU的功能,锐化图像。
读取图像,并利用其发送给GPUgpuArray
功能。
图像= gpuArray(imread('peppers.png'));
将图像转换为双打,并应用卷积获得梯度图像。然后,使用梯度图像,通过一个因子锐化图像量
。
DIMAGE = im2double(图像);梯度= CONVN(DIMAGE,酮(3)./ 9,'相同') - CONVN(DIMAGE,酮(5)./ 25,'相同');量= 5;锐化= DIMAGE +量*梯度。
调整大小,情节和比较原始和锐化图像。
imshow(imresize([DIMAGE,削尖],0.7));标题(“原始图像(左)与锐化后的图像(右)”);
这个例子说明了如何使用启用GPU的MATLAB函数来计算一个著名的数学结构:Mandelbrot集。检查您的GPU使用gpuDevice
功能。
定义参数。曼德尔布罗算法遍历的实部和虚部的网格。下面的代码定义的迭代中,网格尺寸和网格限值的数量。
maxIterations = 500;gridSize = 1000;XLIM = [-0.748766713922161,-0.748766707771757];ylim = [0.123640844894862,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ÿ
名称大小字节类属性X 1x1000的4 gpuArrayŸ1x1000的4 gpuArray
许多MATLAB功能支持gpuArrays。万博1manbetx当您提供一个gpuArray参数到任何支持GPU功能,该功能在GPU上自动运行。欲了解更多信息,请参阅在GPU上运行MATLAB功能。创建算法复杂的网格,并创建阵列计数
出来的结果。要直接在GPU上创建这个数组,使用那些
工作,并指定'gpuArray'
。
[XGRID,YGRID] = meshgrid(X,Y);Z0 =络合物(XGRID,YGRID);计数=酮(大小(Z0),'gpuArray');
下面的代码实现的Mandelbrot算法使用支持GPU-功能。由于代码使用gpuArrays,计算发生在GPU上。
Z = Z0;对于N = 0:maxIterations Z = Z * Z + Z 0;内部= ABS(Z)<= 2;计数=计数+内部;结束计数= LOG(计数);
当计算完成后,绘制的结果。
于imagesc(X,Y,计数)颜色表([射流(); flipud(喷射()); 0 0 0]);轴离
以下功能支持稀疏gpuArrays。万博1manbetx
ABS角度BICG BICGSTAB小区CGS classUnderlying连词ctranspose deg2rad诊断结束的expm1找到修复地板全GMRES gpuArray.speye IMAG isaUnderlying isdiag的isEmpty |
ISEQUAL isequaln isfloat isinteger ISLOGICAL ISNUMERIC伊斯雷尔issparse istril istriu长度log1p LSQR减去mtimes为ndims nextpow2 NNZ非零范数numel nzmax PCG |
加上QMR rad2deg真正realsqrt圆形标志尺寸稀疏spfun spones sprandsym开方和TFQMR倍(。*)跟踪转TRIL triu UMINUS 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 =稀疏(x)的
(1,2)1(2,5)1
G = gpuArray(S);%G是稀疏gpuArrayGT =转置(克);%GT是一个稀疏gpuArrayf =完全(GT)%f是一个完整的gpuArray
0 0 1 0 0 0 0 0 0 1
稀疏gpuArrays不支持索引。万博1manbetx取而代之的是,使用找
来定位该阵列和其行和列索引的非零元素。然后,替换你想要的值,并建立一个新的稀疏gpuArray。
如果在GPU上运行的函数的输出可能是复杂的,你必须明确指定其输入参数一样复杂。这适用于gpuArray
或通过在所谓的代码运行的功能arrayfun
。
例如,如果创建一个gpuArray可能有负面因素,使用G = gpuArray(络合物(P))
,那么你就可以成功执行SQRT(G)
。
或者,在一个函数传递给arrayfun
如果X
是实数的向量,并且一些元件具有负值,SQRT(x)的
产生一个错误;相反,你应该叫SQRT(复合物(X))
。
如果结果是复杂的数据的gpuArray和所有的虚部为零,这些部分被保留,所述数据仍然很复杂。这可能使用时产生影响分类
,是真实的
, 等等。
下表列出了可能返回的复杂数据,有超过其输出保持实际的输入范围内沿的功能。
功能 | 输入范围为真正的输出 |
---|---|
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 |
日志(X) |
X> = 0 |
log1p(x)的 |
X> = -1 |
日志10(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只有当数据在GPU上运行。例如,在GPU下面的代码运行,因为数据,第一输入,是在GPU上:
>>总和(gpuArray(魔(10)),2);
>>总和(魔(10),gpuArray(2));
岩浆是采取GPU加速的优势,线性代数例程库。Parallel Computing Toolbox中的杠杆作用MAGMA为gpuArrays实现线性代数函数来实现高性能和准确性。