我使用英特尔TBB parallel_for时加快for循环做一些计算:更高的核心负载英特尔TBB
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秒, 20秒时,我使用TBB的parallel_for完成工作。使用标准版时,我的i5 CPU的每个核心的负载大约为15%(根据Windows任务管理器)和非常不均匀的,大约。使用parallel_for时为50%且非常均匀。
我想知道使用parallel_for时是否有可能获得更高的核心负载。除了grain_size还有其他参数吗?如何在不改变for循环内的操作的情况下提高parallel_for的速度(这里是//在上面的代码示例中进行一些计算)。