OpenVMS Alpha
オペレーティング・システム
OpenVMS VAX から OpenVMS Alpha へのアプリケーションの移行


前へ 次へ 目次 索引


2.5.2 データ型

Alphaアーキテクチャは,VAX固有のデータ型の大部分をサポートしています。ただし,H浮動小数点データ型などの一部のVAXデータ型はサポートされていません( 表 2-1 を参照)。アプリケーションが,下位のネイティブなデータ型のサイズまたはビット表現に依存していないかどうか確認してください。

表 2-1 浮動小数点データ型のサポート
データ型 VAX Alpha
D53浮動小数点(G浮動小数点) (省略時の倍精度形式) サポートされない。 サポートされる。D53浮動小数点の代わりに D56浮動小数点を使用すると,3 ビット分の精度が失われ,結果に多少の誤差が生じる。
D56浮動小数点(省略時の倍精度形式) サポートされる。 サポートされない。DECmigrate を使用してコードをトランスレートすると,このデータ型を完全にサポートできるようになる。また,アプリケーションで 3 ビット分の精度が必要ない場合は,D56浮動小数点の代わりに D53浮動小数点を使用できる。
F浮動小数点 サポートされる。 サポートされる。
G浮動小数点 サポートされる。 サポートされる。
H浮動小数点(128 ビットの浮動小数点) サポートされる。 サポートされない。DECmigrate を使用すると,H浮動小数点を完全にサポートできるようになる。DECmigrate を使用すると,H浮動小数点構造体を含むコード・モジュールをトランスレートすることができ,サポートされるデータ型を使用して,アプリケーションを再コーディングすることもできる。
S浮動小数点(IEEE) サポートされない。 サポートされる。
T浮動小数点(IEEE) サポートされない。 サポートされる。
X浮動小数点(128 ビット浮動小数点(Alpha; IEEE に適した)) サポートされない。 DEC Fortran バージョン 6.2 以降と DEC C バージョン 4.0 以降でサポートされる。X浮動小数点データ形式は H浮動小数点と同じではないが,どちらも同じ範囲の値をサポートする。Fortran アプリケーションの場合は,FOR$CONVERTnnn 論理名,OPTIONS 文,/CONVERT コンパイラ修飾子,OPEN 文の CONVERT=キーワードのいずれかを使用して,X浮動小数点メモリ形式と H浮動小数点ディスク・データの間で自動的な変換を行うことができる。

Alphaプロセッサは性能の向上のために,パック10進数 ( packed decimal ) データ型,H浮動小数点データ型,および完全な精度のD浮動小数点データ型をソフトウェアによって実現します。

問題への対処方法

データ型に関する問題に対処するには,次の方法を用います。

Alphaのデータ型についての詳しい説明は, 第 7 章 を参照してください。

2.5.3 データへの共有アクセス

不可分な操作とは,次のような操作です。

OpenVMS Alphaでは,データをメモリから読み込む操作,メモリ内のデータを変更する操作,およびデータをメモリに格納する操作は,複数の命令に分割され,これらの命令の間で割り込みをかけることができます。この結果,アプリケーションで共有メモリ内のデータを不可分な操作によって変更したい場合には,操作の不可分性を保証するための作業が必要になります。

次の条件が満足される場合,アプリケーションは操作が不可分に実行されることに依存している可能性があります。

問題の検出

不可分性への依存を検出するには,共有変数 (複数の実行スレッドによってアクセスされる書き込み可能な項目) の使用を再確認し,不可分性を暗黙にまたは明示的に仮定している部分がないかどうかを調べなければなりません。

問題への対処方法

命令の不可分性に関する一般的な問題を解決するには,次の方法を用います。

同期についての詳しい説明は,第 6 章 を参照してください。

2.5.4 クォドワードより小さいデータの読み込みまたは書き込み

粒度という用語は,隣接するメモリ位置に格納されているデータを妨害せずに,不可分な操作として,メモリとの間で読み込みまたは書き込みを実行できるデータ・サイズを示します。VAXのようにバイト・レベルの粒度を提供するマシンをバイト粒度マシンと呼びます。Alphaシステムはクォドワード粒度のシステムです。1

注意

1 Alphaアーキテクチャはロングワード粒度もサポートしますが,ロングワード粒度を仮定することは望ましくありません。省略時の設定で,コンパイラはソース・コードがクォドワード未満の粒度に依存しないものと仮定していますが,多くの Digital 言語は/GRANULARITY 修飾子を使用して小さな粒度を指定することができます。

OpenVMS Alphaはクォドワード粒度のシステムであるため,共有されるバイト,ワード,またはロングワードに書き込むと,共有データと同じクォドワードに格納されている他のデータを破壊する可能性があります。このような状況は次の場合に発生します。

注意

不可分性に関する説明( 第 2.5.3 項 )で説明したデータ共有の種類はすべて,共有データを格納しているクォドワードの残りの部分で,粒度に関する問題を発生させる可能性があります。

さらに,結果をプロセス空間に戻すような,非同期的に終了するライブラリ関数,または非同期システム・サービスをプロセスが起動した場合には,戻されたデータを格納するクォドワードで,粒度に関する問題が発生する可能性があります。たとえば,次の操作では,粒度に関する問題が発生する可能性があります。

  • 状態ブロックに書き込む非同期システム・サービス

  • プロセス・バッファに書き込む入出力操作

  • ダイレクト・メモリ・アクセス(DMA)・コントローラがプロセス・バッファに書き込みを実行する入出力操作

問題の検出

バイト粒度,ワード粒度,またはロングワード粒度の使用を検出するには,次の方法を用います。

問題の対処方法

クォドワード未満の粒度の使用に対処するには,次の方法を用います。

Digital コンパイラは,省略時の設定では粒度がクォドワードであるものと解釈しますが,現在のコードと互換性を維持するために,/GRANULARITY 修飾子を使用することにより,バイト,ワード,アラインされないロングワード,およびアラインされないクォドワードの粒度を指定することができます。詳細については,各コンパイラのマニュアルを参照してください。

読み込み/書き込み粒度の詳細については, 第 6 章 を参照してください。

2.5.5 ページ・サイズに関する検討

ページ・サイズは,メモリ管理ルーチンとシステム・サービスが割り当てる仮想メモリのサイズを管理します。たとえば,混在環境のOpenVMS Clusterシステムでは,アプリケーションが特定のデータ・バッファのサイズをVAXページ・サイズに基づいて決定できます。ページ・サイズは,メモリ内のコードとデータに保護を割り当てる基礎にもなります。

OpenVMS VAXオペレーティング・システムは512バイトの倍数でメモリを割り当てます。しかし,全体的なシステム性能を向上するために,Alphaシステムでは,各ハードウェア・プラットフォームに応じて,8KB〜64KBの大きなページ・サイズを採用しています。

ページ・サイズは,ワーキング・セット・クォータなど,システム資源を管理するときの基礎的な要素です。さらに,VAXシステムでのメモリ保護は,512バイトの各メモリ領域ごとに設定できます。Alpha システムでは,メモリ保護の最小単位はシステムのページ・サイズに応じて,VAXシステムの場合よりはるかに大きくなります。

注意

ページ・サイズを大きく変更した結果,影響を受けるのは,512バイトのページ・サイズに明示的に依存しているアプリケーションだけです。たとえば,次のアプリケーションが考えられます。

  • 次の目的で"512"を使用しているアプリケーション

    • メモリの使用状況を計算するため

    • 必要なページ・テーブルのサイズを計算するため

  • 512バイト単位で保護を変更するアプリケーション

  • システム・サービスCreate and Map Section ($CRMPSC)を使用して,ファイルをプロセス空間内の特定の位置にマッピングするアプリケーション(たとえば,使用可能なメモリが制限されているときにメモリを再利用するため)

問題の検出

VAXページ・サイズを使用している箇所を検出するには,512バイトひとかたまりで仮想メモリを操作するコードを識別するか,またはメモリ保護の最小単位として512バイトを使用しているコードを識別します。コードから10進数の511,512,または513,16進数の 1FF,200,または201などの数値を検索してください。

問題への対処方法

VAXとAlphaのページ・サイズの相違によって発生する問題に対処するには,次のような方法を使用できます。

ページ・サイズについての詳しい説明は,第 5 章 を参照してください。

2.5.6 マルチプロセッサ・システムでの読み込み/書き込み操作の順序

VAXアーキテクチャでは,マルチプロセシング・システムのプロセッサが複数のデータをメモリに書き込む場合,これらは指定した順にメモリに書き込まれます。このように書き込みの順序が定義されているため,書き込み操作はプログラムと入出力装置で指定した順に他のCPUからも確認することができます。

このように,指定した順に書き込み結果を他のCPUからも確認できることを保証することは,システムが実現できる性能の最適化を制限してしまいます。また,キャッシュがより複雑になり,キャッシュ性能の最適化も制限されます。

全体のシステム性能を向上するために,Alphaシステムをはじめ,RISCシステムでは,メモリへの読み込みと書き込みの順序を変更できます。したがって,メモリへの書き込み結果をシステム内の他のCPUから確認すると,その順序は実際に書き込まれた順序と異なる可能性があります。

注意

この節の説明はマルチプロセッサ・システムを対象にしています。ユニプロセッサ・システムでは,メモリ・アクセスはすべて,プログラムで要求した順に終了します。

問題の検出

マルチプロセッサ・システムで実行される可能性のあるアプリケーションで,読み込み/書き込みの順序に依存している部分を検出するには,データが書き込まれる順序に依存するアルゴリズムを識別しなければなりません。たとえば,同期をとるためにフラグ受け渡しプロトコルを使用している箇所を調べなければなりません。

問題への対処方法

読み込み/書き込み操作の順序に関する問題に対処するには,次の方法を用います。

同期についての詳しい説明は,第 6 章 を参照してください。


前へ 次へ 目次 索引