我想提高一些代码的运行时间。如何提高性能分析的准确性
为了我第一次所有相关的代码的运行时间,使用这样的代码:
before:= rdtsc;
myobject.run;
after:= rdtsc;
然后我放大和时间的相关部分,像这样:
procedure myobject.part;
begin
StartTime:= rdtsc;
...
EndTime:= rdtsc;
inc(TotalTime, (EndTime- StartTime));
end;
我有一些代码复制粘贴定时到Excel中,一个典型的结果将是这样的:
(在89.8%和10.2%总计达100%是巧合和无关的数据或对问题)
(当数据显示1
它意味着0
通过零个错误,以避免除)
请注意run A
和run B
之间的差异。
我还没有改变任何东西还所以运行A和B应该给相同的运行时间。
此外请注意,我知道在两次运行中,程序part
的调用次数完全相同(数据相同且算法是确定性的)。
程序part
的运行时间非常短(只是多次调用)。
如果在运行时短时间内(少于700个CPU周期)有阻止其他进程的方法,我的计时将更为准确。
我如何获得这些时间更可靠?
有没有办法垄断CPU只能运行我的任务时,没有别的?
请注意,我不是在寻找的答案很明显,如:
- 关闭其他正在运行的程序
- 禁用virusscanner等等
我加了标签的问题德尔福,因为我现在正在使用Delphi(并且可能有一些Delphi特定选项来实现此结果)。 我也标记了语言不可知因为可能有一些更一般的方法。
更新
因为我使用的是我没有受到CPU节流的CPU指令RDTSC
。如果CPU速度变慢,则周期数保持不变。
Update2
我有2个答案,但都没有回答这个问题...
问题是如何在运行时间防止这些更改? 我是否必须运行代码20x并始终比较20次运行中的最低运行时间?
或者我将我的程序优先级设置为realtime
?
还是有其他一些技巧使用,所以我的代码示例不会被打断?
@TLama:Tks。奥托,你的意见通常与最终答案一样有用! – MartynA