快速问题。对于我的代码的MPI实现,我两者都有很大的不同。我知道MPI_Wtime是每个处理器经过的实际时间,而clock()可以大致了解预期的时间。有人想加一些断言吗?
答案 0 :(得分:5)
clock
功能完全没用。它测量cpu时间,而不是实时/墙上时间,而且还有以下严重问题:
在大多数实现中,分辨率非常差,例如1/100秒。 CLOCKS_PER_SECOND
不是决议,只是比例。
典型值为CLOCKS_PER_SECOND
(例如,Unix标准要求它为100万),clock
将在32位系统上在几分钟内溢出。溢出后,返回-1。
大多数历史实现在溢出时实际上不返回-1,正如C标准所要求的那样,而是换行。由于clock_t
通常是带符号的类型,因此尝试使用包装的值执行算术将产生无意义的结果或未定义的行为。
在Windows上,它完全错误并且实时测量,而不是cpu时间。
答案 1 :(得分:3)
clock
的官方定义是它给你CPU时间。在Windows中,对于歇斯底里历史原因 - 如果你改变它以反映现在的CPU时间,它会破坏一些应用程序 - 在Windows上,时间就是经过的时间。
MPI_Wtime
给出了“这个处理器上的当前时间”,这是完全不同的。如果你做了一个睡眠1分钟的事情,MPI_Wtime
将向前移动60秒,其中clock
(Windows除外)几乎没有变化。