トラック
/
C++
C++
/
演習
/
並列文字頻度
並列文字頻度

並列文字頻度

中級

説明

並列計算を使って、テキストに含まれる文字の出現頻度を数えましょう。

並列処理とは、順番に実行することもできる物事を、並行して行うことです。よくある例が、文字の出現頻度を数えることです。並列処理を活用して、テキストの配列に含まれる各文字の出現頻度の合計を計算しましょう。

C++実装に関する追加の注意

C++で並列処理を実現するには、いくつかの方法があります。 ExercismのオンラインランナーはC++17に対応しているため、アルゴリズムライブラリの実行ポリシーを利用できます。 もう1つの方法は、スレッドを手動で管理することです。 ただし、スレッドの生成にはかなりコストがかかる点に注意してください(スレッドプールを使うと助けになります)。

ローカルで作業するときは、もちろん好きなものを使えます。 ただし、非標準のライブラリを使った解答は、おそらくExercismのオンラインランナーでは動きません。

ベンチマーク

ローカルで作業するときは、さまざまな実装でどれだけ速くなるかを知るために、任意でベンチマークを実行できます。 CMakeのフラグEXERCISM_INCLUDE_BENCHMARKを有効にすると、ベンチマークが有効になります:

cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .

並列アルゴリズムのコンパイラーサポート

GCCによるC++標準ライブラリ(libstdc++)の実装は、TBBに依存しています。 TBBが利用できない場合は、並列実行を指定しても、逐次版にフォールバックします。

Ubuntuでは、libtbb-devパッケージをインストールする必要があります:

apt-get install libtbb-dev

macOSでは、Homebrewを使ってTBBをインストールできます:

brew install tbb

Clangのlibc++は、バージョン17の時点で、並列アルゴリズムを試験的に部分的にサポートしています。 有効にするには、コンパイラーフラグ-fexperimental-libraryを指定する必要があります。

Apple Clang 15以前は、並列アルゴリズムを_サポートしていません_。

LinuxとmacOSでは、この演習にはGCC(デフォルトのlibstdc++と合わせて)を使うことをおすすめします。

MicrosoftのMSVCは、少なくともVS 2017 15.7以降、追加のライブラリをインストールすることなく並列アルゴリズムをサポートしています。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C++ Exercism

並列文字頻度を始める準備はできましたか?

Exercismに登録すれば、19個のコンセプト100個の演習、そして本物の人間によるメンタリングとともに、C++を学んでマスターできます。すべて無料です。

並列文字頻度を深く掘り下げよう!

並行性と並列性の違いを探りながら、JavaScript、Go、Elixir、Rustなどの言語が取るさまざまなアプローチを見ていきます。