OpenVMS AXP
オペレーティング・システム
OpenVMS AXP オペレーティング・システムへの移行:システム移行の手引き


前へ 次へ 目次 索引


4.4 再コンパイルするか,トランスレートするかの判断

イメージに対して2つの方法のどちらも使用できる場合には,AXPシステム上でイメージのネイティブ・バージョンとトランスレートされたバージョンを実行した場合の性能を予測し,イメージのトランスレートに必要な作業とネイティブな AXPイメージに変換するのに必要な作業を判断し,性能と作業量のバランスを考えなければなりません。

一般に,アプリケーションを構成する各イメージは異なるモードで実行できます。たとえば,ネイティブなAXPイメージからトランスレートされた共有可能イメージ(translated shareable image)を呼び出したり,その逆に呼び出すことが可能です。2つのアーキテクチャが混在したアプリケーションについての詳しい説明は,第 4.4.2 項 を参照してください。

表 4-1 では,2種類の移行方法を比較しています。

表 4-1 移行方法の比較
要素 再コンパイル/再リンク トランスレート
性能 完全なAXPの機能 通常,ネイティブAXPの25〜40%の性能
必要な作業 容易な場合も困難な場合もある 容易
スケジュールの制約 ネイティブ・コンパイラが提供されるかどうかに応じて異なる なし,ただちに可能
サポートされるプログラム
--バージョン VAX VMSバージョン4.0以前のソースのコンパイラ OpenVMS VAXバージョン4.0またはそれ以降のイメージのみがサポートされる
--制約事項 特権付きコードがサポートされる ユーザ・モードのコードだけがサポートされる
VAXとの互換性 高い。ほとんどのコードは問題なく再コンパイル/再リンクできる エミュレーションによって実現される
今後のサポートと保守 通常のソース・コードの保守 ソースは管理されない

アプリケーションをどのような方法で移行するかを決定するには,次の事項を考慮してください。

アーキテクチャ間で互換性が維持されていない部分については,次の方法で対処できます。

表 4-2 は,各プログラムのアーキテクチャに依存する部分が,プログラムをAXPシステムに移行するための2つの方法に,どのような影響を与えるかを示しています。詳しくは,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。

表 4-2 移行方式の選択: アーキテクチャに依存する部分の取り扱い
再コンパイル/再リンクした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
サポートされない。依存する部分は削除しなければならない。 サポートされる。


1アラインされていないデータは主に性能上の問題となります。アラインされていないデータを参照した場合,VAXシステムでは性能をある程度低下させるだけですが,AXPシステムでアラインされていないデータをメモリからロードしたり,アラインされていないデータをメモリに格納すると,アラインされた操作の場合より最高100倍も時間がかかる可能性があります。
2VAXアーキテクテャ固有の機能や呼び出し規則への依存としては,VAX呼び出し規則,VAX例外処理,VAX ASTパラメータ・リスト,VAX命令の形式と動作,およびVAX命令の実行時作成への明示的な依存などがある。

4.4.1 アプリケーションのトランスレート

アプリケーションを再コンパイルできない場合や,VAXアーキテクチャ固有の機能をアプリケーションで使用している場合には,アプリケーションをトランスレートすることができます。アプリケーションの一部だけのトランスレートもでき,移行プロセスの一段階として一時的にアプリケーションの各部分をトランスレートすることができます。

再コンパイルに影響を与える多くの相違点について 第 4.2 節 で説明しましたが,これらの相違点は,トランスレートされたVAXイメージの性能にも影響を与える可能性があります。次の方法を使用すれば,VAXアーキテクチャに依存するイメージの互換性を向上できます(詳しくは『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください)。

アーキテクチャ上のさまざまな相違点がイメージのトランスレートによってどのようにサポートされるかについては,表 4-2 を参照してください。

4.4.2 ネイティブ・イメージとトランスレートされたイメージの混在

一般に,AXPシステムではネイティブなAXPイメージとトランスレートされたイメージを組み合わせて使用できます。たとえば,ネイティブなAXPイメージからトランスレートされた共有可能イメージを呼び出したり,その逆の呼び出しを実行できます。

ネイティブなイメージとトランスレートされたイメージを組み合わせて実行するには,VAX呼び出し規則とAlpha AXP呼び出し規則の間で呼び出しを実行できなければなりません。ネイティブ・イメージとトランスレートされたイメージが次の条件を満たす場合には,特別な処理は必要ありません。

一方の呼び出し規則を使用するプロシージャ(呼び出し元)が別の呼び出し規則を使用するプロシージャ(呼び出し先)を呼び出す場合には,ジャケット・ルーチンを使用して間接的に呼び出します。ジャケット・ルーチンはプロシージャのコール・フレームと引数リストを解釈し,呼び出し先プロシージャの対応するコール・フレームと引数リストを作成し,制御を呼び出し先プロシージャに渡します。呼び出し先プロシージャが実行を終了すると,ジャケット・ルーチンを通じて,制御を呼び出し元に戻します。ジャケット・ルーチンは呼び出し先ルーチンのリターン・レジスタの値を呼び出し元ルーチンのレジスタに書き込み,制御を呼び出し元プロシージャに戻します。

OpenVMS AXPオペレーティング・システムは,ほとんどの呼び出しに対してジャケット・ルーチンを自動的に作成します。自動的なジャケット機能を使用するには,アプリケーションの中でネイティブなAXPの部分を作成するときに,コンパイラ修飾子/TIEとリンカ・オプション/NONATIVE_ONLYを使用してします。

特定の場合には,アプリケーション・プログラムは特別に作成したジャケット・ルーチンを使用しなければなりません。たとえば,次のようなライブラリに対する非標準呼び出しの場合には,ジャケット・ルーチンを作成しなければなりません。

これらの状況でジャケット・イメージを作成する方法については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。

OpenVMS AXPオペレーティング・システムとともに提供されるトランスレートされた共有可能イメージ(たとえば,ネイティブなAXPコンパイラのない言語のランタイム・ライブラリなど)には,ジャケット・ルーチンが添付されており,これらのジャケット・ルーチンを使用すれば,トランスレートされた共有可能イメージをネイティブなAXPイメージから呼び出すことができます。


前へ 次へ 目次 索引