ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

GPU での組み込み関数の実行

MATLAB

MATLAB 組み込み関数のサブセットでは、gpuArray の使用がサポートされています。少なくとも 1 つの gpuArray を入力引数としてこれらの関数のいずれかを呼び出すと、常に GPU で実行され、結果として gpuArray を返します。gpuArray からの入力と MATLAB ワークスペース データの両方を同じ関数呼び出しで使用できます。このような関数には、離散フーリエ変換 (fft)、行列の乗算 (mtimes) および行列の左除算 (mldivide) があります。

以下の関数と記号演算子は、gpuArray の入力引数を受け入れて GPU で実行されるように拡張されています。

abs
acos
acosh
acot
acoth
acsc
acsch
all
angle
any
arrayfun
asec
asech
asin
asinh
atan
atan2
atanh
beta
betaln
bitand
bitcmp
bitget
bitor
bitset
bitshift
bitxor
blkdiag
bsxfun
cast
cat
ceil
chol
circshift
classUnderlying
colon
complex
cond
conj
conv
conv2
convn
cos
cosh
cot
coth
cov
cross
csc
csch
ctranspose
cumprod
cumsum
det
diag
diff
disp
display
dot
double
eig
eps
eq
erf
erfc
erfcinv
erfcx
erfinv
exp
expm1
eye
false
filter
filter2
find
fft
fft2
fftn
fftshift
fix
flip
fliplr
flipud
floor
fprintf
full
gamma
gammaln
gather
ge
gt
horzcat
hypot
ifft
ifft2
ifftn
ifftshift
imag
ind2sub
inf
int16
int2str
int32
int64
int8
interp1
interp2
inv
ipermute
iscolumn
isempty
isequal
isequaln
isfinite
isfloat
isinf
isinteger
islogical
ismatrix
ismember
isnan
isnumeric
isreal
isrow
issorted
issparse
isvector
kron
ldivide
le
length
log
log10
log1p
log2
logical
lt
lu
mat2str
max
mean
meshgrid
min
minus
mldivide
mod
mpower
mrdivide
mtimes
NaN
ndgrid
ndims
ne
nnz
norm
normest
not
num2str
numel
ones
pagefun
perms
permute
plot (and related)
plus
pow2
power
prod
qr
rank
rdivide
real
reallog
realpow
realsqrt
rem
repmat
reshape
rot90
round
sec
sech
shiftdim
sign
sin
single
sinh
size
sort
sprintf
sqrt
squeeze
std
sub2ind
subsasgn
subsindex
subsref
sum
svd
tan
tanh
times
trace
transpose
tril
triu
true
uint16
uint32
uint64
uint8
uminus
uplus
var
vertcat
zeros

個々の関数の更新内容についての詳細は、リリース ノートを参照してください。

現在のバージョンで使用可能な関数のうち、インストールされているツールボックスの関数など、gpuArray をサポートする関数の完全なリストを表示するには、gpuArray クラスの関数 methods を使用します。

 methods('gpuArray')

gpuArray オブジェクトに対するこれらの関数のサポートの制限についての情報を確認するには、以下のように入力します。

help gpuArray/functionname

たとえば、lu のオーバーロードについてのヘルプを表示するには、次のように入力します。

help gpuArray/lu

ほとんどの場合、これらの関数のいずれかの入力引数が gpuArray であれば、出力される配列も gpuArray になります。出力が常にスカラーの場合は、ワークスペース内の MATLAB データして返されます。結果が複素数データからなる gpuArray で、すべての虚数部がゼロの場合、虚数部は保持されてデータは複素数のままになります。これは sortisreal などを使用するときに影響する可能性があります。

例: gpuArrays による関数の呼び出し

次の例では、関数 fft および real を算術演算子 + および * と共に使用します。すべての計算は GPU で実行され、gather によりデータが GPU から MATLAB ワークスペースに返送されます。

Ga = gpuArray.rand(1000,'single');
Gfft = fft(Ga); 
Gb = (real(Gfft) + Ga) * 6;
G = gather(Gb);

whos コマンドは各変数のデータの保存先を表示するよう指示します。

whos
 Name       Size         Bytes  Class

 G       1000x1000     4000000  single
 Ga      1000x1000         108  gpuArray
 Gb      1000x1000         108  gpuArray
 Gfft    1000x1000         108  gpuArray

関数 gather の結果である G を除いて、すべての配列が GPU (gpuArray) に格納されていることに注意してください。

複素数に関する考慮事項

GPU で実行される関数の出力が複素数になる可能性がある場合は、明示的に入力引数を複素数として指定しなければなりません。これは gpuArray や、arrayfun で実行されるコードで呼び出される関数に適用されます。

たとえば、負の要素をもつ可能性がある gpuArray を作成する場合は、G = gpuArray(complex(p)) を使用すると、sqrt(G) を正常に実行できます。

あるいは、arrayfun に渡される関数において、x が実数を成分とするベクトルであり一部の要素が負の値をとる場合、sqrt(x) はエラーを生成します。代わりに sqrt(complex(x)) を呼び出してください。

次の表に、複素数データを返す可能性がある関数を、出力が実数となる入力範囲と共に記載します。

関数実数出力のための入力範囲
acos(x)abs(x) <= 1
acosh(x)x >= 1
acoth(x)x >= 1
acsc(x)x >= 1
asec(x)x >= 1
asech(x)0 <= x <= 1
asin(x)abs(x) <= 1
atanhabs(x) <= 1
log(x)x >= 0
log1p(x)x >= -1
log10(x)x >= 0
log2(x)x >= 0
power(x,y)x >= 0
reallog(x)x >= 0
realsqrt(x)x >= 0
sqrt(x)x >= 0

この情報は役に立ちましたか?