Проверьте эту ссылку и попробуйте этот метод.
Проблема с таким примером, как Мандельброт, заключается в том, что это не очень большая программа. В реальном программном обеспечении дерево вызовов становится намного глубже и более густым, поэтому вам нужно выяснить, в каждой строке или инструкции, какой процент времени он отвечает, и это всего лишь процент времени, в течение которого он находится в вызове. куча. Итак, вам нужно что-то, что делает выборку из стека вызовов и сообщает вам для каждой строки или инструкции, которая там появляется, на каком проценте выборок она находится. Не нужна высокая точность измерения - это один из мифов.
Для этого существуют инструменты: один - RotateRight / Zoom, а другой - LTProf. Лично я клянусь полностью ручным методом.
За последние пару дней у нас возникла проблема с производительностью в некотором коде здесь. Ручным методом нашел один способ сэкономить 40%. Затем я нашел способ сэкономить 40% сверх этого, в результате чего общая экономия составила 64%. Это всего лишь один пример. Вот пример экономии более 97%.
Добавлено: это имеет социальные последствия, которые могут ограничить потенциальное ускорение. Предположим, есть три проблемы. Проблема A (в вашем коде) занимает половину времени. Проблема B (в коде Джерри) занимает 1/4 времени, а проблема C (в вашем коде) занимает 1/8 времени. Когда вы сэмплируете, проблема A выскакивает на вас, и, поскольку это ваш код, вы исправляете ее, и теперь программа занимает половину исходного времени. Затем вы снова сэмплируете, и задача B (теперь 1/2) выскакивает на вас. Вы видите, что это в коде Джерри, поэтому вы должны объяснить это Джерри, стараясь не смущать его, и спросить, может ли он исправить это. Если он этого не сделает по какой-либо причине (например, это был его любимый код), то даже если вы исправите проблему C, время можно будет сократить только до 3/8 от исходного времени. Если он это исправит, вы можете исправить C и сократить время до 1/8 от исходного. Тогда может возникнуть другая проблема D (ваша): если вы ее исправите, время сократится до 1/16 от исходного времени, но если Джерри не исправит проблему B, вы не сможете добиться большего, чем 5/16. Вот почему социальное взаимодействие может быть абсолютно критическим в настройке производительности.
Единственный прием, который я видел, который работает (потому что он был использован на мне), - это представить информацию печальным извиняющимся тоном, как если бы это была ваша проблема, и настойчиво представлять информацию. . Извиняющийся тон рассеивает смущение, а настойчивость заставляет его думать об этом.
person
Mike Dunlavey
schedule
16.07.2010