此页面解释了 VPI 性能信息的收集方式、如何解读这些信息以及如何重现这些结果。
如需比较 VPI 与其他计算机视觉库的性能,请查阅性能对比页面。
算法性能表
大多数算法的描述页面都有一个章节,其中显示了单次调用/迭代的运行时间以及所使用的参数。这些信息对于性能关键型应用非常有用,户可以评估特定参数/后端组合对应用性能的影响,例如:
- 使用哪种 NVIDIA® Jetson™ 设备
- 使用哪个后端
- 速度/质量权衡
- 并行流中运行算法的效果。
在每个表格中,可以选择目标 Jetson 设备和并行算法调用的数量,即执行算法的并行 VPIStream 的数量。这允许分析每个算法调用的平均运行时间如何随并行算法执行的数量而变化。假设设置一个 VPIStream 在图像上应用盒状滤波器。此操作本身需要一定的时间。现在假设程序必须并行处理多张图像,每张图像都在其自己的 VPIStream 中。每个盒状滤波器操作的平均运行时间如何随并行流的数量而变化?这可以通过更改性能表中的流计数来解答。
对于大多数后端和算法,每次调用的平均运行时间随流的数量线性增加。PVA 后端是一个值得注意的例外。由于 NVIDIA ®Jetson Orin™ 设备有一个独立的 PVA 处理器,每个处理器都有两个并行的向量处理器,因此只有当使用两个或更多并行的 VPIStream 时,PVA 后端才能得到充分利用。因此,执行一个或两个并行的 PVA 算法实例不会增加每个实例的运行时间。
虽然 VPI 可以用于具有独立 GPU 的 x86 架构,但不同性能的大量配置使得很难在它们与 VPI 支持的不同算法之间进行有用的比较。因此,基准测试仅限于 Jetson 设备。
比较算法运行时间
所有算法运行时间测量值都显示了其置信区间,例如 \(212.4 \pm 0.4\) 毫秒或 \(0.024 \pm 0.002\) 毫秒。这些区间代表 99.73%(\(\pm 3\sigma\)) 的置信水平,即真实的运行时间位于区间内。这假设测量值来自正态分布。
在比较测量值时,必须考虑置信区间。
示例
- \(110 \pm 5\) 毫秒和 \(100 \pm 20\) 毫秒代表相似的运行时间,因为置信区间 \((105;115)\) 和 \((80;120)\) 之间存在重叠。不能说第一个测量值实际上高于(或更慢)第二个测量值。
- \(110 \pm 5\) 毫秒和 \(100 \pm 1\) 毫秒代表不同的运行时间,具有很高的置信度,因为 \((105;115)\) 和 \((99;101)\) 之间没有重叠。第一个测量值可以被认为高于第二个测量值。
为了在不同的后端之间进行有意义的运行时间比较,必须充分利用相应的处理器。例如,考虑卷积性能表。当在 NVIDIA® Jetson AGX Orin™ 上使用一个流比较 CPU 和 PVA 时,CPU 更快,因为它有八个内核,并且每个算法调用都充分利用了所有内核,而 PVA 仅使用 PVA 处理器中的一个向量处理器,即已安装 PVA 容量的 1/2。现在将并行流的数量更改为两个,PVA 运行时间仅略有增加,但 CPU 运行时间大约增加 2 倍。在这种情况下,PVA 比 CPU 更快。
结论是,PVA 后端比其他后端在更多并行流的情况下扩展性更好,直到处理器饱和为止。最重要的是,它也更节能。
基准测试方法
此处详细描述了用于测量性能指标的基准测试程序。此信息有助于解释性能指标所指的上下文。
- 所有负载、输入和输出内存缓冲区都是预先创建的。
- 内存仅启用了基准测试后端以及 VPI_EXCLUSIVE_STREAM_ACCESS 标志。
- 在循环中运行算法一秒钟的预热时间。
- 批量运行算法并测量每个批次内的平均运行时间。批次中的调用次数随近似运行时间而变化(算法越快,批次越大,最多 100 次调用)。这样做是为了从算法运行时间中排除执行测量本身所花费的时间。
- 执行项目 3 至少 5 秒钟,确保我们至少执行 10 次。
- 从每个批次的所有平均运行时间中,我们排除 5% 的最低值和最高值。
- 从结果集中,我们取中位数。这是用作算法最终运行时间的值。
基准测试示例演示了如何实现上述简化版本。它可以用于很好地近似每个算法的基准测试表中所显示的值。
时钟频率和电源设置
为了使测量在多次运行中保持一定程度的稳定性,设备的频率和电源参数在基准测试之前被最大化。这也模拟了系统满负荷的情况,从而使执行时间更接近下限。在实际应用中,根据系统负载,由于频率限制和其他影响,执行时间可能会更长。
通过 JetPack 安装程序刷写的 Jetson 设备带有可用于控制可用处理器的时钟频率和电源设置的实用程序。为了简化流程,将使用以下脚本将 CPU、GPU、PVA、VIC 和 EMC(内存控制器)时钟频率设置为最大值。
将以下脚本复制到设备中名为 clocks.sh
的文件中,并使用 chmod +x clocks.sh
设置其执行属性。
3 if [ $(whoami) != root ]; then
4 echo Error: Run this script as a root user
8 clkfile=/tmp/defclocks.conf
9 pwrfile=/tmp/defpower.conf
12 if [ -e /sys/devices/platform/bus@0/13e00000.host1x/15340000.vic ]; then
13 vicctrl=/sys/devices/platform/bus@0/13e00000.host1x/15340000.vic
14 vicfreqctrl=$vicctrl/devfreq/15340000.vic
19 if [ ! -e $clkfile ]; then
20 jetson_clocks --store $clkfile
21 if [ -n "$vicctrl" ]; then
22 echo "$vicfreqctrl/governor:$(cat $vicfreqctrl/governor)" >> $clkfile
23 echo "$vicfreqctrl/max_freq:$(cat $vicfreqctrl/max_freq)" >> $clkfile
24 echo "$vicctrl/power/control:$(cat $vicctrl/power/control)" >> $clkfile
28 if [ ! -e $pwrfile ]; then
29 echo $(nvpmodel -q | tail -n1) > $pwrfile
37 if [ -n "$vicctrl" ]; then
38 echo on > $vicctrl/power/control
39 echo userspace > $vicfreqctrl/governor
41 maxfreq=$(cat $vicfreqctrl/available_frequencies | rev | cut -f1 -d' ' | rev)
42 echo $maxfreq > $vicfreqctrl/max_freq
43 echo $maxfreq > $vicfreqctrl/userspace/set_freq
49 if [ -e $clkfile ]; then
50 jetson_clocks --restore $clkfile > /dev/null 2>&1
53 if [ -e $pwrfile ]; then
54 nvpmodel -m $(cat $pwrfile)
68 echo "Unknown option '$action'."
69 echo "Usage: $(basename $0) <--max|--restore>"
要最大化时钟频率,请运行
完成测量后,使用以下命令恢复时钟频率
sudo ./clocks.sh --restore
下面列出了用于测量的所有设备,以及它们的频率和电源配置。
NVIDIA® Jetson AGX Orin™
- CPU:12 核 ARMv8 Processor rev 1 (v8l),运行频率为 2.255 GHz
- EMC 频率:3.1990 GHz
- GPU 频率:1.301 GHz
- PVA/VPS 频率:1.370 GHz
- PVA/AXI 频率:985.600 MHz
- VIC 频率:729.600 MHz
- OFA 频率:780.800 MHz
- 电源模式:MAXN
- 风扇速度:MAX