3.6.8.5 縮約結果の精度縮減
表3.8に示した命令のうち、縮約命令を用い、かつ縮約演算指定が単精度の浮動小数点数演算であるとする。
このとき、オペコードの末尾にrを付加することで、縮約演算回路の結果をL1BMや折り返しレジスタに書き込む前に、単精度浮動小数点数から半精度浮動小数点数への丸めを行える。
丸めの際のサイクル内でのデータの並びは次の通りである。
縮約演算回路が出力した 16 単語をMSB側から0123456789abcdefとする。
すなわち、例えば 0 から 3 までがPE0に由来する値である。
このとき、L1BM上での 4 長語は、それらを半語に丸めた上でMSB側から018923ab45cd67efの順に並べたものになる。
これは3.6.8.4 入力の精度拡張で述べた精度拡張の際の並べ替えの逆変換になっている*^6 。
code:例
l1bmrffaddr $llr0v $lb0
GRF0からサイクル・PEあたり 4 単精度語を読み出して加算で縮約し、サイクルあたり 16 半精度語に丸めてL1BMに書き込む。
code:txt
*^6 半精度縮約は実際にはこれを用いて、精度拡張→単精度縮約→丸めという実装になっている。
すなわち、l1bmrhfadd $lr0v $lb0
はl1bmrffaddr $lr0ve $lb0のエイリアスである