京速計算機(Vectorの方)の性能を考える

「現在は」何も知らないので、好きなことを書こうかと思う。来年になれば、これについて知識が増えることになると思われるが、そのときには大人の事情で何も書くことができなくなる。今ならば好き勝手に書いても妄想乙、で済まされるので、今のうちに。来年以降はこの記事を思い出してニヤニヤするのかもしれない。
まず最初に、ベクトル機なんてLINPACKというか行列積以外の目的では使い物にならないのが明らかなので、それだけ考えてやればいいだろうという暴言を吐いておく。
まず、解くことができる問題サイズを考える。このプロジェクトでは10PFLOPS(=10^15 FLOPS)らしいので、それを基準に考える。一回のLU分解にかかる計算量は2/3 n^3 くらいになる。たとえばn=100万くらいだとすると、この値は2/3 * 10^18程度。で、10PFLOPSならこれは約11分となる。で、n=1000万にすると、この1000倍になるから、約8日くらい。ちょっと厳しいか。メモリ量を考えても、10^14 * 8byte = 800Pbyteになり、これを載せるメモリは作れない気がする。そのあたりは頑張るのかもしれないが。やはり現実的なところでは、1辺が100万か200万。それが限界だろう。
そうすると、1ノードでいったい何個の演算を同時に計算できるベクトルマシンにするのか。それが問題だ。二冪であることはほぼ確定なので、候補としては256(=2^8), 1024(=2^10), 4096=(2^12), 16384(2^14), 65536(2^16)辺りか。おそらく1GHz程度では動作するだろうことを考慮し、1クロックに演算が一回終わるとして、256では1ノードで256GFLOPS, 65536では1ノードで64TFLOPSになる。さすがに、256くらいではあまり旨みがない。Core 2 Quadだって128GFLOPSくらいの性能は出る。単精度だけど。逆に64TFLOPSだとすると、10P達成するのにこのノードが大体160個必要になるわけだけれども、1辺が100万の行列を64Kで区切ると、16*16=256個にしかならない。これじゃあ負荷分散とか無理よね。16TFLOPSだとしたら、ノード数が640個。64 * 64 = 4196個のブロック。うーん、それでもきつくないか?実際にすべてのノードがフルで動くわけでもないので、ちょっと無理がある気がするな。となると、1024か4096あたりの演算機というのが妥当になると思われる。で、ノード数は逆算して数千から1万とかくらいか。
これくらいのでかい問題になってくると、さすがにLINPACKくらいだと通信時間はほぼ問題にならないだろう。もちろん帯域は必要だろうけれど。そもそも数分かかるような問題だし、通信量が2乗に比例するのに対して、計算量は3乗に比例するわけだし。
妄想終わり。