Подтвердить что ты не робот

Утилиты тестирования производительности для С++

Мне было любопытно, есть ли у кого-нибудь предложения для библиотек тестирования производительности и интерфейсов, которые будут создавать приятные графические диаграммы для С++ (например, как gcov создает данные о покрытии, и там есть интерфейсы для просмотра данных покрытия кода). Возможность создавать такие диаграммы, как:

http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0

будет довольно гладким. Мы используем cppunit прямо сейчас для модульного тестирования, поэтому, возможно, есть что-то, что интегрируется с этим.

Дополнительная информация: мы собираем Linux (мы используем Ubuntu Lucid/Maverick) на компьютерах Intel x86-64.

4b9b3361

Ответ 1

Некоторые предложения:

  • googletest Среда С++ может создавать отчеты, совместимые с JUnit.
  • Hudson можно использовать для запуска ваших тестов. Это требует только того, что ваше приложение на С++ можно запустить как консольное приложение.
  • Hudson Performance Plugin может генерировать графические диаграммы из отчетов JUnit.
  • Есть много других plugins.

Ответ 2

В Linux вы можете попробовать инструментарий valgrind. Valgrind включает инструмент callgrind, который может профилировать ваш код. KCacheGrind очень хорошо визуализирует вывод cachegrind.

Ответ 3

Некоторые, надеюсь, соответствующие заметки из моего опыта такого рода вещей в ответах здесь и здесь.

Нет причин, по которым ваша существующая установка CppUnit в сочетании с чем-то вроде scoped_timer (см. вторую часть) и небольшая постобработка некоторых диаграмм, возможно, не должны удовлетворять вашим потребностям. Хотя я считаю, что CppUnit включает в себя плагин ( "Clocker"?), Который будет выходить из unittest раз, я не думаю, что на самом деле это полезно для такого рода тестирования производительности на практике, потому что вы неизменно теряете время, просто часть каждого теста и не весь установочный код.

Ответ 4

Вам могут помочь две системы тестирования производительности.

Оба они вдохновлены платформой Google Test и обеспечивают интерфейс для поддержки тестирования производительности, поэтому его легко переносить исходный googletest на Hayai или SkyPat.

SkyPat объединяет модульные тесты и perf_evnet. Он расширяет концепцию Google Test и предоставляет интерфейс для доступа к PMU. perf_event дает SkyPat точные подсчеты циклов, которые полезны для инструментов, чувствительных к дисперсии времени, таких как компиляторы. SkyPat также может профилировать кусок кода событиями PMU (экв: циклы, инструкции, ссылка на кеш, пропустить кеш и т.д.).

Hayai поддерживает несколько методов измерения производительности для разных ОС (Windows: QueryPerformanceCounter(), Linux: gethrtime(), Apple (OSX, iOS): mach_absolute_time()) в свою инфраструктуру тестирования производительности.