3.6.9.23 入力の精度拡張
mfma,vfma,mwriteの入力オペランドのうち、基本動作において通常の単精度および倍精度の値を要求するものについて、一つ低い精度の値からの変換、すなわち、半精度から単精度、あるいは単精度から倍精度への変換を指示することができる。
精度拡張する際はそのオペランドの末尾にeを付加する。
ブロックフロート単精度またはブロックフロート倍精度を要求するオペランドについては精度拡張を指示できないことに注意する。
ブロックフロート化する前に精度拡張しておく必要がある。
基本動作から使われる語数は変わらず、一語あたりの語長が半分になる。
よって、基本動作における入力語長が 2 長語なら長語で、長語なら単語でPEメモリから読み出すことになる。
code:例 1
gmfma $ly $lm0v $r0ve $ln0v
行列レジスタのブロックフロート疑似単精度データをA
LM0のブロックフロート疑似単精度データをx
GRF0の通常の半精度データをyとしてyを単精度に拡張した上で
疑似単精度行列ベクトル積FMA (Ax+y)を行い、LM1に書き込む。
code:例 2
hmfma $lx $lm0v $lr0ve $llr8v
行列レジスタのブロックフロート半精度データをA
LM0のブロックフロート半精度データをx
GRF0の通常の半精度データをyとして、yを単精度に拡張した上で
半精度行列ベクトル積FMA (Ax+y)を行い、GRF0に書き込む。
code:例 3
dvfmau $m0ve $r0ve $n0ve $lr4v
LM0の単精度データをx
GRF0の単精度データをy
LM1の単精度データをzとして
x,y,zを倍精度に拡張した上で
倍精度ベクトルFMA (x*y+z)を行い、GRF0に書き込む。
code:例 4
hvfma $lm0v $lr0v $ln0ve $llr8v
LM0の通常の半精度データをx
GRF0の通常の半精度データをy
LM1の通常の半精度データをzとして
zを単精度に拡張した上で
半精度ベクトルFMA (x*y+z)を行い、GRF0に書き込む。