http://outofsearch.blogspot.jp/2012/10/dmm.html
それでは CentOS 6.4 で IACA が動くまでの手順を書いていきます。
1. Docker で Ubuntu 12.04 環境を用意する
Docker とそれに必要な LXC は yum で簡単にインストールできます。
$ sudo yum -y install docker-io会社などで http proxy を使用している環境では、/etc/sysconfig/docker に proxy 関連の環境変数設定を書いておきます。 /etc/profile.d/proxy.sh 等を置いている人は単にそれを読み込むだけでも良いでしょう。下記のような感じです。
$ cat /etc/sysconfig/docker . /etc/profile.d/proxy.sh other_args=""yum install 直後は docker が動いていないので手動で起動します。
$ sudo service docker start Starting docker: [ OK ]次に Ubuntu 環境を用意します。今回 IACA 実行の為に欲しいのは Ubuntu 12.04 ですので、docker pull ubuntu:12.04 として ubuntu のバージョン 12.04 を指定して pull します。
$ sudo docker pull ubuntu:12.04 Pulling repository ubuntu 8dbd9e392a96: Download completepull が完了したら、試しに bash でも動かしてみましょう。
$ sudo docker run -i -t ubuntu:12.04 /bin/bash root@6c4d0f4c3390:/# uname -a Linux 6c4d0f4c3390 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux root@6c4d0f4c3390:/# cat /etc/issue Ubuntu 12.04 LTS \n \l確かに Ubuntu 12.04 です(^^)
2. IACA アーカイブの展開と配置
インテルの IACA のページから zip をダウンロードして、/opt/intel 以下に展開します。
下記のような感じに展開されます。
$ tree iaca-lin64 ├── bin │ ├── iaca │ └── iaca.sh ├── include │ └── iacaMarks.h └── lib ├── libiacaArchDataHSW.so ├── libiacaArchDataIVB.so ├── libiacaArchDataNHM.so ├── libiacaArchDataSNB.so ├── libiacaArchDataWSM.so ├── libiacaLoader.so ├── libiacaLogicHSW.so ├── libiacaLogicIVB.so ├── libiacaLogicNHM.so ├── libiacaLogicSNB.so ├── libiacaLogicWSM.so ├── libiacaXED2HSW.so ├── libiacaXED2IVB.so ├── libiacaXED2NHM.so ├── libiacaXED2SNB.so └── libiacaXED2WSM.so
3. IACA 実行用シェルスクリプトの作成
最後に IACA を Docker で動かす為のラッパースクリプトを書きます。まずオリジナルの iaca 実行ファイルを iaca-bin という名前にリネームします。
$ sudo mv iaca iaca-bin続いて下記内容のシェルスクリプトを iaca という名前で作成します。
#!/bin/bash IACA_DIR=/opt/intel/iaca-lin64 sudo docker run \ -v /home:/home -v /opt:/opt \ -w $PWD \ -e LD_LIBRARY_PATH="$IACA_DIR/lib" \ ubuntu:12.04 \ $IACA_DIR/bin/iaca-bin $@このスクリプトの要点は、/home と /opt を mount することで Docker 内でも同じ場所で参照できるようにしているところです。
後はこのファイルに実行権限を与えて、使いやすいように /usr/local/bin/iaca にシンボリックリンクを張るなどすれば良いです。 ついでに iacaMarks.h も /usr/local/include/iaca.h にシンボリックリンクを張っておきます。
$ sudo chmod a+x iaca $ cd /usr/local/bin $ sudo ln -s /opt/intel/iaca-lin64/bin/iaca . $ cd /usr/local/include/ $ sudo ln -s /opt/intel/iaca-lin64/include/iacaMarks.h .確認の為に iaca を引数無しで実行してみます。
$ iaca Intel(R) Architecture Code Analyzer Version - 2.1 Usage: iaca [options]できました。-32 32-bit input file (default) -64 64-bit input file -arch Architecture type: NHM, WSM, SNB, IVB, HSW (default) -analysis Analysis type: LATENCY, THROUGHPUT (default) -o Output file (default: stdout) -graph Analysis graph output file for use with graphviz -mark Show code section when there are multiple marked code sections. Use -mark 0 to show all. -max32 Max generated 32-bit obj files -max64 Max generated 64-bit obj files -ignore Ignore added pop ebx / push ebx markers (default: true) -nogather No gather bottleneck analysis -no_interiteration No interiteration bottleneck analysis -reduceout Output is reduced -report Generate error report