Zähle die Häufigkeit der Buchstaben in Texten mithilfe paralleler Berechnung.
Bei Parallelität geht es darum, Dinge parallel zu erledigen, die man auch nacheinander erledigen kann. Ein häufiges Beispiel ist das Zählen der Buchstabenhäufigkeit. Nutze die Parallelität, um die Gesamthäufigkeit jedes Buchstabens in einer Liste von Texten zu berechnen.
Es gibt mehrere Möglichkeiten, in C++ Parallelität zu erreichen. Der Online-Runner von Exercism unterstützt C++17, du kannst also Ausführungsrichtlinien (execution policies) aus der Algorithmus-Bibliothek verwenden. Eine andere Möglichkeit ist, Threads manuell zu verwalten. Beachte jedoch, dass das Erzeugen eines Threads recht teuer ist (ein Thread-Pool würde helfen).
Wenn du lokal arbeitest, kannst du natürlich verwenden, was du willst. Eine Lösung, die Nicht-Standard-Bibliotheken verwendet, wird jedoch höchstwahrscheinlich nicht mit dem Online-Runner von Exercism funktionieren.
Wenn du lokal arbeitest, kannst du optional einen Benchmark ausführen, um eine Vorstellung von der Geschwindigkeitssteigerung verschiedener Implementierungen zu bekommen.
Wenn du das CMake-Flag EXERCISM_INCLUDE_BENCHMARK aktivierst, wird der Benchmark aktiviert:
cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .
Die Implementierung der C++-Standardbibliothek durch GCC (libstdc++) beruht auf TBB.
Wenn TBB nicht verfügbar ist, wird auf eine sequenzielle Version zurückgegriffen, selbst wenn eine parallele Ausführung angefordert wird.
Unter Ubuntu musst du das Paket libtbb-dev installieren:
apt-get install libtbb-dev
Unter macOS kannst du Homebrew verwenden, um TBB zu installieren:
brew install tbb
Clang libc++ hat ab Version 17 eine experimentelle, teilweise Unterstützung für parallele Algorithmen.
Um sie zu aktivieren, muss das Compiler-Flag -fexperimental-library angegeben werden.
Apple Clang 15 und früher unterstützen parallele Algorithmen nicht.
Unter Linux und macOS empfehlen wir für diese Übung die Verwendung von GCC (zusammen mit dem standardmäßigen libstdc++).
Microsofts MSVC unterstützt parallele Algorithmen mindestens seit VS 2017 15.7, ohne dass eine zusätzliche Bibliothek installiert werden muss.
Melde dich bei Exercism an, um C++ mit 19 Konzepte100 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.
Wir schauen uns die Unterschiede zwischen Nebenläufigkeit und Parallelität an und betrachten verschiedene Ansätze, die Sprachen wie JavaScript, Go, Elixir und Rust wählen.