普段、使っているキューブ・パソコンの表示がおかしくなった。RGBのうち赤が映らないようで、青い画面になった。ディスプレーは、他のパソコンに接続すると正常なので、マザーボードに載っているグラフィック機能が異常になったようだ。一度バラしてみたのだが、どうやら出力コネクタ部分が接触不良をおこしているようだ。表示が異常なだけで、それ以外に問題はないようだが、写真などが見にくいので、対処をすることにした。キューブ型ベアボーンなので、マザーボードを交換するわけにもいかない。コネクタを交換することも考えたが、ハンダ付けで致命的になるかも知れない。そこで新たにグラフィックボードを購入し、余っている PCI Express x16 スロットに入れることにした。
GeForce 8400 GS のグラフィックカードを 3980円で購入した。これを選んだのは、安かったのと、元々マザーボードに載っていたのが、GeForce 6150 だったので同じように使えるだろうと考えたこと、最後は CUDA と言う GPU を使った超並列プロセッサを試してみたかったからだ。
さて、購入したグラフィックカードを挿してみると、Ubuntu は 8.04 も 8.10 も驚くほど何もしなくても正常に表示した。むしろ Windows XP の方が新たなドライバをインストールするだけ面倒だった。しかし、Debian Linux etch (4.0) は、全く表示できない。まあ、先日アップデートした lenny (5.0) にする潮時って意味かな。
さて、ここからが本題。
Ubuntu 8.04 の上に CUDA をインストした。インスト方法は、CUDA (Ubuntu 8.04.2)に詳しく載っている。
この通りにやると、問題なく動いた。
サンプルを試してみると
$ cd ~/NVIDIA_CUDA_SDK/bin/linux/release
$ ./nbody -benchmark
とやると、15.429 GFLOP/s と出た。これが速いんだか、遅いんだか、良く判らない。
そこで、次のようにやると、GPU を使わず、CPU のみで計算する。
$ cd ~/NVIDIA_CUDA_SDK
$ make emu=1
$ cd ~/NVIDIA_CUDA_SDK/bin/linux/emurelease
$ ./nbody -benchmark
CPU のみだと、0.266 GFLOP/s だった。ちなみに、CPUなどは、AMD Athlon64 X2 4200+ 2.2GHz、メモリ 2Gバイトだ。
15.429 GFLOP/s と 0.266 GFLOP/s で 58倍。ただし、計算中のシステムモニタを見ていると、デュアルコアのうち1個しか使っていないので、ちゃんとデュアルコアとすると、AMD Athlon64 X2 4200+ と CUDA の性能比は 29倍だ。
今回、購入したグラフィックカードは SP数 16 の GeForce 8400 GS で、CUDA 使用する上では、最も性能の低いものだ。それでも 2年前とは言え、デュアルコアの CPU の 30倍もの性能を出すとは、流石は、超並列計算!
もちろん、超並列計算には向き不向きがあり、今回試した nbody は、最も超並列計算に向いたアプリケーションであり、他の用途の場合にも 30倍の性能を出すとは限らない。超並列計算に向いたアプリケーションであっても、特殊なプログラミングが必要になる。
そもそも、今回比較したのは、同じ計算をするエミュレーションソフトなので、比較自体が意味が無いかも。ネット上で調べたら、AMD Athlon64 X2 4200+ は、12 〜 13 GFLOPS らしいので、実は全く性能向上してないかもしれない。
とは言え、やっぱり、超並列計算は魅力的だよね。
ところで、最初の画像を出すのは、下記のようにコマンドすれば良い。
$ cd ~/NVIDIA_CUDA_SDK/bin/linux/release
$ ./nbody -n=4096
注意
ブログのコンテンツの内、「告知」など時期よって情報価値が無くなるのは除いてある。また、コンテンツに付いたコメントは書き込み者に著作権があるものと判断し、ここに持ってきていないので、コメントを見るときは、元々のブログコンテンツを参照してもらいたい。
その他、ブログ発表後、コメントなどの内容を反映するなど、内容を変更しているものもあるので、注意してほしい。