Оптимизация производительности, похоже, потеряла свою актуальность в эпоху постоянно растущей производительности оборудования. Однако есть много веских причин потратить время на оптимизацию кода. недавняя препринтная статья к [Paul Bilokon] И [Burak Gunduz] из Имперского колледжа Лондона, основное внимание уделяется моделям с низкой задержкой, которые подходят для таких приложений, как высокочастотная торговля (HFT). В HFT низкая прибыль компенсируется обработкой абсолютно огромного объема транзакций, при которой для получения всех преимуществ требуется чрезвычайно низкая задержка. Хотя решения на основе FPGA очень распространены в HFT из-за их низкой задержки и высокого параллелизма, C++ является основным языком, используемым помимо FPGA.
Хотя многие из оптимизаций, перечисленных в документе, вполне очевидны, например, разогрев кэшей ЦП с использованием constexpr
развертывание цикла и использование встраивания, другие шаблоны менее очевидны, например, «горячий путь» или «холодный путь». Это частично совпадает с моделью сокращения ветвей: обе модели включают разделение часто выполняемого и редко выполняемого кода (например, обработку ошибок и журналирование), улучшение использования кэша ЦП и прогнозирование ветвей для предотвращения ошибок, что наглядно продемонстрировано тестами производительности (с использованием Google Benchmark). Все шаблоны дизайна также можно найти в разделе Репозиторий GitHub.
Другие интересные идеи — это влияние знаковых и беззнаковых сравнений, смешивания типов данных с плавающей запятой и, конечно же, программирования без блокировок с использованием конструкции кольцевого буфера. Похоже, что в этом списке отсутствуют только выровненный и невыровненный доступ к памяти и оптимизация без копирования, но это должны быть простые дополнения для реализации и тестирования наряду с другими оптимизациями в этой статье.