🤖

a64fx で fp8 <-> fp16/fp32 のメモ

に公開

from fp8

基本 lut + ld gather でよいと思います.
(fp16 は 512 byte, fp32 は 1K で L1 に十分 fit する)

cycle 数は fp16 12~13, fp32 22 くらい.
ただ毎回変換だとうまく pipeline 埋まらないので, attention などで reuse 想定で処理がいいかも(hbm2/ストレージ上は fp8, L1/L2 では fp16/fp32 になるように prepass で decode)

to fp8

ビット演算などのほうが効率いいでしょう.
e4m3 は subnormal を対応するかどうかでちょっと性能変わる.

e5m2 の場合, fp32 の場合は一度 fp16 に fcvt してビット切り捨てという手もあるけど, ビット演算のほうが効率いい感じそうだった

TODO

packed fp8 形式や, fp12(e5m

Discussion