(4/23 19:35大幅加筆修正)
次世代スパコンは二種類の4倍長精度演算をサポート:IEEE754R及びdouble-double形式。
多倍長精度計算に興味を持っている人間としてはうれしい限りである。
藤澤さん経由で次世代スパコンのページを見た。横川さんのプレゼンのp.10が私にとって興味深い。
> プログラム言語,コンパイラ
> Fortran 2003,XPFortran,C,C++
> GNU C/C++拡張仕様
> 4倍長精度演算をサポート:IEEE754R及びdouble-double形式
double-doubleは富士通やIBMのコンパイラは昔からサポートしていたと聞いたことがある。しかし富士通のは、情報しらないのよね...
IEEE 754RはIEEE 754 2008が発効された現在、言葉としてあまり良くわからない。多分binary128のことなんだろうか。Sparc64は四倍精度サポートしているが、次世代スパコンはどうなんだろうか。昔、姫野先生には、四倍精度入れたかったけど入らなかったんだよねとか聞いたことがあるが...実際は入っていた。命令をみよう。SPARC64TM VIIIfx Extensionsにそれらしきことが書いてある。どうやらquad precisionの命令のいくつかはSIMDにはできないようである。p.61 (p.71)参照。FADD, FMUL, FSUB, FDIVなど加減乗除はそうなっていた。従ってIEEE 754rの四倍精度はかなり遅いだろうと予測される。かといって
double-doubleは速いのだろうか? あまりそうとは思えない。FMAを使うから
速いのかもしれない、ただ、後藤和茂さんは、クロックは押さえられるかもしれないが、キャッシュに対するインパクトが大きく使うのが難しいといってたきがする。
なぜ二つあるのかは理解には苦しむ。FORTRANでREAL*16として使うのだろうか。危険である。書き出したとき、double-doubleで書くか、IEEE 754rの四倍精度(?)で書くか、でまた、読み出しはどちらで行うかで、実装のパターンも含め予期せぬ結果が出てしまうと考えられる。
正当的なのは、double-doubleを止めることだろう。double-doubleはpoor man's solutionとしては有効だし、我がMPACKでもdouble-doubleは使っている。ただあまり有効な数値計算としてはお勧めしない。
たとえば、IEEE 754の規格策定に関わった、W. Kahan教授をしてgrubby (p.5; 汚い、ウジが湧いたの意)
> A Fused MAC also speeds up a grubby “Doubled-Double” approximation
> to Quadruple-Precision arithmetic by
> unevaluated sums of pairs of Doubles.
と言わしめたし、C99のlong doubleとしても使えない
。
Intel Pentium, Coreなどハードウェアでサポートのないものに関して、速い安いちょっとまずい、ということで使わざるを得ないなどと微妙、複雑な気分で実装している。
トップページに平尾先生。どっちも上司だった、であるが、中田はスパコンのことは素人並みにしか知らない。
数値演算は難しいね...
次世代スパコンは二種類の4倍長精度演算をサポート:IEEE754R及びdouble-double形式。
多倍長精度計算に興味を持っている人間としてはうれしい限りである。
藤澤さん経由で次世代スパコンのページを見た。横川さんのプレゼンのp.10が私にとって興味深い。
> プログラム言語,コンパイラ
> Fortran 2003,XPFortran,C,C++
> GNU C/C++拡張仕様
> 4倍長精度演算をサポート:IEEE754R及びdouble-double形式
double-doubleは富士通やIBMのコンパイラは昔からサポートしていたと聞いたことがある。しかし富士通のは、情報しらないのよね...
IEEE 754RはIEEE 754 2008が発効された現在、言葉としてあまり良くわからない。多分binary128のことなんだろうか。Sparc64は四倍精度サポートしているが、次世代スパコンはどうなんだろうか。昔、姫野先生には、四倍精度入れたかったけど入らなかったんだよねとか聞いたことがあるが...実際は入っていた。命令をみよう。SPARC64TM VIIIfx Extensionsにそれらしきことが書いてある。どうやらquad precisionの命令のいくつかはSIMDにはできないようである。p.61 (p.71)参照。FADD, FMUL, FSUB, FDIVなど加減乗除はそうなっていた。従ってIEEE 754rの四倍精度はかなり遅いだろうと予測される。かといって
double-doubleは速いのだろうか? あまりそうとは思えない。FMAを使うから
速いのかもしれない、ただ、後藤和茂さんは、クロックは押さえられるかもしれないが、キャッシュに対するインパクトが大きく使うのが難しいといってたきがする。
なぜ二つあるのかは理解には苦しむ。FORTRANでREAL*16として使うのだろうか。危険である。書き出したとき、double-doubleで書くか、IEEE 754rの四倍精度(?)で書くか、でまた、読み出しはどちらで行うかで、実装のパターンも含め予期せぬ結果が出てしまうと考えられる。
正当的なのは、double-doubleを止めることだろう。double-doubleはpoor man's solutionとしては有効だし、我がMPACKでもdouble-doubleは使っている。ただあまり有効な数値計算としてはお勧めしない。
たとえば、IEEE 754の規格策定に関わった、W. Kahan教授をしてgrubby (p.5; 汚い、ウジが湧いたの意)
> A Fused MAC also speeds up a grubby “Doubled-Double” approximation
> to Quadruple-Precision arithmetic by
> unevaluated sums of pairs of Doubles.
と言わしめたし、C99のlong doubleとしても使えない
。
Intel Pentium, Coreなどハードウェアでサポートのないものに関して、速い安いちょっとまずい、ということで使わざるを得ないなどと微妙、複雑な気分で実装している。
トップページに平尾先生。どっちも上司だった、であるが、中田はスパコンのことは素人並みにしか知らない。
数値演算は難しいね...
NEC のスパコン用ライブラリも double-double をサポートしてますが、double-double 用に独自の変数を用意しています。REAL*16 は多分 binary128 です。ですから富士通でも両者の4倍精度演算のサポートは同じようになるのではないかと推測します。
double-double は確かに問題がある方法ですが、本物の4倍精度演算の整備が遅れているのだから、過渡期としては十分役に立ったのではないかと思います。
去年、峯尾真一さんの講演を聞いたのですが、事業仕分けの前でした。
http://www.ipej.net/index.cgi?p=%282009.03.10%29%BE%F0%CA%F3%B9%A9%B3%D8%C9%F4%B2%F1%A3%B4%B7%EE%CE%E3%B2%F1%B0%C6%C6%E2
なるほど。。
そのうち問い合わせてみようと思います。浮動小数点演算ユニットのソフトウェアエミュレーションは懐かしいですね。Linusのサインをいただいたノートパソコンがあるのですが、このマシンは486SXなのでソフトウェアエミュレーションです。遅いはずです。
double-doubleは規格化すると一生面倒見ないとダメなので、採用が悩ましいところですね。REAL*15作るといいかも。
BLAS/LAPACKの64bit化もやったほうがいいですね。ただしこれはLAPACKチームの範疇を越えていると思います。今年遊びに行く予定です。