Sun WorkShop 6 update 1 の新機能 ホーム目次前ページへ次ページへ索引


第 1 章

Sun WorkShop 6 update 1 の新機能の紹介

この章では、Sun WorkShopTM 6 update 1 のコンパイラとツールの新しい機能について説明します。このリリースは、主に UltraSPARCTM III プロセッサにおけるパフォーマンス向上にねらいを定めています。

この章は更新された Sun WorkShop コンポーネントごとに節に分かれており、新機能の概要が表にまとめられています。一部の機能については、表の次の節でさらに詳しく説明しています。

この章に含まれる節は次のとおりです。

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:}

型に基づいた解析による最適化

新しい 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=yes trigraphs_demo.c
example% a.out
(??) in a string appears as (]

-xtrigraphs=no を指定してコンパイルした場合は、次のように出力されます。

example% cc -xtrigraphs=no trigraphs_demo.c
example% a.out
(??) in a string appears as (??)

-xtrigraphs オプションの使用方法の詳細は、cc(1) のマニュアルページを参照してください。3 文字表記については、『C ユーザーズガイド』の ANSI/ISO C への移行に関する章を参照してください。

先読み潜在期間の指定子

(SPARC プラットフォーム) 大規模マルチプロセッサ上で計算量の多いコードを実行している場合は、-xprefetch の新しいサブオプション latx:factor を使用すると便利な場合があります。このサブオプションは、指定された係数に従って先読みから関連するロードまたはストアに至るまでのデフォルトの待ち時間を調整するようにコードジェネレータに指示します。

詳細は、cc(1) のマニュアルページを参照してください。

-I- オプションによるデフォルト検索パスの無効化

新しい -I- オプションを使用すると、コンパイラがインクルードファイルの検索に使用するアルゴリズムを細かく制御できます。この節では、まずデフォルトの検索アルゴリズムについて説明し、続いてこれらのアルゴリズムに対する -I- の効果について説明します。

引用符で囲まれたファイルのデフォルトの検索アルゴリズム

#include "foo.h" という形式の (二重引用符が使用される) インクルードファイルの場合は、コンパイラは次の順に検索します。

  1. 現在のディレクトリ (つまり「インクルードしている」ファイルが存在するディレクトリ)

  2. -I オプションで指定されているディレクトリ (存在する場合)

  3. /usr/include ディレクトリ

山括弧で囲まれたファイルのデフォルトの検索アルゴリズム

#include <foo.h> という形式の (山括弧が使用される) インクルードファイルの場合は、コンパイラは次の順に検索します。

  1. -I オプションで指定されているディレクトリ (存在する場合)

  2. /usr/include ディレクトリ

-I- オプションによる検索アルゴリズムの変更

新しい -I- オプションを使用すると、デフォルトの検索規則を細かく制御できます。コマンド行に -I- が指定されると、コンパイラは次のように動作します。

次の例は、prog.c をコンパイルする場合に -I- を使用した結果を示しています。

prog.c
#include "a.h"
#include <b.h>
#include "c.h"
c.h
#ifndef _C_H_1
#define _C_H_1
int c1;
#endif
int/a.h
#ifndef _A_H
#define _A_H
#include "c.h"
int a;
#endif
int/b.h
#ifndef _B_H
#define _B_H
#include <c.h>
int b;
#endif
int/c.h
#ifndef _C_H_2
#define _C_H_2
int c2;
#endif

次のコマンドは、現在のディレクトリ (インクルードしているファイルのディレクトリ) から #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.c
inc/a.h
        inc/c.h
inc/b.h
        inc/c.h
c.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.c
inc/a.h
        ./c.h
inc/b.h
        inc/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:}

一時オブジェクトの寿命

式を評価する場合に、コンパイラは一時オブジェクトを作成することがあります。たとえば、関数が呼び出された場合や、キャストがクラスオブジェクトを生成する場合がそうです。古い言語定義では、一時オブジェクトが生成されたブロックの最後に到達するまでの任意の時点でこのような一時オブジェクトを破棄できました。しかし、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" という形式の (二重引用符が使用される) インクルードファイルの場合は、コンパイラは次の順に検索します。

  1. 現在のディレクトリ (つまり「インクルードしている」ファイルが存在するディレクトリ)

  2. -I オプションで指定されているディレクトリ (存在する場合)

  3. コンパイラによって提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの各ディレクトリ

  4. /usr/include ディレクトリ

山括弧で囲まれたファイルのデフォルトの検索アルゴリズム

#include <foo.h> という形式の (山括弧が使用される) インクルードファイルの場合派、コンパイラは次の順に検索します。

  1. -I オプションで指定されているディレクトリ (存在する場合)

  2. コンパイラによって提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの各ディレクトリ

  3. /usr/include ディレクトリ


    注 - インクルードファイルの名前が標準ヘッダーの名前と一致する場合は、『C++ ユーザーズガイド』の第 5 章の「標準ヘッダーの実装」の節も参照してください。

-I- オプションによる検索アルゴリズムの変更

新しい -I- オプションを使用すると、デフォルトの検索規則を細かく制御できます。コマンド行に -I- が指定されると、コンパイラは次のように動作します。

次の例は、prog.cc でコンパイルする場合に -I- を使用した結果を示しています。

prog.cc
#include "a.h"
#include <b.h>
#include "c.h"
c.h
#ifndef _C_H_1
#define _C_H_1
int c1;
#endif
inc/a.h
#ifndef _A_H
#define _A_H
#include "c.h"
int a;
#endif
inc/b.h
#ifndef _B_H
#define _B_H
#include <c.h>
int b;
#endif
inc/c.h
#ifndef _C_H_2
#define _C_H_2
int c2;
#endif

次のコマンドは、現在のディレクトリ (インクルードしているファイルのディレクトリ) から #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.cc
inc/a.h
        inc/c.h
inc/b.h
        inc/c.h
c.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.cc
inc/a.h
        ./c.h
inc/b.h
        inc/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 オブジェクトファイルをリンクできます。

複数の言語を同時にリンクする場合に使用するドライバを決定するには、次の言語階層を使用してください。

  1. C++

  2. Fortran 95 (または Fortran 90)

  3. Fortran 77

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=yes trigraphs_demo.cc
example% a.out
(??) in a string appears as (]

-xtrigraphs=no を指定してコンパイルした場合は、次のように出力されます。

example% CC -xtrigraphs=no trigraphs_demo.cc
example% a.out
(??) in a string appears as (??)

-xtrigraphs オプションの使用の詳細は、CC(1) のマニュアルページを参照してください。3 文字表記については、『C ユーザーズガイド』の ANSI/ISO C への移行に関する章を参照してください。

リンカーエラーメッセージのフィルタ処理

新しい -filt オプションは、通常、CC がリンカーからのエラーメッセージに対して行うフィルタ処理を抑止します。

次の例は、次のコードをコンパイルする場合に -filt を使用する効果を示しています。

 
// filt_demo.cc
class type {
public:
    virtual ~type(); // 何も定義されていません
};
 
int main()
{
    type t;
}

このコードを -filt オプションなしでコンパイルすると、コンパイラは -filt=names,returns,errors と仮定し、以下のような標準の出力を表示します。

example% CC filt_demo.cc
未定義の             最初に参照している
シンボル                  ファイル
type::~type()         filt_demo.o
type::__vtbl          filt_demo.o
[ヒント: クラス型の、インライン化されておらず、純粋でない 1 つ目の仮想関数が
定義されているか確認してください。]
 
ld: 重大なエラー: シンボル参照エラー。a.out に書き込まれる出力はありません。


注意 - 上記のヒントは、日本語環境では技術的制限のため出力されません。

次のコマンドは、符号化された C++ リンカー名の復号化を抑止するとともに、リンカーエラーの C++ 説明を抑止します。

example% CC -filt=no%names,no%errors filt_demo.cc
未定義の                       最初に参照している
シンボル                             ファイル
__1cEtype2T6M_v_                    filt_demo.o
__1cEtypeG__vtbl_                   filt_demo.o
ld: 重大なエラー: シンボル参照エラー。a.out に書き込まれる出力はありません。

詳細は、CC(1) のマニュアルページを参照してください。

共有 libCstd

Sun 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.1

Sun WorkShop 6 update 1 が /opt 以外のディレクトリにインストールされている場合は、システム管理者に実際のパスをお尋ねください。


注 - C++ ソースコードをコンパイルするコマンド内に -library=no%Cstd を使用すると、コンパイラは C++ の標準ヘッダーを検索できません。

共有 libiostream

Sun 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.1

Sun 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 を使用すると便利な場合があります。このサブオプションは、指定された係数に従って先読みから関連するロードまたはストアに至るまでのデフォルトの待ち時間を調整するようにコードジェネレータに指示します。

詳細は、CC(1) のマニュアルページを参照してください。

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:}

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++ オブジェクトファイルにリンクできます。

複数の言語を同時にリンクする場合に使用するドライバを決定するには、次の言語階層を使用してください。

  1. C++

  2. Fortran 95

  3. Fortran 77

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 つ) を提供するライブラリを提供します。区間クラスには次のものが含まれます。

標準モードのコンパイルの場合、ライブラリ内のシンボルはすべて名前空間 SUNW_interval にあります。

コンパイルインタフェースは、次の要素から構成されます。

C++ 区間演算機能を使用するには、コードに次のヘッダーファイルを追加してください。

#include <suninterval.h>

次に、-xia コマンド行オプションを使用してコードをコンパイルする例を示します。

example% CC -o filename -xia filename.cc

新しい f95 INTERVAL 組み込み演算子と関数

このリリースでは、以下の機能が f95 区間演算に追加されました。

依存型の減算演算子

依存型の減算演算子 .DSUB. は、区間演算加算の一方のオペランドの回復に使用できます。

一方の区間変数が他方の区間変数に適用された算術演算の結果である場合、これらの 2 つの区間変数は依存関係にあります。たとえば、X = A + B の場合、X は A と B の両方によって決まります。X から A または B を回復させる場合、依存型の区間減算はより狭幅の区間結果を生成します。


注 - 定数は独立しているため、依存型の演算を区間定数に適用することはできません。依存型の演算を区間定数に適用すると、コンパイル時エラーが発生します。

X.DSUB.A の結果には、区間等式 X = A + B の B に対する解が含まれます。解が存在しない場合、結果は [-inf,inf] です。

以下の例は、DSUB の動作を示しています。

積集合関数による除算

関数 DIVIX は、区間 C と区間除算演算 (B/A) の共通部分の区間格納装置である C � (B/A) を返します。

A にゼロが含まれる場合には、区間除算演算 (B/A) の数学上の結果は互いに素である 2 つの区間の和集合です。和集合内の各区間は、現在実装されている区間演算システムで表現できます。DIVIX 関数は、これらの区間の 1 つまたは一部を返すことができます。

次の例は、DIVIX の出力を示しています。

DIVIX( [3.0,5.0] , [6.0,15.0] , [2.0,6.0] )== [2.0,5.0]
DIVIX( [-3.0,5.0] , [8.0,20.0] , [-0.5,1.0] )== [EMPTY]
DIVIX( [-3.0,5.0] , [8.0,20.0] , [-7.0,8.0] )== [-7.0,8.0]
DIVIX ([-1,1], [1], [-Inf,0.0E+0]) == [-Inf,-1.0]
DIVIX ([-1,1], [1], [0,inf])       == [1.0,Inf]

乱数サブルーチン

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-6   Sun Performance Library の新機能
機能 説明
UltraSPARC III プロセッサに対するパフォーマンス強化 シングルプロセッサ型およびマルチプロセッサ型の UltraSPARC III プラットフォーム双方に対する最大限のパフォーマンス
高速フーリエ変換 (FFT) の改良 マニュアルページの変更、コードに対するエラーチェックの強化、およびパフォーマンスの向上が行われています。
FFT ドキュメント FFTPACK および VFFTPACK ルーチンについて説明した『Using Sun Performance Library Fast Fourier Transform Routines』が作成されました。『Using Sun Performance Library Fast Fourier Transform Routines』は、http://docs.sun.com の ForteTM Developer 6 update 1/Sun WorkShop 6 update 1 Collection で入手できます。
スパースソルバー パフォーマンスと機能性の向上、拡張されたメッセージングシステム、組み込みの SuperLU
並列化とスケーラビリティの拡張 選択されたルーチンとライブラリに対してデータフロープログラミング手法を使用し、パフォーマンスを向上させます。
Open MP 指令の使用 Open MP 指令に対するサポートが強化されています。
区間行列乗算関数の
実装
f95 組み込みに対して区間ベースの MATMUL が開発されました。MATMUL は、GEMM および GEMV ルーチンの非置換ケースです。


標本アナライザ

表 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 アプリケーションのサポート機能の改良

新しい collect コマンドでは、メッセージ引き渡しインタフェース (MPI) サポート機能が拡張されています。


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引