我在make和终端中运行time
时看到了不同的行为。我正在使用OpenMP和pthread(单独)编译多线程程序并对它们进行计时,以便将它们的加速比与程序的顺序版本进行比较。但是,当我在终端上运行time a.out
时,每个程序都会得到60秒以上,但在makefile中,两者都会少于10秒。此外,终端时间计算返回时间不到60秒,所以我觉得它对我说谎。
这会导致什么?我原本以为make和终端使用不同的time
功能,但显然我没有/usr/bin/time
。 make有内置time
还是什么?
编辑:是的,我知道time
中的用户和系统受线程数影响,可能大于实际,并且内置了time
我的问题是:为什么从不同的地方运行相同的东西(终端和同一会话中的make)导致返回的时间有显着差异?两个时间输出彼此不是很近。
答案 0 :(得分:2)
几乎所有炮弹都有内置时间。我不知道你怎么称呼时间,但你可能需要根据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报告实时,用户时间,然后是系统时间。那些意味着不同的东西实时是#34;挂钟"时间,如果你用秒表测量它已经过了多少时间。用户时间是您在userland中运行代码时使用的cpu时间,这是您使用过的所有cpu的总和。