Microsoft VisualStudio .NET

普段は書いてるプログラムはほとんどLinux用だけど、Windows専用のソフトにJavaはちょっとかっこ悪い。普段はemacs一本だけど、VisualStudioも慣れれば悪くない環境です。
今は必死でATLを勉強してます。しかし.NETが普及してしまったら、この技術は役に立つのだろうか…

エラーメッセージ

謎エラーの数々。

Tips

VC (Visual Studio)のプログラムが遅い!

VCでプログラムが遅い場合、まずはビルド構成が「Release」になっていることを 確認しましょう。メニューバーの「ツール」「ウィンドウ」の下あたりに「Release」とか 「Debug」とか表示されたプルダウンメニューがあるので、これから「Release」を選びます。
さらに、「プロジェクト」→「〜のプロパティ」(〜の部分はプロジェクト名が入ります) を開き、「構成プロパティ」「C/C++」で、「最適化」を選び、「最大限の最適化」にすると もっと速くなるかもしれません。

Intel Compilerを用いた並列化

まずは体験版をダウンロードします。
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 );
}