2011-01-19 72 views
2

我编写了自己的字符串匹配算法,我想精确地测量它的时间, 将它与其他算法进行比较,以检查我的实现是否更好。RDTSC与秒表

我试过(StopWatch),但由于Windows操作系统运行多个进程,每次运行都会给出不同的时间。我听说(RDTSC)可以得到 循环的消耗数量,但我不知道它是否在每次执行中给出不同的循环次数?

请帮帮我; Can(RDTSC)能够为C#函数提供精确且相同的循环测量,或者与(StopWatch)类似?在没有其他正在运行的进程的情况下,单独获取C#函数的周期数的最佳方法是什么?并非常感谢任何帮助或提示

回答

4

由于多个进程运行Windows操作系统,它在每次运行中给予不同的时间。

这就是所有基准的性质。

良好的基准测试通过统计方法抵消了这一点,即经常测量足以抵消来自其他正在运行的程序的任何副作用。 这是是要走的路。就精度而言,StopWatch对基准测试绰绰有余。

这需要几件事情(没有进入统计的细节,这我不太擅长其一):

  1. 的个人应该持续足够长的时间,以抵消由测量方法(甚至RDTSC介绍测量不精确并不完全准确),并抵消调用开销。毕竟,你想测量你的算法,而不是运行测试循环和调用测试方法所花费的时间。
  2. 足够的测试运行对结果有信心:数据越多,统计的稳健性就越高。
  3. 尽量减少外部影响,特别是系统性偏见。也就是说,在相同条件下在同一台机器上运行所有测试,否则无法比较结果。完全一样。此外,如果您运行多次测试(并且您应该!)交错使用不同的方法。
+0

+1为统计手段。这对于了解平均运行时间可能是最好的方法。您可以进一步计算标准偏差,以了解大多数采样样本的变化程度。 – 2011-01-19 16:33:04