[問題] 計算程式時間

作者: KYO5 (SC2)   2017-07-12 22:03:21
要計算矩陣相乘的時間
用Stopwatch計算的話,它會因電腦狀況(cpu會去執行其它)不同執行時間會有小差異m
上網查到Process.GetCurrentProcess().TotalProcessorTime
用了之後,計算出的時間會固定(但會固定在4種值)
其中兩種是(15.6001和31.2002)剛好2倍,其他兩種值比較少出現。
我的疑問是,相同的兩個矩陣相乘,不管執行幾次,正常應該cpu使用時間是一定的吧?
還是我的觀念有錯呢?
感謝大家
以下是簡單測試的code (矩陣大小是 1x1024 X 1024x1024)
TimeSpan ts1 =
System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime;
for (int x = 0; x < 1024; x++)
{
double sum = 0;
for (int y = 0; y < 1024; y++)
{
sum = sum + (Oridata[0, y] * A[y, x]);
}
WLD[x] = Math.Round(sum) / Cmax / Math.Pow(2, 14);
}
double Msecs =
System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime.Subtract(ts1).TotalMilliseconds;
listBox1.Items.Add(Msecs);
作者: s89227 (Kei)   2017-07-12 22:34:00
因為時間有精準度問題
作者: james732 (好人超)   2017-07-12 22:44:00
其實時間不一定會固定,因為CPU很忙
作者: ssccg (23)   2017-07-12 22:48:00
為什麼CPU時間是一定的? 除非你東西都放在register,不然每次從memory/cache讀的時間不一定一樣啊高階語言、Managed環境,要固定執行時間根本不太可能反而你現在有固定結果可能是ProcessorTime API和ms這個非常粗略單位造成的結果的可能性很大...
作者: fo40225   2017-07-13 11:44:00
你的程式用掉了兩個OS的時間片段 就兩倍了

Links booklink

Contact Us: admin [ a t ] ucptt.com