相机连接时间较长

问题

相机第一次连接到 PC 时需要很长时间才能建立连接。

原因

OpenCL 内核是为相机所连接的特定硬件构建的,在相机与 PC 建立连接之前,硬件是未知的。构建这些内核会占用大量总连接时间,并且会在进程中第一次连接相机时发生。

如果进程保持活动状态(更具体地说是 Zivid 应用程序),则内核不需要重建。

解决方案

可以缓存内核以避免每次连接到相机时都必须重建它们。请注意,第一次连接时速度仍然会很慢,但之后每次连接都会很快。请按照特定硬件的说明进行操作。

将您的英特尔驱动程序升级到最新版本,以便使用 Intel Driver & Support assistant 缓存 OpenCL 内核。要验证缓存是否正确,请检查文件夹 %LocalAppData%/NEO/neo_compiler_cache 是否存在且不为空。

如果升级英特尔驱动程序无法解决问题,您可以手动允许缓存(实验性)。请按照下面的下拉菜单获取进一步的说明。

手动启用缓存(实验性功能)

此方法被 Intel Graphics Compute Runtime 认为是过时且实验性的,但可作为一个临时解决方案,直到您的驱动程序得到更新。请注意上述链接中提到的关于 Windows 系统下 cl_cache 的局限性,并仅考虑在非生产环境中使用此方法。

  1. 创建一个文件夹来存储缓存的内核,例如 %LocalAppData%/NEO/neo_compiler_cache

  2. 添加新的环境变量 cl_cache_dir ,并将其值设置为缓存文件夹的路径,例如 %LocalAppData%/NEO/neo_compiler_cache

您可能需要重新启动计算机才能使更改生效。

大多数 NVIDIA GPU 和驱动程序默认都启用了缓存。如果您仍然遇到连接速度缓慢的问题,请尝试更新您的 NVIDIA GPU 至最新的驱动程序。

要验证缓存是否正确,请检查文件夹 %AppData%/NVIDIA/ComputeCache 是否存在且不为空。

将您的 OpenCL 驱动程序升级到最新可用版本,以允许缓存 OpenCL 内核。

sudo apt update && sudo apt upgrade intel-opencl-icd

如果仓库中的最新版本不够用,您可以使用 Intel 最新发布的软件包。要验证缓存是否正确,请检查文件夹 $HOME/.cache/neo_compiler_cache 是否存在且不为空。

如果升级英特尔驱动程序无法解决问题,您可以手动允许缓存。请按照下面的下拉菜单获取进一步的说明。

手动启用缓存
  1. 创建一个文件夹来存储缓存的内核,例如 $HOME/.cache/neo_compiler_cache

  2. 添加新的环境变量 cl_cache_dir ,并将其值设置为缓存文件夹的路径,例如 $HOME/.cache/neo_compiler_cache

mkdir $HOME/.cache/neo_compiler_cache
export cl_cache_dir=$HOME/.cache/neo_compiler_cache

缓存现在应在当前会话中保持持久化。

大多数 NVIDIA GPU 和驱动程序默认都启用了缓存。如果您仍然遇到连接速度缓慢的问题,请尝试更新您的 NVIDIA GPU 至最新的驱动程序。

要验证缓存是否正确,请检查文件夹 $HOME/.nv/ComputeCache 是否存在且不为空。

Docker

如果您从 Docker 容器连接到相机,则必须将主机上的缓存目录挂载到容器的根目录,以改善首次连接。这是因为每个 Docker 容器都有自己的文件系统,并且每次启动容器时,缓存目录都会为空。

以下说明仅用于改进首次连接到相机的操作,因此仅适用于初次运行容器的情况。请注意,主机上必须已缓存内核。

Windows 目前不支持 Docker,因为 Windows 中的 Docker 容器不完全支持 OpenCL。

内核缓存的位置取决于 NEO_CACHE_DIR 环境变量,默认路径为 $HOME/.cache/neo_compiler_cache 。运行时,请将此目录挂载到容器的根目录,以共享缓存。

为了避免在主目录中创建 root 拥有的文件,可以先将缓存复制到根目录。

sudo rsync -r --mkpath "$HOME"/.cache/neo_compiler_cache/ /root/.cache/neo_compiler_cache/
sudo docker run --interactive --tty --device=/dev/dri --volume /root/.cache/neo_compiler_cache:/root/.cache/neo_compiler_cache <image>

其中 <image> 是您要运行的图像的名称。

内核缓存存储在宿主机的 $HOME/.nv/ComputeCache 中。运行时将此目录挂载到容器的根目录,即可共享缓存。

为了避免在主目录中创建 root 拥有的文件,可以先将缓存复制到根目录。

sudo rsync -r --mkpath "$HOME"/.nv/ComputeCache /root/.nv/ComputeCache
sudo docker run --interactive --tty --device=/dev/dri --gpus=all --volume /root/.nv/ComputeCache:/root/.nv/ComputeCache <image>

其中 <image> 是您要运行的图像的名称。