代码之家  ›  专栏  ›  技术社区  ›  Adam Trhon

平均执行时间

  •  5
  • Adam Trhon  · 技术社区  · 14 年前

    有没有什么好的GNU方法来衡量一些命令行程序的平均(最坏情况,最好情况)执行时间?我有图像过滤器,未指定数量的图片,过滤他们使用的bash循环。到目前为止我用的是 时间

    5 回复  |  直到 14 年前
        1
  •  4
  •   CanSpice    14 年前

    有一个有趣的Perl程序叫做 dumbbench 这基本上是一个包裹在 time 命令。它会多次运行您的程序,丢弃异常值,然后计算一些统计数据。

    作者有几篇文章( here here

        2
  •  6
  •   pmg    14 年前

    您可以将时间输出发送到某个文件,然后“处理”该文件

    echo "some info" >> timefile.txt
    time ( ./yourprog parm1 parm2 ) 2>> timefile.txt
    
        3
  •  2
  •   Sean    14 年前

    你跟我走对了 time . 我用它来进行小代码执行分析。

    时间 . 为了提高准确性,我通常会做10-1000次试验,这取决于每个过程需要多长时间。

    我不熟悉任何预装的GNU应用程序做这种分析。

        4
  •  2
  •   nategoose    14 年前
    #!/bin/bash
    for i in {1..100}
    do
      env time --append -o time_output.txt   ./test_program --arguments-to-test-program
    done
    exit
    

    如果您发现{1..100}语法不适合您,那么您应该看看seq命令。

    env time 执行time程序,而不是shell的内置命令,该命令不接受time程序使用的所有参数。time程序还使用其他参数来更改其输出的格式,您可能希望使用这些参数使另一个程序更容易处理数据。p(--portability)参数使它以POSIX格式输出(就像BASH的内置时间一样),但是使用-f选项可以获得更多的控制。 man 1 time

    收集完数据后,一个简单的perl或python脚本可以轻松地解析和分析计时数据。

        5
  •  0
  •   Dennis Williamson    14 年前

    您应该考虑是否对外部循环计时并除以重复次数,而不是对每个迭代单独计时。如果您担心放弃高和低,只需多做几次迭代就可以将它们淹没。

    time for i in {1..1000}
    do
        something
    done
    

    capture the output from time in a variable :

    foo=$( { time {
        echo "stdout test message demo"
        for i in {1..30}
        do
            something
        done
        echo "stderr test message demo" >&2
    } 1>&3 2>&4; } 2>&1 )
    

    假数学

    foo=${foo/.}          # "divide" by ...
    echo "0.00${foo/#0}"  # ... 1000
    

    或者只是使用 bc

    echo "scale=8; $foo/1000" | bc
    
    推荐文章