Название: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Hrundel от Май 19, 2014, 19:38 Всем привет,
нужно протестировать курсовой на утечку памяти. С профилированием до сих пор не сталкивался. Посоветуйте, чем лучше пользоваться? VTune CodeAnalyst AQtime Valgrind Что из этого больше подходит? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 19, 2014, 20:11 Valgrind хвалят.
И не путай профилирование с поиском утечки памяти. Профилирование - для сбора статистики. А поиск утечки это бядаа :) PS в 2 проектах, в которых я программно пытался найти утечку - не получилось. :) Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: OKTA от Май 19, 2014, 22:35 Dr.Memory мне помогал как-то на винде.
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Hrundel от Май 19, 2014, 23:12 Спасибо за советы. :)
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: panAlexey от Май 20, 2014, 09:34 А вопрос о профилировании тоже не маловажный.
Я знаю в кодеблоке есть интерфейс к профилировщику жпрофу. Было бы полезно закинуть такой же и в креатор. Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 20, 2014, 10:08 в VS2008+ имеется встроенный профилировщик. Точнее модуль, идущий в комплекте :)
Достаточно хороший для нахождения тормозящей функции :) Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: OKTA от Май 20, 2014, 10:19 Предлагаю всем начать профилировать винду для нахождения всех тормозящих функций ;D
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 20, 2014, 10:22 Давай исходники, а мы уж отпрофилируем :D
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: OKTA от Май 20, 2014, 10:32 С исходниками каждый может, а по WinDbg слабо? ;D
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: vizir.vs от Май 20, 2014, 10:48 Я использую в проектах валгринд. Вполне успешно. Удавалось с его помощью находить утечки и проблемные места
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: panAlexey от Май 20, 2014, 13:38 Я использую в проектах валгринд. Вполне успешно. Удавалось с его помощью находить утечки и проблемные места это линуксовая софтина. на форточках тоже нужно иногда юзать.Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: kamre от Май 20, 2014, 14:17 на форточках тоже нужно иногда юзать. Периодически использую по работе IBM Rational PurifyPlus for Windows (http://www-03.ibm.com/software/products/en/win). Вполне юзабельная штука, умеет встраиваться в MSVC. Например, можно ставить breakpoint на ошибки вроде Uninitialized Memory Read и сразу в отладчике смотреть как же это так получилось. Там же и профайлер есть вполне удобный.Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: panAlexey от Май 20, 2014, 16:00 на форточках тоже нужно иногда юзать. Периодически использую по работе IBM Rational PurifyPlus for Windows (http://www-03.ibm.com/software/products/en/win). Вполне юзабельная штука, умеет встраиваться в MSVC. Например, можно ставить breakpoint на ошибки вроде Uninitialized Memory Read и сразу в отладчике смотреть как же это так получилось. Там же и профайлер есть вполне удобный.чумово.... Особенно если для себя софтину смейкать надо, для домашнего пользования. Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Hrundel от Май 20, 2014, 19:05 Периодически использую по работе IBM Rational PurifyPlus for Windows (http://www-03.ibm.com/software/products/en/win). Только я ее на трекерах не нашел - а цена в штуку баксов, что-то не устраивает. :D Кстати, нашел неплохую статью по ошибкам в коде касающихся утечек и неправильной работы с памятью. У меня, да и у всех начинающих, это огромная проблема, поэтому оставляю линк на статью (http://logic.pdmi.ras.ru/csclub/sites/default/files/slides/20130429_dynamic_c_cpp_program_analysis-alexey_samsonov.pdf), буду очень рад комментариям всех продвинутых. Может быть, кто-то найдет ошибку или ложное высказывание. Спасибо, OKTA. Dr. Memory понравился. Но надо внимательно почитать. Кстати, в этой статье рассматривается работа и с этой программой. Еще одна просьба: выскажите мнение по поводу использования shared_ptr *(Shared Pointer STD). Спасибо. Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 20, 2014, 19:21 Еще одна просьба: выскажите мнение по поводу использования shared_ptr *(Shared Pointer STD). Спасибо. Ну я уже не раз высказывал. :)Использовать везде и всегда. После того, как разберетесь с умными указателями и начнете их использовать проблемы утечек памяти (и других ресурсов) перестанут вас волновать как класс. :) Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: OKTA от Май 20, 2014, 19:59 Нашел тему про shared_ptr. http://stackoverflow.com/questions/3628081/shared-ptr-horrible-speed
Правда ли? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 20, 2014, 21:15 Конечно медленнее. Там же внутри обертка с счётчиком.
Делали проект по приёму данных с оптоволокна - пришлось выкинуть нафиг все эти крутости аля "boost::shared_ptr". Ибо даже 10Гбит принять не могли - тормозило. Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 20, 2014, 21:29 Делали проект по приёму данных с оптоволокна - пришлось выкинуть нафиг все эти крутости аля "boost::shared_ptr". Ибо даже 10Гб принять не могли - тормозило. Мне даже страшно представить что вы с ними делали.Покажите пожалуйста как вы их использовали при приеме данных? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 20, 2014, 22:32 Не я, а коллега, яро доказывающий что обычный указатели - сакс, а shared - крутотень!
Задача простая была - приём структур, анализ, отбраковка, передача "чистых" данных дальше. Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 20, 2014, 22:58 Задача простая была - приём структур, анализ, отбраковка, передача "чистых" данных дальше. Вот это и не понятно. Как он использовал shared_ptr в этой задаче, что была просадка в скорости?Где здесь происходит интенсивная работа с указателями? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 21, 2014, 00:58 Везде где использовались указатели - данные. Структуры создаваемые из данных и иже с ним.
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 21, 2014, 06:03 Везде где использовались указатели - данные. Структуры создаваемые из данных и иже с ним. Это не убедительно. У меня (да и не только у меня) они используются в проектах с очень высокой нагрузкой и спокойно выдерживаю. Не представляю как указатели могут стать "бутылочным горлышком" при приеме и обработке данных.Получается, что у вас создание/использование указателя соизмеримо с самой обработкой? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: _OLEGator_ от Май 21, 2014, 09:07 Конечно медленнее. Там же внутри обертка с счётчиком. Можно подумать, что счетчик синхронизируется с сайтом майкрософт. Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Igors от Май 21, 2014, 10:33 поэтому оставляю линк на статью (http://logic.pdmi.ras.ru/csclub/sites/default/files/slides/20130429_dynamic_c_cpp_program_analysis-alexey_samsonov.pdf), Очень понравилось. В основном чтение статей сводится к запоминанию инфы (часто без всякого осмысления). Здесь пытаются пробудить "соображалку"Цитировать Является ли 64-битное чтение / запись атомарной операцией? За это допущение я получал :) В общем случае нет, адрес может быть не кратен 8. И вообще присваивание long long компилятор может выполнить как 2 int'ов. Поэтому строго tbb::atomicЦитировать class AbstractAction { Ну тут очевидно - родительский конструктор еще не вызван, а executor уже щемитсяpublic: AbstractAction(Executor *executor) { executor->add(this); ... } ... virtual void Run() = 0; } Однако о др вещах я без понятия - напр что то за "shadow" ??? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Igors от Май 21, 2014, 10:36 Получается, что у вас создание/использование указателя соизмеримо с самой обработкой? Такие случаи возможны (напр при работе с геометрией) - хотя не так уж частыНазвание: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 21, 2014, 11:19 Такие случаи возможны (напр при работе с геометрией) - хотя не так уж часты Покажите на примере. Только не нужно предлагать "синтетику". На синтетических тестах я могу показать, что и вызовы виртуальных методов сильно тормозят выполнение или конструкторы/деструкторы. Но в реальной жизни мы подобные издержки либо игнорируем, либо обходим изменяя алгоритм. В данном же случае, мы говорим про работу с сетью (прием/обработка/отправка), представляете задержки? Могут они быть соизмеримы? Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Igors от Май 21, 2014, 11:40 Покажите на примере. Только не нужно предлагать "синтетику". Так вот же и привели (знакомая задача)Нашел тему про shared_ptr. http://stackoverflow.com/questions/3628081/shared-ptr-horrible-speed В данном же случае, мы говорим про работу с сетью (прием/обработка/отправка), представляете задержки? Могут они быть соизмеримы? Та ну.. :) Зачем такие крайности? На всякое правило найдется исключение, это нормальноНазвание: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Bepec от Май 21, 2014, 11:57 Я не могу предоставить вам тест, ведь у меня теперь нет ПЛИС'а, щемящего поток инфы по оптоволокну :)
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 21, 2014, 12:17 Так вот же и привели (знакомая задача) Знакомая, только не понятно для чего автор использовать умный указатель со счетчиком? Это избыточно, есть другие умные указатели.И как раз про такие задачи я и писал: Но в реальной жизни ... обходим изменяя алгоритм. Для быстрого выделения одинаковых объектов лучше использовать пулы + unique_ptr, и это решение обгонит обычные указатели.Самый большой прирост дает именно алгоритмическая оптимизация, а не отказ от конструкторов/деструкторов и умных указателей. Та ну.. :) Зачем такие крайности? На всякое правило найдется исключение, это нормально Вы про какие крайности?Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Igors от Май 21, 2014, 12:53 Самый большой прирост дает именно алгоритмическая оптимизация, а не отказ от конструкторов/деструкторов и умных указателей. Все верно, только "отказ" надо заменить на "использование" :) Алгоритм там примерно такойНужно построить треугольники по множеству точек на плоскости. Строим вмещающий треугольник, затем добавляем в него точку за точкой. Добавленная попадает в какой-то треугольник, он разбивается на 3 новых. Затем ребра балансируются по Борису Николаевичу. Балансировка может вызвать изменение смежных тр-ков, в общем получается "волна" которая впрочем быстро затухает. Где-то видел анимацию видео, но навскидку не найду. В общем типичная задача где у "грамотного" возникают проблемы :) Знает-то он может и много, но вот возиться со всем этим не хочет. Бросается "изыскивать" готовое - что далеко не всегда приемлемо. А оптимизировать самому - так это ж велосипед! Умные указатели, bidirectional iterators и.т.п. - все это здесь "до одного места", знаток "не в своей тарелке" :). Поэтому человек с куда более скромными познаниями - но делающий задачу охотно, с желанием добивается лучших результатов. Да, по поводу "балансировки", базовая задача: Есть выпуклый 4-угольник на плоскости. Каким образом лучше разбить его на 2 треугольника? Др словами сформулировать критерий/правила "лучше" Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 21, 2014, 13:48 Все. По делу сказать нечего. :)
Сразу вспомнились ужасы умных указателей и страшных итераторов... Уууу. :) В общем типичная задача где у "грамотного" возникают проблемы :) Да у "грамотных" всегда и все вызывает проблему. Вы уж смеритесь. :)Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Igors от Май 22, 2014, 09:12 Все. По делу сказать нечего. :) Ну хорошо хоть реагируете спокойно :) Не ужасы, просто в задаче роль этих вещей может быть ничтожно мала по сравнению напр с деталями алгоритма, организацией данных и др. Поэтому не следует переоценивать "умность" указателей (как и пользующихся ими :)) Сразу вспомнились ужасы умных указателей и страшных итераторов... Уууу. :) Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Old от Май 22, 2014, 09:14 Поэтому не следует переоценивать "умность" указателей (как и пользующихся ими :)) А кроме вас их никто не переоценивает. :)Ими просто пользуются. :) Это удобно. :) Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: Hrundel от Май 22, 2014, 19:50 А если сравнивать shared_ptr и QSharedPointer - отличия есть?
Название: Re: Чем лучше всего профилировать Qt-ешные программы? Отправлено: ViTech от Май 25, 2014, 16:11 А если сравнивать shared_ptr и QSharedPointer - отличия есть? Когда-то проводил такие тесты, может пригодится :). Проект во вложении. |