HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
近年、そのパフォーマンス競争が盛んに行われている分野として、Webブラウザが挙げられる。たとえばSafari 4のベータ版は自らを「世界最高速」とうたうなど、それぞれのWebブラウザが自身の高速性をアピールしているが、それではWebブラウザのコンパイルにインテル コンパイラーを利用することでパフォーマンスを向上できないだろうか?
そこでFirefoxの最新版であるFirefox 3.1 ベータ2について、Windows環境でインテル コンパイラーを使用してコンパイルし、そのパフォーマンスを調査してみた。
Firefoxのコンパイル方法については、Mozilla Developer CenterのBuild Documentationにまとめられているが、簡単にまとめると下記のようになる。
FirefoxやThunderbirdといったMozilla製品をWindows環境でコンパイルするのに必要なツール一式をまとめたものが、MozillaBuildである。FTPサイトからMozillaBuildSetup-1.3.exeをダウンロードし、インストールする。なお、インストール先はデフォルトの「C:\mozilla-build」が推奨されている。
Firefox 3.1 ベータ2のソースコード一式はFTPサイトから入手できる。このファイルをダウンロードし、任意のフォルダに展開する。なお、展開先フォルダはマルチバイト文字および空白が含まれていないことが望ましい。今回は、C:\work以下に展開した。
Firefoxのビルド設定は、「mozilla-central」フォルダ中の「.mozconfig」というテキストファイルを使用して行う。このファイルに設定オプションを記述していくのだが、通常は次のように記述すればよい。この場合、mozilla-centralフォルダ以下の「ff-opt」フォルダ以下に作成されたバイナリが格納される。
. $topsrcdir/browser/config/mozconfig mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-opt ac_add_options --disable-tests
MozillaBuildに含まれる環境設定スクリプトを実行し、ビルド環境を起動する。インテル コンパイラー用のスクリプトは用意されていないので、インテル コンパイラー11.0でビルドする場合はこちらで用意したstart-icc11.batをダウンロードしてMozillaBuildのインストールフォルダにコピーし、これを実行すればよい。また、Visual C++ 2008を使用する場合は「start-msvc9.bat」を実行すればよい。そのほかの環境の場合は実行するスクリプトが異なるので、表1を参考に環境に応じたスクリプトを実行する。
コンパイラ環境 | 実行するスクリプト |
---|---|
Visual C++ 6.0 | start-msvc6.bat |
Visual C++ .NET 2003 | start-msvc7.1.bat |
Visual C++ 2005 | start-msvc8.bat |
Visual C++ 2008 | start-msvc9.bat |
WindowsでのFirefoxのコンパイルはVisual C++の使用を想定しているため、インテル コンパイラーでコンパイルするためには一部の設定ファイルやソースコードを修正する必要がある。修正点はパッチファイル(firefox-3.1b2-icc-diff.patch)にまとめてあるので、こちらをFirefoxのソースコードを展開したフォルダ中の「mozilla-central」フォルダにダウンロードし、先ほど起動したシェルで次のように実行する。
$ cd <Firefoxのソースコードを展開したフォルダ>/mozilla-central $ patch -p1 firefox-3.1b2-icc-diff.patch
最後に、シェルで次のように実行するとコンパイルが開始される。
$ make -f client.mk build
コンパイルが完了すると、ff-optフォルダ内の「dist\bin」フォルダに実行ファイルやライブラリ一式が作成される。
[PageInfo]
LastUpdate: 2009-11-18 20:58:09, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members