作者tropical72 (藍影)
看板C_and_CPP
標題Re: [問題] 該如何估計程式執行的時間
時間Wed Dec 29 22:44:07 2010
※ 引述《Dreamer77 (追夢)》之銘言:
: 若不用time去計算程式執行時間
: 該怎麼估計程式的執行時間呢?
: 若是有一個矩陣 跑兩個N迴圈 做簡單的lookup 該怎麼估計
: 不知道板友有沒有什麼方法
: 感謝~
不好意思, 上一篇搞笑了..
這問題我之前遇過類似的問題,
#1C-99bdi
大致講一下當時查詢資料的心得, 有錯的話也請不吝糾正
簡單的說,先把你的 C language 用工具翻成 .asm
(VC 似乎有提供, cl test.cpp /Fatest.asm)
(
http://0rz.tw/71niw )
之後裡面都是組語,組語裡面的每個 instruction 基本上都查得到是幾個 clock cycles
這樣可以算得出來整個程式碼會花多少 clock cycles,
最後再將 clock cycles * clock cycle time 大致可得知執行時間.
--------------------------------------------------------------
之前我找的資料大致上是這麼說明, 大多人推真要算得精確的話用這方法,
( 雖我覺得高精度計時器不錯, 不過直接看組語分析似乎是較準確的 )
不過我好奇的是它的分析是不是以單核為主,
另據悉, 實際跑的情況仍要看 branch 優化及其它結果判斷.
且 clock cycle time 直接以 1 / (frequence) 代入也不知準不準.
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
※ 編輯: tropical72 來自: 180.177.76.142 (12/29 22:52)
※ 編輯: tropical72 來自: 180.177.76.142 (12/29 22:57)
→ adxis:純CPU time的話這樣是ok 的 12/29 23:05
→ akasan:現在的 CPU 還有神奇的 OoO 呢 12/29 23:18
→ iamlouis:這樣計算有點粗糙, 還要考慮 cache hit/miss penalty, 12/29 23:20
→ iamlouis:以及 interrupt/exception handler (TLB miss) 被執行到. 12/29 23:20
→ iamlouis:還有複雜的 pipeline, 所以不容易算到很準. 12/29 23:25
→ iamlouis:如果是在 ARM 或 MIPS 上, 可以將環境單純到所有的存取 12/29 23:26
→ iamlouis:都只在 I/D scratch RAM, 將 interrupt 關掉, 在 kernel 12/29 23:27
→ iamlouis:mode 當中執行, 沒有 swap 發生, 可以透過 CPU 的 12/29 23:28
→ iamlouis:performance counter 得到很精準的時間 (clock cycles). 12/29 23:28
→ tropical72:也如 i 大所說的,那些都是我所欠缺的know how,所以當時 12/29 23:32
→ tropical72:才覺得自己這樣算不是很準,倒蠻期待有人可以大致再說 12/29 23:33
→ tropical72:一下細節部份.. 12/29 23:33
→ podd233f:跑simplescalar測? 12/30 00:18
→ james732:現在CPU不是有很多最佳化嗎?硬體可以改變指令執行順序 12/30 00:19
→ james732:加上pipeline的平行運作,變數應該很多吧? 12/30 00:20
→ james732:(這個領域我不熟悉,只是覺得很好奇) 12/30 00:20