使用并行计算统计文本中字母的频率。
并行是指把那些同样可以顺序完成的事情并行地做。一个常见的例子就是统计字母的频率。利用并行计算来算出文本数组中每个字母的总频率。
在 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
从 17 版起,Clang 的 libc++ 对并行算法提供实验性的部分支持。
要启用它,需要加上 -fexperimental-library 编译器标志。
Apple Clang 15 及更早版本不支持并行算法。
在 Linux 和 macOS 上,我们建议这个练习使用 GCC(以及默认的 libstdc++)。
微软的 MSVC 至少从 VS 2017 15.7 起就支持并行算法,无需安装任何额外的库。