ちょっと思うところがあって、GCC と LLVM、 それぞれで作成した実行ファイルの速度差を調べてみた。
テスト環境は iBook。
SRILM ver.1.5.9 のテスト用ソースを使った。
なお、コンパイル・オプションは
-O2 -mtune=G4 -mpowerpc -maltivec -mabi=altivec -pipe
とした。
$ g++-4.2 --version powerpc-apple-darwin9-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5566) [...] $ make SRILM=`pwd` $ ( cd test/ && make SRILM=`pwd`/.. ) [...] 1144.315u 306.865s 27:20.42 88.4% 0+0k 0+750io 162pf+0w
$ /Developer/usr/llvm-gcc-4.2/bin/llvm-g++-4.2 --version powerpc-apple-darwin9-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5555) (LLVM build 2056) [...] $ make SRILM=`pwd` $ ( cd test/ && make SRILM=`pwd`/.. ) [...] 1143.344u 305.368s 27:15.30 88.5% 0+0k 1+753io 266pf+0w
LLVM のバイナリが勝ってるけど、ほとんど差がない。 テスト環境が悪いのか? SRILM を選択したのが悪いのか? もう少し追ってみたい。
CFLAGS
はお好みで。
$ wget -c http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.1.tar.gz $ gzip -cd gc-7.1.tar.gz | tar xvf - $ cd gc-7.1/ $ wget -c http://quruli.ivory.ne.jp/download/gc-7.1.diff.gz $ gzip -cd gc-7.1.diff.gz | patch -p1 $ ./configure --enable-cplusplus $ make && make check $ sudo make install
csh 系の多機能シェル。
Red Hat Enterprise Linux を基礎とした Linux ディストリビューション。
非常に多くのフォーマットに対応したマルチ・プラットホームのメディア・プレーヤ。
初期 BSD ライセンスで使用できる大語彙連続音声認識システム。
Snow Leopard 環境では、マイク入力で portaudio を使うように指定しないと、コンパイルが通らない。
QuickTime 形式のメディア・ファイルを再生するライブラリなどの詰合せ for Windows。
Windows 上で動作する Linux カーネル。
GNU プロジェクトの標準 C ライブラリ。
UNIX 系 OS や Windows 上で動くウィンドウ・アプリケーション統合開発環境。
事前に gettext, iconv, libgpg-error, libgcrypt, libtasn1, LZO, zlib, readline, GAA をインストールしておくと良い。
$ wget -c http://ftp.gnu.org/gnu/gnutls/gnutls-2.8.5.tar.bz2 $ bzip2 -cd gnutls-2.8.5.tar.bz2 | tar xvf - $ cd gnutls-2.8.5/ $ ./configure --with-lzo $ make && make check $ sudo make install
CFLAGS
などはお好みで。
オブジェクト指向言語 Ruby の Java によるインタプリタ実装。
HTTP, HTTPS, FTP などに対応したプロキシ・サーバ。
定番の multi platform な web browser。
多数のプロトコルに対応したファイル転送ツール。
軽快・軽量な SQL データベース・エンジン。
Windows 上で使用できる X Window Server。
小町さんの blog から。 河原研究室 (京都大学) の方が公開しているようだ。 同じ作者によって、他に WFST のビーム・サーチ・デコーダ Kyoto Fst Decoder (Kyfd) なども公開されている。
事前に gettext, iconv, libidn, zlib, libssh2 あたりを入れておくと良い。
$ wget -c http://curl.haxx.se/download/curl-7.19.7.tar.bz2 $ bzip2 -cd curl-7.19.7.tar.bz2 | tar xvf - $ cd curl-7.19.7/ $ ./configure --with-libssh2 --enable-ldaps --with-gssapi $ make && make check $ sudo make install
CFLAGS
などはお好みで。
事前に readline, ncurses をインストールしておくと良い。
$ wget -c http://www.sqlite.org/sqlite-amalgamation-3.6.20.tar.gz $ gzip -cd sqlite-amalgamation-3.6.20.tar.gz | tar xvf - $ cd sqlite-3.6.20/ $ ./configure $ make && make check $ sudo make install
CFLAGS
等はお好みで。
SSL/TLS 環境の定番。
Mac OS X の通常のアプリケーションで Anthy や PRIME を利用できるようにするツール。
日本語形態素解析システム。
CFLAGS
などはお好みで。
$ wget -c http://www.fftw.org/fftw-3.2.2.tar.gz $ gzip -cd fftw-3.2.2.tar.gz | tar xvf - $ cd fftw-3.2.2/ $ ./configure --enable-shared --enable-threads --enable-mpi $ make && make check $ sudo make install
事前に zlib あたりを入れておくと良い。
$ wget -c http://www.libssh2.org/download/libssh2-1.2.1.tar.gz $ gzip -cd libssh2-1.2.1.tar.gz | tar xvf - $ cd libssh2-1.2.1/ $ ./configure $ make && make check $ sudo make install
CFLAGS
などはお好みで。
make check で反応が戻ってこない箇所がある。
makefile のコピー元は環境によって変えること。
$ wget -c http://nchc.dl.sourceforge.net/sourceforge/p7zip/p7zip_9.04_src_all.tar.bz2 $ bzip2 -cd p7zip_9.04_src_all.tar.bz2 | tar xvf - $ cd p7zip_9.04/ $ cp makefile.macosx_64bits makefile.machine $ vim makefile.machine +2
ここで OPTFLAGS
(CFLAGS
と同じものと考えて良い) を編集。
$ make sfx && make 7z && make test_7z $ sudo make install
$ wget -c ftp://sunsite.icm.edu.pl/pub/unix/archiving/info-zip/src/unzip60.tgz $ gzip -cd unzip60.tgz | tar xvf - $ cd unzip60/ $ sed -i 's|{CF_NOOPT}|{CF}|' unix/Makefile $ vim unix/Makefile +50
ここで CFLAGS
の値を変更する。
$ make -f unix/Makefile generic $ sudo make -f unix/Makefile install
相変わらず変な Makefile だ。
事前に FFTW, libsndfile を入れておくと良い。
$ wget -c http://www.mega-nerd.com/SRC/libsamplerate-0.1.6.tar.gz $ gzip -cd libsamplerate-0.1.6.tar.gz | tar xvf - $ cd libsamplerate-0.1.6/ $ ./configure $ make && make check $ sudo make install
CFLAGS
などはお好みで。
事前に iconv をインストールしておくと良い。
$ wget -c http://www.wavpack.com/wavpack-4.60.0.tar.bz2 $ bzip2 -cd wavpack-4.60.0.tar.bz2 | tar xvf - $ cd wavpack-4.60.0/ $ ./configure --with-iconv=/usr/local $ make && make check $ sudo make install
CFLAGS
などはお好みで。
CFLAGS
等はお好みで。
$ wget -c http://www.ijg.org/files/jpegsrc.v7.tar.gz $ zcat jpegsrc.v7.tar.gz | tar xvf - $ cd jpeg-7/ $ ln -s /usr/bin/glibtool libtool $ ./configure --enable-shared $ make $ sudo make install
CFLAGS
などはお好みで。
$ wget -c http://ftp.debian.org/debian/pool/main/libp/libpaper/libpaper_1.1.23+nmu1.tar.gz $ gzip -cd libpaper_1.1.23+nmu1.tar.gz | tar xvf - $ cd libpaper-1.1.23+nmu1/ $ ./configure $ vim lib/paper.c +17
ここで #include <malloc.h>
を削除。
$ make $ sudo make install
Mac OS X 10.6 系のアップデート・プログラム。
Windows では定番の message user agent。
GlyphWiki をベースに改良を加えたフォント。
パスワード生成コマンド。
#いーまくせん
@Friend Chat で
YAA さんに教えてもらった。
Windows 版もあるようだ。
CFLAGS
などはお好みで。
$ wget -c 'http://downloads.sourceforge.net/project/pwgen/pwgen/2.06/pwgen-2.06.tar.gz?use_mirror=jaist' $ gzip -cd pwgen-2.06.tar.gz | tar xvf - $ cd pwgen-2.06/ $ ./configure $ make $ sudo make install
Apple 社が公開している web browser。
Windows 上で動く高機能な DVD 系メディアのリッピング・ツール。
Emacsen にリモート・ファイル編集機能を提供するパッケージ。
デスクトップ環境として使い易い Linux ディストリビューション。
UNIX 系 OS 上で動く Windows API の実装。 開発版。
Mac OS X 上で動く FTP, SFTP, FTP-SSL, WebDAV クライアント。
IPA, Konatu, Ume の各フォントを M+ フォントと合わせたフォント群。
今回は UmePlus のみの更新。
パッチを組み立てるために簡単なパッチを作った (リリースの手順、どうなっているのだろう…)。
$ wget -c http://ftp.gnu.org/gnu/patch/patch-2.6.tar.xz $ xz -cd patch-2.6.tar.xz | tar xvf - $ cd patch-2.6/ $ wget -c http://quruli.ivory.ne.jp/download/patch-2.6.diff.gz $ gzip -cd patch-2.6.diff.gz | patch -p1 $ ./configure $ make && make check $ sudo make install
CFLAGS
などはお好みで。
パッチにミスがあったので、10:10 頃に修正した。
事前に iconv, libsndfile, PortAudio を入れておくと良い。
$ wget -c 'http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fjulius%2F44145%2Fjulius-4.1.3.tar.gz' $ gzip -cd julius-4.1.3.tar.gz | tar xvf - $ cd julius-4.1.3/ $ wget -c http://quruli.ivory.ne.jp/download/julius-4.1.3.diff.gz $ gzip -cd julius-4.1.3.diff.gz | patch -p1 $ ./configure --enable-words-int --with-mictype=portaudio --disable-zlib $ make $ sudo make install
CFLAGS
などはお好みで。
Julius 3.5.3 を Mac OS X 10.6 で動くようにしたい気もする…。 2-pass 目を 4-gram とかに出来ること以外、4.1.3 を使うメリットがないのだよな。 今のところ。
SRILM で作った N-gram をそのまま読み込めるのも一応メリットと言えるのかな。
メモ。 お節介なところもありそうだけど、基本的には便利に見える。
月〜水曜日は相変わらず忙しく、木・金曜日は外部セミナー受講で何も出来ず。
セミナーは基礎知識の習得のつもりで行ったのだけれど、 意外なほどにレベルが高くてついていくのに苦労した。 前職で少し触れたことの理解が深まった感じで良かった。
3 年以上前に N-queen で速度測定をやったのだが、 最近の Mac ではどうなのか見てみたくなって、 先日購入したばかりの MacBook Pro 13" (Mac OS X 10.6.2, Core 2 Duo 2.5GHz, DDR3 SDRAM 1066MHz 4GB) で 適当に試してみた。
$ gcc --version i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) (dot 1) [...]
$ gcc -Wall -arch i386 -m32 -O2 -march=prescott -pipe -fomit-frame-pointer -std=c99 -DNDEBUG *.c -o nqueen $ time ./nqueen 15 解の数 (15 クイーン): 2279184 11.719u 0.004s 0:11.72 99.9% 0+0k 0+0io 0pf+0w
$ gcc -Wall -arch i386 -m32 -Os -march=prescott -pipe -fomit-frame-pointer -std=c99 -DNDEBUG *.c -o nqueen $ time ./nqueen 15 解の数 (15 クイーン): 2279184 11.419u 0.003s 0:11.42 99.9% 0+0k 0+0io 0pf+0w
$ gcc -Wall -arch x86_64 -m64 -O2 -march=core2 -pipe -fomit-frame-pointer -std=c99 -DNDEBUG *.c -o nqueen $ time ./nqueen 15 解の数 (15 クイーン): 2279184 9.768u 0.003s 0:09.77 99.8% 0+0k 0+0io 0pf+0w
$ gcc -Wall -arch x86_64 -m64 -Os -march=core2 -pipe -fomit-frame-pointer -std=c99 -DNDEBUG *.c -o nqueen $ time ./nqueen 15 解の数 (15 クイーン): 2279184 9.685u 0.002s 0:09.70 99.7% 0+0k 0+0io 0pf+0w
メイン・メモリへのアクセス速度の差は確かに大きいわけだけど、それにしてもここまで差が出るとは思っていなかった。
事前に Graphviz と iconv をインストールしておくと良い。
$ wget -c ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.6.1.src.tar.gz $ gzip -cd doxygen-1.6.1.src.tar.gz | tar xvf - $ cd doxygen-1.6.1/ $ wget -c http://quruli.ivory.ne.jp/download/doxygen-1.6.1.diff.gz $ gzip -cd doxygen-1.6.1.diff.gz | patch -p1 $ ./configure --platform macosx-c++ $ vim tmake/lib/macosx-c++/tmake.conf
ここで GCC, G++ のフラグなどを変更する。
$ make $ sudo make install
elisp の citation tool。
確率統計的言語モデリング・ツール・キット。
後で修正内容をチェックするつもりだけど、さすがにあまり期待しない方が良い気がする。
昨日開催されたらしい。 以下、レポートなどの一覧。
修士・博士過程での研究内容をビジネスに直接結びつけて大成功した事例って、日本でも多くあるのかな?
昨日の話の続きというか、 もうちょっと大きな盤で見たいので、昔作った自分のオリジナル版で計測。 まず最初に MacBook Pro 13" (Mac OS X 10.6.2 (64bits kernel), Core 2 Duo 2.5GHz, DDR3 SDRAM 1066MHz 4GB)。 nqueen_32 は i386 バイナリ、nqueen_64 は x86_64 バイナリ。
$ gcc-4.2 --version i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) (dot 1) [...] $ make check time ./nqueen_32 16 解の数 (16 クイーン): 14772512 40.40 real 40.39 user 0.01 sys time ./nqueen_64 16 解の数 (16 クイーン): 14772512 39.62 real 39.60 user 0.01 sys
ちなみに上記は C99 環境なのだけれど、llvm-gcc を使って C89 環境で組み立てるともっと速くなる。 次に iMac 17" (Mac OS X 10.5.8, Core 2 Duo 2.0GHz, DDR2 SDRAM 667MHz 2GB)。
$ gcc-4.2 --version i686-apple-darwin9-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5577) [...] $ make check time ./nqueen_32 16 解の数 (16 クイーン): 14772512 48.56 real 48.38 user 0.09 sys time ./nqueen_64 16 解の数 (16 クイーン): 14772512 50.38 real 50.23 user 0.07 sys
妥当な差といった感じ。
MacBook Pro 13" で 15 クイーンを計測したところ、 i386 バイナリでは 5.82s, x86_64 バイナリでは 5.57s の実時間で処理し終えた。 昨日の計測と比較すれば今回使ったソースの方が速いわけだけど、 それでもビット演算主体で組んだもの、スレッド処理を含めたものには勝てない。
事前に libjpeg, zlib をインストールしておくと良い。
$ wget -c ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.9.2.tar.gz $ gzip -cd tiff-3.9.2.tar.gz | tar xvf - $ cd tiff-3.9.2/ $ ./configure --enable-cxx --with-apple-opengl-framework $ make && make check $ sudo make install
CFLAGS
などはお好みで。
Windows 上で使用できる X Window Server。
CFLAGS
などはお好みで。
$ wget -c http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.gz $ gzip -cd libtool-2.2.6b.tar.gz | tar xvf - $ cd libtool-2.2.6b/ $ ./configure --enable-ltdl-install $ make && make check $ sudo make install
Snow Leopard 環境では問題なく組み立てることが出来たけど、
Leopard 環境では make check でコケた…。
仮想 x86 環境。
network protocol analyzer。 安定版。
事前に iconv, gettext, libidn をインストールしておくと良い。
$ wget -c http://ftp.gnu.org/gnu/gsasl/gsasl-1.4.0.tar.gz $ gzip -cd gsasl-1.4.0.tar.gz | tar xvf - $ cd gsasl-1.4.0/ $ ./configure --disable-nls $ make && make check $ sudo make install
CFLAGS
などはお好みで。
TCP 系プロトコルを暗号化する汎用 SSL ラッパー。
カナル型のインナー・イヤー・ヘッドフォン。 今まで使っていた ATH-CKM50 (白) の汚れが目立ちすぎるようになってきたこともあり、 約 2 倍の価格帯の上位機種 ATH-CKM70 を買った。 エージングしたら変わると思うけど、少なくとも今はまだ高域に違和感がある。 これが落ち着いた頃に感想を書く予定。
非常に有用で高機能な C++ ライブラリ群。
Cocoa な Gecko 系 web browser。
X 環境では定番のドロー・ツール。
M+ FONTS とさざなみフォントをミックスした後、更に改良した和文フォント。
MIT 発の言語モデリング・ツール・キット。 Kneser-Ney スムージングが実装されている。
要 Fortran なので Mac OS X にインストールするのに苦労した。
オレンジニュースより。 ネタとしては面白いけど、こういった比較はあまり意味がないと思う。 ある程度の規模のコーパスを扱わないと…。
Mac OS X 向けの GNU Fortran バイナリなどが公開されている。 これを使うのは、自分で f2c や fort77 を入れるより楽だけど、面白味はない。
事前に gettext, iconv, GMP を入れておくと良い。
$ wget -c http://ftp.gnu.org/gnu/coreutils/coreutils-8.1.tar.gz $ gzip -cd coreutils-8.1.tar.gz | tar xvf - $ cd coreutils-8.1/ $ ./configure --disable-assert $ make && make check $ sudo make install
CFLAGS
などはお好みで。
相変わらず make check でコケる。 …というか、まともにチェックできてない感じ。
動的な web page 作成に向いているスクリプト言語。
emacsen な定番 mail user agent。
QuickTime 形式のメディア・ファイルを再生するライブラリなどの詰合せ for Windows。
Windows では定番の message user agent。
Mac OS X 上で動く N/W プロトコル・アナライザ。
Fortran コンパイラや Boost C++ Libraries が必要という、 組み立てるのがちょっと面倒臭い MITLM の Mach-O/x86_64 バイナリを、 オリジナル・パッケージ (+α) に含める形で公開してみた。 以下、コンパイル環境。
使い方は公式サイトのドキュメントを参照のこと。
事前に新しめの GNU m4 をインストールしておくと良い。
$ wget -c http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.xz $ xz -cd autoconf-2.65.tar.xz | tar xvf - $ cd autoconf-2.65/ $ ./configure $ make && make check $ sudo make install
make check で 1 つコケるな。
自宅の MacBook Pro (Snow Leopard, 64bits kernel) で 茶碗 (ChaWan ver.2.09p5) がうまく動かないように見える。 パッと見では全く問題なく動いているような感じだが、出力が明らかにおかしい。 さてさて、追うべきか、捨てるべきか、ちょっと悩ましいところだが…。
ちなみに会社の Mac Pro (Leopard) では全く問題なく動いている。
上で「捨てるべきか」と書いたのは、 以前、自分で同様なツールを作ることを検討していたからだ。 個人的には Ruby か Scheme (Gauche) で書きたいところだが、 時間がないない言っている状態なので着手はかなり先になりそう。
音声認識技術入門という題で、ある研究会で話します。 音声認識に触れてまだ 5 年程度、応用を除けばまだ 3 年程度なので、 知識の方はまだまだなのですが、 自分がこの分野に入ってから抱いていた不満、 「専門の人が専門の人にしか分からない説明している!」を それなりに解消した講演になるよう資料を作りました。
講演の際にディクテーション型音声認識のデモをするつもりで、 TV の料理番組の発話を認識できるような言語モデルを作っているのだけれど、 久々にやってるせいか、けっこう苦戦している。 MITLM を使っているのだけれど、マニュアル通りに動かなかったりするし、 その問題以前に、事前に入手したコーパスの質が悪くて…。 この連休で作り上げようと考えていたけど、そんなに甘くはない感じ。 頑張らないとまともな精度にならなさそう。
デモで Snow Leopard を使う関係で、 Julius 4.1.3 (で前向き 2-gram+後ろ向き 4-gram の言語モデル) を動かすつもりなのだけれど、 安定していた Julius 3.5.N に比べるとかなり動きが怪しく、 本番に向けてどうしても不安が残る。 時間があれば Julius 3.5.3 を Snow Leopard で動かすよう修正するのだけれど。
多言語対応を意識した軽快な scheme interpreter。
暗号化仮想ドライブ・ユーティリティ。
UNIX 系 OS の有力な選択肢の一つ。
Mac OS X の通常のアプリケーションで Anthy や PRIME を利用できるようにするツール。
複数のプラットフォームに対応している、 DVD-Video などから MPEG-4 系ムービー・ファイルを生成するツール。
CFLAGS
などはお好みで。
$ wget -c http://downloads.xiph.org/releases/ao/libao-0.8.8.tar.gz $ gzip -cd libao-0.8.8.tar.gz | tar xvf - $ cd libao-0.8.8 $ ./configure --enable-static $ make && make check $ sudo make install
事前に libogg を入れておくと良い。
$ wget -c http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz $ gzip -cd speex-1.2rc1.tar.gz | tar xvf - $ cd speex-1.2rc1 $ ./configure $ make && make check $ sudo make install
CFLAGS
などはお好みで。
事前に libvorbis, libogg, libao, ilbcurl, zlib, gettext, iconv, Speex などを入れておくと良い。
$ wget -c http://downloads.xiph.org/releases/vorbis/vorbis-tools-1.2.0.tar.gz $ gzip -cd vorbis-tools-1.2.0.tar.gz | tar xvf - $ cd vorbis-tools-1.2.0/ $ ./configure $ make && make check $ sudo make install
CFLAGS
などはお好みで。
講演が終わった。疲れた。 聴講して下さった方のモチベーションが高かったおかげで、 僕のつまらない話もそれなりのものになった感じ。 とても助かった。
運悪く会場が騒がしくなったため、 デモンストレーション時、 ヘッドセット・マイクを使うことになったのは、非常に残念だった。 MacBook Pro のマイクでもそれなりの精度が出るよう、 調整をかなり頑張ったのに…。 まあ、ヘッドセット・マイクのおかげか、 デモンストレーションでかなり高い精度が出たのだから、 それはそれで良かったのかもしれないけど。
ちなみに言語モデルは、 料理レシピの紹介番組 (例: キューピー3分クッキング) を ターゲットにしたもので、 最終的に Julius 用に前向き 2-gram、後ろ向き 4-gram で学習した。 学習に使ったコーパスの質が悪かったこともあり、 まだ精度向上の余地が残っているけど、 それでも十分に高いレベルになったと自負している。 某所で公開できるよう、現在、調整中だけど、どうなることやら…。
昨日の講演のデモンストレーションのため、 SRILM で 4-gram, 語彙数 32k の言語モデルを作ったのだが、 とにかく作るのに非常に時間がかかった。 Core 2 Duo 2.5GHz, DDR3 SDRAM 4GB の MacBook Pro を使っていたのだが、 メモリを異常なほど大量に占有し、結果、ハード・ディスクに書き込む回数がとても多くなった。
やっぱり次に買うデスクトップ機はそれなりに贅沢な構成にしよう。 最初から贅沢にする必要はないだろうけど、拡張性のある機種を選ぶのは外せないな。
M+ FONTS とさざなみフォントをミックスした後、更に改良した和文フォント。
LDAP 処理系の定番実装。
事前に iconv, gettext, ncurses を入れておくと良い。
$ wget -c http://ftp.gnu.org/gnu/nano/nano-2.2.0.tar.gz $ gzip -cd nano-2.2.0.tar.gz | tar xvf - $ cd nano-2.2.0/ $ ./configure --enable-extra --enable-color --enable-multibuffer --enable-nanorc --enable-utf8 $ make $ sudo make install
CFLAGS
などはお好みで。
Emacsen の補完機能を強化するツール。