| Sun WorkShop 6 update 1 の新機能 |
第 1 章
Sun WorkShop 6 update 1 の新機能の紹介
この章では、Sun WorkShopTM 6 update 1 のコンパイラとツールの新しい機能について説明します。このリリースは、主に UltraSPARCTM III プロセッサにおけるパフォーマンス向上にねらいを定めています。
この章は更新された Sun WorkShop コンポーネントごとに節に分かれており、新機能の概要が表にまとめられています。一部の機能については、表の次の節でさらに詳しく説明しています。
- 「C コンパイラ」2ページ
- 「C++ コンパイラ」11ページ
- 「Fortran コンパイラ」25ページ
- 「区間演算」29ページ
- 「dbx」33ページ
- 「Sun Performance Library」33ページ
- 「標本アナライザ」35ページ
C コンパイラ
表 1-1 は、C コンパイラの Sun WorkShop 6 update 1 リリースで使用できる新機能を示しています。これらの機能の一部は、表の次の節でさらに詳しく説明しています。
表 1-1 C コンパイラの新機能 UltraSPARC III プロセッサのサポート -xtarget-xchip新リリースの -xtargetおよび-xchipオプションには、ultra3を指定できるようになりました。UltraSPARC III で最良のパフォーマンスを得るために推奨されるフラグについては、次の節の説明を参照してください。型に基づいた解析による最適化 -xalias_level新リリースの C コンパイラでは、型に基づいた別名解析と最適化を行うための、オプションとプラグマが使用できます。 新しいプラグマによる数学ルーチンパフォーマンスの向上 __MATHERR_ERRNO_DONTCARE新リリースの cc -fastコマンドの展開には、マクロ__MATHERR_ERRNO_DONTCAREが含まれています。このマクロにより Solaris 8 オペレーティング環境のmath.hは、math.hでプロトタイプ化されている数学ルーチンの一部に対して、パフォーマンスに関連したプラグマを表明します。標準のライブラリ関数のインライン化 -xbuiltinこのオプションを使用すると、コンパイラが有益であると判断した場合に、標準のライブラリ関数の組み込み関数を代用、またはインライン化することにより、生成されるコードのパフォーマンスが向上します。 3 文字表記認識の有効化と無効化 -xtrigraphs新しい -xtrigraphsオプションでは、3 文字表記変換を行うかどうかを指定できます。先読み潜在期間の指定子 -xprefetch=...,latx:factorこの新しいサブオプションによって、データを先読みするためにコンパイラが生成する命令と、その後使用するロードまたはストア命令のデータがどれだけ離れているかを時間的に指定できます。 -I- オプションによるデフォルト検索パスの無効化 -I-新しい -I-オプションを使用すると、コンパイラがインクルードファイルの検索時に使用するアルゴリズムを細かく制御できます。
UltraSPARC III プロセッサのサポート
UltraSPARC III プロセッサ上でプログラムをコンパイルして実行する場合に最良のパフォーマンスを得るには、以下のオプションを使用してコンパイルしてください。
-fast -xcrossfile -xprofile={collect:|use:}
- クロスコンパイルを行う (UltraSPARC III 以外のプラットフォームでコンパイルするが、UltraSPARC III システムで動作するようにオブジェクトバイナリを生成する) には、正しいキャッシュサイズと最適化方針が設定されるように以下のオプションを追加してください。
- 32 ビットコードの生成には
-xarch=v8plusb、64 ビットコードの生成にはv9bを指定してください。非常に大きなデータファイルにアクセスするプログラムの場合、64 ビットコードの方が優れたパフォーマンスを得られます。しかし、-xarch=v9bは 64 ビットコードを生成しなければならない場合だけに使用することをお勧めします。状況によっては、-xarch=v9bを使用したためにパフォーマンスが低下することがあります。-fastオプションは、実行速度を重視する最適化を有効にし、最適化レベルを-xO5に引き上げます。-fastを使用すると、可能な場合により高速な算術演算を代用できるようになるため、-fsimple=2を使用します。しかしこの場合、多少の誤りが発生する可能性があることに注意してください。-xcrossfileが指定されると、コンパイラはコマンド行に指定されたすべてのソースファイルに最適化 (中間手続き的な最適化を含む) を適用します。-xprofile={collect:|use:}は、プログラムパフォーマンスのプロファイルを有効にします。プロファイルによりコンパイラは、コードの中で最も頻繁に実行されているセクションを特定し、最良の効果を得るための局所的な最適化を行います。
注 --xarch={v8plusb|v9b}により UltraSPARC III プラットフォーム向けにコンパイルされたプログラムは、UltraSPARC III 以外のプラットフォームでは動作しません。UltraSPARC I、UltraSPARC II、および UltraSPARC III の各プラットフォームで互換性を維持したまま動作するプログラムをコンパイルするには、-xarch={v8plusa|v9a}を使用してください。
型に基づいた解析による最適化
新しい C コンパイラコマンド
-xalias_levelおよびいくつかの新しいプラグマを使用して、コンパイラに型に基づいた別名解析および最適化を行わせることができます。これらの拡張機能は、C プログラム内でのポインタの使用方法に関する型に基づいた情報を指定するために使用してください。C コンパイラは、この情報を使用してプログラム内のポインタに基づいたメモリー参照に対して、別名の明確化という極めて優れた処理を行います。この新しいコンパイラコマンドの詳細は、
http://docs.sun.comで入手できる『C ユーザーズガイドの追補』(ForteTM Developer 6 update 1/Sun WorkShop 6 update 1 Collection 内) を参照してください。新しいプラグマによる数学ルーチンパフォーマンスの向上
新リリースでは、
-fastオプションを発行するとマクロ__MATHERR_ERRNO_DONTCAREが定義されます。このマクロにより Solaris 8 オペレーティング環境のmath.hは、<math.h> でプロトタイプ化されている数学ルーチンの一部に対して次のようなパフォーマンスに関連したプラグマを表明するようになります。
matherr(3M) のマニュアルページに説明されているように、例外的にコードがエラーの戻り値に依存する場合は、-fastオプションの後に-U__MATHERR_ERRNO_DONTCAREマクロを発行してマクロを無効にする必要があります。標準のライブラリ関数のインライン化
標準のライブラリ関数を呼び出すコードの最適化レベルを向上させるには、
-xbuiltin[=%all|%none]コマンドを使用してください。標準のライブラリ関数の多く (math.hやstdio.hなどで定義されているものなど) は、一般にさまざまなプログラムによって使用されます。このコマンドが使用されると、コンパイラはシステム関数の代わりに組み込み純粋仮想関数を使用してパフォーマンスを向上させることができます。-xbuiltinコマンドの構文は次のとおりです。このコマンドの第一のデフォルトは
-xbuiltin=%noneです。これは、標準ライブラリのどの関数もインライン化されないことを意味します。第一のデフォルトは、-xbuiltinが指定されなかった場合に適用されます。第二のデフォルトは
-xbuiltin=%allです。これは、最適化による改善が見込まれる場合にコンパイラが標準ライブラリ関数をインライン化することを意味しています。第二のデフォルトは、-xbuiltinが引数なしで指定された場合に適用されます。
-fastオプションを指定してコンパイルすると、-xbuiltinは%allに設定されます。3 文字表記認識の有効化と無効化
-xtrigraphsオプションは、ISO/ANSI C 標準規格で定義されているようにコンパイラが 3 文字表記シーケンスを認識するかどうかを決定します。デフォルトでは、コンパイラは
-xtrigraphs=yesと仮定し、コンパイル単位全体に渡ってすべての 3 文字表記シーケンスを認識します。コンパイラが 3 文字表記シーケンスとして解釈している疑問符 (?) を含むリテラル文字列がソースコードに存在する場合、
-xtrigraph=noサブオプションを使用して 3 文字表記シーケンスの認識を無効にできます。-xtrigraphs=noオプションは、コンパイル単位全体に渡ってすべての 3 文字表記の認識を無効にします。次の
trigraphs_demo.cというソースファイルの例を考えてみましょう。
#include <stdio.h>int main (){(void) printf("(\?\?) in a string appears as (??)\n");return 0;}
-xtrigraphs=yesを指定してこのコードをコンパイルすると、次のように出力されます。
example%cc -xtrigraphs=yestrigraphs_demo.cexample%a.out(??) in a string appears as (]
-xtrigraphs=noを指定してコンパイルした場合は、次のように出力されます。
example%cc -xtrigraphs=notrigraphs_demo.cexample%a.out(??) in a string appears as (??)
-xtrigraphsオプションの使用方法の詳細は、cc(1) のマニュアルページを参照してください。3 文字表記については、『C ユーザーズガイド』の ANSI/ISO C への移行に関する章を参照してください。先読み潜在期間の指定子
(SPARC プラットフォーム) 大規模マルチプロセッサ上で計算量の多いコードを実行している場合は、
-xprefetchの新しいサブオプションlatx:factor を使用すると便利な場合があります。このサブオプションは、指定された係数に従って先読みから関連するロードまたはストアに至るまでのデフォルトの待ち時間を調整するようにコードジェネレータに指示します。
-I-オプションによるデフォルト検索パスの無効化新しい
-I-オプションを使用すると、コンパイラがインクルードファイルの検索に使用するアルゴリズムを細かく制御できます。この節では、まずデフォルトの検索アルゴリズムについて説明し、続いてこれらのアルゴリズムに対する-I-の効果について説明します。引用符で囲まれたファイルのデフォルトの検索アルゴリズム
#include "foo.h"という形式の (二重引用符が使用される) インクルードファイルの場合は、コンパイラは次の順に検索します。山括弧で囲まれたファイルのデフォルトの検索アルゴリズム
#include <foo.h>という形式の (山括弧が使用される) インクルードファイルの場合は、コンパイラは次の順に検索します。
-I-オプションによる検索アルゴリズムの変更新しい
-I-オプションを使用すると、デフォルトの検索規則を細かく制御できます。コマンド行に-I-が指定されると、コンパイラは次のように動作します。
-Iでディレクトリが明示的に指定されない限り、現在のディレクトリを検索しません。この規則は、#include "foo.h"のようなインクルードファイルについても同様に適用されます。#include "foo.h"という形式のインクルードファイルの場合は、次の順に検索します。#include <foo.h>という形式のインクルード文の場合、インクルードファイルを次の順に検索します。次の例は、
prog.cをコンパイルする場合に-I-を使用した結果を示しています。
次のコマンドは、現在のディレクトリ (インクルードしているファイルのディレクトリ) から
#include "foo.h"という形式のインクルードファイルを検索するデフォルトの動作を示しています。inc/a.h内の#include "c.h"文を処理する場合、プリプロセッサはincサブディレクトリからc.hヘッダーファイルをインクルードします。prog.c内の#include "c.h"文を処理する場合は、プリプロセッサはprog.cを含んでいるディレクトリからc.hファイルをインクルードします。-Hオプションは、インクルードされるファイルのパスを出力するようにコンパイラに指示します。
example%cc -c -Iinc -H prog.cinc/a.hinc/c.hinc/b.hinc/c.hc.h次のコマンドは、
-I-オプションの効果を示しています。プリプロセッサは、#include "foo.h"という形式の文を処理する場合にインクルードしているディレクトリを第一候補として検索しません。代わりに、-Iオプションで指定されるディレクトリをコマンド行に現れる順に検索します。inc/a.h内の#include "c.h"文を処理する場合は、inc/c.hヘッダーファイルではなく./c.hヘッダーファイルをインクルードします。
example%cc -c -I. -I- -Iinc -H prog.cinc/a.h./c.hinc/b.hinc/c.h./c.h詳細は、
cc(1) のマニュアルページの-I-の説明を参照してください。C++ コンパイラ
表 1-2 は、C++ コンパイラ (5.2) の Sun WorkShop 6 update 1 リリースで使用できる新機能を示しています。これらの機能の一部は、表の次の節でさらに詳しく説明しています。
表 1-2 C++ コンパイラの新機能 UltraSPARC III プロセッサのサポート -xtarget-xchip新リリースの -xtargetおよび-xchipオプションには、ultra3を指定できるようになりました。UltraSPARC III で最良のパフォーマンスを得るために推奨されるフラグについては、次の節の説明を参照してください。コンパイル時のパフォーマンス サイズの大きいプログラムの場合、コンパイル速度がかなり高速になります。とりわけ、テンプレートを多用するプログラムでこの効果が顕著に現れます。 一時オブジェクトの寿命 -features=tmplife(標準モードのみ) 新しい -features=tmplifeサブオプションは、C++ 標準規格の条件に従って一時オブジェクトを破棄するようにコンパイラに指示します。-I- オプションによるデフォルト検索パスの無効化 -I-新しい -I-オプションを使用すると、コンパイラがインクルードファイルの検索時に使用するアルゴリズムを細かく制御できます。C++ に対する区間演算サポート -xia-library=[no%]interval(SPARC プラットフォーム) C++ コンパイラのこのリリースは、区間演算ライブラリに対する C++ インタフェースを提供しています。 複数言語のリンク -xlang-staticlib新しい -xlangオプションは、Fortran オブジェクトファイルと C++ オブジェクトファイルが混在したリンクを行います。3 文字表記認識の有効化と無効化 -xtrigraphs新しい -xtrigraphsオプションでは、3 文字表記変換を行うかどうか指定できます。リンカーエラーメッセージのフィルタ処理 -filt新しい -filtオプションでは、リンカーエラーメッセージのフィルタ処理をカスタマイズできします。たとえば、 符号化された名前を要求できます。共有 libCstd libCstdの共有バージョンが、C++ コンパイラのlibディレクトリに含まれています。共有 libiostream libiostreamの共有バージョンが、C++ コンパイラのlibディレクトリに含まれています。最適化プラグマ C++ コンパイラは、新しい最適化プラグマである no_side_effectsとreturns_new_memoryを認識します。拡張子 .c++ の認識 新リリースの C++ コンパイラは、 .c++を有効なファイル名接尾辞として認識します。先読み潜在期間の指定子 -xprefetch=...,latx;factorこの新しいサブオプションによって、データを先読みするためにコンパイラが生成する命令と、その後使用するロードまたはストア命令のデータがどれくらい時間的に離れているか指定できます。
UltraSPARC III プロセッサのサポート
UltraSPARC III プロセッサ上でプログラムをコンパイルして実行する場合に最良のパフォーマンスを得るには、以下のオプションを使用してコンパイルしてください。
-fast -xcrossfile -xprofile={collect:|use:}
- クロスコンパイルを行う (UltraSPARC III 以外のプラットフォームでコンパイルするが、UltraSPARC III システムで動作するようにオブジェクトバイナリを生成する) には、正しいキャッシュサイズと最適化方針が設定されるように以下のオプションを追加してください。
- 32 ビットコードの生成には
-xarch=v8plusb、64 ビットコードの生成にはv9bを指定してください。-xarch=v9bは 64 ビットコードを生成しなければならない場合だけに使用することをお勧めします。状況によっては、-xarch=v9bを使用したためにパフォーマンスが低下することがあります。-fastオプションは、実行速度を重視する最適化を有効にし、最適化レベルを-xO5に引き上げます。-fastを使用すると、可能な場合により高速な算術演算を代用できるようにするため、-fsimple=2を使用します。しかしこの場合、多少の誤りが発生する可能性があることに注意してください。-xcrossfileが指定されると、コンパイラはコマンド行に指定されたすべてのソースファイルに最適化 (中間手続き的な最適化を含む) を適用します。-xprofile={collect:|use:}は、プログラムパフォーマンスのプロファイルを有効にします。プロファイルによりコンパイラは、コードの中で最も頻繁に実行されているセクションを特定し、最良の効果を得るための局所的な最適化を行います。
注 --xarch={v8plusb|v9b}により UltraSPARC III プラットフォーム向けにコンパイルされたプログラムは、UltraSPARC III 以外のプラットフォームでは動作しません。UltraSPARC I、UltraSPARC II、および UltraSPARC III の各プラットフォームで互換性を維持したまま動作するプログラムをコンパイルするには、-xarch={v8plusa|v9a}を使用してください。
一時オブジェクトの寿命
式を評価する場合に、コンパイラは一時オブジェクトを作成することがあります。たとえば、関数が呼び出された場合や、キャストがクラスオブジェクトを生成する場合がそうです。古い言語定義では、一時オブジェクトが生成されたブロックの最後に到達するまでの任意の時点でこのような一時オブジェクトを破棄できました。しかし、C++ 標準規格では、一時オブジェクトが参照の初期化に使用されないかぎり、そのオブジェクトが生成されている式全体の最後で、そのオブジェクトを破棄しなければならないと定めています。
デフォルトでは、C++ コンパイラ (5.2) は、古い言語定義を実装します。つまり、一時オブジェクトが作成されたブロックの最後でそのオブジェクトを破棄します。コンパイラに C++ 標準規格の条件に従って一時オブジェクトを破棄させるには、新しい
-features=tmplifeサブオプションを使用してください。
{ foo(ClassA()); bar(ClassB()); some-statement; }コマンド行で
-features=tmplifeを指定した場合、呼び出し順序は次のようになります。
tmp1=ClassA(); foo(tmp1); tmp1.~ClassA();tmp2=ClassB(); bar(tmp2); tmp2.~ClassB();some-statement;
-features=tmplifeサブオプションを指定しない場合、呼び出し順序は次のようになります。
tmp1=ClassA(); foo(tmp1);tmp2=ClassB(); bar(tmp2);some-statement;tmp2.~ClassB();tmp1.~ClassA();このサブオプションは、互換モード (
-compat[=4]) では使用できません。
-I-オプションによるデフォルト検索パスの無効化新しい
-I-オプションを使用すると、コンパイラがインクルードファイルの検索時に使用するアルゴリズムを細かく制御できます。この節では、まずデフォルトの検索アルゴリズムについて説明し、続いてこれらのアルゴリズムに対する-I-の効果について説明します。引用符で囲まれたファイルのデフォルトの検索アルゴリズム
#include "foo.h"という形式の (二重引用符が使用される) インクルードファイルの場合は、コンパイラは次の順に検索します。
- 現在のディレクトリ (つまり「インクルードしている」ファイルが存在するディレクトリ)
-Iオプションで指定されているディレクトリ (存在する場合)- コンパイラによって提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの各ディレクトリ
/usr/includeディレクトリ山括弧で囲まれたファイルのデフォルトの検索アルゴリズム
#include<foo.h>という形式の (山括弧が使用される) インクルードファイルの場合派、コンパイラは次の順に検索します。
-Iオプションで指定されているディレクトリ (存在する場合)- コンパイラによって提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの各ディレクトリ
/usr/includeディレクトリ
注 - インクルードファイルの名前が標準ヘッダーの名前と一致する場合は、『C++ ユーザーズガイド』の第 5 章の「標準ヘッダーの実装」の節も参照してください。
-I-オプションによる検索アルゴリズムの変更新しい
-I-オプションを使用すると、デフォルトの検索規則を細かく制御できます。コマンド行に-I-が指定されると、コンパイラは次のように動作します。
-I指令でディレクトリが明示的に指定されない限り、現在のディレクトリを検索しません。この規則は、#include "foo.h"という形式のインクルードファイルについても同様に適用されます。#include "foo.h"という形式のインクルードファイルの場合は、次の順に検索します。
-Iオプション (-I-の前と後の両方) で指定されたディレクトリ- コンパイラによって提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの各ディレクトリ
/usr/includeディレクトリ#include <foo.h>という形式のインクルードファイルの場合は、次の順に検索します。次の例は、
prog.ccでコンパイルする場合に-I-を使用した結果を示しています。
次のコマンドは、現在のディレクトリ (インクルードしているファイルのディレクトリ) から
#include "foo.h"という形式のインクルードファイルを検索するデフォルトの動作を示しています。inc/a.h内の#include "c.h"文を処理する場合、コンパイラはincサブディレクトリからc.hヘッダーファイルをインクルードします。prog.c内の#include "c.h"文を処理する場合は、プロプロセッサは、prog.cを含んでいるディレクトリからc.hファイルをインクルードします。-Hオプションは、インクルードされるファイルのパスを出力するようにコンパイラに指示します。
example%CC -c -Iinc -H prog.ccinc/a.hinc/c.hinc/b.hinc/c.hc.h次のコマンドは、
-I-オプションの効果を示しています。コンパイラは、#include "foo.h"という形式の文を処理する場合にインクルードしているディレクトリを第一候補として検索しません。代わりに、-Iオプションで指定されるディレクトリをコマンド行に現れる順に検索します。inc/a.h内の#include "c.h"文を処理する場合は、inc/c.hヘッダーファイルではなく./c.hヘッダーファイルをインクルードします。
example%CC -c -I. -I- -Iinc -H prog.ccinc/a.h./c.hinc/b.hinc/c.h./c.h詳細は、
CC(1) のマニュアルページに含まれる-I-の説明を参照してください。C++ に対する区間演算サポート
(SPARC プラットフォーム) Sun WorkShopTM 6 update 1 C++ Compilers (5.2) は、C++ 区間演算ライブラリに対する C++ インタフェースを提供します。詳細は、このマニュアルの 「区間演算」と、
http://docs.sun.com(ForteTM Developer 6 update 1/Sun WorkShop 6 update 1 Collection) に掲載されている『C++ Interval Arithmetic Programming Reference』を参照してください。関連するコンパイラオプションの詳細は、
CC(1) のマニュアルページに含まれる次のオプションの説明を参照してください。複数言語のリンク
新しい
-xlangオプションを使用すると、Fortran オブジェクトファイルと C++ オブジェクトファイルをリンクできます。たとえば、C++ の主プログラムと Fortran オブジェクトファイルをリンクできます。複数の言語を同時にリンクする場合に使用するドライバを決定するには、次の言語階層を使用してください。
Fortran 95、Fortran 77、および C++ のオブジェクトファイルを一緒にリンクするには、最上位の言語のドライバを使用してください。たとえば、C++ と Fortran 95 の各オブジェクトファイルをリンクするには、次の C++ コンパイラコマンドを使用します。
example%CC -xlang=f95...Fortran 95 と Fortran 77 の各オブジェクトファイルをリンクするには、次のように Fortran 95 ドライバを使用します。
example%f95 -xlang=f77...詳細は、
CC(1) のマニュアルページに含まれる以下のオプションの説明を参照してください。3 文字表記認識の有効化と無効化
-xtrigraphsオプションは、ISO/ANSI C 標準規格で定義されているようにコンパイラが 3 文字表記シーケンスを認識するかどうかを決定します。デフォルトでは、コンパイラは
-xtrigraphs=yesと仮定し、コンパイル単位全体に渡ってすべての 3 文字表記シーケンスを認識します。コンパイラが 3 文字表記シーケンスとして解釈している疑問符 (?) を含むリテラル文字列がソースコードに存在する場合、
-xtrigraph=noサブオプションを使用して 3 文字表記シーケンスの認識を無効にできます。-xtrigraphs=noオプションは、コンパイル単位全体に渡ってすべての 3 文字表記の認識を無効にします。次の
trigraphs_demo.ccというソースファイルの例を考えてみましょう。
#include <stdio.h>int main (){(void) printf("(\?\?) in a string appears as (??)\n");return 0;}
-xtrigraphs=yesを指定してこのコードをコンパイルすると、次のように出力されます。
example%CC-xtrigraphs=yestrigraphs_demo.ccexample%a.out(??) in a string appears as (]
-xtrigraphs=noを指定してコンパイルした場合は、次のように出力されます。
example%CC-xtrigraphs=notrigraphs_demo.ccexample%a.out(??) in a string appears as (??)
-xtrigraphsオプションの使用の詳細は、CC(1) のマニュアルページを参照してください。3 文字表記については、『C ユーザーズガイド』の ANSI/ISO C への移行に関する章を参照してください。リンカーエラーメッセージのフィルタ処理
新しい
-filtオプションは、通常、CCがリンカーからのエラーメッセージに対して行うフィルタ処理を抑止します。
-filt=no%namesは、C++ の符号化された C++ リンカー名を復号化しません。-filt=no%returnsは、関数の戻り型を復号化を抑止しません。これにより関数名をより簡単に特定できます。ただし、仮想関数の場合、関数名は同じで戻り型のみが異なる関数があるため、注意が必要です。-filt=no%errorsは、リンカーからのエラーメッセージに関する C++ の説明を表示しません。説明を抑止すると、リンカーの診断が別のツールに直接渡される場合に役立ちます。次の例は、次のコードをコンパイルする場合に
-filtを使用する効果を示しています。
// filt_demo.ccclass type {public:virtual ~type(); // 何も定義されていません};int main(){type t;}このコードを
-filtオプションなしでコンパイルすると、コンパイラは-filt=names,returns,errorsと仮定し、以下のような標準の出力を表示します。
注意 - 上記のヒントは、日本語環境では技術的制限のため出力されません。
次のコマンドは、符号化された C++ リンカー名の復号化を抑止するとともに、リンカーエラーの C++ 説明を抑止します。
example%CC -filt=no%names,no%errors filt_demo.cc未定義の 最初に参照しているシンボル ファイル__1cEtype2T6M_v_ filt_demo.o__1cEtypeG__vtbl_ filt_demo.old: 重大なエラー: シンボル参照エラー。a.out に書き込まれる出力はありません。共有
libCstdSun WorkShop 6 update 1 Compilers C++ (5.2) には、
libCstdライブラリの共有バージョンが含まれます。
libCstdの共有バージョンを使用するには、コンパイルとリンクを別々に行ってください。そして、リンク時には、次の例に示すように-library=no%Cstdオプションを使用してコマンド行に共有ライブラリ名を明示的に指定してください。
example%CC -library=no%Cstd *.o\-o myprog /opt/SUNWspro/WS6U1/lib/libCstd.so.1Sun WorkShop 6 update 1 が
/opt以外のディレクトリにインストールされている場合は、システム管理者に実際のパスをお尋ねください。
注 - C++ ソースコードをコンパイルするコマンド内に-library=no%Cstdを使用すると、コンパイラは C++ の標準ヘッダーを検索できません。
共有
libiostreamSun WorkShop 6 update 1 C++ Compilers (5.2) には、従来方式の iostream ライブラリの共有バージョン、
libiostreamが含まれています。この共有バージョン
libiostreamを使用するには、コンパイルとリンクを別々に行ってください。そしてリンク時には、次の例に示すようにコマンド行に共有ライブラリ名を明示的に指定し、-library=iostreamオプションは使用しないでください。
example%CC *.o -o myprog\/opt/SUNWspro/WS6U1/lib/lib/libiostream.so.1Sun WorkShop 6 update 1 が
/opt以外のディレクトリにインストールされている場合は、システム管理者に実際のパスをお尋ねください。
注 - プログラム構築における各コンパイルでは-library=iostreamを使用する必要がありますが、リンク時には-library=iostreamを使用してはなりません。
最適化プラグマ
オプティマイザがより優れたコードを生成するように、以下の新しいプラグマを使用できます。
どちらのプラグマも、name はその名前を使用する、直前に宣言されている関数を示します。
これらのプラグマは、それらが参照する関数の直後に置いてください。たとえば、次の最初のコード例は
no_side_effectsプラグマの正しい配置を示しており、2 つ目の例は誤った配置を示しています。
class good_example {void no_op();#pragma no_side_effects (no_op) // 正しい配置}class bad_example{void no_op();}#pragma no_side_effects (no_op) // 誤った配置拡張子
.c++の認識コマンド行上にファイル名が出現する場合、コンパイラは接尾辞を見てそのファイルをどのように処理するかを決定します。たとえば、
.oで終わっているファイルの場合、コンパイラはオブジェクトファイルとして処理します。Sun WorkShop 6 update 1 C++ Compilers (5.2) は、以下の拡張子を持つファイルを C++ のソースファイルとして認識します。先読み潜在期間の指定子
(SPARC プラットフォーム) 大規模マルチプロセッサ上で計算量の多いコードを実行している場合は、
-xprefetchの新しいサブオプションlatx:factor を使用すると便利な場合があります。このサブオプションは、指定された係数に従って先読みから関連するロードまたはストアに至るまでのデフォルトの待ち時間を調整するようにコードジェネレータに指示します。Fortran コンパイラ
Sun WorkShop 6 update 1 では、Fortran 95 コンパイラと Fortran 77 コンパイラの両方がリリースされています。
表 1-3 は、Sun WorkShop 6 update 1 リリースで使用できる新機能のうち Fortran 95 コンパイラと Fortran 77 コンパイラの両方に共通する機能を示しています。これらの機能の一部は、表の次の節でさらに詳しく説明しています。
表 1-3 Fortran コンパイラの新機能 UltraSPARC III プロセッサのサポート -xtarget-xchip新リリースの -xtargetおよび-xchipオプションには、ultra3を指定できるようになりました。UltraSPARC III で最良のパフォーマンスを得るために推奨される使用フラグについては、次の節の説明を参照してください。int2 組み込みのサポート int2組み込みは、古い Fortran 77 プログラムとの互換性をサポートします。これは、データ引数 var を 2 バイト整数に変換する上で推奨される Fortran 95 のint(var,2) 組み込みと同じ機能を持ちます。-fast オプションの拡張 -fast新リリースの -fastオプションには、-xprefetchオプションが含まれます。先読み潜在期間の指定子 -xprefetch=...,latx:factorこの新しいサブオプションによって、データを先読みするためにコンパイラが生成する命令と、その後使用するロードまたはストア命令のデータがどれくらい離れているかを時間的に指定できます。 複数言語のリンク -xlang新しい -xlangオプションは、Fortran のオブジェクトファイルと C++ のオブジェクトファイルが混在したリンクを行います。
UltraSPARC III プロセッサのサポート
UltraSPARC III プロセッサ上でプログラムをコンパイルして実行する場合に最良のパフォーマンスを得るには、以下のオプションを使用してコンパイルしてください。
-fast -xcrossfile -xprofile={collect:|use:}
- クロスコンパイルを行う (UltraSPARC III 以外のプラットフォームでコンパイルするが、UltraSPARC III システムで動作するようにオブジェクトバイナリを生成する)には、正しいキャッシュサイズと最適化方針が設定されるように以下のオプションを追加してください。
- 32 ビットコードの生成には
-xarch=v8plusb、64 ビットコードの生成にはv9bを指定してください。非常に大きなデータファイルにアクセスするプログラムの場合、64 ビットコードの方が優れたパフォーマンスを得られます。しかし、-xarch=v9bは 64 ビットコードを生成しなければならない場合だけに使用することをお勧めします。状況によっては、-xarch=v9bを使用したためにパフォーマンスが低下することがあります。-fastオプションは、実行速度を重視する最適化を有効にし、最適化レベルを-xO5に引き上げます。-fastを使用すると、可能な場合により高速な算術演算を代用できるようになるため、-fsimple=2を使用します。しかしこの場合、多少の誤りが発生する可能性があることに注意してください。-xcrossfileが指定されると、コンパイラはコマンド行に指定されたすべてのソースファイルに最適化 (中間手続き的な最適化を含む) を適用します。-xprofile={collect:|use:}は、プログラムパフォーマンスのプロファイルを有効にします。プロファイルによりコンパイラは、コードの中で最も頻繁に実行されているセクションを特定し、最良の効果を得るための局所的な最適化を行います。
注 --xarch={v8plusb|v9b}を指定して UltraSPARC III プラットフォーム向けにコンパイルされたプログラムは、UltraSPARC III 以外のプラットフォームでは動作しません。UltraSPARC I、UltraSPARC II、および UltraSPARC III の各プラットフォームで互換性を維持して動作するプログラムをコンパイルするには、-xarch={v8plusa|v9a}を使用してください。
int2組み込みのサポート新リリースの Fortran 95 コンパイラと Fortran 77 コンパイラは、2 バイト整数へのデータ型変換に
int2組み込みをサポートします。int2の組み込みとしての使用は、多くの古い Fortran 77 コードではM=int2(J)という書式で出現しています。Fortran 95 では、
M=int(J,2)を使用することをお勧めします。
-fastオプションの拡張
-fastオプションに含められるオプションの一覧に-xprefetchオプションが追加されました。これにより、コンパイラは先読み指令を戦略的に生成できるようになりました。-xprefetchを使用すると、データ処理ループを持つコードでパフォーマンスをかなり高めることができます。UltraSPARC III プラットフォームの先読み機構は、UltraSPARC II プラットフォームで使用された機構よりもはるかに改良されています。先読み潜在期間の指定子
(SPARC プラットフォーム) 大規模マルチプロセッサ上で計算量の多いコードを実行している場合は、
-xprefetchの新しいサブオプションlatx:factor を使用すると便利な場合があります。このサブオプションは、指定された係数に従って先読みから関連するロードまたはストアに至るまでのデフォルトの待ち時間を調整するようにコードジェネレータに指示します。詳細は、
f77(1) とf95(1) のマニュアルページを参照してください。複数言語のリンク
新しい
-xlangオプションを使用すると、Fortran オブジェクトファイルと C++ オブジェクトファイルをリンクできます。たとえば、Fortran の主プログラムを C++ オブジェクトファイルにリンクできます。複数の言語を同時にリンクする場合に使用するドライバを決定するには、次の言語階層を使用してください。
Fortran 95、Fortran 77、および C++ のオブジェクトファイルを一緒にリンクするには、最上位の言語のドライバを使用してください。たとえば、C++ と Fortran 95 の各オブジェクトファイルをリンクするには、次の C++ コンパイラコマンドを使用します。
example%CC -xlang=f95...Fortran 95 と Fortran 77 の各オブジェクトファイルをリンクするには、次のように Fortran 95 ドライバを使用します。
example%f95 -xlang=f77...区間演算
表 1-4 は、Sun WorkShop 6 update 1 リリースの区間演算で使用できる新機能を示しています。
表 1-4 区間演算の新機能 C++ に対する区間演算サポート (SPARC プラットフォーム) このリリースの C++ コンパイラは、区間演算ライブラリに対する C++ インタフェースを提供します。 新しい f95 INTERVAL 組み込み演算子と関数 f95区間演算では、依存型の減算演算子、積集合関数による除算、および汎用的な乱数生成サブルーチンRANDOM_NUMBERの区間バージョンに対するサポートが追加されています。
C++ に対する区間演算サポート
Sun WorkShop 6 update 1 リリースには、Fortran 95 区間演算に含まれる区間関数と区間演算子の C++ バージョンが含まれています。C++ 区間演算ライブラリの詳細は、
http://docs.sun.com(ForteTM Developer 6 update 1/Sun WorkShop 6 update 1 Collection) に掲載されている『C++ Interval Arithmetic Programming Reference』を参照してください。C++ の区間演算サポートは、C++ ヘッダーファイルと 3 つの区間クラス (float、double、および long double にそれぞれ 1 つ) を提供するライブラリを提供します。区間クラスには次のものが含まれます。
- 閉じた数学的システムを形成する区間算術演算と数学関数。これは、演算子とオペランドのあらゆる組み合わせ (ゼロおよび無限が関係するゼロ除算などの不確定な形式を含む) に対して有効な結果が生成されることを意味します。
- 次に示す 3 種類の区間関係を示す関数:
intersectやinterval_hullなどの区間固有の関数inf、sup、widなどの区間固有の関数- 区間入出力 (単一数値の入出力など)
標準モードのコンパイルの場合、ライブラリ内のシンボルはすべて名前空間
SUNW_intervalにあります。C++ 区間演算機能を使用するには、コードに次のヘッダーファイルを追加してください。
#include <suninterval.h>次に、
-xiaコマンド行オプションを使用してコードをコンパイルする例を示します。
example%CC -ofilename-xiafilename.cc新しい
f95INTERVAL組み込み演算子と関数このリリースでは、以下の機能が
f95区間演算に追加されました。依存型の減算演算子
依存型の減算演算子
.DSUB.は、区間演算加算の一方のオペランドの回復に使用できます。一方の区間変数が他方の区間変数に適用された算術演算の結果である場合、これらの 2 つの区間変数は依存関係にあります。たとえば、X = A + B の場合、X は A と B の両方によって決まります。X から A または B を回復させる場合、依存型の区間減算はより狭幅の区間結果を生成します。
注 - 定数は独立しているため、依存型の演算を区間定数に適用することはできません。依存型の演算を区間定数に適用すると、コンパイル時エラーが発生します。
X.DSUB.Aの結果には、区間等式 X = A + B の B に対する解が含まれます。解が存在しない場合、結果は [-inf,inf] です。
の場合、
X .DSUB. X = [0]WID(X) < WID(A)の場合、X .DSUB. A = [-inf,inf]。これは、X = A + Bの場合、WID(X)がWID(A)以上でなければならないため[empty].DSUB.[empty]=[-inf,inf]A�[empty]の場合、[empty] .DSUB. A = [empty]X�[empty]の場合、X.DSUB.[empty]=[-inf,inf]。この結果になるのは、X�[empty]とA�[empty]が不可能な組み合わせのため積集合関数による除算
関数
DIVIXは、区間 C と区間除算演算 (B/A) の共通部分の区間格納装置である C � (B/A) を返します。A にゼロが含まれる場合には、区間除算演算 (B/A) の数学上の結果は互いに素である 2 つの区間の和集合です。和集合内の各区間は、現在実装されている区間演算システムで表現できます。
DIVIX関数は、これらの区間の 1 つまたは一部を返すことができます。
乱数サブルーチン
RANDOM_NUMBER(HARVEST)は、区間変数HARVESTを通して 1 つまたは複数の疑似乱数区間を返します。![]()
0 £
£
< 1 は、区間終了位置 (
は下位の終了位置、
は上位の終了位置) について当てはまります。そのため
は区間 [0, 1] に均等に分配され、
,
が与えられると
は区間
に均等に分配されます。
dbx表 1-5 は、
dbxの Sun WorkShop 6 update 1 リリースで使用できる新機能を示しています。
表 1-5 dbxの新機能Fortran における区間演算式のサポート 新リリースでは、Fortran の区間型と区間式がサポートされるようになりました。単純演算 (加算、減算、乗算、除算、否定)、一致、および不一致の各演算が実装されています。
Sun Performance Library
Sun Performance LibraryTM は、数値を多用する問題 (線形代数など) を解決するための最適化された高速の数学サブルーチンです。Sun Performance Library は、Netlib (
http://www.netlib.org) から入手できる一連のパブリックドメインアプリケーションに基づいています。これらのルーチンは、機能が拡張され、 Sun Performance Library としてバンドルされています。表 1-6 は、Sun Performance Library の Sun WorkShop 6 update 1 リリースで使用できる新機能と拡張された機能を示しています。
標本アナライザ
表 1-7 は、標本アナライザの Sun WorkShop 6 update 1 リリースで使用できる新機能を示しています。
表 1-7 標本アナライザの新機能 ハードウェアカウンタのオーバーフロープロファイリング ハードウェアカウンタのオーバーフロープロファイリングは、軽量プロセス (LWP) が動作している CPU のハードウェアカウンタがオーバーフローする場合に、各 LWP の呼び出しスタックを記録します。 スタンドアロンの collect コマンド 新しい collectコマンドは、Sun WorkShop およびdbxとは関係のないアプリケーション上のパフォーマンスデータを収集します。MPI アプリケーションのサポート機能の改良 新しい collectコマンドでは、メッセージ引き渡しインタフェース (MPI) のサポート機能が拡張されています。OpenMP ( libmtsk) アプリケーションのサポート機能の改良新リリースでは、スレーブスレッドがパラレル領域の最後で同期を待機している時とコードがシリアル領域にあるために待機している時を区別できます。 マップファイル生成機能の改良 新リリースでは、関数リストのソートに使用されているメトリック (計測データ) にかかわらず実行可能ファイルに命令できるようにマップファイルが生成されます。 「フィルタを選択」ダイアログへの追加 「実験ファイル」リスト、および「フィルタを選択」ダイアログ内の「すべてを選択」、「すべてを選択解除」、「反転」各ボタンを使用すると、表示されるデータを変更する実験を選択できます。「すべてを有効」、「選択中のすべてを有効」、「すべてを無効」、および「選択中のすべてを無効」ボタンは、実験のデータ表示のオン / オフ切り替えに使用できます。
ハードウェアカウンタのオーバーフロープロファイリング
ハードウェアカウンタのオーバーフロープロファイリングは、軽量プロセス (LWP) が動作している CPU のハードウェアカウンタがオーバーフローする場合に、各 LWP の呼び出しスタックを記録します。記録されるデータには、CPU のタイムスタンプと ID、スレッド、LWP などがあります。ハードウェアカウンタのオーバーフロープロファイリングが行えるのは、Solaris 8 オペレーティング環境 SPARC Platform Edition を使用している UltraSPARC III システム上と、Solaris 8 オペレーティング環境 Intel Platform Edition を使用している Intel システム (Pentium II か III) 上だけです。詳細は、Sun WorkShop オンラインヘルプの「ハードウェアカウンタのオーバーフロープロファイルデータ」と「収集するデータの選択」を参照してください。
スタンドアロンの
collectコマンド新しい
collectコマンドは、Sun WorkShop およびdbxとは関係のないアプリケーション上のパフォーマンスデータを収集します。collectコマンドは、収集されるデータの型を指定する引数、実験および実験グループに名前を付ける引数、execシステムコールからの出口で対象プロセスを停止したままにしてデバッガがこのプロセスに連結できるように要求する引数などを提供します。詳細は、collect(1) のマニュアルページを参照してください。MPI アプリケーションのサポート機能の改良
|
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |