速くなったり遅くなったり
やはり最適化コンパイラを通していると思わぬ分岐がやたらと遅くなったり、
こうすれば速くなると思ったら遅くなったり。。色々と面倒ですわ。。
今回OpenMPでの並列化をやっているのですが、基本は粗粒度、つまりなるべく外側で並列化を開始したほうが良いとされています。
なので、ループ対象の処理ブロックA、Bが依存性が無い場合も、1つのループにして、ループ全体を並列化した方がいいんだろうなぁ。。と思っておりました。。
つまり、
#pragma omp parallel for
for (int i=0; i < 1000; i++) {
A();
B();
}
こっちのほうが速いんだろうなぁ、と思ってそう書いていた。
で、ものの試しに、
#pragma omp parallel for
for (int i=0; i < 1000; i++) {
A();
}
#pragma omp parallel for
for (int i=0; i < 1000; i++) {
B();
}
と書いてみたら、おやおや、こっちの方が速かったよ。。。。。
なんか、分岐があるなしでも大きく速度が変わる(ときもあるし、そうでないときも)
ので、もう速くなるまで色々と書き換えてみるしかないという始末。。。。
だめだ、不毛な作業はやめよう。。。。。
次の作業が待っているのだから。。
| 固定リンク
この記事へのコメントは終了しました。
コメント