前へ | 次へ | 目次 | 索引 |
1 つの値を持つ単一のデータ項目をスカラと呼びます。また,データ型が同じで互いに関連するスカラ値のグループを ベクタと呼びます。
伝統的なスカラ・コンピュータはスカラ値に対してのみ動作するため,ベクタを扱う場合はその要素を順次処理する必要があります。一方,ベクタ・コンピュータはベクタをそのままのデータ構造として認識し,1 つのベクタ命令によってベクタ全体を操作することができます。複数の算術演算または論理演算が同時に行われるため,ベクタ・コンピュータで1 つのベクタを処理すると,伝統的なコンピュータでスカラ命令だけを使用して同じベクタを処理する場合よりも 4 〜 5 倍高速になります。
さらに,ベクタ・プロセッサはデータのストリームを高速に処理するための特殊なハードウェア技術によって高速な処理を実現しています。これらの技術として,データのパイプライン処理やチェイニングのほか,メモリ,算術機能ユニット,論理機能ユニットなどのハードウェアを様々な形式で並列化したことなどが挙げられます。ユニットをパイプライン化することによって,同じ処理フローの前後の演算を並行して行うことが可能になっています。
28.3.1 VAX におけるベクタ処理のサポート (VAX のみ)
VAX ベクタ・アーキテクチャには,それぞれが 64 個の要素を含む 16 個の 64 ビット・ベクタ・レジスタ (V0 〜 V15),ベクタ・カウント・レジスタ (VCR) やベクタ長レジスタ (VLR),ベクタ・マスク・レジスタ (VMR) などのベクタ制御レジスタ,ベクタ機能ユニット,ベクタ命令のセットが含まれています。 VAX ベクタ命令は,ベクタ・レジスタとメモリとの間のデータ転送,整数および浮動小数点数の算術演算,およびプロセッサの制御を行います。 VAX ベクタ・アーキテクチャ,ベクタ・レジスタ,およびベクタ命令についての詳細は,『VAX MACRO and Instruction Set Reference Manual』を参照してください。
VAX ベクタ・アーキテクチャに準拠した VAX システムを ベクタ対応システムと呼びます。
VAX ベクタ処理システムの構成には,スカラ CPU とベクタ CPU とを統合したプロセッサ (ベクタ機能付きプロセッサ) が 1 組以上含まれています。このようなシステム構成には,各スカラ・プロセッサに対して 1 つのベクタ・コプロセッサを持つ対称型構成,および付加的なスカラ専用プロセッサを組み込んだ非対称型構成があります。 VAX ベクタ処理システムのモデルにより,ベクタ機能付きプロセッサは,スカラ CPU コンポーネントとベクタ CPU コンポーネントを物理的に統合した単一のモジュールから構成される場合と,それぞれのコンポーネントを物理的に分離した 2 つのモジュールから構成される場合があります。どちらの場合も,スカラ CPU およびベクタ CPU は論理的に統合され,同じメモリを共用し,高速の専用内部パスを通じてデータを送信します。このように CPU が密接に結合しているため,ベクタ CPU を使用した場合は入出力動作が軽減されます。
VAX スカラ処理システムと同様,VAX ベクタ処理システムは VAXcluster のメンバ,ネットワーク上のノード,またはスタンドアロン・システムとして稼働させることができます。
28.3.2 VAX ベクタ命令エミュレーション機能 (VVIEF) (VAX のみ)
VAX ベクタ命令エミュレーション機能 (VVIEF) は,オペレーティング・システムに標準で備えられている機能であり,ベクタ・プロセッサが利用できない VAX システム上でベクタ化されたアプリケーションの作成やデバッグを可能にします。 VVIEF は,非特権 VAX ベクタ命令とベクタ・システム・サービスを含む VAX ベクタ処理環境をエミュレートします。 VVIEF の使用は,ユーザ・モードのコードに制限されています。
VVIEF は厳密にプログラム開発ツールであり,ベクタ・ハードウェア上での動作をソフトウェア上で実現するものではありません。したがって,VVIEF のもとで実行するようにアプリケーションをベクタ化しても性能は向上しません。むしろ, VVIEF のもとで実行されるベクタ化アプリケーションの動作はスカラ版アプリケーションよりも低速です。
オペレーティング・システムは,VVIEF ブートストラップ・コードをエグゼクティブ・ローダブル・イメージとして提供します。ここで注意が必要なのは,OpenVMS ベクタ・サポート・コードが存在すると, VVIEF は非稼働状態のままであるという点です。ベクタ機能付きシステムでベクタ・サポート・コードをロードしないようにして VVIEF を稼働させることは可能ですが,それによる利点はほとんどありません。ベクタ・サポート・コードのロードについては, 第 28.4.1 項 で説明します。
VVIEF のロードとアンロードについては,
第 28.4.6 項 で説明します。
28.4 ベクタ処理環境の管理 (VAX のみ)
この節では,ベクタ処理システムの管理について取り上げます。
28.4.1 ベクタ処理サポート・コードのロード (VAX のみ)
VAX ベクタ処理システムでは,ブート時にベクタ処理サポート・コードが自動的にロードされるように設定されています。この省略時の動作は,静的なシステム・パラメータ VECTOR_PROC を設定することで変更することができます。具体的な設定方法は, 表 28-1 に示すとおりです。
値 | 結果 |
---|---|
0 | システム構成に関係なく,ベクタ処理サポート・コードをロードしない。 |
1 | 少なくとも 1 つのベクタ機能付きプロセッサが存在する場合にベクタ処理サポート・コードをロードする (省略時の設定)。 |
2 | システムがベクタ対応の場合にベクタ処理サポート・コードをロードする。この設定は,各プロセッサごとに電源を供給しているシステムで最も有効。また,この設定では,オペレーティング・システムを再ブートしなくてもベクタ・プロセッサをシステム構成に追加することができる。 |
マルチプロセッシング構成へのベクタ機能付きプロセッサの追加または削除は,システム・パラメータ SMP_CPUS を設定することによってブート時に行うことができます。また,DCL の START/CPU コマンドおよび STOP/CPU コマンドによって実行時に行うこともできます。オペレーティング・システムはベクタ機能付きプロセッサのスカラ CPU コンポーネントとベクタ CPU コンポーネントとを単一のプロセッサとして扱い,これらの起動と停止を同時に行います。
ブート時,システム・パラメータ SMP_CPUS の設定に従って,マルチプロセッシング・システムの中の2次プロセッサのうちどのプロセッサを構成に追加するかが決定されます。これらの2次プロセッサの中にはベクタ機能付きプロセッサも含まれます。オペレーティング・システムは,1次プロセッサを常に構成に追加します。システム・パラメータ SMP_CPUS の省略時の値 --1 では,利用可能なすべてのプロセッサがブートされ,スカラ・プロセッサもベクタ機能付きプロセッサも同様にシステム構成に追加されます。この SMP_CPUS パラメータについての詳細は,『Compaq OpenVMS システム管理ユーティリティ・リファレンス・マニュアル』を参照してください。ブート時,ベクタ機能付きプロセッサの起動の前に,ベクタ処理サポート・コード ( 第 28.4.1 項 を参照) をロードしておく必要があります。サポート・コードがロードされていなければ,プロセスはベクタ機能付きプロセッサのスカラ CPU コンポーネントしか使用できなくなります。
稼働中のマルチプロセッシング・システムに2次プロセッサを追加する場合は,DCL の START/CPU コマンドを使用します。また,システムから2次プロセッサを削除する場合は, STOP/CPU コマンドを使用します。この場合でも,ベクタ処理サポート・コードがブート時にロードされていなければ,起動したベクタ機能付きプロセッサのベクタ CPU コンポーネントを使用することはできません。
STOP/CPU コマンドを使用する場合,そのコマンドによって削除するベクタ機能付きプロセッサが現在動作中のベクタ使用プロセスにベクタ機能を提供する唯一のものである場合,コマンドは異常終了し,メッセージが生成されます。プロセッサを修理するためにプロセッサを構成から削除するような特別なケースでは,STOP/CPU/OVERRIDE コマンドを発行すれば,ベクタ機能を使用するプロセスが残っていてもプロセッサを強制的に停止させることができます。
STOP/CPU/OVERRIDE コマンドがベクタ機能付きプロセッサに対して発行された場合,またはベクタ機能付きプロセッサが異常終了した場合,オペレーティング・システムは残されたすべてのベクタ使用プロセスをベクタ機能付きプロセッサが構成に追加されるまで「CPU 機能待ち」状態 (RSN$_CPUCAP) にします。その後,他のプロセス (潜在的ベクタ使用プロセス) からベクタ命令が発行されると,要求された CPU が稼働していないことを示すメッセージ (CPUNOTACT) が返されます。
START/CPU コマンドと STOP/CPU コマンドについての詳細は,『Compaq OpenVMS DCL ディクショナリ』を参照してください。
28.4.3 ベクタ・プロセスの管理 (VAX のみ)
オペレーティング・システムのスケジューリング・アルゴリズムにより,ベクタ処理資源とスカラ処理資源とはベクタ使用プロセス,潜在的ベクタ使用プロセス,スカラ使用プロセスに自動的に分配されます。しかし,VAX ベクタ処理構成は,次の 2 つの重要な点が異なります。
システム内に存在するベクタ使用プロセスの数がそれらにサービスを提供するスカラ機能付きプロセッサ (スカラ・プロセッサとベクタ・プロセッサのペア) の数よりも多い場合は,プロセスの優先順位に従ってベクタ使用プロセスがベクタ機能付きプロセッサを共用します。ベクタ機能付きプロセッサを使用する複数のプロセスの優先順位が等しい場合,それらのプロセスはラウンド・ロビン形式でスケジューリングされます。ベクタ機能付きプロセッサに新しいベクタ使用プロセスをスケジューリングする場合,システムは現在メモリ内に存在するベクタ使用プロセスのベクタ・コンテキストを保存し,メモリから新しいベクタ使用プロセスを復元する必要があります。このような「低速」ベクタ・コンテキスト・スイッチが過剰に発生する場合は,実際の演算よりもベクタ・コンテキスト・スイッチに多くの処理時間が費やされるようになります。
ベクタ処理の必要性が大きなシステムは,それらの必要性を満たすように構成する必要があります。しかし,既存の構成のままでチューニングを行うことでその性能を改善できるいくつかの方法があります。
28.4.3.1 システム資源とプロセス・クォータの調整 (VAX のみ)
いくつかのベクタ使用プロセスが同時に稼働状態になるシステムでは,プロセスがメモリを共用するためにページング動作が増加することがあります。プロセス・ページングの回数を減らすためには, AUTHORIZE ユーティリティを使って,ベクタ化アプリケーションを実行しているプロセスのワーキング・セットの制限とクォータを調整します (詳細は,『Compaq OpenVMS システム管理ユーティリティ・リファレンス・マニュアル』の AUTHORIZE のパートを参照してください)。また,プロセス最大ワーキング・セット・サイズ (システム・パラメータ WSMAX) の値を大きくします。さらに必要であれば,ベクタ化アプリケーションでワーキング・セット・システム・サービス ($LKWSET) のロック・ページを使って,自身の性能を向上させます。
ベクタを使用する各プロセスは 8 KB のシステム非ページング動的メモリを割り当てられ,その中にベクタ・コンテキストの情報が格納されます。システム内で同時に稼働状態になっているベクタ使用プロセスの数に応じて,システム・パラメータ NPAGEDYN の値を調整します。 DCL の SHOW MEMORY/POOL/FULL コマンドを使用すると,非ページング・プールの現在のサイズがバイト数で示されます。
VAX ベクタ処理システムの最適な性能を得るため,バッチ・キューの設定時にシステムのベクタ資源を飽和させないように注意する必要があります。キューに登録された稼働状態のベクタ化バッチ・ジョブの数がシステム内のベクタ機能付きプロセッサの数より多いと,ベクタ・コンテキスト・スイッチに処理時間の多くの部分が消費されるようになります。
できれば,ベクタ化されたバッチ・ジョブを VAX ベクタ処理システムにディスパッチするためのキュー (たとえば VECTOR_BATCH) を別に用意し,そのジョブの制限数をシステム内のベクタ機能付きプロセッサの数と同じにします。そして,ベクタ化バッチ・ジョブをこの汎用ベクタ処理バッチ・キューに登録するようにユーザに指示します。
28.4.3.2 プロセスへのスカラ資源およびベクタ資源の配分 (VAX のみ)
ベクタ使用プロセスはベクタ機能付きプロセッサにスケジューリングする必要があります。プロセスが実行しているイメージが,ある期間スカラ命令だけを発行し,ベクタ機能付きプロセッサを他のベクタ使用プロセスと共用する必要がある場合,そのイメージはスカラ・プロセッサ上で実行できないために,そのイメージ自身の性能だけでなく,システム全体の性能が低下します。
省略時の設定では,ベクタ使用プロセスがある期間ベクタ命令を発行していない場合,そのプロセスはすぐにはベクタ命令を発行しないと想定されます。このプロセスはベクタ機能が必要でないとみなされ,潜在的ベクタ使用プロセスに移行します。
非対称型ベクタ処理構成では,潜在的ベクタ使用プロセスが検出されると次のような効果があります。
システム・パラメータ VECTOR_MARGIN は,すべてのベクタ使用プロセスの状態がチェックされる間隔を決定します。 VECTOR_MARGIN に,1 から FFFFFFFF16 までの任意の整数値に設定することができます。この値は,システム・パラメータ QUANTUM によって決定される連続プロセス・クォンタムの数を表します。 指定したクォンタムの数で決定する期間プロセスがベクタ命令を発行しないと,システムはそのプロセスを潜在的ベクタ使用プロセスとして宣言します。
VECTOR_MARGIN の省略時の値は 20010 です。
28.4.4 ACL によるベクタ・プロセッサへのアクセスの制限 (VAX のみ)
ベクタ 機能は,ユーザがベクタ・プロセッサのサービスを使用できるようにするために,オペレーティング・システムが使用する抽象的なソフトウェアです。アクセス制御リスト (ACL) にベクタ機能のオブジェクトを対応づけることによって,ベクタ・プロセッサの使用を特定の ID を持つユーザに制限することができます。
たとえば,大学ではベクタ・プロセッサの使用を,イメージ処理を研究する学部や学生に限定する場合があります。また,情報サービス会社では,ベクタ機能へのアクセスとベクタ・プロセッサを使用した時間の一方または両方をユーザに対して請求する場合があります。
DCLコマンド SET SECURITY/ACL を次の形式で使用して,ベクタ機能についての ACL を設定します。
SET SECURITY /CLASS=CAPABILITY /ACL=(ace[,...]) VECTOR |
$ SHOW SECURITY /CLASS=CAPABILITY VECTOR |
ここで,ACL はベクタ機能に対して設定されるものであり,システム上の任意またはすべてのベクタ機能付きプロセッサの使用を制限するものではないということに注意してください。オペレーティング・システムは,ベクタ機能付きプロセッサ上のベクタ機能を使用する許可を持たないプロセスでもスケジューリングします。しかし,これらのプロセスが利用できるのはプロセッサのスカラ CPU コンポーネントだけであって,ベクタ命令を実行することはできません。同様に,ACL はベクタ機能に対して設定され,ベクタ機能付きプロセッサに対して設定されているものでないため, ACL を使って特定のプロセッサ上でジョブを長時間実行させることはできません。
SET SECURITY コマンドと SHOW SECURITY コマンドについての詳細は,『Compaq OpenVMS DCL ディクショナリ』を参照してください。
前へ | 次へ | 目次 | 索引 |