在 GPU 上建立数组
MATLAB® 中的 gpuArray
表示存储在 GPU 内存中的数组。有关支持 GPU 上的数组的函数的更多信息,请参阅 在 GPU 上运行 MATLAB 函数。
根据现有数据创建 GPU 数组
将数组发送到 GPU
您可以通过将现有数组从主机内存传输到 GPU 来创建 GPU 数组。使用 gpuArray
函数将数组从主机内存传输到 GPU。
gpuArray
函数仅支持数值输入参量,例如 single
、double
、int8
或 logical
输入参量。gpuArray
函数支持复值输入。有关详细信息,请参阅在 GPU 上处理复数。
N = 6; M = magic(N); G = gpuArray(M);
从 GPU 检索数组
要将数组从 GPU 传输到主机内存,请使用 gather
函数。该函数返回存储在主机内存中的常规 MATLAB 数组。使用 isequal
验证 gather
函数是否返回正确的值。
在 GPU 之间传输数据的成本可能很高。调用 gather
通常是没有必要的,除非您需要将结果与不支持 gpuArray
的函数一起使用。
G = gpuArray(ones(100,"uint32")); D = gather(G); OK = isequal(D,ones(100,"uint32"))
将数组传输到 GPU
创建一个 1000×1000 的随机矩阵,然后将其传输到 GPU。有关在 GPU 上生成随机数的更多信息,请参阅 GPU 上的随机数流。
X = rand(1000); G = gpuArray(X);
有关生成 GPU 随机数的更多信息,请参阅 GPU 上的随机数流。
传输指定精度的数组
创建一个双精度随机值矩阵,并将单精度格式的矩阵传输到 GPU。
X = rand(1000); G = gpuArray(single(X));
直接创建 GPU 数组
您可以通过指定 gpuArray
类型作为某些函数的输入参量来直接在 GPU 上创建数组。这些函数只需要数组大小和数据类信息,因此它们可以构建数组无需从主机内存传输任何元素。有关详细信息,请参阅 gpuArray
。
您还可以通过使用 "like"
名称-值参量镜像现有 gpuArray
的数据类型在 GPU 上创建数组。您可以使用一些函数通过提供 like=p
作为输入参量造具有与原型数组 p
相同数据类型的数组。支持 "like"
选项的函数包括 zeros
、ones
、createArray
(自 R2024a 起)、eye
、true
、false
、cast
、rand
、randi
和 randn
。
在 GPU 上创建单位矩阵
在 GPU 上创建一个 1024×1024 类型的 int32
单位矩阵。
II = eye(1024,"int32","gpuArray"); size(II)
1024 1024
在 GPU 上创建多维数组
在 GPU 上创建一个具有 double
数据类型的三维数组。
G = ones(100,100,50,"gpuArray");
size(G)
100 100 50
underlyingType(G)
'double'
在 GPU 上创建向量
在 GPU 上创建一个由 8192 个元素组成的零列向量。
Z = zeros(8192,1,"gpuArray");
size(Z)
8192 1
基于原型数组在 GPU 上创建数组
创建一个 100×100 的 pi
数组,其数据类型与原型数组相同。
G = gpuArray(single(2)); X = createArray(100,Like=G,FillValue=pi); size(X)
100 100
underlyingType(X)
'single'
X(1:5)
3.1416 3.1416 3.1416 3.1416 3.1416
检查 gpuArray
特征
使用这些函数来检查 gpuArray
对象的特征。
函数 | 描述 |
---|---|
underlyingType | 数组中基础数据的类 |
existsOnGPU | 指示数组是否存在于 GPU 上并且可以访问 |
isreal | 指示数组数据是否真实 |
isUnderlyingType | 判断底层数组数据是否属于指定类,如 |
isequal | 确定两个或多个数组是否相等 |
isnumeric | 确定数组是否为数值数据类型 |
issparse | 确定数组是否稀疏 |
length | 向量的长度或最大数组维度 |
mustBeUnderlyingType | 验证数组是否具有指定的基础类型,例如 double |
ndims | 数组的维数 |
size | 数组维度的大小 |
检查 gpuArray
对象 G
的大小。
G = rand(100,"gpuArray");
s = size(G)
100 100
保存和加载 gpuArray
对象
您可以将 gpuArray
变量保存为 MAT 文件。当您保存 gpuArray
时,MATLAB 会将数据作为 MAT 文件中的 gpuArray
变量保存。当您加载包含 gpuArray
变量的 MAT 文件时,MATLAB 会将数据作为 gpuArray
加载到 GPU 上。
注意
当 GPU 不可用时,您可以将包含 gpuArray
数据的 MAT 文件加载为内存数组。如果没有 GPU,则加载的 gpuArray
会受到限制,您无法使用它进行计算。要使用未通过 GPU 加载的 gpuArray
,请使用 gather
检索内容。
有关如何在 MATLAB 工作区中保存和加载变量的更多信息,请参阅 保存和加载工作区变量。