看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2008 / VC2010 程式碼(Code):(請善用置底文網頁, 記得排版) 我寫了一份程式碼欲做測時,為簡化說明, 寫了一份 demo code 引出問題 (重點不在演算法) #include <stdio.h> #include <time.h> #define N 10000000 int PrimeCnt(int x); // 計算 2~x 之質數個數, 為引出問題,是用「超暴力」法 int main() { clock_t t1, t2; int cnt; t1 = clock(), cnt=PrimeCnt(N), t2 = clock(); printf("cnt=%d, td=%d\n", cnt,t2-t1); return } 上面的 td 永遠都是 0, 估應是 Opt. 問題 把 setting [快速執行效能 (/O2)] 關掉的確可正常, 不過這樣測時似乎沒太大意義. 所以現在測時都寫在 sub_func 裡面, 但維護起來真的很不方便, 想請各位是否有什麼技巧能在 /O2 情況下進行測時? 謝謝各位! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.73.222
legnaleurc:volatile ? 05/10 15:54
sosokill:cnt=%d 對應t2-t1 td=%d對應啥? 05/10 16:05
tropical72:謝謝 legnaleurc!! 真的解決了.太感激了! 05/10 16:07
tropical72:@sosokill: 抱歉,我這裡key錯,但真不影響原問題. ^^ 05/10 16:07
※ 編輯: tropical72 來自: 180.177.73.222 (05/10 16:14)
loveme00835:clock_t = size_t, 總覺得用 %d 來印很不合理, 但是標 05/10 16:47
loveme00835:準的 %zu 在 VS 上又用不了! 囧, 我用 sleep 來測倒是 05/10 16:48
loveme00835:沒有 t 大的問題說... 05/10 16:49
tropical72:vc 上, typedef clock_t long; 我的確是因 %ld 化 %d 05/10 17:21
tropical72:(純粹偷懶), typedef unsigned int size_t,故認為不同. 05/10 17:22
tropical72:修正, typedef long clock_t; 05/10 17:22
purpose:剛也測了,跑很多次 f = pow(f, 2.0) 拖時間,如果用/O1我 05/10 18:21
purpose:家爛電腦跑出td=437,如果用/O2,則compiler太精了,根本 05/10 18:22
purpose:不做中間的pow計算,直接連續呼叫clock()得到td=0 05/10 18:22
tropical72:http://codepad.org/RuYiBDUx 測試碼,約5secs 05/10 19:57