Как стать автором
Обновить

Комментарии 4

Каждый программист должен знать, что ни один компилятор не сможет заменить пузырьковую сортировку на quick/heap/mergesort, поэтому разработчику следует сосредоточиться на алгоритме, а об использовании кеша/выделении регистров нужно задумываться не раньше запуска профайлера.
Писать, уж простите, кучу говнокода, сваливая в кучу boost::tuple, boost::variant, std::map<std::string, std::vector<std::set<..>>>, уповая на силу аббревиатур PGO и LTO ни в коем случае нельзя.
P. S. навеяно непреодолимой тягой немалого количества C++-программистов приёмам из однострочников на perl/python/ruby (посчитать количество запятых в строке? Легко: string.split.size() и т. п.)
Абсолютно согласен и с вами, и с автором статьи. Читаемый код, дизайн архитектуры проекта и эффективные алгоритмы первичны. Но хотелось бы добавить, что для каждого правила есть исключение: бывают такие места, в которых производительность нужно прокачивать до максимума. Преждевременные оптимизации это зло, и не нужно повсеместно их запихивать, но в ряде случаев приходится задумываться о производительности заранее. И это не обязательно трудночитаемый говнокод. Например, есть специальные структуры данных и алгоритмы, которые используют особенности кеша процессора для увеличения эффективности (см. Cache-Conscious Binary Search). И в такие моменты очень полезны знания об оптимизация компилятора и об особенностях целевого железа. Но если программист собирается пойти этой дорогой, то он должен отчётливо понимать, что это действительно необходимо.
У меня есть подозрения, что то что вы написали — это не то, что нужно знать программисту об оптимизации)

На мой взгляд, важнее рассмотреть другие вопросы

1. Что в принципе может быть оптимизировано, а что нет. Ну, например, вы никогда не сможете заинлайнить через границу библиотек, да и собрать большой проект с LTCG у вас не получится, скорее всего
2. Насколько хорошо какой код поддается оптимизации. Как известно, огромные многоэтажные конструкции из шаблонов часть компилируются в nope, а «старый добрый сишный код» не может быть даже заинлайнен (привет qsort vs std::sort).
3. Как стандартными методами помочь компилятору оптимизировать код, в частности, влияние модификаторов constexpr, static; copy elision
Ну, это не я написал, я только перевёл. =)
С вами согласен, безусловно полезные знания.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий