Conte a frequência das letras em textos usando computação paralela.
O paralelismo consiste em fazer em paralelo coisas que também podem ser feitas de forma sequencial. Um exemplo comum é contar a frequência das letras. Use o paralelismo para calcular a frequência total de cada letra em uma lista de textos.
Existem várias formas de alcançar paralelismo em C++. O executor online do Exercism oferece suporte a C++17, então você pode usar políticas de execução da biblioteca de algoritmos. Outra opção é gerenciar threads manualmente. No entanto, lembre-se de que criar uma thread é bastante custoso (usar um pool de threads ajudaria).
Ao trabalhar localmente, você pode, é claro, usar o que quiser. No entanto, uma solução que use bibliotecas não padrão provavelmente não vai funcionar com o executor online do Exercism.
Ao trabalhar localmente, você pode, opcionalmente, rodar um benchmark para ter uma ideia do ganho de velocidade de diferentes implementações.
Ativar a flag EXERCISM_INCLUDE_BENCHMARK do CMake habilita o benchmark:
cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .
A implementação da biblioteca padrão do C++ do GCC (libstdc++) depende da TBB.
Se a TBB não estiver disponível, uma versão sequencial será usada como alternativa, mesmo quando a execução paralela for solicitada.
No Ubuntu, você precisa instalar o pacote libtbb-dev:
apt-get install libtbb-dev
No macOS, você pode usar o Homebrew para instalar a TBB:
brew install tbb
O libc++ do Clang, a partir da versão 17, tem suporte experimental e parcial a algoritmos paralelos.
Para ativá-lo, é preciso passar a flag -fexperimental-library para o compilador.
O Apple Clang 15 e versões anteriores não oferecem suporte a algoritmos paralelos.
No Linux e no macOS, recomendamos usar o GCC (junto com o libstdc++ padrão) para este exercício.
O MSVC da Microsoft oferece suporte a algoritmos paralelos pelo menos desde o VS 2017 15.7, sem precisar instalar nenhuma biblioteca adicional.
Crie sua conta no Exercism para aprender e dominar C++ com 19 conceitos100 exercícios e mentoria humana de verdade, tudo de graça.
Exploramos as diferenças entre concorrência e paralelismo, vendo as diferentes abordagens adotadas por linguagens como JavaScript, Go, Elixir e Rust.