作者KYO5 (SC2)
看板C_Sharp
标题[问题] 计算程式时间
时间Wed Jul 12 22:03:21 2017
要计算矩阵相乘的时间
用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);
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.255.66.7
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1499868204.A.36D.html
1F:推 s89227: 因为时间有精准度问题 07/12 22:34
2F:推 james732: 其实时间不一定会固定,因为CPU很忙 07/12 22:44
3F:→ ssccg: 为什麽CPU时间是一定的? 除非你东西都放在register,不然每 07/12 22:48
4F:→ ssccg: 次从memory/cache读的时间不一定一样啊 07/12 22:48
5F:→ ssccg: 高阶语言、Managed环境,要固定执行时间根本不太可能 07/12 22:55
6F:→ ssccg: 反而你现在有固定结果可能是ProcessorTime API和ms这个非常 07/12 22:56
7F:→ ssccg: 粗略单位造成的结果的可能性很大... 07/12 22:57
那请问一下,我用stopwatch去测时间是约 19-21 之间。依我的逻辑来说..
用TotalProcessorTime的时间应该要小於stopwatch测的时间。
所以TotalProcessorTime测出来15.6我觉得合理,但31.2这值我不知道怎麽解释?
不知道有没有合理的解释呢? 谢谢。
※ 编辑: KYO5 (111.255.66.7), 07/13/2017 09:42:13
8F:→ fo40225: 你的程式用掉了两个OS的时间片段 就两倍了 07/13 11:44