2014-09-13 2 views
1

Я пишу несколько кодов, в которых важно время вычисления. Я использую функцию tic toc и profiler для измерения времени. в чем разница между ними?TIC TOC или Profiler

для части моего кода, функция tic toc заявляет, что, например, время составляет 3 секунды, но сумма раз в profiler для всех строк моего кода не так уж много!

+0

profiler = cpu time – Elior

+0

В документах и ​​статьях, когда измеряется время, является то, что время процессора? – user3482383

+1

вы не должны забывать, что выполнение скрипта или функции с запуском профайлера занимает гораздо больше времени, чем просто tic и toc. Также рассматривайте 'timeit' как еще один вариант. – thewaywewalk

ответ

2

TIC TOC и profiler делать очень разные вещи.

TIC TOC измеряет прошедшее время от вызова TIC до вызова TOC. Это включает некоторые накладные расходы внутри самих функций tic и за очень печальные интервалы, не является полностью надежным.

Профайлер измеряет время процессора для выполнения каждой функции внутри вашего кода. Это не включает время простоя, в течение которого никакая функция в настоящее время не выполняется (процессор выполняет другие задачи, включая запуск вашего кода matlab).

Есть другие вещи, которые вы должны сделать, чтобы обеспечить точный расчет времени:

  1. Wrap код в функции для обеспечения его JIT компиляции.

  2. Прогрейте функцию, запустив ее один раз перед профилированием.

  3. Запустите код несколько раз и усредните время.

  4. Запускать функцию tic/toc много раз, усреднять результат и вычитать это из вашего общего времени.

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

4

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

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

Принимая тайминги с tic и toc, может быть довольно тонким, так как вам необходимо разогреть код и запустить его несколько раз, чтобы взять среднее.

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

+0

Как отмечает Сэм, 'timeit()' отлично справляется с предоставлением самого точного времени кода только за счет накладных расходов. – Oleg

Смежные вопросы