Unix Command For Benchmarking Code Running K times

2019-03-27 18:41发布

问题:

Suppose I have a code executed in Unix this way:

$ ./mycode

My question is is there a way I can time the running time of my code executed K times. The value of K = 1000 for example.

I am aware of Unix "time" command, but that only executed 1 instance.

回答1:

try

$ time ( your commands )

write a loop to go in the parens to repeat your command as needed.

Update

Okay, we can solve the command line too long issue. This is bash syntax, if you're using another shell you may have to use expr(1).

$ time (
> while ((n++ < 100)); do echo "n = $n"; done
> )

real    0m0.001s
user    0m0.000s
sys     0m0.000s


回答2:

to improve/clarify on Charlie's answer:

time (for i in $(seq 10000); do ./mycode; done)


回答3:

Just a word of advice: Make sure this "benchmark" comes close to your real usage of the executed program. If this is a short living process, there could be a significant overhead caused by the process creation alone. Don't assume that it's the same as implementing this as a loop within your program.



回答4:

To enhance a little bit some other responses, some of them (those based on seq) may cause a command line too long if you decide to test, say one million times. The following does not have this limitation

time ( a=0 ; while test $a -lt 10000 ; do echo $a ; a=`expr $a + 1` ; done)


回答5:

Another solution to the "command line too long" problem is to use a C-style for loop within bash:

 $ for ((i=0;i<10;i++)); do echo $i; done

This works in zsh as well (though I bet zsh has some niftier way of using it, I'm just still new to zsh). I can't test others, as I've never used any other.



回答6:

If you're worried about the overhead of constantly load and unloading the executable into process space, I suggest you set up a ram disk and time your app from there.

Back in the 70's we used to be able to set a "sticky" bit on the executable and have it remain in memory.. I don't know of a single unix which now supports this behaviour as it made updating applications a nightmare.... :o)