主要内容

GPUArray.

数组存储在GPU上

描述

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

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

笔记

您可以将包含GPUARRAY数据的MAT文件加载为内存阵列,当GPU不可用时。没有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. 数组尺寸数
尺寸 数组大小
底蕴蒂上 确定数组行为的底层数据类型

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

例子

全部收缩

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

GPudevice.
ANS =带有属性的Cudadevice:名称:'GeForce GTX 1080'索引:1 Computapapabity:'6.1'支持DOUPE:1驱动程序:10.1000工具包:金宝app101000 MAXSHREADSPERCLOCK:1024 MAXSHMEMPERBLOCK:49152 MAXTHREADBLOCKSIZE:[1024 1024 64] MAXGRIDSIZE:[2.1475E + 0965535 65535] SIMDWIDTH:32 TotalMemory:8.5899E + 09可用性:6.9012E + 09多处理器:1733500 CompleMode:'默认'GPuoverLapStransfers:1 KernelexecutionTimeout:1 CanmaphostMemory:1 DemableOpported:1金宝app

创建一个行向量,重复从-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上运行CPU的代码,则可能存在差异,因为GPU和CPU之间的数值精度和算法差异。对CPU和GPU的答案是对真实分析结果的同等有效的浮点近似,在计算期间经过不同的圆形OFF。在此示例中,结果是整数和圆形的消除了循环错误。

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

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

n = 1E6;x = 2 * rand(n,1,'gpuarray')-1;y = 2 * rand(n,1,'gpuarray')-1;

定义要集成的功能,并使用它上的蒙特卡罗集成公式。此功能近似于值 π 通过单位圆内的采样点。因为代码使用GPUArrays上启用了GPU的函数和运算符,所以计算会自动在GPU上运行。您可以使用与MATLAB阵列使用相同的语法执行二进制操作,例如元素 - WISE乘法。要了解有关支持GPU的函数的更多信息,请参阅在GPU上运行matlab函数

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

此示例显示了如何使用启用GPU的MATLAB函数来计算众所周知的数学结构:Mandelbrot Set。使用该GPU检查您的GPUGPudevice.功能。

定义参数。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
名称大小字节类属性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);

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

ImageC(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.