JPEG画像を処理するlibjpegを改造した
libjpeg-turboというライブラリがあります。宮坂賢さん制作の
libjpeg with SIMD拡張が派生したもので、とっても高速に動作するそうです。Fedoraは既にlibjpeg-turboを採用。いずれはUbuntuもlibjpeg-turboに置き換わると思います。でも、待ってられないので自分でインストールしてみよう、というのが今回のネタです。
公式サイトにdebがありますが、自分でパッケージを作ってみました。libjpeg-turbo を優先する設定を自動で行うようにしています。それと、ヘッダファイルやjpegtran等のプログラムを収録していません。
→
パッケージリポジトリインストール後、下のコマンドでlibjpeg-turboが使われているかどうか確認。
$ ldd /usr/lib/libcupsimage.so.* | grep jpeg
libjpeg.so.62 => /opt/libjpeg-turbo/lib/libjpeg.so.62
私のパッケージをインストールするとシステム全体でlibjpeg-turboが使われます。Fedoraで安全性は折り紙付き(?)だし大丈夫と思いますが、色々なソフトが動かなくなる可能性があるので注意! 何かあったらアンインストールしてくださいませ。もしくは、特定のプログラムだけ有効化するのもいいですね。やり方は「LD_LIBRARY_PATH」で適当に検索してください。
沢山のJPEGをImageMagickで拡大するのに掛かる時間を比較してみます。
libjpeg:
$ export LD_LIBRARY_PATH=/usr/lib:/usr/lib/i386-linux-gnu:/usr/lib/x86_64-linux-gnu
$ time (for f in *.jpg; do convert -geometry 200% "$f" /dev/shm/$$; done)
→ real 0m45.792s
libjpeg-turbo:
$ unset LD_LIBRARY_PATH
$ time (for f in *.jpg; do convert -geometry 200% "$f" /dev/shm/$$; done)
→ real 0m34.791s
かなり違いますね。気に入った。とはいえ、Webブラウザや画像表示ソフトの読み込みは、イマイチ体感的な違いが感じられなかったりして。たぶん速くなっているのだろう。そうに違いない(-_-;)
ああ、でも、GIMPで10MBのJPEGファイルを読み込む時間を計ってみたら
libjpeg: 10秒ぐらい
libjpeg-turbo: 7秒ぐらい
ってな感じの差が出ました。パソコンのCPUはAthlon64X2 3800+です。
≪追記≫UbuntuのFirefoxは、libjpegを静的リンクしている(中に組み込んでいる)っぽい。再ビルドしないとlibjpeg-turboの恩恵を受けられないと思う。よく分からんけど。
≪追記≫Ubuntu 11.10から公式リポジトリにパッケージがあります。
≪追記≫Ubuntu 12.04からlibjpeg-turboが標準装備されるようになりました。
≪参考サイト≫・
Debian - libjpeg-turbo - PIB・
libjpeg-turboでjpegの変換が速くなる - かみぽのメモ・
jpegファイルの読み込みを2倍に高速化させる-ネタノメモ
上の記事に対するコメントです
1. test 2012/01/23 05:52
rm -fr xxx はlib自体も事故にあって参照出来ないことがあるから
2.
Sawa 2012/01/24 22:30
…が、面倒なのでパッケージはこのままです(^^;
3. ありがとう (Website) 2015/03/10 16:31