Команда Unix для тестирования кода, запускаемого K раз - PullRequest
7 голосов
/ 18 февраля 2009

Предположим, у меня есть код, выполненный в Unix следующим образом:

$ ./mycode

У меня вопрос, есть ли способ, которым я могу рассчитать время выполнения моего кода выполнено К раз. Значение К = 1000, например.

Мне известна Unix-команда "time", но она выполнила только 1 экземпляр.

Ответы [ 6 ]

14 голосов
/ 18 февраля 2009

, чтобы улучшить / уточнить ответ Чарли:

time (for i in $(seq 10000); do ./mycode; done)
13 голосов
/ 18 февраля 2009

попробуй

$ time ( your commands )

написать цикл, чтобы идти в паренсе, чтобы повторить вашу команду при необходимости.

Обновление

Хорошо, мы можем решить проблему с командной строкой слишком долго. Это синтаксис bash, если вы используете другую оболочку, возможно, вам придется использовать expr (1) .

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

real    0m0.001s
user    0m0.000s
sys     0m0.000s
5 голосов
/ 18 февраля 2009

Просто совет: убедитесь, что этот «эталонный тест» приближается к реальному использованию исполняемой программы. Если это недолговечный процесс, это может привести к значительным накладным расходам, вызванным только созданием процесса. Не думайте, что это то же самое, что реализовать это как цикл внутри вашей программы.

3 голосов
/ 18 февраля 2009

Чтобы немного улучшить некоторые другие ответы, некоторые из них (основанные на seq) могут вызвать слишком длинную командную строку, если вы решите провести тест, скажем, миллион раз. Следующее не имеет этого ограничения

time ( a=0 ; while test $a -lt 10000 ; do echo $a ; a=`expr $a + 1` ; done)
2 голосов
/ 21 февраля 2009

Другим решением проблемы «слишком длинная командная строка» является использование цикла for в b в стиле C:

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

Это работает и в zsh (хотя я уверен, что у zsh есть более изящный способ его использования, я все еще новичок в zsh). Я не могу проверять других, так как никогда не использовал других.

0 голосов
/ 18 февраля 2009

Если вы беспокоитесь о накладных расходах на постоянную загрузку и выгрузку исполняемого файла в пространство процесса, я советую вам настроить оперативный диск и отсчитывать время от своего приложения.

Еще в 70-х годах мы имели обыкновение устанавливать «липкий» бит на исполняемый файл и оставлять его в памяти. Я не знаю ни одного unix, который теперь поддерживает такое поведение, поскольку он сделал обновление приложений кошмар ....: o)

...