我需要做一个parallel_for。是否可以在标准C ++库或Boost中轻松实现此功能?我还没找到。
顺便说一句,我正在使用Ubuntu。所以我不想要Microsoft库。
答案 0 :(得分:2)
听起来您正在寻找openmp提供的功能:
#pragma omp parallel for
for (i = 0; i < n; ++i)
// do some work
然后使用-fopenmp
标志进行编译,如果您使用的是gcc。
OpenMP非常适合相对&#34;愉快地&#34;并行问题。
答案 1 :(得分:0)
我个人会认真看看OpenMP。这是一个很好的链接,可以帮助您入门,并解释如何编写并行for循环。
http://bisqwit.iki.fi/story/howto/openmp/
免责声明:我不确定标准C ++(包括最新标准)并且从未使用过boost。也就是说,我在过去需要进行并行处理时使用过OpenMP。
答案 2 :(得分:0)
自C ++ 17起,我们使用“执行策略”参数将大多数算法视为潜在的并行版本: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。
请注意,算法将自行决定它将有效并行运行以及如何并行运行。例如,如果没有足够的值来使并行运行的成本值得,那么在大多数实现中它将不会并行运行。请查阅您的标准库实现文档,以了解它们将使用的启发式方法。