【发布时间】:2012-12-01 20:42:47
【问题描述】:
我正在使用 Intel TBB parallel_for 来加速 for 循环进行一些计算:
tbb::parallel_for(tbb::blocked_range<int>(0,ListSize,1000),Calc);
Calc 是 doCalc 类的一个对象
class DoCalc
{
vector<string>FileList;
public:
void operator()(const tbb::blocked_range<int>& range) const{
for(int i=range.begin(); i!=range.end();++i){
//Do some calculations
}
}
DoCalc(vector<string> ilist):FileList(ilist){}
};
大约需要。当我使用 for 循环的标准串行形式时,大约需要 60 秒。当我使用 TBB 的 parallel_for 完成工作时,需要 20 秒。使用标准时,我的 i5 CPU 的每个内核的负载约为。 15%(根据 Windows 任务管理器)并且非常不均匀,大约为 15%。使用 parallel_for 时为 50% 且非常均匀。
我想知道在使用 parallel_for 时是否可以获得更高的核心负载。除了grain_size还有其他参数吗?如何在不更改 for 循环中的操作的情况下提高 parallel_for 的速度(此处为//在上面的代码示例中进行一些计算)。
【问题讨论】:
标签: c++ for-loop parallel-processing intel tbb