Циклы, потребляемые в каждой функции через 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 или любым другим инструментом профилировщика.