主要内容

gpuArray

阵列存储在GPU上

描述

A.gpuArray对象表示存储在GPU内存中的数组®并在其他工具箱中支持万博1manbetxgpuArray对象,允许您在GPU上运行代码,而对代码的更改最少gpuArray对象,使用任何gpuArray-enabled MATLAB函数,如快速傅里叶变换,mtimesmldivide。以查找gpuArray-在MATLAB和其他工具箱中启用的函数,请参见GPU-万博1manbetxsupported功能.有关更多信息,请参见在GPU上运行MATLAB函数

如果要从GPU检索阵列,例如在使用不支持的函数时万博1manbetxgpuArray对象,使用聚集函数。

笔记

您可以加载MAT文件包含gpuArray当GPU不可用时,将数据作为内存阵列。A.gpuArray没有GPU加载的对象是有限的,您不能将其用于计算gpuArray对象在没有GPU的情况下加载,使用聚集

创建

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

描述

实例

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

输入参数

全部展开

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

您还可以将稀疏阵列传输到GPU。gpuArray万博1manbetx仅支持双精度稀疏数组。

例子:G=gpuArray(magic(3));

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|必然的
复数支持:万博1manbetx是的

目标函数

arrayfun 对GPU上阵列的每个元素应用函数
聚集 将分布式数组或gpuArray转移到本地工作区
寻欢作乐 将函数应用于分布式阵列或gpuArray的每个页面

有几种方法可用于检查一个系统的特性gpuArray对象。大多数函数的行为类似于同名的MATLAB函数。

isgpuarray 确定输入是否正确gpuArray
现存松浦 确定GPU上是否有gpuArray或CUDAKernel
下垫式 确定输入是否指定了基础数据类型
数组的维数 数组维数
大小 数组大小
下垫式 决定数组行为的基础数据类型

几个MATLAB工具箱包括内置的函数gpuArray万博1manbetx支持。查看这些工具箱中支持的所有功能的列表万博1manbetxgpuArray对象,请使用下表中的链接。具有信息指示器的列表中的函数具有特定于在GPU上运行该函数的限制或用法说明。您可以在函数参考页的“扩展功能”部分中查看用法说明和限制。有关单个函数的更新信息,请参阅gpuArray-enabled函数,请参阅发布说明。

工具箱名称 函数列表gpuArray万博1manbetx 特定于GPU的文档
MATLAB 功能与gpuArray万博1manbetx
统计和机器学习工具箱™ 功能与gpuArray万博1manbetx(统计和机器学习工具箱) 在GPU上分析和建模数据(统计和机器学习工具箱)
图像处理工具箱™ 功能与gpuArray万博1manbetx(图像处理工具箱) 计算能力(图像处理工具箱)
深度学习工具箱™

功能与gpuArray万博1manbetx(深度学习工具箱)

*(另见GPU深度学习)

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

基于多gpu的MATLAB深度学习(深度学习工具箱)

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

您可以浏览gpuArray所万博1manbetx有MathWorks支持的函数®s manbetx 845以下连结的产品:gpuArray-万博1manbetx支持函数。或者,您可以按产品筛选。在帮助栏,单击功能.在函数列表中,浏览左侧窗格选择一个产品,例如MATLAB。在左侧窗格的底部,选择GPU数组. 如果您选择的产品没有gpuArray-启用功能,然后GPU数组过滤器不可用。

例子

全部崩溃

要将数据从CPU传输到GPU,请使用gpuArray函数。

创建一个数组X

X=[1,2,3];

转移XGPU。

G=gpuArray(X);

检查数据是否在GPU上。

isgpuarray (G)
ans=必然的1.

计算数组的元素平方G

GSq=G.^2;

转移的结果GSq回到CPU。

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

检查数据是否不在GPU上。

isgpuarray(XSq)
ans=必然的0

通过使用一些MATLAB函数并指定选项,您可以直接在GPU上创建数据”gpuArray“

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

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

检查输出是否存储在GPU上。

isgpuarray (G)
ans=必然的1.

这个例子展示了如何使用gpuArray-enabled MATLAB函数进行操作gpuArray物体。您可以使用gpuDevice函数。

gpuDevice
ans=CUDADevice,带属性:名称:“TITAN RTX”索引:1计算能力:“7.5”支持双:1驱动服务器版本:11.2000工具套件版本:11 MaxThread万博1manbetxsPerBlock:1024 MaxShmemPerBlock:49152 MaxThreadBlockSize:[1024 1024 64]MaxGridSize:[2.1475e+09 65535 65535]SIMDWidth:32总内存:2.5770e+10可用内存:2.4177e+10多处理器计数:72时钟频率kHz:1770000计算模式:“默认”GPUOverlapsTransfers:1内核执行时间:1 CanMapHostMemory:1设备支持:1设备可用:1设备选择:1设备

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

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

操作gpuArray对象,使用任何gpuArray启用了MATLAB函数。MATLAB在GPU上自动运行计算。有关更多信息,请参见在GPU上运行MATLAB函数.例如,使用诊断,expm,国防部,圆形的,防抱死制动系统,fliplr在一起

gpuE = expm(diag(gpuX,-1)) * expm(diag(gpuX,1));gpuM =国防部(圆(abs (gpuE)), 2);gpuF = gpuM + fliplr(gpuM);

策划的结果。

彩色贴图(翻转(灰色));

如果需要从GPU传回数据,请使用聚集. 将数据传输回CPU的成本很高,并且通常不需要,除非您需要将结果与不支持的函数一起使用万博1manbetxgpuArray

结果=聚集(gpuF);WHO后果
名称大小字节类属性结果96x96 73728双精度

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

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

定义要采样的点数。在函数域中采样点数,间隔[1]在这两个x和y坐标,通过使用兰德函数。要直接在GPU上创建随机阵列,请使用兰德函数和指定gpuArray“.有关更多信息,请参见在GPU上建立阵列

n=1e6;x=2*rand(n,1,“gpuArray”)-1、 y=2*rand(n,1,“gpuArray”) 1;

定义要积分的函数,并用蒙特卡罗积分公式对其进行积分。这个函数近似于 π 通过单位圆内的采样点。因为代码使用gpuArray-enabled函数和操作符gpuArray对象时,计算会自动在GPU上运行。您可以使用与MATLAB数组相同的语法执行二进制运算,例如按元素进行乘法。有关gpuArray启用功能,看到在GPU上运行MATLAB函数

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

提示

  • 如果你需要更好的性能,或者某个功能在GPU上不可用,gpuArray万博1manbetx支持以下选项:

  • 可以通过控制图形处理器上的随机数流gpurng

  • 下列各项不能超过intmax(“int32”):

    • 密集数组的元素数。

    • 稀疏数组中非零元素的数目。

    • 任何给定维度中的大小。例如,零(0,3e9,“gpuArray”)这是不允许的。

选择

您还可以创建gpuArray使用MATLAB函数,通过指定gpuArray输出。下表列出了可以创建的MATLAB函数gpuArray有关更多信息,请参阅函数参考页的扩展功能部分。

眼睛(“gpuArray”) 真正的(“gpuArray”)
错误的(“gpuArray”) (“gpuArray”)
Inf(“gpuArray”) gpuArray。结肠
(“gpuArray”) gpuArray。freqspace
(“gpuArray”) gpuArray。linspace
兰德(“gpuArray”) gpuArray。日志空间
兰迪(“gpuArray”) gpuArray。斯皮耶
randn(“gpuArray”)
R2010b中引入