在 make 和终端中运行 time 时,我看到了不同的行为。我正在使用 OpenMP 和 pthread(单独)编译多线程程序,并计时它们以将它们的加速比与程序的顺序版本进行比较。但是,当我在终端上运行 time a.out 时,每个程序的运行时间超过 60 秒,但在 makefile 中,两者的运行时间都不到 10 秒。此外,终端时间计算返回的时间不到 60 秒,所以我觉得它在骗我。

什么会导致这种情况?我最初认为 make 和终端可能使用不同的 time 函数,但显然我没有 /usr/bin/time 。 make 是否有内置的 time 之类的?

编辑 :是的,我知道 time 中的 user 和 sys 受线程数的影响并且可能大于实际,并且 time 是内置的。我的问题是:为什么要从不同的地方(终端并在同一 session 中进行)导致返回时间的显着差异?两个时间输出彼此并不远程接近。

最佳答案

几乎所有的 shell 都有内置的时间。我不知道你如何称呼时间,但你可能需要根据 shell 以不同的方式解释它的结果。

我用一个有 4 个线程的程序做了一个实验,这浪费了一些时间:

$ cc -o foo foo.c && time ./foo

real    0m5.258s
user    0m18.805s
sys 0m0.061s
$ tcsh
% time ./foo
18.978u 0.062s 0:05.30 359.0%   0+0k 0+0io 0pf+0w

tcsh 首先报告用户时间,然后是系统时间,然后是实时时间。 Bash 报告实时、用户时间和系统时间。这些是不同的意思。实时是“挂钟”时间,如果你用秒表测量它已经过去了多少时间。用户时间是您在用户空间中运行代码所使用的 CPU 时间,它是您使用的所有 CPU 的总和。

关于c - tcsh 时间和 makefile 时间明显不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31213895/

10-11 22:50
查看更多