Я удивлен, что никто не предложил MPI (Интерфейс передачи сообщений). В то время как разработано для распределенной памяти, программы MPI с существенной и частой глобальной связью (решающий линейные и нелинейные уравнения с миллиардами неизвестных), как показывали, масштабировались к 200k ядрам.
Используя gcc
, я компилирую и связываю с -pg
(как объяснено, например, здесь ), затем продолжите, запустив программу (в соответствии с принципами, также предложенными для этого URL) и используя gprof
. Инструменты будут различаться, если вы используете разные компиляторы и c, но URL по-прежнему рекомендуется, даже в этом случае, для частей, которые касаются общих идей о том, как и почему профилировать ваш код.
gprof
. Инструменты будут различаться, если вы используете разные компиляторы и c, но URL по-прежнему рекомендуется, даже в этом случае, для частей, которые касаются общих идей о том, как и зачем профилировать ваш код. затем продолжите, запустив программу (в соответствии с принципами, также предложенными для этого URL) и используя gprof
. Инструменты будут различаться, если вы используете разные компиляторы и c, но URL по-прежнему рекомендуется, даже в этом случае, для частей, которые касаются общих идей о том, как и почему профилировать ваш код. Если вы используете Linux, я рекомендую комбинацию ValGrind и CallGrind и KCacheGrind . ValGrind - превосходный метод поиска утечек памяти, а расширение CallGrind - хороший профилировщик.
ПРИМЕЧАНИЕ : Я только что узнал , что ValGrind теперь также работает в Mac OSX. Однако CallGrind и KCacheGrind не обновлялись с 2005 г. Вы можете посмотреть другие интерфейсы .
Shark / Instruments (с использованием dtrace) - профилировщики, доступные на Mac. Они довольно хороши.
Итак, вы должны делать следующее: каждый раз, когда у вас есть новые данные для отображения, отправьте новую задачу JTextArea обновление содержимого, которое должно выполняться из EDT. Вы можете добиться этого с помощью SwingUtilities. Также неплохо Intel VTune .
Рад, что вы спросили: -) Если вы не возражаете против опровержения, проверьте эти ответы:
Позвольте мне попытаться выразить это в двух словах:
Программа ждет вас, или вы ее ждете? Если это не заставляет вас ждать, значит, у вас нет проблем, так что оставьте это в покое.
Если это заставляет вас ждать, то продолжайте.
Я рекомендую отбор проб, который является стробоскопическим 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
- доля выборок, содержащих строку.
Вот почему вам не нужно много образцов - вам не нужна большая точность. Что вам действительно нужно, так это то, что вам дают образцы стека - они указывают вам именно на наиболее ценные строки для оптимизации.
** Стандартное отклонение количества образцов составляет sqrt (f * (1-f) * nsamp)
где f
- доля выборок, содержащих строку.
Вот почему вам не нужно много образцов - вам не нужна большая точность. Что вам действительно нужно, так это то, что вам дают образцы стека - они указывают вам именно на наиболее ценные строки для оптимизации.
** Стандартное отклонение количества образцов составляет sqrt (f * (1-f) * nsamp)
где f
- доля выборок, содержащих строку.
Для завершения я бы добавил oprofile . Это особенно интересно, если вы хотите протестировать ядро.