Imagemagick只使用一个核心

时间:2013-07-15 17:13:25

标签: imagemagick openmp

我正在运行一个8核的Ubuntu服务器。但是imagemagick总是只使用1个单核 运行identify -version会返回:

Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

因此,显示了多线程显然需要的OpenMP

按照here所述,使用-bench选项(例如convert logo: -resize 500% -bench 10 logo.png)运行基准

Performance: 10i 1.17647ips 14.390u 0.14166666666833332977:08.500

它不会像in the manual那样通过Performance[1]返回http://pastebin.com/Q0gC3k09,这让我感到惊讶。

我有什么想法可以让imagemagick使用所有8个核心?

更新:以下是imagemagick调用的strace输出:{{3}}

2 个答案:

答案 0 :(得分:11)

我能够在Ubuntu 10.04上重现这种行为。来自apt-get的ImageMagick似乎拥有 OpenMP功能,并配置了-fopenmp标志,但似乎没有启用该功能。这可以通过运行以下行并将“ FEATURES ”列表(如果存在)与各种配置标志进行比较来验证。

identify -list Configure | less

我可以通过详细说明以下过程的文章“Installing ImageMagick from Source on Ubuntu 8.04”解决此问题。

  • 删除ImageMagick
  • 通过apt-get
  • 安装所有需要的图像/图形依赖库
  • 下载
    • wget http://www.imagemagick.org/download/ImageMagick-6.8.6-6.tar.gz
  • 关注基本./configuremake和& sudo make install步骤
  • 将库路径导出到/usr/local/lib

这似乎有效,因为OpenMP现在位于“功能”列表下,并且当我执行convert logo: -resize 500% -bench 10 logo.png时。我看到以下

Performance[1]: 10i 0.750ips 1.000e 18.750u 0:13.330
Performance[2]: 10i 0.751ips 0.500e 18.660u 0:13.320
Performance[3]: 10i 0.738ips 0.496e 18.840u 0:13.550
Performance[4]: 10i 0.469ips 0.385e 19.560u 0:21.320

这些结果符合我的预期。

答案 1 :(得分:1)

我做了一些测试,但我无法设置真实或虚拟化的多核机器来重现。所以我没有真正的解决方案,但更多的是采用策略进行调查,因为它似乎确实与系统有关。

但至少我可以这么说:

  1. 如果您从http://www.imagemagick.org/script/install-source.php#unix获得最后一个ImageMagick来源,您应该可以为您的系统重建IM。

  2. 如果你想确保你的编译器按预期处理代码,你可以在调用“make”之前执行以下操作,编辑magick / studio.h文件,找到第143行,你应该看到以下

    #if defined(_OPENMP) && ((_OPENMP >= 200203) || defined(__OPENCC__))
    #  include <omp.h>
    #  define MAGICKCORE_OPENMP_SUPPORT  1
    #endif
    

    修改这些行以添加编译器诊断消息:

    #if defined(_OPENMP) && ((_OPENMP >= 200203) || defined(__OPENCC__))
    #  include <omp.h>
    #  define MAGICKCORE_OPENMP_SUPPORT  1
    #  pragma message "MAGICKCORE_OPENMP_SUPPORT 1"
    #endif
    

    现在运行'./configure'并在'make'命令之后,您应该看到每次使用studio.h时添加的消息,并且BTW MAGICKCORE_OPEN_SUPPORT宏设置为1.

  3. MAGICKCORE_OPENMP_SUPPORT是IM在内部用于启用/禁用OpenMp指令预处理的宏,因此,如果您看到该消息,则所有代码的#pragma omp都将处理为真实。

    < / LI>
  4. 如果一切顺利,直到现在尝试执行'make install'命令并检查你的'bench'命令是否更好(多核)与你自己的转换版本(/ usr / local / bin / convert)

  5. 如果它仍然无效,则表示它与IM无关,但基于openMP的程序无法在您的系统上正常运行。在这种情况下,您应该考虑以下问题Why OpenMP program runs only in one thread,并使用比IM更短的程序检查openMP支持以构建和运行!