⚠️ 这是一个非官方翻译网站,与 ImageMagick Studio LLC 无关。准确信息请参阅原文(https://imagemagick.org/opencl/)

OpenCL

ImageMagick 内置了对部分 OpenCL 加速操作的支持。不过,其运行存在一些条件。要求如下。

  1. 操作系统与驱动:
    • macOS: 内置 OpenCL 支持。无需其他操作。
    • Linux/Windows: 在受支持的平台上,安装所需驱动以启用 OpenCL。
    • 移动端: ImageMagick 的 OpenCL 支持在移动操作系统(iOS/Android)上不可用。
  2. 编译时标志: ImageMagick 的 OpenCL 必须在编译时显式启用。通过以设置了 --enable-opencl 标志的方式运行 configure 来完成。
  3. 检查运行时支持: 要验证是否已启用 OpenCL 支持,请运行 magick --version。命令输出应显示 Features: ... OpenCL ...。
  4. 运行时标志: OpenCL 在运行时默认禁用。要启用它,请使用环境变量 MAGICK_OCL_DEVICE=true(例如 MAGICK_OCL_DEVICE=true magick )。仅启用特定设备时,请使用 MAGICK_OCL_DEVICE=GPU 或 MAGICK_OCL_DEVICE=CPU。
  5. 命令行工具: 为获得恰当的 OpenCL 支持,建议使用 magick 工具,而非 convert、mogrify 等。
  6. 图像类型: OpenCL 加速仅对没有颜色映射表的图像有效。请改用真彩色图像。
  7. 运算符: 以下是已实现 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 和 macOS 上存放于 $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  */
  }