Несмотря на то, что производительность оборудования продолжает расти, оптимизация кода остается важной задачей. В недавно опубликованной статье исследователей из Имперского колледжа Лондона, Пола Билокона и Бурака Гундуза, рассматриваются шаблоны низкой задержки, которые особенно важны для приложений, таких как высокочастотная торговля ( HFT ). В HFT, где небольшие маржи компенсируются огромными объемами сделок, каждая миллисекунда имеет значение.
В то время как решения на базе FPGA (полевых программируемых вентильных матриц) часто используются в HFT благодаря их низкой задержке и высокой параллельности, основным языком программирования остается C++.
Авторы статьи выделяют несколько очевидных методов оптимизации, таких как предварительная загрузка кеша ЦП, использование constexpr , разворачивание циклов и инлайнинг. Однако есть и менее очевидные паттерны, например, разделение горячих и холодных путей (hotpath vs coldpath). Этот подход перекликается с паттерном уменьшения ветвлений и заключается в разделении часто и редко исполняемого кода (например, обработка ошибок и ведение логов). Это улучшает использование кеша ЦП и предотвращает ошибочные предсказания ветвлений, что подтверждают тесты с использованием Google Benchmark. Все шаблоны проектирования также можно найти в репозитории GitHub .
Другие интересные моменты включают влияние сравнения знаковых и беззнаковых чисел, смешивание типов данных с плавающей запятой и программирование без блокировок с использованием кольцевого буфера. Единственное, что не рассмотрено в статье, это доступ к памяти с выравниванием и без него, а также оптимизации без копирования данных, но эти улучшения можно легко добавить и протестировать наряду с остальными оптимизациями.
Таким образом, даже в эпоху мощных аппаратных средств, оптимизация кода играет ключевую роль в обеспечении максимальной производительности, особенно в таких требовательных областях, как высокочастотная торговля.