2014年2月9日日曜日

IACA 2.1 は、そのままでは CentOS 6.4 で動かない

注) acaptured の検索で飛んできた人はこちらにどうぞ。
http://outofsearch.blogspot.jp/2012/10/dmm.html

IACA(Intel® Architecture Code Analyzer) は Intel の x86 CPUで最適化を行う人達にとっては無くてはならないツールですが、そのままでは CentOS 6.4 環境では動きません。
色々考えた末、Docker を使えば CentOS でも簡単に IACA を使えることがわかりましたので、二回に分けてその方法を書いていきます。

そもそもなぜ IACA が CentOS 6 で動かないのか?

  • IACA はバイナリ配布で実行形式がダイナミックリンクされている。(static リンクでは無い)
  • CentOS 6.4 で動かすとダイナミックリンクしている libstdc++.so のバージョンが古い為、 version `GLIBCXX_3.4.15' not found と言われて実行できない。(IACA-2.1(Haswell 対応版)の場合)
  • libstdc++ は glibc のバージョンにも依存しているので、おいそれと入れ替えるわけにはいかない。

CentOS 6 で IACA を動かす方法いろいろ

  • Fedora 19 以降とか Ubuntu 12.04 以降の環境を別に用意してそちらで動かす(物理でも仮想でもOK)
    • まぁ普通です。メイン環境とアカウント共有してホームディレクトリの共有とかすればそれなりに使いやすくはできますが、いまいちスマートではありません。こんな作業をしていると 「バイナリでしか配布されないソフトウェアだから不自由なんだ。こんな不自由なソフトウエアでなく Copyleft な自由ソフトウェアを使うべきだ。」と違う方向に気持ちが行ってしまいます。
  • Gentoo Prefix で CentOS 上に Gentoo 環境を用意する
    • 漢らしい方法です。ただ IACA コマンド1個を動かしたかったはずなのに気がつけば make.conf を調整しているという泥沼に陥りそうで。。。 Prefix といえど Gentoo 怖いです。
  • chroot で新しい glibc と libstdc++ な Linux ユーザランドを用意する
    • IACAが動かないのはライブラリの問題だけですので chroot 環境で対応可能なはずです。しかし、CentOS で chroot 環境を簡単に構築するツールが無いため、殆ど手作業での構築となります。IACA コマンド一個を動かしたいだけなのに釣り合わない作業量で空しくなります。
  • Docker を使って CentOS 内に Ubuntu 環境を用意する
    • LXC 環境を超簡単に構築する Docker が CentOS で使えるようになりましたので、Docker で ubuntu 環境を導入してそちらで IACA を使えば良いはずです、CentOS 6.3 以降であれば devicemapper でホスト側のファイルシステムを共有できるのでシームレスに IACA を動かすことができそうです。
ぐだぐだ書いてしまいましたが、要は Docker 使えば CentOS 6 でも簡単に IACA 使えるようにできますよ。ということでした。

次回はその設定方法を書いていきます。

※ なぜそんなに CentOS 6 にこだわるかですが、例えば Xeon Phi の MPSS がサポートしているのが RHEL6 か SLES11 だけだったりする等、色々あるのです。