我無法理解以下有關處理器速度如何影響某個循環運行多長時間的概念。For循環運行時間
對於3GHz處理器的計算機,每個週期可以執行64位算術,下一個循環將運行多長時間?
long long int x; for(x = 0 x < = 0; x - ){}
我無法理解以下有關處理器速度如何影響某個循環運行多長時間的概念。For循環運行時間
對於3GHz處理器的計算機,每個週期可以執行64位算術,下一個循環將運行多長時間?
long long int x; for(x = 0 x < = 0; x - ){}
編譯器可能會完全優化此循環,因爲它可能會檢測到沒有使用任何結果。
但是,如果實際編譯循環,則對速度上限的猜測可能是每次迭代兩個循環。是的,處理器可能是超標量器,所以它有時可以在一個週期內執行多條指令,但另一方面,一條指令是一條分支,這往往會破壞流水線。
因此,如果我們猜測兩個週期,那麼運行該循環將需要大約一個世紀。
irb> 2**63/(3*10**9)/60/60/24/7/52 # => 97 years
我很想說,循環將永遠不會完成,因爲這比MTBF爲服務器,UPS設備,以及電網更長的時間,但也許你可以在虛擬機中運行它,它設置檢查點定期。 :-)
當然,當經驗證據可用時,希臘的寓言就是猜測的愚蠢。爲什麼不在少量時間內運行循環,然後計算迭代的實際結果?這種猜測是困難的,因爲除了設計師之外,很少有人真正理解今天覆雜的微架構。還有很多實際問題:編譯器是否可以展開循環?也許你應該把它寫在彙編中,這樣你就可以測量一些特定的東西了?
我希望這可以優化。 –