我想提高一些代码的运行时间。
为了让我第一次了解所有相关代码的运行时间,使用如下代码:
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 只在计时时运行我的任务而不是别的?
请注意,我不是在寻找明显的答案,例如:
- 关闭其他正在运行的程序
- 禁用病毒扫描程序等...
我已经标记了这个问题Delphi,因为我现在正在使用 Delphi(并且可能有一些 Delphi 特定的选项来实现这个结果)。我也标记了它,language-agnostic因为可能有一些更通用的方式。
更新
因为我使用的是 CPU 指令RDTSC
,所以我不受 CPU 限制的影响。如果 CPU 变慢,则周期数保持不变。
Update2
我有 2 个答案,但都没有回答这个问题......
问题是我如何防止这些运行时间的变化?我是否必须将代码运行 20 次并始终比较 20 次运行中最短的运行时间?
或者我将我的程序优先级设置为realtime
?
或者是否有其他技巧可以使用,这样我的代码示例就不会被打断?