代码之家  ›  专栏  ›  技术社区  ›  Tool

有人能解释一下不熟悉的代码吗?这些代码似乎可以测量运行时。

c
  •  0
  • Tool  · 技术社区  · 15 年前
    [user@host][~] 6> cc -xO4 timing.c -o timing
    [user@host][~] 6> ./timing
    Total run time: 0
    [user@host][~] 6>
    

    有人能告诉我这段代码是做什么的,在哪里使用的吗?我是从命令行推测的。

    aso,似乎有人在测试.c程序的运行时。但为什么总运行时间是0?我也不熟悉这个命令-xo4。

    我也展示了这个例子,其中运行时间不是0。很明显-xO4做了什么或者…?

    [user@host][~] 6> cc timing.c -o timing
    [user@host][~] 6> ./timing
    Total run time: 3520000
    [user@host][~] 6>
    
    5 回复  |  直到 12 年前
        1
  •  0
  •   Community omersem    7 年前

    如果问题是:“如果timing.c是用-xO4编译的,为什么运行时间从3520000变为0?”然后,答案是-X04执行优化*,使计时运行速度比没有标记的情况下更快。我们不知道什么单位用于运行时间。如果是毫秒,那么您的加速时间是从大约1小时的运行时间到不到一毫秒。这有点令人惊讶。

    *(见 Abel's post 具体细节。)

        2
  •  2
  •   Jay    15 年前

    第一行编译C程序。第二条线运行它。我猜跑步不到一秒钟,所以报告的时间会变为零。

        3
  •  1
  •   alanc    12 年前

    就在-xO4开关上, quote :

    -xO4

    执行循环展开,避免 尽可能创建堆栈帧, 自动输入函数 包含在同一文件中,以及 由2级和 三。请注意,此优化级别可能会导致ADB和 dbx不正确。

    尽管这稍微依赖于目标处理器。即。, this is for a SPARC processor 上面提到的是x86。

        4
  •  0
  •   David Nehme    15 年前

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

    time ./timer
    
        5
  •  0
  •   Community omersem    7 年前

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

    我能想到的第一个解释是 -X04 论点,哪个 @Abel 做好了记录工作 here ,展开如此多的代码,循环中的一些基本开销将完全消失。更可能的是,一些循环代码会完全消失。

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

    在这两种情况下,一些优化和/或缓存技术会删除 全部的 开销和代码执行时间,因此您所显示的第一次执行中的代码所花费的时间很可能比所使用的计时方法的准确性要短。例如,如果精度为1毫秒,则总运行时间小于1毫秒,因此看起来像零。