最適化問題に対する超高速&安定計算

クラスタ計算機やスーパーコンピュータ上での大規模最適化問題やグラフ探索などの研究のお話が中心

CUDA のインストール

2008年02月10日 03時45分57秒 | Weblog
レフェリーで CUDA 関係の論文が来たので、CUDA をインストールして使ってみることにした。手元にあった GeForce 8xxx 系は 8600GTS だけなので、GeForce 8800GTS 512MB を購入した。現在は Fedora 7 が正式サポートだが、手元に Fedora 7 のマシンが無いので、Fedora 8 で試してみた。

1: CUDA のダウンロード (Fedora 8 x86_64 の場合)
CUDA Toolkit version 1.1 for Fedora 7
CUDA SDK version 1.1 for Linux
NVIDIA Driver for Linux with CUDA Support (169.09)

2: NVIDIA ドライバのインストール
yum install kernel-devel
yum install freeglut freeglut-devel
init 3
sh NVIDIA-Linux-x86_64-169.09-pkg2.run
init 5

3: CUDA のインストール
sh NVIDIA_CUDA_Toolkit_1.1_Fedora7_x86_64.run
sh NVIDIA_CUDA_SDK_1.1_Linux.run
/etc/ld.so.conf に /usr/local/cuda/lib を追加
ldconfig
PATH に /usr/local/cuda/bin を追加

4: サンプルファイルの make
cd NVIDIA_CUDA_SDK
make
  ただし、gcc 4.2.x ではコンパイルできない。gcc 4.1.x を推奨
NVIDIA_CUDA_SDK/bin/linux/release 以下に様々なバイナリが出来ている

この中の bandwidthTest を用いるとメインメモリ ←→ ビデオカードのメモリ間の
バンド幅の測定が出来る。ビデオカード内は 50GB/s強になる。

./bandwidthTest
Quick Mode
Host to Device Bandwidth for Pageable memory
.
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 1520.1

Quick Mode
Device to Host Bandwidth for Pageable memory
.
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 1227.4

Quick Mode
Device to Device Bandwidth
.
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 50910.8

&&&& Test PASSED
ジャンル:
ウェブログ
コメント (11)   この記事についてブログを書く
この記事をはてなブックマークに追加
« 統計学 | トップ | CUDA のインストール その2 »
最近の画像もっと見る

11 コメント

コメント日が  古い順  |   新しい順
Unknown (後藤)
2008-02-07 11:36:47
問題なのは、この非常に狭いバンド幅 (1.4GB/s max) で何ができるか、ということなのですが、まぁ、普通の線形代数関係は全滅でしょうか。 BLAS のLevel 3 の実装は可能じゃないか、という話もありますが、小行列の特性が悪すぎて実用にはなりません。
Unknown (SDPA)
2008-02-07 22:28:42
この性能では使いにくそうです。日本での発表でも CPU と GPU を併用した GEMM や FFT などの実装と実験を見かけますが、単体よりも少し速くなるといった程度で GPU 側の数百GFlops という性能は生かせてません。
Unknown (後藤)
2008-02-07 23:08:53
行列積では、普通の CPU 上では m と n を大きくする必要がありますが、GPGPU 系では m と k を大きくする必要があります。水と油の関係みたいな感じで、混合しても性能は上がりません(HPL の性能が出ないのはこのため)。
どうしても GPGPU で計算がしたい、ということであれば Out-of-Core のモデルを使うとうまくいくと思います。
Unknown (SDPA)
2008-02-08 10:26:47
混合しても性能が出ない理由はすでに判明しているわけですね。日本での発表ではそのような高度な話は出ないので、海外の文献を調べてみます。個人的には Intel や AMD のように CPU と GPU をもっと近くに配置してもらって、倍精度演算ができるようになってから使おうと思っています。
Unknown (後藤)
2008-02-08 15:14:42
結局は Out of Core なので性能はバンド幅で決まってしまうのがミソです。これからもいろいろなカードが発表されると思いますが、理論値に関係なく倍精度行列積では60MFlops、単精度では 120MFlops 付近が上限ではないかと。
それよりも、多倍長整数計算とか倍々精度浮動小数のエミュレーションをやらせたら面白いと思うのですが。
Unknown (SDPA)
2008-02-10 00:17:10
どんなカードでも PCI-Express のバンド幅で性能上限が決まる感じでしょうか? 現在のSDPA には精度の問題がありますので、4倍精度浮動小数点の高速化は大変興味があります。それもカード自体が倍精度演算をサポートしてからです。axpy あたりから考えるのがいいでしょうか?
Unknown (後藤)
2008-02-10 04:18:11
もちろん、m, k を大きくすると性能をあげることはできますが、この場合には m, k > 10000 です。ま、普通の状態では使い物にならないです。
無限大の演算性能を持つカード上で 4倍精度のエミュレーションを行った場合の最大性能は 30GFlops 程度と予想できます。Intel Core2 だと 20MFlops 程度ですので、それなりに高速化できます(実際には GPGPU での整数乗算性能で律速されるとは思いますが)。ただし、m, k を大きくしなければならない制限がありますので、SDPA に使えるかどうかは未知数です。
Unknown (後藤)
2008-02-10 05:21:37
ちなみに、真面目に DAXPY を GPGPU にやらせたとすると、同時双方向転送が可能だとしても 90MFlops (4 倍精度だと 45MFlops)程度でしょうか。
Unknown (後藤)
2008-02-11 10:30:44
すいません。単位が滅茶苦茶なので整理します。
GPGPU 上での行列積の上限値 : 120GFlops(単精度), 60GFlops (倍精度), 30 GFlops (4倍精度)
AXPY の上限値 : 180 MFlops (単精度), 90MFlops (倍精度), 45 MFlops (4倍精度)

というわけで、カード上に大容量バッファを持っていないタイプのアクセラレータカードでは行列積の性能が出ることはありません。
Unknown (SDPA)
2008-02-11 23:34:08
axpy (4倍精度)の上限は 45MFlops ですか。数百MFlops ぐらいでそうな感じがしたのですが、Level 1 は厳しいですね。それならば Cell で作った方が性能が出そうです。
Unknown (後藤)
2008-02-11 23:51:57
Cell ならば 700MFlops くらいにはなるかと。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
ブログ作成者から承認されるまでトラックバックは反映されません。