プログラムをマルチスレッド化するときに、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