HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
CPUメーカーであるインテルが開発しているといえども、本当にコンパイラを変えるだけで目に見えるほど実行速度が変わるのかは気になるところだ。そこで、まずは簡単な数値計算プログラムを用意し、実際にインテル C++ コンパイラーでコンパイルを行う手順を説明するとともに、ほかのコンパイラを使ってコンパイルしたものと比べてどの程度パフォーマンスが変わるのか検証してみよう。なお、下記の検証では、Visual Studio 2008を使用して行っている。
初めに用意したのは、簡単な浮動小数点演算を行うプログラムだ。このプログラムは、要素としてdoubleの値を持つn×nサイズの行列同士の乗算をm回繰り返す、というもので、行列演算部分はリスト1のようになっている。
/* A = B * C; matrixA = matrixB * matrixC */ void prod_matrix( double* matrixA, double* matrixB, double* matrixC, int dim ) { int i, j, m; memset( matrixA, 0, sizeof(double)*dim*dim ); for( i = 0; i dim; i++ ) { for( m = 0; m dim; m++ ) { for( j = 0; j dim; j++ ) { AT(matrixA,i,j) += AT(matrixB,i,m) * AT(matrixC, m, j); } } } }
※ソースコード全文はこちら
インテル C++ コンパイラーはインストールの際、コンパイラ本体およびVisual Studioプラグイン、MKLやIPP、TBBといった付属ライブラリについて、それぞれインストールの可否を選択できる(図4)。なお、Visual Studioプラグインは対応するVisual Studioがインストールされていないと選択できない。また、ここでインストールしなかったコンポーネントも、必要になった時点で再度このインストーラを起動すれば後から追加インストールできる。
インテル C++ コンパイラーはコマンドラインからも利用できるが、今回はVisual Studioでプロジェクトを作成し、そこからインテル C++ コンパイラーを呼び出して利用する。Visual Studioからインテル C++ コンパイラーを利用する場合、まずVisual Studioでプロジェクトを作成し、続いてインテル C++ コンパイラーを利用するように設定すればよい。
今回は新たにプロジェクトを作成するので、まずVisual Studioを起動し、「ファイル」メニューから「新規作成」-「プロジェクト」を選択して「新しいプロジェクト」画面を開き、プロジェクト名や保存先、ソリューション名などを指定してプロジェクトを作成する。テンプレートとしては「Win32 コンソールアプリケーション」を選択した(図5)。
続いて、作成したプロジェクトにソースコードを追加し、コンパイラの指定とコンパイル設定を行う。コンパイルしたいプロジェクトをVisual Studioのソリューション エクスプローラで選択し、追加された「インテル C++」ツールバー中にある「インテル C++を使用」ボタンをクリックすることで、インテル C++ コンパイラーを利用するよう各種設定が自動的に変更される。
また、これによって「プロジェクト」メニューの「プロパティ」で表示できるプロパティ画面でインテル C++ コンパイラーの挙動も設定できるようになる。たとえば「C/C++」の「最適化」項目では、使用するインテル C++ コンパイラーの最適化オプションを指定できる。
なお、インテル C++ コンパイラーを指定した場合でも、「Visual C++を使用」ボタンをクリックすればいつでもVisual C++でコンパイルするように設定を戻すことができる。
コンパイル/ビルドについては、通常通り「ビルド」メニューやツールバーの「ソリューションのビルド」から行える。ビルドの出力では、インテル C++ コンパイラーを利用した処理については「インテル C++ 環境」と表示され、Visual C++のコマンドを呼び出す処理については「Microsoft VC++ 環境」と表示される(図6)。
なお、Linux環境でインテル C++ コンパイラーを利用する場合は、単純にコンパイラをgccからicl(インテル C++ コンパイラーのコマンドライン)に変更するだけで良い。Linux版インテル C++ コンパイラーはGCCと互換性があるため、オプション等を変更する必要はない。
[PageInfo]
LastUpdate: 2009-11-18 21:10:35, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members