VCでプログラムが遅い場合、まずはビルド構成が「Release」になっていることを
確認しましょう。メニューバーの「ツール」「ウィンドウ」の下あたりに「Release」とか
「Debug」とか表示されたプルダウンメニューがあるので、これから「Release」を選びます。
さらに、「プロジェクト」→「~のプロパティ」(~の部分はプロジェクト名が入ります)
を開き、「構成プロパティ」「C/C++」で、「最適化」を選び、「最大限の最適化」にすると
もっと速くなるかもしれません。
まずは体験版をダウンロードします。
http://www.intel.com/cd/software/products/ijkk/jpn/compilers/295809.htm
メールアドレスを登録して、ライセンスキーを取得したら、
それを使ってインストールします。
インストールの画面が「Intel Debugger」「Intel Compiler」の二回出るので、
ちゃんと二つともインストールします。
その後、Visual Studioを起動し、メニューバーの「プロジェクト」メニューをクリックして
中身を見ると、"Convert to use Intel(R) C++ Project Systems"というメニューが
追加されています。これを選択してビルドすると、ICLを用いたバイナリが作成されます。
さらにICLの恩恵を受けるためには、最適化オプションを指定する必要があります。
「プロジェクト」「~のプロパティ」でプロパティを開き、「構成プロパティ」
「C/C++」で、「コマンドライン」を選択します。「追加のオプション」として
/O3 /QxP /Qparallel
を指定します。/Qparallelがスレッド化、/QxPがベクトル化(MMXとかSSEとか?)です。
簡単なプログラムで性能を測定した結果を下に示します。
数字は実行時間(秒)です。
- |
Debug |
Release |
並列化 |
ICC |
2.6 |
0.6 |
0.1 |
VC++ (CL) |
2.6 |
0.4 |
測定に用いたプログラムは以下です。
#include "windows.h"
#define N 100000
int _tmain(int argc, _TCHAR* argv[]){
int i, j,k;
int A[N];
int C[N];
LARGE_INTEGER freq, begin, end;
QueryPerformanceFrequency( &freq );
QueryPerformanceCounter( &begin );
for(i = 0; i < N; i++)
A[i] = i;
for(k = 0; k < 10; k++){
for(i = 0; i < N; i++)
for(j = 0; j < N; j++)
C[i] += A[i] + A[j];
QueryPerformanceCounter( &end );
printf( "%f\n", ( double )( end.QuadPart - begin.QuadPart ) / freq.QuadPart );
}
[an error occurred while processing this directive]