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 というスコアを出したとのことです。
構成の概要として以下のものが挙げられています
リンク先の見出しの右側にあるオレンジの ">>" をクリックすると詳細情報が表示されます。
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]
Sun Studio 12 update 1 を OpenSolaris 2009.06 にインストール
OpenSolaris 2009.11 に Sun Studio 12 update 1 をインストールしてみました。
このページの説明を参考にインストールしました。
http://developers.sun.com/sunstudio/downloads/opensolaris/index.jsp
パッケージマネージャーの検索ボックスで studio と入力し、Enter を押すと以下の 4 つのパッケージが現れます。sunstudio12u1 が出てこない場合には、ツールバーの「再読み込み」ボタンを押して見てください。私の環境では「再読み込み」を押さないと出てきませんでした。
ss-dev
sunstudio
sunstudio12u1
sunstudioexpress
sunstudio12u1 を選択して「依存関係」タブをチェックすると、SUNWlibC (C++ 標準ライブラリ) や SUNWlibm (数値計算ライブラリ) などに依存していることがわかります。SUNWj6 で始まる JDK 6 のパッケージ群にも依存しています。これは、統合開発環境 (IDE) として NetBeans 6.5.1 を基盤にしていて、NetBeans 6.5.1 の C/C++ 関連の機能が Sun Studio 12 update 1 に含まれていることによります。NetBeans 自身が JDK を必要とするため、Sun Studio 12 update 1 をインストールするときに JDK 6 を同時にインストールすることが求められるます。
インストールを開始するには通常のパッケージのインストール手順通り、チェックボックスをチェックしてツールバーで「インストール/更新」をクリックします。私の環境では JDK 6 以外に sunstudio12u1 のために追加されたパッケージは SUNWhea, SUNWarc の 2 つでした。
インストールが完了すると Sun Studio に含まれるコマンドは /usr/bin にシンボリックリンクが置かれるので、C コンパイラ /usr/bin/cc や C++ コンパイラ /usr/bin/CC は即座につかえるようになります。統合開発環境は /usr/bin/sunstudio です。ファイルそのものは /opt/sunstudio12.1 にインストールされるので、Sun Studio が提供するコマンドは /opt/sunstudio12.1/bin を見ると把握できます。
Sun Studio を起動します
$ sunstudio
NetBeans 6.5.1 のマルチリンガル版に基づいた統合開発環境 (IDE) なので、日本語環境で実行すると、かなりの部分は日本語で表示されます
今回のリリースで追加された新機能であるデバッガ dbxtool も起動してみます
$ dbxtool
例えば、dbxtool でデバッグオプション付きでコンパイルされた実行ファイルを dbxtool で開くことで GUI 環境で デバッグが行えます。統合開発環境ではなくて例えば vi + dbxtool や emacs + dbxtool といった組み合わせで、GUI 上でのステップ実行等を現在の開発環境から即座に行うことができます。C の hello world (hello.c) を cc -g でコンパイルして a.out を dbxtool から開いたのが以下の画面です:
dbxtool についてはあらためて詳しく紹介できればと思っています。
Posted by keiichio
( 6月 25日 2009年, 12:58:59 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12 update 1 がリリースされました
2009 年 6 月 22 日に Sun Studio 12 update 1 がリリースされました。
Sun の米国の開発者サイトにユーザー登録すると、無料でダウンロードすることができます。OpenSolaris 2008.11 または 2009.06 をお使いの方々はパッケージマネージャーからインストールできます。
今回は英語版のみのリリースです。日本語版については今しばらくおまちください。
OpenSolaris でパッケージマネージャーからインストールする場合、パッケージ名は sunstudio12u1 です。コマンドラインからインストールする場合は以下を実行します:
$ pfexec pkg install sunstudio12u1
ダウンロードサイト:
http://developers.sun.com/sunstudio/downloads/index.jsp
システム要件
| Solaris SPARC | Solaris x86 | Linux x86 | |
|---|---|---|---|
| OS | Solaris 10 1/06 およびそれ以降のアップデートリリース | SuSE Linux Enterprise Server 10Red Hat Enterprise Linux 5 CentOS 5 |
|
| CPU | UltraSPARC および SPARC64 | Pentium クラスもしくはそれ以上の AMD または Intel の x86 CPU (32bit および 64bit) | |
| メモリ | 推奨: 1 から 2 GB 最小: 512 MB (IDE で開くプロジェクトの大きさに比例して、より多くのメモリが必要となります) |
||
詳しくは リリースノート (英語) を見てください。
前回リリースの Sun Studio 12 から約 2 年ぶりのバージョンアップとなります。評価用の先行リリースであるSun Studio Express を試用していた方々は Sun Studio 12 update 1 の機能のほとんどをすでに体験済みかもしれませんが、これまで Sun Studio 12 を使っていた方々は以下の新機能の情報を参考にしてください。
新機能
参考
英語のページのみとなりますが以下のページも参考にしてください:
Posted by keiichio
( 6月 24日 2009年, 05:14:12 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12, 4 月から 5 月にかけていくつかパッチがリリースされました
Sun Studio 12 パッチに関する日本語ページを作りました:
以下は今日現在の最新のパッチのリストです。 以前のエントリ でふれたとおり、日本語版を含む、Sun Studio 12 マルチリンガル版をインストールすると、自動的にいくつかのパッチもインストールされます。上記の「Sun Studio 12 - インストールされるパッチ」では Sun Studio 12 マルチリンガル版インストーラーによってインストールされるパッチの一覧が記載されています。その一覧や手元のマシンにすでに適用済みのパッチと比較して、パッチのリビジョン番号 "-XX" が増えているものは、より新しいパッチがリリースされていることになります。
パッチのダウンロードは「Sun Studio 12 パッチ」のページからパッチ ID をクリックした先のページで行うことができます。
以下のリストでは Sun Studio 12 マルチリンガル版のリリース後に更新されたパッチは末尾に ** を付けました:
パッチ ID | パッチのリリース日 | パッチの概要 |
SPARC Solaris OS
124861-06 | 2008/05/06 | Sun Studio 12: Compiler Common patch for Sun C C++ F77 F95 ** 124863-03 | 2008/04/11 | Sun Studio 12: Patch for Sun C++ Compiler ** 124867-04 | 2008/04/02 | Sun Studio 12: Patch for C 5.9 compiler ** 124870-02 | 2007/11/29 | Sun Studio 12: Patch for Sun Performance Library ** 124872-04 | 2008/03/19 | Sun Studio 12: Patch for dbx 7.6 Debugger ** 124875-02 | 2007/08/06 | Sun Studio 12: Patch for Debugger GUI 3.0 126495-02 | 2007/09/13 | Sun Studio 12: Patch for debuginfo handling ** 126503-01 | 2007/08/06 | Sun Studio 12: Patch for Sun Distributed Make 7.8 126995-03 | 2008/04/11 | Sun Studio 12: Patch for Performance Analyzer Tools ** 127000-03 | 2008/03/03 | Sun Studio 12: Patch for Fortran 95 8.3 Compiler ** 127001-01 | 2007/08/06 | Sun Studio 12: Patch for Fortran 95 8.3 Dynamic Libraries 127143-02 | 2008/01/09 | Sun Studio 12: Patch for Fortran 95 8.3 Support Library ** 127147-01 | 2007/08/24 | Sun Studio 12: Patch for update notification 127152-01 | 2007/08/06 | Sun Studio 12: Patch for IDE 127156-01 | 2007/08/24 | Sun Studio 12: Patch for install utilities.
x86/x64 Solaris OS
124864-03 | 2008/04/11 | Sun Studio 12_x86: Patch for Sun C++ Compiler ** 124868-04 | 2008/04/02 | Sun Studio 12_x86: Patch for C 5.9 compiler ** 124869-02 | 2007/11/29 | Sun Studio 12_x86: Patch for Sun Performance Library ** 124873-04 | 2008/03/19 | Sun Studio 12_x86: Patch for dbx 7.6 Debugger ** 124876-02 | 2007/08/06 | Sun Studio 12_x86: Patch for Debugger GUI 3.0 126496-02 | 2007/09/13 | Sun Studio 12_x86: Patch for debuginfo handling ** 126498-06 | 2008/05/05 | Sun Studio 12_x86: Sun Compiler Common patch for x86 backend ** 126504-01 | 2007/08/06 | Sun Studio 12_x86: Patch for Sun Distributed Make 7.8 126996-03 | 2008/04/11 | Sun Studio 12_x86: Patch for Performance Analyzer Tools ** 127002-03 | 2008/03/03 | Sun Studio 12_x86: Patch for Fortran 95 8.3 Compiler ** 127003-01 | 2007/08/06 | Sun Studio 12_x86: Patch for Fortran 95 8.3 Dynamic Libraries 127144-02 | 2008/01/09 | Sun Studio 12_x86: Patch for Fortran 95 8.3 Support Library ** 127148-01 | 2007/08/24 | Sun Studio 12_x86: Patch for update notification 127153-01 | 2007/08/06 | Sun Studio 12_x86: Patch for IDE 127157-01 | 2007/08/24 | Sun Studio 12_x86: Patch for install utilities.
x86/x64 Linux OS
124865-03 | 2008/04/22 | Sun Studio 12 Patch for RHEL4 and SuSE9 C++ Compiler ** 124866-02 | 2007/11/29 | Sun Studio 12: Patch for RHEL4 and SuSE9 Sun Performance Library ** 124871-04 | 2008/04/02 | Sun Studio 12: Patch for RHEL4 and SuSE9 C 5.9 compiler ** 124874-02 | 2007/10/08 | Sun Studio 12: Patch for RHEL4 SLES9 Linux dbx 7.6 Debugger ** 124877-02 | 2007/08/06 | Sun Studio 12: Linux Patch for RHEL4 and SLES9 Debugger GUI 3.0 126497-02 | 2007/10/08 | Sun Studio 12: Patch for SLES9 and RHEL4 Linux debuginfo handling ** 126500-01 | 2007/08/06 | Sun Studio 12: Patch for RHEL4 and SLES9 Sun Distributed Make 7.8 126994-02 | 2007/11/12 | Sun Studio 12: Patch for RHEL4 and SLES9 Lingux Performance Analyzer Tools ** 126997-05 | 2008/03/18 | Sun Studio 12: Sun Compiler Common patch for RHEL4 and SuSE9 Linux backend ** 127145-02 | 2008/03/24 | Sun Studio 12 for RHEL4 SLES9: Patch for Linux Fortran 95 8.3 Compiler ** 127146-01 | 2007/08/06 | Sun Studio 12 for RHEL4 SLES9: Patch for Fortran 95 8.3 Dynamic Libraries 127149-01 | 2007/08/24 | Sun Studio 12: Linux Patch for RHEL4 and SLES9 update notification 127154-01 | 2007/08/06 | Sun Studio 12: Linux Patch for RHEL4 and SLES9 IDE 127158-01 | 2007/08/24 | Sun Studio 12: Patch for Linux RHEL4 and SLES9 install utilities.
Posted by keiichio
( 5月 08日 2008年, 12:46:12 午後 JST )
Permalink
投稿されたコメント [0]
スレッドローカル記憶領域のアクセスモデルと -xthreadvar コンパイルオプション
前回紹介したスレッドローカル記憶領域 (TLS) について、引き続きそのアクセスモデルを見ていきたいと思います。詳細は Solaris 10 のマニュアル リンカーとライブラリ 第 8 章 スレッド固有領域 に書かれている通りなのですが、ここではその概要を紹介します。
前回の繰り返しになりますが、Linux 版の Sun Studio はスレッドローカル記憶領域の実装を GNU の仕様に基づいて行っています。それは Solaris の仕様とは若干異なります。このエントリでは Solaris 版の Sun Studio のみを想定して、Solaris のスレッドローカル記憶領域の仕様についてのみ説明します。
リンカーで説明されているモデル
Solaris のリンカーの説明では、以下の 4 つのモードが説明されています。使用に当たっての自由度は一番上の GD が最も高く、一番下の LE が最も低いです。最適化の程度 (アクセス速度) は、一番上の GD が最も低く、一番下の LE が最も高いです。
| 自由度 | 最適化 | 名称 | 概略 |
|---|---|---|---|
| 高 ↑ 低 |
低 ↓ 高 |
General Dynamic (GD) | 動的な TLS |
| Local Dynamic (LD) | 局所シンボルの動的な TLS | ||
| Initial Executable (IE) | オフセットが割り当てられた静的な TLS | ||
| Local Executable (LE) | 静的な TLS |
コンパイラで指定できるオプション
Solaris のリンカーでは上記の 4 つのモデルが説明されていますが、コンパイル時に指定できるのは「動的 (GD) を選択するか、静的 (IE) を選択するか」の 2 つのいずれかです。LD と LE はコンパイル時に指定するようにはなっていません。
-xthreadvar=dynamic |
動的 (GD) |
-xthreadvar=no%dynamic |
静的 (IE) |
x86 バックエンドチームの説明によると、LD および LE の選択はコンパイラおよびリンカーのいずれかが、定められた条件に従って行うとのことで、コンパイル時に指定するものではないようです。リンカーのマニュアルで説明されているように、TLS のアクセスモデルはリンカーによって変更される場合があります。GD から LE へ向かって、すなわち動的なものを静的なものへ、より高速なものへと変換します。静的なものを動的なものへ変換することはありません。共有ライブラリでスレッドローカル記憶領域を使う場合には動的にコンパイルしないと実行可能ファイルからアクセスすることはできませんので、そのような場合には動的な TLS モデルを使うようにコンパイルしておく必要があります。
__thread がプログラムコード内で使われているにもかかわらず -xthreadvar による指定がされていない場合には、以下のルールでコンパイラ自身がモデルを選択します:
-KPIC や -xcode=pic13 によって位置独立コードを使う場合というのは共有ライブラリを構築する場合が殆どではないかと思います。ちょっと乱暴な解釈かもしれないですが、スレッドローカル記憶領域のアクセスモデルは共有ライブラリとそれ以外で使い分ける。とも言えそうです。
いずれにせよ、 参考
__thread を使う場合には、__thread が指定された変数のアクセスモデルは 4 つ存在し、どのモデルが使われるのかは、コンパイラおよびリンカーによって決定される。ということになります。
Posted by keiichio
( 4月 23日 2008年, 11:35:57 午前 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12, スレッドローカルな記憶領域を使う
通常マルチスレッドアプリケーションではすべてのスレッドは同じプロセスに属すため、グローバル変数や静的変数はどのスレッドからも同じ記憶領域が参照されることになり、結果として同じ値を使うことになります。スレッド間で同じ値であることが重要なのですが、場合によっては、スレッド毎に異なる値を持った静的変数があったら便利なことがあります。
これを実現するための一つの方法としてスレッドローカル記憶領域 (TLS , Thread Local Storage) とよばれるしくみが多くのコンパイラと実行環境で提供されています。Solaris および Sun Studio コンパイラの両方で、TLS そのものと、それを使うためのしくみが提供されてています。SPARC 版の Solaris 環境ではかなり前に導入済みでした。x86/x64 版 Solaris 環境では Sun Studio 10 (2005/1) から導入され、Linux 版 Sun Studio では Sun Studio 12 (2007/10) から導入されました。
__thread を変数の前につけて宣言することによって、その変数はスレッドローカルな記憶領域に配置され、スレッド固有の値を持たせることができるようになります。以下のソースで静的変数 key_tls 配列は、スレッドに固有の記憶領域に格納され、それぞれのスレッドで異なる値を持たせることができます。
#include <pthread.h>
#include <thread.h>
#include <pstdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
#define NO_KEYS 8
/* この keys_tls はスレッドローカル記憶領域に保持されます */
__thread int keys_tls[NO_KEYS]
statuc void *thread_func(void *arg){
...
使用法は C/C++ のプログラミング時に __thread キーワードを追加するだけなのですが、内部的なアクセス方式はいくつかのタイプに区別されています。このアクセス方式はコンパイラ時に -xhtreadvar フラグで制御することができます。これについては次の機会にふれたいと思っています。
これと似たものに、スレッド固有データを扱うための POSIX スレッド API があります
pthread_setspecific() pthread_getspecific() pthread_key_create()
スレッドローカル記憶領域を使った場合とスレッド固有データを使った場合の単純な比較を試みる C のサンプルプログラムが Sun Studio に付属しています。このブログにもソースコードを添付しておきますので、興味のあるかたはコンパイルして実行してみてください。ソースファイル内に記されているとおり、-mt -xO3 を付けてコンパイルしてください。
$ cc -o tlsbench -mt -xO3 tlsbench.c $ ./tlsbench
このサンプルプログラムは、 SPARC 版の Sun Studio 12 を使っている場合には /opt/SUNWspro/examples/general/tls にインストールされていますが、x86 版、および Linux 版には付属していません。x86 版、Linux 版で試してみる場合には上のリンクからダウンロードして使ってください。
ちょっと話はそれてしまいますが、このプログラムを -fast オプションを付けてコンパイルをすると正しい比較になりません。-fast によって -xdepend が指定されたことと同じになり、-xdepend によるループ解析の結果、プログラムの 27 行目のループはデッドコードと判断され除去されます。、比較するそれぞれの処理のループ構成が異なることになってしまいます。コンパイラの最適化によってコードがどう組み替えられたのかは -g をつけてコンパイルしたオブジェクトファイルをer_src(1) コマンドによって開くことにより確認できます。
$ cc -o tlsbench -g -mt -xO3 -xdepend tlsbench.c $ er_src tlsbench | more
Solaris と GNU では、TLS の仕様が若干異なります。Sun Studio Linux 版の TLS の実装は GNU の仕様に準拠したものになっています。それぞれの詳細については参考ページをみてみてください。
参考
Posted by keiichio
( 4月 14日 2008年, 03:28:37 午後 JST )
Permalink
投稿されたコメント [0]
コンパイラによる自動並列化の捕捉。縮約 (reduction) を自動で行わせる
前回の自動並列化の説明で、理解不足の点がありました。「姫野ベンチ」で自動並列化を試みた際に gosa という変数の演算部分が並列化できなかったため効果が現れませんでした。という説明をしましたが gosa という変数の演算のj自動並列化を可能にするオプションがありました。このエントリでは、前回はどうして並列化できなかったのか、という点と並列化を可能にするオプションについて説明します。
姫野ベンチのソースコードはダウンロードして展開すれば読むことができますが、直接読める形で公開されていません。コードの一部を紹介することに問題はないのかもしれませんが、このエントリでは姫野ベンチのソースコードは直接使わずに、同等のコードに置き換えて説明します。
どうして並列化できなかったのか
前回のエントリでは「変数がループ内に完全に閉じていないため」と簡単に説明しただけですが、具体的には以下のような状況です
for (i=1; i < 1000; i++) {
sum += a[i]*b[i]; /* S1 */
}
変数 sum は、1 つ前のループ実行時の sum に配列の値から求めた積を加算しているため、単純な方法で並列化することはできません。例えば 2 のスレッドで実行したとしても、最後にはそれぞれのスレッドで求めた sum を一つの値に合算しないと、求める値を得ることはできません。
縮約 (reduction)
この、スレッド毎に一時的な変数で部分和を求めておいて最終的な結果は合算して求める。という処理を行うために、OpenMP では縮約 (reduction) と呼ばれる指定を変数に対して行うことができるようになっています。指定された変数のことを縮約変数と呼びます。ただし丸め誤差の影響から、縮約して複数スレッドで実行した演算結果は、単一スレッドでの演算結果と個なる場合があります。
OpenMP で、ある変数を縮約変数として扱うか否かは明示的に指定する必要があります。
/* OpenMP: for ループで sum を縮約変数として指定 */ #pragma omp parallel for reduction (+:sum)
変数を縮約変数として自動並列化する -xreduction オプション
コンパイラによる自動並列化を行う際にも、コンパイラに縮約を行うように指示をすることができます。縮約可能であると判断された場合には変数は縮約変数として扱われ、並列化されます。OpenMP による並列化を行う場合と同じく、明示的に指示しない限り縮約のための解析と縮約変数の指定は行われません。縮約を行うように指示する場合には -xreduction オプションを追加します。指定されるとコンパイラは、解析の結果可能であれば変数を縮約変数として扱います。
姫野ベンチのソースで試してみる
コンパイル時に gosa の演算が縮約され、198 行目のループが並列化されたことを示すメッセージが出力されました:
cc -c -fast -m64 -DMIDDLE -xvector=simd -xdepend -xautopar -xreduction -xloopinfo himenoBMTxps.c "himenoBMTxps.c", 152 行目: 並列化されます "himenoBMTxps.c", 153 行目: 並列化されません、利得なし "himenoBMTxps.c", 154 行目: 並列化されません、利得なし "himenoBMTxps.c", 170 行目: 並列化されます、逐次版が生成されました "himenoBMTxps.c", 171 行目: 並列化されません、利得なし "himenoBMTxps.c", 172 行目: 並列化されません、利得なし "himenoBMTxps.c", 195 行目: 並列化されません、安全でない依存性 (wrk2 p) "himenoBMTxps.c", 198 行目: 並列化されます、縮約、逐次版が生成されました "himenoBMTxps.c", 199 行目: 並列化されません、利得なし "himenoBMTxps.c", 200 行目: 並列化されません、利得なし "himenoBMTxps.c", 223 行目: 並列化されます、逐次版が生成されました "himenoBMTxps.c", 224 行目: 並列化されません、利得なし "himenoBMTxps.c", 225 行目: 並列化されません、利得なし cc -o bmt himenoBMTxps.o -fast -m64 -DMIDDLE -xvector=simd -xdepend -xautopar -xreduction -xloopinfo
実行結果は以下のようになりました。前回と同じく自動並列化した実行ファイルは OMP_NUM_TREADS=2 という環境変数を指定した上で実行しています:
| CPU | 2 次キャッシュ | メモリ |
|---|---|---|
| AMD Opteron 250 (2.4GHz) x2 | 1 MB | 3326 MB |
結果 (5 回計測した中央値)
| コンパイルオプション | 結果 (MFLOPS) |
|---|---|
| -DMIDDLE -fast -m64 -xvector=simd -xdepend | 812.315620 |
| -DMIDDLE -fast -m64 -xvector=simd -xdepend -xautopar -xreduction -xloopinfo | 1069.074965 |
自動並列化を行う場合に、「安全でない依存性」と報告された変数が縮約によって並列化される可能性がある場合には -xautopar に加えて -xreduction を指定することで、-xautopar だけでは並列化できなかった部分も並列化することができるようになります。
Posted by keiichio
( 3月 28日 2008年, 02:22:46 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12, コンパイラによるプログラムの自動並列化
Sun Studio 12 には自動並列化機能があり、コンパイラがループを解析して並列化を行います。並列化しても安全かどうかを、入れ子になったループも含む全ループにわたって解析し、安全と判断された場合には OpenMP を使って並列化を行います。ループ以外は解析も変更もされません。-xautopar コンパイルオプションを付けてコンパイルすることにより自動並列化が行われます。C/C++/Fortran に対応しています:
$ cc -xautopar foo.c
すでに OpenMP を使った並列化が実装されていたり、マルチスレッド化が行われたプログラムに対して使用することはできません。並列化が行われていないプログラムを変更することなくコンパイラによって自動的に並列化するのが、このオプションの目的です。
処理全体を把握するわけではなく、あくまでもループの解析のみに基づいて局所的に行われる並列化ですので、限定的な効果にとどまりますが、コードにまったく変更を加えることなくマルチコア/マルチソケット環境の恩恵を得ることができる可能性があるため、手元にあるプログラムの再コンパイルと実行が比較的容易な場合には、試してみる価値のあるオプションだと思います。
実際にどのループが並列化されたのか、という情報は -xloopinfo というオプションを追加することで標準エラー出力上で確認できます。
実行する際には OMP_NUM_THREADS 環境変数によって並列処理領域で使用するスレッド数を指定しておく必要があります。指定しない場合には OMP_NUM_THREADS=1 となります。
例によって「姫野ベンチ」で試してみました。処理時間のもっとも長い部分が並列化されなかったので、目に見える効果は現れませんでした。参考までにコンパイル時に -xloopinfo によって出力された内容を貼り付けておきます:
$ make cc -c -fast -g -m64 -DMIDDLE -xvector=simd -xdepend -xautopar -xloopinfo himenoBMTxps.c "himenoBMTxps.c", 152 行目: 並列化されます "himenoBMTxps.c", 153 行目: 並列化されません、利得なし "himenoBMTxps.c", 154 行目: 並列化されません、利得なし "himenoBMTxps.c", 170 行目: 並列化されます、逐次版が生成されました "himenoBMTxps.c", 171 行目: 並列化されません、利得なし "himenoBMTxps.c", 172 行目: 並列化されません、利得なし "himenoBMTxps.c", 195 行目: 並列化されません、安全でない依存性 (wrk2 p) "himenoBMTxps.c", 198 行目: 並列化されません、安全でない依存性 (gosa) "himenoBMTxps.c", 199 行目: 並列化されません、安全でない依存性 (gosa) "himenoBMTxps.c", 200 行目: 並列化されません、安全でない依存性 (gosa) "himenoBMTxps.c", 223 行目: 並列化されます、逐次版が生成されました "himenoBMTxps.c", 224 行目: 並列化されません、利得なし "himenoBMTxps.c", 225 行目: 並列化されません、利得なし cc -o bmt himenoBMTxps.o -fast -g -m64 -DMIDDLE -xvector=simd -xdepend -xautopar -xloopinfo
「安全でない依存性」と記されている部分は、変数がループ内に完全に閉じていないため (例えば一つ前のループ実行時の結果を参照している等)、並列化されなかったことを示しています。変数 gosa のために並列化されなかった198 行目から 200 行目にかけてのループが最も処理時間を要する部分なので、ここが並列化されなかった結果、全体のパフォーマンス向上には結びつきませんでした。
「並列化されます、逐次版が生成されました」という部分は、並列処理を行うものと逐次処理を行うものの両方が生成されたことを示しています。ループ内での処理が少ない場合には逐次版が実行されると説明されていますが、詳細はちょっとわかりませんでしたので引き続き調べたいと思います。上記のコンパイル結果を実行した限りでは、並列化された部分は常に並列処理が実行されていました。
試しに gosa を計算しないようにして、-xautopar の有無によるパフォーマンスの変化を見てみました。演算を一つ省いてしまっていますから姫野ベンチのこれまでの実行結果と比較できる値ではありませんが、並列化の効果を知る上での参考値にはなると思います:
-xautopar を付けてコンパイルした実行ファイルは環境変数 OMP_NUM_THREADS=2 を設定した上で実行しています:
| CPU | 2 次キャッシュ | メモリ |
|---|---|---|
| AMD Opteron 250 (2.4GHz) x2 | 1 MB | 3326 MB |
結果 (5 回計測した中央値)
| コンパイルオプション | 結果 (MFLOPS) |
|---|---|
| -DMIDDLE -fast -m64 -xvector=simd -xdepend -xrestrict | 801.706509 |
| -DMIDDLE -fast -m64 -xvector=simd -xdepend -xrestrict -xautopar -xloopinfo | 1343.303243 |
約 60% と、予想外に大きく向上しました。が、元々このプログラムはループ演算の性能評価に特化したものなので、ループの並列化が全体のパフォーマンスに大きく影響を及ぼすことは当たり前だとも言えます。一般的にこのくらい向上するわけでは決してないと思います。
プログラム全体にわたって効率よく最適化するには、OpenMP による並列化やマルチスレッド化を自ら行うのが良いのですが、手元のプログラムにまったく変更を加えることなく、マルチコア/マルチソケット環境の恩恵を得るには良い選択肢だと思います。
また、今回の gosa の演算をやめてしまうような変更は全然ダメですが、手元のプログラムでループ間の変数の依存を比較的簡単に調整できそうな場合は、ちょっとした変更でパフォーマンスの向上が見込めるかもしれません。
参考:
Posted by keiichio
( 3月 25日 2008年, 02:47:21 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12, cc, -xprofile による実行時プロファイルデータを用いた最適化
以前の SIMD 命令の使用についてのエントリに続いて、姫野ベンチの実行結果から成績の良かった下記のコンパイルオプションの中の、-xprofile=use:bmt について見ていきたいと思います。
-DMIDDLE -fast -m64 -xvector=simd -xprofile=use:bmt
-xprofile
このオプションは collect、use というパラメータを指定して使用します。collect、use 以外に tcov というパラメータもありますが、tcov については別の機会に説明したいと思います。
-xprofile=collect
-xprofile=use
他のコンパイルオプションによる最適化がソースコードの解析に基づくのとは異なり、このオプションは実行時のプロファイルデータに基づいた最適化を行うためのものです。一旦実行させて最適化のためのプロファイルデータを蓄えておいて、そのプロファイルデータを使って再コンパイルすることで、実際の実行時に時間のかかかった処理を特定しその部分の再構築などを行います。ですので -xprofile オプションを使用するコンパイルは必ず以下の流れになります:
より具体的に見ていくために以下の例を使います (foo.c というプログラムをコンパイルして foo という実行ファイルを作成することを想定しています)
1 $ cc -xtarget=native -xprofile=collect:foo foo.c -o foo 2 $ ./foo 123 3 $ ./foo 456 4 $ rm foo 5 $ cc -xtarget=native -xprofile=use:foo foo.c -o foo
1 行目のコンパイルで、foo という実行可能ファイルは最適化のためのプロファイルデータを収集するプログラムとして生成されます。
2 行目と 3 行目の実行により、実行ディレクトリに foo.profile というサブディレクトリが生成され、ここにプロファイルデータが蓄積されます。このディレクトリ名はオプションの指定のしかたによって変わります。例えば -xprofile=collect:/tmp/bar と指定したら /tmp/bar.profile というサブディレクトリに集められます。プログラムに与える引数によって内部での分岐先が異なるような場合には、異なる引数を与えて複数回実行させます。ただ、ここで与える引数はあくまでも実際の動作により近い典型的な入力値であり、頻度が非常に少ないのであれば上限値や下限値を与える必要はありませんし、すべての分岐を実行させる必要もありません。
4 行目で再コンパイルのために一旦実行ファイルを削除します。実際にはこの部分は make clean によって行われることが多いのではないかと思います。
5 行目で最終的な実行ファイル foo を生成させます。この foo は実行時のプロファイルデータの情報による最適化が行われたものとなります。
姫野ベンチを実行した時には、-xprofile=collect:bmt を指定してコンパイルし実行させた後に -xprofile=use:bmt を指定して再コンパイルを行ったところ、再コンパイルされた実行可能ファイルのパフォーマンスの向上は約 1 - 2 % でした。あまり大きな効果は出ていません。何度か計測した中では -xprofile オプションの指定によってパフォーマンスが低下した計測値も出ています。姫野ベンチのプログラムではソースコードの解析に基づく最適化に実行時のプロファイルデータを加味しても、最適化そのものに大きな変更は加えられなかった。別の言い方をすれば、実行時プロファイルデータによる最適化はあまり (もしかしたらほとんど) 行われなかった。ということだと思います。analyzer(1) を使って逆アセンブリの結果を見てみましたが、処理の流れに違いは見られませんでした。データ配置にはもしかしたら変更が加えられたかもしれません。
姫野ベンチの場合には実行時プロファイルデータによる効果はさほど現れませんでしたが、プログラム内部の処理の流れによっては、-xprofile を使用した実行時プロファイルデータの使用によって効果的な最適化が行われ、最終的なパフォーマンスの向上に効果を及ぼす場合があると思っています。以前、最新 CPU アーキテクチャへの対応についてのエントリで参考資料として挙げたインテルや AMD の最適化に関する説明内にも「もっとも積極的な (most aggressive)」最適化オプションの一部として -xprofile オプションが使用されています。
Posted by keiichio
( 3月 17日 2008年, 03:41:07 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12, cc で SIMD 命令の使用を指定する (自動ベクトル化)
以前のエントリで、姫野ベンチを色々なコンパイルオプションを使ってコンパイル/実行してみました。そこで実行した中で一番成績が良かったのは以下のオプションでした。このエントリでは以下のオプションの中の -xvector=simd について見ていきたいと思います。
-DMIDDLE -fast -m64 -xvector=simd -xprofile=use:bmt
-xvector=simd
この指定によって SIMD 命令の生成が行われます。gcc 等で「自動ベクトル化」と説明される機能と同等で、ループを解析して可能であれば SIMD 命令を使ってベクトル演算をするようにコンパイルします。2007 年 11 月の Sun Tech Days 東京での Sun Studio のセッションでは以下のように、左のループが右のループに変換される例が説明されていました:
for (i=0; i<1024; i++) for (i=0; i<1024; i+=4) c[i] = a[i] * b[i] =====> c[i:i+3] = a[i:i+3] * b[i:i+3]
この例で説明しているのは、SIMD 命令が 1 回の実行で 4 つのデータを同時に取り扱うことができるという前提で、左のループでループ 4 回分に相当する処理が右のループでは 1 回で済み、その結果ループの回数 (命令の実行回数) が削減され、実行速度の向上が見込まれる。というものです。
「SIMD 命令によって、左のループで 4 回分に相当する処理が右のループでは 1 回で済む」という部分を具体的に見てみるために、手元の姫野ベンチをコンパイルして、Sun Studio 12 のアナライザ analyzer(1) でアセンブラを見てみたところ、C ソースの 215 行目の積を演算する部分で以下のコードが現れていました
... [215] 80552bf: movlps 0x1050804(%esi),%xmm1 [215] 80552c6: movhps 0x105080c(%esi),%xmm1 [215] 80552cd: movlps 0x408(%ebx),%xmm6 [215] 80552d4: movhps 0x410(%ebx),%xmm6 [215] 80552db: mulps %xmm6,%xmm1 ...
movlps、movhps はインテルのデベロッパーズガイドでそれぞれ以下のように説明されていました
上記の 80552bf, 80552c6 で xmm1 に、80552cd, 80552d4 で xmm6 にそれぞれ 4 つの単精度浮動小数点値が用意されて、80552db で mulps によって 4 つの積が一度に求められています。コンパイルされたすべてのアセンブラを読んで理解できたわけではないので、ピンポイントで「これがそうかな?」と理解しているに過ぎませんが、局所的には確かに:
「1 回の積の演算で 4 つのデータが処理されている」
ということになります。これによるパフォーマンスの向上が今回の計測結果で現れたようです。-xvector=simd オプションの有無で比較すると約 2 - 4 % の向上です。わずかな向上ではありますが、元のコードにまったく手を加えることなく試みることができるパフォーマンス向上のための手段と言うことで、検討する価値はあるように思えます。
-xvector=simd を指定しないでコンパイルした場合には、同じ行は mulss (Multiply Scalar Single-Precision Floating-Point Values) によって積が求められていたので、-xvector=simd の有無で明らかに演算方法は異なっていました。
-xvector=simd を使用する際には -xdepend を同時に指定してループの分析を行う必要がありますが、-xdepend を指定せずに -xvector=simd を指定した場合にはコンパイラが自動で -xdepend を指定してコンパイルを実行します。
Sun Tech Days 東京のセッションでは、-xautopar による自動並列化よりは効果は少ないと説明されていました「SPECfp 2006 で 3% の向上、個々の部分で 1 - 7 % 程度の向上」。-xautopar による自動並列化については別の機会に見てみたいと思います。
参考:
Posted by keiichio
( 3月 11日 2008年, 11:23:58 午前 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12 の最新 CPU アーキテクチャへの対応
前のエントリの続きで、Sun Studio 12 の最新 CPU への対応について調べました。結論から言うと、Sun Studio 12 で最新の x86 CPU への対応は行われていました。ただし Sun Studio 12 にパッチを適用する必要があります。
最新の Sun Studio 12 パッチについては、以下の URL を参照してください。
http://developers.sun.com/sunstudio/downloads/patches/ss12_patches.jsp"
このエントリーで最新の x86 CPU と言っているのは以下の 2 つです。
上記のそれぞれへの対応とは、明確な部分としてはそれぞれのアーキテクチャで拡張された命令セットへの対応が挙げられます (SSSE3 および SSE4A)。内部的なそれ以外の部分への対応も行われているのではないかと思います。これらのマシンのいずれかが手元にあるかたは、ぜひ Sun Studio 12 に最新パッチを適用して以下のフラグのいずれかを試してみてください。
-xtarget=native # コンパイルを実行するマシンに合わせて最適化 -xtarget=native64 # 同上。64bit コンパイル。 -xtarget=woodcrest # インテル Core アーキテクチャ -xtarget=barcelona # AMD クアッドコア Opteron
-xtarget=woodcrest または -xtarget=barcelona を使用する場合には、-m64 を付けることで 64bit コンパイルが行われます。付けない場合には 32bit コンパイルが行われます。
例: $ cc -c -xtarget=barcelona -m64 foo.c -o foo.o
参考資料
すべてがまとまった資料が Sun のサイトから参照できれば良かったのですが見つかりませんでした。各 CPU メーカーからの資料がわかりやすかったです。
Posted by keiichio
( 3月 05日 2008年, 04:49:14 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio Express 02/08 がリリースされました
Sun Studio Express 02/08 (2008 年 2 月版) がリリースされました。
ダウンロードは以下のページから行えます。メールアドレスの入力を求められます。
http://developers.sun.com/sunstudio/downloads/express/
Sun Studio Express とは、新機能を評価するための先行リリースで、今現在リリースされている Sun Studio 12 に開発中の新機能が加えられたものです。
| Sun Studio 12 | Sun Studio Express 02/08 | |
|---|---|---|
| 位置づけ | 正式リリース | 評価用先行リリース |
| 対応プラットフォーム | Solaris, Linux | Solaris, Linux |
| 価格 | 無償 | 無償 |
| 日本語化 | 日本語化済み | していません |
今回の Studio Express 02/08 で加えられた新機能は以下の URL で見ることができます。
http://developers.sun.com/sunstudio/downloads/ssx/readme.html
製品の最新プロセッサーアーキテクチャへの対応は、どちらの製品であっても行われていると思っていたのですが、Sun Studio の英語版のトップページにある Express 02/08 の紹介で「..., updated compilers and optimized code generation (e.g. SSSE3)」と書かれているのを気にしています。インテルの Core アーキテクチャで追加された SSSE3 については、Express 02/08 のみ対応? パッチをあてれば Sun Studio 12 であっても大丈夫と思っていたのですが ... 調べます...
ちなみに、AMD クアッドコア Opteron (コードネーム: Barcelona) については、両方とも対応しています。-xtarget=barcelona というコンパイラオプションが使えます。
$ cc -c -xtarget=barcelona foo.c -o foo.o
Posted by keiichio
( 3月 03日 2008年, 06:02:36 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12 C コンパイルオプションと姫野ベンチ
以前のエントリで Sun Studio 12 の -fast オプションに関連して、-xregs=frameptr オプションによる、フレームポインタレジスタを汎用レジスタとして使用する場合についてちょっと言及しました。このオプションによるプログラムの実行速度の違いを調べるために、「姫野ベンチ」を使ってみることにしました。姫野ベンチについてはリンク先の説明を参照してください。と言うか、リンク先の説明以上のことはできないです ...
まずは単にコンパイルして実行してみました
マシン
| CPU | 2 次キャッシュ | メモリ |
|---|---|---|
| AMD Opteron 250 (2.4GHz) x2 | 1 MB | 3326 MB |
結果 (5 回計測した中央値)
| コンパイルオプション | 結果 (MFLOPS) |
|---|---|
| -DMIDDLE -fast -m64 | 942.156648 |
| -DMIDDLE -fast -m64 -xregs=no%frameptr | 960.605658 |
... フレームポインタレジスタを本来の目的で使用した方が良いスコアが出ました ... ただ、5 回計測した中の最大値、最小値についてはほとんど差が出ていません。また、5 回すべてでフレームポインタレジスタを汎用レジスタとして使用した場合には遅くなるかというと、そうではありません。これは有意な差とは言えないような気がしています。今回の環境でのこのプログラムについては、フレームポインタレジスタの取り扱いは実行速度に影響を及ぼさない。と言えそうです。
他にも気になるコンパイルオプションがあったので、今回の計測時に一緒に試しました。すべての結果は以下の通りです。
結果 (5 回計測した中央値)
| コンパイルオプション | 結果 (MFLOPS) |
|---|---|
| -DMIDDLE -xtarget=native64 -xO5 | 909.317671 |
| -DMIDDLE -xtarget=native64 -xO5 -xvector=simd | 930.913117 |
| -DMIDDLE -xtarget=native64 -xO5 -xvector=simd -xprofile=use:bmt | 915.097250 |
| -DMIDDLE -fast -m64 | 942.156648 |
| -DMIDDLE -fast -m64 -xregs=no%frameptr | 960.605658 |
| -DMIDDLE -fast -m64 -xvector=simd | 983.480853 |
| -DMIDDLE -fast -m64 -xvector=simd -xprofile=use:bmt | 998.006062 |
-xvector=simd とは、SIMD 命令 (SSE) を使用を指示するためのオプションです。
-xprofile=use は、一旦プロファイル用のデータを収集し、そのデータを使用してコンパイルを行うためのものです。今回の計測時には -xprofile=collect オプションでコンパイルした実行形式を 5 回の実行し、5 回の実行結果をプロファイルデータとして使用しています。
色々と知りたいので、引き続きソースコードを読むなどしていきたいと思っています。
Posted by keiichio
( 11月 05日 2007年, 12:29:09 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12, cc, -fast オプション
一年ほど前に、Sun Studio 11 の -fast オプションについてのトピックを書いたので、今回は Sun Studio 12 について、同様の内容を見てみたいと思います。
SPARC 版の C コンパイラでは -fast に関する更新はありません。Sun Studio 12 と Sun Studio 11 では同じオプションに展開されます。具体的にどのオプションに展開されるのかについては、以下のオプション等で確認できます
$ cc -c -fast myprog.c -###
x86 版の C コンパイラでは -fast に変更が加えられています。Sun Studio 12 では、-xregs=frameptr が指定されるようになりました。-fast は以下のオプションに展開されます (Solaris, と Linux で同じオプションに展開されます)。
-fns -nofstore -fsimple=2 -fsingle -xalias_level=basic -xbuiltin=%all -xdepend -xlibmil -xlibmopt -xO5 -xregs=frameptr -xtarget=native
もし、Sun Studio 11 で -fast を指定してコンパイルしてみたものを Sun Studio 12 で同様に -fast を指定すると、-xregs=frameptr 付きでコンパイルされるか否かの違いが生じます。
-xregs=frameptr
このオプションは x86 アーキテクチャのフレームポインタレジスタを汎用レジスタとして扱うように指定します。そうすることでパフォーマンスが向上することがある、とマニュアルに書いてあり、実例は思いつかないですが使えるレジスタが増えるわけですから、パフォーマンスを向上させる方向に働くというのはに納得はできます。汎用レジスタとして使用することによってフレームのアドレスが保持されなくなるので、DTrace やパフォーマンスアナライザ等のスタックを調べてプログラムの動作を追跡するツールの動作に悪影響を及ぼすというマニュアルの説明についても、その通りなのでしょう ... 実際にこのプログラムではこうだった、と報告できるのが一番良いのですが、想像になってしまうのがつらいところです。何か試して報告できるか、やってみます。
Posted by keiichio
( 10月 09日 2007年, 06:59:07 午後 JST )
Permalink
投稿されたコメント [0]
Sun Studio 12 のマルチリンガル版がリリースされました。Sun Studio 12 そのものについては製品紹介ページを見ていただくとして、ここではすでにリリース済みの英語版との違いについて説明します。
Sun Studio 12 の英語版は 2007 年 6 月末にすでにリリースされています。このマルチリンガル版では、日本語版および中国語版を含めること、および英語版のリリース以降に提供されたパッチを含めることが行われました。したがって日本語版をインストールすると、Sun Studio 12 に加えてパッチもインストールされます。日本語版をインストールした場合、イメージとしては以下のようになります。
Sun Studio 12 マルチリンガル版 = Sun Studio 12 英語版 + パッチ + 日本語パッケージ
今回のマルチリンガル版リリース時点の以下の推奨パッチが、インストーラーによって自動的にインストールされます (tar ファイルをダウンロードした場合には、パッチを適用済みのイメージを得ることができます)
SPARC Solaris OS
124861-02: Sun Studio 12: Compiler Common patch for Sun C C++ F77 F95 124863-01: Sun Studio 12: Patch for Sun C++ Compiler 124867-01: Sun Studio 12: Patch for C 5.9 compiler 124870-01: Sun Studio 12: Patch for Sun Performance Library 124872-01: Sun Studio 12: Patch for dbx 7.6 Debugger 124875-02: Sun Studio 12: Patch for Debugger GUI 3.0 126495-01: Patch for Sun Studio 12 debuginfo handling 126503-01: Sun Studio 12: Patch for Sun Distributed Make 7.8 126995-01: Sun Studio 12: Patch for Performance Analyzer Tools 127000-01: Sun Studio 12: Patch for Fortran 95 8.3 Compiler 127001-01: Sun Studio 12: Patch for Fortran 95 8.3 Dynamic Libraries 127143-01: Sun Studio 12: Patch for Fortran 95 8.3 Support Library 127147-01: Sun Studio 12: Patch for update notification 127152-01: Sun Studio 12: Patch for IDE 127156-01: Sun Studio 12: Patch for install utilities.
x86/x64 Solaris OS
124864-01: Sun Studio 12_x86: Patch for Sun C++ Compiler 124868-01: Sun Studio 12_x86: Patch for C 5.9 compiler 124869-01: Sun Studio 12_x86: Patch for Sun Performance Library 124873-01: Sun Studio 12_x86: Patch for dbx 7.6 Debugger 124876-02: Sun Studio 12_x86: Patch for Debugger GUI 3.0 126496-01: Patch for Sun Studio 12_x86 debuginfo handling 126498-01: Sun Studio 12_x86: Sun Compiler Common patch for x86 backend 126504-01: Sun Studio 12_x86: Patch for Sun Distributed Make 7.8 126996-01: Sun Studio 12_x86: Patch for Performance Analyzer Tools 127002-01: Sun Studio 12_x86: Patch for Fortran 95 8.3 Compiler 127003-01: Sun Studio 12_x86: Patch for Fortran 95 8.3 Dynamic Libraries 127144-01: Sun Studio 12_x86: Patch for Fortran 95 8.3 Support Library 127148-01: Sun Studio 12_x86: Patch for update notification 127153-01: Sun Studio 12_x86: Patch for IDE 127157-01: Sun Studio 12_x86: Patch for install utilities.
x86/x64 Linux OS
124865-01: Sun Studio 12 Patch for RHEL4 and SuSE9 C++ Compiler 124866-01: Sun Studio 12: Patch for RHEL4 and SuSE9 Sun Performance Library 124871-01: Sun Studio 12: Patch for RHEL4 and SuSE9 Linux C 5.9 compiler 124874-01: Sun Studio 12: Patch for RHEL4 SLES9 Linux dbx 7.6 Debugger 124877-02: Sun Studio 12: Linux Patch for RHEL4 and SLES9 Debugger GUI 3.0 126497-01: Patch for SLES9 and RHEL4 Linux debuginfo handling 126500-01: Sun Studio 12: Patch for RHEL4 and SLES9 Sun Distributed Make 7.8 126994-01: Sun Studio 12: Patch for RHEL4 and SLES9 Lingux Performance Analyzer Tools 126997-01: Sun Studio 12: Sun Compiler Common patch for RHEL4 and SuSE9 Linux backend 127145-01: Sun Studio 12 for RHEL4 SLES9: Patch for Linux Fortran 95 8.3 Compiler 127146-01: Sun Studio 12 for RHEL4 SLES9: Patch for Fortran 95 8.3 Dynamic Libraries 127149-01: Sun Studio 12: Linux Patch for RHEL4 and SLES9 update notification 127154-01: Sun Studio 12: Linux Patch for RHEL4 and SLES9 IDE 127158-01: Sun Studio 12: Patch for Linux RHEL4 and SLES9 install utilities.
これらのパッチが適用済みか否かは、Sun Studio の version(1) コマンドで確認することができます。デフォルトでは /opt/SUNWspro/bin/version としてインストールされます。
Posted by keiichio
( 10月 02日 2007年, 07:12:54 午後 JST )
Permalink
投稿されたコメント [0]