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秒。の標準を使用する場合、私のi5CPUの各コアの負荷は約です。15%(Windowsタスクマネージャーによる)、非常に不均一で、約 parallel_forを使用すると、50%で非常に均一になります。
parallel_forを使用すると、さらに高いコア負荷を得ることができるのではないかと思います。grain_size以外のパラメータはありますか?forループ内の操作を変更せずにparallel_forの速度を上げるにはどうすればよいですか(ここでは//上記のコードサンプルでいくつかの計算を行います)。