« VC++ による SSE の最適化 | メイン | Google の表示順序 »

VC++ 2005 でプロファイル最適化

 VC++ 2005 Professional 以降はプロファイリングを使用した動的最適化が出来る。
 「ガイド付き最適化のプロファイル」(リンクは MS の解説)でググっても取り扱っているサイトが無さそうだったので持ち上げ型のレビューっぽく VC++ 2005 と一緒に紹介してみる。

 まずは普通にコードを入力。
 コンストラクタでもヒントを表示するようになったのが嬉しい。

コンストラクタの入力

 更に凄いのが、入力中、クラスやマクロがどのように定義されているか逐一表示してくれる「コード定義ウィンドウ」。これに慣れると、もう以前の環境には戻れなくなりそう。
コード定義ウィンドウ

 コードが書き終わったら早速コンパイル。
 このときに表示される「エラー一覧」。VS 2005 ではエラーだけ、警告だけに分けて表示されようになっている。
 このコード#include <tchar.h>を加えると完成。
エラー一覧

 Release でコンパイル、実行したところ、タイムは 2585614 となった。
 さあこれを最適化しよう、といった場合、通常はプロファイラでプロファイルを採ってから、ボトルネックになっている場所を探す。これを人間がやるのではなくコンピュータにやらせよう、というのが今回の動的最適化。

 次は、プロジェクトから [ガイド付き最適化のプロファイル] - [インストルメント] を選択して、再度コンパイル、実行する。
エラー一覧

 これを行うと、実行ファイルのディレクトリに「ソフト名!番号.pgc」といったファイルが作られている。何度も行うと、どんどん番号が増加し、ファイルが作られていく。
 これがプロファイルした結果で、より良く最適化をするには、様々な条件のデータを使って実行し、このファイルを増やしていく。

 今回はデータを 1 種類(固定的な rand 値)しか用意していないので、1 回実行しておしまい。
 この時タイムは著しく下がるが、これはプロファイルを採っているから起こる現象で、気にしない。

 最後に、プロジェクトから [ガイド付き最適化のプロファイル] - [最適化] を選択する事で、プロファイル結果を使ってコンパイルする。これが完成品。

 こいつを実行してみると…タイムは 1754635 となった。約 1.5 倍速に最適化が出来た。

トラックバック

このエントリーのトラックバックURL:
http://yoffy.dyndns.org/cgi-bin/mt/mt-tb.cgi/469

コメントを投稿

About

2006年03月13日 02:08に投稿されたエントリーのページです。

ひとつ前の投稿は「VC++ による SSE の最適化」です。

次の投稿は「Google の表示順序」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.37