当前位置 : 主页 > 编程语言 > delphi >

delphi – 如何提高分析的准确性

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想改善一些代码的运行时间. 为了我第一次使用所有相关代码的运行时间,使用如下代码: before:= rdtsc;myobject.run;after:= rdtsc; 然后我放大并计时相关部分,如下所示: procedure myobject.part
我想改善一些代码的运行时间.

为了我第一次使用所有相关代码的运行时间,使用如下代码:

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表示避免除以零错误)

注意运行A和运行B之间的区别.
我还没有改变任何东西,所以运行A和B应该给出相同的运行时间.
进一步请注意,我知道在两次运行中,程序部分的调用次数完全相同(数据相同且算法具有确定性).

程序部分的运行时间很短(只需多次调用).
如果在这些短暂的运行时间(少于700个CPU周期)中有某种方法可以阻止其他进程,那么我的计时会更准确.

如何让这些时间更可靠?
有没有办法垄断CPU只在定时时运行我的任务而没有别的?

请注意,我不是在寻找明显的答案,例如:
– 关闭其他正在运行的程序
– 禁用virusscanner等……

我已经标记了Delphi的问题,因为我现在正在使用Delphi(并且可能有一些特定于Delphi的选项来实现这个结果).
我还标记了它与语言无关,因为可能有一些更通用的方法.

更新
因为我正在使用CPU指令RDTSC,所以我不受CPU限制的影响.如果CPU减速,则循环次数保持不变.

UPDATE2
我有2个答案,但都没有回答这个问题……
问题是如何防止这些运行时间的变化?
我是否必须运行代码20x并始终比较20次运行中的最低运行时间?
或者我将程序优先级设置为实时?
还是有其他一些技巧可以使用,所以我的代码示例不会被中断?

To want to improve the running time of some code.

In order to that I first time the running time of all relevant code, …

好吧,我在这个问题上有点记录,但很多人认为改善运行时间需要先准确测量.

不是这样.

改善运行时间需要找出需要花费很长时间的时间(确切的分数无关紧要)并且不同地做或者根本不做.
它的作用往往不是通过计时个别例程来揭示的.

Here’s the method I use,
here’s a very amateur video of it.

网友评论