主要内容

gpuArray

阵列存储在GPU上

描述

一种gpuArray对象表示存储在GPU内存中的数组。MATLAB中的大量函数®并在其他工具箱中支持金宝appgpuArray对象,允许您在GPU上运行代码,并且对代码的更严重更改。跟...共事gpuArray对象,使用任何gpuArray-enabled MATLAB函数,如FFT.mtimesmldivide.查找完整列表gpuArray- Matlab中的功能和其他工具箱中的功能,请参阅GPU-金宝appsupported功能.有关更多信息,请参阅在GPU上运行matlab函数

如果要从GPU检索数组,例如使用不支持的函数金宝appgpuArray对象,使用收集函数。

笔记

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

创建

gpuArray将Matlab Workspace中的数组转换为agpuArray对象。一些MATLAB功能也允许您创建gpuArray直接对象。有关更多信息,请参阅在GPU上建立阵列

描述

例子

G = gpuArray (X的)复制阵列X并返回agpuArray对象。

输入参数

全部展开

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

您还可以将稀疏阵列传输到GPU。gpuArray金宝app仅支持稀疏的双精度阵列。

例子:g = gpuarray(魔术(3));

数据类型:||int8|INT16|INT32.|int64|uint8|uint16|uint32|uint64|逻辑
复数支持:金宝app是的

对象功能

arrayfun 对GPU上阵列的每个元素应用函数
收集 将分布式数组或gpuArray转移到本地工作区
Pagefun. 将功能应用于分布式阵列或GPUARRAY的每个页面

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

isgpuarray 确定输入是否为gpuArray
存在于普通话 确定GPU上是否有gpuArray或CUDAKernel
IsunderLyingtype. 确定输入是否指定了基础数据类型
ndims. 数组维数
尺寸 数组大小
underlyingType 确定阵列行为的底层数据类型

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

工具箱名称 函数列表gpuArray金宝app GPU-Specific文档
MATLAB 功能与gpuArray金宝app
统计和机器学习工具箱™ 功能与gpuArray金宝app(统计和机器学习工具箱) GPU上的分析和模拟数据(统计和机器学习工具箱)
图像处理工具箱™ 功能与gpuArray金宝app(图像处理工具箱) GPU计算(图像处理工具箱)
深度学习工具箱™

功能与gpuArray金宝app(深度学习工具箱)

*(也可以看看与GPU的深入学习的)

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

在多个GPU上与Matlab进行深度学习(深度学习工具箱)

计算机Vision Toolbox™ 功能与gpuArray金宝app(电脑视觉工具箱) GPU代码生成和加速(电脑视觉工具箱)
通信工具箱™ 功能与gpuArray金宝app(通讯工具箱) 代码生成和加速支持金宝app(通讯工具箱)
信号处理工具箱™ 功能与gpuArray金宝app(信号处理工具箱) 代码生成和GPU支持金宝app(信号处理工具箱)
音频工具箱™ 功能与gpuArray金宝app(音频工具箱) 代码生成和GPU支持金宝app(音频工具箱)
小波工具箱™ 功能与gpuArray金宝app(小波工具箱) 代码生成和GPU支持金宝app(小波工具箱)
曲线配件工具箱™ 功能与gpuArray金宝app(曲线配件工具箱)

您可以浏览gpuArray所金宝app有MathWorks支持的函数®下载188bet金宝搏以下连结的产品:gpuArray-金宝app 支持的功能.或者,您可以按产品过滤。在这方面帮助吧,点击职能.在函数列表中,浏览左侧窗格选择一个产品,例如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上直接在GPU上创建数据并指定选项“GPUARRAY“

直接在GPU上创建一系列随机数。

g = rand(1,3,“gpuarray”的)
G = 0.3640 0.5421 0.6543

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

isgpuarray (G)
ANS =.逻辑1

这个例子展示了如何使用gpuArray-enabled MATLAB函数进行操作gpuArray对象。您可以使用使用的GPU的属性GPudevice.函数。

GPudevice.
ANS =具有属性的CUDADEVICE:名称:'TITAN RTX'索引:1 COPPECAPABIAL:'7.5'SupportSdouble:1驱动程序:11.200金宝app0工具包:11 maxthreadsperblock:1024 maxshmemperblock:49152 maxthreadblocksize:[1024 1024 64] MaxGridSize:[2.1475E + 09 6553565535] SIMDWIDTH:32 TotalMemory:2.5770E + 10可用性:2.4177E + 10 MultiProcessorCount:72 ClockRatekHz:1770000 CompleMode:'默认'GPUoverLapStransfers:1 KernelexecutionTimeout:1 CanmaphostMemory:1 CanmaphoStMemory:1 DeviceSuppor金宝appted:1 DeviceAvailable: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国防部圆形的ABS,fliplr一起。

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

策划的结果。

ImageC(GPUF);Colormap(翻转(灰色));

如果您需要从GPU转回数据,请使用收集.将数据转回CPU可能是昂贵的,并且通常无需,除非您需要使用不支持的函数使用结果金宝appgpuArray

结果=聚集(GPUF);谁是结果
名称大小字节类属性结果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金宝app支持以下选项:

    • 要预编译和运行纯粹的元素 - 方向代码gpuArray对象,使用arrayfun函数。

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

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

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

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

  • 下列各项不能超过Intmax(“Int32”)

    • 密集阵列的元素数。

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

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

备择方案

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

眼睛(___,“gpuarray”) 真正的(___,“gpuarray”)
错误的(___,“gpuarray”) Zeros.(___,“gpuarray”)
inf(___,“gpuarray”) GPUArray。结肠
(___,“gpuarray”) GPUArray。freqspace
(___,“gpuarray”) GPUArray。linspace
兰特(___,“gpuarray”) GPUArray。logspace.
兰迪(___,“gpuarray”) GPUArray。Speye.
randn(___,“gpuarray”)
介绍在R2010B.