Color Modes

使用 OpenCL 进行并行执行

ImageMagick 内置支持一些 OpenCL 加速操作。但是,其操作有一些条件。这些要求列在下面。

  1. GPU 平台:支持 AMD 或 Intel GPU。目前不支持 NVIDIA。
  2. 操作系统和驱动程序
    • Mac OS X:内置支持 OpenCL。无需其他操作。
    • Linux/Windows:在支持的平台上,安装所需的驱动程序以启用 OpenCL。
    • 移动设备:ImageMagick 的 OpenCL 支持在移动操作系统(IOS/Android)上不可用。
  3. 编译时标志:编译时必须显式启用 ImageMagick 的 OpenCL。这可以通过运行 configure 并设置 --enable-opencl 标志来完成。
  4. 检查运行时支持:要验证是否启用了 OpenCL 支持,请运行 magick --version。命令输出应显示 Features: ... OpenCL ...
  5. 运行时标志:默认情况下,运行时禁用 OpenCL。要启用它,请使用环境变量 MAGICK_OCL_DEVICE=true,例如 MAGICK_OCL_DEVICE=true magick <options>
  6. 命令行实用程序:为了获得正确的 OpenCL 支持,建议使用 magick 实用程序而不是 convertmogrify 等。
  7. 图像类型:OpenCL 加速仅适用于没有颜色映射的图像。请改用真彩色图像。
  8. 操作符:以下是已进行 OpenCL 加速的图像操作符列表。
      blur
      contrast
      charcoal
      function
      grayscale
      motion-blur
      resize
    以下操作符也已进行 OpenCL 加速,但它们需要启用 alpha 通道,例如 magick sample.jpg -alpha on -despeckle null:
      despeckle
      equalize
      modulate

OpenCL 操作说明

当某些 OpenCL 加速操作符首次被调用并且满足上述所有条件时,ImageMagick 会进行一系列测试以根据系统硬件配置 OpenCL 环境;因此,第一次使用加速选项时遇到较高的延迟是正常的。OpenCL 内核以源代码格式嵌入到 ImageMagick 中。在初始设置期间,ImageMagick 会发现所有可用的 OpenCL 设备并为每个目标编译内核。ImageMagick 还会在内部运行一些性能测试以确定首选的设备。已编译的内核代码和性能测试结果将存储到缓存目录中,以便后续调用 OpenCL 路径时可以重用这些数据。默认情况下,OpenCL 缓存数据存储在 Linux 和 MacOSX 上的 $HOME/.cache/ImageMagick 或 Windows 上的 %LOCALAPPDATA%\ImageMagick 中。要首次运行这些测试,请使用以下命令

MAGICK_OCL_DEVICE=true magick sample.jpg -blur 0x5 null:

在 Windows 上,应删除 MAGICK_OCL_DEVICE=true 部分,并在执行上述命令之前执行命令 set MAGICK_OCL_DEVICE=true 以启用 OpenCL 操作。

要更改缓存目录,请设置 MAGICK_OPENCL_CACHE_DIR 环境变量。ImageMagick 能够检测硬件更改、驱动程序更新和新的内核源代码,并重新运行设置和校准测试。您还可以通过删除缓存目录中的内容来强制 ImageMagick 重新运行此过程。

除了上面提到的环境变量之外,ImageMagick 还提供了一组 API,允许开发人员更精细地控制 OpenCL 加速。例如,使用 InitializeOpenCL() 函数初始化 OpenCL 环境

clEnv=GetCurrentOpenCLEnv();
if (InitializeOpenCL(clEnv,exception) == MagickFalse)
  {
    /* looks like OpenCL is not supported  */
  }