Тестирование производительности приложения на C ++ - PullRequest
6 голосов
/ 28 апреля 2009

Я пытаюсь найти способ проверить, сколько времени занимает выполнение блока кода C ++. Я использую его для сравнения кода с разными алгоритмами и на разных языках, поэтому в идеале мне бы хотелось время в секундах / миллисекундах. В Java я использую что-то вроде этого:

long startTime = System.currentTimeMillis();

function();

long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime; 

Есть ли хороший способ получить точное время, подобное этому, в C ++ (или я должен использовать некоторые другие способы сравнительного анализа)?

Ответы [ 14 ]

0 голосов
/ 29 апреля 2009

Запустите его 1000 раз за 100 итераций * 10 итераций, где вы развернете внутренний цикл, чтобы минимизировать издержки Затем секунды переводятся в миллисекунды.

Как уже отмечали другие, это хороший способ измерить, сколько времени это займет.

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

0 голосов
/ 28 апреля 2009

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

Примерно так:

int i;
int limit=1000000;
int t0=getTime();
for(i=0; i < limit; ++i)
   ;
int t1=getTime();
int loopoverhead = t1-t0;
t0=getTime();
for(i=0; i < limit; ++i)
    function();
t1=getTime();
double tfunction = (1.0/limit)*((t1-t0)-loopoverhead);
0 голосов
/ 28 апреля 2009

В системах Unix (Linux, Mac и т. Д.) Вы можете использовать утилиту time следующим образом:

$ time ./my_app
0 голосов
/ 28 апреля 2009

Вы можете просто использовать time () в своем коде для измерения с точностью до секунд. Тщательные тесты должны выполнять много итераций для точности, поэтому секунды должны быть достаточно большими. Если вы используете Linux, вы можете использовать утилиту времени, как указано в командной строке:

[john@awesome]$time ./loops.sh

real    0m3.026s
user    0m4.000s
sys     0m0.020s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...