主要内容

gpuArray

数组存储在GPU上

描述

一个gpuArray对象表示一个数组存储在GPU内存。大量的MATLAB函数®和其它工具箱支持gpuArray对象,允许您运行您的代码在gpu上最小的更改的代码。一起工作gpuArray对象,使用任何gpuArray启用了MATLAB函数等fft,mtimesmldivide。找到一个完整的列表gpuArray启用功能在MATLAB和其它工具箱,请参阅GPU-supported功能。有关更多信息,请参见运行在GPU MATLAB函数

如果你想从GPU检索数组,例如当使用一个不支持的功能gpuArray对象,使用收集函数。

请注意

你可以加载垫文件包含gpuArray数据时内存中的数组GPU是不可用的。一个gpuArray对象加载GPU是有限的,你不能用它来计算。使用一个gpuArray对象加载没有GPU,检索内容使用收集

创建

使用gpuArray将MATLAB工作区中的数组转换成一个gpuArray对象。一些MATLAB函数还允许您创建gpuArray直接对象。有关更多信息,请参见建立数组GPU

描述

例子

G = gpuArray (X)复制数组XGPU并返回gpuArray对象。

输入参数

全部展开

数组将GPU,指定为一个数字或逻辑数组。GPU设备必须有足够的空闲内存来存储数据。如果X已经是一个gpuArray对象,gpuArray输出X不变。

你也可以稀疏阵列转移到GPU。gpuArray只支持双精度的稀疏阵列。

例子:G = gpuArray(魔法(3));

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
复数的支持:是的

对象的功能

arrayfun 在GPU上应用函数数组的每个元素
收集 分布式阵列或gpuArray转移到本地工作区
pagefun 功能适用于分布式或GPU数组的每一页

这里有几种方法来检查的特征gpuArray对象。最像的同名的MATLAB函数。

isgpuarray 确定输入是否gpuArray
existsOnGPU 确定gpuArray或CUDAKernel GPU
isUnderlyingType 确定输入是否指定底层数据类型
ndims 数组维数
大小 数组大小
underlyingType 类型的基础数据确定数组的行为

几个MATLAB工具箱包括函数gpuArray支持。视图列出了所有功能的这些工具箱支持gpuArray对象,使用下表中的链接。功能列表信息指标的局限性或使用notes特定于在GPU上运行的函数。你可以检查使用笔记和局限性的扩展函数参考页面的功能部分。更新个人信息gpuArray启用功能,发布说明。

工具箱的名字 列表的功能gpuArray支持 GPU-Specific文档
MATLAB 功能与gpuArray支持
统计和机器学习的工具箱™ 功能与gpuArray支持(统计和机器学习的工具箱) 分析和模型数据在GPU上(统计和机器学习的工具箱)
图像处理工具箱™ 功能与gpuArray支持(图像处理工具箱) GPU计算(图像处理工具箱)
深度学习工具箱™

功能与gpuArray支持(深度学习工具箱)

*(参见深度学习在gpu上)

并行扩展深度学习,在gpu上,在云端(深度学习工具箱)

深度学习与MATLAB在多个gpu(深度学习工具箱)

计算机视觉工具箱™ 功能与gpuArray支持(计算机视觉工具箱) GPU代码生成和加速度(计算机视觉工具箱)
通信工具箱™ 功能与gpuArray支持(通信工具箱) 代码生成和加速支持(通信工具箱)
信号处理工具箱™ 功能与gpuArray支持(信号处理工具箱) 代码生成和GPU的支持(信号处理工具箱)
音频工具箱™ 功能与gpuArray支持(音频工具箱) 代码生成和GPU的支持(音频工具箱)
小波工具箱™ 功能与gpuArray支持(小波工具箱) 代码生成和GPU的支持(小波工具箱)
曲线拟合工具箱™ 功能与gpuArray支持(曲线拟合工具箱)

为一个函数列表gpuArray支持在所有MathWorks®2022世界杯八强谁会赢?产品,请参阅gpuArray支持功能。或者,您可以过滤产品。在帮助栏,点击功能。在功能列表中,浏览左侧窗格中选择一个产品,例如,MATLAB。在左窗格的底部,选择GPU数组。如果你选择了一个产品没有gpuArray启用功能,那么GPU数组过滤器是不可用的。

例子

全部折叠

从CPU与GPU,传输数据使用gpuArray函数。

创建一个数组X

X = (1、2、3);

转移XGPU。

G = gpuArray (X);

检查数据是否在GPU上。

isgpuarray (G)
ans =逻辑1

计算数组的element-wise广场G

GSq = g . ^ 2;

转移的结果GSq回到CPU。

XSq =收集(GSq)
XSq =1×31 4 9

检查数据没有在GPU上。

isgpuarray (XSq)
ans =逻辑0

您可以创建数据直接在GPU上直接利用一些MATLAB函数和指定选项”gpuArray”

创建一个数组的随机数直接在GPU上。

G =兰德(1,3,“gpuArray”)
G = 0.3640 0.5421 0.6543

检查输出存储在GPU上。

isgpuarray (G)
ans =逻辑1

这个例子展示了如何使用gpuArray启用了MATLAB函数来操作gpuArray对象。你可以检查你的GPU的属性使用gpuDevice函数。

gpuDevice
ans = CUDADevice属性:名称:“英伟达RTX A5000”指数:1 ComputeCapability:“8.6”SupportsDouble: 1 DriverVersion: 11.6000 ToolkitVersion: 11.2000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 (49.15 KB) MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475 e + 09年65535 65535]SIMDWidth: 32 TotalMemory: 25553076224 (25.55 GB) AvailableMemory: 25153765376 (25.15 GB) MultiprocessorCount: 64 ClockRateKHz: 1695000 ComputeMode:“违约”GPUOverlapsTransfers: 1 KernelExecutionTimeout: 0 CanMapHostMemory: 1 DeviceSupported: 1 DeviceAvailable: 1 DeviceSelected: 1

创建一个重复的行向量的值从-15年到15。将其传输到GPU和创建一个gpuArray对象,使用gpuArray函数。

X = [15:15 0 15:15 0 15:15];gpuX = gpuArray (X);谁gpuX
类属性名称大小字节gpuX 760 x95 gpuArray

操作与gpuArray对象,使用任何gpuArray启用了MATLAB函数。MATLAB自动运行在GPU的计算。有关更多信息,请参见运行在GPU MATLAB函数。例如,使用诊断接头,expm,国防部,,腹肌,fliplr在一起。

gpuE = expm(诊断接头(gpuX 1)) * expm(诊断接头(gpuX 1));gpuM =国防部(圆(abs (gpuE)), 2);gpuF = gpuM + fliplr (gpuM);

策划的结果。

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

如果你需要把数据从GPU,使用收集。传输数据到CPU可以是昂贵的,和通常是没有必要的,除非你需要使用结果不支持的功能gpuArray

结果=收集(gpuF);谁结果
类属性名称大小字节的结果96 x96 73728双

一般来说,运行代码的CPU和GPU可以产生不同的结果,由于数值精度和算法的GPU和CPU之间的差异。从CPU和GPU的答案都是同样有效的浮点近似真实的分析结果,在计算过程中一直受到不同的舍入行为。在本例中,结果是整数消除了舍入错误。

这个例子展示了如何使用MATLAB函数和运算符gpuArray对象来计算一个函数的积分使用蒙特卡洛积分法。

定义样本点的数量。在函数的域采样点,区间[1]在这两个x和y坐标,通过创建随机点的兰德函数。直接在GPU上创建一个随机的数组,使用兰德功能”,并指定gpuArray”。有关更多信息,请参见建立数组GPU

n = 1 e6;x = 2 *兰德(n, 1,“gpuArray”)1;y = 2 *兰特(n, 1,“gpuArray”)1;

定义功能集成,并利用蒙特卡罗积分公式。这个函数的值接近 π 采样点在单位圆内。因为代码使用gpuArray启用函数和运算符gpuArray对象,GPU的计算自动运行。您可以执行二进制操作,比如element-wise乘法使用相同的语法使用MATLAB数组。更多信息gpuArray启用功能,看到运行在GPU MATLAB函数

f = x。y ^ 2 +。^ 2 < = 1;结果f = 4 * 1 / n * *的(n, 1,“gpuArray”)
结果= 3.1403

提示

  • 如果你需要更好的性能,或者如果一个函数在GPU不可用,gpuArray支持以下选项:

    • 纯element-wise预编译和运行代码gpuArray对象,使用arrayfun函数。

    • 运行包含CUDA的c++代码®设备代码或库调用,使用一个墨西哥人的功能。有关更多信息,请参见运行包含CUDA MEX-Functions代码

    • 运行现有的GPU CUDA c++编写的内核,使用MATLAB CUDAKernel接口。有关更多信息,请参见CUDA GPU上或PTX代码运行

    • 从MATLAB代码生成CUDA代码,使用GPU编码器™。有关更多信息,请参见开始使用GPU编码器(GPU编码器)

  • 您可以控制在GPU使用随机数流gpurng

  • 没有一个可以超过intmax (“int32”):

    • 密集的数组的元素的数量。

    • 稀疏阵列的非零元素的数量。

    • 在任何给定的尺寸大小。例如,0 (0,3 e9,“gpuArray”)是不允许的。

选择

您还可以创建一个gpuArray通过指定一个对象使用MATLAB函数gpuArray输出。下表列出了MATLAB功能使您能够创建gpuArray直接对象。有关更多信息,请参见扩展功能的函数引用页面。

眼睛(___“gpuArray”) 真正的(___“gpuArray”)
(___“gpuArray”) 0(___“gpuArray”)
(___“gpuArray”) gpuArray。结肠
(___“gpuArray”) gpuArray。freqspace
(___“gpuArray”) gpuArray。linspace
兰德(___“gpuArray”) gpuArray。logspace
兰迪(___“gpuArray”) gpuArray。speye
randn(___“gpuArray”)

扩展功能

版本历史

介绍了R2010b

Baidu
map