使用 Trace32 对代码运行时进行基准测试
Benchmarking Code Runtime with Trace32
我有一个嵌入式系统,其中包含我想要进行基准测试的代码。在这种情况下,只有一行我想知道花费的时间(这是一个新对象的创建,它启动了我们应用程序的其余部分)。
我可以打开 Trace->Chart->Symbols 并查看用我的光标选择的区域所花费的时间,但这很麻烦而且不够准确。我还找到了 Perf->Function Runtime,但我正在对新对象的分配进行基准测试,而不是任何特定函数调用的分配(new
在多个地方被调用,而不仅仅是感兴趣的行)。
有没有办法查看使用 Trace32 的一行代码所花费的实际时间?比单行更进一步:是否有一种方法可以轻松地对两个断点之间的时间进行基准测试?
打开 Misc->Runtime window 显示自 "laststart." 以来所花费的总时间 通过在代码块的第一行和最后一行之后设置断点,您可以看到"actual" 列下从第一个断点到第二个断点所用的时间。
使用RunTime
命令的,如果你没有实时跟踪就可以了。它适用于任何 Lauterbach 工具和任何目标 CPU。
但是如果您有实时跟踪(例如 CPU 与 ETM 和 Lauterbach PowerTrace 硬件),我建议使用命令 Trace.STATistic.AddressDURation <start-addr> <end-addr>
反而。此命令打开一个 window,显示两个地址之间的平均时间。如果多次执行两个地址之间的代码,您将获得最佳结果。
如果您使用的是 ARM Cortex CPU,它支持周期精确的计时信息(通常是所有 Cortex-A、Cortex-R 和 Cortex-M7),您可以通过以下方式显着提高结果的准确性使用设置 ETM.TImeMode.CycleAccurate
(连同 ETM.CLOCK <core-frequency>
)。
如果您使用 Lauterbach CombiProbe 或 uTrace(并且您不能使用 ETM.TImeMode.CycleAccurate
),我建议设置 Trace.PortFilter.ON
。 (默认port-filter设置为PACK,可以记录更多的数据和程序流,但时序精度稍差。)
我有一个嵌入式系统,其中包含我想要进行基准测试的代码。在这种情况下,只有一行我想知道花费的时间(这是一个新对象的创建,它启动了我们应用程序的其余部分)。
我可以打开 Trace->Chart->Symbols 并查看用我的光标选择的区域所花费的时间,但这很麻烦而且不够准确。我还找到了 Perf->Function Runtime,但我正在对新对象的分配进行基准测试,而不是任何特定函数调用的分配(new
在多个地方被调用,而不仅仅是感兴趣的行)。
有没有办法查看使用 Trace32 的一行代码所花费的实际时间?比单行更进一步:是否有一种方法可以轻松地对两个断点之间的时间进行基准测试?
打开 Misc->Runtime window 显示自 "laststart." 以来所花费的总时间 通过在代码块的第一行和最后一行之后设置断点,您可以看到"actual" 列下从第一个断点到第二个断点所用的时间。
使用RunTime
命令的
但是如果您有实时跟踪(例如 CPU 与 ETM 和 Lauterbach PowerTrace 硬件),我建议使用命令 Trace.STATistic.AddressDURation <start-addr> <end-addr>
反而。此命令打开一个 window,显示两个地址之间的平均时间。如果多次执行两个地址之间的代码,您将获得最佳结果。
如果您使用的是 ARM Cortex CPU,它支持周期精确的计时信息(通常是所有 Cortex-A、Cortex-R 和 Cortex-M7),您可以通过以下方式显着提高结果的准确性使用设置 ETM.TImeMode.CycleAccurate
(连同 ETM.CLOCK <core-frequency>
)。
如果您使用 Lauterbach CombiProbe 或 uTrace(并且您不能使用 ETM.TImeMode.CycleAccurate
),我建议设置 Trace.PortFilter.ON
。 (默认port-filter设置为PACK,可以记录更多的数据和程序流,但时序精度稍差。)