AdaptiveCpp 24.10

AdaptiveCpp 24.10: A nova era da programação heterogênea em C++

Explorando os recursos e melhorias de desempenho da nova versão do AdaptiveCpp.

AdaptiveCpp 24.10: A nova era da programação heterogênea em C++

O AdaptiveCpp 24.10 acaba de ser lançado, consolidando sua posição como uma das implementações mais avançadas de SYCL e paralelismo padrão do C++ para CPUs e GPUs. Projetado para funcionar em uma ampla variedade de hardware, este compilador traz recursos inovadores e otimizações de desempenho ainda mais poderosas.

Novidades do AdaptiveCpp 24.10

1. Desempenho elevado com otimizações em JIT

A versão 24.10 introduz otimizações adicionais em tempo de compilação JIT (Just-In-Time), prometendo melhorias substanciais de desempenho para diversos kernels. Para potencializar a performance, foi adicionado o novo recurso ACPP_ALLOCATION_TRACKING=1, que permite rastrear o uso de memória e aprimorar ainda mais a geração de código.

2. Suporte total a algoritmos de grupo SYCL 2020

O AdaptiveCpp agora suporta completamente a biblioteca de algoritmos de grupo SYCL 2020 em todos os seus backends. Isso abre novos horizontes para desenvolvedores que utilizam programação paralela.

3. Biblioteca de algoritmos acpp::algorithms

Com a nova biblioteca acpp::algorithms, é possível acessar algoritmos avançados diretamente em SYCL, oferecendo mais controle e flexibilidade aos usuários.

Principais recursos adicionados

  1. Novos Algoritmos da STL Paralela para Offloading em GPU:
    • std::inclusive_scan
    • std::exclusive_scan
    • std::transform_inclusive_scan
    • std::transform_exclusive_scan
    • std::merge
    • std::sort
Nota: Algumas dessas implementações ainda possuem espaço para otimizações futuras.
  • Framework de Reflexão em JIT:
    Esse recurso facilita a especialização de código para diferentes alvos, como tipos de hardware, diretamente no momento da compilação.
  • Extensões Inovadoras:
    • AdaptiveCpp_restrict_ptr: Introduz semânticas de noalias/__restrict__ para argumentos de ponteiro em kernels.
    • AdaptiveCpp_jit::compile_if: Uma API poderosa para especialização de código com base em propriedades conhecidas apenas em tempo de compilação JIT.
  • Benchmarks: AdaptiveCpp vs. CUDA e outras tecnologias

    Os benchmarks mostram o AdaptiveCpp como uma solução competitiva e, em alguns casos, superior ao NVIDIA CUDA e outras alternativas, como oneAPI e HIP:

    • Desempenho em GPUs NVIDIA: A configuração padrão do AdaptiveCpp (ACPP_ADAPTIVITY_LEVEL=1) já entrega resultados expressivos, enquanto o nível 2 (AL2) pode melhorar ainda mais após 2-3 execuções do aplicativo.
    • GPUs AMD: Superou HIP e oneAPI em testes específicos.
    • GPUs Intel: Apresentou resultados sólidos com seu backend OpenCL.

    Para detalhes completos e gráficos, consulte os benchmarks na página oficial do GitHub.

    Os desenvolvedores são incentivados a explorar o guia de desempenho oficial, que inclui dicas práticas para ajustar configurações e aproveitar ao máximo os novos recursos, como o JIT otimizado.

    Teste o AdaptiveCpp 24.10 hoje mesmo e descubra como ele pode transformar seu fluxo de trabalho em programação heterogênea. Confira os detalhes e faça o download aqui. Compartilhe sua experiência e contribua para a comunidade!

    Emanuel Negromonte Autor
    Autor
    Jornalista especialista em Linux a mais de 20 anos. Fundador do SempreUpdate e entusiasta do software livre.