Windows 7の導入にあたり、いままで使っていたアプリケーションや開発ツールが新しい環境でも正しく動作するか気になっているユーザーも多いだろう。そこで本記事では、Windows 7環境でのインテル コンパイラーやVisual Studioといった開発ツールの動作確認や、Windows 7向けのWindows SDKの導入、そしてパフォーマンス検証など、Windows 7上での開発環境の利用について紹介する。
2009年10月22日、ついにWindows 7がリリースされた。新しい環境での互換性チェックや新機能の確認のため、さっそくWindows 7環境を導入している開発者も多いことだろう。OSのバージョンアップで気になるのが、新しい環境でアプリケーションや開発ツールが正しく動作するのか、という点だ。
結論から言ってしまうと、Visual Studio 2008はWindows 7でも問題なく動作するほか、インテル コンパイラーについても11.1 update版(ビルド番号は11.1.048)からは正式にWindows 7に対応している。ただし、Windows 7向けに新たにリリースされたWindows 7 SDKを利用するには若干の設定が必要だ。そこで本記事では、Windows 7環境でインテル コンパイラーを含むソフトウェア開発環境を構築する手順を解説するとともに、Windows 7とWindows Vistaのパフォーマンス差についても検証する。
なお、2009年11月初旬時点でWindows 7への対応が公式に発表されているインテル開発ツール製品は以下の7製品となる。インテル コンパイラーのみでなく、インテル マスカーネル ライブラリー(MKL)やインテル インテグレーテッド パフォーマンス プリミティブ(IPP)、インテル スレッディング ビルディング ブロック(TBB)といったライブラリについてもWindows 7への対応が行われている。
まずはWindows 7環境におけるVisual Studioおよびインテル コンパイラーのインストールについて説明しておこう。なお、本記事ではVisual Studio 2008 Professional Editionおよびインテル C++ コンパイラー Windows版 プロフェッショナルエディション 11.1.048を使用している。
インストール手順であるが、基本的にはWindows XP/Vista環境へのインストールの場合と変わらない。ただし、インテル コンパイラーは不定期にアップデートが繰り返されており、同じバージョン11.1でも11.1 update版(ビルド番号は11.1.048)よりも前のバージョンでは、32ビット版のWindows 7/Server 2008上で、64ビットもしくはIA-64向けのバイナリを作成するクロスコンパイル環境においてコンパイラを実行できない、という問題が発生する可能性がある。最新版のインテル コンパイラー無料評価版はエクセルソフトのWebサイトからダウンロードできるので、インストール前に最新バージョンのインストーラかどうかを確認しておこう。
なお、インテル コンパイラーのリリースノートは米IntelのWebサイトで確認できる(Intel C++ Compiler 11.1 Release Notes)。修正点・改良点のリストなども公開されている(Intel® Professional Edition Compilers 11.1 Fixes List)。
また、インテル コンパイラーにはVisual Studio用のプラグインが含まれているので、Visual Studioをインストールしてからインテル コンパイラーのインストールを行おう。Visual Studioがインストールされていない環境でもインテル コンパイラーのインストール自体は可能だが、Visual Studio用プラグインのインストールは行われないため、結局Visual Studioのインストール後に再度インストール作業を行うことになってしまう。
インテル コンパイラーのインストーラで必要な設定は、ソフトウェア使用許諾契約書への同意と、シリアル番号の入力、インストールするコンポーネントの選択だけだ(図3〜7)。シリアル番号を入力せずに、30日間利用できる試用版として使用することも可能だ。インストールするコンポーネントについては、推奨の「フル・インストール」を選択すればインテル コンパイラーおよびMKL、IPPといった付属ライブラリ、ドキュメントなど一式がインストールされる。
インテル コンパイラーをインストールすると、Visual StudioのIDEに「インテル(R) C++」および「インテル Parallel Debugger Extension (Debug Mode)」、「インテル Parallel Debugger Extension (Design Mode)」というツールバーが追加される(図8)。「インテル(R) C++」ツールバーはインテル コンパイラーの使用/不使用を切り替えたり、ヘルプを表示するもので、「インテル Parallel Debugger Extension」は並列プログラムのデバッグ用機能を呼び出すものだ。
インテル コンパイラーを利用してソフトウェアをコンパイルするには、「ソリューション エクスプローラ」内で対象とするソリューションを選択し、「インテル(R) C++」ツールバーの「インテル(R) C++を使用」ボタンをクリックする(図9)。すると自動的に各種設定が変更され、以後はインテル コンパイラーを使用してコンパイルが行われるようになる。Visual C++でのコンパイルを行う設定に戻したい場合は、同様に対象を選択して「Visual C++を使用」ボタンをクリックすれば良い。
また、ソリューション エクスプローラ内でのショートカットメニューにも「インテル(R) C++ コンパイラー・プロフェッショナル」という項目が追加される。ここから使用するコンパイラを切り替えたり、MKLやIPP、TBBといったコンポーネントを使用するための設定画面(「ビルド・コンポーネントの選択」画面)を表示することも可能だ(図10、11)。
各種設定が完了したら、通常どおりVisual StudioのIDEの「ビルド」−「ソリューションのビルド」メニューなどを選択し、ビルドを行えば良い。なお、インテル コンパイラー 11.1以降ではビルド時のメッセージなどについても完全に日本語化されている(図12)。
インテル コンパイラーでは、Visual Studioを利用せずにコマンドプロンプトから直接コンパイルコマンドを実行することも可能だ。ただしこの場合、各コマンドが格納されているディレクトリにパスが通っている必要があるほか、適切な環境変数が設定されている必要がある。インテル コンパイラーにはこれらの設定を自動的に行ってくれるバッチファイル(iclvars.bat)が用意されているので、こちらを活用すると良いだろう。また、スタートメニューに登録される「IA-32対応アプリケーション用C++ビルド環境」を起動することで、パスや環境変数の設定が完了した状態でコマンドプロンプトが起動される(図13、14)。
なお、インテル コンパイラー関連ファイルは、デフォルトではシステムドライブの「Program Files¥Intel¥Compiler¥<バージョン番号>¥<マイナーバージョン番号>¥」ディレクトリ以下にインストールされる。たとえばバージョン11.1.048の場合、インストール先は「Program Files¥Intel¥Compiler¥11.1¥048¥」となる。このディレクトリ以下のどこに何がインストールされているかをまとめたものが表1だ。また、用意されてる代表的なコマンドは表2のとおりだ。
| ディレクトリ | 説明 |
|---|---|
| ¥bin | 環境設定用バッチファイル(iclvars.bat) |
| ¥bin¥ia32 | 32ビット版のコンパイルコマンドおよび関連ライブラリ |
| ¥Documentation | 各種ドキュメント |
| ¥include | インテル コンパイラーが提供するライブラリ用のヘッダーファイル |
| ¥ipp | IPP関連ファイル(ドキュメントを含む) |
| ¥lib | インテル コンパイラーが提供するライブラリ |
| ¥mkl | MKL関連ファイル(ドキュメントを含む) |
| ¥perf_headers | インテル コンパイラー付属の「パフォーマンス ライブラリー」用ヘッダーファイル |
| ¥Samples | 各種サンプル |
| ¥setup_c | インストーラおよび関連ファイル(再インストール/アンインストールやインストールするコンポーネントの変更の際に使用) |
| ¥tbb | TBB関連ファイル(ドキュメントを含む) |
| ¥VS Integration | Visual Studio用プラグイン |
| ¥VSDebugExtension | Visual Studio用の拡張デバッガー「インテル Parallel Debugger Extension」 |
| コマンド名 | 説明 |
|---|---|
| icl.exe | コンパイラ本体 |
| xlib.exe | ライブラリ管理ツール |
| xlink.exe | リンカ |
Windows 7ではタスクバーが大きく変更されたほか、Office 2007で新しく採用された「リボンUI」がOS標準機能としてサポートされるなど、新たな機能が追加されている。これらの新機能を利用したソフトウェアを開発したい場合は、Visual Studioに加えてWindows 7向けのWindows SDK(Windows SDK v7.0、Windows SDK for Windows 7などとも呼ばれる)が必要だ。これをインストールすれば、インテル コンパイラーでもWindows 7の最新機能を利用したソフトウェアを開発できるようになる。
Windows SDK for Windows 7はマイクロソフトのWebサイトからダウンロードできる。32ビット(X86)版および64ビット(AMD64)版、そしてItanium版の3種類が用意されているので、利用する環境に対応したものをインストールしよう。なお、オンラインで必要なコンポーネントのみをダウンロードしてインストールできる「Webインストール版」と、DVD-Rなどに書き込んでからインストールする「ISOイメージ版」の2種類があるが、ISOイメージ版はファイルサイズが約1.4GBと大きいので注意してほしい。
インストーラで必要な操作は、ライセンスへの同意とインストール先、そしてインストールするコンポーネントを選択するだけだ(図15〜18)。コンポーネントとしてはライブラリやヘッダーファイルに加えて、サンプルやVisual C++関連ファイル、開発・デバッグ用ツールなども含まれている。サンプルにはWindows 7の新機能を使うためのサンプルコードも多数含まれているので、これらに興味がある場合はインストールしておくと良いだろう。
なお、Windows SDK for Windows 7はVisual Studio 2008に含まれるWindows Vista向けのWindows SDK v6.0Aと共存できるようになっており、Windows SDK for Windows 7のインストール直後はWindows SDK v6.0Aが利用されるように設定されている。そのためWindows SDK for Windows 7を利用するには、スタートメニューの「Microsoft Windows SDK v7.0」以下、「Visual Studio Registration」内にある「Windows SDK Configuration Tool」を起動し、ここで設定を行う必要がある(図19、20)。
Windows SDK for Windows 7のインストールと設定が終わったら、Windows 7の新機能を利用したアプリケーションをコンパイルしてみよう。Windows SDK for Windows 7をインストールすると、デフォルトではシステムドライブの「Program Files¥Microsoft SDKs¥Windows¥v7.0¥Samples¥」ディレクトリ以下に多数のサンプルがインストールされる。今回はその中で、タスクバーの新たな機能である「ジャンプリスト」と、新たなUI「リボン」を利用するアプリケーションをビルドしてみた。
Windows 7で新たに登場した機能「ジャンプリスト」は、タスクバーに表示されているアプリケーションアイコンを右クリックしたときに、アプリケーション独自のメニューを表示する機能だ。たとえばInternet Explorer 8の場合、「よくアクセスするサイト」や「タスク」といったものが表示される(図21)。また、リボンUIはOffice 2007で採用されている新たなツールバーUIだ。簡単に言えばタブで切り替えられる大きいサイズのツールバーである。
ジャンプリストを利用するサンプルは先のサンプルディレクトリ以下「winui¥shell¥appshellintegration¥AutomaticJumpList¥」および「winui¥shell¥appshellintegration¥CustomJumpList¥」ディレクトリ内に、リボンUIを利用するサンプルは「winui¥WindowsRibbon¥」ディレクトリ内に収録されている。ここでは、ジャンプリストのサンプルとして「AutomaticJumpList」を、リボンUIのサンプルとして「HTMLEditRibbon」をインテル コンパイラーでコンパイルしてみた。
まずAutomaticJumpListだが、これは「File」メニューで選択したファイルを、ジャンプリストの「最近使ったもの」項目に追加する、というものだ。コンパイルはディレクトリ内のソリューションファイル(AutomaticJumpListSample.sln」をVisual Studioで開き、ソリューションをインテル コンパイラーでコンパイルするように設定してコンパイルを実行するだけで完了した。特にコンパイルエラーなどは発生せず、作成したアプリケーションも問題なく動作している(図22)。なお、このサンプルを実行する際、初回起動時にはファイル形式の登録のため管理者権限で起動を行う必要がある。
続いての「HTMLEditRibbon」はリボンUIを備えたHTMLエディタというものだ。こちらも同様にVisual Studioでソリューションファイルを開き、インテル コンパイラーでコンパイルを行ったところ、「CHTMLEdView」クラス内でいくつかのエラーが表示されてしまった(図23)。
これは、「CHTMLEdView」内で定義している関数と、その継承元である「CHTMLView」クラスで用意されている仮想関数の定義が食い違っていたからである。Visual C++の場合これはエラーとはならないが、インテル コンパイラーはより厳密なチェックを行うためエラーとなっているようだ。これは、次のリスト1のように修正を行うことで簡単に解決でき、作成したソフトウェアも問題なく動作した(図24)。
・HTMLEdView.hの66行目
void OnDocumentComplete();
を以下のように修正
void OnDocumentComplete(LPCTSTR lpszURL);
・HTMLEdView.cppの135行目
void CHTMLEdView::OnDocumentComplete()
を以下のように修正
void CHTMLEdView::OnDocumentComplete(LPCTSTR lpszURL)
Windows 7はWindows Vistaに比べシステムのチューニングが進み、より快適に動作すると言われている。この恩恵はソフトウェア開発者でも享受することができるのだろうか? 最後にこの疑問を検証するため、インテル コンパイラー 11.1環境でいくつかのベンチマークテストを行ってみた。
なお、ベンチマークテストに使用した環境は次の表3のとおりである。
| 構成要素 | スペック |
|---|---|
| CPU | Core 2 Duo E6550(2.33GHz) |
| メモリ | 2GB |
| HDD | Seagate ST3250310AS(250GB) |
| OS | Windows Vista Business、Windows 7 Professional |
開発者にとってまず気になるのが、プログラムのコンパイル速度であろう。Windows 7ではOSが軽くなったと言われているが、コンパイル速度の向上などは見られるのだろうか? これを調べるため、インテル コンパイラー11.1環境でソフトウェアをコンパイルする際の時間を測定・比較してみた。
比較にはオープンソースの画像処理ツール「ImageMagick」を利用し、Windows Vista環境およびWindows 7環境でコンパイルにかかった時間を測定した。なお、ImageMagickのコンパイル方法に関する詳細は「インテル コンパイラーでオープンソースソフトウェアをコンパイルしよう」という記事を参照してほしい。
さて、測定結果は次の表4のようになった。コンパイル速度に関してはWindows VistaもWindows 7も、ほとんど変わらないようだ。
| OS環境 | コンパイル時間 |
|---|---|
| Windows Vista | 315秒 |
| Windows 7 | 316秒 |
続いて、作成したプログラムの実行速度がWindows VistaとWindows 7で異なるかどうかを検証してみよう。検証に使用したのは、ファイル圧縮/展開ツール「bzip2」だ。
ここではbzip2を使用し、Windows 7環境およびWindows Vista環境にて、Firefox 3.5.3のソースアーカイブ(約45MB)を展開するのにかかった時間と、展開したファイルを再度圧縮するのにかかった時間を測定した。なお、測定に使用したバイナリはともにWindows 7環境でコンパイルしたもので、コンパイルオプションには「/Ox /Qip」を指定している。
測定結果をまとめたものが図25だ。Windows 7とWindows Vistaとでの違いは非常に小さい。この結果を見る限り、Windows 7およびWindows Vistaのどちらも、アプリケーションの実行速度についてはあまり差異はないと思われる。
最後に、ハードディスクI/Oパフォーマンスについて調べてみよう。Windows 7ではディスクI/Oの最適化が進められていると言われている。そこでオープンソースのハードディスクベンチマークツール「CrystalDiskMark 2.2」を使用し、Windows VistaとWindows 7とでI/Oパフォーマンスを比較してみよう(図26)。
CrystalDiskMarkは、ハードディスクなどの転送速度を調査するためのツールで、シーケンシャルアクセスおよびランダムアクセスについて、読み出し速度および書き込み速度を調べるものだ。今回はテストサイズとしてデフォルトの「100MB」を選択し、同一のPC上で、Windows VistaとWindows 7とでベンチマークテストを行った。テスト結果は次の表5である。
| テスト項目 | Windows Vista | Windows 7 |
|---|---|---|
| Sequential Read | 70.1MB/秒 | 72.77MB/秒 |
| Sequential Write | 70.09MB/秒 | 72.69MB/秒 |
| Random Read 512KB | 24.57MB/秒 | 25.14MB/秒 |
| Random Write 512KB | 26.65MB/秒 | 27.06MB/秒 |
| Random Read 4KB | 0.29MB/秒 | 0.31MB/秒 |
| Random Write 4KB | 0.85MB/秒 | 0.85MB/秒 |
この結果を見ると、確かにWindows 7のほうが若干ではあるものの、ディスクアクセスが高速化されているように見える。そのため、大量のI/Oを行うアプリケーションの場合はWindows 7のほうがパフォーマンスが良くなる、という可能性はありそうだ。
ここまで、Windows 7上でのインテル コンパイラーの導入からWindows 7の新機能の利用、そしてパフォーマンス調査を行ってきたが、いかがだっただろうか。コンパイル速度やアプリケーションの実行速度などについてはあまり差は見られなかったものの、OSの起動時間やアプリケーションの体感起動時間は明らかに短縮されており、Windows 7は確かに快適なOSである。また、インテル コンパイラーをWindows 7上で利用する場合も問題は発生せず、Windows SDK for Windows 7を導入すればWindows 7の最新機能を利用したソフトウェアをインテル コンパイラーで開発することも可能だ。今回紹介したジャンプリストやリボンUIなどを活用したいなら、ぜひ試してみると良いだろう。