Я ищу инструмент анализа кода / профилирования для C ++ на MacOS. Я знаю, что были сообщения об этой теме, но моя заявка, в которой я нуждаюсь, очень конкретна, так что, возможно, можно дать мне немного более конкретный совет.
Итак, вот моя проблема: я пишу научный код (магистерский проект) на C ++, так что это чисто консольное приложение, без интерактивности. Код должен работать на массивно параллельных компьютерах, поэтому я использую MPI. Однако сейчас я пока не оптимизирую для масштабируемости, а только для одноядерной производительности. Поскольку я не хочу переписывать всю программу как последовательную, я просто использую MPI с 1 потоком. Он работает нормально, но оптимизатор, очевидно, должен уметь с этим справляться.
Что я хочу проанализировать? Ну, код не очень сложен в том смысле, что он имеет очень простую структуру, и поэтому все, что мне нужно, это список того, как долго программа тратит на определенные функции, так что я знаю, где она теряет больше всего времени, и могу измерить ускорение моей оптимизации.
Спасибо за все идеи
Вы должны использовать Instruments.app который включает в себя сэмплер процессора и просмотрщик активности потоков … среди прочего. (Выберите «Продукт> Профиль …» в XCode)
Если вы хотите что-то более детальное, вы можете использовать свой код. По совпадению я написал набор профилирующих макросов как раз для такого случая 🙂
https://github.com/nielsbot/Profiler
Это покажет хороший вложенный отпечаток времени, потраченного на инструментированные процедуры. (инструкции на этой странице)
Вы пробовали kcachgrind: http://kcachegrind.sourceforge.net/html/Home.html с валгриндом?
Я могу порекомендовать http://www.scalasca.org/ . Вы можете использовать его также для параллельного исполнения впоследствии.
Не ищите «медленные функции» и не пытайтесь измерить время, используемое различными частями. Эти понятия настолько косвенны, что почти бесполезны, чтобы говорить вам, что оптимизировать.
Вместо этого, возьмите несколько стробоскопических рентгеновских снимков на время настенных часов о том, что делает вся программа, и изучите каждый из них, чтобы понять, почему программа тратит этот момент времени.
Причина, по которой это работает лучше, заключается в том, что он не выглядит с функциональными очками. Это выглядит с помощью разноцветных очков, и вы можете сказать, должна ли программа делать то, что делает.
Это очень точно о выявлении больших проблем.
Это не точное измерение их, и это не обязательно.
Что происходит, когда вы просто делаете измерения, так это: вы получаете кучу чисел на кучу процедур. Вы смотрите на них и говорите «что это значит?».
Если это не говорит вам, что вы должны исправить, вы похлопываете себя по спине и говорите, что программа должна быть оптимальной.
На самом деле, возможно, есть кое-что, что вы могли бы исправить, но вы не могли понять это с помощью профилировщика.
Более того, если вы найдете его и исправите, он может раскрыть другие вещи, которые вы можете исправить, для еще большего ускорения.
Это то что случайная пауза около.