对您的系统进行基准测试

简介

捕获速度不仅取决于相机。GPU、CPU、PCIe 和网络拓扑、操作系统以及 SDK 版本都会影响*您的*系统上一次捕获所需的时间。捕获速度 中发布的数据是在 Zivid 的参考硬件上测得的,因此了解您自己系统的实际表现的唯一方法就是自行测量。

本教程展示如何对您的系统进行基准测试、如何将结果整理为报告,以及如何将该报告与 Zivid 客户成功团队分享。

何时需要进行基准测试

在以下情况下,对您自己的系统进行基准测试会很有帮助:

  • 您正在为新应用规划硬件配置,需要了解某台 PC 是否能满足您的周期时间预算。

  • 您的捕获时间比 捕获速度 中发布的数据慢,想找出原因。

  • 在进行了硬件、驱动程序、操作系统或 SDK 升级后,捕获时间发生了变化。

  • Zivid 客户成功团队要求您提供基准测试数据,以帮助诊断性能问题。

构建并运行基准测试

该基准测试是 C++ 示例 ZividBenchmark.cpp。请按照 zivid-cpp-samples 中的说明,将其作为 C++ 示例的一部分进行构建。

运行前请关闭其他占用大量 GPU 资源的应用程序,以免它们在基准测试进行测量时与其争夺 GPU 资源。

在连接相机的情况下运行它,以计时该相机的 presets (预设值):

Ubuntu
./ZividBenchmark --presets
Windows
ZividBenchmark.exe --presets

预设值(Presets)会随示例数据一起安装,请参见 Sample Data(示例数据)。基准测试会选择与其连接的相机所对应的预设值。运行此测试的每个系统都会测量相同的设置,这正是不同系统之间可以相互比较的原因。这也是发布的 捕获速度 表格所使用的测量方式,因此您得到的数据可以直接与之对齐。向 Zivid 发送结果时请使用此形式。

完整运行需要几分钟。每完成一项测量都会打印出来,结果会保存在工作目录中的一个 CSV 文件中,供报告读取。

每个预设值的环境光变体默认会被跳过,因为它们大多只是以不同的曝光重复相同的工作。添加 --all-ambient-variants 可将其包含在内。当您的场景是在 50 Hz 或 60 Hz 下照明时,这一点很重要,因为预设值与其 50 Hz 变体在耗时上并不可互换。

此类运行生成的报告会以这些设置开头,按最快到最慢排序。每个条形图都被拆分为相机采集所用时间和该 PC 将其处理为点云所用时间:

../../../_images/benchmark-report-presets-example.png

采集部分由设置本身决定——曝光、光圈、采集次数——在不同 PC 之间差异很小。处理部分则取决于您的硬件。将两者分开来看,可以判断捕获缓慢是因为您选择的设置,还是因为运行这些设置的机器。这正是调整设置与购买更好的 GPU 之间的区别。

同一次运行还会测量其他指标,例如 2D 捕获、连接时间和保存到磁盘的时间。

测量您自己的设置

要计时您自己调整过的设置,请将其保存为目录中的 .yml 文件,并将 --settings-dir 指向该目录:

Ubuntu
./ZividBenchmark --settings-dir ./my-settings
Windows
ZividBenchmark.exe --settings-dir .\my-settings

该目录下的每个 .yml 文件都会通过十次 3D 捕获进行计时,并以文件名报告结果。可以用此方法选出满足您周期时间预算的设置,并了解它们在您的硬件上(而非我们的硬件上)的实际成本。

您可以从 Zivid Studio 将预设值导出为设置文件,因此候选目录可以将您调整过的预设值与您自己的设置混合在一起。

备注

每个设置文件都会给运行时间增加大约一分钟,较慢的设置文件耗时更多。请将 --settings-dir 指向少数几个候选项,而不是您拥有的每一个设置文件。

与已发布的数据进行对比

捕获速度 中的表格是使用与 --presets 计时相同的预设值测量得出的。因此,以这种方式进行的运行是可以直接比较的:相同相机型号上的相同设置,在您的硬件上(而非我们的硬件上)测量得出。

在这些表格中查找您的相机型号,并逐一比较各预设值。如果某次捕获在您的系统上明显比表格中的数据慢,则问题更可能出在系统而非设置本身,而采集与处理之间的拆分可以指出应该关注哪一部分。

您自己的设置在这些表格中没有对应的行。请改用 计算 3D 捕获速度 来估算预期的采集时间。该估算涵盖每个条形图中由设置决定的采集部分。处理部分则取决于您的硬件,因此应将其与同一次运行中测量的预设值进行比较。

生成报告

Python 示例 visualize_benchmark_results.py 会将测量结果转换为报告。需要安装 Python 示例的依赖项,请参见 zivid-python-samples。

将其指向基准测试生成的文件:

python visualize_benchmark_results.py zivid_benchmark_results.csv

不带参数运行时,它会选取工作目录中最新的基准测试结果。

This writes benchmark_overview.png, leading with a chart of the settings files, split into acquisition and processing time per bar the same way the presets report is. A run made without --presets or --settings-dir opens with where a single capture spends its time instead, and the rest of the layout is unchanged.

主图下方是以下辅助面板:

  • 连接和 2D 捕获 —— 主图尚未涵盖的测量数据。采用对数刻度,因为连接需要几秒钟,而 2D 捕获只需几毫秒。

  • 复制和保存数据 —— 将点云从 SDK 中取出并保存到磁盘所需的成本。采用对数刻度,因为保存 XYZ 数据和复制单个通道的耗时相差数量级。

每个条形图都是中位数。基准测试会重复每项测量并报告中位数而非平均值,因此某一次偶发的缓慢重复不会影响您看到的数值。

设置文件的条形图还带有误差条:总捕获时间在多次重复中的标准差。短误差条表示该设置在这台机器上表现稳定。长误差条则表示同一次捕获有时会明显更慢,而这正是周期时间必须容纳的部分。热节流是其中一个原因:基准测试会连续进行捕获,相机会在采集之间暂停,以防止投影仪过热。请参见 projector brightness (投影仪亮度)了解其成因。在确定采用某项设置之前,值得先查明较长误差条的原因。

要比较多个系统——例如两台 PC、两个 SDK 版本,或同一台 PC 在变更前后的对比——请传入多个结果文件:

python visualize_benchmark_results.py system_a.csv system_b.csv

这将写出 benchmark_comparison.png,将各配置并排显示,并根据它们之间的差异(操作系统、相机型号、SDK 版本或 GPU)为每个系列添加标签。

要更深入地查看单个数据集,可添加 --detailed 参数,为每个类别额外生成一张包含时间序列、按设置细分和分布图的 PNG。使用 --summary-only 可仅打印汇总统计信息而不生成任何图表。

将结果发送给 Zivid

如果您需要帮助解读结果,或认为您的系统性能未达到预期,请将结果发送至 customersuccess@zivid.com。

请附上以下内容:

  • 基准测试生成的结果文件(一个或多个)。这是最重要的部分——其中包含原始测量数据和您的系统信息,可让我们重现您的分析。

  • 同一次运行产生的所有 Zivid SDK 日志文件。一次运行往往分布在多个日志文件中,只有作为一整套文件对我们才有用,因此请提供全部日志文件,而不仅是最新或最大的那一个。报告中会列出它们的完整路径,您无需自行查找。

  • 生成的 PNG 报告(如果您已生成)。

  • 简要说明您想要实现的目标,包括您的目标周期时间。

  • 任何有关设置的异常情况,例如虚拟化环境、共享 GPU,或过长或非标准的线缆布线。

如果您无法生成报告,请单独发送结果文件和日志。这些资料足以让我们在我方进行分析。

备注

基准测试结果包含您相机的序列号以及有关您 PC 的信息,不包含任何点云数据或图像。

延伸阅读