OpenMP に関して、schedule の方針は 3 パターンある。
・schedule(static, chunk)
chuck で loop を静的に分割
・schedule(dynamic, chunk)
chunk を 動的に空きスレッドに割り当てる
・schedule(guided, chunk)
指数関数的に分割。ようするに最初は大きく分割、後半は少なく分割。
その他、環境変数で指定するものもあり。
・schedule(runtime)
これらには、それぞれ実装に特性があるそうで単に機能だけで選ぶのは良くなさそう。しかしながら、このブログで公開した結果は最短路ソルバー(並列部分は、粒度の大きな関数)なので、どれでもそこそこ性能は出るはずだが、うまくいかない。
・schedule(static, chunk)
chuck で loop を静的に分割
・schedule(dynamic, chunk)
chunk を 動的に空きスレッドに割り当てる
・schedule(guided, chunk)
指数関数的に分割。ようするに最初は大きく分割、後半は少なく分割。
その他、環境変数で指定するものもあり。
・schedule(runtime)
これらには、それぞれ実装に特性があるそうで単に機能だけで選ぶのは良くなさそう。しかしながら、このブログで公開した結果は最短路ソルバー(並列部分は、粒度の大きな関数)なので、どれでもそこそこ性能は出るはずだが、うまくいかない。
Intel コンパイラだとその関係の警告も表示してくれると思ったけど。