HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。

新着トピックス

作成したプログラムのパフォーマンスを比較する

 それでは、以上のようにして作成したプログラムを、Visual C++やGCCでコンパイルしたプログラムと比較してみよう。プログラムのパラメータはn=400およびm=100、つまり「400×400サイズの行列を100回乗算する」に設定した。また、実行時間の計測にはclock()関数を使用し、プログラムを開始した直後から終了する直前までの経過時間を計測している。

 テストプログラムのコンパイルおよび実行に使用したのは、CPUとしてCore 2 Duoを搭載したWindows Vistaマシンだ(表1)。コンパイラとしてはインテル C++ コンパイラーおよびVisual Studio 2008付属のC++コンパイラ、CygwinでインストールしたGCC 3およびGCC 4を用意し、それぞれでコンパイルしたプログラムを比較する。また、インテル C++ コンパイラーについては並列化の効果を確認するため、自動並列化を有効にしたものと、無効にしたものを用意した。それぞれのコンパイルオプションは図7~9およびリスト2のように設定している。

 なお、インテル C++ コンパイラーで並列化オプションを有効にした場合、デフォルトでは確実に高速化できる個所のみ自動並列化を行うが、「/Qpar-theshold」オプションを併用することで、自動並列化を行う閾値を変更できる。今回は図9のように閾値を「0」に設定し、並列化が行える個所はすべて並列化するように指定した。

表1 テストプログラムのコンパイルおよび実行に使用したPCのスペック
項目スペック
OSWindows Vista Business SP1
CPUCore 2 Duo E6550(2.33GHz)
メモリ2048MB

リスト2 GCC 3およびGCC 4のコンパイル
↓GCC 3で最適化レベル2、Pentium 4系CPUに向けた最適化を指定してコンパイル
 gcc.exe -O2 -march=nocona -o matrix1_gcc3_O2.exe matrix1.c
 :
↓GCC 3で最適化レベル3、Pentium 4系CPUに向けた最適化を指定してコンパイル
 gcc.exe -O3 -march=nocona -o matrix1_gcc3_03.exe matrix1.c
 :
↓GCC 4で最適化レベル2、Core 2系CPUに向けた最適化を指定してコンパイル
 gcc-4.exe -O2 -march=core2 -o matrix1_gcc4_02.exe matrix1.c
 :
↓GCC 4で最適化レベル3、Core 2系CPUに向けた最適化を指定してコンパイル
 gcc-4.exe -O3 -march=core2 -o matrix1_gcc4_O3.exe matrix1.c
 :