在 GPU 上运行 MATLAB 函数
您可以通过在 GPU 上运行 MATLAB® 函数来加快代码执行速度。MATLAB 中的 GPU 计算需要 Parallel Computing Toolbox™。
带有 gpuArray 参量的 MATLAB 函数
如果您提供 gpuArray 数据参量,MATLAB 和其他工具箱中的许多函数会在 GPU 上自动运行。MATLAB 中的 gpuArray 表示存储在 GPU 上的数组。
A = gpuArray([1 0 1; -1 -2 0; 0 1 -1]); e = eig(A);
每当您使用至少一个 gpuArray 作为数据输入参量调用这些函数中的任何一个时,该函数就会在 GPU 上执行。该函数生成 gpuArray 作为结果,除非将数值数据返回到本地工作区更合适(例如,size)。您可以在同一函数调用中混合使用 gpuArray 数据和存储在主机内存中的数组来输入。支持 gpuArray 的函数包括离散傅里叶变换 (fft)、矩阵乘法 (mtimes)、左矩阵除法 (mldivide) 以及数百个其他函数。
gpuArray 输入的条件
仅当输入数据在 GPU 上时,支持 GPU 的函数才会在 GPU 上运行。参数参量的数据类型(例如维度或索引)不会影响函数的运行位置。例如,此代码中的 sum 函数在 GPU 上运行,因为数据(第一个输入)在 GPU 上。
A = rand(10); d = 2; sum(gpuArray(A),d);
sum 函数无法在 GPU 上运行,因为数据(第一个输入)不在 GPU 上。A = rand(10); d = 2; sum(A,gpuArray(d));
在 GPU 上处理复数
如果在 GPU 上运行的函数的输出可能很复杂,则必须明确指定其输入参量为复杂。有关详细信息,请参阅在 GPU 上处理复数。
在 GPU 上使用稀疏数组
sparse 函数可用于创建稀疏 gpuArray 对象。许多 MATLAB 函数支持稀疏 gpuArray 对象。有关详细信息,请参阅在 GPU 上使用稀疏数组。
检查支持 gpuArray 的函数
几个 MATLAB 工具箱包含支持 gpuArray 的函数。要查看这些工具箱中支持 gpuArray 对象的所有函数的列表,请使用下表中的链接。带有信息指示器的列表中的函数具有在 GPU 上运行该函数的特定限制或使用说明。您可以在函数参考页面的扩展功能部分查看使用说明和限制。有关单个启用 gpuArray 的函数的更新信息,请参阅发行说明。
| 工具箱名称 | 支持 gpuArray 的函数列表 | GPU 特定文档 |
|---|---|---|
| MATLAB | 支持 gpuArray 的函数 | |
| Statistics and Machine Learning Toolbox™ | 支持 gpuArray 的函数 (Statistics and Machine Learning Toolbox) | Analyze and Model Data on GPU (Statistics and Machine Learning Toolbox) |
| Image Processing Toolbox™ | 支持 gpuArray 的函数 (Image Processing Toolbox) | GPU 计算 (Image Processing Toolbox) |
| Medical Imaging Toolbox™ | 支持 gpuArray 的函数 (Medical Imaging Toolbox) | |
| Deep Learning Toolbox™ | 支持 另请参阅利用 GPU 进行深度学习 | Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox) Deep Learning with MATLAB on Multiple GPUs (Deep Learning Toolbox) |
| Computer Vision Toolbox™ | 支持 gpuArray 的函数 (Computer Vision Toolbox) | GPU 代码生成和加速 (Computer Vision Toolbox) |
| Communications Toolbox™ | 支持 gpuArray 的函数 (Communications Toolbox) | Acceleration (Communications Toolbox) |
| 5G Toolbox™ | 支持 gpuArray 的函数 (5G Toolbox) | |
| Antenna Toolbox™ | 支持 gpuArray 的函数 (Antenna Toolbox) | |
| Signal Processing Toolbox™ | 支持 gpuArray 的函数 (Signal Processing Toolbox) | 代码生成和 GPU 支持 (Signal Processing Toolbox) |
| Audio Toolbox™ | 支持 gpuArray 的函数 (Audio Toolbox) | Code Generation and GPU Support (Audio Toolbox) |
| Wavelet Toolbox™ | 支持 gpuArray 的函数 (Wavelet Toolbox) | Code Generation and GPU Support (Wavelet Toolbox) |
| Predictive Maintenance Toolbox™ | 支持 gpuArray 的函数 (Predictive Maintenance Toolbox) | |
| Curve Fitting Toolbox™ | 支持 gpuArray 的函数 (Curve Fitting Toolbox) | |
| Radar Toolbox | 支持 gpuArray 的函数 (Radar Toolbox) |
有关所有 MathWorks® 产品中支持 gpuArray 的函数列表,请参阅 gpuArray 支持的函数。或者,您也可以按产品进行过滤。在帮助栏上,点击函数。在函数列表中,浏览左侧窗格以选择一个产品,例如 MATLAB。在左侧窗格的底部,选择 GPU 数组。如果您选择的产品不具备启用 gpuArray 的函数,则 GPU 数组过滤器不可用。
利用 GPU 进行深度学习
对于 Deep Learning Toolbox 中的许多函数,如果您有受支持的 GPU 和 Parallel Computing Toolbox,则 GPU 支持是自动的。您不需要将数据转换为 gpuArray。以下是默认情况下在 GPU 上运行(如果可用)的函数的非详尽列表。
trainnet(Deep Learning Toolbox)minibatchpredict(Deep Learning Toolbox)
有关 Deep Learning Toolbox 中的自动 GPU 支持的更多信息,请参阅 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox)。
对于自定义训练循环,将数据转换为 gpuArray 并使用支持 gpuArray 的函数 (Deep Learning Toolbox)。
检查或选择 GPU
如果您有受支持的 GPU,那么 MATLAB 会自动使用它进行 GPU 计算。如果您有多个 GPU,那么您可以使用 gpuDeviceTable 来检查系统中检测到的所有 GPU 的属性。您可以使用 gpuDevice 选择其中一个,或者使用带有并行池的多个 GPU。有关详细信息,请参阅识别并选择 GPU 设备和在多个 GPU 上运行 MATLAB 函数。要检查您的 GPU 是否受支持,请参阅 GPU 计算要求。
gpuDeviceTable
Index Name ComputeCapability DeviceAvailable DeviceSelected
_____ __________________ _________________ _______________ ______________
1 "NVIDIA RTX A5000" "8.6" true true
2 "Quadro P620" "6.1" true false 或者,您可以确定可用的 GPU 设备数量,检查其中一些属性,然后从 MATLAB 桌面选择要使用的设备。在主页选项卡上的环境区域中,选择并行 > 选择 GPU 环境。

将 MATLAB 函数与 GPU 结合使用
此示例显示如何使用启用 gpuArray 的 MATLAB 函数来操作 gpuArray 对象。您可以使用gpuDevice函数检查 GPU 的属性。
gpuDevice
ans =
CUDADevice with properties:
Name: 'NVIDIA RTX A5000'
Index: 1 (of 2)
ComputeCapability: '8.6'
DriverModel: 'TCC'
TotalMemory: 25544294400 (25.54 GB)
AvailableMemory: 24734105600 (24.73 GB)
DeviceAvailable: true
DeviceSelected: true
Show all properties.
创建一个重复值从 -15 到 15 的行向量。要将其传输到 GPU 并创建 gpuArray 对象,请使用 gpuArray函数。
X = [-15:15 0 -15:15 0 -15:15];
gpuX = gpuArray(X);
whos gpuXName Size Bytes Class Attributes gpuX 1x95 760 gpuArray
要操作 gpuArray 对象,请使用任何启用 gpuArray 的 MATLAB 函数。MATLAB 自动在 GPU 上运行计算。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数。例如,将 diag、expm、mod、round、abs 和 fliplr 一起使用。
gpuE = expm(diag(gpuX,-1)) * expm(diag(gpuX,1)); gpuM = mod(round(abs(gpuE)),2); gpuF = gpuM + fliplr(gpuM);
绘制结果。
imagesc(gpuF); colormap(flip(gray));

如果需要将数据从 GPU 传回,请使用 gather。将数据传输回 CPU 的成本可能很高,并且通常没有必要,除非您需要将结果与不支持 gpuArray 的函数一起使用。
result = gather(gpuF);
whos resultName Size Bytes Class Attributes result 96x96 73728 double
一般来说,由于 GPU 和 CPU 之间的数值精度和算法差异,在 CPU 和 GPU 上运行代码会产生不同的结果。CPU 和 GPU 的答案都是对真实分析结果同样有效的浮点近似值,只是在计算过程中受到了不同的舍入行为的影响。在这个示例中,结果是整数,并且 round 消除了舍入误差。
使用 GPU 的示例
在 GPU 上运行 MATLAB 函数的示例
以下示例将 gpuArray 对象传递给支持的 MATLAB 函数,从而使这些函数在 GPU 上运行。
使用 GPU 的其他示例
以下示例利用了其他自动 GPU 支持。
| 工具箱名称 | 示例 |
|---|---|
| Deep Learning Toolbox |
|
| Communications Toolbox |
|
致谢
MAGMA 是一个利用 GPU 加速的线性代数例程库。Parallel Computing Toolbox 中为 gpuArray 对象实现的线性代数函数利用 MAGMA 实现高性能和准确性。
另请参阅
gpuArray | gpuDevice | gpuDeviceTable | canUseGPU | validateGPU