Ubuntu 10.10にCUDAをインストールした時のメモ

先日、「Ubuntu 10.04にCUDAをインストールした時のメモ - irieめも」という日記を書きましたが、Ubuntuを10.10にアップグレードしてCUDAも新しいバージョン (3.2 RC2) を入れ直したので、もう一度まとめてみました。前回とほぼ同じ手順ですが、少し違う点もあります。

インストールは以下の順序で行います。

  1. Ubuntu 10.10
  2. NVIDIA製ディスプレイドライバ
  3. CUDAプログラムのコンパイルに必要なライブラリ等
  4. CUDA Toolkit 3.2 RC2
  5. GPU Computing SDK 3.2 RC2

CUDA 3.2 の正式版がリリースされたので更新しました。(10/12/05)

Ubuntu 10.10

インストール方法はいろいろなところに書かれているので、ここでは省略します。使用するPCが Core i7 CPU + メインメモリー 12GiB ということで、64bit版を入れました。

NVIDIA製ビデオドライバ

前回はUbuntu-X team の X Updates PPA を利用して新しいバージョンを入れましたが、今回はUbuntu標準のドライバが比較的新しいため、普通に「システム > システム管理 > ハードウェア・ドライバ」からインストールしました。今のところ問題は無いようです。PPA を利用したい場合は前回の手順でインストールすればよいでしょう。
インストールが終わったら、再起動します。

CUDAプログラムのコンパイルに必要なライブラリ等

Ubuntuの公式のパッケージを利用します。

sudo apt-get install g++ freeglut3-dev libxi-dev libxmu-dev

ただしこれだけでは、GPU Computing SDK に含まれている、MPIを利用するサンプル (simpleMPI) がビルドできません。simpleMPIもビルドしたい場合は Open MPI 関連のパッケージもインストールします。

sudo apt-get install openmpi-bin openmpi-dev

CUDA Toolkit

CUDAのダウンロードのページ (http://developer.nvidia.com/object/cuda_3_2_downloads.html#Linux) から、Ubuntu 10.04 用の CUDA Toolkit のファイル (cudatoolkit_3.2.16_linux_64_ubuntu10.04.run) をダウンロードして、以下のようにインストールします。

chmod a+x cudatoolkit_3.2.16_linux_64_ubuntu10.04.run
sudo ./cudatoolkit_3.2.16_linux_64_ubuntu10.04.run

途中でインストール先を聞かれますが、デフォルトの /usr/local/cuda に入れます。
インストールが終わったら、各種のファイル検索パスを設定します。
以下の内容の /etc/ld.so.conf.d/cuda.conf というファイルを作成します。

/usr/local/cuda/lib64
/usr/local/cuda/lib

この設定を有効にするために、以下のコマンドを実行します。

sudo ldconfig

以下の内容の /etc/profile.d/cuda.sh というファイルを作成します。

export PATH="/usr/local/cuda/bin:$PATH"
export LIBRARY_PATH="/usr/lib/nvidia-current"

ここで、この設定を有効にするために再ログインします。

GPU Computing SDK

GPU Computing SDK は、追加のライブラリやサンプルプログラム、ドキュメント類のセットです。これをインストールしなくてもCUDAのプログラムは作成できますが、参考になるので入れておく方がいいでしょう。
CUDA Toolkitと同じ場所から gpucomputingsdk_3.2.16_linux.run をダウンロードし、インストールします。

chmod a+x gpucomputingsdk_3.2.16_linux.run
./gpucomputingsdk_3.2.16_linux.run

途中でインストール先を聞かれますが、デフォルトの $HOME/NVIDIA_GPU_Computing_SDK に入れます。

次にサンプルプログラムをビルドします。

cd ~/NVIDIA_GPU_Computing_SDK/C
make

ビルドが終わると、$HOME/NVIDIA_GPU_Computing_SDK/C/bin/linux/release にいろいろなバイナリが生成されているので、動かしてみます。例えばnbodyというのは、N体問題を解くプログラムです。

cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release
./nbody

たぶん64bit環境固有の問題

前回も書いたように、64bit環境では書籍「はじめてのCUDAプログラミング」のサンプルプログラム (http://www.kohgakusha.co.jp/support/cuda/index.html) をビルドしようとすると、「/usr/bin/ld: cannot find -lcutil」というエラーが出て止まってしまいます。以下のように、$HOME/NVIDIA_GPU_Computing_SDK/C/lib 内にシンボリックリンクを作成すると、正常にビルド及び実行が出来るようになるはずです。

cd ~/NVIDIA_GPU_Computing_SDK/C/lib
for i in `ls *_x86_64.a`; do ln -sv $i ${i%_x86_64.a}.a; done

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)

ibus.el version 0.2.1 リリース

ダウンロードはこちらでどうぞ↓
ibus.el - irie @ ウィキ - アットウィキ
または
ibus.el in Launchpad
LaunchpadのPPAにdebパッケージが置いてあります。
https://launchpad.net/~irie/+archive/elisp

Version 0.2.0からの変更点

  • vim-modeのサポートを追加
  • `ibus-agent-file-name' の検索パスにlibexecディレクトリを追加
  • 半角英数モードにおいてキーイベントに対する元々の動作をシミュレートするために、fallbackのコマンドを実行するように変更(IBus issue #1058)
  • オプション `ibus-kana-onbiki-x-keysym' および `ibus-kana-onbiki-key-symbol' を無効にできるように、カスタマイズ型を修正
  • カーソル色をリセットするときに、テーマの色を考慮するように修正
  • 非Xフレームに対して不必要にカーソル色をセットしないように修正
  • コマンド実行中に不必要にカレントバッファをチェックしないように修正
  • 非XフレームからXフレームに切り替えるとキーマップが更新されない場合がある不具合を修正
  • モニターの電源が省電力機能で自動的に切れると、ibus-modeが異常終了する不具合を修正
  • 複数フレームの1つでemacsw3mを起動すると、他のバッファのうちの1つでキーマップが無効化されてしまう不具合を修正
  • ibus-mode開始時またはディスプレイ切替時に、ibus-el-agentがXのディスプレイへの接続に失敗してクラッシュする場合がある問題を修正したかも(RH bug #627358)

バグ修正リリースです。いつの間にかibus-modeが終了してしまったり、キーマップが無効化されてしまう不具合等を修正しました。
また、vim-modeのサポートを追加しています。vi-mode/vip-mode/viper-mode/vimpulseと同様にvim-modeでも、入力状態に応じてキーマップを切り替えるようになっています。

Ubuntu 10.04にCUDAをインストールした時のメモ

CUDAの使えるGPU (GeForce GTX 470) を搭載したPCを購入して、Ubuntu 10.04環境にインストールしてみたので、手順をまとめてみました。
下の動画は、CUDAをテストするために作った数値計算のプログラムの結果から gnuplotImageMagick を利用して作成したものです。

インストールは以下の順序で行います。

  1. Ubuntu 10.04
  2. NVIDIA製ディスプレイドライバ
  3. CUDAプログラムのコンパイルに必要なライブラリ等
  4. CUDA Toolkit 3.1
  5. GPU Computing SDK 3.1

Ubuntu 10.04

インストール方法はいろいろなところに書かれているので、ここでは省略します。今回使用したPCは Core i7 CPU + メインメモリー 4GiB ということで、64bit版を入れました。

余談ですが、メモリーはその後12GiBに増設しました。上の動画を作成しようとしたら、4GiBでは足りなくなってしまったためです。動画への変換のためにImageMgickのconvertを起動すると、1プロセスで約8GiB消費しました。32bit OSで頑張るのもそろそろ限界ですね。ちなみに、ソースコードhttps://code.launchpad.net/~irie/+junk/cuKdVsolvに晒してあるので、ご自由にどうぞ。

NVIDIA製ビデオドライバ

「システム > システム管理 > ハードウェア・ドライバ」からインストールできますが、バージョンが古いので、Ubuntu-X team の X Updates PPA を利用して新しいバージョンを入れます。

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install nvidia-current nvidia-current-modaliases nvidia-settings

インストールが終わったら、「システム > システム管理 > ハードウェア・ドライバ」でNVIDIAのドライバが有効になっていることを確認し、再起動します。

CUDAプログラムのコンパイルに必要なライブラリ等

Ubuntuの公式のパッケージを利用します。

sudo apt-get install g++ freeglut3-dev libxi-dev libxmu-dev

CUDA Toolkit

CUDAのダウンロードのページ (http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux) から、Ubuntu 9.10 用の CUDA Toolkit のファイル (cudatoolkit_3.1_linux_64_ubuntu9.10.run) をダウンロードして、以下のようにインストールします。

chmod a+x cudatoolkit_3.1_linux_64_ubuntu9.10.run
sudo ./cudatoolkit_3.1_linux_64_ubuntu9.10.run

途中でインストール先を聞かれますが、デフォルトの /usr/local/cuda に入れます。
インストールが終わったら、各種のファイル検索パスを設定します。
以下の内容の /etc/ld.so.conf.d/cuda.conf というファイルを作成します。

/usr/local/cuda/lib64
/usr/local/cuda/lib

この設定を有効にするために、以下のコマンドを実行します。(11/5 追記)

sudo ldconfig

以下の内容の /etc/profile.d/cuda.sh というファイルを作成します。

export PATH="/usr/local/cuda/bin:$PATH"
export LIBRARY_PATH="/usr/lib/nvidia-current"

ここで、この設定を有効にするために再ログインします。

GPU Computing SDK

GPU Computing SDK は、追加のライブラリやサンプルプログラム、ドキュメント類のセットです。これをインストールしなくてもCUDAのプログラムは作成できますが、参考になるので入れておく方がいいでしょう。
CUDA Toolkitと同じ場所から gpucomputingsdk_3.1_linux.run をダウンロードし、インストールします。

chmod a+x gpucomputingsdk_3.1_linux.run
./gpucomputingsdk_3.1_linux.run

途中でインストール先を聞かれますが、デフォルトの $HOME/NVIDIA_GPU_Computing_SDK に入れます。

次にサンプルプログラムをビルドします。

cd ~/NVIDIA_GPU_Computing_SDK/C
make

ビルドが終わると、$HOME/NVIDIA_GPU_Computing_SDK/C/bin/linux/release にいろいろなバイナリが生成されているので、動かしてみます。例えばnbodyというのは、N体問題を解くプログラムです。下のスクリーンショットのように、たくさんの光の点が飛び回ります。

単精度ですが、450GFLOPS出ています (倍精度だと90GFLOPSぐらい)。

たぶん64bit環境固有の問題

以上の設定を済ませた後、書籍「はじめてのCUDAプログラミング」のサンプルプログラム (http://www.kohgakusha.co.jp/support/cuda/index.html) をビルドしようしたら、「/usr/bin/ld: cannot find -lcutil」というエラーが出て止まってしまいました。どうやら $HOME/NVIDIA_GPU_Computing_SDK/C/lib 内のファイル名に問題があるようだったので、以下のようにしてシンボリックリンクを作成すると、ビルドが通り正常に実行することが出来ました。

cd ~/NVIDIA_GPU_Computing_SDK/C/lib
for i in `ls *_x86_64.a`; do ln -sv $i ${i%_x86_64.a}.a; done

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)

ibus.el version 0.2.0 リリース

ダウンロードはこちらでどうぞ↓
ibus.el - irie @ ウィキ - アットウィキ
または
ibus.el in Launchpad
LaunchpadのPPAにdebパッケージが置いてあります。
https://launchpad.net/~irie/+archive/elisp

Version 0.1.1からの変更点

  • `ibus' グループの親グループに `i18n' を追加
  • オプション `ibus-agent-start-ibus-daemon' を追加
  • デフォルトではibus-daemonを自動的に起動しないように変更 (RH bug #620349)
  • xwininfoを使わないように変更
  • Xのルートウインドウの「_NET_ACTIVE_WINDOW」プロパティを使わないように変更
  • 複数ディスプレイ環境で複数の異なるレイアウトのキーボードを使う場合でも、Alt-Meta間の変換が正常に動作するように修正
  • カスタム変数の説明文字列を書き直した
  • 内部的なオプションibus-meta-key-existsを削除
  • keyvalが非アルファベットのASCII文字の場合に、Shiftキーが無視される不具合を修正
  • isearch-modeでibus-toggleコマンドを使うとミニバッファが消去されてしまう不具合を修正
  • isearch-mode-mapにおいて C-\ がibus-toggleコマンドに割付けられ、かつ `ibus-use-kana-onbiki-key' が非nilの場合に、Xのキーマップが正常に書き換えられない不具合を修正
  • 他のアプリケーションからフォーカスインした後、最大約0.3秒間キーマップが無効になっている不具合を修正
  • キーボードにMetaキーが有る場合に、Alt + Romajiが無視される不具合を修正
  • キーボードにMetaキーが有る場合に、forward_key_eventがRomajiキーをHiragana_Katakanaキーに誤変換する不具合を修正
  • 複数ディスプレイ環境でibus-el-agentがインデックスエラー(list index out of range)を発生することがある問題を修正
  • ibus-modeが異常終了した後にpost-command-hookが実行される可能性がある不具合を修正
  • インクリメンタル検索時に `english-dvorak' インプットメソッドとIBusを併用できない不具合を修正
  • ヘッダーラインが表示されている時にtext-scale-modeをオフにすると、行の高さとして誤った値が使われる不具合を修正
  • インクリメンタル検索にIBusを使うと、時々 " is undefined" というエラーが出る不具合を修正
  • インクリメンタル検索にIBusを使うと、時々誤ってプリエディット文字列がカレントバッファに挿入されてしまう不具合を修正

過去のバージョンでは、カーソル位置の絶対座標を計算するために外部プログラムのxwininfoを呼び出していましたが、ibus-el-agentからpython-xlibを利用して計算するようにしました。これで少し動作が軽くなったはずです。また、入力フォーカスの監視もpython-xlibを利用するようにしたので、NET_ACTIVE_WINDOWプロパティをサポートしていないウィンドウマネージャでも正常に動作するようになりました。

動作の変更としては、ibus-daemon自動起動機能がデフォルトでオフになりました。これは、RedHat Bug #620349 (https://bugzilla.redhat.com/show_bug.cgi?id=620349)に対処するためです。従来通りの動作にしたい場合は、.emacsに以下のような設定を追加して下さい。

(setq ibus-agent-start-ibus-daemon nil)

scim-bridge.el version 0.8.2 リリース

ダウンロードはこちらでどうぞ↓
scim-bridge.el - irie @ ウィキ - アットウィキ
または
scim-bridge.el in Launchpad
LaunchpadのPPAにdebパッケージが置いてあります。
https://launchpad.net/~irie/+archive/elisp
version 0.8.1からの変更点

  • カーソル位置が変化しなかった場合に座標をエージェントに送信しないように変更
  • ミニバッファ内では `scim-prediction-window-position' の値にかかわらず、常に予測候補ウインドウをカーソル位置に表示するように変更
  • 不必要になっていたイベント `scim-dummy-event' を使わないように変更
  • 同一のバッファを表示している別フレームを選択した時に、プリエディットを再描画するようにした
  • ヘッダーライン表示時に text-scale-mode で候補ウインドウの位置がずれる不具合を修正
  • `scim-prediction-window-position'がデフォルト値でない場合に、予測ウインドウが誤った位置に表示されることがある不具合を修正
  • 多数のフレームを使用していると、post-command-hook が非常に重たくなる不具合を修正
  • `scim-use-kana-ro-key' が非nilの場合に、Xのキーマップが誤って変更される可能性がある不具合を修正
  • 他のアプリケーションからフォーカスインした後、最大約1秒間キーマップが無効になっている不具合を修正

特に新しい機能の追加はありません。ibus.el version 0.1.1 からバックポートしたバグ修正と無駄な処理の排除のみです。
scim-mozcが最近リリースされましたが、かな入力方式でShiftキーが効かない不具合があります。この問題についてはmozc側で修正されそうな雰囲気なので、今回はとりあえず放置してあります。Mozc revision 31で修正されました(2010/7/1追記)

ibus.el version 0.1.1 リリース

ダウンロードはこちらでどうぞ↓
ibus.el - irie @ ウィキ - アットウィキ
または
ibus.el in Launchpad
LaunchpadのPPAにdebパッケージが置いてあります。
https://launchpad.net/~irie/+archive/elisp

Version 0.1.0からの変更点

  • オプション `ibus-prediction-window-position' を追加
  • オプション `ibus-agent-buffering-time' を追加
  • Key release イベントをエージェントに送る必要がないように変更
  • カーソル位置が変化しなかった場合に座標をエージェントに送信しないように変更
  • プリエディットが空の場合に不必要な空文字列をEmacsが受け取らないように変更
  • 不必要になっていたイベント `ibus-dummy-event' を使わないように変更
  • 文字列確定の直後にカーソル位置を送信しないようにした
  • ibus-anthy の「フォーカスアウト時の動作」を「保持」 に設定している場合に、正常動作するようにした
  • 同一のバッファを表示している別フレームを選択した時に、プリエディットを再描画するようにした
  • ヘッダーライン表示時に text-scale-mode で候補ウインドウの位置がずれる不具合を修正
  • 多数のフレームを使用していると、post-command-hook が非常に重たくなる不具合を修正
  • IBus 1.3で使用すると、ibus-mode が突然 終了することがある不具合を修正
  • エージェントによるIBusデーモンの起動が失敗することがある不具合を修正

今回は速度の向上およびバグ修正を目的としたリリースです。まだscim-modeよりも少し重いですが、だいぶマシになったと思います。現在のところ、Xmingのrootlessモードでは使えませんが、次のバージョンでは可能になる予定です。またxwininfoがない環境でも使えるようにする予定です。文字端末上のEmacsで使えるようになるまでには、もう少し時間がかかりそうです。

ibus-mozcを使うと、予測候補ウインドウがプリエディット領域の先頭位置に表示されます。このようにした理由は、ウインドウの位置が固定されるため表示位置をIBusに毎回教える必要がなく、速度的に有利になるからです。気に入らない場合は以下の設定を.emacsに記述してください。

(setq ibus-prediction-window-position t)

これで、予測候補ウインドウが常にカーソル位置に表示されるようになります。ただし、ミニバッファ内では上記の設定に関わりなく、常にカーソル位置に表示されます。

ibus-modeでIBusのON/OFFを任意のキーに設定する方法

IBusのトグルを任意のキーに設定する

EmacsではC-SPCはマークをセットするのに使いたい人が多いと思います。READMEにもありますが、~/.emacs

;; Use C-SPC for Set Mark command
(ibus-define-common-key ?\C-\s nil)

と書けばOKです。ただしこのままでは、全角/半角キーがないキーボードではIBusが使えなくなってしまいます。
ibus.elにはIBusをトグルするためのコマンドibus-toggleが用意されていますので、これを使って例えば

;; Toggle input status by alt + henkan
(global-set-key [M-henkan] 'ibus-toggle)

とすると、alt+変換キーでIBusのON/OFFができるようになります。
追記(2010/06/07): ibus-anthy 1.3では、上記の設定だけではIBusにキーイベントを横取りされてしまうため、IBusのOFFが出来ません。alt+変換をプリエディット中にだけIBusに渡すように、次の設定を追加する必要があります。

;; Enable alt + henkan key only for preediting
(ibus-define-common-key 'A-henkan nil)
(ibus-define-preedit-key 'A-henkan t)

IBusのON/OFFを別々のキーで行う

ibus.elにはIBusのONまたはOFFのためのコマンドibus-enableとibus-disableがそれぞれ用意されています。例えば、変換キーでON、無変換キーでOFFにしたい場合は

;; Use henkan key to enable IBus
(global-set-key [henkan] 'ibus-enable)
;; Use muhenkan key to disable IBus
(global-set-key [muhenkan] 'ibus-disable)
;; Enable muhenkan key only for preediting
(ibus-define-common-key 'muhenkan nil)
(ibus-define-preedit-key 'muhenkan t)

とすればよいです。最後の2行は、プリエディット中にだけ無変換キーのイベントをIBus側に渡すようにするためのおまじないです。

エンジンを指定してIBusをONにする

ibus-enableは、引数にエンジン名の文字列を与えることによって、任意のエンジンでIBusをONにできます。例えば

;; Start IBus with pinyin engine
(global-set-key [(super henkan)] (lambda () (interactive) (ibus-enable "pinyin")))

とすると、super+変換キーでピンイン入力の状態になります。エンジン名は、モードラインに表示されている、[]の中の文字列です。例えば、ピンインの場合はモードラインで"IBus[pinyin]"となっているので、エンジン名は"pinyin"であるとわかります。