Моя работа в основном связана с высокоэффективными "научными" вычислениями. Я занимаюсь этим уже 15 лет, но только недавно понял, что мое программное обеспечение тратит время на сборку. Короче говоря: мои способы написания эффективного кода на С++ больше не работают.
Время от времени я вижу фрагмент кода, написанный каким-то ребенком, который делает в основном те же вычисления, что и мой (тот же алгоритм, похожий подход), но - волшебным! - выполняет намного быстрее. В большинстве случаев я даже не могу отслеживать происхождение разницы!
Мой вопрос: как я могу научиться искусству современной оптимизации кода на С++? Возможно, что-то в SSE, проблемах с кешированием/памятью? Любое предложение книги, PDF, статьи, упражнения или веб-сайта приветствуется!
PS. Я хорошо знаю трюки, которые либо:
- Слишком общий (например, "Использовать профилировщик", "Использовать хорошие алгоритмы", "Перейти к многопоточному" )
- Тривиальный (например, "Избегайте виртуальных функций", "Do ++ я вместо я ++", "Enable -O3" )
- Сомнительный (например, "Повторное использование памяти с reinterpret_cast < > ", "Tabularize sine и cosine", "Write inline assembly" )
- Смешно (например, "Сделать шаблон метапрограммирование" )
Это не, о чем я прошу.