(57)【要約】【課題】試験装置、試験プログラム生成方法及び試験方法に関し、コンピュータシステムの安定動作確認試験を効率的に実行する。【解決手段】情報処理装置の動作試験を行う試験装置１において、演算器に実行させる命令の種類の割合に基づいて、生成した各種類の命令を含む命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成するとともに、各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成する命令生成部１０と、生成された試験命令列による試験を実行する試験実行部１１と、試験命令列による試験の実行結果に基づいて、試験命令列を決定する試験命令決定部１２とを有する。【選択図】図１
2018116365.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置の動作試験を行う試験装置において、
演算器に実行させる命令の種類の割合に基づいて、生成した各種類の命令を含む命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成するとともに、前記各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、前記連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成する命令生成部と、
生成された前記試験命令列による試験を実行する試験実行部と、
前記試験命令列による試験の実行結果に基づいて、試験命令列を決定する試験命令決定部とを、
有する試験装置。
【請求項２】
前記依存関係レジスタ情報は、前記ブロック内命令列のブロック内の命令間におけるレジスタの依存関係を持たせるためのブロック内レジスタリストと、前記ブロック内命令列のブロック間の命令間でレジスタの依存関係を持たせるためのブロック間レジスタリストを含み、
前記命令生成部は、
前記ブロック内の命令間においてレジスタの依存関係を持たせる場合、前記ブロック内レジスタリストを用い、
前記ブロック間の命令間においてレジスタの依存関係を持たせる場合、前記ブロック間レジスタリストを用い、
前記ブロック内の命令間及び前記ブロック間の命令間においてレジスタの依存関係を持たせる場合、前記ブロック内レジスタリスト及び前記前記ブロック間レジスタリストを用いて、
前記試験命令列を生成する請求項１に記載の試験装置。
【請求項３】
前記命令生成部は、前記ブロック内命令列を生成する際、
所定の値に基づいて生成された乱数の一部を前記命令の種類の割合を用いて割った余剰を用いて前記全命令リストから命令を抽出する請求項１又は２に記載の試験装置。
【請求項４】
情報処理装置の動作試験を行う試験プログラム生成方法において、
コンピュータに、
演算器に実行させる命令の種類の割合に基づいて、各種類の命令を含む命令リストを生成させ、
生成された前記命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成させ、
前記各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、前記連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成させる試験プログラム生成方法。
【請求項５】
情報処理装置の動作試験を行う試験装置を用いた試験方法において、
前記試験装置が有する命令生成部が、演算器に実行させる命令の種類の割合に基づいて、各種類の命令を含む命令リストを生成し、
前記命令生成部が、生成された前記命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成し、
前記命令生成部が、前記各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、前記連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成し、
前記試験装置が有する試験実行部が、生成された前記試験命令列による試験を実行し、
前記試験装置が有する試験命令決定部が、前記試験命令列による試験の実行結果に基づいて、試験命令列を決定する試験方法。
【発明の詳細な説明】
【技術分野】
【０００１】
試験装置、試験プログラム生成方法及び試験方法に関する。
【背景技術】
【０００２】
コンピュータシステムの安定性が保証できるかを検証するため、消費電力量が最大となる動作を継続して実行させる最大電流負荷試験や、電流値のオン／オフを繰り返す状態を作り電源電圧の出力電圧を変動させる負荷試験（下記の特許文献１を参照）を行っていた。これらの試験においては、通常動作よりも高い電流値を消費するような動作をＣｅｎｔｒａｌ Ｐｒｏｃｅｓｓｏｒ Ｕｎｉｔ（ＣＰＵ、中央演算処理装置）にさせる必要があった。そのために、継続して演算を繰り返す命令列を実行させたり、定常的にキャッシュからメモリへのアクセスを発生させるメモリアクセスを繰り返し実行させたりしていた。また、複数のＣＰＵがある場合には上記処理を並列に実行させていた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２２１８５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、継続した演算やメモリアクセスを繰り返す動作は、ハードウェアの省電力機能が働いた場合、継続することができず、最大電流値を消費する動作を維持させることは困難であった。さらに、昨今のプロセッサにおいては多数の演算器が搭載され、逐次実行するプログラムにおいても自動で並列にプログラムが各演算器に投入されるため、複数の演算器を常時使用する命令列を作成することは困難であった。
【０００５】
そこで、本発明の１つの側面では、最大電流値を消費する動作を維持させることを目的とする。
【課題を解決するための手段】
【０００６】
態様の一例では、情報処理装置の動作試験を行う試験装置において、演算器に実行させる命令の種類の割合に基づいて、生成した各種類の命令を含む命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成するとともに、前記各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、前記連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成する命令生成部と、生成された前記試験命令列による試験を実行する試験実行部と、前記試験命令列による試験の実行結果に基づいて、試験命令列を決定する試験命令決定部とを、有する。
【発明の効果】
【０００７】
コンピュータシステムの安定動作確認試験を効率的に実行することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】実施形態の試験装置の機能ブロック図である。
【図２】実施形態の試験装置の機能ブロック図である。
【図３】ＣＰＵ内における演算器及びユニットの一例を示す図である。
【図４】試験結果テーブルの一例を示す図である。
【図５】実施形態の試験装置における試験命令列の生成から試験命令列による試験までの動作フローを示すフローチャートである。
【図６】負荷試験に使用する試験命令列の決定フローを示すフローチャートである。
【図７】各命令種の命令リストの一例を示す図である。
【図８】全命令リストを示す図である。
【図９】ブロック内命令列の生成の具体例を説明するための図である。
【図１０】連結ブロック内命令列を示す図である。
【図１１】ブロック内レジスタリストを示す図である。
【図１２Ａ】ブロック間レジスタリスト（固定小数点レジスタリスト）を示す図である。
【図１２Ｂ】ブロック間レジスタリスト（浮動小数点レジスタリスト）を示す図である。
【図１２Ｃ】ブロック間レジスタリスト（ロード／ストアレジスタリスト）を示す図である。
【図１３】ブロック内の命令間でレジスタ依存を生成する際のフローを示すフローチャートである。
【図１４】ブロック間の命令間でレジスタ依存を生成する際のフローを示すフローチャートである。
【図１５】ブロック内の命令間でのレジスタ依存とブロック間の命令間でのレジスタ依存を複合させたレジスタ依存を生成する際のフローを示すフローチャートである。
【図１６】実施形態における試験装置を実現するためのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明を実施するための形態について図面を参照しながら説明する。図１は第１の実施形態の試験装置１の構成を示す機能ブロック図である。第１の実施形態の試験装置１は、消費電力量が最大となる状態を作り出すため、命令生成部１０が試験命令列を生成し、試験実行部１１が試験命令列による試験を実行し、試験命令決定部１２が試験結果に基づいて最も負荷が高い試験命令列を決定する。具体的な内容については後述する。
【００１０】
第１の実施形態の試験装置１は他の機能ブロックを更に含み、その構成を図２に示す。
【００１１】
第１の実施形態の試験装置１は、命令生成部１０、試験実行部１１、試験命令決定部１２、電流値／動作周波数測定部１３、メモリ１４、制御部１５を有する。これらの機能ブロックによる処理は、例えば後述するＣＰＵ３０がＨａｒｄ Ｄｉｓｋ Ｄｒｉｖｅ（ＨＤＤ）１６２などに記憶された処理プログラムを実行する処理である。なお、試験装置１の構成は上記に限定されるものでなく、他の構成を含むものであってもよい。
【００１２】
制御部１５は、試験装置１全体の動作を制御するものであって、例えば各機能ブロックに対して動作指示を行う。
【００１３】
命令生成部１０は、演算器に実行させる命令の種類の割合に基づいて、各命令を含む全命令リストを生成する。演算器に実行させる命令の種類は、例えば固定小数点命令、浮動小数点命令、ロード／ストア命令（メモリアクセス命令とも言う）であるが、これらの命令に限定されるものではない。これらの命令は、命令毎に実行する演算器が決まっている。ＣＰＵ３０が命令列を実行する際、固定小数点命令は固定小数点演算器、浮動小数点命令は浮動小数点演算器、ロード／ストア命令はロード／ストアユニットによって実行される。ロード／ストア命令とは、メモリからレジスタへコピー（読み出しや書き込み）したり、レジスタからメモリへコピー（読み出しや書き込み）したりさせるための命令である。また、全命令リストとは、各命令の割合（Ｋ、Ｆ、Ｍ）に基づいて、固定小数点命令、浮動小数点命令、ロード／ストア命令を含めて生成される命令リストを言う。なお、命令生成部１０の他の機能及び試験装置１の他の機能部については後述する。
【００１４】
図３はＣＰＵ内における演算器及びユニットの一例を示している。図３に示すＣＰＵ３０は、命令デコーダ３１、固定小数点演算器３２（３２ａ、３２ｂ）、浮動小数点演算器３３（３３ａ、３３ｂ、３３ｃ）、ロード／ストアユニット３４を有する。
【００１５】
命令デコーダ３１は、読み込まれた命令列を解析し、いずれの演算器又はユニットに実行させるべきか判断する。
【００１６】
固定小数点演算器３２は、読み込まれた命令列のうち、固定小数点命令を実行する。この例では、固定小数点演算器３２は２つあり、各演算器が動作することによって演算処理の高速化が図られる。
【００１７】
浮動小数点演算器３３は、読み込まれた命令列のうち、浮動小数点命令を実行する。この例では、浮動小数点演算器３３は３つあり、各演算器が動作することによって演算処理の高速化が図られる。
【００１８】
例えば、固定小数点命令のみの命令列を実行する場合、ＣＰＵ３０内では固定小数点演算器３２のみが命令を実行し、浮動小数点演算器３３やロード／ストアユニット３４は動作しない。そのため、消費電力量が最大となることはない。消費電力量を高くするには、ＣＰＵ３０内のすべての演算器やユニットを途切れなく動作させる必要がある。しかし、ＣＰＵ３０によっては、演算器の数や、各演算器における演算レイテンシ（演算遅延）が異なるため、単純に固定小数点命令、浮動小数点命令、ロード／ストア命令を均等に並べた命令列を実行すればよいというわけではない。そのため、使用する命令列に含まれる命令種（命令の種類）の割合を調整する必要がある。
【００１９】
命令種の割合とは、命令列に含まれる各命令、すなわち固定小数点命令、浮動小数点命令、ロード／ストア命令の割合を示し、各命令の割合は例えば１から１０の値で、経験則から指定される。
【００２０】
また、命令生成部１０は、生成された全命令リストからランダムに抽出した命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成する。ブロック内命令列の生成の詳細については後述する。
【００２１】
また、命令生成部１０は、各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報としてのレジスタリストに基づいて、連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成する。レジスタリストとは、各命令で使用されるレジスタ間の依存関係を示すもの、すなわちある命令で使用するレジスタを他の命令の入力のレジスタとして使用するようにレジスタに依存関係を持たせたものであって、命令種ごとに作成されるものである。
【００２２】
試験実行部１１は、命令生成部１０によって生成された試験命令列による試験を実行する。
【００２３】
電流値／動作周波数測定部１３は、試験実行部１１による試験命令列の実行により、電流値や動作周波数を測定し、得られた結果を図４に示す試験結果テーブルに記録し、メモリ１４に格納する。電流値／動作周波数測定部１３は、主に２つのデータを命令列実行後にメモリ１４に退避させて保存する。メモリ１４に退避させるデータは１つの試験につき０ｘ３０バイトであり、図４に示す試験結果テーブルの形式で退避させる。
【００２４】
１つ目のデータは命令列実行時間である。電流値／動作周波数測定部１３は、生成された試験命令列の実行時間を測定する。なお、省電力モードにより動作周波数が下げられた場合は、実行時間は延びる傾向となる。
【００２５】
２つ目のデータは動作周波数と消費電力値である。電流値／動作周波数測定部１３は、ＣＰＵ３０がパフォーマンスモニタ機能を有する場合、命令列実行後に採取する。パフォーマンスモニタ機能とは、ＣＰＵ３０やＨＤＤ１６２などのリソースをリアルタイムで監視する機能を言う。
【００２６】
図４に示すように、試験結果テーブルには１試験ごとにブロック数分（例えば、Ｎ個）の結果が記録される。
【００２７】
試験命令決定部１２は、試験実行部１１による試験命令列の複数の実行結果に基づいて、最も負荷が高い試験命令列を決定する。
【００２８】
具体的には、試験命令決定部１２は、図４に示す試験結果テーブルに基づいて、負荷試験に使用する試験命令列を決定する。試験命令決定部１２は、まずＣＰＵ３０が動作周波数のモニタ機能を有する場合には動作周波数が低い試験命令列を対象から外す。その上で、試験命令決定部１２は、ＣＰＵ３０が消費電力値のモニタ機能を有する場合には消費電力が最大となる試験命令列を試験で使用すると決定する。一方、ＣＰＵ３０が消費電力値のモニタ機能を有していない場合には、試験命令数と命令列実行時間から単位時間当たりに実行した命令数を計算し、命令実行数が最大となるものを消費電力が高い試験命令列として試験に使用すると決定する。
【００２９】
ここで、第１の実施形態の試験装置１における試験命令列の生成から試験命令列による試験までの動作フローについて図５を用いて説明する。この処理は例えば、ＣＰＵ３０がＨＤＤ１６２などに記憶された決定処理プログラムを実行する処理である。まず、命令生成部１０は、演算器に実行させる命令の種類の割合に基づいて、各命令を含む全命令リストを生成する（ステップＳ５０１）。
【００３０】
命令生成部１０は、生成された全命令リストからランダムに抽出した命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成する（ステップＳ５０２）。具体的には、命令生成部１０は、ｓｅｅｄ値（所定の値）に基づいて乱数を生成する。命令生成部１０は、生成された乱数の一部（乱数の先頭の４バイトのデータＲ）を命令の種類の割合により算出される値（（Ｋ＋Ｆ＋Ｍ）×Ｉ）で割り、その余剰をインデックスとして用いて全命令リストから命令を抽出してブロック内命令列を生成する。命令生成部１０は、各命令で使用されるレジスタ間の依存関係を示すレジスタリストに基づいて、連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成する（ステップＳ５０３）。
【００３１】
試験実行部１１は、レジスタの初期化を行う（ステップＳ５０４）。レジスタの初期化の一例について説明する。例えば、浮動小数点演算命令の場合、浮動小数点例外が発生するとハードウェアの割り込みが発生し、演算命令投入が停滞する。そこで、浮動小数点例外が発生しないようにするため、レジスタの初期値に用いるデータの値をランダムで生成し、浮動小数点の指数部に当たるビットを０ｘ３ｆｆ（整数で１．ｘｘｘ）で上書きする。これにより、データの桁上がりを可能な限り抑制することができ、浮動小数点例外が発生する確率を軽減させることが可能となる。
【００３２】
試験実行部１１は、生成された試験命令列の実行をする（ステップＳ５０５）。電流値／動作周波数測定部１３は、試験実行部１１による試験命令列の実行により、電流値、動作周波数を測定し、得られた結果を試験結果テーブルに記録し、メモリ１４に格納する（ステップＳ５０６）。試験命令決定部１２は、試験命令列の試験実行をブロック数Ｎ回実行したか否かを判断し（ステップＳ５０７）、Ｎ回実行した場合（ステップＳ５０７でＹｅｓ）、試験命令決定部１２は、試験命令列の実行結果に基づいて、最も負荷が高い試験命令列を決定する（ステップＳ５０８）。なお、Ｎ回実行していない場合（ステップＳ５０８でＮｏ）にはステップＳ５０１へ戻り、新たな試験命令列を生成して試験命令列の実行を行う。
【００３３】
試験実行部１１は、所定の試験モード、すなわち負荷変動試験又は高負荷試験のいずれを選択するか否かを判断する（ステップＳ５０９）。試験実行部１１は、負荷変動試験を選択した場合には、決定された試験命令列を使用し、ＣＰＵ３０による試験命令列の実行と停止を周期的に繰り返す（ステップＳ５１０）。一方、試験実行部１１は、高負荷試験を選択した場合には、決定された試験命令列を使用し、ＣＰＵ３０による試験命令列の実行を繰り返す（ステップＳ５１１）。
【００３４】
上記負荷試験に使用する試験命令列の決定フローの詳細を図６に示す。この処理は例えば、ＣＰＵ３０がＨＤＤ１６２などに記憶された決定処理プログラムを実行する処理である。試験命令決定部１２は動作周波数が測定されているか否かを判断する（ステップＳ６０１）。動作周波数が測定されている場合（ステップＳ６０１でＹｅｓ）、試験命令決定部１２は、動作周波数が低い試験命令列を採用の対象外とする（ステップＳ６０２）。一方、動作周波数が測定されていない場合（ステップＳ６０１でＮｏ）、試験命令決定部１２は、消費電力が測定されているか否かを判断する（ステップＳ６０３）。消費電力が測定されている場合（ステップＳ６０３でＹｅｓ）、試験命令決定部１２は消費電力が最大となる試験命令列を試験で使用すると決定し（ステップＳ６０４）、決定処理を終了させる。
【００３５】
消費電力が測定されていないと判断された場合（ステップＳ６０３でＮｏ）、試験命令決定部１２は試験命令数と命令列実行時間から単位時間当たりに実行した命令数を算出し、命令実行数が最大となるものを消費電力が高い試験命令列として試験に使用すると決定する（ステップＳ６０５）。
【００３６】
次に、第１の実施形態の試験装置１における試験命令列の生成処理について具体的に説明する。まず、前提条件について説明する。ここでは、固定小数点命令の命令割合をＫ、浮動小数点命令の命令割合をＦ、ロード／ストア命令の命令割合をＭ、ブロック内命令数をＢ、ブロック数をＮとする。
【００３７】
ブロック内命令数とは、１つのブロックに含まれる命令数を言う。ブロックとは、全命令リストからランダムに命令を抽出して命令を格納するものであり、ブロック内に格納される命令列をブロック内命令列と言う。ブロック内の命令種の振り分けは、上記割合に基づいて決定される。ブロック内の命令出現順序はランダムである。ランダムに決定するために乱数を用いる。乱数はｓｅｅｄ値を入力として生成し、同じｓｅｅｄ値を使用した場合は常に同じ乱数が生成される。
【００３８】
ブロック数とは、試験で使用する命令数を決定する際に用いられるものであり、試験で使用する命令数はブロック数にブロック内命令数を掛け合わせたものである。
【００３９】
また、前提条件として、全命令リストを生成するために用いられる命令リストを用意する。この場合に用意される命令リストは図７に示す各命令種の命令リストである。図７に示すように、命令リストには、固定小数点命令リスト、浮動小数点命令リスト、ロード／ストア命令リストがある。このとき、各命令リストの数が同数になるように調整する。この例では、命令数Ｉは７個である。試験対象のＣＰＵ３０でサポートする固定小数点命令、浮動小数点命令、ロード／ストア命令であって、最大数となる命令種の命令数に各命令リストの命令数を合わせる。この例では、浮動小数点命令リストの命令数が最大となるため、固定小数点命令リスト及びロード／ストア命令リストの命令を繰り返すなどして命令数を浮動小数点命令リストの命令数７個に合わせる。
【００４０】
上記前提条件を踏まえ、試験命令列を生成する。
【００４１】
まず、命令生成部１０は、各命令種の割合（Ｋ、Ｆ、Ｍ）に基づいて、固定小数点命令、浮動小数点命令、ロード／ストア命令を含む全命令リストを生成する。生成される全命令リストは、各命令種の割合分の命令リストが連結されたものとなる。具体的には、各命令種の割合がＫ＝３、Ｆ＝４、Ｍ＝２の場合、生成される全命令リストは、図８に示すように、固定小数点命令リスト３つと、浮動小数点命令リスト４つと、ロード／ストア命令リスト２つとが連結されたものとなる。このときの全命令リストの全体の命令数は（Ｋ＋Ｆ＋Ｍ）×Ｉで算出されるため、各命令リストの命令数Ｉが７個の場合、全命令リストの全体の命令数は（３＋４＋２）×７＝６３個となる。
【００４２】
全命令リストを生成すると、命令生成部１０は、生成した全命令リストを用いてブロック内命令列を生成する。ブロック内命令列を生成する際、命令生成部１０は、まず所定のｓｅｅｄ値からブロック内命令数Ｂ×４バイトの乱数を生成する。命令生成部１０は、生成された乱数の先頭の４バイトのデータ（Ｒとする）を（Ｋ＋Ｆ＋Ｍ）×Ｉで割った余剰（Ｒ ｍｏｄ （Ｋ＋Ｆ＋Ｍ）×Ｉ）をインデックスとし、全命令リストから使用する命令を選択する。次の４バイトについても同様に余剰を求め、全命令リストから使用する命令を選択する。
【００４３】
命令生成部１０は、この処理をブロック内命令数Ｂ回繰り返すことにより、ブロック内命令列を生成する。全命令リストに含まれる固定小数点命令、浮動小数点命令、ロード／ストア命令の割合はＫ：Ｆ：Ｍであるため、ブロック内で使用する命令の割合は命令数が多くなればなるほどＫ：Ｆ：Ｍに収束する。
【００４４】
ブロック内命令列の生成の具体例を図９に示す。図９に示すように、命令生成部１０は、まず乱数を生成し、４バイトデータのＲをブロック内命令数Ｂ個抽出する。例えば、Ｂ＝５の場合には４バイトデータのＲを５個抽出する。命令生成部１０は、それぞれの４バイトデータのＲを（（Ｋ＋Ｆ＋Ｍ）×Ｉ）で割った余剰を求め、求められた余剰をインデックスとする。例えば、Ｋ＝３、Ｆ＝４、Ｍ＝２、Ｉ＝７の場合、求められる余剰は０から６２であり、インデックスは０から６２となる。例えば、全命令リストの先頭のＡ命令から順に０から６２のインデックス６３個が付されたとすると、命令生成部１０は、求めた余剰のインデックスに対応するインデックスの命令（例えば、Ｄ命令）を全命令リストから抽出し、ブロック内命令列に抽出順に格納する。これにより、ブロック内命令列が生成される。
【００４５】
命令生成部１０は、ブロック内命令列をブロック数Ｎ分生成し、生成されたブロック命令列を連結することで連結ブロック内命令列を生成する。具体的は、図１０に示すように、命令生成部１０は、最初のブロック命令列を生成後、ｓｅｅｄ値（例えば、ａ）を＋１インクリメントし、乱数を生成してから上述したようにブロック命令列を生成する。命令生成部１０は、ブロック数Ｎ回、ブロック命令列生成処理を行い、最終的にＢ×Ｎの命令列、すなわち連結ブロック内命令列を生成する。この時点では連結ブロック内命令列における命令種は決定されているが、使用するレジスタ（例えば、レジスタ番号）についてはまだ決定されていない状態である。よって、連結ブロック内命令列の命令ごとに使用するレジスタを決定し、試験命令列を生成する必要がある。
【００４６】
次に、使用するレジスタを決定する処理について説明する。
【００４７】
命令投入のタイミングによってはパイプラインストールによる命令再実行が発生し、負荷が下がるケースもある。パイプラインストールとは命令が実行されずに滞ることを言う。負荷が下がることにより、消費電力量が最大となる状態を作り出すことが困難となるため、負荷が下がりすぎないようにする必要がある。また、負荷が上がりすぎ、省電力モード機能が働くなどして消費電力量が最大となる状態を作り出すことができないことも避ける必要がある。よって、命令の実行時に使用するレジスタ間の依存関係についても調整する必要がある。
【００４８】
レジスタの依存関係を生成するためにレジスタリストを使用する。ここでは、命令種ごとに使用できるレジスタは異なるため、命令生成部１０は命令種ごとにレジスタリストを生成する。生成されるレジスタリストには、ブロック内命令列のブロック内の命令間でレジスタの依存関係を持たせるためのブロック内レジスタリストと、ブロック内命令列のブロック間の命令間でレジスタの依存関係を持たせるためのブロック間レジスタリストがある。レジスタリストは、命令番号、入力レジスタ、結果を格納するための結果レジスタから構成されている。レジスタリストの入力レジスタの数は命令種の中で、入力レジスタを使用する数が最も多い命令種の入力レジスタ数に合わせるものとする。以下で説明するレジスタリストでは、浮動小数点命令が入力レジスタを最も多く使用する命令種である。
【００４９】
まず、ブロック内レジスタリストについて図１１を用いて説明する。図１１に示すブロック内レジスタリストでは、レジスタの依存関係を持たせるため、ある命令番号の命令で使用した結果レジスタのレジスタを他の命令番号の命令で使用する入力レジスタ１のレジスタとしている。例えば、固定小数点レジスタリストの場合、命令番号０の命令で使用した結果レジスタの固定小数点レジスタ３を命令番号１の命令で使用する入力レジスタ１のレジスタとしている。なお、試験で使用するレジスタをすべて使用した場合には命令番号を０に戻す。他の命令種のレジスタリストについても同様である。
【００５０】
次に、ブロック間レジスタリストについて図１２Ａから図１２Ｃを用いて説明する。ブロック間レジスタリストでは、命令種ごとに２つのレジスタリストを有する。図１２Ａから図１２Ｃには各命令種のレジスタリスト（ブロック間レジスタリスト）が示されている。図１２Ａから図１２Ｃに示す各ブロック間レジスタリストでは、ブロック内の命令間でレジスタの依存関係を持たせないため、命令番号が前後する命令間では同一のレジスタを使用しない。すなわち、ある命令種のレジスタリスト１で使用する結果レジスタのレジスタを対応する命令種のレジスタリスト２の入力レジスタ１のレジスタとして使用する。また、ある命令種のレジスタリスト１で使用する入力レジスタ１のレジスタを対応する命令種のレジスタリスト２の結果レジスタのレジスタとして使用する。
【００５１】
例えば、固定小数点レジスタリストの場合、固定小数点レジスタリスト１の命令番号０の命令で使用する結果レジスタの固定小数点レジスタ８を、固定小数点レジスタリスト２の命令番号０の命令で使用する入力レジスタ１のレジスタとしている。また、固定小数点レジスタリスト１の命令番号０の命令で使用する入力レジスタ１の固定小数点レジスタ０を、固定小数点レジスタリスト２の命令番号０の命令で使用する結果レジスタのレジスタとしている。なお、試験で使用するレジスタをすべて使用した場合には命令番号を０に戻す。他の命令種のレジスタリストについても同様であるため説明を省略する。
【００５２】
命令生成部１０は、上述したレジスタリストに基づいて各命令で使用するレジスタを決定する。以下では、ブロック内の命令間でレジスタ依存を生成する場合と、ブロック間の命令間でレジスタ依存を生成する場合について説明する。
【００５３】
まず、ブロック内の命令間でレジスタ依存を生成する場合について説明する。この場合には、命令生成部１０は、上述したブロック内レジスタリストを使用して試験命令列を生成する。
【００５４】
命令生成部１０は、ブロック内の最初の命令から順に命令種を調べ、命令種に該当するレジスタリストを選択する。このとき、レジスタリストごとに選択カウンタを有している。レジスタリストを選択した回数と、レジスタリストの命令番号が一致するレジスタ群（入力レジスタ、結果レジスタ）が該当する命令で使用するレジスタとして選択する。これにより、前後に存在する同一の命令種の命令において入力レジスタ１と結果レジスタに依存関係を持たせることができる。なお、レジスタリストごとの選択回数は、命令番号の最大値と一致した時点で０に初期化されるものとする。
【００５５】
ブロック内の命令間でレジスタ依存を生成する際のフローを図１３に示す。この処理は例えば、ＣＰＵ３０がＨＤＤ１６２などに記憶された処理プログラムを実行する処理である。まず、命令生成部１０は、固定小数点選択カウンタＦＸ、浮動小数点選択カウンタＦＰ、ロード／ストア選択カウンタＭＡ、命令カウンタＤをそれぞれ０に初期化する（ステップＳ１３０１）。固定小数点選択カウンタとは、固定小数点命令のレジスタリストが選択された数をカウントするものである。浮動小数点選択カウンタとは、浮動小数点命令のレジスタリストが選択された数をカウントするものである。ロード／ストア選択カウンタとは、ロード／ストアのレジスタリストが選択された数をカウントするものである。命令カウンタとは、使用するレジスタを決定するために命令が選択された数をカウントするものである。
【００５６】
命令生成部１０は、あるブロック内命令列のＤ番目の命令種が何であるか、すなわち固定小数点命令、浮動小数点命令、ロード／ストア命令のいずれであるかを判定する（ステップＳ１３０２）。初期化後の最初の判定ステップではＤ＝０であるため、ブロック内命令列の０番目の命令、すなわち最初の命令の命令種が何であるかが判定される。
【００５７】
上記判定により、例えば命令種が固定小数点命令である場合、命令生成部１０は、固定小数点レジスタリストを選択する（ステップＳ１３０３）。命令生成部１０は、選択した固定小数点レジスタリストのＦＸ番目、すなわち命令番号がＦＸに対応するレジスタ群（入力レジスタ１、入力レジスタ２、結果レジスタ）をＤ番目の命令で使用するレジスタとして選択する（ステップＳ１３０４）。例えば、Ｄ＝０、ＦＸ＝０の場合には、固定小数点レジスタリストの０番目、すなわち命令番号が０に対応するレジスタ群（入力レジスタ１が固定小数点レジスタ０、入力レジスタ２が固定小数点レジスタ１、結果レジスタが固定小数点レジスタ３）を最初の命令で使用するレジスタとして選択する。
【００５８】
命令生成部１０は、使用するレジスタを選択すると、ＦＸに１を加えるとともに（ステップＳ１３０５）、Ｄに１を加える（ステップＳ１３０６）。命令生成部１０は、命令カウンタＤがブロック内命令数Ｂと一致するか否かを判断する（ステップＳ１３０７）。命令生成部１０は、一致しない場合（ステップＳ１３０７でＮｏ）、ブロック内命令のすべての命令に対してレジスタが選択されていないと判断し、ステップＳ１３０２へ戻る。一方、一致する場合（ステップＳ１３０７でＹｅｓ）には、命令生成部１０は処理を終了させる。以上の処理を行うことによって試験命令列が生成される。
【００５９】
なお、ステップＳ１３０２において、Ｄ番目の命令種が浮動小数点命令である場合について説明する。命令生成部１０は、浮動小数点レジスタリストを選択する（ステップＳ１３０８）。命令生成部１０は、選択した浮動小数点レジスタリストのＦＰ番目、すなわち命令番号がＦＰに対応するレジスタ群（入力レジスタ１、入力レジスタ２、入力レジスタ３、結果レジスタ）をＤ番目の命令で使用するレジスタとして選択する（ステップＳ１３０９）。例えば、Ｄ＝０、ＦＰ＝０の場合には、浮動小数点レジスタリストの０番目、すなわち命令番号が０に対応するレジスタ群（入力レジスタ１が浮動小数点レジスタ０、入力レジスタ２が浮動小数点レジスタ１、入力レジスタ３が浮動小数点レジスタ２、結果レジスタが浮動小数点レジスタ３）を最初の命令で使用するレジスタとして選択する。命令生成部１０は、使用するレジスタを選択すると、ＦＰに１を加える（ステップＳ１３１０）。
【００６０】
また、ステップＳ１３０２において、Ｄ番目の命令種がロード／ストア命令である場合について説明する。命令生成部１０は、ロード／ストアレジスタリストを選択する（ステップＳ１３１１）。命令生成部１０は、選択したロード／ストアレジスタリストのＭＡ番目、すなわち命令番号がＭＡに対応するレジスタ群（入力レジスタ１、入力レジスタ２、結果レジスタ）をＤ番目の命令で使用するレジスタとして選択する（ステップＳ１３１２）。例えば、Ｄ＝０、ＭＡ＝０の場合には、ロード／ストアレジスタリストの０番目、すなわち命令番号が０に対応するレジスタ群（入力レジスタ１が固定小数点レジスタ０、入力レジスタ２が固定小数点レジスタ１、結果レジスタが固定小数点レジスタ２）を最初の命令で使用するレジスタとして選択する。命令生成部１０は、使用するレジスタを選択すると、ＭＡに１を加える（ステップＳ１３１３）。
【００６１】
なお、上記処理フローはすべてのブロック内命令列に対して同様に行われる。
【００６２】
次に、ブロック間の命令間でレジスタ依存を生成する場合について説明する。この場合には、命令生成部１０は、上述したブロック間レジスタリストを使用して試験命令列を生成する。具体的には、命令生成部１０は、試験命令列のブロックが偶数番目のブロックの場合には各命令種のレジスタリスト１を使用し、試験命令列のブロックが奇数番目のブロックの場合には各命令種のレジスタリスト２を使用する。このように、ブロック間レジスタリストを使用することにより、ブロック内の命令間ではレジスタ依存は発生しないが、ブロック間の命令間では同一命令種の同一番目の命令においてレジスタ依存が発生する。
【００６３】
ブロック間の命令間でレジスタ依存を生成する際のフローを図１４に示す。この処理は例えば、ＣＰＵ３０がＨＤＤ１６２などに記憶された処理プログラムを実行する処理である。まず、命令生成部１０は、試験命令列の各ブロックをカウントするためのブロックカウンタＳを０に初期化する（ステップＳ１４０１）。命令生成部１０は、ブロックカウンタＳが偶数であるか否かを判断する（ステップＳ１４０２）。偶数であると判断した場合（ステップＳ１４０２でＹｅｓ）、命令生成部１０は、固定小数点レジスタリスト１、浮動小数点レジスタリスト１、ロード／ストアレジスタリスト１を選択する（ステップＳ１４０３）。
【００６４】
命令生成部１０は、選択した各命令種のレジスタリストを使用して、各命令で使用するレジスタの選択を実行する（ステップＳ１４０４）。このレジスタ選択の実行処理では、上述した図１３に示す処理フローと同様の処理が行われるため、説明を省略する。命令生成部１０は、レジスタ選択の実行処理が終了すると、ブロックカウンタＳに１を加え（ステップＳ１４０５）、ブロックカウンタＳの値が試験命令列のブロック数Ｎと一致するか否かを判断する（ステップＳ１４０６）。一致する場合（ステップＳ１４０６でＹｅｓ）、命令生成部１０は、すべての命令についてレジスタの選択が終了したと判断して処理を終了させる。一致しない場合（ステップＳ１４０６でＮｏ）、ステップＳ１４０２へ戻る。
【００６５】
一方、ステップＳ１４０２において、ブロックカウンタＳが偶数ではないと判断した場合（ステップＳ１４０２でＮｏ）、命令生成部１０は、固定小数点レジスタリスト２、浮動小数点レジスタリスト２、ロード／ストアレジスタリスト２を選択する（ステップＳ１４０７）。命令生成部１０は、選択した各命令種のレジスタリストを使用して、各命令で使用するレジスタの選択を実行する（ステップＳ１４０４）。以上の処理を行うことによって試験命令列が生成される。
【００６６】
次に、ブロック内の命令間でのレジスタ依存とブロック間の命令間でのレジスタ依存を複合させてレジスタ依存を生成する場合について説明する。この場合、上述したブロック内の命令間でのレジスタ依存とブロック間の命令間でのレジスタ依存を順次適用し、各命令で使用するレジスタを選択する。ブロック内の命令間でのレジスタ依存の連続出現数をＸとし、ブロック間の命令間でのレジスタ依存の連続出現数をＹとし、ＸとＹはそれぞれ任意又はランダムに設定可能である。
【００６７】
ブロック内の命令間でのレジスタ依存とブロック間の命令間でのレジスタ依存を複合させたレジスタ依存を生成する際のフローを図１５に示す。この処理は例えば、ＣＰＵ３０がＨＤＤ１６２などに記憶された処理プログラムを実行する処理である。まず、命令生成部１０は、試験命令列の各ブロックをカウントするためのブロックカウンタＳを０に初期化する（ステップＳ１５０１）。命令生成部１０はＸの値を設定する（ステップＳ１５０２）。このとき、Ｘの値は任意設定又はランダム設定される。命令生成部１０は、１つのブロック内命令数ＢとＸの値を掛け合わせた値を、図１３に示す処理の命令カウンタＤの値として、図１３に示すブロック内の命令間でのレジスタ依存を生成する処理を実行する（ステップＳ１５０３）。
【００６８】
命令生成部１０は、ブロック内でのレジスタ依存を生成する処理の実行後、ブロックカウンタＳにＸの値を加える（ステップＳ１５０４）。命令生成部１０は、ブロックカウンタＳが試験命令列のブロック数Ｎ以上であるか否かを判断する（ステップＳ１５０５）。ブロックカウンタＳがブロック数Ｎ以上である場合（ステップＳ１５０５でＹｅｓ）、命令生成部１０は、ブロック数Ｎを超えた分のレジスタ選択を削除する（ステップＳ１５０６）。
【００６９】
一方、ブロックカウンタＳがブロック数Ｎ以上でない場合（ステップＳ１５０５でＮｏ）、命令生成部１０はＹの値を設定する（ステップＳ１５０７）。このとき、Ｙの値は任意設定又はランダム設定される。命令生成部１０は、試験命令列のブロック数ＮをＹとして図１４に示すブロック間の命令間でのレジスタ依存を生成する処理を実行する（ステップＳ１５０８）。
【００７０】
命令生成部１０は、ブロック間でのレジスタ依存を生成する処理を実行後、ブロックカウンタＳにＹの値を加える（ステップＳ１５０９）。命令生成部１０は、ブロックカウンタＳがブロック数Ｎ以上であるか否かを判断する（ステップＳ１５１０）。ブロックカウンタＳがブロック数Ｎ以上である場合（ステップＳ１５１０でＹｅｓ）、命令生成部１０は、ブロック数Ｎを超えた分のレジスタ選択を削除する（ステップＳ１５０６）。一方、ブロックカウンタＳがブロック数Ｎ以上でない場合（ステップＳ１５１０でＮｏ）、ステップＳ１５０２へ戻る。以上の処理を行うことによって試験命令列が生成される。
【００７１】
次に、実施形態における試験装置を実現するためのハードウェア構成の一例について図１６を用いて説明する。ハードウェア構成は、例えば、ＣＰＵ３０、ＨＤＤ１６２、Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ（ＲＡＭ）１６３、グラフィック処理装置１６４、入力Ｉｎｔｅｒｆａｃｅ（Ｉ／Ｆ）１６５、書き込み／読み取り部１６６、ＬＡＮ Ｉ／Ｆ１６７、バス１６８を備えている。ＣＰＵ３０、ＨＤＤ１６２、ＲＡＭ１６３、グラフィック処理装置１６４、入力Ｉ／Ｆ１６５、書き込み／読み取り部１６６、ＬＡＮ Ｉ／Ｆ１６７は、バス１６８を介して互いに接続されている。
【００７２】
ＣＰＵ３０は、バス１６８を介して、ＨＤＤ１６２などに格納される試験装置の各種処理を行うためのプログラム（例えば、試験プログラム生成プログラムなど）を読み込む。ＣＰＵ３０は、読み込んだプログラムをＲＡＭ１６３に一時的に格納し、そのプログラムにしたがって各種処理を行う。
【００７３】
ＨＤＤ１６２には、試験装置の各種処理を行うためのアプリケーションプログラムや、試験装置の処理に必要なデータなどが格納される。
【００７４】
ＲＡＭ１６３は、揮発性メモリであって、ＣＰＵ３０に実行させるためのＯｐｅｒａｔｉｎｇ Ｓｙｓｔｅｍ（ＯＳ）プログラムやアプリケーションプログラムの一部が一時的に格納される。また、ＲＡＭ１６３にはＣＰＵ３０による処理に必要な各種データが格納される。
【００７５】
グラフィック処理装置１６４は、モニタなどと接続可能であってモニタに表示させる情報を生成するものである。
【００７６】
入力Ｉ／Ｆ１６５は、マウスやキーボードなどを介して入力される情報を受け付けるものである。
【００７７】
書き込み／読み取り部１６６は、Ｕｎｉｖｅｒｓａｌ Ｓｅｒｉａｌ Ｂｕｓ（ＵＳＢ）メモリなどの可搬型記憶媒体に情報を書き込んだり、可搬型記憶媒体から情報と読み取ったりするものである。
【００７８】
ＬＡＮ Ｉ／Ｆ１６７は、外部装置などとネットワークを介してデータの送受信を行うものである。
【００７９】
バス１６８は、各装置間の制御信号、データ信号などの授受を媒介する経路である。
【００８０】
上述した実施形態では、試験装置１の主な処理をＣＰＵによるソフトウェア処理によって実行するものとして説明したが、この処理の全部又は一部をハードウェアによって実現するようにしてもよい。
【００８１】
実施形態の試験装置１の１つの側面によれば、消費電力量が最大となる状態を継続して作り出すことができ、効率的にコンピュータシステムの安定動作確認試験を実施することが可能である。また、省電力機能を有するコンピュータシステムで最大電力負荷が継続する試験を実施する場合、ランダムに生成した命令列の試験走行と、電流測定を繰り返す必要がある。１０パターン程度の試行で多くの時間を要し、また期待した電力負荷が出ない場合は更に多くの試行期間が必要であった従来の課題が、実施形態の試験装置１の１つの側面によれば１時間程度で試験実施が可能となる。
【００８２】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）情報処理装置の動作試験を行う試験プログラム生成方法において、
コンピュータに、
演算器に実行させる命令の種類の割合に基づいて、各種類の命令を含む命令リストを生成させ、
生成された前記命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成させ、
前記各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、前記連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成させる試験プログラム生成方法。
（付記２）前記依存関係レジスタ情報は、前記ブロック内命令列のブロック内の命令間におけるレジスタの依存関係を持たせるためのブロック内レジスタリストと、前記ブロック内命令列のブロック間の命令間でレジスタの依存関係を持たせるためのブロック間レジスタリストを含み、
前記ブロック内の命令間においてレジスタの依存関係を持たせる場合、前記ブロック内レジスタリストを用い、
前記ブロック間の命令間においてレジスタの依存関係を持たせる場合、前記ブロック間レジスタリストを用い、
前記ブロック内の命令間及び前記ブロック間の命令間においてレジスタの依存関係を持たせる場合、前記ブロック内レジスタリスト及び前記前記ブロック間レジスタリストを用いて、
前記試験命令列を生成する付記１に記載の試験プログラム生成方法。
（付記３）前記ブロック内命令列を生成する際、
所定の値に基づいて生成された乱数の一部を前記命令の種類の割合を用いて割った余剰を用いて前記全命令リストから命令を抽出する付記１又は２に記載の試験プログラム生成方法。
（付記４）情報処理装置の動作試験を行う試験装置を用いた試験方法において、
前記試験装置が有する命令生成部が、演算器に実行させる命令の種類の割合に基づいて、各種類の命令を含む命令リストを生成し、
前記命令生成部が、生成された前記命令リストからランダムに抽出された命令を含むブロック内命令列を所定数生成して連結した連結ブロック内命令列を生成し、
前記命令生成部が、前記各命令で使用されるレジスタ間の依存関係を示す依存関係レジスタ情報に基づいて、前記連結ブロック内命令列の命令ごとにレジスタを選択して試験命令列を生成し、
前記試験装置が有する試験実行部が、生成された前記試験命令列による試験を実行し、
前記試験装置が有する試験命令決定部が、前記試験命令列による試験の実行結果に基づいて、試験命令列を決定する試験方法。
（付記５）前記依存関係レジスタ情報は、前記ブロック内命令列のブロック内の命令間におけるレジスタの依存関係を持たせるためのブロック内レジスタリストと、前記ブロック内命令列のブロック間の命令間でレジスタの依存関係を持たせるためのブロック間レジスタリストを含み、
前記ブロック内の命令間においてレジスタの依存関係を持たせる場合、前記ブロック内レジスタリストを用い、
前記ブロック間の命令間においてレジスタの依存関係を持たせる場合、前記ブロック間レジスタリストを用い、
前記ブロック内の命令間及び前記ブロック間の命令間においてレジスタの依存関係を持たせる場合、前記ブロック内レジスタリスト及び前記前記ブロック間レジスタリストを用いて、
前記試験命令列を生成する付記４に記載の試験方法。
（付記６）前記ブロック内命令列を生成する際、
所定の値に基づいて生成された乱数の一部を前記命令の種類の割合を用いて割った余剰を用いて前記全命令リストから命令を抽出する付記４又は５に記載の試験方法。
【符号の説明】
【００８３】
１  試験装置
１０  命令生成部
１１  試験実行部
１２  試験命令決定部
１３  電流値／動作周波数測定部
１４  メモリ
１５  制御部
３０  ＣＰＵ
３１  命令デコーダ
３２（３２ａ、３２ｂ）  固定小数点演算器
３３（３３ａ、３３ｂ、３３ｃ）  浮動小数点演算器
３４  ロード／ストアユニット
１６２  ＨＤＤ
１６３  ＲＡＭ
１６４  グラフィック処理装置
１６５  入力Ｉ／Ｆ
１６６  書き込み／読み取り部
１６７  ＬＡＮ Ｉ／Ｆ
１６８  バス
【図１】
2018116365.tif 000003
【図２】
2018116365.tif 000004
【図３】
2018116365.tif 000005
【図４】
2018116365.tif 000006
【図５】
2018116365.tif 000007
【図６】
2018116365.tif 000008
【図７】
2018116365.tif 000009
【図８】
2018116365.tif 000010
【図９】
2018116365.tif 000011
【図１０】
2018116365.tif 000012
【図１１】
2018116365.tif 000013
【図１２Ａ】
2018116365.tif 000014
【図１２Ｂ】
2018116365.tif 000015
【図１２Ｃ】
2018116365.tif 000016
【図１３】
2018116365.tif 000017
【図１４】
2018116365.tif 000018
【図１５】
2018116365.tif 000019
【図１６】
2018116365.tif 000020