Unix Command For Benchmarking Code Running K times

2019-03-27 18:48发布

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.

6条回答
Luminary・发光体
2楼-- · 2019-03-27 19:21

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
查看更多
Bombasti
3楼-- · 2019-03-27 19:24

to improve/clarify on Charlie's answer:

time (for i in $(seq 10000); do ./mycode; done)
查看更多
不美不萌又怎样
4楼-- · 2019-03-27 19:24

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.

查看更多
小情绪 Triste *
5楼-- · 2019-03-27 19:24

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楼-- · 2019-03-27 19:31

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)

查看更多
唯我独甜
7楼-- · 2019-03-27 19:40

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)
查看更多
登录 后发表回答