Re: [問題] 該如何估計程式執行的時間

看板C_and_CPP作者 (藍影)時間15年前 (2010/12/29 22:44), 編輯推噓0(0016)
留言16則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《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)

12/29 23:05, , 1F
純CPU time的話這樣是ok 的
12/29 23:05, 1F

12/29 23:18, , 2F
現在的 CPU 還有神奇的 OoO 呢
12/29 23:18, 2F

12/29 23:20, , 3F
這樣計算有點粗糙, 還要考慮 cache hit/miss penalty,
12/29 23:20, 3F

12/29 23:20, , 4F
以及 interrupt/exception handler (TLB miss) 被執行到.
12/29 23:20, 4F

12/29 23:25, , 5F
還有複雜的 pipeline, 所以不容易算到很準.
12/29 23:25, 5F

12/29 23:26, , 6F
如果是在 ARM 或 MIPS 上, 可以將環境單純到所有的存取
12/29 23:26, 6F

12/29 23:27, , 7F
都只在 I/D scratch RAM, 將 interrupt 關掉, 在 kernel
12/29 23:27, 7F

12/29 23:28, , 8F
mode 當中執行, 沒有 swap 發生, 可以透過 CPU 的
12/29 23:28, 8F

12/29 23:28, , 9F
performance counter 得到很精準的時間 (clock cycles).
12/29 23:28, 9F

12/29 23:32, , 10F
也如 i 大所說的,那些都是我所欠缺的know how,所以當時
12/29 23:32, 10F

12/29 23:33, , 11F
才覺得自己這樣算不是很準,倒蠻期待有人可以大致再說
12/29 23:33, 11F

12/29 23:33, , 12F
一下細節部份..
12/29 23:33, 12F

12/30 00:18, , 13F
跑simplescalar測?
12/30 00:18, 13F

12/30 00:19, , 14F
現在CPU不是有很多最佳化嗎?硬體可以改變指令執行順序
12/30 00:19, 14F

12/30 00:20, , 15F
加上pipeline的平行運作,變數應該很多吧?
12/30 00:20, 15F

12/30 00:20, , 16F
(這個領域我不熟悉,只是覺得很好奇)
12/30 00:20, 16F
文章代碼(AID): #1D6qax_d (C_and_CPP)
文章代碼(AID): #1D6qax_d (C_and_CPP)