Это скорее примечание, чем ответ, но оно не совсем вписывается в комментарий, поэтому я надеюсь, что вы не будете относиться к нему против меня.
Термин «профилирование» имеет несколько связанных, но разные значения.В абстрактном контексте это означает «измерение» вашей программы, обычно по отношению к определенным данным времени выполнения.Однако это не то же самое, что просто «синхронизация» вашей программы.Синхронизация - это одна из форм профилирования, но есть много других.
Например, предположим, что вы не уверены, должна ли какая-то структура данных быть std::set
(дерево) или std::unordered_set
(хеш-таблица).).Универсального ответа нет, поскольку он зависит от того, для чего вы его используете и какие данные вы обрабатываете.Вполне возможно, что вы не сможете знать правильный ответ, пока не укажете реальные, реальные данные, которые собираетесь использовать.В этом случае «профиль и решение» означает, что вы создаете две версии своей программы, запускаете их обе для ваших реальных данных и измеряете время выполнения.Вероятно, быстрее будет тот, который вам нужен.
С другой стороны, в GCC есть инструмент, который называется «профилировщик», который служит совсем другой цели.Если хотите, это профилировщик пути выполнения, который сообщает вам, где (то есть, в какой функции) ваша программа проводит большую часть своего времени.Если у вас сложный алгоритм с большим количеством подпрограмм, вы можете не знать, какие из них являются важными, и опять же, это может фактически зависеть от ваших реальных данных.В этом случае профилировщик может помочь вам определить, какие функции называются наиболее , учитывая ваши входные данные , и вы можете сосредоточить усилия по оптимизации на этих функциях.Теперь «профиль перед оптимизацией» означает, что вам нужно определить приоритеты перед началом работы.
При этом для сравнения, которое вы имеете в виду, вы не должны использовать профилировщик GCC.Скорее, выполните компиляцию на обеих платформах со всеми включенными оптимизациями и в условиях выпуска, а затем измерьте время выполнения для того же набора входных данных.