在 GPU 上使用稀疏数组
创建稀疏 GPU 数组
您可以通过使用 gpuArray
输入调用 sparse
来创建稀疏 gpuArray
,或者通过使用稀疏输入调用 gpuArray
来创建它。例如,
X = [0 1 0 0 0; 0 0 0 0 1]
0 1 0 0 0 0 0 0 0 1
S = sparse(X)
(1,2) 1 (2,5) 1
G = gpuArray(G); % G is a sparse gpuArray Gt = transpose(G); % Gt is a sparse gpuArray F = full(Gt) % F is a full gpuArray
0 0 1 0 0 0 0 0 0 1
对 GPU 数组进行索引
稀疏 GPU 数组仅支持通过索引引用整行或整列。例如,要访问稀疏矩阵 A
的第五行,请调用 A(5,:)
或 A(5,1:end)
。
A = gpuArray.speye(10); A(5,:)
(1,5) 1
full(A(5,:))
0 0 0 0 1 0 0 0 0 0
要定位稀疏 GPU 数组的非零元素,请使用 find
函数。然后,您可以替换所需的值并构建一个新的稀疏 gpuArray
。
A = gpuArray.speye(10); [row,col] = find(A); [row,col]
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10
不支持通过索引为稀疏 GPU 数组分配值。
支持稀疏 GPU 数组的函数
下表列出了支持稀疏 gpuArray
对象的函数。
abs acos acosd acosh acot acotd acoth acsc acscd acsch angle asec asecd asech asin asind asinh atan atand atanh bicg bicgstab ceil cgs classUnderlying conj cos cosd cosh cospi cot cotd coth csc cscd csch ctranspose deg2rad diag end | eps exp expint expm1 find fix floor full gmres gpuArray.speye imag isaUnderlying isdiag isempty isequal isequaln isfinite isfloat isinteger islogical isnumeric isreal issparse istril istriu isUnderlyingType length log log2 log10 log1p lsqr minus mtimes mpower mustBeUnderlyingType ndims nextpow2 nnz nonzeros | norm numel nzmax pcg plus power qmr rad2deg real reallog realsqrt round sec secd sech sign sin sind sinh sinpi size sparse spfun spones sprandsym sqrt subsref sum tan tand tanh tfqmr times (.*) trace transpose tril triu uminus underlyingType uplus |