Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Какой ваш любимый инструмент профилирования (для C++)
До сих пор я использовал только рациональную количественную оценку. Я слышал много хорошего о Intel VTune, но никогда не пробовал его!
Edit: я в основном ищу программное обеспечение, которое будет измерять код, поскольку я думаю, что это единственный способ получить очень хорошие результаты.
Смотреть также:
Каковы некоторые хорошие профилировщики для native C++ на Windows?
Для Linux: Google Perftools
- Быстрее, чем valgrind (но не настолько мелкозернистый)
- Не требует инструментирования кода
- Хороший графический вывод (--> программа)
- Выполняет ли профилирование памяти, cpu-профилирование, проверку на утечку
ИМХО, выборка с помощью отладчика -это лучший метод. Все, что вам нужно, это IDE или отладчик, который позволяет остановить программу. Он прибивает ваши проблемы с производительностью еще до того, как вы установите профилировщик.
Мой единственный опыт профилирования кода C++ связан с AQTime by AutomatedQA (теперь это программное обеспечение SmartBear). Он имеет несколько типов встроенных профилировщиков (производительность, память, дескрипторы Windows, трассировка исключений, статический анализ и т. д.), и инструменты кода, чтобы получить результаты.
Мне нравилось его использовать - всегда было интересно найти те места, где небольшое изменение в коде может значительно улучшить производительность.
Я никогда раньше не занимался профилированием. Вчера я запрограммировал класс ProfilingTimer со статическим расписанием (map<std::string, long long>) для хранения времени.
Конструктор сохраняет начальный ТИК, а деструктор вычисляет прошедшее время и добавляет его на карту:
ProfilingTimer::ProfilingTimer(std::string name)
: mLocalName(name)
{
sNestedName += mLocalName;
sNestedName += " > ";
if(sTimetable.find(sNestedName) == sTimetable.end())
sTimetable[sNestedName] = 0;
mStartTick = Platform::GetTimerTicks();
}
ProfilingTimer::~ProfilingTimer()
{
long long totalTicks = Platform::GetTimerTicks() - mStartTick;
sTimetable[sNestedName] += totalTicks;
sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}
В каждой функции (или {block}), которую я хочу профайлить, мне нужно добавить:
ProfilingTimer _ProfilingTimer("identifier");
Эта строка немного громоздка для добавления во все функции, которые я хочу профилировать, так как я должен угадать, какие функции занимают много времени. Но он работает хорошо, и функция печати показывает время, затраченное в %.
(Кто-нибудь еще работает с подобным "домашним профилированием"? Или это просто глупо? Но это же весело! Есть ли у кого-нибудь предложения по улучшению?
Есть ли какое-то автоматическое добавление строки ко всем функциям?)
Я широко использовал Glowcode в прошлом, и у меня не было ничего, кроме положительного опыта с ним. Его интеграция с Visual Studio действительно хороша, и это самый эффективный/интуитивно понятный профилировщик, который я когда-либо использовал (даже по сравнению с профилировщиками для управляемого кода).
Очевидно, что это бесполезно, если вы не работаете на Windows, но вопрос оставляет мне неясным, каковы именно ваши требования.
Для Windows проверьте Xperf . Он использует выборочный профиль, имеет некоторые полезные UI, & не требует инструментирования. Весьма полезно для отслеживания проблем с производительностью. Вы можете ответить на такие вопросы, как:
- Кто использует больше всего CPU? Детализация до имени функции с помощью стеков вызовов.
- Кто выделяет больше всего памяти?
- Кто делает больше всего запросов реестра?
- Диск пишет? и т.д.
Вы будете очень удивлены, когда обнаружите узкие места, так как они, вероятно, не там, где вы ожидали!
Существуют различные требования к профилированию. Инструментальный код в порядке, или вам нужно профилировать оптимизированный код (или даже уже скомпилированный код)? Вам нужна информация профиля line-by-line? Какой из OS вы запускаете? Нужно ли вам также профилировать общие библиотеки? А как насчет trace в системные вызовы?
Лично я использую oprofile для всего, что я делаю, но это может быть не лучшим выбором в каждом случае. Втун и акула тоже превосходны.
Для Windows я пробовал AMD Codeanalyst, Intel VTune и профилировщик в Visual Studio Team Edition.
Codeanalyst глючит (часто вылетает), и в моем коде его результаты часто неточны. Его UI является неинтуитивным. Например, чтобы перейти к отображению стека вызовов в результатах профиля, вам нужно нажать вкладку "Processes", затем нажать имя файла EXE вашей программы, а затем нажать кнопку панели инструментов с крошечными буквами "CSS" на ней. Но это бесплатная программа, так что вы можете попробовать ее, и она работает (с меньшим количеством функций) без процессора AMD.
VTune ($700) имеет ужасный пользовательский интерфейс IMO; в большой программе трудно найти конкретное дерево вызовов, которое вы хотите, и вы можете одновременно смотреть только на один "node" в программе (функция с ее непосредственными вызывающими и вызываемыми) - вы не можете смотреть на полное дерево вызовов. Существует представление графика вызовов, но я не смог найти способ, чтобы относительное время выполнения отображалось на графике. Другими словами, функции в графе выглядят одинаково независимо от того, сколько времени было потрачено на них-это как если бы они полностью пропустили момент профилирования.
Профилировщик Visual Studio имеет лучший GUI из трех, но по какой-то причине он не может собрать образцы из большинства моего кода (образцы собираются только для нескольких функций во всей моей программе C++). Кроме того, я не смог найти цену или способ купить его напрямую; но он поставляется с подпиской моей компании MSDN. Visual Studio поддерживает управляемый, машинный и смешанный код; я не уверен в отношении двух других профилировщиков в этом отношении.
В заключение, я еще не знаю хорошего профайлера! Я обязательно проверю другие предложения здесь.
Для разработки Windows я использовал валидатор производительности Software Verification - он быстрый, достаточно точный и по разумной цене. Еще лучше, что он может измерять запущенный процесс и позволяет включать и выключать сбор данных во время выполнения, как вручную, так и на основе callstack - отлично подходит для профилирования небольшого раздела более крупной программы.
Поскольку вы не упоминаете платформу, над которой работаете, я скажу cachegrind под Linux. Определенно. Это часть набора инструментов Valgrind.
http://valgrind.org/info/tools.html
Я никогда не использовал его подфункцию Callgrind, так как большая часть моей оптимизации кода предназначена для внутренних функций.
Обратите внимание, что имеется интерфейс KCachegrind.
Я использовал VTune под Windows и Linux в течение многих лет с очень хорошими результатами. Более поздние версии стали хуже, когда они передали этот продукт на аутсорсинг своей российской команде разработчиков, качество и производительность которой снизились (увеличились VTune сбоев, часто 15 + минут для открытия файла анализа).
Что касается инструментария, то вы можете обнаружить, что он менее полезен, чем вы думаете. В тех приложениях, над которыми я работал, добавление инструментария часто замедляет продукт настолько, что он больше не работает (реальная история: запуск приложения, Возвращение домой, возвращение на следующий день, инициализация приложения). Кроме того, с помощью неинструментального профилирования вы можете реагировать на живые проблемы. Например, с помощью VTune remote date collector я могу запустить сеанс выборки на реальном сервере с сотнями одновременных подключений, который испытывает проблемы с производительностью и улавливает проблемы, возникающие в рабочей среде, которые я никогда не смогу воспроизвести в тестовой среде.
Мой любимый инструмент-Easy Profiler: http://code.google.com/p/easyprofiler/
Это профилировщик времени компиляции : исходный код должен быть вручную инструментирован с помощью набора подпрограмм, чтобы описать целевые области. Однако после запуска приложения и автоматической записи мер в файл XML достаточно открыть приложение Observer и сделать несколько щелчков по инструментам анализа / сравнения, чтобы увидеть результат в качественной диаграмме.
Позвольте мне дать пробку для EQATEC... как раз то, что я искал... простой в освоении и использовании и дает мне информацию, необходимую для быстрого поиска горячих точек. Я намного предпочитаю его тому, который встроен в Visual Studio (хотя я еще не пробовал VS 2010, чтобы быть справедливым).
Возможность делать снимки - это HUGE. Я часто получаю дополнительный анализ и оптимизацию, ожидая запуска реального целевого анализа... любить это.
О, и его базовая версия бесплатна!
http://www.eqatec.com/Profiler/