ImageMagick 內建支援部分 OpenCL 加速運算。然而,其運作需要滿足一些條件。這些需求列在下方。
- GPU 平台:支援 AMD 或 Intel GPU。目前不支援 NVIDIA。
- 作業系統和驅動程式
- Mac OS X:內建支援 OpenCL。無需其他操作。
- Linux/Windows:在支援的平台上,安裝必要的驅動程式以啟用 OpenCL。
- 行動裝置:ImageMagick 的 OpenCL 支援在行動作業系統 (IOS/Android) 上不可用。
- 編譯時標記:編譯時必須明確啟用 ImageMagick 的 OpenCL。這可以透過在執行 configure 時設定 --enable-opencl 標記來完成。
- 檢查執行時支援:要驗證是否啟用了 OpenCL 支援,請執行 magick --version。命令輸出應該顯示 Features: ... OpenCL ...
- 執行時標記:OpenCL 在執行時預設為停用。要啟用它,請使用環境變數 MAGICK_OCL_DEVICE=true,例如 MAGICK_OCL_DEVICE=true magick <選項>。
- 命令列工具:為了獲得適當的 OpenCL 支援,建議使用 magick 工具,而不是 convert、mogrify 等。
- 影像類型:OpenCL 加速僅適用於沒有顏色表的影像。請改用真彩色影像。
- 運算子:以下是已進行 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 部分,並在執行上述命令以啟用 OpenCL 操作之前執行命令 set MAGICK_OCL_DEVICE=true。
要變更快取目錄,請設定 MAGICK_OPENCL_CACHE_DIR 環境變數。ImageMagick 能夠偵測硬體變更、驅動程式更新和新的核心原始碼,並重新執行設定和校準測試。您也可以透過移除快取目錄中的內容來強制 ImageMagick 重新執行此程序。
除了上述環境變數外,ImageMagick 還提供了一組 API,允許開發人員對 OpenCL 加速進行更精細的控制。例如,使用 InitializeOpenCL() 函式初始化 OpenCL 環境
clEnv=GetCurrentOpenCLEnv(); if (InitializeOpenCL(clEnv,exception) == MagickFalse) { /* looks like OpenCL is not supported */ }