Padrões de design em C++ para aplicações de baixa latência
- Autores: Paul Bilokon, Burak Gunduz
- Data de submissão: 8 de setembro de 2023
- Tema: otimização de código de baixa latência, com foco especial em sistemas de trading de alta frequência (HFT)
Principais contribuições
- Criação de um repositório de programação de baixa latência: um guia prático, incluindo benchmarking estatístico rigoroso
- Otimização de uma estratégia de arbitragem estatística neutra ao mercado: melhorias significativas em velocidade e lucratividade
- Implementação em C++ do padrão Disruptor: melhor desempenho do que métodos tradicionais de enfileiramento
Métricas de avaliação
- velocidade
- uso de cache
- significância estatística, entre outros
Principais técnicas
- Aquecimento de cache: redução da latência por meio da inicialização do cache
- Constexpr: melhora de desempenho com avaliação de constantes em tempo de compilação
Direções futuras
- expansão do repositório
- teste dos algoritmos de trading otimizados em ambientes de negociação em tempo real
- integração do padrão Disruptor com algoritmos de trading para benchmarking abrangente do sistema
Público-alvo
- profissionais da academia e da indústria
Resumo do GN⁺
Este artigo aborda padrões de design para melhorar o desempenho de aplicações de baixa latência, especialmente sistemas de trading de alta frequência. O repositório de programação de baixa latência e a implementação do padrão Disruptor podem servir como um guia útil para profissionais. Técnicas como aquecimento de cache e constexpr contribuem bastante para a redução da latência. Este artigo será muito útil para quem tem interesse em otimização de desempenho.
1 comentários
Comentários do Hacker News
É uma introdução simples ao tema
Estudantes de graduação já conhecem os elementos básicos de otimização de desempenho
Surpreende que não tenha abordado
false sharing, um fator de degradação de desempenhoTambém surpreende que não tenha abordado atributos de dica de otimização (
[[likely]],[[unlikely]])Não cobre elementos avançados de otimização de desempenho
O que um programador de baixa latência precisa é de cautela com alocações e cópias desnecessárias
Ao escrever um servidor de baixa latência, percebeu-se que operações de vector IO são mais lentas do que copiar pequenos objetos para um buffer contíguo
Os resultados de teste fornecem estatística t e valor p
Essa parte parece ter sido escrita com uso de LLM
O exemplo de analisar o preço de fechamento uma vez por dia durante 5 anos e calcular o spread com latência de 65 microssegundos é estranho
Compartilha uma implementação de bolsa de valores escrita em C++
Escreveu uma biblioteca de logging em C++
A eficiência do dispatch em tempo de compilação vem do fato de a decisão da chamada de função ser feita na fase de compilação
Compartilha materiais de uma palestra da CppCon 2017
Questiona se há alguma razão para a existência de high-frequency trading