2010/02/28

ROOTでFFTWを使う

導入したScientific Linuxには、デフォルトだとgccもEmacsも入っていない。
まずはこれらを入れる。
それ以外にもROOTのインストールには、libXft、libXpm、libXextが必要。

$ su
# yum install gcc*
# yum install emacs*
# yum install libXft*
# yum install libXpm*
# yum install libXext*

これでROOTに必要なコンパイラとライブラリが揃う。
次にFFTWをここから、ROOTをここからダウンロードする。
これらは適当に解凍しておく。
以下のようにしてFFTWをROOTより先にインストールする。

$ cd fftw-3.2.2
$ ./configure
$ su
# make
# make install

これでFFTWがインストールされる。
デフォルトの設定で、/usr/local/lib以下にlibfftw3.aとlibfftw3.laが入る。
.bashrcには以下の1行を追加する。

export FFTW3=/home/chonan/fftw-3.2.2

指定している場所は実際には環境によって異なる。
次にROOTのほうのコンパイルを行う。

$ cd root
$ ./configure --enable-fftw3 --with-fftw3-incdir=/usr/local/include --with-fftw3-libdir=/usr/local/lib
$ su
# make
# make -j 2

最後はCPUのCore数を指定している。
.bashrcに追加するのは、以下の3行。

export ROOTSYS=/home/chonan/root
export PATH=$PATH:$ROOTSYS/bin
export LD_LIBRARY_PATH=/home/chonan/root/lib:$LD_LIBRARY_PATH

最後に.bashrcを読み込む。
これでOKのはずだと思っていたら、以下のようなエラーが出て、FFT.Cがうまく動いてくれない。

dlopen error: /home/chonan/root/lib/libFFTW.so: cannot restore segment prot after reloc: Permission denied
Load Error: Failed to load Dynamic link library /home/chonan/root/lib/libFFTW.so
Error in <TVirtualFFT::FFT>: handler not found
(class TH1*)0x0
*** Interpreter error recovered ***

ここを参考に、以下のように打つ。

$ su
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /home/chonan/root/lib/libFFTW.so

これでcontextが変更できる。
contextについてはこちら

context of /home/chonan/root/lib/libFFTW.so changed to system_u:object_r:textrel_shlib_t

これでFFT.Cが走るようになる。

VMware ServerとVMware Player

Windows 7上のROOT(5.26.00)でFFTを使おうとしたところ、これが上手く動かない。
Tutorialディレクトリ以下の\fftにFFT.Cというのがあるが、実行するとlibFFTW.dllの読み込みに失敗する。
PATHを設定してもうまくいかないので、Linux環境を用意することを決断した。
Linux用に出来るマシンは無いので、LinuxはVMwareでWindows上で動かすこととした。

まずVMware Serverを落としてみた。
ダウンロードにはアカウントを作る必要がある。
インストールはブラウザ経由で行い、ついでゲストOSの設定を行う。
ここまでは上手く行くのだが、64bitのWindows 7だからかConsoleが出せず、ゲストOSのインストールが上手くいかない。

仕方がないので、VMware Playerにターゲットを変更した。
アカウントはVMware Serverのときに作ったのが使える。
VMware Player 3.0は64bitのOSにも対応している。
VMware Serverと同様の設定だが、こちらはブラウザを起動する必要もなく、日本語なので簡単だ。
昔はVMware Playerには入っていなかった、VMware Toolsも自動的にDLしてくれる。

ゲストOSにはScientific Linux(32bit)を選択した。
Red Hat Enterprise Linuxのクローンだということと、Fermi Labが管理していて信頼性が高いことが理由。
全てデフォルトでインストールしたが、デフォルトだとgccやEmacsが入らなくて驚いた。
Scientificな用途にそれでいいのか疑問だ。
ゲストOSの設定も基本的にはデフォルトだが、ネットワークはNAT接続とした。
VMware ToolsはVM(V)->VMware Toolsをインストールするを選ぶと、ゲストOSの/media以下にLinux版がダウンロードされていた。
これを解凍し、インストールすればいい。

2010/02/12

64bit OSあれこれ

T400sのWindows 7 64bit版を使ってみて、いくつか発見があった。
まず1番驚いたのが、AdobeのFlashが64bitのブラウザに対応していない(2010/02/12 00:00時点)ということ。
従ってIEではYouTube他の動画サイトで動画を見ることが出来ない。

次の驚きは、32bitのアプリでも64bit上で動作するものがあるということ。
アプリによっては、バイナリが64bitと32bit用で分けて用意されていることがあり、32bit版は64bitのOS上では動かないかと思いきや、そんなことはない。
従ってYouTubeを利用するには、32bitのブラウザをインストールし、そこにFlashのプラグインを入れればいい。

このようにアプリが32bitなのか、64bitなのかを常に意識しておく必要がある。
たとえばffdshowを利用する場合、64bitアプリ用と32bitアプリ用のどちらか、あるいは両方をインストールしておく必要がある。
上記のFlashにしても、今後64bit版が出たとして、IEで使う場合は64bit版を、他のブラウザ用に32bit版をそれぞれ用意しておく、ということになる。
ちなみにCygwin(1.7.1)とRoot(5.26)は64bit版OSにインストール可能で問題なく動作した。