これを行うにあたって反対の兆候はありますか?あるいは、その行動は明確に規定されていますか?C++でOpenMPを使用する11範囲ベースのforループ?
#pragma omp parallel for
for(auto x : stl_container)
{
...
}
OpenMP仕様は、C++ 98のためにのみ有効であるようだが、私はここでは使用されていないC++ 11スレッド、のために多くの非互換性があるかもしれないと思いますので。私はまだ確かめたかった。
これを行うにあたって反対の兆候はありますか?あるいは、その行動は明確に規定されていますか?C++でOpenMPを使用する11範囲ベースのforループ?
#pragma omp parallel for
for(auto x : stl_container)
{
...
}
OpenMP仕様は、C++ 98のためにのみ有効であるようだが、私はここでは使用されていないC++ 11スレッド、のために多くの非互換性があるかもしれないと思いますので。私はまだ確かめたかった。
OpenMP 4.0仕様は数日前に確定され、公開されましたhere。
0:
for (
INIT-exprの;
試験-exprの;
INCR-exprの)
構成ブロック:それはまだ並列ループは(§2.6、P.51)標準形であるべきであることを義務付け
標準は、ランダムアクセスイテレータは、表現のすべてで使用することを提供した容器、例えばすることができますあなたはまだC++ 11糖衣構文を使用して主張し、それがstl_container
の各要素を処理するために、時間の(比較的)多くがかかっている場合、その後、あなたはパターンをタスクシングルプロデューサーを使用することができれば
#pragma omp parallel for
for (it = v.begin(); it < v.end(); it++)
{
...
}
:
#pragma omp parallel
{
#pragma omp single
{
for (auto x : stl_container)
{
#pragma omp task
{
// Do something with x, e.g.
compute(x);
}
}
}
}
タスキングは特定のオーバーヘッドを引き起こします。したがって、compute(x);
が完了するまでにわずかな時間がかかる場合は、このパターンを使用する意味がありません。
+良い質問です。それも知りたいです。 – lulyon