Рекомендации для профилировщиков C?

Я удивлен, что никто не предложил MPI (Интерфейс передачи сообщений). В то время как разработано для распределенной памяти, программы MPI с существенной и частой глобальной связью (решающий линейные и нелинейные уравнения с миллиардами неизвестных), как показывали, масштабировались к 200k ядрам.

39
задан Michael 25 November 2009 в 05:19
поделиться

6 ответов

Используя gcc , я компилирую и связываю с -pg (как объяснено, например, здесь ), затем продолжите, запустив программу (в соответствии с принципами, также предложенными для этого URL) и используя gprof . Инструменты будут различаться, если вы используете разные компиляторы и c, но URL по-прежнему рекомендуется, даже в этом случае, для частей, которые касаются общих идей о том, как и почему профилировать ваш код.

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

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

28
ответ дан 27 November 2019 в 02:49
поделиться

Если вы используете Linux, я рекомендую комбинацию ValGrind и CallGrind и KCacheGrind . ValGrind - превосходный метод поиска утечек памяти, а расширение CallGrind - хороший профилировщик.

ПРИМЕЧАНИЕ : Я только что узнал , что ValGrind теперь также работает в Mac OSX. Однако CallGrind и KCacheGrind не обновлялись с 2005 г. Вы можете посмотреть другие интерфейсы .

13
ответ дан 27 November 2019 в 02:49
поделиться

Shark / Instruments (с использованием dtrace) - профилировщики, доступные на Mac. Они довольно хороши.

1
ответ дан 27 November 2019 в 02:49
поделиться
  1. Публикация ссылки JTextArea на другой поток не является правильно, потому что компоненты Swing основаны на MVC (на самом деле model-ui). Итак, ваш общий способ работы с компонентами Swing - это обновить их модели и позволить view (ui) отображать изменения;
  2. Другой момент заключается в том, что большинство компонентов Swing не являются поточно-ориентированными, т.е. что ваше приложение работает нормально, если вы используете компонент Swing из потока более чем EDT ;

Итак, вы должны делать следующее: каждый раз, когда у вас есть новые данные для отображения, отправьте новую задачу JTextArea обновление содержимого, которое должно выполняться из EDT. Вы можете добиться этого с помощью SwingUtilities. Также неплохо Intel VTune .

0
ответ дан 27 November 2019 в 02:49
поделиться

Рад, что вы спросили: -) Если вы не возражаете против опровержения, проверьте эти ответы:

Позвольте мне попытаться выразить это в двух словах:

  1. Программа ждет вас, или вы ее ждете? Если это не заставляет вас ждать, значит, у вас нет проблем, так что оставьте это в покое.

  2. Если это заставляет вас ждать, то продолжайте.

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

Если вы хотите получить много образцов, вам нужен профайлер. Если вам нужно всего несколько, кнопка паузы в отладчике работает нормально. По моему опыту, 20 более чем достаточно, а часто достаточно 5.

Почему? Предположим, у вас есть 1000 образцов стека вызовов. Каждый образец представляет собой отрезок времени настенных часов, который тратится только потому, что его запрашивала каждая отдельная строка кода в стеке . Итак, если есть строка кода, которая появляется в 557 выборках из 1000, вы можете предположить, что она отвечает за 557/1000 времени, плюс-минус несколько образцов (15). Это означает, что если все время выполнения обошлось вам в 100 долларов, эта строка стоит 55,70 долларов, плюс-минус 1,50 доллара **, так что вам следует посмотреть, действительно ли она вам нужна.

Но нужно ли вам 1000 образцов? Если эта линия стоит около 55,7% времени, то если вы взяли только 10 образцов, вы бы увидели это на 6 из них, плюс-минус 1,5 образца. Так что, если вы видите заявление на 6 из 10 образцов, вы знаете, что это стоит примерно от 45 до 75 долларов из этих 100 долларов. Даже если он стоит всего 45 долларов, разве вы не захотите узнать, действительно ли он вам нужен?

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

** Стандартное отклонение количества образцов составляет sqrt (f * (1-f) * nsamp) где f - доля выборок, содержащих строку.

Даже если он стоит всего 45 долларов, разве вы не захотите узнать, действительно ли он вам нужен?

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

** Стандартное отклонение количества образцов составляет sqrt (f * (1-f) * nsamp) где f - доля выборок, содержащих строку.

Даже если он стоит всего 45 долларов, разве вы не захотите узнать, действительно ли он вам нужен?

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

** Стандартное отклонение количества образцов составляет sqrt (f * (1-f) * nsamp) где f - доля выборок, содержащих строку.

2
ответ дан 27 November 2019 в 02:49
поделиться

Для завершения я бы добавил oprofile . Это особенно интересно, если вы хотите протестировать ядро.

2
ответ дан 27 November 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: