最近では16bitの浮動小数点数(FP16、あるいは半精度)で演算して、マシンラーニングの計算性能を改善するという話が一般化してきている。ということで、計算をより簡単に実行して性能を改善しようという動きがある。

今年のISC 2019では、混合精度計算のセッションが設けられ、その中でシンガポール国立大のJohn Gustafson教授が「混合精度の管理からプログラマを自由にするPosit」と題するプレゼンテーションを行った。Gustafson氏はHPCの世界では有名なコンピュータ科学者で、Gordon Bell賞も受賞している。アクセラレータの草分けのClear Speed社のCTOやAMDのチーフグラフィックスプロダクトアーキテクトを務めたこともある。そして、ISC 2019での発表時の肩書は、A*STARと国立シンガポール大学の教授となっている。

  • ISC 2019

    ISC 2019で発表を行うJohn Gustafson教授

Gustafson教授は、Unum(Universal Number)という浮動小数点数の表現方式を考案し、Positは第3世代のUnumである。

デナードスケーリングが止まり、微細化が進めばクロックが上がりアプリケーション性能が自動的に上がるという時代は終わってしまった。先端的な研究としては、大量のヘテロな並列性の追求、量子コンピューティング、多値のロジックやアナログロジックなどがあるが、どれも簡単ではない。という状況であるが、Positによる計算を使えば、アルゴリズムの僅かな変更で2倍~4倍のスピードアップが得られる。それに加えてPositを使えばより良い精度の答えが少ないビット数で得られ、プログラマが複数の精度を管理するという必要もなくなるという。

なお、右下の漫画は米国のコンピュータエンジニアには絶大な人気のDilbertの絵で、手の届く低いところにある枝に成った果物が書かれている。Low Hanging Fruitは少ない手間で大きな成果が得られるという意味の慣用句であり、Gustafson氏は、Positは少ない手間で大きな成果が得られると主張している。

  • Posit

    微細化で自動的に性能が上がる時代は終わり、高並列のヘテロなアーキテクチャ、量子コンピューティングなどが研究されているが、アルゴリズムも変更が必要になり、容易には使えない。Positを使えば、アルゴリズムの変更なしに2倍~4倍の高速化ができる (このレポートの図は、特に出典を明記したもの以外の図は、ISC 2019でのGustafson教授の発表スライドを撮影したものである)

Positに最初に興味を示したのは研究所や大学である。

  • Posit

    Positの普及に賛同している研究所や大学

しかし、産業界の会社も、急速に、その動きに加わってきている。

  • Posit

    Positの普及に賛同している企業

次の図は、緑が10進のIEEE 754浮動小数点数(Float)、紫がPositで、32bitのFP32と同じく32bitのPositを比較している。そして、横方向は表現できる数値、縦方向は10進で何桁の精度があるかを示している。

IEEE FloatとPositの大きな違いは、IEEE Floatはdenormalを使う非常に小さい数では値が小さくなるにつれて精度も減少するが、それ以外の領域では精度は一定である。これに対してPositは0付近で精度は最大でFloatより精度が高く、数値が大きく、あるいは小さくなるにつれて精度が低くなるという性質になる。

そして、Gustafson先生は、実際に使われる数字は青色の線で書かれたように、0の近傍の数値が多く、非常に小さい、あるいは大きい数値はほとんど出てこないという。

そして、IEEE FloatではNaN(Not a number)の扱いやオーバフロー、アンダフローの割り込みなど例外的な処理が多く、この部分の回路が物量を増やし、クロックサイクルを長くしてしまうという問題がある。しかし、Positではオーバフロー、アンダフローは発生せず、回路が単純化でき、小さく、速くできるという。

  • Posit

    32bitのPositとIEEE floatとのダイナミックレンジ(横軸)と精度(縦軸)の比較。ただし、32bitの数値ではPositよりFloatの方がダイナミックレンジが広い。また、0付近を除いてはFloatの方が精度が高い。Positではオーバフローなどが発生せず、Floatに比べて異常なケースの処理が単純で必要なハードウェアが少ない。結果として、高速で消費電力も少なくて済む