gpuArray
存储在 GPU 上的数组
说明
gpuArray 对象表示存储在 GPU 内存中的数组。MATLAB® 和其他工具箱中的大量函数支持 gpuArray 对象,允许您以最少的代码更改在 GPU 上运行代码。要使用 gpuArray 对象,请使用任何启用 gpuArray 的 MATLAB 函数,例如 fft、mtimes 或 mldivide。要查找 MATLAB 和其他工具箱中启用 gpuArray 的函数的完整列表,请参阅 GPU 支持的函数。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数。
如果您想从 GPU 检索数组,例如当使用不支持 gpuArray 对象的函数时,请使用 gather 函数。
注意
当 GPU 不可用时,您可以将包含 gpuArray 数据的 MAT 文件加载为内存数组。未使用 GPU 加载的 gpuArray 对象受到限制,您无法使用它进行计算。要使用未通过 GPU 加载的 gpuArray 对象,请使用 gather 检索内容。
创建对象
使用 gpuArray 将 MATLAB 工作区中的数组转换为 gpuArray 对象。一些 MATLAB 函数还允许您直接创建 gpuArray 对象。有关详细信息,请参阅在 GPU 上建立数组。
输入参量
对象函数
有几种方法可以检查 gpuArray 对象的特征。大多数行为类似于同名的 MATLAB 函数。
isgpuarray | 判断输入是否为 gpuArray |
existsOnGPU | 确定 GPU 上是否提供 gpuArray 或 CUDAKernel |
isUnderlyingType | 确定输入是否有指定的基础数据类型 |
ndims | 数组维度数目 |
size | 数组大小 |
underlyingType | 确定数组行为的基础数据的类型 |
几个 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 数组过滤器不可用。
示例
限制
以下任何一项都不能超过
intmax("int32"):密集数组的元素数量。
稀疏数组中非零元素的数量。
任意给定维度的大小。例如,不允许使用
zeros(0,3e9,"gpuArray")。
不支持使用
distributed或codistributed函数在并行池中的工作单元之间分配gpuArray。如果您有多个 GPU,并且并行池中的每个工作单元都可以访问唯一的 GPU,那么您可以手动拆分或最初将数据生成为不同工作单元上的多个gpuArray对象。有关如何在并行池中使用gpuArray数据的示例,请参阅 在多个 GPU 上运行 MATLAB 函数。稀疏
gpuArray限制:不支持逻辑稀疏 GPU 数组。
稀疏 GPU 数组仅支持通过索引引用整行或整列。
不支持通过索引为稀疏 GPU 数组分配值。
有关详细信息,请参阅在 GPU 上使用稀疏数组。
提示
如果您需要更好的性能,或者 GPU 上无法使用某个函数,
gpuArray支持以下选项:要对
gpuArray对象预编译并运行纯元素代码,请使用arrayfun函数。要运行包含 CUDA® 设备代码或库调用的 C++ 代码,请使用 MEX 函数。有关详细信息,请参阅运行包含 CUDA 代码的 MEX 函数。
要运行用 CUDA C++ 编写的现有 GPU 内核,请使用 MATLAB
CUDAKernel接口。有关详细信息,请参阅在 GPU 上运行 CUDA 或 PTX 代码。要从 CUDA 代码生成 MATLAB 代码,请使用 GPU Coder™。有关详细信息,请参阅Get Started with GPU Coder (GPU Coder)。
大多数图形处理单元 (GPU) 在单精度计算中的运算速度快于双精度计算。如果您的工作流不需要双精度,请考虑使用
single函数将数据转换为单精度,或直接创建单精度gpuArray数据。有关详细信息,请参阅以单精度执行计算。要控制 GPU 上的随机数流,请使用
gpurng函数。
替代方法
您还可以通过指定 gpuArray 输出,使用一些 MATLAB 函数创建 gpuArray 对象。下表列出了使您能够直接创建 gpuArray 对象的 MATLAB 函数。有关更多信息,请参阅函数参考页的扩展功能部分。
| (自 R2024a 起) |
| gpuArray.colon |
| gpuArray.freqspace |
| gpuArray.linspace |
| gpuArray.logspace |
| gpuArray.speye |
| gpuArray.sprand |
| gpuArray.sprandn |
| gpuArray.sprandsym |
|
