在 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/