ノート
訪問者 2104  最終更新 2010-09-03 (金) 11:57:09

(2010-09-03)追加: google perftoolsのインストール

(CUDAにはプロファイラがCUDA Toolkit内に別にあるのだが)

Google PerfTools 

出発点は fixstarのこのページ Google-perftoolsを使ってCPUプロファイリングをとる 今はどちらかというとopenMPでの実験のため。

上記ページに書いてあるのは古いので、最新版はGoogle Codesのオリジナルページ http://code.google.com/p/google-perftools/ から

ダウンロード: 今日時点での最新は1.6: http://code.google.com/p/google-perftools/downloads/detail?name=google-perftools-1.6.tar.gzのページ内のリンクから

INSTALLを読むと、x86_64ではlibcのスタックのunwindについて問題がありそう。ごちゃごちゃと問題が書いてあるが、とにかく指示通りにgnuページからlibunwind-0.99beta http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-beta.tar.gz をダウンロード。

./configure
./make
./make install

何かmake checkで多少エラーが出るようだ。

libunwindをインストールした上で、google-perftoolをインストール

./configure
make
make check
make install

INSTALLにはこれでもうまく行かないことがありえると書いてある。

make checkの中で、/usr/local/lib/libunwind.so.7が無い というメッセージが出てエラーになる場合があったので、

ldconfig

を実行。これは以前に/etc/ld.so.conf.d/の下にファイル(適当な名前、user_local)を作って、その中に/usr/local/libの1行を書いておいたのだが、それがeffectiveでないらしかったので。

最後に、ターゲットプログラムを使ってテスト。
1) 解析をしたいプログラムをコンパイルするときに、-lprofiler を付けてコンパイルする。
2) 解析をしたいプログラムxxxを実行する直前に、
  LD_LIBRARY_PATH=/usr/local/lib
  export LD_LIBRARY_PATH
3) 解析をしたいプログラムxxxを実行する
  CPUPROFILE=/tmp/prof.out xxx [xxxの実行に必要なパラメタ]
    結果は/tmp/prof.outに書かれる
4) 出力ファイルを解読(分析)するために
  pprof xxx /tmp/prof.out  とするとテキストフォーマットで結果表示
  pprof --gv xxx /tmp/prof.out  とするとグラフィック表示
  グラフィック表示のためにgraphvizの"dot"コマンドを使うので、事前にインストールが必要。
     yum install graphviz    graphvizの詳細はこのページから。
     yum install gv
で、呼び出し相関図と実行時間が得られる。箱の中が1つの関数で、矢印が呼び出し関係を示し、
箱内の数字はその箱を実行した時間(10mS単位)と全体に対する割合。
なお、xxx of yyy と書いてある箱は、yyyがその箱とそれが呼び出す先を含めた時間で、そのうちxxxがその箱自体の時間。
たとえば、initの場合、initが呼び出す箱すべての合計が100%で、その内init自身は0.1%。
(出力の解釈の説明は、ダウンロードしてきたgoogle-perftoolsのパッケージのdocフォルダ中にあり。仮にここのページにコピーして、見えるようにしてある。

処理法のコツ?

CPUPROFILE=/tmp/perf.out CPUPROFILE_FREQUENCY=10000000 main
pprof --dot main /tmp/prof.out > main_profile.dot
dot -T png main_profile.dot > main_profile.png

このとき、mainで関数が短い時、コンパイルオプションで-O3などを付けているとどうもインライン展開をしたりするようで、プロファイルの中に「関数」として出てこない。-O3を外したら全ての関数が出てくるようになったようだ。

-O3を外した状態-O3をつけた状態
main_profile.pngmain_profile_O3.png
mainの中にあるdistance, weight等が見えるmainで一括して括られている

表示に関しては、

pprof -text main /tmp/prof.out ⇒ テキストで表示
pprof --gv main /tmp/prof.out  ⇒ グラフィックで表示
pprof -pdf main /tmp/prof.out > main_profile.pdf  ⇒ PDF形式ファイルを生成

また、上記のように

pprof -dot main /tmp/prof.out > main_profile.dot  ⇒ 一旦dot形式ファイル生成
dot -T png main_profile.dot > main_profile.png   ⇒ PNG形式ファイルに変換

する。

Fedora 12のインストール (2010-08-19)

背景

最初(2010-08-11〜18)、Fedora 13でいろいろ試したが、結論は、CUDAとFedora 13のCの処理系(gcc)との相性の問題があることが判明。> 下の方 Fedora 13上でのCuda環境設定 参照。

問題の本質は、Change to DSO-linking semantics of the compiler や Re: Change to DSO-linking semantics of the compiler にあるように、動的リンク時の「参照」の問題らしい。gcc環境をバージョンアップして(ソースからコンパイルして)作る手もあるらしいが、基本的にFedora 13をあきらめて(Fedora 14だと直っていると言う話も出ている)、Fedora 12で行くことにする。

インストール作業

Fedora 12をフルDVDからインストールした。古いバージョンのFedoraはFedoraのホームページからは探しづらいが、mirror siteの項から探せる。Fedoraのトップからだと、左側メニューの「Fedoraを入手」からget-fedoraへ、次に右側の「All download methods」(これが分かりにくい)からget-fedora-allへ、更に下の方の「その他」の「全てのミラーサーバーを表示」からhttp://mirrors.fedoraproject.org/publiclist/Fedora/13/へ。(この時、「See old versions of Fedora」へ行ってはいけない。ここはFedora 6ぐらいまでのアーカイブ)。これで、欲しい「Fedora 12 x86_64」をクリックしておいてページの下の方を見ると、ミラーサイトが表になっているので、たとえばJPのRikenあたりを選んでみる。

インストールの第1フェーズ(リブートする前まで)はうまく行った。それが事前にFedora 13をインストールしてあったからかどうかは、よくわからない。一応完了してリブートするが、立ち上がらない。Fedoraの画面は出るが、その後ログインの枠が表示されない。

幸い、ネットが設定できているので、ネットからsshでログイン。その中で、NVIDIAのメーカー純正ドライバーをインストールする。その詳細は、ノート/fedoraをtext modeでインストールに書いたとおりだが、要点を再録しておく。

Fedoraに付いて来るNOUVEAUドライバではディスプレイがうまく立ち上がらないことがあるので、NVIDIA純正のドライバに置き変える。これが結構面倒で、 NVIDIAのLinux(64)用ドライバのREADMEファイルに手順が書いてある。

成功したら、rebootする。
確認のため、startxでXを起動してみる。

/etc/inittabで、レベル5から開始、に設定を戻してreboot。

Fedora 12上でCuda設定

基本的に、このページの下の方、#k2c2f0b2と同じだが、短縮して再録しておく。

CUDA Toolkitのインストール

ページCUDA Toolkit 3.1 (June 2010)から、CUDA Toolkit for Fedora 12 (64-bit)を選択して、ダウンロード (64ビット版を選んだ)

適当なディレクトリ(たとえば/usr/local/src)へ置いて、

sh cudatoolkit_3.1_linux_64_fedora12.run

インストール中、展開先を/usr/local/cudaと指定。

インストールが終わったところで、最後に現れるコメント

* Please make sure your PATH includes /usr/local/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /usr/local/cuda/lib
*   for 64-bit Linux distributions includes /usr/local/cuda/lib64:/usr/local/cuda/lib
* OR
*   for 32-bit Linux distributions add /usr/local/cuda/lib
*   for 64-bit Linux distributions add /usr/local/cuda/lib64 and /usr/local/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /usr/local/cuda/doc/

* To uninstall CUDA, delete /usr/local/cuda

に従って、

CUDA SDKのインストール

SDKはToolkitとは別に、個人ディレクトリ下にインストールする。

NVIDIA CUDA C INSTALLATION AND VERIFICATION ON LINUX SYSTEMS の11ページを参考。

上と同じページから、GPU Computing SDK code samples をダウンロードし、 (rootでなくて)自分のユーザIDで、

sh gpucomputingsdk_3.1_linux.run

として実行する。

途中で Enter install pathと聞かれるがdefaultでいいことにする。また、Enter CUDA install pathと聞かれるが、これもデフォルトの/usr/local/cudaにインストールしたので、デフォルトでいいことにする。

確認のため、同書12ページにある通りに、サンプルのコンパイルをしてみる。

cd ~/NVIDIA_GPU_Computing_SDK/C
make x86_64=1

これで、glutが無いと言われたので、

yum install freeglut freeglut-devel

でインストール。再度サンプルのコンパイルをして、全てパス。実行して試せと書いてあるプログラムを試してみる。

cd ~/NVIDIA_GPU_Computing_SDK/Cbin/linux/release
./deviceQuery
./bandwidthTest

これで、CUDAのサンプルのコンパイルは無事完了した。(2010-08-19)

Linux上で自分のプログラムを開発(コンパイル)するには

>> CUDA SDK Release Notes Version 3.1 Release を参照

Note: The default installation folder <SDK_INSTALL_PATH> is "~/NVIDIA_GPU_Computing_SDK"

Creating a new CUDA Program using the NVIDIA GPU Computing SDK infrastructure is easy.
We have provided a "template" project that you can copy and modify to suit your
needs. Just follow these steps:

1. Copy the template project
	cd <SDK_INSTALL_PATH>/C/src
	cp -r template <myproject>

2. Edit the filenames of the project to suit your needs
	mv template.cu myproject.cu
	mv template_kernel.cu myproject_kernel.cu
	mv template_gold.cpp myproject_gold.cpp

3. Edit the Makefile and source files.  Just search and replace all occurences 
   of "template" with "myproject".

4. Build the project
	make

   You can build a debug version with "make dbg=1", an emulation version with 
   "make emu=1", and a debug emulation with "make dbg=1 emu=1".

5. Run the program
	../../C/bin/linux/release/myproject

   (It should print "Test PASSED")

6. Now modify the code to perform the computation you require.  See the
   CUDA Programming Guide for details of programming in CUDA.


これ以下は、うまく行かなかったストーリー。

Fedpra 13のインストール (2010-08-11)

CUDAをLinux上で使うために(今までWindowsで使っていた)、Fedoraの今の最新版Fedora13を導入する。

トラブル>>インストール時に途中で止まってしまう

フルセットDVDからインストール。Storage Deviceの検索をするところで止まってしまう。この問題にネット上でいろいろと議論がされているが、ディスクのパーティションクリア(Hitachi Drive Fitness Testでローレベルフォーマットしたり、GPartedでパーティションテーブルをクリアとか、作成とか)をしたが、効果なし。

1つに、ディスプレイアダプタがGeForce-9800GXなので(CUDAだから当然)それに伴うデバイスドライバの問題があることが判明。

最初に、やり方がわからないので、Ubuntu10.04(今の最新)を試したりもしたが、結局、Fedora 13をテキストモードでインストールしてみた。メモは ノート/fedoraをtext modeでインストール

結論は、いろいろとパッケージを後から追加するなどの面倒があるが、うまくインストールはできる。しかし、CUDAとFedora 13のCの処理系(gcc)との相性の問題があることが判明。 > 次の項目 Fedora 13上でのCuda環境設定? 参照。

Fedora 13上でのCuda環境設定 (2010-8-18)

CUDA Toolkitのインストール

ページCUDA Toolkit 3.1 (June 2010)から、CUDA Toolkit for Fedora 12 (64-bit)を選択して、ダウンロード (64ビット版を選んだ)

適当なディレクトリへ置いて、sh cudatoolkit_3.1_linux_64_fedora12.run 。

インストール中、展開先を/usr/local/cudaと指定。

インストールが終わったところで、最後に現れるコメント

* Please make sure your PATH includes /usr/local/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /usr/local/cuda/lib
*   for 64-bit Linux distributions includes /usr/local/cuda/lib64:/usr/local/cuda/lib
* OR
*   for 32-bit Linux distributions add /usr/local/cuda/lib
*   for 64-bit Linux distributions add /usr/local/cuda/lib64 and /usr/local/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /usr/local/cuda/doc/

* To uninstall CUDA, delete /usr/local/cuda

に従って、

CUDA SDKのインストール

SDKはToolkitとは別に、個人ディレクトリ下にインストールされる。

NVIDIA CUDA C INSTALLATION AND VERIFICATION ON LINUX SYSTEMS の11ページを参考。

上と同じページから、GPU Computing SDK code samples をダウンロードし、 (rootでなくて)自分のユーザID下で、sh gpucomputingsdk_3.1_linux.run として実行する。

途中で Enter install pathと聞かれるがdefaultでいいことにする。また、Enter CUDA install pathと聞かれるが、これもデフォルトの/usr/local/cudaにインストールしたので、デフォルトでいいことにする。

確認のため、同書12ページにある通りに、サンプルのコンパイルをしてみる。

cd ~/NVIDIA_GPU_Computing_SDK/C
make

g++が無い、と言われたので、rootになって

yum install gcc-c++

http://rpm.pbone.netサイトで検索して、Fedora14 (experimental?) から gcc-4.0.5-3.fc14.x86_64.rpm を

wget ftp://mirror.switch.ch/pool/2/mirror/fedora/linux/development/14/x86_64/os/Packages/gcc-4.5.0-3.fc14.x86_64.rpm

でダウンロードしてrpm -Uhvでインストールを試みる。デペンデンシーのエラーが出る。

cpp = 4.5.0-3.fc14 は gcc-4.5.0-3.fc14.x86_64 に必要とされています
libgcc >= 4.5.0-3.fc14 は gcc-4.5.0-3.fc14.x86_64 に必要とされています
libgomp = 4.5.0-3.fc14 は gcc-4.5.0-3.fc14.x86_64 に必要とされています
libmpc.so.2()(64bit) は gcc-4.5.0-3.fc14.x86_64 に必要とされています

更に

wget ftp://mirror.switch.ch/pool/2/mirror/fedora/linux/development/14/x86_64/os/Packages/cpp-4.5.0-3.fc14.x86_64.rpm

などをして、結局 gcc, gcc-c++, libgcc, libgcc++などを入換える羽目になった。一部 重複するものは rpm -e で消去。

しかし、今のところまだlibthreadのエラーは消えない。Fedora 13をあきらめよう。


添付ファイル: filemain_profile_O3.png 315件 [詳細] filemain_profile.png 305件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-09-03 (金) 11:57:09 (2603d)