有人可以解释似乎测量运行时的不熟悉的代码

时间:2010-01-07 18:55:32

标签: c

[user@host][~] 6> cc -xO4 timing.c -o timing
[user@host][~] 6> ./timing
Total run time: 0
[user@host][~] 6>

有人可以告诉我这段代码的用途和使用位置吗?我想从命令行。

麻生太郎,似乎有人正在测试.c程序的运行时间。但为什么Total运行时间为0?我也不熟悉这个命令-xO4。

我也看到了这个例子,其中运行时间不为0.显然-xO4做了什么还是......?

[user@host][~] 6> cc timing.c -o timing
[user@host][~] 6> ./timing
Total run time: 3520000
[user@host][~] 6>

5 个答案:

答案 0 :(得分:2)

第一行编译一个c程序。第二行运行它。我猜测它需要不到一秒的时间才能运行,所以报告的时间会变为零。

答案 1 :(得分:1)

只需在-XO4开关上quote

  

-xO4

     

执行循环展开,避免   尽可能创建堆栈帧   并自动内联函数   包含在同一个文件中,以及   由2级和2级完成的优化   3.请注意,此优化级别可能会导致adb和ad的堆栈跟踪   dbx不正确。

虽然这略微取决于目标处理器。即,this is for a SPARC processor和上面的x86。

答案 2 :(得分:0)

第一行将源文件timing.c中的C程序编译为名为timing的可执行文件。 -xO4是传递给编译器的标志。它是特定于平台/编译器的,但它看起来像是进行4级优化的选项。第二行执行代码。您可以了解“计时器”执行“时间”程序需要多长时间。

time ./timer

答案 3 :(得分:0)

好的,对你的问题有几个解释,在你编辑它以显示第二次执行之后,没有-x04命令行参数。

我能想到的第一个解释是-x04参数,@Abel在记录here方面做得很好,展开了大量代码中的一些基本开销。循环完全消失。更有可能的是,一些循环代码完全消失了。

第二种解释是该命令从磁盘或类似的慢速介质加载信息,第二次执行实际上是第一次执行,它实际上必须等待磁盘。在第二次执行(你首先显示的那个)中,要加载的数据已经存在于缓存中,所以它只是将内存复制到内存中,这要快得多。

在任何一种情况下,一些优化和/或缓存技术都会删除所有开销和代码执行时间,这是非常奇怪的,所以很可能你所展示的第一次执行中的代码花费的时间少于所用定时方法的准确性。例如,如果精度为1ms,则总运行时间小于1ms,因此它看起来为零。

答案 4 :(得分:0)

如果问题是:“如果使用-xO4编译timing.c,为什么运行时间从3520000变为0?”,那么答案是-x04执行优化*使得计时运行得比它快没有国旗就建成了。我们不知道运行时使用了哪些单位。如果它是毫秒,那么你的加速从大约1小时的运行时间到不到一毫秒。这有点令人惊讶。

*(有关详细信息,请参阅Abel's post。)