Main Content

本页采用了机器翻译。点击此处可查看英文原文。

在 GPU 上建立数组

MATLAB® 中的 gpuArray 表示存储在 GPU 内存中的数组。有关支持 GPU 上的数组的函数的更多信息,请参阅 在 GPU 上运行 MATLAB 函数

根据现有数据创建 GPU 数组

将数组发送到 GPU

您可以通过将现有数组从主机内存传输到 GPU 来创建 GPU 数组。使用 gpuArray 函数将数组从主机内存传输到 GPU。

gpuArray 函数仅支持数值输入参量,例如 singledoubleint8logical 输入参量。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" 选项的函数包括 zerosonescreateArray (自 R2024a 起)eyetruefalsecastrandrandirandn

在 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

判断底层数组数据是否属于指定类,如 double

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 工作区中保存和加载变量的更多信息,请参阅 保存和加载工作区变量

另请参阅

|

相关主题