中田真秀(なかたまほ)のブログ

研究について、日常について、その他。

理研次世代スパコンには二種類の四倍精度が入っている。

2010-04-24 16:08:39 | 日記
(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などハードウェアでサポートのないものに関して、速い安いちょっとまずい、ということで使わざるを得ないなどと微妙、複雑な気分で実装している。

トップページに平尾先生。どっちも上司だった、であるが、中田はスパコンのことは素人並みにしか知らない。

数値演算は難しいね...

最新の画像もっと見る

8 コメント

コメント日が  古い順  |   新しい順
Unknown (藤澤)
2010-04-24 22:23:02
4倍長精度演算をサポートというのはコンパイラレベルの話なので、実際にどのように計算されるのかは、現在の公開資料だけではわかりません。
NEC のスパコン用ライブラリも double-double をサポートしてますが、double-double 用に独自の変数を用意しています。REAL*16 は多分 binary128 です。ですから富士通でも両者の4倍精度演算のサポートは同じようになるのではないかと推測します。
double-double は確かに問題がある方法ですが、本物の4倍精度演算の整備が遅れているのだから、過渡期としては十分役に立ったのではないかと思います。
Unknown (TAKATSU Tomonari)
2010-04-24 23:50:48
平尾先生 移られたのですね。今気づきました(遅)。

去年、峯尾真一さんの講演を聞いたのですが、事業仕分けの前でした。
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
Unknown (後藤)
2010-04-25 07:30:11
命令レベルでのサポートで、実際にはカーネルによるソフトウェアエミュレーションではないかと思います。この処理は極端に性能が悪いので、double-doubleによる処理も用意したのではないでしょうか?
Unknown (中田)
2010-04-25 07:52:36
> double-doubleよる処理も用意したのではないでしょうか?
なるほど。。

そのうち問い合わせてみようと思います。浮動小数点演算ユニットのソフトウェアエミュレーションは懐かしいですね。Linusのサインをいただいたノートパソコンがあるのですが、このマシンは486SXなのでソフトウェアエミュレーションです。遅いはずです。

double-doubleは規格化すると一生面倒見ないとダメなので、採用が悩ましいところですね。REAL*15作るといいかも。

Unknown (中田)
2010-04-25 07:56:38
本物の四倍精度のハードウェアサポートが遅れているのはいくつか理由がありますが、やっぱりニーズはありますよね。規格化されないようにさっさとIEEE 754 2008のbinary128に対応したプロセッサを出さないと混乱に混乱を重ねるのであまりよくないです。

BLAS/LAPACKの64bit化もやったほうがいいですね。ただしこれはLAPACKチームの範疇を越えていると思います。今年遊びに行く予定です。
Unknown (NAKATA Maho)
2010-04-25 07:57:39
平尾先生は昨年度から。どんどん旧帝から量子化学の研究室がなくなってきてるよ!
Unknown (藤澤)
2010-04-26 00:55:49
今、発表されている各社のラインナップを見ても binary128 のハードウェアサポートを行う CPU は無いですね。やはり需要とコストを比べると時期尚早なんでしょうか。レジスタ自体は 256 とか 512 bit もあるんですが。
Unknown (中田)
2010-04-26 08:56:10
私も知らないですね。情報探してます。-doubleはもう少し長生きすると思います(いや非常に?)

コメントを投稿