はじめに
近頃筆者は、IT業界に新しい波が押し寄せていることを感じています。マルチコアCPUは既に一般化し、その動きに合わせた技術のニュースを見聞きする機会が多くなりました。例えば、Google社が近頃発表した新言語Goは、並行(concurrent)コンピューティングの仕組みを強力にサポートしています。そういった潮流を鑑みるに、並行処理/並列処理は今は当たり前のものとなった感があります。
そして、つい最近Windows 7が発売されました。その売れ行きは好調でOSにおいても新しい時代の到来を感じさせました。早速筆者が購入したところ、Windows 7は64ビットバージョンも同梱されており、マルチコアと同じく64ビット化の波も来ていることを感じました。
この2つの波を鑑みるに、これからの時代に開発者が求められている能力は、大量のリソース(マルチコアCPU、64ビットが可能にする大量のメモリ)を操る力だと筆者は考えるに至りました。
そこで、Windows 7に対応しており、各種並列化技術をサポートしている開発ソフトを求めていたところ、インテル C++ コンパイラー 11.1が筆者を惹きつけました。
インテル C++ コンパイラー 11.1の概要
インテル C++ コンパイラー 11.1はWindows 7に対応しています。それに加えて、次世代の256ビット命令セットに対応したインテルAVX(Advanced Vector Extensions)、AES(Advanced Encryption Standard)命令セット、最新のOpenMP 3.0……など多くの新技術にいち早く対応しています。
これらの機能を考慮するとインテル C++ コンパイラー 11.1は、プラットフォームとCPUの能力を最大限に活かす製品だと言えると思います。C++が必要となるのは高いパフォーマンスを要求される時ですので、この特徴は非常に好ましいものだと言えます。
また、付属のマニュアルとプロパティページなどのメッセージが日本語で書かれている点を筆者は非常に気に入りました。開発するにあたって日本語対応しているか否かは、生産性に関わるので非常に重要です。最先端の製品は英語である事が多く、英語が苦手な筆者は苦労していました。日本語対応は日本人にとって大変嬉しいポイントです。
これから、筆者がインテル C++ コンパイラー 11.1をサンプルコードを用いて試用した様子をお伝えします。このサンプルコードは、これはあくまでもコンパイラーを試す目的のものであり、実務的なものではないのでその点に注意して下さい。また、本記事で紹介しているURLは今後変更される恐れがありますので注意して下さい。
準備
インテル C++ コンパイラー 11.1を使用するには別途Visual Studioが必要となります。本記事では、Visual Studio 2008を使用します。お持ちでない方は、マイクロソフト社のホームページから入手して、インストールを済ませて下さい。Visual Studio 2008のインストールの完了後、インテル C++ コンパイラー 11.1のインストール作業を行います。
まずはエクセルソフト社のダウンロードサイトにアクセスして下さい。さまざまなソフトウェアがダウンロードできる画面「評価版&ドキュメントーダウンロード」が表示されるので、「評価版/マニュアル」タブよりインテル C++ コンパイラー Windows 版日本語版を手順に従ってダウンロードします。ダウンロードが終了したら、ダウンロードする前に入力したE-mailのアドレスにメールが届いていると思いますので、そのメールに添付されているライセンスファイルを保存して下さい。
後は先ほどダウンロードしたインテル C++ コンパイラー 11.1のセットアップファイルを実行するだけです。途中でライセンスを求める画面が表示されますので、そこでメールにて送られてきたライセンスファイルを選択して下さい。その他は日本語で説明が表示されていますので難しいところはありません。
これで準備完了です。これからWindows 7のAPIとOpenMP 3.0を使って、インテル C++ コンパイラー 11.1の機能を体験します。
Windows 7のサンプル
Windows 7で開発するためにはSDKが必要です。まずはマイクロソフト社のホームページからSDKを入手してインストールを済まして下さい。
このサンプルの内容は、Windows 7から用意されているCPU関連のAPIを使用して、自分のPCに搭載されているCPUの情報を取得するというものです。_WIN32_WINNを適切な値に設定してコンパイルして下さい。
//Windows 7の場合
#define _WIN32_WINN 0x0601
//WindowsXPの場合
//#define _WIN32_WINN 0x0502
#include <iostream>
#include <windows.h>
#include <Winbase.h>
using namespace std;
int main()
{
#if( _WIN32_WINN >= 0x0601 )
    //アクティブプロセッサ数
    DWORD count = GetActiveProcessorCount( ALL_PROCESSOR_GROUPS );
    cout << "このPCのアクティブなプロセッサの数は「" << count << "」です" << endl;
    //アクティブプロセッサグループ数
    DWORD group = GetActiveProcessorGroupCount();
    cout << "このPCのアクティブなプロセッサグループの数は「" << group << "」です" << endl;
    //浮動小数点
    cout << "このCPUに浮動小数点機能は? ";
    if ( GetEnabledExtendedFeatures( XSTATE_MASK_LEGACY_FLOATING_POINT ) != 0 )
        cout << "あり" << endl;
    else
        cout << "なし" << endl;
    //SSE
    cout << "このCPUにSSE機能は? ";
    if ( GetEnabledExtendedFeatures( XSTATE_MASK_LEGACY_SSE ) != 0 )
        cout << "あり" << endl;
    else
        cout << "なし" << endl;
    //Intel AVX
    cout << "このCPUにIntel AVX機能は? ";
    if ( GetEnabledExtendedFeatures( XSTATE_MASK_GSSE ) != 0 )
        cout << "あり" << endl;
    else
        cout << "なし" << endl;
#else
    cout << "このサンプルはWindows 7用です。" << endl;
    cout << "Windows 7以降のOS上でないと動作しません。" << endl;
#endif
    //終了
    cout << endl << endl;
    return 0;
}
</pre>
</div>
デバッグ実行して下さい。自分のPCに搭載しているCPUに関する情報が取得できます。

 
              
               
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                              
                               
                              
                               
                              
                               
                              
                               
                              
                               
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
															
														 
															
														 
															
														.png) 
     
     
     
     
     
													 
													 
													 
													 
													 
										
									

 
                    
