(57)【特許請求の範囲】
【請求項１】
命令を記憶する記憶部、分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部、前記記憶部から命令を読み出す命令読出部、前記命令読出部が読み出した命令を実行する演算部、及び、前記分岐命令の分岐先命令の投機実行に失敗すると前記投機実行した分岐先命令の実行結果を無効化する分岐制御部、を有する演算処理装置を試験する試験方法であって、
前記命令読出部が、前記記憶部から分岐命令を読み出すステップと、
前記読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、前記分岐制御部が、前記命令読出部に、前記分岐命令の後続命令の読み出しを指示するステップと、
前記命令読出部が、前記指示に従って、試験規約に従わない第１の乱数データを、前記分岐命令の後続命令として読み出すステップと、
前記演算部が、前記読出分岐命令の分岐先アドレスを計算するとともに、前記第１の乱数データを命令として実行するステップと、
前記分岐制御部が、前記計算した分岐先アドレスと、前記第１の乱数データのアドレスとが異なる場合、前記第１の乱数データの実行結果を無効化するステップと、を有することを特徴とする試験方法。
【請求項２】
前記読出分岐命令の分岐履歴が前記分岐履歴部にある場合、前記命令読出部が、前記読出分岐命令の分岐履歴により前記読出分岐命令と対応付けられる分岐先アドレスにある前記試験規約に従わない第２の乱数データを前記記憶部から読み出すステップと、
前記演算部が、前記第２の乱数データを実行するステップと、
前記分岐制御部が、前記計算した分岐先アドレスと、前記第２の乱数データのアドレスとが異なる場合、前記第２の乱数データの実行結果を無効化するステップと、をさらに有することを特徴とする請求項１に記載の試験方法。
【請求項３】
前記第１又は第２の乱数データの実行結果を無効化した後に、前記演算処理装置の試験を繰り返す場合、前記読み出すステップでは、前記第１又は第２の乱数データの数を変えて読み出す、ことを特徴とする請求項１又は２に記載の試験方法。
【請求項４】
前記第１及び第２の乱数データの少なくとも１つは、命令コードを含むことを特徴とする請求項１〜３の何れか１項に記載の試験方法。
【請求項５】
試験を実行する演算処理装置であって、
分岐命令、及び前記分岐命令の後続命令として試験規約に従わない第１の乱数データを記憶する記憶部と、
分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部と、
前記記憶部から命令を読み出す命令読出部と、
前記命令読出部が読み出した命令を実行する演算部と、
前記命令読出部が読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、前記命令読出部に、前記試験規約に従わない第１の乱数データの読み出しを指示し、前記演算部が計算した前記分岐命令の分岐先アドレスと、前記乱数データのアドレスとが異なる場合、前記演算部による前記第１の乱数データの実行結果を無効化する分岐制御部、を備えることを特徴とする演算処理装置。
【請求項６】
前記命令読出部は、前記読出分岐命令の分岐履歴が前記分岐履歴部にある場合、前記読出分岐命令の分岐履歴により前記読出分岐命令と対応付けられる分岐先アドレスにある前記試験規約に従わない第２の乱数データを前記記憶部から読み出し、
前記演算部は、前記第２の乱数データを実行し、
前記分岐制御部は、前記計算した分岐先アドレスと、前記第２の乱数データのアドレスとが異なる場合、前記第２の乱数データの実行結果を無効化することを特徴とする請求項５に記載の演算処理装置。
【請求項７】
前記分岐制御部が前記第１又は第２の乱数データの実行結果を無効化した後に、前記試験を繰り返す場合、前記命令読出部は前記第１又は第２の乱数データの数を変えて読み出す、ことを特徴とする請求項５又は６に記載の演算処理装置。
【請求項８】
前記第１及び第２の乱数データの少なくとも１つは、命令コードを含むことを特徴とする請求項５又は６に記載の試験制御装置。
【請求項９】
命令を記憶する記憶部、及び、分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部を有する演算処理装置を試験するための試験プログラムであって、前記演算処理装置に、
前記記憶部から分岐命令を読み出す手順と、
前記読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、試験規約に従わない第1の乱数データを、前記分岐命令の後続命令として読み出す手順と、
前記読出分岐命令の分岐先アドレスを計算するとともに、前記第１の乱数データを命令として実行する手順と、
前記計算した分岐先アドレスと、前記第１の乱数データのアドレスとが異なる場合、前記第１の乱数データの実行結果を無効化する手順と、を実行させることを特徴とする試験プログラム。
【請求項１０】
前記読出分岐命令の分岐履歴が前記分岐履歴部にある場合、前記読出分岐命令の分岐履歴により前記読出分岐命令と対応付けられる分岐先アドレスにある前記試験規約に従わない第２の乱数データを前記記憶部から読み出す手順と、
前記第２の乱数データを実行する手順と、
前記計算した分岐先アドレスと、前記第２の乱数データのアドレスとが異なる場合、前記第２の乱数データの実行結果を無効化する手順と、をさらに実行させることを特徴とする請求項９に記載の試験プログラム。
【請求項１１】
前記第１又は第２の乱数データの実行結果を無効化した後に、前記演算処理装置の試験を繰り返す場合、前記読み出す手順では、前記第１又は第２の乱数データの数を変えて読み出す、ことを特徴とする請求項９又は１０に記載の試験プログラム。
【請求項１２】
前記第１及び第２の乱数データの少なくとも１つは、命令コードを含むことを特徴とする請求項９〜１１の何れか１項に
記載の試験プログラム。
【請求項１３】
請求項９に記載の試験プログラムを生成する方法であって、
演算処理装置が、分岐が成立する分岐命令を生成するステップと、
前記演算処理装置が、前記分岐命令を、主記憶装置に格納するステップと、
前記演算処理装置が、試験規約に従わない第１の乱数データを生成するステップと、
前記演算処理装置が、前記第１の乱数データを、前記主記憶装置において前記分岐命令の直後の位置に格納するステップと、
前記演算処理装置が、命令を生成するステップと、
前記演算処理装置が、前記命令を、前記主記憶装置において前記分岐命令の分岐先の位置に格納するステップと、を有することを特徴とする試験プログラム生成方法。
【請求項１４】
前記演算処理装置が、前記主記憶装置に格納される前記分岐が成立する分岐命令を、分岐が不成立になる分岐命令に変更するステップと、
前記演算処理装置が、前記主記憶装置に格納される前記第１の乱数データを、乱数データと異なる命令に変更するステップと、
前記演算処理装置が、前記試験規約に従わない第２の乱数データを生成するステップと、
前記演算処理装置が、前記第２の乱数データを、前記主記憶装置に格納される前記分岐命令の分岐先の位置に格納するステップと、をさらに有することを特徴とする請求項１３に記載の試験プログラム生成方法。
【請求項１５】
前記第１及び第２の乱数データの少なくとも１つは、命令コードを含むことを特徴とする請求項１３又は１４に記載の試験プログラム生成方法。
【請求項１６】
請求項９に記載の試験プログラムを生成する試験プログラム生成装置であって、
主記憶装置と、
分岐が成立する分岐命令を生成し、前記分岐命令を、主記憶装置に格納し、
試験規約に従わない第１の乱数データを生成し、前記第１の乱数データを、前記主記憶装置において前記分岐命令の直後の位置に格納し、
命令を生成し、前記命令を、前記主記憶装置において前記分岐命令の分岐先の位置に格納する演算処理装置と、
を備えることを特徴とする試験プログラム生成装置。
【請求項１７】
前記演算処理装置が、前記主記憶装置に格納される前記分岐が成立する分岐命令を、分岐が不成立になる分岐命令に変更し、前記主記憶装置に格納される前記第１の乱数データを、乱数データと異なる命令に変更し、前記試験規約に従わない第２の乱数データを生成し、前記第２の乱数データを、前記主記憶装置に格納される前記分岐命令の分岐先の位置に格納する、ことを特徴とする請求項１６に記載の試験プログラム生成装置。
【請求項１８】
前記第１及び第２の乱数データの少なくとも１つは、命令コードを含むことを特徴とする請求項１６又は１７に記載の試験プログラム生成装置。
【請求項１９】
請求項９に記載の試験プログラムを生成する試験プログラム生成プログラムであって、
分岐が成立する分岐命令を生成する手順と、
前記分岐命令を、主記憶装置に格納する手順と、
試験規約に従わない第１の乱数データを生成する手順と、
前記第１の乱数データを、前記主記憶装置において前記分岐命令の直後の位置に格納する手順と、
命令を生成する手順と、
前記命令を、前記主記憶装置において前記分岐命令の分岐先の位置に格納する手順と、
を演算処理装置に実行させることを特徴とする試験プログラム生成プログラム。
【請求項２０】
前記主記憶装置に格納される前記分岐が成立する分岐命令を、分岐が不成立になる分岐命令に変更する手順と、
前記主記憶装置に格納される前記乱数データを、乱数データと異なる命令に変更する手順と、
前記試験規約に従わない第２の乱数データを生成する手順と、
前記第２の乱数データを、前記主記憶装置に格納される前記分岐命令の分岐先の位置に格納する手順と、を前記演算処理装置にさらに実行させることを特徴とする請求項１９に記載の試験プログラム生成プログラム。
【請求項２１】
前記第１及び第２の乱数データの少なくとも１つは、命令コードを含むことを特徴とする請求項１９又は２０に記載の試験プログラム生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラムに関する。
【背景技術】
【０００２】
演算処理装置の試験方法として、試験対象である演算処理装置に試験プログラムを実行させて、実行結果の妥当性を判断する方法がある。実行結果の妥当性判断は、例えば、試験対象の演算処理装置に試験プログラムを実行させた結果と試験プログラムの期待値とを比較することにより行われる。試験には、例えば、設計された演算処理装置の論理回路が設計仕様の通りに設計されているか否かを確認する論理シミュレーション試験と、製造された実機の演算処理装置が動作仕様の通りに動作するか否かを確認する実機動作試験とがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−３１２１６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
演算処理装置の試験において、無制限にメモリの全記憶領域へのアクセスを可能にすると、試験領域を超えたメモリの不特定な領域に試験結果が書き込まれてしまい、試験が不可能となる。そのため、試験では、所定の試験領域の範囲に制限されたメモリの記憶領域にアクセスする命令が用いられる。しかしながら、現実の演算処理装置は、試験領域の範囲を超えたメモリの全記憶領域を使用することができるため、試験領域の範囲に制限された試験では、演算処理装置の試験としては十分ではない。そのため、制限された記憶領域のみを指定する命令では、現実の演算処理装置の動作を十分に試験することができない。【０００５】
開示の試験方法は、演算処理装置の投機実行機能を用いて試験領域の範囲等の試験規約に限定されない乱数データを、分岐成功命令の後続命令として投機的に実行し、分岐命令の確定後、投機実行した結果を無効にすることにより、試験領域の範囲を超えた記憶領域に現実にアクセスすることなく、試験規約に限定されずに演算処理装置の動作を試験することを目的とする。
【課題を解決するための手段】
【０００６】
開示の試験方法は、命令を記憶する記憶部、分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部、前記記憶部から命令を読み出す命令読出部、前記命令読出部が読み出した命令を実行する演算部、及び、前記分岐命令の分岐先命令の投機実行に失敗すると前記投機実行した分岐先命令の実行結果を無効化する分岐制御部、を有する演算処理装置を試験する試験方法であって、前記命令読出部が、前記記憶部から分岐命令を読み出すステップと、前記読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、前記分岐制御部が、前記命令読出部に、前記分岐命令の後続命令の読み出しを指示するステップと、前記命令読出部が、前記指示に従って、試験規約に従わない第１の乱数データを、前記分岐命令の後続命令として読み出すステップと、前記演算部が、前記読出分岐命令の分岐先アドレスを計算するとともに、前記第１の乱数データを命令として実行するステップと、前記分岐制御部が、前記計算した分岐先アドレスと、前記第１の乱数データのアドレスとが異なる場合、前記第１の乱数データの実行結果を無効化するステップと、を有する。
【発明の効果】
【０００７】
開示の試験方法は、試験規約に限定されない演算処理装置の動作を投機実行として試験することができる。
【図面の簡単な説明】
【０００８】
【図１】試験規約に従うメモリアクセス命令の一例を示す図である。
【図２】試験規約に従う演算命令の一例を示す図である。
【図３】試験規約に従う分岐命令の一例を示す図である。
【図４】演算処理装置による乱数データの投機実行動作の一例を示す図である。
【図５】情報処理装置の一例を示す図である。
【図６】演算処理部の一例を示す図である。
【図７】分岐履歴部の一例を示す図である。
【図８】命令読出部及び命令実行部の一例を示す図である。
【図９】主記憶装置の一例を示す図である。
【図１０Ａ】命令変換テーブルの一例を示す図である。
【図１０Ｂ】分岐命令のランダム命令又は乱数命令の生成に使用されるＡＮＤ／ＯＲデータの一例を説明する図である。
【図１０Ｃ】メモリアクセス命令のランダム命令又は乱数命令の生成に使用されるＡＮＤ／ＯＲデータの一例を説明する図である。
【図１０Ｄ】加算命令のランダム命令又は乱数命令の生成に使用されるＡＮＤ／ＯＲデータの一例を説明する図である。
【図１１】パラメータテーブルの一例を示す図である。
【図１２】試験プログラム生成装置及び演算処理装置の一例を示す図である。
【図１３】演算処理装置の主記憶装置の一例を示す図である。
【図１４】試験規約に従う試験命令の一例を示す図である。
【図１５】試験規約に従う試験命令の一例を示す図である。
【図１６】試験規約に従う試験命令の一例を示す図である。
【図１７】乱数命令の生成フローの一例を示す図である。
【図１８】分岐命令の一例を示す図である。
【図１９】分岐命令の命令生成方法の一例を示す図である。
【図２０】メモリアクセス命令の一例を示す図である。
【図２１Ａ】試験プログラムの命令実行順序の第１例を示す図である。
【図２１Ｂ】試験プログラムを実行する演算処理装置の処理の第１例を示す図である。
【図２２】試験プログラムの実行により動作した演算処理装置の一例を示す図である。
【図２３Ａ】試験プログラムの命令実行順序の第２例を示す図である。
【図２３Ｂ】試験プログラムを実行する演算処理装置の処理の第２例を示す図である。
【図２４Ａ】試験プログラムの命令実行順序の第３例を示す図である。
【図２４Ｂ】試験プログラムを実行する演算処理装置の処理の第３例を示す図である。
【図２５Ａ】試験プログラムの命令実行順序の第４例を示す図である。
【図２５Ｂ】試験プログラムを実行する演算処理装置の処理の第４例を示す図である。
【図２６】乱数データの命令数の変更例を示す図である。
【図２７】分岐成立命令を含む命令列の一例を示す図である。
【図２８】分岐不成立命令を含む命令列の一例を示す図である。
【図２９Ａ】試験プログラムの生成処理の一例を示す図である。
【図２９Ｂ】試験プログラムの生成処理の一例を示す図である。
【図３０】試験プログラムの実行処理の一例を示す図である。
【図３１】試験プログラムの生成処理と実行処理の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラムを説明する。
【００１０】
〔１〕試験規約による試験の制限
初めに、試験規約による試験の制限について、〔１．１〕メモリアクセス命令、〔１．２〕演算命令、〔１．３〕分岐命令を例に説明する。なお、以下に示す試験プログラムは、例示のために、ＳＰＡＲＣ（Ｓｃａｌａｂｌｅ  Ｐｒｏｃｅｓｓｏｒ  ＡＲＣｈｉｔｅｃｔｕｒｅ）（登録商標）のＶ９（Ｖｅｒｓｉｏｎ  ９）命令仕様で規定される命令セットを用いて説明する。
【００１１】
〔１．１〕メモリアクセス命令
図１は、試験規約に従うメモリアクセス命令の一例を示す図である。図１に示すメモリアクセス命令は、倍精度浮動小数点ストア（ＳＴＤＦ：ＳＴｏｒｅ  Ｄｏｕｂｌｅ  Ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ）命令である。
【００１２】
試験規約に従うメモリアクセス命令、メモリアクセス命令で格納するメモリ域は試験対象メモリ空間を外れないように、生成される。汎用レジスタの中から試験対象メモリ空間を指すＲＥＧ０〜７のメモリアクセス用レジスタが定義され、「ｒｓ（ｒｅｓｉｓｔｅｒ  ｓｏｕｒｃｅ）１」のポインタアドレスと  「ｒｓ２」のディスタンスの値に、定義したメモリアクセス用レジスタを選択するメモリサクセス命令が生成される。つまり、試験メモリ空間を指すレジスタを予め定義し、命令生成時に定義したレジスタをメモリアクセス命令のレジスタ（ｒｓ１，ｒｓ２）に設定することで、試験メモリ空間を外れたメモリアクセス命令の生成を排除する事が出来る。従って、メモリアクセス用レジスタを定義する事で、試験メモリ空間を外れたメモリアクセスはなくなるが、特定のレジスタのみがメモリアクセスに使われることになり、試験命令のメモリアクセス命令においてｒｓ１、ｒｓ２に全ビットパターンを網羅することが出来ない。
【００１３】
〔１．２〕演算命令
図２は、試験規約に従う演算命令の一例を示す図である。図２に示す演算命令は、浮動小数点の乗算及び除算（ＦＭＵＬＤ：Ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ  ＭＵＬｔｉｐｌｙ  ａｎｄ  Ｄｉｖｉｄｅ）命令である。
【００１４】
試験規約に従う演算命令のソースレジスタは、演算例外を発生させないために、入力専用のレジスタを使用する。演算例外には、例えば、ＩＥＥＥ（Ｔｈｅ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ，  Ｉｎｃ．）７５４のオーバーフロー例外処理がある。例えば、浮動小数点演算例外割込みを発生させないと試験規約が規定される場合、演算命令の入力には、演算例外を生じさせない正規化データを持つレジスタしか選択できなくなる。また、演算結果を格納するレジスタは演算を繰返すたびに、データが変化し、最後には浮動小数点演算例外割込みを発生させうるデータになる可能性があるので、演算結果を格納するレジスタも演算命令の入力レジスタには使用できない。浮動小数点演算命令の入力には、入力専用のレジスタであり、且つ正規化されたデータが格納されるレジスタに絞られる。従って、図２に示されるように、入力専用レジスタと出力専用レジスタが規定されるので、例えば、演算入力である「ｒｓ１」と「ｒｓ２」は最上位のビットは常に０であり１に設定できず、同様に演算出力であるｒｄの最上位は１固定であり０の設定はできなくなる。
【００１５】
〔１．３〕分岐命令
図３は、試験規約に従う分岐命令の一例を示す図である。図３に示す試験命令は、相対分岐命令であるコール（ＣＡＬＬ）命令である。
【００１６】
試験規約に従う分岐命令は、正常動作が保証するために、分岐命令の分岐先が試験メモリ空間を超えないように生成される。コール命令は、最大±２ギガバイト離れたアドレス（ｄｉｓｐ３０で指定）に分岐する事が可能であるが、相対分岐の全ビットパターンを網羅するために、４ギガバイト以上の試験命令空間を用意する事は現実的ではない。たとえば、６４ＭＢの命令空間で最大分岐した場合にｄｉｓｐ３０の２４ビットまで使われるが、それ以上のビットに１が立つ事はないように、コール命令は生成される。
【００１７】
以上のように、試験実行結果の妥当性を検証するため、試験規約に従って試験命令は生成される。しかしながら、試験規約に従う試験命令の実行では、演算処理装置が実際に命令を実行する際の動作を検証することはできない。そこで、一実施形態に係る試験方法では、以下に示すように、乱数データを、試験規約に従わない試験命令を投機実行することで、試験規約に限定されない演算処理装置の動作を試験する。
【００１８】
以下、〔２〕試験規約に従わない乱数データの投機実行を説明する。
【００１９】
〔２〕試験規約に従わない乱数データの投機実行
試験プログラムは、分岐命令と、分岐命令の後続に、試験規約に限定されない乱数データとを含む。演算処理装置は、試験規約に限定されない乱数データを、メモリアクセス直前まで投機実行し、分岐確定後、投機実行の実行結果を無効にして、試験規約に限定されない投機実行動作を試験する。
【００２０】
図４は、演算処理装置による試験規約に従わない乱数データの投機実行動作の一例を示す図である。１０は、試験プログラムの例であり、２０は、試験プログラム１０実行時の演算処理装置によるパイプライン処理を示すタイムチャートである。パイプライン処理は、例えば、１つの命令を、命令フェッチ（ＩＦ）、命令デコード（ＲＦ）、命令実行（ＥＸ）、オペランドフェッチ（ＭＥＭ）、ライトバック（ＷＢ）の各ステージに分割して、実行することで、複数の命令を並列実行する処理である。
【００２１】
命令フェッチステージは、命令キャッシュから命令を取り出す。命令デコードステージは、フェッチした命令をデコードする。命令実行ステージは、デコード結果とフェッチしたレジスタの値を基に命令を実行する。例えば、分岐命令を実行する場合は、分岐先アドレスを計算する。オペランドフェッチステージは、命令実行ステージで計算したアドレスに対応するデータをデータキャッシュからロードする。ライトバックステージは、命令実行ステージで計算した結果、又は、オペランドフェッチステージでフェッチしたオペランドをレジスタに格納する。ストア動作の場合はデータキャッシュに書き込む。
【００２２】
試験プログラム１０のアドレス１、２、及び５にある命令は、試験規約に従った命令である。アドレス３にある分岐命令は、後続命令である乱数データを投機実行させ、且つ、分岐予測を失敗させる分岐命令である。アドレス４にある乱数データは、試験規約に従わない乱数データである。なお、試験規約とは、試験実行後、演算処理装置の不具合の検証を明確にするために予め決められた規約である。例えば、試験規約は、（１）演算例外の不発生、（２）入出力レジスタ指定の制限、（３）メインメモリの試験対象記憶領域の制限がある。試験規約の詳細は、「〔２〕試験規約に従わない乱数データ」において後述する。
【００２３】
演算処理装置は、命令１及び２を実行すると、命令フェッチステージからライトバックステージを実行する。命令１及び２は、試験規約に従うデータであるので、ライトバックによって、メインメモリの試験対象記憶領域へのストアが行われる。
【００２４】
試験プログラム１０のアドレス３にある分岐命令を実行すると、分岐命令の分岐先アドレスが確定するのは、２サイクル後の命令実行ステージであるので、ストール回避のために、アドレス４にある乱数データを、分岐先命令と予測して投機実行する。演算処理装置は、命令実行ステージで分岐命令の分岐先アドレスを計算すると、分岐先アドレスがアドレス５であることが確定するので、矢印１５に示すように、分岐先アドレスであるアドレス５にある分岐先命令を実行する。
【００２５】
一方、投機実行した乱数データは、予測が失敗したために、ハンチングで表示するように、乱数データの実行結果をメモリに格納するライトバックを行なうことなく、演算処理装置は、実行結果を無効化する。
【００２６】
試験規約に限定されない乱数データを、分岐命令の後続命令としてメモリアクセス直前まで投機実行し、分岐確定後、投機実行の実行結果は無効にされるので、試験プログラム１０の実行は、試験規約に限定されない動作を投機実行として試験することができる。
【００２７】
以下に、〔３〕情報処理装置、及び、試験プログラムを実行する〔４〕演算処理部、〔５〕試験規約に限定されない乱数データの生成、〔６〕試験規約に従わない乱数データを含む試験プログラムの実行動作、〔７〕試験規約に従わない乱数データを含む命令列、〔８〕試験プログラムの生成処理フロー、〔９〕試験プログラムの実行処理フローについて順に説明する。
【００２８】
〔３〕情報処理装置
図５は、情報処理装置の一例を示す図である。図５に示すように、情報処理装置５００は、演算処理装置５１０、主記憶装置５２０、通信部５３０、外部記憶装置５４０、ドライブ装置５５０、及びＩ／Ｏコントローラ５６０を有する。
【００２９】
図５に示すように、演算処理装置５１０は、演算処理部１００、Ｌ２キャッシュコントローラ５１２、Ｌ２キャッシュメモリ５１４、及びメモリアクセス制御部５１６を有する。また、演算処理装置５１０は、Ｉ／Ｏコントローラ５６０を介して、通信部５３０、外部記憶装置５４０、及びドライブ装置５５０に接続する。
【００３０】
演算処理装置５１０は、主記憶装置５２０に記憶されたプログラムを実行することで、主記憶装置５２０からデータをロードし、ロードしたデータを演算して、主記憶装置５２０に演算結果をストアする装置である。演算処理装置５１０は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００３１】
メモリアクセス制御部５１６は、主記憶装置５２０からＬ２キャッシュメモリ５１４へのデータのロード、Ｌ２キャッシュコントローラ５１２から主記憶装置５２０へのデータのストア等を行うユニットである。
【００３２】
Ｌ２キャッシュメモリ５１４は、主記憶装置５２０が記憶するデータの一部を保持する。また、Ｌ２キャッシュメモリ５１４は、演算処理部１００が有するＬ１キャッシュメモリ（Ｌ１  Ｃａｃｈｅ  Ｍｅｍｏｒｙ）１１０が保持するデータを包含する。
【００３３】
Ｌ２キャッシュコントローラ５１２は、演算処理部１００からのアクセス頻度が高いデータをＬ２キャッシュメモリ５１４に格納し、アクセス頻度が低いデータをＬ２キャッシュメモリ５１４から主記憶装置５２０に追い出すように動作する。
【００３４】
演算処理部１００は、例えばプロセッサコアであり、上記した演算処理装置５１０の演算機能を有する。演算処理部１００の詳細は、図６〜図８を用いて後述する。なお、図５に示される演算処理部の個数は、１個であるが、この個数に制限されない。演算処理装置５１０が複数の演算処理部を有する場合、１つの演算処理部がマスターとして動作し、試験プログラムを実行するとともに、スレーブとしての他の演算処理部に、試験プログラムを分担して実行させるように動作する。このようなマスターの動作は、試験プログラム内に命令列として記述され、その命令列を実行することで実現してもよい。
【００３５】
Ｉ／Ｏコントローラ５６０は、演算処理装置５１０と、他のユニットとの接続を制御する入出力制御装置である。Ｉ／Ｏコントローラ５６０は、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などの規格に従って動作する。
【００３６】
主記憶装置５２０は、データやプログラムを記憶する装置である。演算処理装置５１０は、Ｉ／Ｏコントローラ５６０を介することなく、主記憶装置５２０にアクセスすることができる。主記憶装置５２０は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００３７】
外部記憶装置５４０は、主記憶装置５２０に格納されるプログラム及びデータを記憶する不揮発性の記憶装置である。外部記憶装置５４０は、磁気ディスクを用いたディスクアレイ、又は、フラッシュメモリを用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。
【００３８】
通信装置５３０は、通信経路としてのネットワーク１１００と接続し、ネットワーク１１００に接続された他の情報処理装置と、情報処理装置５００との間で、データを送受信する。通信装置５３０は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）である。
【００３９】
ドライブ装置５５０は、例えば、フロッピー（登録商標）ディスクやＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの記憶媒体５９０を読み書きする装置である。ドライブ装置５５０は、記憶媒体５９０を回転させるモータや記憶媒体５９０上でデータを読み書きするヘッド等を含む。なお、記憶媒体５９０は、プログラムを格納することができる。例えば、記憶媒体５９０は、後述の試験プログラム生成プログラム９１０、試験プログラム９２０を格納することができる。ドライブ装置５５０は、ドライブ装置５５０にセットされた記憶媒体５９０からプログラムを読み出す。演算処理装置５１０は、ドライブ装置５５０により読み出されたプログラムを、主記憶装置５２０又は２次記憶装置５４０に格納する。
【００４０】
〔４〕演算処理部
次に、図６〜図８を参照して、演算処理部１００を説明する。
図６は、演算処理部の一例を示す図である。図６に示すように、演算処理部１００は、Ｌ１キャッシュメモリ１１０、命令読出部１２０、分岐履歴部１３０、命令実行部１４０、パイプライン制御部１９０、及び、レジスタ２５０を有する。
【００４１】
Ｌ１キャッシュメモリ１１０は、命令又はデータを記憶する記憶装置である。Ｌ１キャッシュメモリ１１０は、主記憶装置５２０が記憶するデータの一部を記憶する。Ｌ１キャッシュメモリ１１０は、演算処理部１００の内部に設けられており、主記憶装置５２０より演算処理部１００に近い位置にある。演算処理部１００が、Ｌ１キャッシュメモリ１１０に記憶されているデータにアクセスする場合（以下、「キャッシュヒット」という）、演算処理部１００は短時間で対象データにアクセスすることが出来る。一方、演算処理部１００が、キャッシュメモリに記憶されていないデータにアクセスする場合（以下、「キャッシュミス」という）、Ｌ１キャッシュメモリ１１０の下位階層にあるＬ２キャッシュメモリ５１４や、主記憶装置５２０からデータを読み出すため、対象データへのアクセス時間は長くなる。そのため、キャッシュミスが生じないように、演算処理部１００からのアクセス頻度が高い命令又はデータはＬ１キャッシュメモリ１１０に記憶される。
【００４２】
Ｌ１キャッシュメモリ１１０は、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００４３】
分岐履歴部１３０は、命令実行部１４０から分岐命令の実行履歴として、分岐命令のアドレスと分岐命令の分岐先アドレスとを受け取り、分岐命令のアドレスと分岐命令の分岐先アドレスとを対応付けて記憶する。分岐履歴部１３０は、命令読出部１２０から分岐命令を受け取ると、受け取った分岐命令に関する分岐履歴を記憶していれば、その分岐命令の分岐先アドレスを命令読出部１２０に出力する。
【００４４】
命令読出部１２０は、Ｌ１キャッシュメモリ１１０から命令を読み出す。命令読出部１２０は、Ｌ１キャッシュメモリ１１０から分岐命令を読み出した場合、分岐履歴部１３０に、読み出した分岐命令の実行履歴が分岐履歴部１３０にあるか否かを確認する。読み出した分岐命令の実行履歴が分岐履歴部１３０にある場合、命令読出部１２０は、分岐履歴部１３０から分岐先アドレスを受け取り、Ｌ１キャッシュメモリ１１０から分岐先アドレスに記憶された命令を読み出す。
【００４５】
命令実行部１４０は、命令読出部１２０がＬ１キャッシュメモリ１１０から読み出した命令を受け取ると、命令により特定される処理を、レジスタ２５０に記憶されるデータに対して実行する。命令により特定される処理とは、例えば、浮動小数点演算、整数演算、アドレス生成、分岐命令実行、レジスタ２５０に記憶されるデータをＬ１キャッシュメモリ１１０へストアするストア動作、Ｌ１キャッシュメモリ１１０に記憶されるデータをレジスタ２５０にロードするロード動作である。命令実行部１４０は、浮動小数点演算、整数演算、アドレス生成、分岐命令実行、及びストア又はロード動作を行う実行部を備えて、それらの実行部を用いて上記命令処理を実行する。
【００４６】
パイプライン制御部１９０は、同じユニットで複数の命令をオーバーラップさせて実行するために、演算処理部１００に含まれる各ユニットに関する処理を、図４に示すようにサイクルに同期して実行するように制御する。パイプライン制御部１９０は、分岐命令の分岐先命令の投機実行に失敗すると予測した投機実行の実行結果を無効化し、投機実行が成功した場合には、実行結果をレジスタ２５０、又は、Ｌ１キャッシュメモリ１１０にストアする投機実行制御を行う分岐制御部として動作する。
【００４７】
レジスタ２５０は、データを記憶するメモリの一種である。レジスタ２５０には、命令実行部１４０の計算結果、主記憶装置５２０に読み書きする際のアドレス、演算処理部１００の動作状態などを記憶する。
【００４８】
図７は、分岐履歴部の一例を示す図である。図７に示すように、分岐履歴部１３０は、分岐履歴記憶部１３２、比較回路１３４、リターンアドレス演算部１３６、リターンアドレス記憶部１３７、及び選択回路１３８を有する。
【００４９】
分岐履歴記憶部１３２は、分岐命令格納部１３２−１、分岐先命令格納部１３２−２、及び分岐種類情報格納部１３２−３を有する。分岐履歴記憶部１３２は、例えば、ブランチヒストリテーブル（ＢＨＴ：Ｂｒａｎｃｈ  Ｈｉｓｔｏｒｙ  Ｔａｂｌｅ）であり、命令実行部１４０から分岐命令の実行結果を受け取る。分岐命令の実行結果は、分岐命令のアドレスである分岐命令アドレスと、分岐命令の分岐先アドレスと、分岐種類情報とを含む。分岐命令アドレスとは、主記憶装置５２０における分岐命令の格納場所を特定するアドレスである。分岐先アドレスとは、主記憶装置５２０における分岐命令の分岐先命令の格納場所を示すアドレスである。分岐種類情報とは、例えば、サブルーチンをコールするコール命令、サブルーチンからメインルーチンに戻るリターン命令、及び、それ以外の分岐命令を特定する情報である。
【００５０】
分岐履歴記憶部１３２は、分岐命令アドレスの上位アドレスである分岐命令上位アドレスを分岐命令格納部１３２−１に、分岐先アドレスを分岐先命令格納部１３２−２に、分岐種類情報を分岐種類情報格納部１３２−３にそれぞれ記憶する。各情報を記憶するとき、分岐履歴記憶部１３２は、分岐命令アドレスの下位アドレスである分岐命令下位アドレスをインデックスアドレスとして使用する。
【００５１】
分岐履歴記憶部１３２は、命令読出部１２０から分岐命令アドレスを受け取ると、受け取った分岐命令アドレスの下位アドレスにより分岐命令格納部１３２−１のエントリを索引した結果である分岐命令上位アドレスを比較回路１３４に出力する。
【００５２】
また、分岐履歴記憶部１３２は、命令読出部１２０から分岐命令アドレスを受け取ると、分岐命令の下位アドレスにより特定される分岐先命令格納部１３２−２のエントリから、分岐先アドレスを、選択回路１３８及びリターンアドレス演算部１３６に出力する。
【００５３】
さらに、分岐履歴記憶部１３２は、命令読出部１２０から受け取った分岐命令の下位アドレスにより特定される分岐種類情報格納部１３２−３のエントリにコール命令の分岐種類情報が格納されていた場合は、コールヒット信号をリターンアドレス記憶部１３７に出力する。分岐履歴記憶部１３２は、命令読出部１２０から受け取った分岐命令の下位アドレスにより特定される分岐種類情報格納部１３２−３のエントリにリターン命令の分岐種類情報が格納されていた場合は、リターンヒット信号を選択回路１３８に出力する。
【００５４】
比較回路１３４は、分岐命令格納部１３２−１から出力される分岐命令上位アドレスと、命令読出部１２０から受け取った分岐命令アドレスの分岐命令上位アドレスとが一致すると、キャッシュヒット信号を選択回路１３８に出力する。
【００５５】
リターンアドレス演算部１３６は、分岐履歴記憶部１３２から分岐先アドレスを受け取ると、分岐先アドレスの直後のアドレスを演算して、分岐先アドレスに１つの命令の大きさである４バイトを加えたアドレスをリターンアドレスとしてリターンアドレス記憶部１３７に出力する。このように、分岐先アドレスの直後のアドレスをリターンアドレスとして出力するのは、リターンアドレスは、分岐履歴記憶部１３２に記憶される分岐先アドレスと異なり、コール命令の直後の命令のアドレスとなるからである。
【００５６】
リターンアドレス記憶部１３７は、分岐履歴記憶部１３２からコールヒット信号を受け取ると、リターンアドレス演算部１３６から出力されたリターンアドレスを記憶する。分岐履歴部１３０は、サブルーチンのリターン命令を読み出したときに、リターンアドレス演算部１３６に記憶したリターンアドレスを、選択回路１３８に出力する。
【００５７】
選択回路１３８は、比較回路１３４からキャッシュヒット信号、分岐履歴記憶部１３２から分岐先アドレス及びリターンヒット信号、及び、リターンアドレス記憶部１３７からリターンアドレスを受け取る。選択回路１３８は、例えば、キャッシュヒット信号の信号レベルが「１」、及びリターンヒット信号の信号レベルが「０」のとき、分岐履歴記憶部１３２から受け取った分岐先アドレスを、命令読出部１２０に出力する。また、選択回路１３８は、例えば、キャッシュヒット信号の信号レベルが「１」、及びリターンヒット信号の信号レベルが「１」のとき、リターンアドレス記憶部１３７から受け取ったリターンアドレスを、命令読出部１２０に出力する。
【００５８】
このように、分岐履歴部１３０は、命令読出部１２０から受け取った分岐命令の種類に応じて、分岐先アドレスを命令読出部１２０に出力する。
【００５９】
図８は、命令読出部及び命令実行部の一例を示す図である。図８において、命令実行部１４０は、命令バッファ１５０、命令ワードレジスタ１６０、及び命令デコーダ１７０を有する。命令実行部１４０はさらに、分岐リザベーションステーション（ＲＳＢＲ：Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ｂｒａｎｃｈ）１８２を有する。命令実行部１４０はさらに、浮動小数点演算用リザベーションステーション（ＲＳＦ：Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）１８４を有する。命令実行部１４０はさらに、整数演算用リザベーションステーション（ＲＳＥ：Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ｅｘｅｃｕｔｉｏｎ）１８６を有する。命令実行部１４０はさらに、アドレス生成リザベーションステーション（ＲＳＡ：Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ａｄｄｒｅｓｓ  ｇｅｎｅｒａｔｉｏｎ）１８８を有する。
【００６０】
命令実行部１４０はさらに、浮動小数点演算部２１０、整数演算部２２０、アドレス生成部２３０、及びロードストアキュー２４０を有する。浮動小数点演算部２１０、整数演算部２２０、アドレス生成部２３０、及びロードストアキュー２４０は、以下において「演算部」という。
【００６１】
パイプライン制御部１９０は、演算処理部１００に含まれる各ユニットに関する処理を、パイプラインが有する複数のステージ毎に実行するように制御する。パイプライン制御部１９０が制御する各ユニットとは、命令読出部１２０、命令バッファ１５０、命令ワードレジスタ１６０、命令デコーダ１７０、リザベーションステーション１８２〜１８８、実行部２１０〜２４０、レジスタ２５０等である。
【００６２】
図８では、図６に示すＬ１キャッシュメモリ１１０は、Ｌ１命令キャッシュメモリ１１０Ａ及びＬ１データキャッシュメモリ１１０Ｂを有するセパレートキャッシュメモリとして示される。Ｌ１命令キャッシュメモリ１１０Ａとは、命令を記憶するＬ１キャッシュメモリである。Ｌ１データキャッシュメモリ１１０Ｂとは、データを記憶するＬ１キャッシュメモリである。
【００６３】
図８では、図６に示すレジスタ２５０は、コミットスタックエントリ（ＣＳＥ：Ｃｏｍｍｉｔ  Ｓｔａｃｋ  Ｅｎｔｒｙ）２５０Ａ、制御レジスタ２５０Ｂ、浮動小数点レジスタ２５０Ｃ、及び汎用レジスタ２５０Ｄとして示される。
【００６４】
命令読出部１２０は、Ｌ１命令キャッシュメモリ１１０Ａに格納された命令をフェッチすることにより読み出す。また、命令読出部１２０は、後述するプログラムカウンタで示される主記憶装置５２０上のアドレスで特定される命令を、Ｌ１命令キャッシュメモリ１１０Ａから読み出す。Ｌ１命令キャッシュメモリ１１０Ａから読み出した命令が分岐命令の場合、命令読出部１２０は、分岐履歴部１３０に分岐命令を出力する。分岐履歴部１３０に分岐履歴部１３０から出力された分岐命令の分岐履歴がある場合は、命令読出部１２０は、分岐履歴部１３０から当該分岐命令の分岐先アドレスを受け取る。
【００６５】
命令読出部１２０は、分岐履歴部１３０から受け取った条件分岐先アドレスの命令を、Ｌ１命令キャッシュメモリ１１０Ａから読み出して命令バッファ１５０に出力する。そして、命令読出部１２０は、分岐命令実行完了前に、分岐命令の分岐先命令の実行を命令実行部１４０に開始させることができる。このように、分岐履歴部１３０を用いて、分岐命令の分岐先アドレスが確定する前に、分岐先と予測した命令を実行することを、「投機実行」という。
【００６６】
ＣＳＥ２５０Ａは、命令実行部１４０による命令デコーダ１７０への命令発行から、浮動小数点演算部２１０等の実行完了に至るまでの実行途中の命令を管理するレジスタである。ＣＳＥ２５０Ａは、複数のエントリを有し、命令デコーダ１７０による命令出力の際に、出力命令に対応した識別情報や実行ステータスなどのデータをエントリに記憶する。ＣＳＥ２５０Ａのエントリのデータは、演算部から、命令のコミット（確定）を示す実行完了信号を受け取ることで消去される。パイプライン制御部１９０、分岐予測結果に基づき命令の確定を判別して、投機実行が失敗した場合には、投機実行結果を無効化し、投機実行が成功した場合には、実行結果をメモリに入れる。ＣＳＥ２５０Ａのエントリから実行完了信号により消去されたデータは、レジスタ２５０やＬ１キャッシュメモリ１１０等に記憶され、他の命令実行に利用される。一方、投機実行の失敗等で、パイプライン制御部１９０によって無効にされた命令は、ＣＳＥ２５０Ａのエントリや、リザベーションステーション等の資源から消去されるとともに、レジスタ２５０やＬ１キャッシュメモリ１１０等には記憶されず、他の命令実行にも利用されない。
【００６７】
制御レジスタ２５０Ｂは、例えば、使用される仮想アドレスの属するアドレス空間を一意に指定するアドレス空間識別子（ＡＳＩ：Ａｄｄｒｅｓｓ  Ｓｐａｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を格納するレジスタや、次に実行する命令が格納されている主記憶装置５２０のアドレスを指定するプログラムカウンタである。
【００６８】
浮動小数点レジスタ２５０Ｃは、浮動小数点演算部２１０の実行結果を格納するレジスタである。汎用レジスタ２５０Ｄは、整数演算部２２０の実行結果を格納するレジスタである。
【００６９】
命令バッファ１５０は、命令読出部１２０が出力する命令を一時的に格納するバッファである。命令バッファ１５０は、例えば、浮動小数点演算部２１０、整数演算部２２０、アドレス生成部２３０等による実行演算が停止した場合でも、命令読出部１２０が出力する命令を格納することができる。
【００７０】
命令ワードレジスタ１６０は、命令読出部１２０が命令バッファ１５０に格納される命令のうち、同時に実行される複数の命令を、同じタイミングで格納する。例えば、命令ワードレジスタ１６０は、４命令を同じタイミングで格納する。
【００７１】
命令デコーダ１７０は、命令ワードレジスタ１６０に格納される複数の命令を、デコードする。命令の一部のビット列は、命令コード（ｏｐｃｏｄｅ：オペコード）と呼ばれ、命令の種別を示す。その他の部分はオペランドを特定するフィールドである。オペランドとは、被演算数であり命令コードにより特定される演算の対象となる値や変数を示す。オペランドは、例えば、演算対象となる入力値を記憶するレジスタのアドレスであり、演算結果を記憶するレジスタのアドレスである。
命令デコーダ１７０は、デコードした命令コードに対応するリザベーションステーションの何れかに、デコードした命令を出力する。
【００７２】
リザベーションステーションは、各演算部に出力された命令のデコード結果を記憶するとともに、記憶した命令のデコード結果及びオペランドを演算部等に所定のタイミングで投入するバッファ回路であり、複数のエントリを有する。各エントリは、命令デコーダ１７０から出力された命令のデコード結果と、命令で指定されるレジスタのアドレスから出力されるオペランドとを格納する。パイプライン制御部１９０は、リザベーションステーションにおいてエントリに命令のデコード結果とオペランドとが全て格納され、且つ、演算部が実行可能になると、対応付けられる実行部にオペランドを出力する。
【００７３】
ＲＳＦ１８４は、浮動小数点演算部２１０に対応するリザベーションステーションである。ＲＳＥ１８６は、整数演算部２２０に対応するリザベーションステーションである。ＲＳＡ１８８は、アドレス生成部２３０に対応するリザベーションステーションである。
【００７４】
ＲＳＢＲ１８２は、分岐命令のデコード結果に含まれる命令識別情報と、分岐命令の分岐を制御する条件コード（Ｃｏｎｄｉｔｉｏｎ  Ｃｏｄｅ）を生成する命令や投機実行を行った命令の命令識別情報とを関係付けて記憶する複数のエントリを有するリザベーションステーションである。パイプライン制御部１９０は、分岐命令の分岐先アドレスと、投機実行した命令のアドレスとを、一致しているかどうかを比較する。分岐命令の分岐先アドレスと、投機実行した命令のアドレスとが一致した場合（以下、「投機実行の成功」という）、ＣＳＥ２５０Ａ内における分岐命令のエントリ、及び分岐先命令のエントリは、コミットで完了する。一方、分岐命令の分岐先アドレスと、投機実行した命令のアドレスとが一致しない場合（以下、「投機実行の失敗」という）、ＣＳＥ２５０Ａ内における分岐命令のエントリはコミットで完了するが、投機実行した分岐先命令のエントリは、キャンセルされる。その後、分岐命令直後の命令が、ＣＳＥ２５０Ａに格納されて、分岐命令直後の命令が、演算部により実行される。
【００７５】
なお、投機実行が失敗すると、パイプライン制御部１９０が、投機実行の実行結果として分岐命令の分岐先アドレスを命令読出部１２０に出力することにより、命令読出部１２０は、正しい分岐先アドレスから命令を読み出すことができ、分岐命令の分岐先の命令が実行される。
【００７６】
整数演算部２２０は、命令コードに従って、整数に対する加減論理演算、シフト演算、乗除算等を実行する。浮動小数点演算部は、命令コードに従って、浮動小数点に対する加算、減算、乗算、除算、平方根演算等を実行する。アドレス生成部２３０は、ロード命令やストア命令などのメモリアクセスに関する命令コードに従って、メモリアクセスするアドレスを生成する。
【００７７】
ロードストアキュー２４０は、メモリアクセス命令及びアドレスを格納する複数のエントリを有する。ロードストアキュー２４０の複数のエントリは、命令デコーダ１７０の命令の実行順序に従って確保される。ロードストアキュー２４０は、命令デコーダ１７０から命令の実行順序に従ってメモリアクセス命令に関するデコード情報を受け取る。ロードストアキュー２４０は、アドレス生成部２３０から、命令デコーダから出力されたメモリアクセス命令に対応するメモリアクセス命令のアドレスを受け取ると、命令デコーダからの命令実行順序に従って、Ｌ１データキャッシュメモリ１１０Ｂにアクセスする。
【００７８】
次に、図９〜図１３を参照して、主記憶装置５２０に記憶される情報について説明する。
【００７９】
図９は、主記憶装置の一例を示す図である。図９に示される主記憶装置５２０は、試験プログラム生成プログラム９１０、試験プログラム９２０、命令変換テーブル９３０、パラメータテーブル９４０、試験結果９５０、及び試験ログデータ９６０を記憶する。
【００８０】
試験プログラム生成プログラム９１０は、情報処理装置５００等のコンピュータに、試験プログラム９２０を生成させるプログラムである。例えば、図５に示す情報処理装置５００の演算処理装置５１０が、試験プログラム生成プログラム９１０を実行することで、情報処理装置５００は、試験プログラム９２０を生成する試験プログラム生成装置として動作する。
【００８１】
試験プログラム９２０は、演算処理装置の動作を試験させるプログラムである。例えば、図５に示す情報処理装置５００の演算処理装置５１０が、試験プログラム９２０を実行することで、情報処理装置５００は、試験プログラム制御装置として動作する。なお、試験プログラムの詳細は、後述する。
【００８２】
図１０は、命令変換テーブルの一例を示す図である。図１０に示す命令変換テーブルは、命令コード毎にとＡＮＤデータとＯＲデータとの対応情報が記録されている。命令変換テーブル１１２のＡＮＤデータ又はＯＲデータを乱数に掛け合わせることにより、試験命令が生成される。試験プログラムには、ランダム命令、及び乱数データが含まれる。ランダム命令とは、所定の命令コードに合致するとともに、試験規約に従って生成される命令である。乱数データとは、乱数のみから構成されるものと、試験規約に従わないものの、乱数データの一部を命令コードに置き換えた乱数命令がある。命令変換テーブルは、ランダム命令と、乱数命令の生成に使用される。乱数命令生成の例は、図１６、図１８、及び図２０を用いて、後述する。
【００８３】
図１０Ａは、命令変換テーブルの一例を示す図である。図１０Ａに示す命令変換テーブル９３０は、命令コードの列９３１、第１ＡＮＤデータの列９３２、第２ＡＮＤデータの列９３３、第１ＯＲデータの列９３４、第２ＯＲデータの列９３５を有する。命令変換テーブル９３０の各行には、命令コードと、命令コードに対応付けられる第１ＡＮＤデータ、第２ＡＮＤデータ、第１ＯＲデータ、第２ＯＲデータが入力される。
【００８４】
第１ＡＮＤデータ、及び、第１ＯＲデータは、ランダム命令を生成するために使用される。ランダム命令を生成するために、第１ＡＮＤデータは、命令コード部分と試験規約の制限を受けるビット部分を「０」にするために、ＡＮＤ演算で使用されるデータである。第１ＯＲデータは、ＡＮＤ演算後に、命令コードを生成するために、命令コードに対応する試験規約の制限を受けるビット部分の少なくとも一部を「１」にするために、ＯＲ演算で使用されるデータである。
【００８５】
第２ＡＮＤデータ、及び、第２ＯＲデータは、乱数命令を生成するために使用される。乱数命令を生成するために、第２ＡＮＤデータは、命令コードに対応するビット部分を「０」にするために、ＡＮＤ演算で使用されるデータである。第２ＯＲデータは、ＡＮＤ演算後に、命令コードを生成するために、命令コードに対応するビット部分の少なくとも一部を「１」にするために、ＯＲ演算で使用されるデータである。
【００８６】
図１０Ｂは、分岐命令のランダム命令又は乱数命令の生成に使用されるＡＮＤ／ＯＲデータの一例を説明する図である。７００は、分岐命令の命令フォーマットを示す。命令コードは、３１及び３０ビットが「０」であり、２４〜２２ビットが「０１０」である。また、試験規約として、分岐先アドレスを示す「ｄｉｓｐ２２」の上位４ビットを「０」にすると規定されているとする。
【００８７】
したがって、分岐命令用第１ＡＮＤデータ７０１は、分岐命令の命令コード部分と分岐命令の試験規約部分が「０」のデータとなる。また、分岐命令用第２ＡＮＤデータ７０２は、分岐命令の命令コード部分のみが「０」のデータとなる。分岐命令用第１ＯＲデータ及び第２ＯＲデータは、命令フォーマットの２３ビットだけを「１」にするデータであるので、両者とも同じフォーマットになる。
【００８８】
図１０Ｃは、メモリアクセス命令のランダム命令又は乱数命令の生成に使用されるＡＮＤ／ＯＲデータの一例を説明する図である。７２０は、メモリアクセス命令の命令フォーマットを示す。命令コードは、３１及び３０ビットが「１」であり、２４ビットが「０」、２１ビットが「０」である。また、試験規約として、「ｒｓ１」の上位３ビットが「０」であり、ｒｓ２の上位２ビットが「０」であるものとする。
【００８９】
したがって、メモリアクセス用第１ＡＮＤデータ７２１は、メモリアクセス命令の命令コード部分とメモリアクセス命令の試験規約部分が「０」のデータとなる。また、メモリアクセス用第２ＡＮＤデータ７２２は、メモリアクセス命令の命令コード部分のみが「０」のデータとなる。メモリアクセス命令用第１ＯＲデータ及び第２ＯＲデータは、命令フォーマットの３１及び３０ビットだけを「１」にするデータであるので、両者とも同じフォーマットになる。
【００９０】
図１０Ｄは、加算命令のランダム命令又は乱数命令の生成に使用されるＡＮＤ／ＯＲデータの一例を説明する図である。７４０は、演算命令の１つである加算命令の命令フォーマットを示す。命令コードは、３１及び３０ビットが「１０」であり、２４ビットが「０」、２１〜１９ビットが「０」である。また、試験規約として、「ｒｓ１」の上位３ビットが「０」であり、ｒｓ２の上位２ビットが「０」であるものとする。
【００９１】
したがって、加算命令用第１ＡＮＤデータ７４１は、加算命令の命令コード部分と分岐命令の試験規約部分が「０」のデータとなる。また、加算命令用第２ＡＮＤデータ７４２は、加算命令の命令コード部分のみが「０」のデータとなる。加算命令用第１ＯＲデータ及び第２ＯＲデータは、命令フォーマットの３１ビットだけを「１」にするデータであるので、両者とも同じフォーマットになる。
【００９２】
試験プログラムにおいて、演算部が実行可能な乱数データの数を増やすことで、１つの試験プログラムを実行するときの演算部の動作率を向上させることが出来る。なお、乱数データは、第２ＡＮＤデータ及び第２ＯＲデータを用いて書き換えられなくても、所定の命令フォーマットに合致する場合がある。そのため、試験プログラム生成プログラムは、当該プログラムを実行するコンピュータに、全ての乱数データをＡＮＤ及びＯＲ演算で書き換えなくてもよい。なお、試験プログラムにおいて、乱数データと、乱数データをＡＮＤ及びＯＲ演算で所定の命令フォーマットに変更した乱数命令との例は、図２６及び図２８を用いて、後述する。
【００９３】
また、図１０に示される第１ＡＮＤデータ、第２ＡＮＤデータ、第１ＯＲデータ、及び、第２ＯＲデータの入力値は、後述のランダム命令生成、及び乱数命令生成の説明において参照される。
【００９４】
図１１は、パラメータテーブルの一例を示す図である。パラメータテーブル９４０は、試験プログラムの実行処理フロー時に利用されるパラメータが設定されるテーブルである。パラメータテーブル９４０に含まれるパラメータは、演算処理装置による試験命令生成時に、演算処理装置により参照される。
【００９５】
図１１に示すパラメータテーブル９４０は、パラメータ名称の列９４１、パラメータ値の列９４２を有する。パラメータ名称の列９４１には、シード値Ｓ、命令生成数Ｎ、トラップ命令発生間隔Ｃ、乱数データ生成間隔Ｒ、乱数データの命令数Ｄがあり、パラメータ値列９４２には、パラメータ名称に対応するパラメータ値が入力される。パラメータテーブル９４０の各行には、パラメータ名称に対応するパラメータが入力される。
【００９６】
シード値Ｓは、乱数データ生成に使用されるシード値である。図１１に示されるように、シード値Ｓは、例えば、「１」である。命令生成数Ｎは、生成される命令数である。図１１に示されるように、命令生成数Ｎは、例えば、「１０００００」である。
【００９７】
トラップ命令発生間隔Ｃとは、トラップ命令と、そのトラップ命令の後続に生成されるトラップ命令との間の命令数を示す。なお、トラップ命令とは、試験命令実行後のレジスタ２５０の値、及び、主記憶装置５２０に書き込まれた試験結果９５０を、試験ログデータ９６０として主記憶装置５２０に出力する命令である。例えば、トラップ命令発生間隔Ｃが「５１２」の場合、試験プログラム生成装置は、生成したトラップ命令の５１２命令後に、さらにトラップ命令を生成する。
【００９８】
乱数データ生成間隔Ｒとは、試験プログラム生成装置が、試験命令列における乱数データと乱数データとの間の間隔である。例えば、試験プログラム生成装置は、前回乱数データを生成したときの命令カウンタが示す命令カウント数を記憶し、現在の命令カウンタが、記憶した命令カウント数から乱数データ生成間隔を加算した命令カウント数までカウントアップしたとき、試験プログラム生成装置は、再度、乱数データを生成する。図１１に示されるように、乱数データ生成間隔Ｒは、例えば、「２５６」である。
【００９９】
Ｄは、乱数データの数である。なお、乱数データの数Ｄは、初期値であり、試験プログラム生成装置は、乱数データ数を１〜６４の範囲で変更して、生成する乱数データの数を変更することができる。図１１に示されるように、乱数データＤは、例えば、「３」であり、乱数データである３つの命令文が生成されることを示している。
【０１００】
図１１に示されるパラメータ値は、後述の試験プログラム生成装置による試験プログラム生成処理の説明において参照される。
【０１０１】
図９に示す試験結果９５０は、演算処理装置５１０が試験プログラム９２０を実行した結果、演算処理装置５１０が、主記憶装置５２０に出力する試験プログラムの実行結果である。なお、試験結果９５０が格納される主記憶装置５２０内の領域を「試験領域」という。言い換えれば、「試験領域」は、試験命令列によって実行結果を出力する対象となる記憶領域である。図示されるように、試験プログラム９２０の実行によって、他の主記憶装置に格納されるデータの変更を生じないように、試験領域は、主記憶装置内の所定の記憶領域に制限されている。
【０１０２】
図９に示す試験ログデータ９６０は、演算処理装置がトラップ命令を実行することで生成される試験命令実行後のレジスタ２５０に格納されるデータ、及び、試験ログデータ９６０の記憶領域に移動された試験結果をいう。試験プログラム９２０は、演算処理装置５１０によって複数回実行される場合がある。その場合は、演算処理装置５１０がトラップ命令を複数回実行することで、試験結果は、試験プログラムの試験回数とともに、それぞれ異なる記憶領域に格納される。また、異なる命令を含む試験プログラムが実行される場合、演算処理装置５１０がトラップ命令を実行することによって、試験プログラムの実行結果を一意に識別する識別情報とともに、記憶領域に格納される。
【０１０３】
上記のように、情報処理装置５００は、主記憶装置５２０に記憶される試験プログラム生成プログラム９１０を実行することで「試験プログラム生成装置」として動作する。また、情報処理装置５００は、主記憶装置５２０に記憶される試験プログラム９２０を実行することで、自らの演算処理装置５１０について試験を行う「試験制御装置」として動作する。このように、１つの情報処理装置５００が、「試験プログラム生成装置」及び「試験制御装置」として動作することが出来る。
【０１０４】
次に、図１２及び図１３を参照して、「試験プログラム生成装置」及び「試験制御装置」がそれぞれ異なる情報処理装置となる場合について説明する。
【０１０５】
図１２は、試験プログラム生成装置及び試験制御装置の一例を示す図である。図１２に示す情報処理装置５００Ａ、５００Ｂは、それぞれ図５に示す情報処理装置と同じ構成を有してもよい。情報処理装置５００Ａは、試験プログラム生成プログラム９１０を実行して、試験プログラム９２０を生成するとともに、生成した試験プログラム９２０を、ネットワーク１１００を介して情報処理装置５００Ｂに送信する試験プログラム生成装置として動作する。また、情報処理装置５００Ｂは、試験プログラム９２０を実行することで、情報処理装置５００Ｂの演算処理装置５１０を試験する試験制御装置として動作する。このように、試験プログラムの生成と、試験プログラムの実施は、２つの情報処理装置５００でおこなってもよい。
【０１０６】
図１３は、試験制御装置の主記憶装置の一例を示す図である。図１３に示す情報処理装置５００Ｂの主記憶装置５２０Ｂは、情報処理装置５００Ａから試験プログラム９２０を受信すると、主記憶装置５２０Ｂに格納し、試験プログラム９２０を演算処理装置で実行することで、主記憶装置５２０Ｂに試験結果９５０、及び試験ログデータ９６０を格納する。図１２及び図１３を用いて説明したように、試験プログラムの生成と、試験プログラムの実施は、２つの情報処理装置を用いて行うこともできる。
【０１０７】
〔５〕試験規約に限定されない乱数データの生成
以下に、図１４〜図２０を参照して、試験プログラムの生成方法、及び試験プログラムを実行することによる試験制御方法について説明する。
【０１０８】
〔１〕試験規約で説明したように、試験実行結果の妥当性を検証するため、試験規約に従って試験命令は生成される。しかしながら、試験規約に従う試験命令の実行では、演算処理装置が実際に命令を実行する際の動作を検証することはできないので、試験規約に限定されない乱数データが生成される。
【０１０９】
試験プログラムは、乱数のみからなる乱数データのみならず、乱数データの一部を命令コードに置き換えた命令を含んでもよい。なお、以下において乱数の一部を命令コードに置き換え、且つ試験規約に制限されない命令を乱数命令という。これは、試験規約に制限されない命令が、乱数のみからなる乱数データである場合、命令デコーダ１７０が、乱数データを、演算処理装置５１０の命令セットに従って、命令コードとオペランドに分割することができなくなることを回避するためである。
【０１１０】
図１４は、乱数命令の生成フローの一例を示す図である。まず、試験プログラム生成プログラムを実行する演算処理装置は、シード値をもとに乱数データを生成する（Ｓ１２０１）。なお、シード値は、パラメータテーブル９４０に含まれているので、演算処理装置が主記憶装置のパラメータテーブル９４０からシード値を取得して、乱数データを生成する。演算処理装置は、命令コードをランダムに選定する（Ｓ１２０２）。演算処理装置は、選定した命令コードを、命令変換テーブル９３０を検索し、選定した命令コードに対応するＡＮＤデータとＯＲデータを取得する（Ｓ１２０３）。演算処理装置は、ステップＳ１２０１で生成した乱数データに対して、ステップＳ１２０３で取得したＡＮＤデータをＡＮＤ条件で掛け合わせる演算を実行する（Ｓ１２０４）。演算処理装置は、ステップＳ１２０４のＡＮＤ条件で掛け合わされた乱数データに対して、ステップＳ１２０３で取得したＯＲデータでＯＲ条件で掛け合わされる演算を実行して（Ｓ１２０５）、乱数命令を生成して、乱数命令の生成フローを終了する。
【０１１１】
〔５．１〕試験規約に従わない分岐命令の生成方法
図１５は、分岐命令の一例を示す図である。図１５に示す命令フォーマット７００は、ＳＰＡＲＣ（登録商標）の命令セットとしての分岐命令の命令フォーマットである。図１５に示す表７１０は、分岐命令と分岐条件の一例を示す表である。
【０１１２】
分岐命令の命令フォーマット７００は、３１〜３０ビットの「ｏｐ」と、２４〜２２ビットの「ｏｐ２」で分岐命令のオペコードを特定する。２９ビットの「ａ」は、命令無効（ａｎｎｕｌ）ビットであり、２８〜２５ビットの「ｃｏｎｄ」は、具体的な分岐命令を特定するビットである。「ｃｏｎｄ」は例えば、無効ビットが「１」のとき、分岐が成立する場合に分岐命令の直後の命令を実行し、分岐が成立しない場合には分岐命令の直後の命令を実行せず、当該分岐命令の直後の命令を無効にすることを示す。２１〜０ビットの「ｄｉｓｐ２２」は、分岐先アドレスを特定する。
【０１１３】
表７１０の行番号１は、分岐成立命令の１つである「ＢＡ（ｂｒａｎｃｈ  ａｌｗａｙｓ）」を説明する。「ｃｏｎｄ」の値が「１０００」である場合は、オペコードが「ＢＡ」であることを示す。「ＢＡ」は、条件コードを参照せずに無条件で、分岐先アドレスに分岐することを指示する無条件分岐命令である。「ＢＡ」は、後述する図２１Ａ〜図２６に示す分岐成立命令の一例である。
【０１１４】
表７１０の行番号２は、分岐不成立命令の１つである「ＢＮ（ｂｒａｎｃｈ  ｎｅｖｅｒ）」を説明する。「００００」の「ｃｏｎｄ」は、「ＢＮ」を示す。「ＢＮ」は、条件コードを参照せずに無条件で、分岐アドレスに分岐しないことを指示する非分岐命令である。「ＢＮ」は、後述する図２１Ａ〜図２６に示す分岐不成立命令の一例である。
【０１１５】
行番号３〜８は、条件付分岐命令の一例である。表７１０の行番号３は、「ＢＮＥ（ｂｒａｎｃｈ  ｏｎ  ｎｏｔ  Ｅｑｕａｌ）」を説明する。「１００１」の「ｃｏｎｄ」は、「ＢＮＥ」を示す。「ＢＮＥ」は、「条件コードが、演算結果がゼロでないことを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
【０１１６】
表７１０の行番号４は、「ＢＥ（ｂｒａｎｃｈ  ｏｎ  Ｅｑｕａｌ）」を説明する。「０００１」の「ｃｏｎｄ」は、「ＢＥ」を示す。「ＢＥ」は、「条件コードが、演算結果がゼロであることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
【０１１７】
表７１０の行番号５は、「ＢＧＵ（Ｂｒａｎｃｈ  ｏｎ  Ｇｒｅａｔｅｒ  Ｕｎｓｉｇｎｅｄ）」を説明する。「１１００」の「ｃｏｎｄ」は、「ＢＧＵ」を示す。「ＢＧＵ」は、「条件コードが、演算結果に桁上げがなく、又は、演算結果がゼロではないことを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
【０１１８】
表７１０の行番号６は、「ＢＬＥＵ（Ｂｒａｎｃｈ  ｏｎ  Ｌｅｓｓ  ｏｒ  Ｅｑｕａｌ  Ｕｎｓｉｇｎｅｄ）」を説明する。「０１００」の「ｃｏｎｄ」は、「ＢＬＥＵ」を示す。「ＢＬＥＵ」は、「条件コードが、演算結果に桁上げがあり、又は、演算結果がゼロであることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
【０１１９】
表７１０の行番号７は、「ＢＣＳ（Ｂｒａｎｃｈ  ｏｎ  Ｃａｒｒｙ  Ｓｅｔ）」を説明する。「１１００」の「ｃｏｎｄ」は、「ＢＣＳ」を示す。「ＢＣＳ」は、「条件コードが、演算結果に桁上げがあることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
【０１２０】
表７１０の行番号８は、「ＢＶＣ（Ｂｒａｎｃｈ  ｏｎ  Ｏｖｅｒｆｌｏｗ  Ｃｌｅａｒ）」を説明する。「１１００」の「ｃｏｎｄ」は、「ＢＣＳ」を示す。「ＢＣＳ」は、「条件コードが、演算結果に桁あふれがあることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
【０１２１】
分岐命令の３１〜３０ビットの「ｏｐ」及び２４〜２２ビットの「ｏｐ２」を、分岐命令に対応するＡＮＤ演算とＯＲ演算で特定し、２９ビットの「ａ」と、２８〜２５ビットの「ｃｏｎｄ」とを乱数で特定することで、乱数により様々な分岐命令が生成される。
【０１２２】
図１６は、分岐命令の命令生成方法の一例を示す図である。図１６を用いて、図１４に示す命令生成のフローに従って、乱数データから分岐命令を生成するフローを説明する。図１６に示すステップＳ１２１１では、演算処理装置により乱数データ７１２が生成される。乱数データ７１２は、「０ｘ８ａｂｅｃ８６０」である。
【０１２３】
試験制御装置は、生成する命令コードを選定する（Ｓ１２１２）。図１６の例では、選定される命令は、分岐命令である。演算処理装置は、選定した命令コードに対応するＡＮＤデータとＯＲデータとを、命令変換テーブル９３０から取得する（Ｓ１２１３）。ＡＮＤデータは、命令コードに対応するビット列を「０」にするデータである。よって、ＡＮＤデータは、命令フォーマットにおいて３１〜３０ビットと、２４〜２２ビットが「０」であり、他のビットが「１」である「３ｅ３ｆｆｆｆｆ」である。ＯＲデータは、命令コードに対応するビット列を、ステップＳ１２０２で選定された命令にするデータである。よって、ＯＲデータは、命令フォーマットにおいて３１〜３０ビットが「００」であり、２４〜２２ビットが「０１０」であり、他のビットが「０」である「０ｘ００７０００００」である。
【０１２４】
試験制御装置は、乱数データ７１２である「０ｘ８ａｂｅｃ８６０」にＡＮＤデータである「０ｘ３ｅ３ｆｆｆｆｆ」を掛け合わせる（Ｓ１２１４）。掛け合わせて生成したデータ７１４は、「０ｘ０ａ３ｅｃ８６０」である。
【０１２５】
試験制御装置は、ＡＮＤ演算後のデータ「０ｘ０ａ３ｅｃ８６０」にＯＲデータである「０ｘ００７０００００」を掛け合わせる（Ｓ１２１５）。掛け合わせて生成したデータ７１６は、「０ｘ０ａｂｅｃ８６０」である。
【０１２６】
このようにして、試験制御装置は、命令デコーダ１７０が分岐命令と解読可能な命令コードを生成する。
【０１２７】
〔５．２〕試験規約に従わないメモリアクセス命令の生成方法
図１７は、メモリアクセス命令の一例を示す図である。図１７に示す命令フォーマット７２０は、ＳＰＡＲＣ（登録商標）の命令セットとしてのメモリアクセス命令の１つである整数ロード命令の命令フォーマットである。図１７に示す表７３０は、整数ロード命令と実行動作の一例を示す表である。
【０１２８】
整数ロード命令の命令フォーマット７２０では、３１〜３０ビットの「ｏｐ」と、２４、２１ビットの「０」は、整数ロード命令を特定する。３１〜３０ビットの「ｏｐ」と、２４〜１９ビットの「ｏｐ３」は、整数ロード命令のオペコードを特定する。１８〜１４ビットのフィールドにある「ｒｓ１」、及び、４〜０ビットのフィールドにある「ｒｓ２」は、入力レジスタのアドレスを示す。２９〜２５ビットのフィールドにある「ｒｄ」は、出力レジスタのアドレスを示す。
【０１２９】
表７３０の行番号１は、整数ロード命令のオペコードである「ＬＤＳＢ（ＬｏａＤ  Ｓｉｇｎｅｄ  Ｂｙｔｅ）」を説明する。「００１００１」の「ｏｐ３」は、「ＬＤＳＢ」を示す。「ＬＤＳＢ」は、符号付きの１バイトをロードするという実行動作を特定する。
【０１３０】
表７３０の行番号２は、整数ロード命令のオペコードである「ＬＤＳＨ（ＬｏａＤ  Ｓｉｇｎｅｄ  Ｈａｌｆｗｏｒｄ）」を説明する。「００１０１０」の「ｏｐ３」は、「ＬＤＳＨ」を示す。「ＬＤＳＨ」は、符号付きの２バイトをロードするという実行動作を特定する。
【０１３１】
表７３０の行番号３は、整数ロード命令のオペコードである「ＬＤＵＢ（ＬｏａＤ  Ｕｎｓｉｇｎｅｄ  Ｂｙｔｅ）」を説明する。「０００００１」の「ｏｐ３」は、「ＬＤＵＢ」を示す。「ＬＤＵＢ」は、符号無しの１バイトをロードするという実行動作を特定する。
【０１３２】
表７３０の行番号４は、整数ロード命令のオペコードである「ＬＤＵＨ（ＬｏａＤ  Ｕｎｓｉｇｎｅｄ  Ｈａｌｆｗｏｒｄ）」を説明する。「００００１０」の「ｏｐ３」は、「ＬＤＵＨ」を示す。「ＬＤＵＨ」は、符号無しの２バイトをロードするという実行動作を特定する。
【０１３３】
「ｏｐ」と、「ｏｐ３」のうちの２４、２１ビットを、整数ロード命令に対応するＡＮＤ演算とＯＲ演算で特定し、「ｏｐ３」の２３、２２、２０、１９ビットを乱数で特定することで、様々な整数ロード命令を生成することができる。
【０１３４】
図１８は、メモリアクセス命令の命令生成方法の一例を示す図である。図１８を用いて、図１４に示す命令生成のフローに従って、乱数データから整数ロード命令を生成するフローを説明する。図１８に示すステップＳ１２２１では、演算処理装置により乱数データ７３２が生成される。乱数データ７３２は、「０ｘ８ａｂｅｃ８６０」である。
【０１３５】
試験制御装置は、生成する命令コードを選定する（Ｓ１２２２）。選定される命令は、図１８の例では整数ロード命令である。演算処理装置は、選定した命令コードに対応するＡＮＤデータとＯＲデータとを、命令変換テーブル９３０から取得する（Ｓ１２２３）。取得されるデータは、図１０Ａに示す命令変換テーブルの行番号６０５に示す命令コードに対応するＡＮＤデータ「０ｘ３ｅｄｆｆｆｆｆ」及びＯＲデータ「０ｘｃ０００００００」である。
【０１３６】
ＡＮＤデータは、命令コードに対応するビット列を「０」にするデータである。よって、取得されたＡＮＤデータ「０ｘ３ｅ３ｆｆｆｆｆ」は、３１〜３０ビットと、２４及び２１ビットが「０」である。
【０１３７】
ＯＲデータは、命令コードに対応するビット列を、ステップＳ１２１２で選定された命令にするデータである。よって、取得されたＯＲデータ「０ｘｃ０００００００」は、命令フォーマットにおいて３１〜３０ビットが「１０」であり、２４及び２１ビットが「０」である。
【０１３８】
試験制御装置は、乱数データ７３２である「０ｘ８ａｂｅｃ８６０」にＡＮＤデータである「０ｘ３ｅ３ｆｆｆｆｆ」を掛け合わせる（Ｓ１２２４）。掛け合わせて生成したデータ７３４は、「０ｘ０ａ９ｅｃ８６０」である。
【０１３９】
試験制御装置は、ＡＮＤ演算後のデータ「０ｘ０ａ９ｅｃ８６０」にＯＲデータである「０ｘｃ０００００００」を掛け合わせる（Ｓ１２２５）。掛け合わせて生成したデータ７３６は、「０ｘｃａ９ｅｃ８６０」である。
【０１４０】
このようにして、試験制御装置は、命令デコーダ１７０が整数ロード命令と解読可能な命令コードを生成する。
【０１４１】
〔５．２〕試験規約に従わない演算命令の生成方法
図１９は、演算命令の一例を示す図である。図１９に示す命令フォーマット７４０は、ＳＰＡＲＣ（登録商標）の命令セットとしての演算命令の１つである加算命令の命令フォーマットである。図１９に示す表７５０は、加算命令と実行動作の一例を示す表である。
【０１４２】
加算命令の命令フォーマット７４０では、３１〜３０ビットの「ｏｐ」と、２４、２１〜１９ビットの「０」は、加算命令を特定する。３１〜３０ビットの「ｏｐ」と、２４〜１９ビットの「ｏｐ３」は、加算命令のオペコードを特定する。１８〜１４ビットのフィールドにある「ｒｓ１」、及び、４〜０ビットのフィールドにある「ｒｓ２」は、入力レジスタのアドレスを示す。２９〜２５ビットのフィールドにある「ｒｄ」は、出力レジスタのアドレスを示す。
【０１４３】
表７５０の行番号１は、加算命令のオペコードである「ＡＤＤ」を説明する。「００００００」の「ｏｐ３」は、「ＡＤＤ」を示す。「ＡＤＤ」は、入力レジスタの「ｒｓ１」にある値に「ｒｓ２」にある値を加算するという実行動作を特定する。
【０１４４】
表７５０の行番号２は、加算命令のオペコードである「ＡＤＤｃｃ（Ａｄｄ  ａｎｄ  ｍｏｄｉｆｙ  ｉｃｃ（整数条件コード：ｉｎｔｅｇｅｒ  ｃｏｎｄｉｔｉｏｎ  ｃｏｄｅ））」を説明する。「０１００００」の「ｏｐ３」は、「ＡＤＤｃｃ」を示す。「ＡＤＤｃｃ」は、加算と、当該加算結果に基づいた整数条件コードの書き換えという実行動作を特定する。整数条件コードとは、プロセッサステートレジスタにあり、ビットで特定される条件コードである。条件コードは、条件付分岐命令で使用される。
【０１４５】
表７５０の行番号３は、加算命令のオペコードである「ＡＤＤＸ」を説明する。「０００００１」の「ｏｐ３」は、「ＡＤＤＸ」を示す。「ＡＤＤＸ」は、桁上げ付き加算という実行動作を特定する。
【０１４６】
表７５０の行番号４は、加算命令のオペコードである「ＬＤＵＨ（ＬｏａＤ  Ｕｎｓｉｇｎｅｄ  Ｈａｌｆｗｏｒｄ）」を説明する。「００００１０」の「ｏｐ３」は、「ＬＤＵＨ」を示す。「ＬＤＵＨ」は、符号無しの２バイトをロードするという実行動作を特定する。
【０１４７】
「ｏｐ」と、「ｏｐ３」のうちの２４、２１〜１９ビットを、加算命令に対応するＡＮＤ演算とＯＲ演算で特定し、「ｏｐ３」の２２〜１９ビットを乱数で特定することで、様々な加算命令を生成することができる。
【０１４８】
図２０は、演算命令の命令生成方法の一例を示す図である。図２０を用いて、図１４に示す命令生成のフローに従って、乱数データから加算命令を生成するフローを説明する。図２０に示すステップＳ１２３１では、演算処理装置により乱数データ７５２が生成される。乱数データ７５２は、「０ｘ８ａｂｅｃ８６０」である。
【０１４９】
試験制御装置は、生成する命令コードを選定する（Ｓ１２３２）。選定される命令は、図２５の例では加算命令である。演算処理装置は、選定した命令コードに対応するＡＮＤデータとＯＲデータとを、命令変換テーブル９３０から取得する（Ｓ１２３３）。取得されるデータは、図１０Ａに示す命令変換テーブルの行番号６０５に示す命令コード「加算命令」に対応するＡＮＤデータ「０ｘ３ｅｃ７ｆｆｆｆ」及びＯＲデータ「０ｘ７０００００００」である。
【０１５０】
ＡＮＤデータは、命令コードに対応するビット列を「０」にするデータである。よって、取得されたＡＮＤデータ「０ｘ３ｅｃ７ｆｆｆｆ」は、３１〜３０ビットと、２１〜１９ビットが「０」である。
【０１５１】
ＯＲデータは、命令コードに対応するビット列を、ステップＳ１２３２で選定された命令にするデータである。よって、取得されたＯＲデータ「０ｘ７０００００００」は、命令フォーマットにおいて３１〜３０ビットが「１０」であり、２１〜１９ビットが「０」である。
【０１５２】
試験制御装置は、乱数データ７５２である「０ｘ８ａｂｅｃ８６０」にＡＮＤデータである「０ｘ３ｅｃ７ｆｆｆｆ」を掛け合わせる（Ｓ１２３４）。掛け合わせて生成したデータ７５４は、「０ｘ０ａ８６ｃ８６０」である。
【０１５３】
試験制御装置は、ＡＮＤ演算後のデータ「０ｘ８ａｂｅｃ８６０」にＯＲデータである「０ｘ７０００００００」を掛け合わせる（Ｓ１２３５）。掛け合わせて生成したデータ７５６は、「０ｘ８ａ６ｃｃ８６０」である。
【０１５４】
このようにして、試験制御装置は、命令デコーダ１７０が加算命令と解読可能な命令コードを生成する。
【０１５５】
〔６〕試験規約に従わない乱数データを含む試験プログラムの実行動作
図２１Ａは、試験プログラムの命令実行順序の第１例を示す図である。試験プログラムＰ１０００は、アドレスａ１にある分岐成立命令、アドレスａ１の先にあるランダム命令、アドレスａ１の直後にある乱数データＰ１０１０、アドレスｘ１にあるランダム命令を含む。ランダム命令は、上述した試験規約に従って生成された命令である。アドレスａ１にある分岐成立命令は、分岐が成立する命令である。分岐成立命令としては、例えば、条件コードを参照せずに無条件に分岐が成立する無条件分岐成立命令、又は、条件付分岐命令の成立命令がある。分岐成立命令として、無条件分岐成立命令が生成される場合は、当該無条件分岐成立命令の先に生成される条件コード設定命令とは関係なく分岐が成立する。一方、分岐成立命令として、条件付分岐命令が生成される場合、条件付分岐命令の先に生成される条件コード設定命令は、条件付分岐命令の分岐条件が成立するように、生成される。
【０１５６】
アドレスａ１の直後にある乱数データＰ１０１０は、乱数によって生成されたデータである。乱数データは、乱数で生成したデータであるため、上記した試験規約には制限されない。
【０１５７】
図２１Ｂは、試験プログラムを実行する演算処理装置の処理の第１例を示す図である。以下、図２１Ａ及び図２１Ｂを参照して、演算処理装置による乱数データの実行処理を説明する。
【０１５８】
試験プログラムＰ１０００の実行に際し、分岐履歴部１３０には、分岐命令の実行履歴がないものとする。まず、命令読出部１２０が、Ｌ１命令キャッシュメモリ１１０Ａに格納される命令を読出して、アドレスａ１にある分岐成立命令を読み出す（Ｓ１００１）。読み出した命令が分岐命令であるので、命令読出部１２０は分岐履歴部１３０から分岐命令の分岐先アドレスを参照するが、分岐履歴がないので、命令読出部１２０は、分岐成立命令の直後にある乱数データＰ１０１０を読み出す（Ｓ１００２）。なお、Ｓ１００２における処理は、図２１Ａの矢印Ｐ１００１によって説明されている。このように、命令読出部１２０は、分岐履歴部１３０に分岐履歴がない場合、分岐命令直後の命令を投機実行する。
【０１５９】
整数演算部２２０は、分岐成立命令の分岐先アドレスを計算するとともに、乱数データＰ１０１０を実行する（Ｓ１００３）。パイプライン制御部１９０は、分岐先アドレスと、分岐成立命令の直後にある乱数データＰ１０１０のアドレスを比較し、それらのアドレスが異なるため、乱数データＰ１０１０の実行を無効にする（Ｓ１００４）。演算部２１０等は、分岐先アドレスにあるランダム命令を実行する（Ｓ１００５）。なお、Ｓ１００５における処理は、図２１Ａの矢印Ｐ１００２によって説明されている。ＲＳＢＲ１８２は、分岐履歴を分岐履歴部１３０に出力する（Ｓ１００６）。パイプライン制御部１９０は、レジスタに格納された値を主記憶装置に出力する（Ｓ１００７）。
【０１６０】
乱数データは、試験規約に制限されないため、実行部が乱数データを実行すると、試験空間以外のメモリにアクセスし、又は、例外処理が生じて、演算処理装置による試験実行に障害が生じるなどの問題がある。しかしながら、ステップＳ１００４における投機実行失敗による実行結果の無効化は、ＣＳＥ２５０Ａのエントリや、リザベーションステーション等の資源から消去されるとともに、レジスタ２５０やＬ１キャッシュメモリ１１０等には記憶されず、他の命令実行にも利用されない。そのため、乱数データの実行は、試験空間以外のメモリにアクセスし、又は、例外処理が生じる等の状態を生じない。そして、乱数データの実行は、レジスタに入力されるアドレスに制限を生じず、入力データや、使用されるレジスタアドレスに制限を生じない。
【０１６１】
図２２は、試験プログラムの実行により動作した演算処理装置の一例を示す図である。図２２では、浮動小数点演算部２１０、整数演算部２２０、アドレス生成部２３０、ロードストアキュー２４０、浮動小数点レジスタ２５０Ｃ、汎用レジスタ２５０Ｄは、ハッチングで表示される。これらのハッチング表示された構成は、例外処理を許可し、レジスタアドレスの使用を制限しないことで動作検証されたものである。例えば、浮動小数点演算部２１０等の実行部は、例外処理が可能になり、また、試験メモリ領域に限定されないレジスタアドレスを用いることで、試験規約に従う試験では検証できない実行動作の検証がなされる。
【０１６２】
図２３Ａは、試験プログラムの命令実行処理の第２例を示す図である。第２例は、演算処理装置による図２１Ａで実行した試験プログラムの２度目の実行例である。図２３Ａに示す試験プログラムＰ１０００は、図２１Ａに示す試験プログラムＰ１０００と同じであるので、説明を省略する。
【０１６３】
図２３Ｂは、試験プログラムを実行する演算処理装置の処理の第２例を示す図である。以下、図２３Ａ及び図２３Ｂを参照して、演算処理装置による乱数データの実行処理を説明する。
【０１６４】
試験プログラムＰ１０００の実行に際し、分岐履歴部１３０には、図２１Ｂで示した試験プログラムの実行により、アドレスａ１にある分岐命令の分岐先アドレスは、アドレスｘ１であることが記憶されている。命令読出部１２０が、Ｌ１命令キャッシュメモリ１１０Ａに格納されている命令を読出して、アドレスａ１にある分岐成立命令を読み出す（Ｓ１０１１）。読み出した命令が分岐命令であるので、命令読出部１２０は分岐履歴部１３０から分岐命令の分岐先アドレスを参照する。分岐命令のアドレスａ１から分岐先のアドレスｘ１への分岐履歴があるので、命令読出部１２０は、分岐先のアドレスｘ１の命令を読み出す（Ｓ１０１２）。演算部は、分岐先のアドレスｘ１にあるランダム命令を実行する（Ｓ１０１３）。なお、Ｓ１０１３における処理は、図２３Ａの矢印Ｐ１０１３によって説明されている。パイプライン制御部１９０は、レジスタに格納された値を主記憶装置に出力する（Ｓ１０１４）。
【０１６５】
図２３Ａ及び図２３Ｂを用いて説明した処理では、乱数データＰ１０１０の実行はされない。しかしながら、乱数データＰ１０１０実行以外の処理は、図２１Ａ及び図２１Ｂを用いて説明した第１回目の試験プログラムＰ１０００の実行と同じである。そのため、ステップＳ１００６で主記憶装置に記憶されたレジスタの値と、ステップＳ１０１４で主記憶装置に記憶されたレジスタの値との比較により、両値の間に差異が無ければ、演算処理装置の動作が正常であると判断できる。
【０１６６】
乱数データの実行は、投機実行結果の無効化によりレジスタや主記憶装置に反映されないため、乱数データ実行の影響を調査することは簡単ではない。しかしながら、上記のように、試験プログラムＰ１０００というプログラムを２回実行するだけで、図２２に示すように、実行部やレジスタ等が乱数データを実行することで正常に動作するか否かを判断することが出来る。
【０１６７】
［５．２．２  分岐命令の分岐先に乱数データを含む試験プログラム］
以下に、分岐命令の分岐先に乱数データを含む試験プログラムを実行する例を説明する。
【０１６８】
図２４Ａは、試験プログラムの命令実行順序の第３例を示す図である。図２４Ｂは、試験プログラムを実行する演算処理装置の処理の第３例を示す図である。試験プログラムＰ１１００Ａは、アドレスａ２、ａ３にある分岐成立命令、アドレスａ２の前にあるランダム命令、アドレスａ２の直後にあるランダム命令Ｐ１１３０、アドレスｘ２にあるランダム命令Ｐ１１３１、アドレスｘ３にあるランダム命令を含む。アドレスａ２にある分岐成立命令の分岐先は、矢印Ｐ１１２２に示すようにアドレスｘ２である。アドレスａ３にある分岐成立命令の分岐先は、矢印Ｐ１１２３に示すように、アドレスｘ３である。試験プログラムＰ１１００Ａは、乱数データを含まないが、図２４Ａ及び図２４Ｂに示す例では、分岐命令を実行することで、分岐履歴が残される。なお、Ｐ１１３０は、図２４Ａに示すように投機実行されてもその実行結果は無効化されるので、図２３Ａに示す乱数データＰ１０１０であってもよい。
【０１６９】
試験プログラムＰ１１００Ａの実行に際し、初期の状態では、分岐履歴部１３０には、分岐命令の実行履歴がないものとする。まず、命令読出部１２０が、Ｌ１命令キャッシュメモリ１１０Ａに格納される命令を読出して、アドレスａ２にある分岐成立命令を読み出す（Ｓ１１０１）。分岐履歴部１３０には分岐履歴がないので、命令読出部１２０は、分岐成立命令の直後にあるランダム命令Ｐ１１３０を読み出す（Ｓ１１０２）。なお、Ｓ１１０２における処理は、図２４Ａの矢印Ｐ１１２１によって説明されている。
【０１７０】
演算部が分岐成立命令の直後にあるランダム命令Ｐ１１３０を実行した後で、整数演算部２２０は、アドレスａ２にある分岐成立命令の分岐先アドレスを計算する（Ｓ１１０３）。パイプライン制御部１９０は、分岐先アドレスと、分岐成立命令の直後にある乱数データのアドレスが異なるため、ランダム命令Ｐ１１３０の実行を無効化する（Ｓ１１０４）。演算部は、アドレスａ２にある分岐成立命令の分岐先のアドレスｘ２にあるランダム命令Ｐ１１３１を実行する（Ｓ１１０５）。なお、Ｓ１１０５における処理は、図２４Ａの矢印Ｐ１１２４によって説明されている。ＲＳＢＲ１８２は、分岐履歴を分岐履歴部１３０に出力する（Ｓ１１０５）。
【０１７１】
続いて、命令読出部１２０が、アドレスａ３にある分岐成立命令を読み出す（Ｓ１１０６）。分岐履歴部１３０にはアドレスａ３の分岐命令に関する分岐履歴がないので、命令読出部１２０は、アドレスａ３の分岐成立命令の直後にあるランダム命令Ｐ１１３１を読み出す（Ｓ１１０７）。なお、Ｓ１１０７における処理は、図２４Ａの矢印Ｐ１１２４によって説明されている。
【０１７２】
演算部が分岐成立命令の直後にあるランダム命令Ｐ１１３１を実行した後で、整数演算部２２０は、アドレスａ３にある分岐成立命令の分岐先アドレスを計算する（Ｓ１１０８）。パイプライン制御部１９０は、計算した分岐命令の分岐先アドレスと、アドレスａ３にある分岐成立命令の直後にある乱数データのアドレスとを比較する。この例では両者が異なるため、パイプライン制御部１９０は、ランダム命令の実行を無効化する（Ｓ１１０９）。演算部は、ａ３の分岐成立命令の分岐先である分岐先のアドレスｘ３にあるランダム命令Ｐ１１３１を実行する（Ｓ１１１０）。なお、Ｓ１１１０における処理は、図２４Ａの矢印Ｐ１１２２によって説明されている。ＲＳＢＲ１８２は、分岐履歴を分岐履歴部１３０に出力する（Ｓ１１１１）。最後に、パイプライン制御部１９０は、レジスタに格納された値を主記憶装置に出力する（Ｓ１１１２）。
【０１７３】
なお、上記のように、ランダム命令Ｐ１１３０の実行は無効化されている。また、ランダム命令Ｐ１１３１は、ステップＳ１１０５とステップＳ１１０８で２回実行されているが、ステップＳ１１０９で２回目の実行は無効化されているので、試験プログラムＰ１１００Ａの実行では、ランダム命令Ｐ１１３１は１回のみ実行されている。よって、試験プログラムＰ１１００Ａの実行において、ランダム命令Ｐ１１３０、Ｐ１１３１は、ランダム命令Ｐ１１３１が１回実行されたことになる。
【０１７４】
図２５Ａは、試験プログラムの命令実行順序の第４例を示す図である。図２５Ａに示す試験プログラムＰ１１００Ｂは、図２４Ａに示す試験プログラム１１００Ａの一部を変更した試験プログラムである。試験プログラム１１００Ｂは、アドレスａ２にある分岐成立命令を、分岐不成立命令に変更した。なお、アドレスａ２の命令が分岐不成立命令になるので、図２５Ａに示す試験プログラムＰ１１００Ｂでは、アドレスａ２にある分岐命令の直後にある命令が乱数データであれば、乱数データはランダム命令に変更される。なお、分岐不成立命令とは、分岐が成立しない命令である。分岐不成立命令は、例えば、条件コードを参照せずに無条件に分岐が成立しない無条件分岐不成立命令、又は、条件付分岐命令の不成立命令がある。分岐不成立命令として、無条件分岐不成立命令が生成される場合は、当該無条件分岐不成立命令の先に生成される条件コード設定命令とは関係なく分岐が不成立になるため、条件コード設定命令の生成には制限がない。一方、分岐不成立命令として、条件付分岐命令が生成される場合、条件付分岐命令の先に生成される条件コード設定命令は、条件付分岐命令の分岐条件が不成立になるように、生成される。
【０１７５】
図２５Ｂは、試験プログラムを実行する演算処理装置の処理の第４例を示す図である。以下、図２５Ａ及び図２５Ｂを参照して、演算処理装置による乱数データの実行処理を説明する。
【０１７６】
試験プログラムＰ１１００Ｂの実行に際し、分岐履歴部１３０には、アドレスａ２からアドレスｘ２への分岐履歴と、アドレスａ３からアドレスｘ３への分岐履歴がある。まず、命令読出部１２０が、Ｌ１命令キャッシュメモリ１１０Ａに格納される命令を読出して、アドレスａ２にある分岐不成立命令を読み出す（Ｓ１１５１）。分岐履歴部１３０にはアドレスａ２からアドレスｘ２への分岐履歴があるので、命令読出部１２０は、アドレスｘ２にある乱数データＰ１１３２を読み出す（Ｓ１１５２）。なお、Ｓ１１５２における処理は、図２５Ａの矢印Ｐ１１２２によって説明されている。
【０１７７】
演算部は分岐不成立命令の分岐先アドレスにある乱数データＰ１１３２を実行した後で、整数演算部２２０は、アドレスａ２にある分岐不成立命令の分岐先アドレスを計算する（Ｓ１１５３）。パイプライン制御部１９０は、計算した分岐先のアドレスｘ２と、分岐不成立命令の直後にあるランダム命令のアドレスが異なるため、乱数データＰ１１３２の実行を無効にする（Ｓ１１５４）。演算部は、分岐不成立命令の直後にあるランダム命令Ｐ１１３０を実行する（Ｓ１１５５）。なお、Ｓ１１５５における処理は、図２５Ａの矢印Ｐ１１２４によって説明されている。
【０１７８】
Ｐ１１３０の実行後、命令読出部１２０が、アドレスａ３にある分岐成立命令を読み出す（Ｓ１１５６）。分岐履歴部１３０にはアドレスａ３の分岐命令に関する分岐履歴があるので、命令読出部１２０は、分岐成立命令の分岐先にあるアドレスｘ３のランダム命令を読み出す（Ｓ１１５７）。なお、Ｓ１１５７における処理は、図２５Ａの矢印Ｐ１１２３によって説明されている。
【０１７９】
演算部がアドレスｘ３にあるランダム命令Ｐ１１３１を実行した後で、整数演算部２２０は、アドレスａ３にある分岐成立命令の分岐先アドレスを計算する（Ｓ１１５８）。ＲＲＢＲ１８２は、分岐履歴を分岐履歴部１３０に出力する（Ｓ１１５９）。最後に、パイプライン制御部１９０は、レジスタに格納された値を主記憶装置に出力する（Ｓ１１６０）。
【０１８０】
図２４Ａ及び図２４Ｂを用いて説明した処理では、乱数データの実行はされない。しかしながら、乱数データ実行以外のランダム命令実行の処理は、ランダム命令Ｐ１１３１を１回実行するという点で、図２５Ａ及び図２５Ｂを用いて説明した試験プログラムＰ１１００Ｂの実行と同様である。そのため、試験プログラムＰ１１００Ａの実行に係る試験空間に格納された値と、試験プログラムＰ１１００Ｂの実行に係る試験空間に格納された値との比較により、両値の間に差異が無ければ、演算処理装置の動作が正常であると判断できる。また、ステップＳ１１１２で主記憶装置に記憶されたレジスタの値と、ステップＳ１１６０で主記憶装置に記憶されたレジスタの値との比較により、両値の間に差異が無ければ、演算処理装置の動作が正常であると判断できる。
【０１８１】
このように、試験プログラム内の分岐命令の種類の変更や、プログラムの配置を変更することで、分岐命令の分岐先に乱数データを含む試験プログラムを実行する試験が可能になる。そのため、試験プログラムにおいて乱数データの配置位置は、分岐命令の直後に限定されず、分岐先でもあってもよい。
【０１８２】
図２６は、乱数データの命令数の変更例を示す図である。図２６では、試験プログラムＰ１０００に示す乱数データＰ１０１０の命令数の数を変更して繰り返して実行する場合を示す。図２６に示す試験プログラムＰ１０００Ａの乱数データＰ１０１０Ａは、図２１Ａに示した乱数データＰ１０１０に対して乱数データの数を３つ増やした乱数データである。図２６に示す試験プログラムＰ１０００Ｂの乱数データＰ１０１０Ｂは、図２１Ａに示した乱数データＰ１０１０Ａに対して乱数データの数を９つ増やした乱数データである。図２６に示す＜１回目＞の試験プログラムＰ１０００の実行は、図２１Ａに示すＰ１０００の実行と同じである。
【０１８３】
試験プログラムＰ１０００Ａは、図２３Ａ及び図２３Ｂに示した試験プログラムＰ１０００を２回実行した後で、分岐履歴部１３０のアドレスａ１の分岐成立命令の実行履歴を消去した後、実行される。つまり、３回目の試験プログラム実行試験に用いる試験プログラムである。
【０１８４】
試験プログラムＰ１０００Ｂは、試験プログラムＰ１０００Ａを実行した後で、分岐履歴部１３０のアドレスａ１の分岐成立命令の実行履歴を消去した後、実行される。つまり、４回目の試験プログラム実行試験である。
【０１８５】
なお、図２６には示していないが、図２４Ａに示す試験プログラムＰ１１００Ａを実行した後、図２５Ａに示す乱数データＰ１１３２の命令数を、前回実行した命令数から増加するように変更することで、分岐命令の分岐先に乱数データがある試験プログラムでも、乱数データの命令数の異なる試験ができる。
【０１８６】
このように、乱数データの命令数に変化を与えることにより、投機実行で実行される命令列の中に、実際には実行されない乱数データと実際に実行されるランダム命令の混在する割合に変化が出る。このことにより、投機実行失敗によってキャンセルされる乱数データの命令数が変わることで、命令の実行タイミングに変化を持たせた試験を行うことが出来る。
【０１８７】
〔７〕試験規約に従わない乱数データを含む命令列
〔７．１〕分岐成立命令を含む命令列
図２７は、分岐成立命令を含む命令列の一例を示す図である。８００は、分岐成立命令を含む試験命令列の一例である。試験命令列８００は、図２１Ａに示す試験プログラムＰ１０００を、ＳＰＡＲＣ（登録商標）の命令仕様で規定される命令文で示した例である。
【０１８８】
試験命令列８００は、アドレス８０１で特定される命令データ８０２を有する。図２７に示される、デコード命令８０３は、命令データ８０２をデコードした命令である。分岐成立命令８１０は、図２１Ａのアドレスａ１にある分岐成立命令に相当する。乱数データ命令列８１１は、図２１Ａに示す乱数データＰ１０１０に相当する。乱数データ命令列８１１のうち、書き換えられた乱数データ８１２は、図２０〜図２５で説明した乱数データの命令部をＡＮＤ演算及びＯＲ演算して書き換えた乱数データの例である。
【０１８９】
分岐成立命令８１０は、「０ｘ１００４ａｃ」のアドレスにある、アドレス「０ｘ１００４ｅｃ」を分岐先アドレスとする無条件分岐成立命令「ＢＡ，ａ  ０ｘ１００４ｅｃ」である。
【０１９０】
乱数データ命令列８１１は、「１５」命令数生成されている。乱数データ命令列８１１のうち７命令が、命令デコーダが解読可能なようにＡＮＤ演算及びＯＲ演算により所定の命令に書き換えられている。図２７に示す例では、書き換えられて生成した命令は、全て分岐命令であり、図２０に示す表７１０を用いて説明した「ＢＣＳ」、「ＢＥ」、「ＢＧＵ」、「ＢＮＥ」、「ＢＬＥＵ」、「ＢＶＣ」である。
【０１９１】
なお、図２７の８１３は、デコード不可能な命令を示す。命令デコーダ１７０は、デコードできない命令は、「ｕｎｋｎｏｗｎ」というデータに変更する。「ｕｎｋｎｏｗｎ」は、「ＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）」命令と同じであり、実行部は、「ｕｎｋｎｏｗｎ」を読みとると何の命令も実行しない。ただし、「ｕｎｋｎｏｗｎ」命令が生成されると、プログラムカウンタや、命令数カウンタは、１つインクリメントされる。このように、命令デコーダが解読可能なようにＡＮＤ演算及びＯＲ演算により所定の命令に書き換えることで、「ｕｎｋｎｏｗｎ」のデータが減ることがわかる。
【０１９２】
〔７．２〕分岐不成立命令を含む命令列
図２８は、分岐不成立命令を含む命令列の一例を示す図である。８５０は、分岐成立命令を含む試験命令列の一例である。試験命令列８５０は、図２５Ａに示す試験プログラムＰ１１００Ｂを、ＳＰＡＲＣ（登録商標）の命令仕様で規定される命令文で示した例である。
【０１９３】
試験命令列８５０は、アドレス８５１で特定される命令データ８５２を有する。図２８に示される、デコード命令８５３は、命令データ８５２をデコードした命令である。分岐不成立命令８６０は、図２５Ａのアドレスａ２にある分岐不成立命令に相当する。ランダム命令列８６１は、図２５Ａのランダム命令Ｐ１１３１に相当する。分岐成立命令８６２は、図２５Ａのアドレスａ３にある分岐成立命令に相当する。分岐不成立命令８６０は、無条件分岐不成立命令「ＢＥ」である。
【０１９４】
乱数データ命令列８６３のうち、書き換えられた乱数データ８６４は、図２０〜図２５で説明した乱数データの命令部をＡＮＤ演算及びＯＲ演算して書き換えた乱数データの例である。
【０１９５】
乱数データ命令は、「５」命令数生成されている。乱数データ命令列８６３のうち５命令が、命令デコーダが解読可能なようにＡＮＤ演算及びＯＲ演算により所定の命令に書き換えられている。図２８に示す例では、書き換えられて生成した命令は、全て分岐命令であり、「ＢＬ」、「ＢＶＣ」、「ＢＣＳ」、「ＢＡ」である。
【０１９６】
次に、図２９〜図３１を参照して、試験プログラムの生成処理と、試験プログラムの実行処理を説明する。
【０１９７】
〔８〕試験プログラムの生成処理フロー
試験プログラム生成装置は、試験プログラム生成プログラム９１０を実行して、主記憶装置５２０の記憶領域に、試験プログラム９２０を生成する。
【０１９８】
図２９Ａ及び図２９Ｂは、試験プログラムの生成処理の一例を示す図である。試験プログラム生成装置は、パラメータテーブル９４０からパラメータを取得する（Ｓ１３０１）。試験プログラム生成装置は、乱数データを生成する（Ｓ１３０２）。試験プログラム生成装置は、パラメータテーブル９４０のシード値Ｓを用いて乱数データを生成し、試験プログラムを格納する主記憶装置５２０の記憶領域に乱数データを書き込む。試験プログラム生成装置は、命令数カウンタが、トラップ命令を生成する数かどうか判断する（Ｓ１３０３）。命令数カウンタとは、生成された命令数を示す整数データである。命令数カウンタは、図４に示す制御レジスタ２５０Ｂ等のレジスタに格納される。また、命令数カウンタがトラップ命令を発生する数かどうかの判断は、前回生成したトラップ命令からの命令数が、パラメータテーブル９４０のトラップ命令発生間隔Ｃである「５１２」か否かで判断する。
【０１９９】
命令数カウンタがトラップ命令を発生する数である場合（Ｓ１３０３  Ｙｅｓ）、試験プログラム生成装置は、トラップ命令を生成し（Ｓ１３３１）、さらにステップＳ１３３２を実行する。命令数カウンタがトラップ命令を発生する数では無い場合（Ｓ１３０３  Ｎｏ）、試験プログラム生成装置は、命令数カウンタが、乱数データを生成する命令数か否か判断する（Ｓ１３０４）。命令数カウンタが乱数データを生成する命令数かどうかの判断は、前回生成した乱数データの直前にある分岐命令からの命令数が、乱数データ生成間隔Ｒに達しているか否かで判断する。
【０２００】
〔８．１〕ランダム命令の生成
命令数カウンタが乱数データを生成する命令数ではない場合（Ｓ１３０４  Ｎｏ）、試験プログラム生成装置は、命令変換テーブル９３０から任意に生成する命令の命令コードを選択する（Ｓ１３０５）。試験プログラム生成装置は、命令変換テーブル９３０から選択した命令コードに対応するＡＮＤデータとＯＲデータを取得して、取得したＡＮＤデータとＯＲデータで、演算処理装置５１０に書き込まれた乱数データを書き換える（Ｓ１３０６）。ステップＳ１３０５の書き換えによって、図１〜図３を用いて説明したように、試験規約に従うランダム命令が生成される。試験プログラム生成装置は、カウンタを更新する（Ｓ１３０７）。Ｓ１３０７のカウンタ更新処理によって、カウンタに加算する命令数の数は、Ｓ１３０５〜Ｓ１３０６で生成された命令数であり、例えば、「１」である。カウンタを更新すると、試験プログラム生成装置は、ステップＳ１３３２を実行する。
【０２０１】
〔８．２〕分岐成立命令列の生成
命令数カウンタが乱数データを生成する命令カウント数を示す場合（Ｓ１３０４  Ｙｅｓ）、試験プログラム生成装置は、分岐成立の命令列を生成するか否か判断する（Ｓ１３１１）。分岐成立の命令列を生成する場合は、図２１Ａに示す試験プログラムＰ１０００のアドレスａ１にある分岐成立命令、図２４Ａに示す試験プログラムＰ１１００Ａのアドレスａ２、ａ３にある分岐成立命令等がある。
【０２０２】
試験プログラム生成装置が、分岐成立の命令列を生成すると判断する場合（Ｓ１３１１  Ｙｅｓ）、試験プログラム生成装置は、分岐成立命令を生成する（Ｓ１３１２）。生成される分岐成立命令は、例えば、図２７に示す分岐成立命令８１０である。
【０２０３】
試験プログラム生成装置は、主記憶装置５２０に記憶された乱数データから、命令数Ｄの乱数データを選択する（Ｓ１３１３）。ステップＳ１３１３において選択された命令数Ｄの乱数データは、例えば、図２７に示す乱数データ命令列８１１である。
【０２０４】
試験プログラム生成装置は、選択したＤ個の命令文の乱数データを、ＡＮＤ及びＯＲ演算で書き換える（Ｓ１３１４）。ステップＳ１３１４において書き換えられた乱数データは、例えば、図２７に示す書き換えられた乱数データ８１２である。
【０２０５】
試験プログラム生成装置は、命令カウンタを更新する（Ｓ１３１５）。Ｓ１３１５の命令カウンタ更新処理によって、命令カウンタに加算する命令数の数は、Ｓ１３１２及びＳ１３１３で生成された命令数であり、例えば、分岐成立命令の命令数「１」と、乱数データの命令数Ｄの「３」とを加算した数に、さらに１インクリメントした数である。カウンタを更新すると、試験プログラム生成装置は、ステップＳ１３３２を実行する。
【０２０６】
〔８．３〕分岐不成立命令列の生成
命令数カウンタが乱数データを生成する命令数を示す場合（Ｓ１３０４  Ｙｅｓ）、試験プログラム生成装置は、分岐成立の命令列を生成するか否か判断する（Ｓ１３１１）。分岐成立の命令列ではない例、つまり、分岐不成立の命令列の例は、図２５Ａの試験プログラムＰ１１００Ｂのアドレスａ２にある分岐不成立命令である。例えば、図２５Ａの試験プログラムＰ１１００Ｂを生成する場合、試験プログラムＰ１１００Ａが既に試験制御装置によって１度実行された場合である。その場合、試験プログラム生成装置は、試験ログデータ９６０の試験実行回数等を参照し、生成中の試験プログラムが試験プログラムＰ１１００Ａの次に実行される試験プログラムＰ１１００Ｂと判断し、ステップＳ１３１１で分岐不成立命令の生成と判断する。
【０２０７】
試験プログラム生成装置が、分岐不成立の命令列を生成すると判断する場合（Ｓ１３１１  Ｎｏ）、試験プログラム生成装置は、分岐不成立命令を生成する（Ｓ１３２１）。生成される分岐不成立命令は、例えば、図２８に示す分岐不成立命令８６０である。
【０２０８】
試験プログラム生成装置は、命令数Ｄのランダム命令を生成する（Ｓ１３２２）。生成される命令数Ｄのランダム命令は、例えば、図２８に示すランダム命令列８６１である。試験プログラム生成装置は、分岐成立命令を生成する（Ｓ１３２３）。生成される分岐成立命令は、例えば、図２８に示す分岐成立命令８６２である。
【０２０９】
試験プログラム生成装置は、命令数Ｄの乱数命令を選択する（Ｓ１３２４）。ステップＳ１３２４において、選択された命令数Ｄの乱数命令は、例えば、図２８に示す乱数データ命令列８６３である。試験プログラム生成装置は、選択したＤ命令文の乱数データを、ＡＮＤ及びＯＲ演算で書き換える（Ｓ１３２５）。ステップＳ１３２５において書き換えられた乱数データは、例えば、図２８に示す書き換えられた乱数データ８６４である。
【０２１０】
試験プログラム生成装置は、命令カウンタを更新する（Ｓ１３２６）。Ｓ１３２６の命令カウンタ更新処理によって、命令カウンタに加算する命令数の数は、Ｓ１３２１〜Ｓ１３２４で生成された命令数であり、分岐成立命令の命令数１と、ランダム命令の命令数Ｄと、分岐成立命令の命令数１と、乱数データ命令の命令数Ｄとを加算した数に、さらに１インクリメントした数である。命令カウンタを更新すると、試験プログラム生成装置は、ステップＳ１３３２を実行する。
【０２１１】
試験プログラム生成装置が、試験プログラムは、最終命令まで生成されたか判断する（Ｓ１３３２）。ステップＳ１３３２は、試験プログラム生成装置が、カウンタが命令生成数Ｎになったか否かで判断することができる。
【０２１２】
最終命令まで生成されていない場合（Ｓ１３３２  Ｎｏ）、試験プログラム生成装置は、ステップＳ１３０３を再度実行する。最終命令まで生成された場合（Ｓ１３３２  Ｙｅｓ）、試験プログラム生成装置は、試験プログラム生成処理を終了する。
【０２１３】
〔９〕試験プログラムの実行処理フロー
図３０は、試験プログラムの実行処理の一例を示す図である。試験制御装置は、試験プログラム９２０を実行して、試験プログラムの実行処理を開始する。試験制御装置は、初期化処理を実行する（Ｓ１４０１）。初期化処理とは、図１０を用いて説明したように、例えば、汎用レジスタ２５０Ｄに、正規化データを記憶することである。これは、試験プログラム内のランダム命令を実行するためである。
【０２１４】
試験制御装置は、トラップ命令以外の命令を実行する（Ｓ１４０２）。トラップ命令以外の命令実行とは、例えば、図２３Ｂ、図２４Ｂ、図２５Ｂ、図２６に示す試験プログラム実行に相当する。
【０２１５】
試験制御装置は、トラップ命令を実行する（Ｓ１４０３）。トラップ命令を実行すると、試験制御装置は、レジスタ２５０に記憶されるデータを主記憶装置５２０のログ記憶領域に、出力する（Ｓ１４０４）。試験制御装置はさらに、主記憶装置５２０内の試験結果９５０を、主記憶装置内のログ記憶領域に移す（Ｓ１４０５）。試験制御装置は、Ｓ１４０２〜Ｓ１４０５の処理を試験プログラムの最終命令に至るまで実行して、試験プログラムの実行処理を終了する。
【０２１６】
図３１は、試験プログラムの生成処理と実行処理の一例を示す図である。試験プログラム生成装置は、試験プログラムを生成する（Ｓ１３０１〜Ｓ１３３２）。ステップＳ１３０１〜Ｓ１３３２は、図２９Ａ及び図２９Ｂを用いて説明した処理である。試験制御装置は、試験プログラムを実行する（Ｓ１４０１〜Ｓ１４０５）。ステップＳ１４０１〜Ｓ１４０５は、図３０を用いて説明した処理である。試験プログラム生成装置は、シード値Ｅの試験が行われたか否か判断する（Ｓ１５０１）。シード値Ｅとは、最後の乱数生成に使用されるシード値である。シード値Ｅの試験が行われていない場合（Ｓ１５０１  Ｎｏ）、試験プログラム生成装置は、現在のシード値に１を加算し（Ｓ１５０２）、ステップＳ１３０１〜Ｓ１３３２を再度実行する。シード値Ｅの試験が行われた場合（Ｓ１５０１  Ｙｅｓ）、試験制御装置は、主記憶装置の試験ログデータ９６０に格納された試験結果の比較処理を実行して（Ｓ１５０３）、試験プログラムの生成処理と実行処理を終了する。比較処理とは、同じ試験命令列の実行により生成された試験結果の比較である。例えば、図２１Ａに示す試験プログラムＰ１０００の実行による試験結果と、図２３Ａに示す試験プログラムＰ１０００の実行による試験結果である。これらの試験結果は、乱数データの実行結果は無効化されるため、本来同じになるところ、相違があれば乱数データの実行による演算処理装置の動作に異常があるため、演算処理装置の正常動作に問題があることがわかる。
【符号の説明】
【０２１７】
１０    演算処理部
１１０    記憶部
１１０Ａ    Ｌ１命令キャッシュメモリ
１１０Ｂ    Ｌ１データキャッシュメモリ
１２０    命令読出部
１３０    分岐履歴部
１４０    命令実行部
１５０    命令バッファ
１６０    命令ワードレジスタ
１７０    命令デコーダ
１８２    ＲＳＢＲ
１８４    ＲＳＦ
１８６    ＲＳＥ
１８８    ＲＳＡ
２１０    浮動小数点演算部
２２０    整数演算部
２３０    アドレス生成部
２４０    ロードストアキュー
２５０    レジスタ部
２５０    レジスタ
２５０Ａ    コミットスタックエントリ
２５０Ｂ    制御レジスタ
２５０Ｃ    浮動小数点レジスタ
２５０Ｄ    汎用レジスタ
５００    情報処理装置
５１０    演算処理装置
５１２    Ｌ２キャッシュコントローラ
５１４    Ｌ２キャッシュメモリ
５１６    メモリアクセス制御部
５２０    主記憶装置
５３０    通信部
５４０    ２次記憶装置
５５０    ドライブ装置
５６０    Ｉ／Ｏコントローラ
５７０    入力部
５９０    記憶媒体
９２０    試験プログラム
９３０    命令変換テーブル
９４０    パラメータテーブル
９５０    試験結果
９６０    試験ログデータ
【図１】
0005549734.tif 000002
【図２】
0005549734.tif 000003
【図３】
0005549734.tif 000004
【図４】
0005549734.tif 000005
【図５】
0005549734.tif 000006
【図６】
0005549734.tif 000007
【図７】
0005549734.tif 000008
【図８】
0005549734.tif 000009
【図９】
0005549734.tif 000010
【図１０Ａ】
0005549734.tif 000011
【図１０Ｂ】
0005549734.tif 000012
【図１０Ｃ】
0005549734.tif 000013
【図１０Ｄ】
0005549734.tif 000014
【図１１】
0005549734.tif 000015
【図１２】
0005549734.tif 000016
【図１３】
0005549734.tif 000017
【図１４】
0005549734.tif 000018
【図１５】
0005549734.tif 000019
【図１６】
0005549734.tif 000020
【図１７】
0005549734.tif 000021
【図１８】
0005549734.tif 000022
【図１９】
0005549734.tif 000023
【図２０】
0005549734.tif 000024
【図２１Ａ】
0005549734.tif 000025
【図２１Ｂ】
0005549734.tif 000026
【図２２】
0005549734.tif 000027
【図２３Ａ】
0005549734.tif 000028
【図２３Ｂ】
0005549734.tif 000029
【図２４Ａ】
0005549734.tif 000030
【図２４Ｂ】
0005549734.tif 000031
【図２５Ａ】
0005549734.tif 000032
【図２５Ｂ】
0005549734.tif 000033
【図２６】
0005549734.tif 000034
【図２７】
0005549734.tif 000035
【図２８】
0005549734.tif 000036
【図２９Ａ】
0005549734.tif 000037
【図２９Ｂ】
0005549734.tif 000038
【図３０】
0005549734.tif 000039
【図３１】
0005549734.tif 000040