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

大規模最適化問題、グラフ探索、機械学習やデジタルツインなどの研究のお話が中心

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)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 統計学 | トップ | 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 で作った方が性能が出そうです。
返信する

コメントを投稿

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

Weblog」カテゴリの最新記事