[問題] 想請問有關取得運算時間的函式

看板C_and_CPP (C/C++)作者 (Effort)時間16年前 (2010/05/10 22:07), 編輯推噓6(6022)
留言28則, 6人參與, 最新討論串1/1
遇到的問題: 不知道哪裡有問題,運算的時間都一樣,不管fo迴圈跑多少次r 開發平台: (Dev-C++, Windows) 有問題的code: #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { int begin,end,sum=0; register int i,j; printf("測試結果:\n"); begin=clock(); for(i=0;i<10000;i++) for(j=0;j<10000;j++) sum=sum+1; end=clock(); printf("執行函式花了%g秒\n",(end-begin)/CLK_TCK); system("pause"); return 0; } 可以麻煩各位幫我看一下,哪裡有錯嗎? 謝謝你們 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.204.22

05/10 22:19, , 1F
release mode 迴圈應該會被移除喔
05/10 22:19, 1F

05/10 22:24, , 2F
推1F, 另外, 改用QueryPerformanceCounter試試:)
05/10 22:24, 2F

05/10 22:25, , 3F
不然最後再加一個dummy的code去印一下sum; 雖然說迴圈那
05/10 22:25, 3F

05/10 22:26, , 4F
請問一下迴圈為什麼會被移掉呢?
05/10 22:26, 4F

05/10 22:26, , 5F
段還是可能被optimize掉, 那就只好換sum+=rand();之類XD
05/10 22:26, 5F

05/10 22:27, , 6F
迴圈在算sum, sum後面卻沒用到, index i j也都沒用到,
05/10 22:27, 6F

05/10 22:27, , 7F
整段迴圈都可以被dead code remove掉:)
05/10 22:27, 7F

05/10 22:29, , 8F
原來最佳化會做成這種程度@@
05/10 22:29, 8F

05/10 22:33, , 9F
慘了...我有點聽不懂耶 @@
05/10 22:33, 9F

05/10 22:37, , 10F
對了, 先改用 %f 印 (double)(end-begin)/CLK_TCK 試試.
05/10 22:37, 10F

05/10 22:38, , 11F
不行就查查看 QueryPerformanceCounter()
05/10 22:38, 11F

05/10 22:38, , 12F
簡單說, 值都一樣有幾種可能, 1. 跑太快了一值算出0.
05/10 22:38, 12F

05/10 22:39, , 13F
2. 差異太小clock()計不到這麼精確; 3. 算出來都是同樣
05/10 22:39, 13F

05/10 22:39, , 14F
的整數的情況, 就是計算誤差, 即上面說改%f那行....
05/10 22:39, 14F

05/10 22:52, , 15F
begin end 資料型別要用t_time,為long。
05/10 22:52, 15F

05/10 22:55, , 16F
因為你的程式裡,那個迴圈對其他部份可說沒有影響
05/10 22:55, 16F

05/10 22:55, , 17F
最佳化的時候會發現這段程式碼沒有意義 因此省掉
05/10 22:55, 17F

05/10 22:58, , 18F
嗯嗯,原本以為只會對array index跟計算上做最佳化而已
05/10 22:58, 18F

05/10 23:00, , 19F
現在的compiler已經做到很恐怖的地步了...XD
05/10 23:00, 19F

05/10 23:01, , 20F
推可以做的可多了呢XD
05/10 23:01, 20F

05/10 23:13, , 21F
哈哈,謝謝樓上高手們的解答,compiler太過於強大...
05/10 23:13, 21F

05/10 23:14, , 22F
請記得這種時間相關的,不要用迴圈來做
05/10 23:14, 22F

05/10 23:14, , 23F
利用OS所提供的函式(如推文的QueryPerformanceCounter)
05/10 23:14, 23F

05/10 23:43, , 24F
QueryPerformanceCounter它是用在C嗎?還是C++ ??
05/10 23:43, 24F

05/10 23:44, , 25F
我剛剛有稍微查一下,怎好像都關於C++的...
05/10 23:44, 25F

05/10 23:51, , 26F
它是Win32 API, #include <windows.h> 可用; 使用上也沒
05/10 23:51, 26F

05/10 23:51, , 27F
有哪邊有需要C++ OO或獨特語法的部份....
05/10 23:51, 27F

05/11 02:44, , 28F
的確沒有oo的語法,可能是我過去沒碰過吧,抱歉...
05/11 02:44, 28F
文章代碼(AID): #1Bw1CLtw (C_and_CPP)
文章代碼(AID): #1Bw1CLtw (C_and_CPP)