为了我第一次使用所有相关代码的运行时间,使用如下代码:
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,…
好吧,我在这个问题上有点记录,但很多人认为改善运行时间需要先准确测量.
不是这样.
改善运行时间需要找出需要花费很长时间的时间(确切的分数无关紧要)并且不同地做或者根本不做.
它的作用往往不是通过计时个别例程来揭示的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。