最適化問題に対する超高速&安定計算

大規模最適化問題、グラフ探索、機械学習やデジタルツインなどの研究のお話が中心

Pthread v.s. OpenMP

2010年02月17日 23時12分29秒 | Weblog
プログラムをマルチスレッド化するときに、Pthread を使うか、OpenMP を使うか迷うところで、OpemMP を用いると簡単にマルチスレッド化できるが、細かい制御があまり出来ないようなイメージがある。しかし、Pthread 風に thread function を作っておいて、その関数を for 文で包んでから

#pragma omp parallel for schedule(static)

とすると、結構いろいろな制御を行うことができる。以下で Pthread と OpenMP の性能比較を行う。gcc 4.1.2 の OpenMP の性能は一般的には良くないのだが、作り方に依存する面も大きいので、以下のように Pthread と OpenMP の性能差がほとんど無いということもある。

---------------------------------------------------------------
○最適化ソフトウェア : 最短路ソルバー msp Ver. 0.21

○計算サーバ
CPU : Intel Xeon 5460 (3.16GHz / 6MB L2 x 2) x 2
Memory : 48GB (12 x 4GB)
gcc : 4.4.3 (デフォルトは 4.1.2)
Intel コンパイラ : 11.1.064
OS : CentOS 5.4 for x86_64

○最短路問題 LKS 1000 クエリ
1: gcc 4.1.2
pthreads: 31.359s
openmp: 34.956s

2: gcc 4.4.3
pthreads: 31.472s
openmp: 34.939s

3: icc 11.1.064
pthreads: 28.198s
openmp: 30.976s
コメント (5)    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« クラウド関係のセミナー | トップ | Pthread v.s. OpenMP その2 »
最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
Unknown (安井)
2010-02-17 22:44:23
僕が以前調べた時とは異なる結果になっていますね。

http://blog.goo.ne.jp/u1low_cheap/e/6c2aba02aa34329d0825f42d124cfbea
Unknown (藤澤)
2010-02-18 00:57:16
以前の実験とは特に OpenMP の実装方法が異なっているのではないでしょうか。

opt:/home/fujisawa/sp/sp_solve/msp/msp-0.21/solve 以下にソースファイルがあります。次の二種類です。

solve-sppaths.c.openmp
solve-sppaths.c.pthread

Unknown (安井)
2010-02-18 02:20:27
ソースファイルを拝見しましたが、やはりどちらも pthreads で実行しているようです。再実験しましたので、結果を載せます。gettimeofday で測定した Dijkstra 法の実行時間です。

1. gcc-4.1.2
pthreads: 31.359s
openmp: 34.956s

gcc-4.4.1
pthreads: 31.472s
openmp: 34.939s

icc-11.1
pthreads: 28.198s
openmp: 30.976s

/home/yasui/projects/sp/source 以下に、サンプルソースが色々あります。
Unknown (後藤)
2010-02-18 13:42:29
単に sdpa では pthreads や OpenMP の起動・同期コストが相対的に小さいのだと思います。
Unknown (藤澤)
2010-02-19 00:47:54
さすがに2日で800枚の採点は疲れました。

> ソースファイルを拝見しましたが、やはりどちらも pthreads で実行しているようです。再実験しましたので、結果を載せます。gettimeofday で測定した Dijkstra 法の実行時間です。

すいません。別のソースで実験してしまいました。私のソースでも上記とほぼ同じ結果になりました。

> 単に sdpa では pthreads や OpenMP の起動・同期コストが相対的に小さいのだと思います。

起動・同期コストは小さいのかもしれませんが、スレッド内部の処理が複雑なので、まだまだ性能改善の余地があると思います。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Weblog」カテゴリの最新記事