[ 前のページ ]
[ 次のページ ]
[ 目次 ]
[ 索引 ]
[ DOC Home ]
本章では,ベクタ化されたプログラム(VAXベクタ命令を使用するプログラム) に固有のデバッガの機能について説明します。他の章で説明するデバッガの機能のほかに, これらの機能も使用します。
本章では,以下のタスクを実行する方法を説明しています。
ベクタ化された高級言語プログラムについての詳しい説明は,各言語のドキュメントを参照してください。 ベクタ命令とベクタ・レジスタについての詳しい説明は, 『VAX MACRO and Instruction Set Reference Manual』を参照してください。
SHOW PROCESS/FULLコマンドを使用すると,ユーザのシステムでベクタ型プロセッサを使用できるかどうかおよびその使用方法に関する情報を得ることができます。 次に例を示します。
DBG> SHOW PROCESS/FULL . . . Vector capable: Yes Vector consumer: Yes Vector CPU time: 0 00:03:17.18 Fast Vector context switches: 0 Slow Vector context switches: 0 . . . DBG>
「Vector capable」フィールドには,次のいずれかを指定できます。
Vector-Capable項目 | 説明 |
---|---|
あり | VAXシステムにベクタ型プロセッサがあり, 現在プログラムを実行中のプロセスがアクセスできる。 |
なし(保護されている) | VAXシステムにはベクタ型プロセッサがあるが, プログラムを実行しているプロセスはこのプロセッサにアクセスできない。 |
VVIEF | VAXシステムにはベクタ型プロセッサがない。VAX ベクタ命令エミュレーション機能(VVIEF)を実行中である。プログラムを実行しているプロセスはVVIEF にアクセスできる。 |
No | VAXシステムにはアクティブなベクタ型プロセッサがない。 また,VVIEFはこのシステムにロードされていない。 |
ここでは,次のタスクを実行する方法を説明します。
プログラム内で次のベクタ命令が検出されるまでそのプログラムを実行するには,STEP/VECTOR_INSTRUCTION コマンドを入力します。
STEP/INSTRUCTION=(opcode[, . . . ])コマンドを使用すれば, 命令コード・リスト内にある命令コードを持つベクタ命令を次に検出するまでプログラムを実行することもできます。 次に例を示します。
DBG> STEP/INSTRUCTION=(VLDL,VSTL,MOVL)
SET STEPコマンドを使用すると,次のようにSTEPコマンドの省略時の実行単位を変更できます。
プログラム内でベクタ命令が検出されたとき必ずブレークポイントまたはトレースポイントを検出するには,SET BREAK/VECTOR_INSTRUCTION またはSET TRACE/VECTOR_INSTRUCTION コマンドを入力します。
このようなブレークポイントまたはトレースポイントを取り消すには, CANCEL BREAK/VECTOR_INSTRUCTIONコマンドまたはCANCEL TRACE/VECTOR_ INSTRUCTIONコマンドを入力します。
SET BREAKコマンドやSET TRACEコマンドとともに/INSTRUCTION=( opcode[, . . . ])修飾子を使用しても,1 つまたは複数のベクタ命令上にブレークポイントやトレースポイントを設定できます。 次にその例を示します。
DBG> SET BREAK/INSTRUCTION=(VVADDL,VVLEQL)
このようなブレークポイントやトレースポイントを取り消すには,CANCEL BREAK/INSTRUCTIONコマンドまたはCANCEL TRACE/INSTRUCTIONコマンドを使用します。
ウォッチポイントは,ベクタ・レジスタ(V0〜V15)とベクタ制御レジスタ( VCR ,VLR,およびVMR)に設定できます。これらのレジスタとその組み込みのデバッガ・ シンボルについては,第16.3.1 項を参照してください。
これらのウォッチポイントは,静的ウォッチポイントとして扱われ,設定されたあとは明示的に取り消すまで有効です。 次の例では,ウォッチポイントがVCR レジスタに設定されます。
DBG> SET WATCH %VCR
レジスタVMRとV0からV15の場合,ウォッチポイントはレジスタ集合体( レジスタのすべての要素),個々のレジスタ要素またはある範囲の要素( 断面)のどれかに設定できます。これは,配列変数にウォッチポイントを設定する場合と同じ方法で設定します。 第3.4 節を参照してください。
たとえば,次のコマンドは,レジスタV5の要素がどれか変化するとウォッチポイントが検出されるように設定します。
DBG> SET WATCH %V5
次のコマンドは,V2の要素37が変化すると,ウォッチポイントが検出されるように設定します(Fortran 配列構文)。
DBG> SET WATCH %V2(37)
次のコマンドは,V2で要素5〜13のどれかが変化するとウォッチポイントが検出されるように設定します。
DBG> SET WATCH %V2(5:13)
ここでは,ベクタ制御レジスタ(VCR,VLRおよびVMR)とベクタ・レジスタ(V0 〜V15)を検査し,値を格納する方法を説明します。
VAXアーキテクチャには,16個のベクタ・レジスタ(V0〜V15)と3個のベクタ制御レジスタ(VCR ,VLR,VMR)があります。デバッガ・コマンドでこれらのレジスタを参照する場合は, 次の組み込みシンボル(レジスタ名の前にパーセント記号(%) がついてる)を使用します。
シンボル | 説明 |
---|---|
%V0 . . . %V15 | ベクタ・レジスタ(V0 . . . V15) |
%VCR | ベクタ数レジスタ(VCR) |
%VLR | ベクタ長レジスタ(VLR) |
%VMR | ベクタ・ マスク・レジスタ(VMR) |
どのデバッガ・レジスタ・シンボルでもそうであるように,プログラムがその名前にパーセント記号(%) を宣言していない場合,このシンボルは省くことができます。
ベクタ数レジスタ(VCR)は,IOTA命令によって生成されたオフセット・ベクタの長さを指定します。
VCRの値は,0から64までの整数です。省略時の設定では,デバッガはVCR をロングワード整数として扱います。64を超す値もVCRに格納できますが, その場合,デバッガは診断メッセージを発行して値がこのクラスの限界を超えていることを知らせます。
次のコマンド・シーケンスは,VCRの値を操作する方法を示しています。
DBG> EXAMINE %VCR 0\%VCR: 8 DBG> DEPOSIT %VCR = 4 DBG> EXAMINE %VCR 0\%VCR: 4 DBG>
ベクタ長レジスタ(VLR)は,ベクタ命令が処理するベクタ・レジスタの最上位の要素を制限します。VLR の値は,0から64までの整数です。この値は, 処理されるレジスタ要素の数を指定します。要素0から指定できます。
デバッグ・セッションでは,VLRの現在の値が,EXAMINEデバッガ・コマンドまたはDEPOSIT デバッガ・コマンドでアクセスできるベクタ・レジスタの最上位の要素を制限します。
次のコマンド・シーケンスは,VLRの値を操作して,ベクタ・レジスタV1 の別の要素数を検査する方法を示しています。
DBG> EXAMINE %VLR 0\%VLR: 4 DBG> EXAMINE %V1 0\%V1 (0): 12 (1): 3 (2): 138 (3): 51 DBG> DEPOSIT %VLR = 3 DBG> EXAMINE %VLR 0\%VLR: 3 DBG> EXAMINE %V1 0\%V1 (0): 12 (1): 3 (2): 138 DBG>
0からVLR-1までの範囲にないレジスタ要素にはアクセスできません。次の例では,EXAMINE コマンドがレジスタVIの要素7を指定していますが,これは境界外です(Fortran 配列構文)。
DBG> EXAMINE %VLR 0\%VLR: 3 DBG> EXAMINE %V1(7) %DEBUG-E-VECTSUBRNG, vector register subscript out of bounds, bounds are 0..2 DBG>
省略時の設定では,デバッガがVLRをロングワード整数として扱います。 64を超えた値をVLRに格納できますが,その場合,デバッガは診断メッセージを発行して値が境界外であることを知らせます。
ベクタ・マスク・レジスタ(VMR)は,ベクタ命令がベクタ・レジスタ・オペランドの特定の要素だけに演算を行うために使用するマスク( ビット・ パターン)を指定します。マスクされたベクタ命令は,VMRによってマスクされたベクタ・ レジスタの要素には演算を行いません。
VMRには0から63までの番号がついた64個のビット(1クォドワード)が含まれています。 各ビットはベクタ・レジスタ内の要素と対応しています。特定のビットの値(0 または1)は,マスクされた演算の場合に対応するレジスタ要素の演算を行うかどうかを決定します。
マスクされた演算については,第16.4.1 項と第16.5節を参照してください。 ここでは,VMRの値を表示したり変更する方法だけを説明します。
VMRの1つまたは複数の要素(ビット)を検査するには,配列変数を検査する場合と同じ方法を使用します。 第4.2.3 項を参照してください。
たとえば,次のコマンドの出力は,VMRのビット5がセットされていることを示しています(Fortran 配列構文)。
DBG> EXAMINE %VMR(5) 0\%VMR(5): 1 DBG>
次のコマンドは,VMRのビット4〜6の値を表示します。ビット4と5がセットされ, ビット6はクリアされます。
DBG> EXAMINE %VMR(4:6) 0\%VMR (4): 1 (5): 1 (6): 0 DBG>
省略時の設定では,添字を指定せずにVMRを検査すると,デバッガはレジスタの値を16 進形式のクォドワード整数として表示します。その結果,出力表示のサイズを削減できます。 次に例を示します。
DBG> EXAMINE %VMR 0\%VMR (0): 0FFFFFFF FFFFFFFF DBG>
EXAMINE/BIN %VMRコマンドまたはEXAMINE %VMR(0:63)コマンドを指定すると,VMR の各ビットの値を64行の配列形式で表示できます。
配列変数を使用したときと同様に,VMRへの値の格納は一度に1ビットずつできます。 次に例を示します。
DBG> EXAMINE %VMR(37) 0\%VMR(37): 1 DBG> DEPOSIT %VMR(37) = 0 DBG> EXAMINE %VMR(37) 0\%VMR(37): 0 DBG>
DEPOSIT/QUADWORDコマンドを使用すると,クォドワード整数値を集合体全体に格納することもできます。 次に例を示します。
DBG> DEPOSIT/QUADWORD %VMR = %HEX 0FFFFF DBG> EXAMINE %VMR 0\%VMR (0): 00000000 000FFFFF DBG>
言語式でVMRの要素を指定する場合,VMRはビットの配列であることに注意してください。 そのため,まずCまたはBLISSなどのビット演算が可能な言語に一時的に設定しなければならないこともあります。 次に例を示します。
DBG> SET LANGUAGE C DBG> DEFINE/VALUE K = 0 DBG> FOR I=0 TO 63 DO (IF %VMR[I] == 1 THEN (DEF/VAL K = K + 1))
V0からV15までの16個のベクタ・レジスタがあります。各ベクタ・レジスタは番号0 から63が割り当てられた64個の要素を持っています。また,各要素は64 ビット(1クォドワード)から構成されます。
ベクタ・レジスタの1つまたは複数の要素を検査するには,配列変数の検査の場合と同じ方法を使用します( 第4.2.3 項を参照)。本項では,例にFortran配列構文を使用します。
DBG> EXAMINE %V3 !V3 のすべての要素を検査する DBG> EXAMINE %V3(27) !V3 の要素 27 の要素を検査する DBG> EXAMINE %V3(3:14) !V3 の要素 3 から 14 までを検査 する DBG> EXAMINE %V0(2),%V3(1:4) !V0 の要素 2 と V3 の要素 1 から 4 までを !検査する
レジスタ要素の値は,配列変数で使用するものと似た添字付き形式で表示されます。 たとえば,次のコマンドは,レジスタV1の要素1から3までの値を表示します。
DBG> EXAMINE %V1(1:3) 0\%V1 (1): 3 (2): 138 (3): 51 DBG>
ある範囲のベクタ・レジスタは検査できません。たとえば,次のコマンドは無効です。
DBG> EXAMINE %V0:%V3 DBG> EXAMINE %V2(7):%V3(12)
配列変数と同様に,値をベクタ・レジスタの1つだけの要素に一度に格納できます。 たとえば,次のコマンドは整数値8531をVOの要素9に格納します。
DBG> DEPOSIT %V0(9) = 8531
ベクタ長レジスタ(VLR)の現在の値は,検査または格納できる最高のレジスタ要素を制限します( 第16.3.3項を参照) 。したがって,次のコマンドは同じ機能を持っています。
DBG> EXAMINE %V1 DBG> EXAMINE %V1(0:%VLR-1)
式0:%VLR-1は,VLRの現在の値によって示された範囲内のレジスタ要素を指定します。
省略時の設定では,デバッガはベクタ・レジスタの各要素をロングワード整数として扱い, 現在の基数で値を表示します。次に例を示します。
DBG> EXAMINE %V3(27) 0\%V3(27): 5983 DBG> DEPOSIT %V3(27) = 3625 DBG> EXAMINE %V3(27) 0\%V3(27): 3625 DBG>
ただし,ベクタ命令のコンテキストで調べられるレジスタ値(命令オペランド) は,その命令に適切なデータ型で表示されます。第16.4.1項を参照してください。
ベクタ・レジスタの要素の全(クォドワード)値をクォドワード整数として表示するには,EXAMINE/QUADWORD コマンドを使用します。同様に,クォドワード整数値をレジスタ要素に格納するには,DEPOSIT/QUADWORD コマンドを使用します。
また,EXAMINEコマンドやDEPOSITコマンドに関連した他の型の修飾子(たとえば/FLOAT) を使用すると,省略時の型を上書きできます。次に例を示します。
DBG> EXAMINE %V5(2) 0\%V5(2): 0 DBG> EXAMINE/D_FLOAT %V5(2) 0\%V5(2): 0.0000000000000000 DBG>
言語式での集合体のデータ構造の使用に関する制限事項に従えば,言語式でレジスタ・ シンボルを使用できます(第4.1.6.1 項を参照)。たとえば,次の式は有効です(Fortran構文)。
DBG> EVALUATE %V0(4) .EQ. %V1(4)
ただし,次の式は,2つ以上のレジスタ要素を指定しているので無効です。
DBG> EVALUATE %V0 .EQ. %V1
ベクタ命令を操作する方法には,スカラ命令(第4.3 節を参照)で使用するもののほかに,次のようなベクタ命令に固有の方法もあります。
ベクタ命令を検査するか値を格納する場合,デバッガは適用される命令に従ってベクタ命令修飾子を正しく処理します。 次の表に,これらの修飾子の機能をまとめてあります。 使用法についての詳しい説明は, 『VAX MACRO and Instruction Set Reference Manual』を参照してください。
命令修飾子 | 説明 |
---|---|
/U | 浮動小数点アンダフロー(ベクタ浮動小数点命令)を使用可能にする。 |
/V | 整数オーバフロー( ベクタ整数命令)を使用可能にする。 |
/M | 意味を変更する(VLDx命令とVGATH x命令)。 |
/0 | VMRビットが0の要素に対してだけマスクされた演算を実行する。 |
/1 | VMRビットが1 の要素に対してだけマスクされた演算を実行する。 |
ベクタ命令のあるプログラム記憶位置を検査すると,デバッガはその命令をデコードし, 命令とそのオペランドをMACROアセンブラ形式に変換します。 ただし,次の制限事項があります。命令コードについての詳しい説明は『 VAX MACRO and Instruction Set Reference Manual』を参照してください。
EXAMINE/OPERANDS .%PCコマンドを使用すると現在のPC値の命令とそのオペランドを表示できます( 第4.3.1項を参照) 。ベクタ命令をこのコマンドを使用して検査すると,ベクタ・レジスタ・ オペランドの値が配列変数として表示されます。次に例を示します(Fortran 配列構文)。
DBG> EXAMINE/OPERANDS .%PC PROG$MAIN\%LINE 81+19: VSTL V0,W^-572(FP),S^#4 V0 contains: 0\%V0(0): 137445504 0\%V0(1): 137445504 0\%V0(2): 137445504 W^-572(FP) 2145991456 contains 2 DBG>
スカラ命令の場合と同様に,オペランド値は,調べられた命令に適したデータ型で表示されます。
EXAMINE/OPERANDSコマンドを使用する場合,レジスタ要素の表示は次の要素によって異なります。
VVADDF/1 V0,V1,V2
マスクされた演算の場合,設定されたVMRビットまたはクリアされたVMR ビットに対応する要素だけに演算が行われます。命令修飾子が/1または/0 のどちらであるかによって決まります。
次の2つの例でこれを具体的に説明します。それぞれ,マスクされないレジスタ間の演算とマスクされたレジスタ間の演算を示しています。
次の例では,チェックした命令VVADDFがマスクされない演算を実行しており, そのためVMRの現在の値は関係ありません。0から5までのすべての要素が表示されています。
DBG> EXAMINE %VLR 0\%VLR: 6 DBG> EXAMINE %VMR(0:5) 0\%VMR (0): 1 (1): 0 (2): 1 (3): 0 (4): 1 (5): 0 DBG> EXAMINE/OPERANDS .%PC PROG$MAIN\%LINE 12: VVADDF V0,V1,V2 V0 contains: 0\%V0(0): 7.0000000 0\%V0(1): 7.0000000 . . 0\%V0(5): 7.0000000 V1 contains: 0\%V1(0): 4.0000000 0\%V1(1): 4.0000000 . . 0\%V1(5): 4.0000000 V2 contains: 0\%V2(0): 5.0000000 0\%V2(1): 5.0000000 . . 0\%V2(5): 5.0000000 DBG>
次の例では,同じVVADDF命令が,マスクされた演算を実行しています。命令修飾子/1 を指定すると,セットされたVMRビット(ビットの値が1)に一致している要素に対して演算を行います。
DBG> EXAMINE %VLR 0\%VLR: 6 DBG> EXAMINE %VMR(0:5) 0\%VMR (0): 1 (1): 0 (2): 1 (3): 0 (4): 1 (5): 0 DBG> EXAMINE/OPERANDS .%PC PROG$MAIN\%LINE 12: VVADDF/1 V0,V1,V2 V0 contains: 0\%V0(0): 7.0000000 0\%V0(2): 7.0000000 0\%V0(4): 7.0000000 V1 contains: 0\%V0(0): 4.0000000 0\%V0(2): 4.0000000 0\%V0(4): 4.0000000 V2 contains: 0\%V0(0): 5.0000000 0\%V0(2): 5.0000000 0\%V0(4): 5.0000000 DBG>
次の例では,マスクされた演算でデータをメモリからベクタ・レジスタにロードしています。
DBG> EXAMINE %VLR 0\%VLR: 6 DBG> EXAMINE %VMR(0:5) 0\%VMR (0): 1 (1): 0 (2): 1 (3): 0 (4): 1 (5): 0 DBG> EXAMINE/OPERANDS .%PC 【1】 PROG$MAIN\%LINE 31+12: VLDL/1 ARR+8,#4,V0 【2】 PROG$MAIN\ARR(3) (address 1024) contains 35 【3】 V0 contains: 0\%V0(0): 0 【4】 0\%V0(2): 0 0\%V0(4): 0 DBG> EXAMINE ARR(1:8) 【5】 PROG$MAIN\ARR (1): 9 (2): 17 (3): 35 (4): 73 (5): 81 (6): 6 (7): 7 (8): 49 DBG>
次の番号は,上記の例の番号に対応しています。
VAXスカラ命令を格納する方法は,ベクタ命令を格納する方法にも適用されます( 第4.3.2項を参照)。 たとえば,次のコマンドは現在のPCアドレスのマスクされたVVMULFベクタ命令を格納します。
DBG> DEPOSIT/INSTRUCTION .%PC = "VVMULF/0 V2,V3,V7"
ベクタ命令を格納する場合,次のことにも注意してください。命令コードについての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。
演算がベクタ・マスク・レジスタ(VMR)によってマスクされているかどうかにより,EXAMINE/OPERANDS .%PC コマンドがベクタ命令オペランドを表示する方法がどう変わるかは, 第16.4.1 項を参照してください。
本節では,任意のマスクを指定して,VMRの効果をシミュレートまたは上書きしたり, 次の結果を得る方法を説明します。
マスクは,EXAMINEコマンドとともに/TMASK修飾子または/FMASK修飾子を使用して指定します。
/TMASK修飾子を指定すると,EXAMINEコマンドは,セットされたマスク・ ビット(ビットの値は1)に対応したチェック済みレジスタの要素だけに適用されます。 これに対し,/FMASK修飾子を指定すると,EXAMINEコマンドはクリアされたマスク・ ビット(ビットの値は0)に対応した要素だけに適用されます。
VLRの現在の値は,検査できるベクタ・レジスタの最上位の要素を制限します。 ただし,VLRの値はメモリ内の配列の検査には影響しません。
/TMASK修飾子と/FMASK修飾子を使用すれば,マスクはマスク・アドレス式の形式で指定できますが省略することもできます。 詳しい説明は,次の項を参照してください。
省略時の設定では,EXAMINE/TMASKコマンドまたはEXAMINE/FMASKコマンドでマスクを指定しないと,VMR がマスクとして使用されます。すなわち, EXAMINEコマンドはセットされたVMRビット(/TMASKの場合)またはクリアされたVMR ビット(/FMASKの場合)に対応したベクタ・レジスタの要素だけに適用されます。
次の例では,VLRの値は6であり,VMR(0:VLR-1)の値は次のとおりです。
DBG> EXAMINE %VMR(0:%VLR-1) 0\%VMR (0): 1 (1): 0 (2): 1 (3): 0 (4): 1 (5): 0 DBG>
次のコマンドは,V3の値をマスクを使用しないで示します。V3の0からVLR-1 までのすべての要素が表示されます。
DBG> EXAMINE %V3 0\%V3 (0): 17 (1): 138 (2): 3 (3): 9 (4): 51 (5): 252 DBG>
次のコマンドは,VMR(i)の値が1であるV3の要素(0からVLR-1) を表示します。
DBG> EXAMINE/TMASK %V3 0\%V3 (0): 17 (2): 3 (4): 51 DBG>
次のコマンドは,VMR(i)の値が0であるV3の要素(0からVLR-1 まで)を表示します。
DBG> EXAMINE/FMASK %V3 0\%V3 (1): 138 (3): 9 (5): 252 DBG>
次の例では,命令とそのベクタ・レジスタ・オペランドを検査するときに/FMASK 修飾子が使用されています。EXAMINE/OPERANDS/FMASKコマンドは,VMR( i)の値が0であるレジスタ・オペランド要素(0からVLR-1 まで)を表示します。
DBG> EXAMINE/OPERANDS/FMASK .%PC PROG$MAIN\%LINE 341+16: VVEQLL V0,V1 V0 contains: 0\%V0(1): 0 0\%V0(3): 0 0\%V0(5): 0 V1 contains: 0\%V1(1): 0 0\%V1(3): 0 0\%V1(5): 0 DBG>
EXAMINE/TMASKコマンドまたはEXAMINE/FMASKコマンドでVMRの断面を指定すると, 次の規則に従って出力が表示されます。
DBG> EXAMINE %VLR 0\%VLR: 12 DBG> EXAMINE %VMR(3:5) 0\%VMR (3): 1 (4): 1 (5): 1 DBG> EXAMINE/TMASK=(%VMR(3:5)) %V0(3:10) 0\%V0 (3): 9 (4): 51 (5): 252 DBG>
/TMASK修飾子でマスクを指定するときは括弧を使用する。
DBG> EXAMINE %VLR 0\%VLR: 12 DBG> EXAMINE %VMR(4:7) 0\%VMR (4): 1 (5): 0 (6): 1 (7): 1 DBG> EXAMINE/TMASK=(%VMR(4:7)) %V0(3:10) %DEBUG-I-MASKMISMATCH, mask/target subscripts do not match, displaying mask 0\%V0 %VMR(4): 1 %V0(3): 9 %VMR(6): 1 %V0(5): 252 %VMR(7): 1 %V0(6): 56 DBG>
EXAMINE/TMASKコマンドまたはEXAMINE/FMASKコマンドでVMR以外のマスク・ アドレス式を指定すると,次の規則に従い,そのアドレスの値がマスクとして使用されます。
DBG> EXAMINE %VLR 0\%VLR: 6 DBG> EXAMINE BOOL_ARR PROG$MAIN\BOOL_ARR (0): 0 (1): 0 (2): 1 (3): 0 DBG> EXAMINE/FMASK=(BOOL_ARR) %V0 %DEBUG-I-MASKNOTVMR, mask used is not %VMR, displaying specified mask 0\%V0 BOOL_ARR(0): 0 %V0(0): 17 BOOL_ARR(1): 0 %V0(1): 138 BOOL_ARR(3): 0 %V0(3): 9 DBG>
この例に示すように,VMR以外のマスクを使用すると,デバッガは演算を行うマスク要素とレジスタ要素の両方を表示して, メッセージを発行する。
DBG> EXAMINE BOOL_VAR PROG$MAIN\BOOL_VAR: 1 DBG> EXAMINE/TMASK=(BOOL_VAR) %V0 %DEBUG-I-MASKNOTVMR, mask used is not %VMR, displaying specified mask 0\%V0 BOOL_VAR: 1 %V0(0): 17 DBG>
EXAMINEコマンドを使用すると,各種の形式の複合アドレス式(あるアドレスからのバイト・ オフセットを含むアドレス式)を指定できます。たとえば,X が整変数であると,次のEXAMINEコマンドは,Xのアドレスから6バイト先の記憶位置に現在格納されている値を表示します。
DBG> EXAMINE X + 6 MOD3\X+6: 274903 DBG>
本節で使用する例は,ベクタ化されたプログラムに適した形式の複合アドレス式を指定する方法を示しています。
次の例は,VSCATL命令の効果をチェックできる方法を示しています。ここに示す命令は,Fortran プログラムからデコードされたものです。
DBG> EXAMINE %VLR 0\%VLR: 5 DBG> EXAMINE/OPERANDS .%PC 【1】 PROG1$MAIN\%LINE 9+32: VSCATL V7,W^-804(R11),V9 V7 contains: 0\%V7(0): 11 【2】 0\%V7(1): 13 0\%V7(2): 15 0\%V7(3): 17 0\%V7(4): 19 W^-804(R11)PROG1$MAIN\ARRX(1) (address 1820) contains 0 【3】 V9 contains: 0\%V9(0): 0 【4】 0\%V9(1): 8 0\%V9(2): 16 0\%V9(3): 24 0\%V9(4): 32 DBG> SHOW SYMBOL/TYPE ARRX 【5】 data PROG1$MAIN\ARRX array descriptor type, 1 dimension, bounds: [1:200], size: 800 bytes cell type: atomic type, longword integer, size: 4 bytes DBG> EXAMINE ARRX(1) + .%V9(0:%VLR-1) 【6】 PROG1$MAIN\ARRX(1): 0 PROG1$MAIN\ARRX(3): 0 PROG1$MAIN\ARRX(5): 0 PROG1$MAIN\ARRX(7): 0 PROG1$MAIN\ARRX(9): 0 DBG> STEP/INSTRUCTION 【7】 stepped to PROG1$MAIN\%LINE 9+40: MOVZBL I^#64,AP DBG> EXAMINE ARRX(1) + .%V9(0:%VLR-1) 【8】 PROG1$MAIN\ARRX(1): 11 PROG1$MAIN\ARRX(3): 13 PROG1$MAIN\ARRX(5): 15 PROG1$MAIN\ARRX(7): 17 PROG1$MAIN\ARRX(9): 19 DBG>
次の番号は,上記の例の番号に対応しています。
次の例は,EXAMINEコマンドでもう少し複雑なベクタ・アドレス式を指定する方法を示しています。
配列ARRZが連続したクォドワード整数(8バイト)要素を持っているものとします。 例の4つめのEXAMINEコマンドは,メモリ内の要素ARRZ(1)で始まるベクタ要素の値を表示します。 先の例の場合と同様に,デバッガはベクタ要素の記憶位置を配列要素でシンボル化します。 一連のベクタ要素の, ARRZ(1)に対する相対記憶位置は,レジスタV1とレジスタV3に入っている値を加えて求め, 特定の要素に対する結合オフセットを指定します。ベクタ要素が表示される順番は, 最初に指定されたレジスタ(V1)の各値に関して, 最後に指定したレジスタ (V3(0:2))のすべての値を振り当てる形になります。 この例では,すべてのベクタ要素の値が0です。
DBG> EXAMINE %VLR 0\%VLR: 4 DBG> EXAMINE %V1 0\%V1 (0): 0 (1): 4 (2): 8 (3): 12 DBG> EXAMINE %V3 0\%V1 (0): 0 (1): 8 (2): 16 (3): 24 DBG> EXAMINE ARRZ(1) + .%V1(0:3) + .%V3(0:2) PROG4$MAIN\ARRZ(1): 0 ! ARRZ(1)+0+0 PROG4$MAIN\ARRZ(2): 0 ! ARRZ(1)+0+8 PROG4$MAIN\ARRZ(3): 0 ! ARRZ(1)+0+16 PROG4$MAIN\ARRZ(1)+4: 0 ! ARRZ(1)+4+0 PROG4$MAIN\ARRZ(2)+4: 0 ! ARRZ(1)+4+8 PROG4$MAIN\ARRZ(3)+4: 0 ! ARRZ(1)+4+16 PROG4$MAIN\ARRZ(2): 0 ! ARRZ(1)+8+0 PROG4$MAIN\ARRZ(3): 0 ! ARRZ(1)+8+8 PROG4$MAIN\ARRZ(4): 0 ! ARRZ(1)+8+16 PROG4$MAIN\ARRZ(2)+4: 0 ! ARRZ(1)+12+0 PROG4$MAIN\ARRZ(3)+4: 0 ! ARRZ(1)+12+8 PROG4$MAIN\ARRZ(4)+4: 0 ! ARRZ(1)+12+16 DBG>
ベクタ命令がベクタ要素内で浮動小数点例外を生成すると,例外結果がデスティネーション・ レジスタの対応する要素にエンコードされます。
このような場合,EXAMINE/FLOATコマンドを使用すると,関連したレジスタ要素にデコードした例外メッセージが表示されます。 この方法を使用すると, 第16.8節に示すとおりに実行要求をまだ保留している浮動小数点例外を識別できます。 次の例は,ベクタ命令がレジスタV5 の要素2の浮動小数点ゼロ除算例外を生成したことを示しています。
DBG> EXAMINE/FLOAT %V5 0\%V5 (0): 297.2800 (1): 87.41499 (2): Reserved operand, encoded as floating divide by zero (3): 173.8650 DBG>
プログラムがベクタ・レジスタの値をメモリにコピーすれば,ベクタ・ レジスタの場合と同様に,デコードされた情報を表示するためにEXAMINE /FLOATコマンドをそのメモリ記憶位置に適用できます。
次の表にベクタ浮動小数点例外ごとにデコードされたデバッガ・メッセージを示します。
例外 | デバッガ・メッセージ |
---|---|
浮動小数点アンダフロー | 予約オペランド。 浮動小数点アンダフローとしてエンコードされる。 |
浮動小数点ゼロ除算 | 予約オペランド。 浮動小数点ゼロ除算としてエンコードされる。 |
浮動小数点予約オペランド | 予約オペランド。浮動小数点予約オペランドとしてエンコードされる。 |
浮動小数点オーバフロー | 予約オペランド。浮動小数点オーバフローとしてエンコードされる。 |
高い性能を達成するため,VAXのスカラ型プロセッサとベクタ型プロセッサはできるだけ並行して稼働します。 スカラ型プロセッサは,すべてのベクタ命令をベクタ型プロセッサに渡し, スカラ命令の実行を続けます。その間にベクタ型プロセッサはベクタ命令を実行しています。
場合によっては,2つのプロセッサの動作の同期をとらなければならないことがあります。 正しいプログラムの実行結果を得るには,SYNC, MSYNC,およびVSYNCなどの同期化命令を使用することにより,プログラムが特定の動作を完了させてからでないと, 他の動作を開始しないようにします。 これらの命令とスカラとベクタの同期化についての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。
プログラムがコンパイラ(たとえば,DEC Fortranコンパイラ)によってベクタ化されると, 必要な同期化命令が自動的に生成されます。ただし, MACROのプログラマは同期化命令を明示的に作成しなければなりません。
省略時の設定では,デバッガはプログラム(内部目的で実行しているものを除く) の実行中は,スカラとベクタの同期化を行いません。プログラムはデバッガの制御を受けていないかのように実行し, 同期化はプログラムによって完全に制御されています。 この省略時の動作モードは,SET VECTOR_MODE NOSYNCHRONIZEDコマンドによって設定されます。
デバッガを省略時の非同期化モードで使用すると,プログラムの実行がブレークポイント, ウォッチポイント,またはSTEPコマンドの完了時に中断されたときに, 特定のベクタ動作が割り込みをかけられた状態になることがあります。 次に例を示します。
このような場合に混乱しないようにするには,SYNCHRONIZE VECTOR_MODE コマンドを入力します。このコマンドは,スカラ型プロセッサとベクタ型プロセッサをただちに同期化します。 このコマンドを入力するのは,実行が一時停止しているプログラム内の記憶位置でSYNC 命令とMSYNC命令を入力するのと同じことです。 これは,次のような効果があります。
次のMACRO例は,SYNCHRONIZE VECTOR_MODEコマンドの機能を示しています。
DBG> STEP 【1】 stepped to .MAIN.\SUB\%LINE 99 99: VVDIVD V1,V0,V2 DBG> STEP 【2】 stepped to .MAIN.\SUB\%LINE 100 100: CLRL R0 DBG> EXAMINE/FLOAT %V2 【3】 0\%V2 [0]: 13.53400 [1]: Reserved operand, encoded as floating divide by zero [2]: 247.2450 . . . DBG> SYNCHRONIZE VECTOR_MODE 【4】 %SYSTEM-F-VARITH, vector arithmetic fault, summary=00000002, mask=00000004, PC=000002E1, PSL=03C00010 break on unhandled exception preceding .MAIN.\SUB\%LINE 100 100: CLRL R0 DBG>
次の番号は,上記の例の番号に対応しています。
SYNCHRONIZE VECTOR_MODEコマンドを使用する代わりに,SET VECTOR_MODE SYNCHRONIZEDコマンドを入力すると,同期化ベクタ・モードでデバッガを稼働することもできます。 このコマンドを使用すると,デバッガは,ベクタ命令が実行されるたびに, スカラ型プロセッサとベクタ型プロセッサ間の同期を自動的にとります。 また,ベクタ命令を実行するたびにそのあとでSYNC 命令を実行し,さらにメモリにアクセスするベクタ命令を実行したあとでMSYNC 命令を実行します。その結果,次のように同期化の対象となっているベクタ命令に関連したすべての処理が終了します。
次の例は,SET VECTOR_MODE SYNCHRONIZEDコマンドを上記の例で使用したのと同じ命令ストリーム上で実行した場合の影響を示しています。
DBG> SHOW VECTOR_MODE Vector mode is nonsynchronized DBG> SET VECTOR_MODE SYNCHRONIZED 【1】 DBG> SHOW VECTOR_MODE Vector mode is synchronized DBG> STEP 【2】 stepped to .MAIN.\SUB\%LINE 99 99: VVDIVD V1,V0,V2 DBG> STEP 【3】 %SYSTEM-F-VARITH, vector arithmetic fault, summary=00000002, mask=00000004, PC=000002E1, PSL=03C00010 break on unhandled exception preceding .MAIN.\SUB\%LINE 100 100: CLRL R0 DBG>
次の番号は,上記の例の番号に対応しています。
SYNCHRONIZE VECTOR_MODEやSET VECTOR_MODE SYNCHRONIZEDのほかにも, 同期化に影響を及ぼすデバッガ・コマンド(SET WATCHなど)がいくつかあります。
CALLコマンドとともに/[NO]SAVE_VECTOR_STATE修飾子を指定すると,ベクタ型プロセッサの現在の状態を保存し, ルーチンが呼び出されたときに復元するかどうかを制御できます。
VAXベクタ・プロセッサの状態は,次のもので決まります。
CALLコマンドを使用してルーチンを実行すると,ルーチンの実行により, ベクタ・プロセッサの状態が次の動機により変化することがあります。
CALL/SAVE_VECTOR_STATEコマンドは,CALLコマンドを実行する前に存在したベクタ型プロセッサの状態を, 呼び出したルーチンの実行が完了したあとにデバッガが復元することを指定します。 その結果,呼び出したルーチンの実行が完了したあとに次の各項が確認されます。
CALL/NOSAVE_VECTOR_STATEコマンドは省略時の設定であり,CALLコマンドが実行される前に存在したベクタ型プロセッサの状態は, 呼び出したルーチンの実行が完了したあとに復元しないことを指定します。 この場合,ルーチン呼び出し後のベクタ型プロセッサの状態は, 呼び出したルーチンの影響によって異なります。
/[NO]SAVE_VECTOR_STATE修飾子は,VAX汎用(スカラ)レジスタには影響しません。 これらのレジスタの値は必ず保存され,CALLコマンドでルーチンを実行すると復元されます。
画面モードでは,レジスタ表示がVAX汎用レジスタの現在の値を示します。 第7.4.5項を参照してください。
ベクタ・レジスタまたはベクタ制御レジスタに入っているデータを画面モードで表示するには,DO 表示を使用します。第7.2.1項を参照してください。
たとえば,次のコマンドは,V2_DISPというDO表示を作成します。これは, レジスタV2の要素4から7までの内容を示します(Fortran配列構文)。 この表示は,プログラムからデバッガに制御が戻るたびに,自動的に更新されます。
DBG> DISPLAY V2_DISP AT RQ2 DO (EXAMINE %V2(4:7))
この節では,ベクタ化されたプログラムに対するデバッガのサポートについて, 問題と制限事項をまとめます。
DEPOSIT/QUADWORD %VMR = %HEX 0FFFFFFFF
[ 前のページ ]
[ 次のページ ]
[ 目次 ]
[ 索引 ]
[ DOC Home ]