FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

浮動小数点乗算器を低い精度でSIMD形式で並列演算する回路の調査

f:id:msyksphinz:20160425012032p:plain

Tesla P100について調査したとき、GPUの演算器は単精度と半精度で共有しており、半精度の時はSIMD形式で動作させることにより演算性能を向上させていることが分かった。

msyksphinz.hatenablog.com

しかし冷静に考えてみると、これはどのように実現しているのだろう。浮動小数点の形式を考えても、半精度になったからと言って演算器を共有できる場所があるとは思えない。 ちょっと気になったので、文献を調査してみることにした。 Pascal P100では単精度と半精度の演算器共有だが、別に倍精度と単精度でも同じことが実現できるはずだ。

いろいろと調べていると、以下のような文献が見つかった。

  • An Efficient Multi Precision Floating Point Adder and Multiplier

http://www.indjst.org/index.php/indjst/article/viewFile/80236/62032

割と最近の文献だが、そこまで最新の技術だろうか?同じようなことを考える人は世界中にたくさんいるだろうし、たとえ見つかったとしても論文にできるような新しいノウハウが詰まっているとも思えなかったのだが。。。

少し読み進めてみると、あまり詳細なところは別々の精度で共有しよとはせず、面積的に多くを消費している演算器をどのように共有するかに焦点が当てられている。

複数の精度で演算器を共有するための仕組み

浮動小数点の演算は、

  • 符号部
  • 指数部
  • 仮数

に分割され演算が進んでいくのだが、まず符号部については論理が簡単なため、資源を共有する必要がない。これは倍精度と単精度で資源を別々に持っていても回路面積に影響はない。

次に指数部だが、浮動小数点加算では仮数部の桁を合わせるための指数部の調整、乗算においては仮数部の桁合わせも必要なく加算するだけなので、加算の時だけ指数部を考慮すればよい。 ただしこれは文献を読んでも詳細が書いていなかった。加算では指数部の調整のみで演算の必要はない(つまり桁の小さい方の指数部をとれば良いだけ)なので、ここのリソースも多重化しているということか。

仮数部の計算のみ、53bitの加算器を24ビットの加算器2つに分解して扱っているということだった。まあ、この部分だけならリソースは共有できる気がする。 ただし、最後の丸めを並列に実行する方法などは、あまり詳細に触れられていなかった。

一方で乗算の方は、指数部の演算器をいかに共有するかがカギになるようで、説明図付きで詳細な解説があった。

乗算は、以下のようにオペランドの上半分とした半分に分解すると、筆算の形式で以下のように計算できる。

f:id:msyksphinz:20160426002159p:plain

という訳で、半分の長さの乗算器を4つ用意しておき、単精度のときはそれぞれを独立に使うか、倍精度のときは最後に結果を集めればよい。

f:id:msyksphinz:20160426002657p:plain

こう考えてみると、演算器のみの共有テクニックなら、別に驚くにあたるものではなかった。乗算器を細かく分割して組み合わせるのも、特に目新しい技術であるとは言えない。 そういう意味では、単精度と半精度で演算器を共有しているとはいえ、面積が半分近くまで節約できているかというとそんなことはありえない気がしてくる。

浮動小数点演算器について学びたいときにお勧めな参考文献

Computer Arithmetic : Algorithms and Hardware Designs

Computer Arithmetic: Algorithms and Hardware Designs (The Oxford Series in Electrical and Computer Engineering)

Computer Arithmetic: Algorithms and Hardware Designs (The Oxford Series in Electrical and Computer Engineering)

浮動小数点に限らず、整数演算も含め幅広く演算器について網羅した名著。もう一度しっかり読み直したい。

Handbook of Floating Point Arithmetic

Handbook of Floating-Point Arithmetic

Handbook of Floating-Point Arithmetic

こちらも名著。仕様の部分からしっかり押さえたいときに確認するリファレンス用。