前へ | 次へ | 目次 | 索引 |
イメージに対して2つの方法のどちらも使用できる場合には,AXPシステム上でイメージのネイティブ・バージョンとトランスレートされたバージョンを実行した場合の性能を予測し,イメージのトランスレートに必要な作業とネイティブな AXPイメージに変換するのに必要な作業を判断し,性能と作業量のバランスを考えなければなりません。
一般に,アプリケーションを構成する各イメージは異なるモードで実行できます。たとえば,ネイティブなAXPイメージからトランスレートされた共有可能イメージ(translated shareable image)を呼び出したり,その逆に呼び出すことが可能です。2つのアーキテクチャが混在したアプリケーションについての詳しい説明は,第 4.4.2 項 を参照してください。
表 4-1 では,2種類の移行方法を比較しています。
要素 | 再コンパイル/再リンク | トランスレート |
---|---|---|
性能 | 完全なAXPの機能 | 通常,ネイティブAXPの25〜40%の性能 |
必要な作業 | 容易な場合も困難な場合もある | 容易 |
スケジュールの制約 | ネイティブ・コンパイラが提供されるかどうかに応じて異なる | なし,ただちに可能 |
サポートされるプログラム | ||
--バージョン | VAX VMSバージョン4.0以前のソースのコンパイラ | OpenVMS VAXバージョン4.0またはそれ以降のイメージのみがサポートされる |
--制約事項 | 特権付きコードがサポートされる | ユーザ・モードのコードだけがサポートされる |
VAXとの互換性 | 高い。ほとんどのコードは問題なく再コンパイル/再リンクできる | エミュレーションによって実現される |
今後のサポートと保守 | 通常のソース・コードの保守 | ソースは管理されない |
アプリケーションをどのような方法で移行するかを決定するには,次の事項を考慮してください。
バイナリ・イメージを使用する場合には,それらをトランスレートしなければなりません。
ソース・コードを入手できないイメージは,トランスレートしなければなりません。
AXPシステムの速度を有効に使用したいイメージは,再コンパイルしなければなりません。
ネイティブ・バージョンに移行する場合,OpenVMS AXPで実行するために,アプリケーションの一部だけをトランスレートすることができます。
アーキテクチャ間で互換性が維持されていない部分については,次の方法で対処できます。
表 4-2 は,各プログラムのアーキテクチャに依存する部分が,プログラムをAXPシステムに移行するための2つの方法に,どのような影響を与えるかを示しています。詳しくは,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。
再コンパイル/再リンクしたVAXソース | トランスレートされたVAXイメージ |
---|---|
データ・アラインメント1 | |
省略時の設定では,大部分のコンパイラはデータを自然なアラインメントにする。VAXアラインメントを保存するための修飾子についての説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照。 | アラインされていないデータもサポートされるが,/OPTIMIZE=ALIGNMENT修飾子を使用すれば,データがロングワードにアラインされていることを仮定することにより,実行速度を向上できる。 |
データ型 | |
H浮動小数点はG浮動小数点またはIEEE T浮動小数点に変更する。
D浮動小数点の場合,D53フォーマットの15桁の精度で十分なときは,D浮動小数点をG浮動小数点に変更する。アプリケーションで16桁の精度(D56フォーマット)が必要な場合には,トランスレートしなければならない。 COBOLのパック10進数は操作のために自動的にバイナリ形式に変換される。 |
D浮動小数点の16桁の精度が必要な場合には,/FLOAT=D56_FLOAT修飾子を使用する。この修飾子を使用した場合,性能は,省略時の設定である/FLOAT=D53_FLOATを使用した場合より低下する。 |
読み込み/変更/書き込み操作の不可分性 | |
サポートは各コンパイラが準備しているオプションに応じて異なる(詳しくは『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照)。 | /PRESERVE=INSTRUCTION_ATOMICITY修飾子を使用する。実行速度は半分に低下する。 |
バイト書き込み操作とワード書き込み操作の不可分性と粒度 | |
適切にソース・コードを変更し,コンパイラ・オプションを使用することによりサポートされる(詳しくは『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照)。 | /PRESERVE=MEMORY_ATOMICITY修飾子を使用する。実行速度は半分に低下する。 |
ページ・サイズ | |
OpenVMS リンカは省略時の設定により,大きいAXPスタイルのページを作成する。 | 512バイトのページ・イメージの大部分はサポートされる。しかし,VESTはゆるやかな保護を割り当てるため,アクセス違反を検出するために厳しい保護に依存しているイメージを,トランスレートした場合,AXPシステムで正しく実行されない。 |
読み込み/書き込みの順序 | |
適切な同期命令(MB)をソース・コードに追加することによりサポートされるが,性能は低下する。 | /PRESERVE=READ_WRITE_ORDERING修飾子を使用する。 |
例外報告の即時性 | |
コンパイラ・オプションの使用によって部分的にサポートされる(詳しくは『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照)。 | /PRESERVE=FLOAT_EXCEPTIONS修飾子または/PRESERVE=INTEGER_EXCEPTIONS修飾子を使用する。実行速度は半分に低下する。 |
VAXアーキテクチャおよび呼び出し規則への明示的な依存2 | |
サポートされない。依存する部分は削除しなければならない。 | サポートされる。 |
アプリケーションを再コンパイルできない場合や,VAXアーキテクチャ固有の機能をアプリケーションで使用している場合には,アプリケーションをトランスレートすることができます。アプリケーションの一部だけのトランスレートもでき,移行プロセスの一段階として一時的にアプリケーションの各部分をトランスレートすることができます。
再コンパイルに影響を与える多くの相違点について 第 4.2 節 で説明しましたが,これらの相違点は,トランスレートされたVAXイメージの性能にも影響を与える可能性があります。次の方法を使用すれば,VAXアーキテクチャに依存するイメージの互換性を向上できます(詳しくは『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください)。
VESTのトランスレート時修飾子/OPTIMIZE=NOALIGNMENTを使用すれば,VESTは特別なインラインのAXPコードを生成し,アラインされていないデータの参照に対する例外を生成しないようにします。この修飾子を使用した場合,VESTは,アラインされたデータ参照だけを使用するコードよりも実行速度が約10倍も遅いAXPコードを作成します(省略時のオプションである/OPTIMIZE=ALIGNMENTを使用した場合には, アラインされていないデータは例外を生成しますが,この結果,アラインされたデータを実行する場合より約100倍の時間がかかります)。
/PRESERVE=INSTRUCTION_ATOMICITYを指定すれば,VESTは,指定したVAX命令セットに対してASTが不可分に実行されるようなAlpha AXP命令シーケンスを作成します。ASTは,このような不可分な操作を実行するAlpha AXP命令シーケンスの途中でも受け付けることができますが,ASTルーチンが終了したときに,命令シーケンスは最初から再起動されます。このため,/PRESERVE=INSTRUCTION_ATOMICITY修飾子を指定した場合,特定のコード・シーケンスの実行速度は半分に低下する可能性があります(トランスレータがASTの不可分なコードを生成するVAX命令の一覧と,ソフトウェア・トランスレータについての詳しい情報については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください)。
トランスレート時修飾子/PRESERVE=MEMORY_ATOMICITYを使用した場合,VESTは,バイト書き込みまたはワード書き込みの不可分性を保証します。この修飾子を指定すれば,メインライン・ルーチンとASTルーチンはロングワードまたはクォドワードに格納されている隣接するバイトを相互に妨害せずに更新できます。/PRESERVE=MEMORY_ATOMICITY修飾子は,自然にアラインされていないロングワードおよびクォドワード境界と交差するデータの不可分なアクセスを保証します。ただし,これらの修飾子を指定した場合,実行速度は半分に低下する可能性があります。
VAXイメージをAXPシステムで実行できるようにするために,VESTとイメージ・アクティベータは,VAXイメージ・セクションを大きいページにマッピングします。8KBページをサポートするAXPプロセッサでは,最大16ページのVAXページを1ページに格納できます。しかし,この大きいページは1つのページ・テーブル・エントリによってのみ記述されるため,そのページには1つの保護と1つのバッキング・ストアだけしか割り当てることができません。したがって,VESTが AXPページに割り当てる保護は,マッピングするAXPイメージ・セクションに関連する保護のうち,もっとも制限のゆるやかな保護です。このため,アクセス違反を検出するために厳しい保護に依存している VAXイメージは,トランスレートされた場合,AXPシステムで正しく実行されません。
この問題に対処するための方法として,省略時のリンカ・オプション/BPAGEを使用して VAXでプログラムを再リンクし,ページを64KB境界にアラインする方法があります。
VESTでは,トランスレート時に/PRESERVE=FLOAT_EXCEPTIONS修飾子または /PRESERVE=INTEGER_EXCEPTIONS修飾子を使用することにより,特定の例外タイプに対して正確な例外報告を設定できます。これらの修飾子を指定した場合には,一部のコード・セグメントの実行速度は半分に低下します。
実行時に作成されるVAX命令は,トランスレーションのもとでエミュレーションによって実行されます。しかし,エミュレートした命令はトランスレートされた命令より大幅に実行速度が遅く,アプリケーションの重要な部分の性能を向上するために実行時にコードを生成する場合,これは問題になります。
アーキテクチャ上のさまざまな相違点がイメージのトランスレートによってどのようにサポートされるかについては,表 4-2 を参照してください。
4.4.2 ネイティブ・イメージとトランスレートされたイメージの混在
一般に,AXPシステムではネイティブなAXPイメージとトランスレートされたイメージを組み合わせて使用できます。たとえば,ネイティブなAXPイメージからトランスレートされた共有可能イメージを呼び出したり,その逆の呼び出しを実行できます。
ネイティブなイメージとトランスレートされたイメージを組み合わせて実行するには,VAX呼び出し規則とAlpha AXP呼び出し規則の間で呼び出しを実行できなければなりません。ネイティブ・イメージとトランスレートされたイメージが次の条件を満たす場合には,特別な処理は必要ありません。
一方の呼び出し規則を使用するプロシージャ(呼び出し元)が別の呼び出し規則を使用するプロシージャ(呼び出し先)を呼び出す場合には,ジャケット・ルーチンを使用して間接的に呼び出します。ジャケット・ルーチンはプロシージャのコール・フレームと引数リストを解釈し,呼び出し先プロシージャの対応するコール・フレームと引数リストを作成し,制御を呼び出し先プロシージャに渡します。呼び出し先プロシージャが実行を終了すると,ジャケット・ルーチンを通じて,制御を呼び出し元に戻します。ジャケット・ルーチンは呼び出し先ルーチンのリターン・レジスタの値を呼び出し元ルーチンのレジスタに書き込み,制御を呼び出し元プロシージャに戻します。
OpenVMS AXPオペレーティング・システムは,ほとんどの呼び出しに対してジャケット・ルーチンを自動的に作成します。自動的なジャケット機能を使用するには,アプリケーションの中でネイティブなAXPの部分を作成するときに,コンパイラ修飾子/TIEとリンカ・オプション/NONATIVE_ONLYを使用してします。
特定の場合には,アプリケーション・プログラムは特別に作成したジャケット・ルーチンを使用しなければなりません。たとえば,次のようなライブラリに対する非標準呼び出しの場合には,ジャケット・ルーチンを作成しなければなりません。
(エクスポートという用語は,ルーチンがイメージのグローバル・シンボル・テーブル(GST)に登録されたことを意味します。)
これらの状況でジャケット・イメージを作成する方法については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。
OpenVMS AXPオペレーティング・システムとともに提供されるトランスレートされた共有可能イメージ(たとえば,ネイティブなAXPコンパイラのない言語のランタイム・ライブラリなど)には,ジャケット・ルーチンが添付されており,これらのジャケット・ルーチンを使用すれば,トランスレートされた共有可能イメージをネイティブなAXPイメージから呼び出すことができます。
前へ | 次へ | 目次 | 索引 |