2008年1月24日木曜日

flopsねえ…

なんか思いっきり勘違いをしていた。

一般的に積和算は2flopsで計算するだね。何で8800gtが2命令同時実行できるのか、わからなくて調べたらそうらしい。Cellも一緒。

いろいろ調べてみて、flopsという尺度はちょっと考えもんだと思った。メモリも無視してるし。メモリの速度とかトポロジーとかをいれた尺度ってないのかな。

2008年1月23日水曜日

洗濯

洗濯は、洗い、すすぎ、その後脱水である。

洗い、とすすぎの間にもう一回なんかあった気がするんだけど、なんかなかったけ???

物事は3回くりかえしてものになるという嶋さんの話を読んで、ふと思った。
http://itpro.nikkeibp.co.jp/article/Watcher/20060419/235740/

2008年1月19日土曜日

cellさん御無沙汰です

ひさしぶりにCellのコードいじり。前にlibespe2用に書き直したんだけど、なにをどこまでやったかすっかり忘れてた。

DMA転送に問題があってちょくちょくハングする。はー、こういうのがあるんだよね、Cellちゃんは。

DMA転送の方式はいままで、SPE間の通信を行ってたけど、PPE経由に変更する予定だから、今の不具合はうっちゃったまま進もうかな。別に誰も困らんよな。

ところでひさしぶりにCellのコードを実行してみて、あらためて8800GTと比べてみたところ、ルンゲクッタの計算で6倍速度が違うことを確かめた。

cellはgcc使ってるから、xlc使うと多少早くなるかも知んないけど、まあcellが1.5倍早くなったとしてそれでも、4倍の違いがあって、カタログスペックの約2倍の違いとは差がある。

確かめてないけど、やっぱり超越関数の効果だなこれは。一回、超越関数抜いて計算すりゃわかるんだけど。暇があればやってみよう。

2008年1月17日木曜日

地球シミュレータ、次世代京速計算機って金かけすぎ?

とあるブログでESと京速計算について批判が展開されている。それについて思ったこと。

例えばESでの研究の結果、気象予測の精度が上がったら、日本でどれだけ経済効果があるのだろう。
ESで地震の予測精度が上がったら、どれだけ損失を防げるだろう。
ESで温暖化の予測ができたら、世界の人がどれだけ助かるだろう。

でもきっと、ESはそんな凄いことは、一つも達成はできないだろう。現在のテクノロジーでは、どれだけお金をかけても、やれることはたかが知れてる。

じゃあ、そんなことにお金をかけなくてもいいのだろうか?

例えばIPS細胞は、今は何の役にもたたない。だけど、将来、あらゆる病気の治療を可能にするかもしれないなら、研究に多少のお金をかけるのも納得できる。

これからの20年で、コンピュータの能力は少なくとも1000倍は上がる。そのときには、何ができるようになってるだろう。そのできることが決定的に社会や人生を変えるなら、それに見合ったコストはかけるべきだ。

だったら、20年後にどっかから買ってくればいいじゃんっていう話もある。でも、逆に日本でそういうものを作り出せれば、世界中が買いにくることになる。経済以外でも、社会貢献や軍事で計り知れないアドバンテージが得られる。

ただ、これまでの大型計算機プロジェクトの成果をみると、結局、将来的に何も達成できないんじゃと感じるのは仕方のないことだと思う。構築に金をかけることが目的で、作ればおしまいてきなものだと思われかねない。

将来への発展性を持ち、役に立つものであることを示すには、とにかく作ったものを使い倒して、成果を出さなければならない。そのためには結局、使える人を啓発、教育して作っていく以外にない。目に見えにくい部分だが、これが一番重要なのだと思う。

だから、自分の結論としては、1000億の国費を投じるというのは、将来のことを考えると十分意味があると思うが、それに見合った、使う人への投資をすべきで、そのバランスが大切だ、ということになる。今はそれがちよっと偏っているか、現状がみえにくい状況かと思う。

コンダクタンスの計算

シナプスコンダクタンスの計算は、イオンチャネルの計算などと違って、どのようにやるべきかのセオリーがないと思う。それは場合によって、神経回路網の規模や、計算機の規模や性能がまちまちで、それに依存するからだ。

今回、いろいろ検討して、それを思い知った。1台の計算機や、ある神経細胞数のニューラルネットなら最適な方法が、クラスタになったり、神経細胞数が一桁増えたとたん、逆に足かせになって、他の方法がよくなったりする。その原因は、ほとんどがメモリの量と通信速度のせいだ。

今回は多少、速度が犠牲になっても、スケールするような方法をとるつもり。

2008年1月16日水曜日

目まぐるしい変化

一昨年にGRAPE-DRが登場して、Cellの倍の性能ということで、多いに期待した。でも、たった2年もたたない内に、GPUに追い越されそうである。そのGPUも2年後のLarrabeeの登場で、駆逐されるかもといううわさもある。

これだけ移り変わると、大規模な計算の具体的な計画というのは、2-3年の短期的にしかたてられない。5-10年などの中長期的な計画を建てると、大損こいたり、計算プラットフォームすらなくなっている可能性だってある。

そうなると、既存のコードで生き延びていこうというよりも、将来出現するアーキテクチャをある程度見越して、有効な計算アルゴリズムだけ考えておいて、出てきたらすぐコードに移せるような戦略がいいかなとちっと思う。

今はCellとかGPUいじってるけど、恐らくここで学んだことはLarrabeeで実用に結び付くと思っている。しかし、そのころになると、次のなにかがまた顔を出し始めるんだろう。

次の次は貫通電極だと思っている。その次は、もう全然違うなにか、単電子半導体か光コンピュータか。そしたら10Pflopsが手の平サイズの世界かな。20年内にくるかどうか。未来の人は、そんなもん手に入れて、なんに使っているんだろう。きっと、脳型のアプリがはやってたりするんだと思う。自分だけの個性が手に入っているのかも。

2008年1月15日火曜日

それではCellで

さてGPUはかなり堪能したので、つぎはCellを再開しようかな。完全体のセルの恐ろしさを見せてやる!

今日は、プログラムの仕様書なるものを適当に書いてみた。普段はこんなことはめったにしないのだけど。今回はダブルバッファをやる予定なので、各計算でのデータ量を詳細に把握しないとできないのだ。あと、前回計算アルゴリズムで紆余曲折して、はじめの設計の大切さを痛感したから。無駄骨にならんように。

プログラムの普遍性を高めたり、規模を大きくしようとして、結局LSの容量との格闘になるなあ。クラスタ組むならノード間の帯域との戦いっていうのもでてくる。

2008年1月12日土曜日

2枚起動&CUDA+MPI

だいたいシミュレーションはできたので、ちがうことやろうと2枚ざし同時実行を試しにやってみた。cudaのsampleにmultiGPUというわかりやすいのがあったので、利用した。助かる〜。

結果、あまり苦もなく実行できた。ただ、GPU間の相互のデータ通信はなくて、単に2つ同じプログラムを実行しているだけ。データのやりとりはちょっとすぐにはできなそうだ。

まだ余力があったのでMPI実行できないかなと試してみた。WindowsでMPI実行するのは初めてだったんだが、インストールが超ー簡単だな。Linuxは偉い苦労した気がするけど。VC特有のエラーがちょっとでたが、結構簡単に実行できた。わーい。今のところ、通信のレイテンシは500μsまでは隠蔽できる予定なので、MPIでクラスタ組めば、性能はリニアにスケールする予感。あとはクラスタ組む程、金があればなあ…。

2008年1月10日木曜日

スレッド増量中

blockあたりのwarpを増やしてみた。8つまでふやすとよいという情報を信じてやってみたら、warpを7つまで増やすと、計算が落ちる。なんでだ?
でも6つまででも早くなる。早くなったけど、それを相殺するコードのミスが他にあって、結局とんとんになった。それにしても、2000近いスレッドが並列に走って早いというのはすごいなあ。

こんだけスレッドが多いと、いままでと世界がちょっと変わってくる。メモリのデッドロックの影響なんかはもろにでてくる。スレッド間のやりとりも、典型的なツリー構造の通信とかを本気でやる必要がでてくる。並列計算の本を見直さなきゃ〜。


PCは8800GTが2枚ざしなので、2枚並列演算もやりたいな。それができたらMPIかな。そろそろ個人のお金じゃきつくなってきたなあ…。

2008年1月9日水曜日

あへあへ3

cudaでのシミュレーションで、シナプスコンダクタンスの計算がバカみたいに時間がかかってたので、やりかたをちょっと変えてみた。

一般にシナプスコンダクタンス計算の実現方法はいろいろある。いちばん早いのはキャッシュに乗るようなテーブルを利用する方法なんだが、キャッシュに乗らないと使えない。

今回はShared memoryに乗るような状況だったので、それでやってたが、それがどうやら問題だったようだ。スレッドの数がめちゃくちゃ多いのでテーブルへのアクセスの競合が起きているようで、メモリの早さがいかされていなかったようだ。

そこで、テーブルを使わず、各スレッドでα関数(指数関数を含む)でそのつどシナプスコンダクタンス計算させて、メモリの競合などは起きない状況にするとかなり早くなった。

逆に余ったテーブル用のメモリをつかって、コンダクタンス計算の方法をちょっと変えてみたら、ばかっぱや!

結果として、Cellでやったときの約5倍の速度になった。すげー。
大体8800GTのカタログスペックはCellの倍だ。倍以上はやくなったのは、そもそもアルゴリズムが変わって、効率があがっているのと、SFUがあるせいかもしれない。Cellでの指数関数の計算コストはとにかくでかかったからなあ。

最適化はまだそんなに本格的にやってないので、きっとまだ速度はあがる。昨日、気づいたのだが、パイプラインを効率的に使うにはwarp8つ分のスレッドを実行しないと行けないらしい。今はwarp2個分しか使ってない。でもwarp8つ分でsm14個をフルに使うとなると、8*32*14=3584個のスレッドを同時実行することになる。ひえ〜。でもスレッドといってもデータスレッドであって、一般的なスレッドとは違うみたいだけど。

あへあへ2

ちっと8800GTでのシミュレーションをいじくってたら、blockの同期がかなりまともな速さでできるようになった。どうも一つフラグのメモリ領域に、多数のスレッドからのアクセスが集中する状況になるようなあほコードに原因があった模様。あほあほ。アクセスがバラけるようにちこっと変えたら解決。こういうのはセオリーというか常識なんだろうか?うーむ。

blockの同期は全然いける。nvidiaさん、文句いってごめんなさい。こんなんできるということは、blockの同期用のAPIがひょっとして用意されてるのか?

ところで、シミュレーション時の浮動小数点数演算性能を軽く見積もってみた。結合はなし。指数関数をどう換算するかが難しいのだが、8倍のclock cycleがかかるので大雑把に10倍の10FLOPSとして計算した。そうすると約600GFLOPS。本当?そんな出てるの?

2008年1月7日月曜日

民主主義

NHKの民主主義というドキュメントを見た。何回かあって、どれも面白い。今日は中国の子供選挙。

誠実な女の子候補が最後に勝つのかと思っていたら、投票直前に買収をしかけた子が大差で勝った。これにはものすごいびっくりした。なにかの幻滅を一瞬感じたが、そうじゃない、これが民主主義の原理であるということを痛感した。

所詮、子供のリーダーにだれがなろうと、子供有権者の生存に直接どうこうするものじゃない。別にいいのだ。面白ければ。

これは子供だからとか、中国だからとか、そういう問題じゃない。自分に利するものに選択を行える。それが民主主義。当たり前のことだ。ただ、自分が何を利とするかが違うだけ。

民主主義って、並列処理だね。

2008年1月6日日曜日

あへあへ

あれよあれよと8800GTいろいろいじってしまった。こんなことしてる場合じゃないんですが…。

・単純な浮動小数点演算でCellの約2倍の性能がある。
超越関数専用演算器があるので、もっとあほ見たいに早くなってもおかしくないなと思っていたが、そこまではいかないよう。カタログスペックどおりの差。

・CUDAはCellに負けずに、かなり手がかかる。
GPUとGPUメモリ間の転送をしっかり手を入れてやらないとだめ。分岐が弱い。

まだろくに最適化してないけど、大変そう…。

G80って、特徴がほとんどCellと一緒。弱いところとか傾向はみんな同じ。
さて、これからどこまでやろう。あんまり報われない予感…。

2008年1月5日土曜日

実機で実行

8800GT搭載機がきた!GPGPU熱が下がり気味だったけど、せっかくなのでこれまでエミュどまりだったのを、遂に実機で実行することに!

しかし、まあこういうのは大概すんなりいかないもんだ。まず環境整備でつまづく。VS2008を実機にインストールするも、VS2005のプロジェクトがうまく実行できない。sampleもうまく実行できない。結局VS2005を入れ直す。

エミュを実行できるまで環境が整い、次に実機実行しようとすると、エミュ以外だめ!というエラーが続出。すっかり忘れてたー。

なおして、とりあえず実行してみた。できた!…みたい。まだ結果のデータを確認してないからわからんけど。

あとエミュでできなかった、block間の同期をとりあえず実行、終了はできた。えがった。


あれ、あんまはやくねえぞ…。最適化ほとんどしてないからこんなもんかな。まだCellよりおぞい。