Ubuntu の ImageMagick を OpenMP 無効でリコンパイルする

今日は、画像処理に PythonMagick を使っている箇所で以下のようなエラーが出て困っていました。つい先日まで全く同じコードで動いていたのでおかしいなと思ったのですが、調べてみるとどうやら OpenMP のマルチスレッドがらみのエラーのようです。そういえば、この Ubuntu の VM の割り当て CPU 数を最近増やしたのでした。

python: magick/cache-view.c:729: GetCacheViewVirtualPixels: Assertion
 `id < (int) cache_view->number_threads' failed.

というわけで、OpenMP を無効にしてパッケージをコンパイルし直すことにしました。

% sudo apt-get buil-dep imagemagick
% apt-get source imagemagick
% cd imagemagick-6.7.7.10

rules ファイルを編集して --disable-opnemp のコンパイルオプションを追加します(58行目くらい)。ついでにRGBを内部で8bitで扱うようなオプションも設定します。これによりCPU/メモリ使用量が削減できます。

% vi debian/rules

    --x-includes=/usr/include/X11 \
    --x-libraries=/usr/lib/X11 \
    --disable-openmp \
    --with-quantum-depth=8

    # Patch the generated libtool to avoid passing -rpath when linking,

ビルドしてパッケージを入れ替えます。

% dpkg-buildpackage -b
% sudo apt-get remove --purge libmagick++5
% cd ..
% sudo dpkg -i libmagickcore5* libmagick++5*
% sudo apt-get install python-pythonmagick

サーバの CentOS では発生していないので、きっとUbuntu 12.04だけの問題なんでしょうね。最後に簡単なテストプログラムで動作確認をして完了です。

import PythonMagick

img = PythonMagick.Image("himekyun.jpg")
img.sample(PythonMagick._PythonMagick.Geometry(100,100))
img.write("himekyun_small.jpg")

関連リンク:
PerlMagick が OpenMP 有効だと高負荷になる件 :: drk7jp
ImageMagickとOpenMPの件 - blog.nomadscafe.jp



このエントリーのはてなブックマーク (-)