Hasty Briefsbeta

双语

Simple generic parallelism idiom & C++17 specifics - Bert Hubert's writings

a day ago
  • 问题:一个循环速度太慢,需要跨多个线程并行化。
  • 一种简单、与语言无关的做法是使用原子计数器和 for 循环在线程之间公平分配工作。
  • 工作线程 lambda 中的 for 循环反复从原子计数器获取下一个索引,直到所有项都被处理完。
  • 线程被手动启动和加入,从而完全控制线程数量。
  • C++17 提供了类似 std::for_each 与 std::execution::par 的并行算法,可以一行代码实现。
  • C++17 的并行算法可能需要 OneTBB 库,而且并不总是真正并行执行(例如在 std::map 上)。
  • 原子计数器方法很健壮,适用于任何支持原子操作和线程的语言。
  • 测试至关重要,因为并行化可能因内存访问限制而无法加速代码。