【发布时间】:2019-12-13 16:28:23
【问题描述】:
我有一个vector<int> foo 和一个函数float bar(int)。使用algorithms 库,我可以使用
vector<float> quux
transform(foo.begin(), foo.end(), quux.begin(), bar);
我的foo 函数恰好非常慢,我希望使用 TBB 库在多个线程中并行化此代码。我会认为这将是一个理想的情况,因为所有操作都是独立的。但是,似乎没有parallel_transform 算法。我用parallel_for 算法看到的每个示例都将数据放回原始数组中,但我不能这样做,因为我正在更改类型。
【问题讨论】:
-
只需使用
foo的内容初始化quux并正常转换。 -
虽然这在这种特定情况下有效,但对于 foo 是浮点数、quux 是整数和 bar 将浮点数转换为整数的相反情况,它将失败。我想知道是否有更通用的解决方案
-
std::transform 具有并行执行的重载。它在标准库中。它在视觉工作室上运行良好。我不知道其他编译器套件。也许他们缺乏对这个功能的支持。
-
@phön 是的,这是 C++17 的功能。目前支持有所不同。 GCC 9.1 使用 TBB 支持它(因此需要安装并链接 TBB 才能工作)。
标签: c++ parallel-processing tbb