メインコンテンツ

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

R2026b

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

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

関数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 ✔✔
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.interp2✔✔ 
fixed.interp3✔✔ 
fixed.interpn✔✔ 
flintmax

✔

サポートされる構文:

flintmax('half')

flintmax('like',half(1))

  
flip✔

✔

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

✔

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

fliplr✔✔✔
flipud✔✔✔
floor✔✔✔
fma

✔

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

✔

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

✔

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

fplot✔  
ge, >=✔✔✔
gt, >✔✔✔
half✔✔✔
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✔✔✔
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✔✔✔
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

✔

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

  
scatter✔  
scatter3✔  
sign✔✔✔
sin✔✔✔
single✔✔✔
sinh✔✔✔
sinpi✔✔✔
size✔✔✔
sort✔  
sqrt✔✔✔
squeeze✔✔✔
storedInteger✔  
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✔  

参考

トピック