使用平行運算計算多段文字中字母出現的頻率。
平行運算的重點,在於把那些也能循序完成的工作改成同時進行。 常見的例子就是計算字母出現的頻率。 請運用平行運算,計算由多段文字組成的陣列中,每個字母的總出現頻率。
在 C++ 中有幾種方式可以達到平行處理。 Exercism 的線上執行器支援 C++17,因此你可以使用演算法程式庫中的執行政策。 另一個選擇是手動管理執行緒。 不過要注意,建立執行緒的成本相當高(改用執行緒集區會有所幫助)。
在本機開發時,你當然可以使用任何你想要的工具。 不過,使用非標準程式庫的解法很可能無法在 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++)。
微軟的 MSVC 至少從 VS 2017 15.7 起就支援平行演算法,不需要安裝任何額外的程式庫。