主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

在 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) 在单精度计算中的运算速度快于双精度计算。如果您的工作流不需要双精度,请考虑使用 single 函数将数据转换为单精度,或直接创建单精度 gpuArray 数据。有关详细信息,请参阅以单精度执行计算

在 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™

支持 gpuArray 的函数 (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 上运行(如果可用)的函数的非详尽列表。

有关 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 环境

The Parallel menu, including the Select GPU Environment pane showing two GPU devices. A tick next to the first device indicates that it is the selected device.

将 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 gpuX
  Name      Size            Bytes  Class       Attributes

  gpuX      1x95              760  gpuArray              

要操作 gpuArray 对象,请使用任何启用 gpuArray 的 MATLAB 函数。MATLAB 自动在 GPU 上运行计算。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数。例如,将 diagexpmmodroundabsfliplr 一起使用。

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 result
  Name         Size            Bytes  Class     Attributes

  result      96x96            73728  double              

一般来说,由于 GPU 和 CPU 之间的数值精度和算法差异,在 CPU 和 GPU 上运行代码会产生不同的结果。CPU 和 GPU 的答案都是对真实分析结果同样有效的浮点近似值,只是在计算过程中受到了不同的舍入行为的影响。在这个示例中,结果是整数,并且 round 消除了舍入误差。

使用 GPU 的示例

在 GPU 上运行 MATLAB 函数的示例

以下示例将 gpuArray 对象传递给支持的 MATLAB 函数,从而使这些函数在 GPU 上运行。

工具箱名称示例
MATLAB
Image Processing Toolbox
Deep Learning Toolbox
Statistics and Machine Learning Toolbox
Signal Processing Toolbox
Audio Toolbox
Communications Toolbox
5G Toolbox
Antenna Toolbox
Wavelet Toolbox

使用 GPU 的其他示例

以下示例利用了其他自动 GPU 支持。

工具箱名称示例
Deep Learning Toolbox
Communications Toolbox

致谢

MAGMA 是一个利用 GPU 加速的线性代数例程库。Parallel Computing Toolbox 中为 gpuArray 对象实现的线性代数函数利用 MAGMA 实现高性能和准确性。

另请参阅

| | | |

主题