【发布时间】:2018-03-14 15:13:07
【问题描述】:
有一个循环。
for (int i = 0; i < n; ++i) {
//...
v[i] = o.f(i);
//...
}
每个v[i] = o.f(i) 都独立于所有其他v[i] = o.f(i)。n 可以是任何值,并且不能是核心数的倍数。使用所有内核执行此操作的最简单方法是什么?
【问题讨论】:
-
试试
tbb库。 -
@Ufx:
v[i] = o.f(i);的开销是否足以值得将它们移植到其他内核然后同步结果?如果没有,请不要打扰。 -
使用 c++11
std::async是一种并行化作业的简单方法。使用 c++17,您可以提供运行std::for_each和 execution policy。 -
@Ufx 这些都是标准库的特性。如果“标准”是指 c++03,它并不比 c++11 和 c++17 更标准,只是语言的不同版本。当人们谈论标准 c++ 而不指定版本时,通常假定它是指最新发布的标准。
-
OpenMP 正是这样做的,大多数编译器(GCC、LLVM、MSVC)都支持它。通过在
for循环上添加类似#pragma omp parallel for的行。
标签: c++ multithreading c++11 c++14 c++17