それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

convert コマンドのOpenMP高負荷らしい問題

ImageMagickopenMP利用に不正確な部分があって、高負荷らしい

参考資料

OMP_NUM_THREADS=1

さっそく ビルド見てみよう

takuya@rena:/usr/local/Cellar/imagemagick/6.8.9-1$ convert --version
Version: ImageMagick 6.8.9-1 Q32 x86_64 2014-08-02 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates: bzlib cairo fftw fontconfig freetype jng jp2 jpeg lcms lqr ltdl lzma openexr png rsvg tiff webp x xml zlib
takuya@rena:/usr/local/Cellar/imagemagick/6.8.9-1$ cat INSTALL_RECEIPT.json | jq .
{
  "used_options": [
    "--with-fontconfig",
    "--with-ghostscript",
    "--with-jp2",
    "--with-liblqr",
    "--with-librsvg",
    "--with-libtiff",
    "--with-libwmf",
    "--with-little-cms",
    "--with-little-cms2",
    "--with-openexr",
    "--with-perl",
    "--with-quantum-depth-16",
    "--with-quantum-depth-32",
    "--with-quantum-depth-8",
    "--with-x11",
    "--with-webp"
  ],
  "unused_options": [
    "--without-magick-plus-plus",
    "--without-jpeg",
    "--without-libpng",
    "--without-freetype"
  ],
  "built_as_bottle": false,
  "poured_from_bottle": false,
  "tapped_from": "Homebrew/homebrew",
  "time": 1406912136,
  "HEAD": "db71783ad26f0277fa1d565bed14302051b5f011",
  "stdlib": "libcxx",
  "compiler": "clang"
}

なんだ、HomeBrew経由のImageMagickopenMP使ってない。そりゃOSXだし当たり前か。

Debianの convert はというと

takuya@atom:~$ convert --version
Version: ImageMagick 6.7.7-10 2013-09-01 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP

DebianのデフォルトパッケージはOpenMPが有効でビルドされてました。

そのままで実行

実験したマシンはこちらも Corei7 (Lynnfield) TOPで見てたらCPUの負荷率は400% くらい

takuya@atom:~$ time for i in {1..10}; do convert image2.jpg -deskew 40% out.jpg  ;done

real    0m25.751s
user    2m0.700s
sys 0m1.204s

TOPで見てたらCPUの負荷率は100% くらい

takuya@atom:~$ export OMP_NUM_THREADS=1
takuya@atom:~$ time for i in {1..10}; do convert image2.jpg -deskew 40% out.jpg  ;done

real    1m16.499s
user    1m15.329s
sys 0m0.928s

目に見えて変わるものでもないので気にしないことにする。

高負荷は、たしかにそうなんだけど、 real の秒数が何度やっても OpenMP使ったほうが圧倒的なんだけどな。。。高負荷はたしかに問題あるとは思うけど。常に処理してるマシンでもない限り気にしなくていいってことだな。