[问题] 计算程式时间

楼主: 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