Шаблоны проектирования C++ для приложений с малой задержкой

В то время как оптимизация производительности, по-видимому, потеряла свою актуальность в эпоху постоянно растущей производительности оборудования, все еще есть много веских причин потратить некоторое время на оптимизацию кода. В недавняя предварительная статья к [Paul Bilokon] и [Burak Gunduz] из Имперского колледжа Лондона особое внимание уделяется моделям с малой задержкой, которые актуальны для таких приложений, как высокочастотная торговля (HFT). В HFT небольшие маржи компенсируются прохождением через абсолютно огромные объемы сделок, все из которых опираются на чрезвычайно низкую задержку для получения всех преимуществ. Хотя решения на основе FPGA очень распространены в HFT из-за их низкой задержки и высокого параллелизма, C++ является основным языком, используемым за пределами FPGA.

Хотя многие из оптимизаций, перечисленных в статье, вполне очевидны, например, предварительный разогрев кэшей ЦП, использование constexprразворачивание цикла и использование встраивания, другие шаблоны менее очевидны, например hotpath против coldpath. Это перекрывается с шаблоном сокращения ветвлений, причем оба шаблона включают разделение часто и редко выполняемого кода (например, обработку ошибок и ведение журнала), улучшение использования кэшей ЦП и предотвращение неверных предсказаний ветвлений, как это наглядно демонстрируют тесты (с использованием Google Benchmark). Все шаблоны проектирования также можно найти в Репозиторий GitHub.

Другие интересные подробности — это влияние знаковых и беззнаковых сравнений, смешивание типов данных с плавающей точкой и, конечно, программирование без блокировок с использованием кольцевого буфера. В этом списке, похоже, отсутствуют только выровненный и невыровненный доступ к памяти и оптимизация нулевого копирования, но это должно быть простым дополнением для реализации и тестирования наряду с другими оптимизациями в этой статье.


ЧИТАТЬ  Рецепты дизайна: хитрости для детской комнаты

Source

Оцените статью
( Пока оценок нет )
Строительство. Ремонт. Садоводство