google-perftools と fedora version
現在、Cell(PPE) 用のプロファイラーとしては主に google-perftools を使っ ています。プロファイラーとしては他にも、gprof とか、oprofile とかあるので すが、
- gprof のように関数の出入口でイベントを取るタイプだと、PPE でのソフト の動作が変わる (遅くなる) ため、マルチコアの Cell では、他のプロセッサ (SPE) とのタイミングがずれてしまう。
- oprofile は、kernel 内のイベントも取ってくれるので、kernel 内の動作 が見たいときは便利だが、PS3 用に用意されている kernel では disable になっ ており、callgraph が (v2.6.16) では使用できない、他のソフトのイベントも 一緒に取るので結果が見づらい。
ということで、残った google-perftools を使っています。これも callgraph がおかしかったり、変数が関数として表れたり、怪しいところがあり ますが。
で、この google-perftools、FC5 の時にはよく使っていたのですが、FC6 に した後、しばらく使用しておらず、久々に使うにあたっててこずったため、現象 をまとめておこうと思います。
なお、SDK は 2.1 を使用し、x264 を 32bit でコンパイルしているため、 google-perftools 自体も PS3 上で以下のようにして configure と make をして います。
$ ./configure CC=ppu-gcc CXX=ppu-g++ CFLAGS=-m32 CXXFLAGS=-m32 $ make
google-perftools-0.8 + FC5
google-perftools 自体のコンパイル、x264 とのリンクが出来ていました。
google-perftools-0.8 + FC6
google-perftools 自体のコンパイルは出来るのですが、x264 とリンクしよ うとすると、以下のようなエラーが出ます。
$ ppu-gcc -o x264 x264.o matroska.o muxers.o libx264.a -lm -m32 -lspe2 -lpthread -lprofiler /usr/lib/libstdc++.so.6: undefined reference to `_Unwind_GetIPInfo@GCC_4.2.0' collect2: ld returned 1 exit status $
マズイなあと思ったのですが、ダメ元で toolchain を SDK 2.1 (ppu-gcc) から FC6 (gcc) に代えてコンパイル (リンク) してみると、
$ gcc -o x264 x264.o matroska.o muxers.o libx264.a -lm -m32 -lspe2 -lpthread -lprofiler $
出来ました、、実行させてみましたが、エンコード結果も同じになるので、 正しく動作しているようです。
予想としては、エラーメッセージの GCC_4.2.0 から toolchain のバージョ ンの差によるものかなとは思っていますが、判明していません。ま た、_Unwind_GetIPInfo と出ていまずが、x86 の場合はスタック解析用に libunwind というライブラリの使用を推奨しているようです。
ちなみに FC6 の toolchain のバージョンは gcc-4.1.1-30、 binutils-2.17.50.0.3-6 で FC6 インストール時と同じ、SDK 2.1 のバージョン は ppu-gcc-4.1.1-10、ppu-binutils-2.17.50-8 です。
google-perftools-0.91 + FC6
google-perftools 自体のコンパイルが出来ません。調べてみると google-perftools は x86 上でしか動作しなくなったよう (solaris は不明) で、 Fedora ppc 用 rpm も 0.8 までしかないようです。 ML のログ を見ると、PPC MAC OS X 用の patch が流れていましたが、適用しても PS3 で はコンパイル出来ず、、
ということで、
現在は、x264 と google-perftools-0.8 は SDK 2.1 の toolchain でコンパ イルして、プロファイルしたい時は、FC6 の toolchain でリンクのみしています。
Fedora 7 もリリースされていて、この件が判明するまでは、おりを見てイン ストールしようと思っていましたが、思案中です。調べてみると、Fedora 7 の toolchain のバージョンは、gcc-4.1.2-12、binutils-2.17.50.0.12-4 で、FC6 とは違いますね、、


