Как вычислить время выполнения программы на C в Ubuntu - PullRequest
1 голос
/ 28 ноября 2011

Я пытался >>time ./a.out

есть

real 0m0.035s

user 0m0.008s

sys  0m0.004s

что это на самом деле означает?

когда я повторил, я получил

real 0m0.012s

user 0m0.000s

sys  0m0.012s

если я попробую это много раз каждый раз, когда я получаю разные результаты, почему? как я могу решить это.

Ответы [ 4 ]

4 голосов
/ 28 ноября 2011

Каждый из них - это различные среды выполнения вашей программы.

  • Реальное - это фактическое время, которое потребовалось на запуск настенного часа

  • sys - это количество времени, которое система потратила на выполнение вашей программы (то есть время, потраченное ядром)

  • пользователь - это количество времени, которое было потрачено в пользовательском режиме на его выполнение (т. Е. Время, потраченное на исключение, если вы не были в ядре).

3 голосов
/ 28 ноября 2011

Нет «решения», потому что нет проблем. Вы используете многозадачную систему, и скорость загрузки зависит от нагрузки. То, что вы можете сделать, это запустить его несколько раз и взять среднее в качестве «руководства».

2 голосов
/ 21 ноября 2012
time -f "%e" -o Output.log ./a.out

сохранит значение общего времени выполнения для выполнения файла a.out в файл Output.log

1 голос
/ 28 ноября 2011

Ваши времена никогда не будут прежними, потому что каждый раз, когда вы выполняете свою программу, условия на машине различаются, планировщик процессов / потоков ОС, назначенный и освобожденный оперативной памяти, а также другие задачи, которые может выполнить система делать, как чтение тяжелого файла с диска, замена.

Куртис Нусбаум уже указал значения real, user и sys, я просто уточню real: это общее время выполнения программы, поэтому, если случайно ваш диск находится в тяжелом режиме, общее время будет больше, когда ваша программа читает данные. Таким образом, он не измеряет эффективность, а просто прошедшее время. user + sys time будет лучшим индикатором эффективности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...