Mar*_*ndt 0 benchmarking duration go
如果我想比较两个函数的时间,但这些函数花费的时间不到一纳秒,我该如何进行?
t := time.Now()
_ = fmt.Sprint("Hello, World!")
d := time.Since(t)
d.Round(0)
fmt.Println(d.Nanoseconds()) // Prints 0
Run Code Online (Sandbox Code Playgroud)
我可以运行该函数几次,并将时间除以执行次数,但我更想要一种对单次执行进行计时的方法。有没有办法做到这一点?
如果对函数进行计时所生成的时间小于纳秒,则通常意味着代码已被优化。
编译器可以检测到某些代码没有副作用,并决定“我为什么要这样做”。
1/(1 ns) 是 1 GHz。现代台式计算机的上限约为 5 Ghz,或多或少。因此,要使其小于 1 ns,该操作加上获取时间的开销必须花费少于 5 个 CPU 周期。在这种分辨率水平下,CPU 一次不会只做一件事。指令的开始和结束可以相隔多个周期,并且操作是流水线的。
因此,您必须查看机器代码并了解架构,以确定真正的成本是多少,包括使用了 CPU 资源的哪些部分,以及它与您可能想要在附近执行的其他操作有何冲突。
因此,即使是“之前”和“之后”,在大多数速度足以运行在 1 Ghz 以上的 CPU 上,在低于 1 ns 的时间分辨率下也不再具有合理的意义。
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |