半精度コード生成のサポート
半精度データ型を数値または変数に代入するには、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 で実行するには、 |
all | ✔ | ✔ | ✔ |
allfinite | ✔ | ✔ | ✔ |
and , & | ✔ | ✔ | ✔ |
Short-Circuit AND | ✔ | ✔ | ✔ |
any | ✔ | ✔ | ✔ |
anynan | ✔ | ✔ | ✔ |
area | ✔ | ||
asin | ✔ | ✔ | ✔ |
asinh | ✔ | ✔ | ✔ |
atan | ✔ | ✔ | ✔ |
atan2 | ✔ | ✔ | ✔ |
atanh | ✔ | ✔ | ✔ |
bar | ✔ | ||
barh | ✔ | ||
cast | ✔ サポートされる構文:
| ✔ サポートされる構文:
| ✔ サポートされる構文:
|
cat | ✔ | ✔
| ✔
|
ceil | ✔ | ✔ | ✔ |
cell | ✔ | ✔ | ✔ |
chol | ✔ | ||
circshift | ✔ | ✔ | ✔ |
classify (Deep Learning Toolbox) | ✔ | ✔ half 入力は単精度にキャストされ、計算は単精度で実行されます。 | ✔ half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、 |
coder.ceval (Simulink) | ✔ | ✔ | |
colon , : | ✔ | ✔ | ✔ |
complex | ✔ | ✔ | |
conj | ✔ | ✔ | ✔ |
conv | ✔ | ✔ | ✔ |
conv2 | ✔ | ✔ | ✔ |
cos | ✔ | ✔ | ✔ |
cosh | ✔ | ✔ | ✔ |
cospi | ✔ | ✔ | ✔ |
ctranspose | ✔ | ✔ | ✔ |
cumsum | ✔ | ||
dot | ✔ | ||
double | ✔ | ✔ | ✔ |
empty | ✔ | ||
eps | ✔ サポートされる構文:
| ✔
| ✔
|
eq , == | ✔ | ✔ | ✔ |
exp | ✔ | ✔ | ✔ |
expm1 | ✔ | ✔ | ✔ |
eye | ✔ サポートされる構文:
| ✔ サポートされる構文:
| ✔ サポートされる構文:
|
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 | ✔ サポートされる構文:
| ||
flip | ✔ | ✔ 次元の引数は半精度にできません。 | ✔ 次元の引数は半精度にできません。 |
fliplr | ✔ | ✔ | ✔ |
flipud | ✔ | ✔ | ✔ |
floor | ✔ | ✔ | ✔ |
fma (Fixed-Point Designer) | ✔ 複素数の半精度入力はサポートされていません。 | ✔ 複素数の半精度入力はサポートされていません。 | ✔ 複素数の半精度入力はサポートされていません。 |
fplot | ✔ | ||
ge , >= | ✔ | ✔ | ✔ |
gt , > | ✔ | ✔ | ✔ |
half (Fixed-Point Designer) | ✔ | ✔ | ✔ |
horzcat | ✔ | ✔ | ✔ |
hypot | ✔ | ✔ | ✔ |
ifft | ✔ | ✔ | |
ifft2 | ✔ | ✔ | |
ifftn | ✔ | ✔ | |
ifftshift | ✔ | ✔ | ✔ |
imag | ✔ | ✔ | |
Inf | ✔ サポートされる構文:
| ✔ サポートされる構文:
| ✔ サポートされる構文:
|
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 | ✔ サポートされる構文:
| ✔ サポートされる構文:
| ✔ サポートされる構文:
|
ndims | ✔ | ✔ | ✔ |
ne , ~= | ✔ | ✔ | ✔ |
not | ✔ | ✔ | ✔ |
numel | ✔ | ✔ | ✔ |
ones | ✔ サポートされる構文:
| ✔ サポートされる構文:
| ✔ サポートされる構文:
|
or , || | ✔ | ✔ | ✔ |
Short-Circuit OR | ✔ | ✔ | ✔ |
permute | ✔ | ✔ | ✔ |
plot | ✔ | ||
plot3 | ✔ | ||
plotmatrix | ✔ | ||
plus , + | ✔ | ✔ | ✔ |
pow10 (Fixed-Point Designer) | ✔ | ✔ | ✔ |
pow2 | ✔ | ✔ | ✔ |
power , .^ | ✔ | ✔ | ✔ |
predict (Deep Learning Toolbox) | ✔ | ✔ half 入力は単精度にキャストされ、計算は単精度で実行されます。 | ✔ half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、 |
predictAndUpdateState (Deep Learning Toolbox) | ✔ | ✔ half 入力は単精度にキャストされ、計算は単精度で実行されます。 | ✔ half 入力は単精度にキャストされ、計算は単精度で実行されます。計算を half で実行するには、 |
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 | ✔ サポートされる構文:
| ||
realmin | ✔ サポートされる構文:
| ||
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 | ✔ サポートされる構文:
| ✔ サポートされる構文:
| ✔ サポートされる構文:
|
zlim | ✔ |
参考
関連するトピック
- 浮動小数点数 (Fixed-Point Designer)
- 半精度とは (Fixed-Point Designer)
- 半精度データ型を使用するソーベル エッジ検出のコードの生成