[[ノート>ノート/ノート]]~
訪問者 &counter();  最終更新 &lastmod();~
#contents
**(2010-09-03)追加: google perftoolsのインストール [#of6c1e93]
(CUDAにはプロファイラがCUDA Toolkit内に別にあるのだが)
***Google PerfTools  [#ab903ef1]
出発点は fixstarのこのページ [[Google-perftoolsを使ってCPUプロファイリングをとる:http://cell.fixstars.com/ps3linux/index.php/Google-perftools%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6CPU%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%92%E3%81%A8%E3%82%8B]] 今はどちらかというと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:http://google-perftools.googlecode.com/svn/tags/perftools-1.6/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の詳細は[[このページ:http://www.graphviz.org/]]から。~
     yum install gv~
で、呼び出し相関図と実行時間が得られる。箱の中が1つの関数で、矢印が呼び出し関係を示し、~
箱内の数字はその箱を実行した時間(10mS単位)と全体に対する割合。~
なお、xxx of yyy と書いてある箱は、yyyがその箱とそれが呼び出す先を含めた時間で、そのうちxxxがその箱自体の時間。~
たとえば、initの場合、initが呼び出す箱すべての合計が100%で、その内init自身は0.1%。~
(出力の解釈の説明は、ダウンロードしてきたgoogle-perftoolsのパッケージのdocフォルダ中にあり。仮に[[ここのページ:http://oregano.yy.is.sci.toho-u.ac.jp/google-perftools/cpuprofile.html]]にコピーして、見えるようにしてある。

処理法のコツ?
 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をつけた状態|
|&ref(main_profile.png,,400x500);|&ref(main_profile_O3.png,,400x500);|
|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) [#u3ac3165]
***背景 [#x5d02655]
最初(2010-08-11〜18)、Fedora 13でいろいろ試したが、結論は、CUDAとFedora 13のCの処理系(gcc)との相性の問題があることが判明。> 下の方 [[Fedora 13上でのCuda環境設定>ノート/CUDA/CUDA設定onFedora12#k2c2f0b2]] 参照。

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

***インストール作業 [#fbe84fd8]
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ファイル:http://jp.download.nvidia.com/XFree86/Linux-x86_64/256.44/README/commonproblems.html#nouveau]]に手順が書いてある。
-まず/etc/modprobe.d/disable-nouveau.confを作成し、その中に
 blacklist nouveau
 options nouveau modeset=0
を書き込んでおく。これによってブート時にカーネルがNOUVEAUドライバ(の一部?)を取り込むのを止めさせる設定。
-次にブート時にinitrdがNOUVEAUドライバを取り込むのを止める。ブート時のカーネルの引数に書けばいいが、Grubを使っているので、/boot/grub/grub.confファイル中の
         kernel /vmlinuz-2.6.32.16-150.fc12.x86_64 ro root=/dev/mapper/vg_mint-lv_root
          LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 rhgb quiet
の行の最後に
          rdblacklist=nouveau
を追加する。
-/etc/inittabを、init 3までで止めるようにする
 id:3:initdefault
ここまで設定しておいて、rebootすると、Xが立ち上がらない上、NOUVEAUがカーネルにも取り込まれないので、NVIDIAの純正デバイスドライバに入れ替えることができる。

-NVIDIAのデバイスドライバ(ここでは64ビット版)を[[ダウンロード:http://www.nvidia.co.jp/Download/index.aspx?lang=jp]]しておく。適切なグラフィックアダプタとOSを選ぶ。ここではGeForce 9シリーズ用でLinux 64-bitを選んだ。

-NVIDIAのデバイスドライバのファイルはshell scriptになっているので、
 /bin/sh ダウンロードしてきたファイル 
の形で実行する。

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

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


**Fedora 12上でCuda設定 [#ga2cc342]
基本的に、このページの下の方、[[#k2c2f0b2]]と同じだが、短縮して再録しておく。


***CUDA Toolkitのインストール [#f5cce09e]
ページ[[CUDA Toolkit 3.1 (June 2010):http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux]]から、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
に従って、
-システムワイドに全ユーザにPATHに入れるために、ちょっととんでもない設定。
 /etc/profile.d下にファイル bash.sh を作り、
   PATH=$PATH:/usr/local/cuda/bin
   export PATH
を入れる。
-システムワイドに全ユーザにldのパスを指定するために、
 /etc/ld.so.conf.dの下にファイル cuda.conf を作り
   /usr/local/cuda/lib64
   /usr/local/cuda/lib
 を入れた後、root権限でコマンド
 ldconfig
を実行する。(上に書いてある通り)

***CUDA SDKのインストール [#nea6d328]
SDKはToolkitとは別に、個人ディレクトリ下にインストールする。

[[NVIDIA CUDA C INSTALLATION AND VERIFICATION ON LINUX SYSTEMS:http://developer.download.nvidia.com/compute/cuda/3_1/docs/GettingStartedLinux.pdf]] の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上で自分のプログラムを開発(コンパイル)するには [#a422292d]
>> [[CUDA SDK Release Notes Version 3.1 Release:http://developer.download.nvidia.com/compute/cuda/3_1/sdk/docs/CUDA_SDK_release_notes.txt]] を参照

 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) [#m4dcbc54]
CUDAをLinux上で使うために(今までWindowsで使っていた)、Fedoraの今の最新版Fedora13を導入する。

***トラブル>>インストール時に途中で止まってしまう [#n751e1ba]
フルセットDVDからインストール。Storage Deviceの検索をするところで止まってしまう。この問題にネット上でいろいろと議論がされているが、ディスクのパーティションクリア([[Hitachi Drive Fitness Test:http://www.hitachigst.com/support/downloads/]]でローレベルフォーマットしたり、[[GParted:http://gparted.sourceforge.net/download.php]]でパーティションテーブルをクリアとか、作成とか)をしたが、効果なし。

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

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

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

**Fedora 13上でのCuda環境設定 (2010-8-18) [#k2c2f0b2]
***CUDA Toolkitのインストール [#kb231652]
ページ[[CUDA Toolkit 3.1 (June 2010):http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux]]から、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
に従って、
-システムワイドに全ユーザにPATHに入れるために、ちょっととんでもない設定。
 /etc/profile.d下にファイル bash.sh を作り、
   PATH=$PATH:/usr/local/cuda/bin
   export PATH
を入れる。
-システムワイドに全ユーザにldのパスを指定するために、
 /etc/ld.so.conf.dの下にファイル cuda.conf を作り
   /usr/local/cuda/lib64
   /usr/local/cuda/lib
 を入れた後、root権限でコマンド
 ldconfig
を実行する。(上に書いてある通り)

***CUDA SDKのインストール [#nea6d328]
SDKはToolkitとは別に、個人ディレクトリ下にインストールされる。

[[NVIDIA CUDA C INSTALLATION AND VERIFICATION ON LINUX SYSTEMS:http://developer.download.nvidia.com/compute/cuda/3_1/docs/GettingStartedLinux.pdf]] の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++
-念のため、基本的なopenGL (glut)のプログラム開発環境を試しておく。~
この人の提供したページ [[OpenGL:http://akita-nct.jp/yamamoto/comp/OpenGL/OpenGL.html]] を使わせてもらう。ここにある通りにソースをコピーし、Makefileを書き直し、実行してみる。
-lGLUが見つからないとのエラー。ファイル/usr/lib64/libGLU.so.1は存在するがlibGLU.soが存在しない。シンボリックリンクを貼る。
 ln -s libGLUso.1 libGLU.so
-lXiが見つからないとのエラー。結局/usr/lib64の下にlibXi.so.6は存在するがlibXi.soが存在しない。シンボリックリンクを貼る。
 ln -s libXi.so.6 libXi.so
ここまでで上記のOpenGLのサンプルが動く。
-これで、もう一度CUDAのサンプルのコンパイルを試みる。かなりうまくいくが、
 make[1]: ディレクトリ `/home/yamanouc/NVIDIA_GPU_Computing_SDK/C/src/MonteCarloMultiGPU' に入ります
 /usr/bin/ld: ../../lib/libcutil_x86_64.a(multithreading.cpp.o): undefined reference to symbol 'pthread_cancel@@GLIBC_2.2.5'
 /usr/bin/ld: note: 'pthread_cancel@@GLIBC_2.2.5' is defined in DSO /lib64 /libpthread.so.0
 so try adding it to the linker command line
 /lib64/libpthread.so.0: could not read symbols: Invalid operation
 collect2: ld はステータス 1 で終了しました
この問題は、[[Yet another CUDA 3.1 confusion, Can't compile examples under CUDA 3.1 cannot find -lrendercheckgl:http://forums.nvidia.com/index.php?s=d1086a3082e4e291d825d810a9e9b259&showtopic=172494&pid=1082338&st=0&#entry1082338]]でも取上げられている。~
g++の問題らしい。詳しくは[[Change to DSO-linking semantics of the compiler:http://lists.fedoraproject.org/pipermail/devel/2010-January/129152.html]] や [[Re: Change to DSO-linking semantics of the compiler:http://www.mail-archive.com/devel@lists.fedoraproject.org/msg00134.html]]。~
それで [[Debian Bug report logs - #577961:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=577961]] を見ると gcc-4.5.0ではfixされているらしい。~
そこで、開発元の [[GCC, the GNU Compiler Collection :http://gcc.gnu.org/]] や [[gcc-4.5.0をインストールしてみる:http://blog.soi33.org/?p=248]]
あたりを参照しながら4.5.0なり4.5.1なりをビルドしてみる話らしい。

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をあきらめよう。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS