並列ループのローカル値とグローバル変数の更新に関して質問があります。
疑似コードの例: 非常に長いベクトルの最大値を検索しています。次のように、ループで実行できます。
int max;
for(i ...) {
if (max < vector[i]) max = vector[i];
}
OpenMP で簡単に並列化できます。
int max;
#pragma omp parallel
{
int local_max;
#pragma omp parallel for
for(i ...) {
if (local_max < vector[i]) local_max = vector[i];
}
#pragma omp critical
{
// choose the best solution from all
if (max < local_max) max = local_max; local_max
}
}
TBB で同じことを行うにはどうすればよいparallel_for
ですか? 正確なコードは要求しません。反復ごとではなく、ループの最後にグローバル結果を更新する方法を知りたいだけです...
(TBB初心者です)