The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
Вперед Назад Содержание

9. Статистические неточности в выводе `gprof'

Цифры времени исполнения, которые вам выдает `gprof', основываются на процессе наблюдения, и это повод для возникновения статистических неточностей. Когда функция выполняется слишком короткий промежуток времени, наблюдающий процесс в среднем может поймать ее за работой только однажды, а это--очаровательная возможность считать, что эта функция не наблюдалась вообще или ее видели дважды.

В отличие от этого, цифры количества вызовов получаются подсчетом, а не наблюдением. Они точны и не меняются от запуска к запуску, если ваша программа детерминирована (ход ее исполнения строго предопределен).

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

Обычно реальная ошибка превышает один период наблюдения. Фактически, если значение равно N периодам наблюдения, то *ожидаемая* ошибка не превышает корня квадратного из N. Если период наблюдения равен 0.01 сек., а время выполнения `foo' равно 1.00 сек., то ожидаемая ошибка в величине времени выполнения `foo' не превышает 0.10 сек. Весьма вероятно, что это время будет заметно изменяться *в среднем* от запуска к запуску для профилирования. (*Иногда* оно будет меняться гораздо сильнее).

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

Есть один способ добиться большей точности--задать вашей программе побольше (но попроще) входных данных, чтобы она подольше поработала. Другой способ--собрать данные от разных запусков, используя опцию `-s' `gprof'. Вот так:

  1. Запустите программу один раз.
  2. Выполните команду `mv gmon.out gmon.sum'.
  3. Снова запустите программу, так же, как перед этим.
  4. Объедините новые данные из `gmon.out' в `gmon.out' такой командой:
                  gprof -s EXECUTABLE-FILE gmon.out gmon.sum
    
  5. Повторяйте шаги 3 и 4 столько, сколько нужно.
  6. Проанализируйте накопленные данные, используя команду:
                  gprof EXECUTABLE-FILE gmon.sum > OUTPUT-FILE
    

Вперед Назад Содержание
ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Оформить подписку на год


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList