快速提问。对于我的代码的 MPI 实现,我在两者上都有很大的不同。我知道 MPI_Wtime 是每个处理器经过的实时时间,而 clock() 给出了预期时间的粗略概念。有人想添加一些断言吗?
问问题
6800 次
2 回答
5
该clock
功能完全没用。它测量 cpu 时间,而不是实时/墙上时间,而且它有以下严重问题:
在大多数实现中,分辨率极差,例如 1/100 秒。
CLOCKS_PER_SECOND
不是分辨率,只是比例。对于典型值
CLOCKS_PER_SECOND
(例如,Unix 标准要求它为 100 万),clock
在 32 位系统上将在几分钟内溢出。溢出后返回-1。大多数历史实现实际上并不像 C 标准所要求的那样在溢出时返回 -1,而是换行。通常
clock_t
是有符号类型,尝试使用包装的值执行算术将产生无意义的结果或未定义的行为。在 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 回答