Keiichi Oono's Weblog

All | cc | NetBeans | OpenSolaris | Personal
« 前の日(Jun月 24日, 2009年) | 日付別メイン | 次の日(Jun月 26日, 2009年) »
20090626 2009年 6月 26日 金曜日

Sun Studio 12 update 1 の OpenSolaris での SPEC CPU2006 ベンチマーク

コンパイラの性能を把握する一つの指標としてベンチマークが挙げられます。2009/06/23 にSun は、Sun Blade X6275 Server Module で SPEC CPU2006 の整数演算と浮動小数点演算の 2 つの世界記録を更新しデータを提出した。と発表しました。SPECint2006 で 37.4、SPECftp2006 で 50.8 というスコアを出したとのことです。

構成の概要として以下のものが挙げられています

06/23/2009 The Sun Blade X6275 Server Module Posts Two World Speed Records on Floating Point and Integer Benchmarks

リンク先の見出しの右側にあるオレンジの ">>" をクリックすると詳細情報が表示されます。

SPEC に提出されたデータは SPEC CPU2006 の結果は SPEC の Web サイトにある CPU2006 Results -- Form から検索して参照することができます。上記の 6/23 の結果は新しすぎるのか見ることができませんでしたが、例えばフォームで以下のように入力して、ページの一番下にある「Fetch Result」をクリックすると、提出済みの Sun Blade X6275 のベンチマークをすべて見ることができます。

Column Display Criteria
Hardware Vendor SKIP  
System Display [matches] sun blade x6275
Operating System Display  
Compiler Display  

出てきた結果の中に以下の行が見えます。(C/P は Cores Per Chip (チップあたりのコア数) です)

System                                          Result  Base    # Cores # Chips # C/P   Operating System                Compiler                                                        Published
Sun Blade X6275 (Intel Xeon X5570 2.93GHz)      36.7    29.7    8       2       4       OpenSolaris 2008.11             Sun Studio 12 Update 1, (backend build 20090309)                Apr-2009
Sun Blade X6275 (Intel Xeon X5570 2.93GHz)      34.9    31.2    8       2       4       SuSe Linux Enterprise Server 10 Intel C++ and Fortran Compiler 11.0 for Linux, Build 20080930   Apr-2009

OpenSolaris 2008.11 上の Sun Studio 12.1 (おそらく Early Access 版 Sun Studio Express 2009.03) と、SuSE Linux Enterprise 上の Intel コンパイラの CINT2006 (SPECint) の結果です。この 2 行でコンパイラの優劣を決めることは全然できません。実際のデータとして Sun Studio 12 update 1 による最適化は整数、浮動小数点ともに悪くない結果が出ているということを知っていただければと思います。

使われた最適化オプション

個人的には、ベンチマーク結果以上に使われた最適化オプションの方に興味があります。上記の値で検索した結果のページから CINT2006 の Sun Studio 12 update 1 コンパイラを使った行にある「HTML」と書かれたリンクをクリックすると ベンチマーク結果の詳細ページ が開きます。このページの後半にある Peak Optimization Flags を見ると、使われたコンパイラオプションをみることができます。例えば 400.perlbench のために以下のようなオプションが使われています:

-xprofile=collect:./feedback(pass 1)   
-xprofile=use:./feedback(pass 2)   -fast   -xipo=2   
-xpagesize=2M   -xvector=simd   -xalias_level=std   
-xprefetch=no%auto   -lbsdmalloc   -lumem  

まず (pass1) として -xprofile=collect を指定してコンパイルし、プロファイルデータを収集した上で -xprofile=use を指定してコンパイルしていることがわかります。-xalias_level=std や -xprefetc=no%auto は対象のプログラムによって適していたりいなかったりするので、一概にこれを使うべきというものではないですが、-xipo=2 は多くのプログラムで試してみることができるのではないかと思います。自動並列化 (-xautopar) を使ってコンパイルしたプログラムがいつくかあることもわかります。以下は C++ の 473.astar というプログラムで使われた最適化オプションです:

-xprofile=collect:./feedback(pass 1)   
-xprofile=use:./feedback(pass 2)   -fast   -xipo=2   -m64   
-xpagesize=2M   -L/data1/SmartHeap_9/lib -R/data1/SmartHeap_9/lib 
-lsmartheap_mt64   -xalias_level=compatible   -library=stlport4   
-xautopar

最適化オプションとして -fast 以外にどのようなものが使えるのか、マニュアルページやドキュメント等を調べる以外に、SPEC のベンチマークで使われたオプションを見てみるのも一つの方法ではないかと思います。

参考

 
Posted by keiichio ( 6月 26日 2009年, 08:02:17 午後 JST ) Permalink 投稿されたコメント [0]

Calendar

RSS Feeds

最近の 10 Entries

Links

Navigation

Search