メインコンテンツ

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

R2026b

半精度データ型を数値または変数に代入するには、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 入力は単精度にキャストされ、計算は単精度で実行されます。その結果、飽和の動作は single 入力と 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 入力は単精度にキャストされ、計算は単精度で実行されます。その結果、飽和の動作は single 入力と 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✔  

参考

トピック