主要内容

GPUArray.

数组存储在GPU上

描述

一种GPUArray.对象表示存储在GPU上的数组。跟...共事GPUArray.对象,使用任何支持GPU的MATLAB®函数。你可以在GPU上执行的CUDA内核中直接使用数组进行计算。有关更多信息,请参阅在GPU上运行matlab函数

如果需要从GPU中检索阵列,例如使用不支持的函数时金宝appGPUArray.对象,使用收集函数。

笔记

当GPU不可用时,可以将包含gpuArray数据的MAT文件加载为内存阵列。没有GPU加载的gpuArray是有限的,你不能使用它进行计算。要使用没有GPU加载的gpuArray,请使用收集

创建

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

描述

例子

G = gpuArray (X复制阵列X到GPU并返回一个GPUArray.目的。

输入参数

全部展开

数组要将其传输到GPU,指定为数字或逻辑数组。GPU设备必须具有足够的自由内存来存储数据。如果X已经是A.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函数。

存在的浦 确定GPUARRAY或CUDAKERNEL是否可在GPU上使用
是平等的 确定数组平等
isnumeric. 确定输入是否为数字数组
颁奖物 确定输入是否稀疏
Isunderlyingtype. 确定输入是否指定了底层数据类型
长度 最大阵列维度的长度
ndims. 数组尺寸数
尺寸 数组大小
underlyingType 确定数组行为的底层数据类型

其他方法GPUArray.对象太多了在这里列出。最像和行为与同名的Matlab函数相同。看在GPU上运行matlab函数

例子

全部折叠

此示例显示如何使用GPU的MATLAB函数与GPUARRAYS运行。您可以使用GPU的属性使用gpuDevice函数。

gpuDevice
ans = CUDADevice属性:名称:“GeForce 1080 GTX公司”指数:1 ComputeCapability:“6.1”SupportsDouble: 1 Drive金宝apprVersion: 10.1000 ToolkitVersion: 10.1000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475 e + 09年65535 65535]SIMDWidth: 32 TotalMemory: 8.5899 e + 09 AvailableMemory:6.9012e+09 MultiprocessorCount: 20 ClockRateKHz: 1733500 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 Device金宝appSupported: 1 DeviceSelected: 1

创建一个行向量,重复从-15到15的值。要将其转移到GPU并创建gpuArray,请使用GPUArray.函数。

x = [-15:15 0 -15:15 0 -15:15];gpux = gpuarray(x);谁是gpuX
名称大小字节类属性gpux 1x95 4 gpuarray

要使用GPUARRASTED,请使用启用任何GPU的MATLAB功能。MATLAB自动在GPU上运行计算。有关更多信息,请参阅在GPU上运行matlab函数.例如,使用组合诊断接头EXPM.国防部圆形的ABS.,Pliplr.

GPUE = EXPM(DIAG(GPUX,-1))* EXPM(DIAG(GPUX,1));gpum = mod(圆形(abs(abs(abs)),2);gpuf = gpum + pliplr(gpum);

绘制结果。

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

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

结果=聚集(GPUF);谁是结果
名称大小字节类属性结果96x96 73728双倍

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

此示例显示如何使用MATLAB函数和运营商使用Monte Carlo Integration方法来计算功能的积分。

定义样本的点数。函数域中的采样点,间隔[-1,1]在这两个Xy坐标,通过创建随机的点兰特函数。要直接在GPU上创建随机数组,请使用兰特功能并指定'gpuarray'.有关更多信息,请参阅在GPU上建立阵列

n = 1 e6;x = 2 *兰德(n, 1,'gpuarray')-1;y = 2 * rand(n,1,'gpuarray')-1;

定义要集成的功能,并使用它上的蒙特卡罗集成公式。此功能近似于值 π 通过对单位圆内的点进行采样。由于代码使用了gpuArrays上启用了GPU的函数和操作符,计算将自动在GPU上运行。您可以使用与MATLAB数组相同的语法执行二进制运算,例如按元素进行乘法。要了解更多关于启用gpu的功能,请参见在GPU上运行matlab函数

f = x。^ 2 + y。^ 2 <= 1;结果= 4 * 1 / n * f'*(n,1,'gpuarray'
结果= 3.1403.

这个例子展示了如何使用支持gpu的MATLAB函数来计算一个著名的数学结构:Mandelbrot集合。检查您的GPU使用gpuDevice函数。

定义参数。Mandelbrot算法迭代真实和虚部的网格。以下代码定义了迭代,网格大小和网格限制的数量。

最大= 500;gridsize = 1000;XLIM = [-0.748766713922161,-0.7487667077771757];ylim = [0.12364084894862,0.123640851045266];

你可以使用GPUArray.将数据传输到GPU并创建一个功能GPUArray.,也可以直接在GPU上创建阵列。GPUArray.提供可用于创建数据阵列的许多功能的GPU版本,例如Linspace..有关更多信息,请参阅直接创建GPU阵列

x = gpuarray.linspace(xlim(1),xlim(2),gridsize);y = gpuarray.linspace(ylim(1),ylim(2),gridsize);谁是Xy
Name Size Bytes Class Attributes x 1x1000 4 gpuArray y 1x1000 4 gpuArray

许多MATLAB功能支持GPUARRAYS。金宝app当您为所有支持GPU的函数提供GPUArray参数时,该函数在GPU上自动运行。有关更多信息,请参阅在GPU上运行matlab函数.为算法创建一个复杂的网格,并创建数组数数的结果。要在GPU上直接创建该阵列,请使用函数,并指定'gpuarray'

[Xgrid,Ygrid] = meshgrid(x,y);z0 =复合物(Xgrid,Ygrid);count = =(大小(z0),'gpuarray');

下面的代码使用使能gpu的函数实现了Mandelbrot算法。因为代码使用了gpuArrays,所以计算发生在GPU上。

z = z0;为了n = 0:maxIterations z = z。* z + z0;内部= abs(z)<= 2;count =内部计数+;结束count = log(count);

完成计算时,请绘制结果。

Imagesc (x,y,count) colormap([jet();flipud(jet());0 0 0]);轴

提示

  • 如果你需要提高性能,或者某个功能对GPU不可用,GPUArray.金宝app支持以下选项:

    • 要预先编译和运行纯粹的元素 - 方向代码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.通过指定a使用一些matlab函数的对象GPUArray.输出。下表列出了可以创建的可用MATLAB函数GPUArray.直接对象。

眼睛(___,'gpuarray') 兰特(___,'gpuarray')
(___,'gpuarray') 兰迪(___,'gpuarray')
INF.(___,'gpuarray') 兰德(___,'gpuarray')
(___,'gpuarray') GPUArray。结肠
(___,'gpuarray') GPUArray。Freqspace.
真的(___,'gpuarray') GPUArray。Linspace.
Zeros.(___,'gpuarray') GPUArray。logspace
GPUArray。Speye.

的函数的类特定帮助GPUArray.前缀,类型

帮助gpuarray。functionname

在哪里functionname是该方法的名称。例如,获得帮助结肠、类型

帮助gpuarray.colon.
介绍了R2010b