我正在使用 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%。50% 并且在使用 parallel_for 时非常均匀。
我想知道在使用 parallel_for 时是否可以获得更高的核心负载。除了grain_size还有其他参数吗?如何在不更改 for 循环中的操作的情况下提高 parallel_for 的速度(此处为//在上面的代码示例中进行一些计算)。