Циклы, потребляемые в каждой функции через Oprofile

Oprofile работает по теории выборки. Опция Opreport -l предоставляет нам отчет о профилировании следующим образом:

samples% image name имя символа 78149    15.0776  cvqa                     comp_corr.clone.2

С помощью этой информации я могу узнать% возраста времени, потребляемого в потреблении. Если я сделаю некоторую оптимизацию в своем коде, я снова получу отчет как:

образцы% имя изображения имя символа
73179    15.0732  cvqa                     comp_corr.clone.2

В этом отчете я не получаю информацию о том, сколько было проведено оптимизации циклов, чтобы я мог провести сравнительный анализ. Сколько оптимизации было сделано до сих пор?

Есть ли какой-нибудь способ, которым мы можем узнать, сколько было выполнено оптимизации циклов, или каким-либо другим способом, с помощью которого я могу оценить результат?

Я работаю на 64-битной машине AMD.

1 ответ

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

Главное, чтобы измерить это общее время, а не циклы или время различных процедур.

Теперь, как сделать оптимизацию. Не основывайте это на каких-либо измерениях. Скорее получите несколько образцов состояния программы и (это ключевой момент) изучите каждый образец достаточно внимательно, своими глазами и мозгом, и поймите, что программа делает в этом состоянии, и полную причину, почему это так. Делать это. (Вы увидите все, что стоит исправить, чтобы статистика могла раскрыть, плюс вещи, которые они не смогли раскрыть, и в этом вся разница.)

Как только вы поймете это в процессе выполнения, на двух или более образцах что-то, что может быть удалено, исправление даст вам существенное ускорение. Вот объяснение того, почему это работает и насколько вы можете ожидать ускорения. После того, как вы это сделаете, вы можете снова выполнить общее измерение времени и посмотреть, сколько времени вы сэкономили.

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

По моему опыту, с реальным программным обеспечением это можно сделать целых 5 или 6 раз, после чего программа может быть на несколько порядков быстрее, чем была изначально. Причина в том, что каждая оптимизация удаляет часть первоначального времени выполнения, и эти доли могут накапливаться почти до 100%. Я не знаю ни о каком таком результате, достигнутом с Oprofile или любым другим инструментом профилировщика.

Другие вопросы по тегам