Cuenta la frecuencia de las letras en textos usando computación paralela.
El paralelismo consiste en hacer en paralelo cosas que también se pueden hacer de forma secuencial. Un ejemplo común es contar la frecuencia de las letras. Usa el paralelismo para calcular la frecuencia total de cada letra en una lista de textos.
Hay varias formas de lograr paralelismo en C++. El ejecutor en línea de Exercism admite C++17, así que puedes usar las políticas de ejecución de la biblioteca de algoritmos. Otra opción es gestionar los hilos manualmente. Sin embargo, ten en cuenta que crear un hilo es bastante costoso (usar un pool de hilos ayudaría).
Cuando trabajas de forma local, por supuesto que puedes usar lo que quieras. Sin embargo, es muy probable que una solución que use bibliotecas no estándar no funcione con el ejecutor en línea de Exercism.
Cuando trabajas de forma local, puedes ejecutar un benchmark de manera opcional para hacerte una idea de la aceleración que ofrecen las distintas implementaciones. Si activas la opción EXERCISM_INCLUDE_BENCHMARK de CMake, habilitas el benchmark:
cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .
La implementación de GCC de la biblioteca estándar de C++ (libstdc++) depende de TBB. Si TBB no está disponible, se usará una versión secuencial como respaldo, incluso cuando se solicite una ejecución paralela.
En Ubuntu, necesitas instalar el paquete libtbb-dev:
apt-get install libtbb-dev
En macOS, puedes usar Homebrew para instalar TBB:
brew install tbb
libc++ de Clang, a partir de la versión 17, tiene compatibilidad parcial y experimental con los algoritmos paralelos. Para activarla, hay que pasar la opción de compilador -fexperimental-library.
Apple Clang 15 y versiones anteriores no admiten los algoritmos paralelos.
En Linux y macOS, te recomendamos usar GCC (junto con el libstdc++ predeterminado) para este ejercicio.
El MSVC de Microsoft admite los algoritmos paralelos al menos desde VS 2017 15.7, sin necesidad de instalar ninguna biblioteca adicional.
Regístrate en Exercism para aprender y dominar C++ con 19 conceptos100 ejercicios y mentoría humana real, todo gratis.
Exploramos las diferencias entre concurrencia y paralelismo, viendo los distintos enfoques que adoptan lenguajes como JavaScript, Go, Elixir y Rust.