マツドサイエンティスト・研究日誌 保存版
Ubuntu で スパコン

初出:2009年03月29日 元々のブログ・コンテンツへのリンク
カテゴリーのインデックス: パソコン・インターネット
シリーズのインデックス: Linux

普段、使っているキューブ・パソコンの表示がおかしくなった。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
inserted by FC2 system