6

快速提问。对于我的代码的 MPI 实现,我在两者上都有很大的不同。我知道 MPI_Wtime 是每个处理器经过的实时时间,而 clock() 给出了预期时间的粗略概念。有人想添加一些断言吗?

4

2 回答 2

5

clock功能完全没用。它测量 cpu 时间,而不是实时/墙上时间,而且它有以下严重问题:

  1. 在大多数实现中,分辨率极差,例如 1/100 秒。CLOCKS_PER_SECOND不是分辨率,只是比例。

  2. 对于典型值CLOCKS_PER_SECOND(例如,Unix 标准要求它为 100 万),clock在 32 位系统上将在几分钟内溢出。溢出后返回-1。

  3. 大多数历史实现实际上并不像 C 标准所要求的那样在溢出时返回 -1,而是换行。通常clock_t是有符号类型,尝试使用包装的值执行算术将产生无意义的结果或未定义的行为。

  4. 在 Windows 上,它会做完全错误的事情,并且会实时测量经过的时间,而不是 CPU 时间。

于 2013-06-27T17:54:59.367 回答
3

的官方定义clock是它为您提供 CPU 时间。在 Windows 中,出于歇斯底里的历史原因 - 如果您将其更改为现在反映 CPU 时间,它会破坏某些应用程序 - 在 Windows 上,时间只是经过的时间。

MPI_Wtime正如您所说,给出了“此处理器上的当前时间”,这是完全不同的。如果你做的事情睡眠 1 分钟,MPI_Wtime将向前移动 60 秒,其中clock(Windows 除外)几乎没有变化。

于 2013-06-27T17:57:23.357 回答