亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在圍棋中計時,這需要不到一納秒的時間?

如何在圍棋中計時,這需要不到一納秒的時間?

Go
jeck貓 2022-08-24 17:33:37
如果我想比較兩個函數的時間,但函數花費的時間不到一納秒,我該怎么辦?t := time.Now()_ = fmt.Sprint("Hello, World!")d := time.Since(t)d.Round(0)fmt.Println(d.Nanoseconds()) // Prints 0我可以運行該函數幾次,并將時間除以執行次數,但我寧愿使用一種方法來計算單個執行的時間。有沒有辦法做到這一點?
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

如果函數的定時生成時間小于納秒,則通常意味著代碼已優化。

編譯器可以檢測到某些代碼沒有副作用,并決定“我為什么要這樣做”。

1/(1 ns) 是 1 Ghz?,F代臺式計算機的上限約為 5 Ghz,給予或接受。因此,要使其小于1 ns,操作加上獲取時間的開銷必須少于5個CPU周期。在這種分辨率下,CPU不會一次做一件事。指令的開始和結束可以間隔多個周期,操作是流水線的。

因此,您必須查看機器代碼并了解體系結構,以確定實際成本是多少,包括CPU資源的哪些部分被使用,以及它將如何與您可能想要在附近執行的其他操作發生沖突。

因此,在大多數CPU上,即使是“之前”和“之后”在低于1ns的時間分辨率下也不再具有合理的意義,其速度足以在1 Ghz以上運行。


查看完整回答
反對 回復 2022-08-24
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

你可以做的是回答“在這個東西至少需要一納秒之前運行多少次”的問題:


package main


import (

   "fmt"

   "time"

)


func main() {

   d := 1

   for {

      t := time.Now()

      for e := d; e > 0; e-- {

         fmt.Sprint("Hello, World!")

      }

      if time.Since(t) > 0 { break }

      d *= 2

   }

   println(d)

}


查看完整回答
反對 回復 2022-08-24
  • 2 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號