c++中是否有parallel_for的boost函数?

Is there a boost function for parallel_for in C++?

本文关键字:boost 函数 for 是否 parallel c++      更新时间:2023-10-16

我需要做parallel_for。在标准c++库或Boost中是否有一个简单的实现?我没有找到它。

顺便说一下,我正在使用Ubuntu。所以我不想要微软的库

从c++ 17开始,我们使用"execution policy"参数将大多数算法作为潜在的并行版本:https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t

对于一个简单的For -each,算法将是for_each: https://en.cppreference.com/w/cpp/algorithm/for_each

std::vector<int> v = get_tons_of_values();
std::for_each(std::execution::par, std::begin(v), std::end(v), [](int i) {
   work(i);
});

在这个例子中,我们"要求"并行执行lambda。

请注意,算法将自行决定是否有效地并行运行以及如何并行运行。例如,如果没有足够的值使并行运行的成本值得,那么它将不会在大多数实现上并行运行。参考您的标准库实现文档,了解它们将使用的启发式方法。

听起来您正在寻找openmp提供的功能:

#pragma omp parallel for
for (i = 0; i < n; ++i)
  // do some work

然后使用-fopenmp标志进行编译,如果您使用gcc。

OpenMP对于相对"愉快"的并行问题来说是非常棒的。

我个人会仔细研究一下OpenMP。这里有一个很好的链接,可以帮助你开始,并解释如何编写并行for循环。

http://bisqwit.iki.fi/story/howto/openmp/

免责声明:我不确定标准c++(包括最新的标准),也从未使用过boost。也就是说,在过去需要进行并行处理时,我使用过OpenMP。