主要内容

gpuArray

存储在GPU上的阵列

描述

一个gpuArray对象表示存储在GPU内存中的数组。MATLAB中的大量函数®并在其他工具箱中提供支持万博1manbetxgpuArray对象,允许您在GPU上运行代码,而对代码的更改最少gpuArray对象,使用任何gpuArray-启用MATLAB功能,如快速傅里叶变换时间mldivide.找到…的完整列表gpuArray-enabled函数在MATLAB和其他工具箱中,参见GPU支万博1manbetx持的功能。有关详细信息,请参阅在GPU上运行MATLAB函数

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

请注意

可以加载包含以下内容的MAT文件:gpuArray当GPU不可用时,数据作为内存阵列。agpuArray没有GPU加载的对象是有限的,你不能使用它进行计算。使用一个gpuArray对象在没有GPU的情况下加载,使用收集

创造

使用gpuArray将MATLAB工作空间中的数组转换为gpuArray一些MATLAB函数还允许您创建gpuArray对象。有关详细信息,请参阅在GPU上建立阵列

描述

例子

G=gpuArray(X复制数组X发送到GPU并返回gpuArray对象

输入参数

全部展开

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

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

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

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
复数的支持:万博1manbetx

对象的功能

arrayfun 将函数应用于GPU上阵列的每个元素
收集 将分布式阵列或gpuArray传输到本地工作区
pagefun 对分布式阵列或gpuArray的每个页面应用函数

有几种方法可以检验a的特性gpuArray大多数函数的行为类似于同名的MATLAB函数。

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

一些MATLAB工具箱包括内置的函数gpuArray万博1manbetx支持。查看这些工具箱中支持的所有函数的列表gpuArray对象,请使用下表中的链接。带有信息指标的列表中的功能,在GPU上运行时会有一定的限制或使用说明。您可以在功能参考页面的扩展功能部分查看使用说明和限制。有关个人资料的更新gpuArray-已启用的功能,请参阅发行说明。

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

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

*(参见GPU深度学习

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

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

计算机视觉工具箱™ 功能与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-enabled函数,然后GPU阵列过滤器不可用。

例子

全部折叠

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

创建一个数组X

X=[1,2,3];

转移X到GPU。

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-使MATLAB函数能够与gpuArray对象。您可以使用gpuDevice函数。

gpuDevice
ans = CUDADevice with properties: Name: 'TITAN RTX' Index: 1 ComputeCapability: '7.5' 万博1manbetxSupportsDouble: 1 DriverVersion: 11.2000 ToolkitVersion: 11 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 2.5770e+10 AvailableMemory:2.4177e+10 MultiprocessorCount: 72 ClockRateKHz: 1770000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 Device万博1manbetxSupported: 1 DeviceAvailable: 1 DeviceSelected: 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函数.例如,使用诊断矩阵指数函数摩登派青年圆形的腹肌fliplr在一起。

gpuE=expm(diag(gpuX,-1))*expm(diag(gpuX,1));gpuM=mod(round(abs(gpuE)),2);gpuF=gpuM+fliplr(gpuM);

绘制结果。

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

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

结果=聚集(gpuF);WHO结果
Name Size Bytes Class Attributes result 96x96 73728 double

一般情况下,由于GPU和CPU的数值精度和算法的不同,在CPU和GPU上运行的代码会产生不同的结果。来自CPU和GPU的答案都是与真实分析结果相同的有效浮点近似,在计算过程中受到了不同的舍入行为。在这个例子中,结果是整数和圆形的消除四舍五入错误。

此示例演示如何将MATLAB函数和运算符用于gpuArray对象使用蒙特卡罗积分方法计算函数的积分。

定义要采样的点数。在函数域中采样点数,间隔[-1,1]两者xy坐标,通过创建随机的点兰德要直接在GPU上创建随机数组,请使用兰德函数并指定“gpuArray”。有关详细信息,请参阅在GPU上建立阵列

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

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

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

提示

  • 如果您需要更好的性能,或者GPU上没有功能,gpuArray万博1manbetx支持以下选项:

    • 预编译并运行纯元素代码gpuArray对象,使用arrayfun函数。

    • 运行包含CUDA的C++代码®设备代码或库调用,请使用MEX函数。有关详细信息,请参阅运行包含CUDA代码的MEX函数

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

    • 要从MATLAB代码生成CUDA代码,请使用GPU编码器™. 有关详细信息,请参阅开始与GPU编码器(GPU编码器)

  • 您可以使用以下命令控制GPU上的随机数流:gpurng

  • 以下任何一项都不能超过intmax(“int32”)

    • 密集数组的元素数。

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

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

选择

您还可以创建一个gpuArray通过指定gpuArray下表列出了使您能够创建gpuArray对象。有关详细信息,请参阅the Extended Capabilities section of the function reference page.

眼睛(___“gpuArray”) 符合事实的(___“gpuArray”)
(___“gpuArray”) 0(___“gpuArray”)
Inf(___“gpuArray”) gpuArray。冒号
(___“gpuArray”) gpuArray。频率空间
一个(___“gpuArray”) gpuArray。邻域
兰德(___“gpuArray”) gpuArray。logspace
兰迪(___“gpuArray”) gpuArray。speye
兰登(___“gpuArray”)
介绍了R2010b