May 5, 2010

[4/4] J-.M.Muller et.al, "Handbook of Floating-point Arithmetic", Birkhauser

[ Amazon ] ISBN 978-0-8176-4704-9, \13666(2010年4月現在)

handbook_of_floating_point_arithmetic.jpg

 本書の第5章でやたらに派手にFMA演算(Fused Multiply-Add)の宣伝をしている。日本語で言うと複合積和計算というべきなのかな? C99以降では

 fma(a, b, c) = a * b + c

という計算をしてくれるfma関数が備わっているが,これをCPUのネイティブコードで実行できるようになるってのがMullerらの主張だ。IEEE754-2008規格にも入っているし,Intel/AMDでもSSE5転じてAVX命令セットが次のCPU coreから導入されるとアナウンスされているので大いに活用しましょうって事らしい。

 んじゃ,現状どうなっているか,ちと調べてみた。その結果,現在ハードウェアレベルで実装してあるものは多くない。英語版のWikipediaの記述を読む限り,現状だとSPARC64が一番身近(?)かな? 建設中の次世代スパコンでは使えるみたいだから,大いに活用してもらいたいものである。

 で,そーゆー「一番を目指しながら「2番じゃダメなんですか?」と助け船を出してもらった」豪華絢爛お金持ちマシンとは縁遠い一般ピーポーなワシらはどーなるわけ? これは前述した通り,Intel/AMDのx86_64 CPUで次のSandy Bridgeから取り入れられるAVX命令にFMA演算が入る予定らしいので,それを待つしかない。ただそれも確定事項ではないようで,FMA命令が,AMDでは使えるけど,Intelではダメ,という事態もあり得るし,FMA命令に互換性がなくなっちゃう可能性もないわけではなさそう・・・となると,Mullerらの主張にはちょっと首をかしげてしまう。IntelにしろAMDにしろ富士通にしろ,所詮はマーケットが要求して需要がコストに見合えば実装するし,見合わなければ実装しないというだけのことだろう。ま,使いたければ待つほかない訳だ。

 調べている途中,ちょっと気になった記述があったので最後の最後に紹介だけしておく。詳細をご存じの方は是非ともご一報いただきたい。

 どうやら,x86互換CPUを作っているVIAがx87命令にFMAをサポートする特許を取っているらしいのだ。
 その後出荷されたVIA Nanoプロセッサに搭載されたIsaiah命令セットにはFMA演算について記述がある(このPDFファイルのP.10)

 引用すると

The multiply unit also has a fused floating-point multiply-add function that is used by the transcendental algorithms.

っつーことで,三角関数の計算に活用する目的で入ったようだ。ただしこの記述だけでは,ハードウェアの機能としてFMA演算は使っていたとしても単独のInstructionとして提供されているかどうかは不明。あったとしても所詮は互換CPUなので,使用されていない可能性もある。・・・まぁ,使えたとしてもNanoで数値計算をバリバリやりたいというユーザは少ないだろうけどねぇ。

 ・・・以上をもって,書評にあるまじき長さのぷちめれ(どこが「ぷち」なんだか)を終わることにする。是非ともどっかの出版社で翻訳してくんないかなぁ~,させてくんないかな~・・・とおねだりもついでにしておこうっと。

Posted by tkouya at May 5, 2010 12:21 PM