OpenCL 崩溃(SEGFAULT)

问题

在存在多个 OpenCL 平台的环境中,Zivid SDK 会崩溃或表现不稳定。一种常见情况是无意中选择了 CPU OpenCL 平台,而不是受支持的 GPU 平台。

备注

在 Zivid 中,CPU 是不受支持的计算设备模式。

可能原因

混合平台配置中同时包含 GPU 和 CPU OpenCL 平台,例如:

  • Intel GPU OpenCL 平台

  • 来自其他可安装客户端驱动程序(ICD)提供商的 CPU OpenCL 平台

当 ComputeDevice 被明确固定为 CPU 时,可能导致不稳定行为,包括崩溃。

解决方案

无意使用 CPU

当并非有意使用 CPU 时的首选解决方法。

  1. 列出 OpenCL 平台和设备:

    Windows
    1. 下载 clinfo 的 Windows 二进制文件。

    2. 在键盘上按 Win + R 键启动命令提示符,然后输入 cmd 并按 Enter 键。

    3. 导航到包含下载文件(clinfo.exe)的目录,并执行以下命令:

      clinfo.exe -l
      
    Ubuntu
    1. 在键盘上按 Ctrl + Alt + T 键打开终端窗口,然后安装 clinfo。

      sudo apt install -y clinfo
      
    2. 运行 clinfo -l 以列出所有 OpenCL 平台。

      clinfo -l
      
  2. 检查是否存在 CPU 平台,以及它们是否可能在您的配置中被优先选用。

  3. 检查您的 配置文件 并检查 ComputeDevice 的值。

  4. 如果使用 CPU 并非有意为之,请在 配置文件 中将 Zivid 固定到受支持的 GPU:

    __version__:
        serializer: 1
        data: 19
    Configuration:
        ComputeDevice:
            Type: GPU
            Vendor: Intel
    

    如果这是您预期使用的 GPU,请使用 Vendor: Nvidia。

  5. 在适合您环境的情况下,移除或禁用冲突的 CPU ICD。

  6. 重新运行 clinfo -l,并验证生成的平台/设备配置是否符合您预期的配置。

有意使用 CPU

如果有意使用 CPU(不受支持的模式),请通过设置计算设备的 Type、Vendor 和 AllowUnsupported 来明确指定这一点。

__version__:
    serializer: 1
    data: 19
Configuration:
    ComputeDevice:
        Type: CPU
        Vendor: Intel
        AllowUnsupported: yes

警告

CPU 是不受支持的计算设备模式。使用 CPU 会大幅增加捕获时间,因此不建议在大多数应用中采用此配置。在混合 OpenCL 平台配置中,选择 CPU 还可能导致不稳定行为,包括崩溃。