Main Content

半精度コード生成のサポート

半精度データ型を数値または変数に代入するには、half (Fixed-Point Designer) コンストラクターを使用します。半精度データ型は 16 ビットのメモリを占有しますが、その浮動小数点表現を使ってこのデータ型で同じサイズの整数データ型または固定小数点データ型よりも広いダイナミック レンジを処理できます。詳細については、浮動小数点数 (Fixed-Point Designer)を参照してください。

一部の MATLAB® 関数は、半精度入力での使用でサポートされます。さらに、一部の関数では、半精度データ型を使用したコード生成がサポートされます。C および C++ コードの生成には MATLAB Coder™ が必要です。NVIDIA® GPU 用の CUDA® コードの生成には GPU Coder™ が必要です。サポートされる関数を次の表にアルファベット順で示します。MATLAB System object™ では半精度データ型がサポートされ、MATLAB System (Simulink)ブロックでは実数値をもつ半精度データ型がサポートされます。半精度を使用したコード生成に関する一般情報については、half (Fixed-Point Designer) を参照してください。

関数MATLAB シミュレーションのサポートC/C++ コード生成のサポートGPU コード生成のサポート
abs
acos
acosh
activations (Deep Learning Toolbox)

half 入力は単精度にキャストされ、計算は単精度で実行されます。

half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、coder.DeepLearningConfig でライブラリ ターゲットを 'tensorrt' に設定し、データ型を 'FP16' に設定します。

all
allfinite
and, &
Short-Circuit AND
any
anynan
area  
asin
asinh
atan
atan2
atanh
bar  
barh  
cast

サポートされる構文:

cast(_,'half')

cast(_,'like',p)

サポートされる構文:

cast(_,'half')

cast(_,'like',p)

サポートされる構文:

cast(_,'half')

cast(_,'like',p)

cat

  • 次元の引数は定数でなければなりません。

  • 次元の引数は半精度にできません。

  • 次元の引数は定数でなければなりません。

  • 次元の引数は半精度にできません。

ceil
cell
chol  
circshift
classify (Deep Learning Toolbox)

half 入力は単精度にキャストされ、計算は単精度で実行されます。

half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、coder.DeepLearningConfig でライブラリ ターゲットを 'tensorrt' に設定し、データ型を 'FP16' に設定します。

coder.ceval (Simulink) 
colon, :
complex 
conj
conv
conv2
cos
cosh
cospi
ctranspose
cumsum

  
dot  
double
empty  
eps

サポートされる構文:

eps('half')

eps(half(1))

eps('like',half(1))

eps(half(1))

eps(half(1))

eq, ==
exp
expm1
eye

サポートされる構文:

eye(_,'half')

eye(_,'like',p)

サポートされる構文:

eye(_,'half')

eye(_,'like',p)。ここで、p は半精度です。その他の入力引数は半精度にできません。

サポートされる構文:

eye(_,'half')

eye(_,'like',p)。ここで、p は半精度です。その他の入力引数は半精度にできません。

fft 
fft2 
fftn 
fftshift
fix
fixed.interp1 (Fixed-Point Designer) 
fixed.interp2 (Fixed-Point Designer) 
fixed.interp3 (Fixed-Point Designer) 
fixed.interpn (Fixed-Point Designer) 
flintmax

サポートされる構文:

flintmax('half')

flintmax('like',half(1))

  
flip

次元の引数は半精度にできません。

次元の引数は半精度にできません。

fliplr
flipud
floor
fma (Fixed-Point Designer)

複素数の半精度入力はサポートされていません。

複素数の半精度入力はサポートされていません。

複素数の半精度入力はサポートされていません。

fplot  
ge, >=
gt, >
half (Fixed-Point Designer)
horzcat
hypot
ifft 
ifft2 
ifftn 
ifftshift
imag 
Inf

サポートされる構文:

Inf(_,'half')

Inf(_,'like',p)

サポートされる構文:

Inf(_,'half')

Inf(_,'like',p)

サポートされる構文:

Inf(_,'half')

Inf(_,'like',p)

int16
int32
int64
int8
isa
iscolumn
isempty
isequal
isequaln
isfinite
isfloat (Fixed-Point Designer)
isinf
isinteger
islogical
ismatrix
isnan
isnumeric
isobject

半精度入力について true を返します。

半精度入力について false を返します。

半精度入力について false を返します。

isreal
isrow
isscalar
issorted  
isvector
ldivide
le, <=
length
line  
log
log10
log1p
log2

2 出力の構文はサポートされていません。

2 出力の構文はサポートされていません。

logical
lt, <
lu  
max
mean
min
minus, -
mldivide, \

左辺はスカラーでなければなりません。

  
mod
mrdivide, /

右辺はスカラーでなければなりません。

右辺はスカラーでなければなりません。

右辺はスカラーでなければなりません。

mtimes, *

GPU コード生成では、半精度の行列の乗算は実数入力で実行できます。

NaN

サポートされる構文:

NaN(_,'half')

NaN(_,'like',p)

サポートされる構文:

NaN(_,'half')

NaN(_,'like',p)

サポートされる構文:

NaN(_,'half')

NaN(_,'like',p)

ndims
ne, ~=
not
numel
ones

サポートされる構文:

ones(_,'half')

ones(_,'like',p)

サポートされる構文:

ones(_,'half')

ones(_,'like',p)

サポートされる構文:

ones(_,'half')

ones(_,'like',p)

or, ||
Short-Circuit OR
permute
plot  
plot3  
plotmatrix  
plus, +
pow10 (Fixed-Point Designer)
pow2
power, .^
predict (Deep Learning Toolbox)

half 入力は単精度にキャストされ、計算は単精度で実行されます。

half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、coder.DeepLearningConfig でライブラリ ターゲットを 'tensorrt' に設定し、データ型を 'FP16' に設定します。

predictAndUpdateState (Deep Learning Toolbox)

half 入力は単精度にキャストされ、計算は単精度で実行されます。

half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、coder.DeepLearningConfig でライブラリ ターゲットを 'tensorrt' に設定し、データ型を 'FP16' に設定します。

prod

half 入力は単精度にキャストされ、計算は単精度で実行されます。その結果、飽和の動作は単入力と half 入力で異なります。

maxhalf = half.realmax;
isequal(prod([maxhalf 2 0.5]), maxhalf)
ans =

  logical

   1
maxsingle = realmax('single');
isequal(prod([maxsingle 2 0.5]), maxsingle)
ans =

  logical

   0
rdivide
real
realmax

サポートされる構文:

realmax('half')

realmax('like',half(1))

  
realmin

サポートされる構文:

realmin('half')

realmin('like',half(1))

  
rem
repelem
repmat

次元の引数は半精度にできません。

次元の引数は半精度にできません。

reshape

次元の引数は半精度にできません。

次元の引数は半精度にできません。

rgbplot  
round

1 つの入力のみがサポートされます。

1 つの入力のみがサポートされます。

1 つの入力のみがサポートされます。

rsqrt (Fixed-Point Designer)

複素数の半精度入力はサポートされていません。

  
scatter  
scatter3  
sign
sin
single
sinh
sinpi
size
sort  
sqrt
squeeze
storedInteger (Fixed-Point Designer)  
sum

half 入力は単精度にキャストされ、計算は単精度で実行されます。その結果、飽和の動作は単入力と half 入力で異なります。

maxhalfint = half.flintmax;
isequal(sum([maxhalfint, 1, -1]), maxhalfint)
ans =

  logical

   1
maxsingleint = flintmax('single');
isequal(sum([maxsingleint, 1, -1]), maxsingleint)
ans =

  logical

   0
tan
tanh
times, .*
transpose
typecast  
uint16
uint32
uint64
uint8
uminus
uplus
vertcat
xlim  
ylim  
zeros

サポートされる構文:

zeros(_,'half')

zeros(_,'like',p)

サポートされる構文:

zeros(_,'half')

zeros(_,'like',p)

サポートされる構文:

zeros(_,'half')

zeros(_,'like',p)

zlim  

参考

関連するトピック