(57)【要約】【課題】静的にメモリアクセス競合をチェックすることができるリソース競合チェック装置を得る。【解決手段】マイクロコード入力部３５はマイクロコードにおける各命令についてソース先、デスティネーション先のバンクを記述したバンク指定部分から認識されるバンク情報をバンク情報格納テーブル５０に格納する。始点情報設定部３６は、リソース競合チェック対応テーブル４０を参照してリソース競合チェック対象命令、チェック項目（要チェックステージ処理内容）、ステージ数を始点情報格納テーブル４１に格納するともに、バンク情報格納テーブル５０を参照して上記リソース競合チェック対象命令のバンク情報を始点情報格納テーブル４１に格納する。トレース部３７は、始点情報格納テーブル４１に基づき、そのトレース結果をチェックポイント設定テーブル４２に格納する。【選択図】図１
2008102604.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令が記述された命令群の実行時におけるリソース競合をチェックするリソース競合チェック装置であって、前記複数の命令はそれぞれ実行時にパイプライン処理可能な複数のステージ処理を有し、
前記命令群から、リソース競合の対象となるリソース競合チェック対象命令を抽出してリソース競合チェック対象命令情報を得るリソース競合チェック対象命令抽出手段を備え、前記リソース競合チェック対象命令情報は前記リソース競合チェック対象命令におけるリソース競合の対象となる要チェックステージ処理を規定するステージ処理情報、及び前記要チェックステージ処理が複数のバンクを有するメモリにアクセスするメモリアクセス処理の場合に前記複数のバンクのうちアクセス対象となるバンクを規定するバンク情報を含み、
前記リソース競合チェック対象命令情報に基づき、前記複数のバンクのうち同一バンクに同時にアクセスするバンク競合を含むリソース競合が発生するか否かを判定するリソース競合判定手段をさらに備える、
リソース競合チェック装置。
【請求項２】
請求項１記載のリソース競合チェック装置であって、
前記複数の命令のうち前記メモリアクセス処理を有するメモリアクセス命令は、前記複数のバンクのうちアクセス対象となるバンクを指示するバンク指定部分を含んで記述され、
前記リソース競合チェック対象命令抽出手段は、前記メモリアクセス命令における前記バンク指定部分を参照して前記バンク情報を得る、
リソース競合チェック装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、命令パイプラインにより動作するＣＰＵ（Central Processing Unit ）、ＤＳＰ（Digital Signal Processor）等のマイクロコードのリソース競合に関し、特に、命令パイプラインで発生するリソース競合を予め検出するためのリソース競合チェック装置に関する。
【背景技術】
【０００２】
近年、高性能のコンピュータを実現するために、ハードウェア技術およびソフトウェア技術において種々の機能向上がなされており、１命令当りの平均実行サイクル数を低減させる手法であるパイプライン制御が最も重要な技術の１つとして挙げられる。
【０００３】
命令パイプライン方式において、１マシンサイクルごとに１命令（ステージ処理）の実行が理想であるが、実際にはリソース競合のようなパイプラインの乱れと呼ばれる現象が生じる。この現象として、たとえば、同一のキャッシュメモリへのアクセス要求の競合や同一の演算器の使用による競合等が挙げられる。この現象が起こらないようにマイクロコードを作成しないと、意図した動作を実際のハードウェアで実現することができないか、または性能の低下が起こるという問題が生じる。
【０００４】
上記問題を解決するためになされ、リソース競合が発生するか否かを自動的に判定できるリソース競合チェック装置として例えば特許文献１に開示されたリソース競合チェック装置がある。
【０００５】
上記リソース競合チェック装置は、プログラム中における命令の種類の基づいてリソース競合の対象となる命令を抽出し、この命令のリソース競合対象となるステージ数を抽出するための始点情報設定部と、始点情報設定部によって抽出された命令のアドレスとステージ数とに基づいてリソース競合が発生するか否かを判定している。
【０００６】
【特許文献１】特開平１０−３２６１８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記特許文献１に開示されたリソース競合チェック装置においては、メモリのアドレスをアドレスレジスタを使って間接的に参照する場合、静的なチェック方法であると、メモリの書き込みが同時に起こる場合あるいは読み出しが同時に起こる場合のみしかチェックできなかった。シングルポートのようなタイプのＲＡＭの場合、１つのメモリに対して同時に、書き込み、読み出しが行えないという制限がある。
【０００８】
これらの制限（メモリアクセス競合）が守られているかをチェックするには、実際どのメモリにアクセスしているかを知る必要があるのでパイプラインシミュレーションを行い動的にチェックする必要があった。ただし、パイプラインシミュレーションでチェックする場合は、シミュレーション処理時間が静的なチェックに比べて遅い、また、問題箇所を発見するには、パイプラインシミュレーションにおいて問題の箇所を活性化させるようなシミュレーション用のパターンが必要となり、すべての箇所を発見できない可能性があるという問題点があった。
【０００９】
この発明は上記問題点を解決するためになされたもので、静的にメモリアクセス競合をチェックすることができるリソース競合チェック装置を得ることを目的とする。
【課題を解決するための手段】
【００１０】
この発明に係る請求項１記載のリソース競合チェック装置は複数の命令が記述された命令群の実行時におけるリソース競合をチェックする装置であって、前記複数の命令はそれぞれ実行時にパイプライン処理可能な複数のステージ処理を有し、前記命令群から、リソース競合の対象となるリソース競合チェック対象命令を抽出してリソース競合チェック対象命令情報を得るリソース競合チェック対象命令抽出手段を備え、前記リソース競合チェック対象命令情報は前記リソース競合チェック対象命令におけるリソース競合の対象となる要チェックステージ処理を規定するステージ処理情報、及び前記要チェックステージ処理が複数のバンクを有するメモリにアクセスするメモリアクセス処理の場合に前記複数のバンクのうちアクセス対象となるバンクを規定するバンク情報を含み、前記リソース競合チェック対象命令情報に基づき、前記複数のバンクのうち同一バンクに同時にアクセスするバンク競合を含むリソース競合が発生するか否かを判定するリソース競合判定手段をさらに備える。
【発明の効果】
【００１１】
この発明における請求項１記載のリソース競合チェック装置におけるリソース競合チェック対象命令抽出手段によって抽出されたリソース競合チェック対象命令情報は、リソース競合チェック対象命令における要チェックステージ処理がメモリアクセス処理の場合に複数のバンクのうちアクセス対象となるバンクを規定するバンク情報を含むため、当該バンク情報を参照することによりバンク競合を含むリソース競合の発生の有無を静的に判定することができる。
【発明を実施するための最良の形態】
【００１２】
＜実施の形態＞
（全体構成）
図１はこの発明の実施の形態であるリソース競合チェック装置の構成を示すブロック図である。なお、本実施の形態ではマイクロコードによって実現されるプログラムのアクセス対象となるメモリ構成がＡバンク及びＢバンクからなる２バンク構成となっていることを前提としている。
【００１３】
同図に示すように、本実施の形態におけるリソース競合チェック装置は、マイクロコードが入力される入力部３１、マイクロコードを構成する命令のリソース競合をチェックするためのリソース競合チェック部３２、リソース競合チェック部３２によってチェックされた結果を出力する出力部３３、および各種テーブルの情報を記憶するための記憶部３４を含む。
【００１４】
入力部３１は、マイクロコードが入力されるマイクロコード入力部３５を含む。リソース競合チェック部３２は始点情報設定部３６、トレース部３７及びチェック部３８から構成される。
【００１５】
記憶部３４は、命令情報格納テーブル３９、リソース競合チェック対応テーブル４０、始点情報格納テーブル４１、チェックポイント設定テーブル４２及びバンク情報格納テーブル５０から構成される。
【００１６】
命令情報格納テーブル３９はマイクロコードを構成する各命令に関し、当該命令および当該命令の次にフェッチされる命令を格納する。バンク情報格納テーブル５０はマイクロコードを構成する命令のうち、メモリアクセスを行う命令（メモリアクセス命令）に関し、アドレス値と、ソース及びデスティネーション対象となるメモリのバンク名を対応づけた（メモリ）バンク情報を格納する。
【００１７】
リソース競合チェック対応テーブル４０はリソース競合が発生し得る命令のチェック項目（要チェックステージ処理）および当該要チェックステージ処理が実行されるパイプライン処理順序を示すステージ数を格納する。始点情報格納テーブル４１は始点情報設定部３６によって設定された始点情報を格納する。チェックポイント設定テーブル４２はリソース競合が発生する命令のチェックポイント、チェックポイント毎に分類されたチェック項目（要チェックステージ処理）及びバンク情報を格納する。
【００１８】
リソース競合チェック部３２内のマイクロコード入力部３５は、入力されたマイクロコード（命令群）における各命令を命令情報格納テーブル３９に格納する。さらに、マイクロコード入力部３５はマイクロコードにおける各命令についてソース先、デスティネーション先のバンクを記述したバンク指定部分から認識されるバンク情報をバンク情報格納テーブル５０に格納する。
【００１９】
リソース競合チェック部３２内において、始点情報設定部３６は、マイクロコード入力部３５に入力されたマイクロコードを構成する命令が入力され、各命令の次のサイクルでフェッチされる命令の情報を命令情報格納テーブル３９に格納する。
【００２０】
さらに、始点情報設定部３６は、リソース競合チェック対応テーブル４０を参照することにより、リソース競合のチェックが必要なリソース競合チェック対象命令を抽出し、当該命令のアドレス、チェック項目（要チェックステージ処理内容）、競合の起こり得るステージ数を始点情報格納テーブル４１に格納するともに、バンク情報格納テーブル５０を参照して上記要チェックステージ処理がメモリアクセス処理の場合はアクセス対象となるバンクを規定した（メモリ）バンク情報を始点情報格納テーブル４１に格納する。
【００２１】
トレース部３７は、始点情報設定部３６によって得られた始点情報格納テーブル４１に基づいて、当該命令のアドレスからリソース競合の起こり得るステージ数までトレースして、要チェックステージ処理が実行されるタイミングを示すトレース結果をチェックポイントとしてチェックポイント設定テーブル４２に格納する。チェック部３８は、トレース部３７によってトレース結果が格納されたチェックポイント設定テーブル４２に基づいて、リソース競合が発生するか否かを判定し、その判定結果を出力部３３に出力する。
【００２２】
（前提となるメモリ構成）
図２は本実施の形態のリソース競合チェック装置においてリソース競合チェック対象のプログラムが実行されるコンピュータシステムにおけるメモリ構成例を示すブロック図である。同図に示すように、メモリ構成は、シングルポートメモリ２バンク(A、B)で構成されている。すなわち、演算器２０は２つのソース先であるメモリ１０，１１からソース０，ソース１として、ソースデータＳＤ０（ＳＤ１），ＳＤ１（ＳＤ０）を読み出し、演算結果をデスティネーションデータＤＤ２としてメモリ１０，１１のうちの一方に書き込む。この際、メモリ１０がＡバンクに、メモリ１１がＢバンクに割り当てられる。
【００２３】
命令としては、SIMDをサポートできるので、SIMD数に応じてメモリの数は、増やすことが可能である。たとえば、4SIMDの場合、メモリとしては、0,1,2,3の４個で、それぞれのメモリが２バンク構成となる。
【００２４】
図２の構成において、バンクＡ，バンクＢの識別はメモリアドレスで識別する。例えば、メモリのアドレス空間が０〜２５５番地である場合に、アドレスが０〜１２７番地の場合をＡバンク、１２８〜２５５番地の場合Ｂバンクと区別する。上述したように、シングルポート構成のメモリを対象としてため、同一バンクへの同時アクセスはできない。なお、バンクの識別は、使用するメモリの仕様で決まり、上記識別内容は一例に過ぎない。（メモリ）バンク情報は、命令のソース、デスティネーションにメモリを指定しているメモリアクセス命令に対して必要となる。
【００２５】
また、リソース競合チェック対応テーブル４０には、予めリソース競合候補となる命令、当該命令のチェック項目およびステージ数が予め格納されている。
【００２６】
（リソース競合チェック内容）
図３は、本実施の形態におけるリソース競合チェック装置の処理内容を示すフローチャートである。以下、同図を参照して、本実施の形態のリソース競合チェック装置の処理手順を説明する。
【００２７】
まず、ステップＳ１において、マイクロコード入力部３５は、マイクロコード（命令群）を構成する複数の命令を順次入力し、各命令を命令情報格納テーブル３９に格納すると共に、バンク情報格納テーブル５０にバンク情報を格納する。
【００２８】
図４はマイクロコード入力部３５内に入力されるマイクロコードＭＣ１の一例を示す説明図である。同図に示すように、マイクロコードＭＣ１は複数の命令ＣＭ１〜ＣＭ１０から構成された命令群である。
【００２９】
同図において、命令ＣＭ１〜ＣＭ３としてレジスタロード命令「ＬＤＲ」が実行され、命令ＣＭ４〜ＣＭ７としてメモリアクセス演算命令「ＡＤＤ」が実行され、命令ＣＭ７〜ＣＭ１０として無演算命令「ＮＯＰ」が実行される。
【００３０】
命令ＣＭ１〜ＣＭ３における各ＬＤＲ命令はレジストロード命令であり、命令ＣＭ１はアドレスレジスタ（インデックスレジスタ）ＡＲ００への“０”のロード、命令ＣＭ２はアドレスレジスタＡＲ１１への“８０”（HEX）（１２８（DEC））のロード、命令ＣＭ３はアドレスレジスタＡＲ２０への“０”のロードを意味する。
【００３１】
命令ＣＭ４〜ＣＭ７における各ＡＤＤ命令はソース０，ソース１で示されたアドレスのメモリから読み出したソースデータＳＤ０，ＳＤ１に基づき演算し、その演算結果であるデスティネーションデータＤＤ２をデスティネーションで示されたメモリのアドレスに書き込む命令である。ＡＤＤ命令において、ソース０はアドレスレジスタＲ０ｘ，ソース１はアドレスレジスタＲ１y、デスティネーションはアドレスレジスタＲ２ｚを用いることが予め定められており、上記したｘ，ｙ，ｚの指定は命令ＣＭ４〜ＣＭ７それぞれにおいてソース０，ソース１，デスティネーションとして指定する。
【００３２】
例えば、命令ＣＭ４は「ＡＤＤ  ＦＡ：（Ｒ０＋１０），ＦＢ：（Ｒ１＋１０），ＦＡ：（Ｒ０＋１０）」と記述されており、ｘ＝０，ｙ＝１，ｚ＝０となるため、指定されるアドレスレジスタはソース０においてＡＲ００，ソース１においてＡＲ１１，デスティネーションにおいてＡＲ２０となる。
【００３３】
したがって、命令ＣＭ４〜ＣＭ７におけるＡＤＤ命令において、ソース０の指定により、｛AR00（アドレスレジスタ）の値＋オフセット値｝（たとえば、命令ＣＭ４の場合はオフセットは０）をアドレスとするメモリの格納値を読み出してソースデータＳＤ０を得る。同様に、ソース１の指定により、｛AR10の値＋オフセット値｝をアドレスとするメモリの格納値を読み出してソースデータＳＤ１を得る。そして、ソースデータＳＤ０，ＳＤ１に基づく演算結果であるデスティネーションデータＤＤ２は、デスティネーションの指定により｛AR20の値＋オフセット値｝をアドレスとするメモリに書き込む。
【００３４】
したがって、命令ＣＭ１でアドレスレジスタＡＲ００には“０”が格納され、命令ＣＭ２でアドレスレジスタＡＲ１１に“８０”（HEX）が格納され、命令ＣＭ３でアドレスレジスタＡＲ２０に“０”が格納されることから、命令ＣＭ４〜ＣＭ７において、メモリのアクセス対象は、ソース０はバンクＡ（０〜３番地）、ソース１はバンクＢ（１２８〜１３１番地）、デスティネーションは（１０〜１３番地）となる。
【００３５】
命令ＣＭ４〜ＣＭ７で記述されるＡＤＤ命令において、「ＦＡ」はＡバンクのメモリへのアクセスを意味し、「ＦＢ」はＢバンクのメモリへのアクセスを意味する。命令ＣＭ４〜ＣＭ７の「ＦＡ」，「ＦＢ」等のバンク指定部分はマイクロコードＭＣ１の作成者によって命令ＡＤＤの一部として記述される。
【００３６】
このように、ＡＤＤ命令等のメモリアクセス命令のバンク指定部分として、アクセス対象のバンク名をマイクロコードＭＣ１の作成者が記述するのは、命令ＣＭ４〜ＣＭ７のＡＤＤ命令はアドレスレジスタＡＲ００等を用いた間接的なアドレス指定であるため、ＡＤＤ命令の記述内容自体から直接アクセスするメモリアドレスが認識できず、アクセス対象となるバンクを認識できないからである。
【００３７】
図５はステップＳ１のマイクロコード入力処理の詳細を示すフローチャートである。以下、同図を参照してステップＳ１の処理手順を説明する。
【００３８】
まず、ステップＳ１１において、図４で示したマイクロコードＭＣ１を入力し、ステップＳ１２において、マイクロコードＭＣ１を構成する各命令ＣＭ１〜ＣＭ１０をアドレス０〜９に対応するように命令情報格納テーブル３９に格納して命令情報格納テーブル３９の一部を完成する。
【００３９】
そして、ステップＳ１３において、マイクロコードＭＣ１を構成する各命令ＣＭ１〜ＣＭ１０それぞれについて、ソース先（ソース０，ソース１）、デスティネーション先となるメモリバンクを規定するバンク情報をアドレス０〜９に対応してバンク情報格納テーブル５０に格納してバンク情報格納テーブル５０を完成する。
【００４０】
以下、ステップＳ１３の処理の詳細を説明する。図６は命令ＣＭ４〜ＣＭ７の詳細を示す説明図である。同図に示すように、アドレス３〜６に割り当てられる命令ＣＭ４〜ＣＭ７の各ＡＤＤ命令は、メモリアクセス命令であり、２つのソース先と１つのデスティネーション先を示すアドレスレジスタとしてＡＲ００，ＡＲ１１及びＡＲ２０が用いられる。
【００４１】
例えば、アドレス３の命令コードＯＰとして「ＡＤＤ」、ソース０（ソースデータＳＤ０用）としてＦＬＭ（ＡＲ００＋０）が、ソース１（ソースデータＳＤ１用）としてＦＬＭ（ＡＲ１０＋１）が、デスティネーション（デスティネーションデータＤＤ２用）としてＦＬＭ（ＡＲ２０＋１０）がそれぞれ認識される。なお、ＦＬＭは"Floating Local Memoly"を意味する。
【００４２】
この際、マイクロコード入力部３５は命令ＣＭ４〜ＣＭ７のソースデータＳＤ０，ソースデータＳＤ１及びデスティネーションデータＤＤ２用として、「ＦＡ」が記述されている場合はＡバンクへのメモリアクセスと認識し、「ＦＢ」が記述されている場合はＢバンクへのメモリアクセスと認識する。
【００４３】
すなわち、図７に示すように、アドレス３〜６に格納される命令ＣＭ４〜ＣＭ７は全てソースデータＳＤ０はＡバンクより得られ、ソースデータＳＤ１はＢバンクより得られ、デスティネーションデータＤＤ２はＡバンクに格納することが認識される。
【００４４】
図８はステップＳ１３の実行後におけるバンク情報格納テーブル５０の内容を表形式で示す説明図である。同図に示すように、バンク情報格納テーブル５０には、アドレス０〜９に対応して、ソース０（ソースデータＳＤ０）、ソース１（ソースデータＳＤ１）及びデスティネーション（デスティネーションデータＤＤ２）のバンク情報が格納される。同図に示すように、アドレス０〜２及び７〜９の命令ＣＭ１〜ＣＭ３，命令ＣＭ８〜ＣＭ１０においてはメモリアクセスを行わないため全て“０”が格納され、アドレス３〜５の命令ＣＭ４〜ＣＭ７においてはメモリアクセス命令であるため、ソースデータＳＤ０，ＳＤ１及びデスティネーションデータＤＤ２それぞれのバンク情報（“Ａ”あるいは“Ｂ”）が格納される。
【００４５】
このように、マイクロコード入力部３５は、図７で示すように、メモリアクセス命令ＣＭ４〜ＣＭ７についてのバンク情報を認識することにより、図８で示すように、マイクロコードＭＣ１を構成する全ての命令ＣＭ１〜ＣＭ１０についてバンク情報が格納されたバンク情報格納テーブル５０を得ることができる。
【００４６】
図３に戻って、ステップＳ１（ステップＳ１１〜Ｓ１３）後に実行されるステップＳ２において、始点情報設定部３６は指定情報設定処理を実行する。すなわち、始点情報設定部３６は、命令情報格納テーブル３９に格納された命令に基づいて、次のサイクルでフェッチされる命令の情報を命令情報格納テーブル３９に追加的に格納する。例えば、０番地のＬＤＲ命令（ＣＭ１）において次にフェッチする命令は、１番地のＬＤＲ命令であるので、次にフェッチされる命令としてＬＤＲ[１]を命令情報格納テーブル３９内のアドレス０の次にフェッチされる命令の欄に格納する。
【００４７】
さらに、始点情報設定部３６は、リソース競合チェック対応テーブル４０を参照してリソース競合のチェックに必要な命令であるリソース競合チェック対象命令を抽出し、当該リソース競合チェック対象命令のチェック項目（要チェックステージ処理）、要チェックステージ処理のパイプライン実行順を示すステージ数をリソース競合チェック対応テーブル４０から抽出し、始点情報格納テーブル４１に格納する。
【００４８】
図９はステップＳ２終了後の命令情報格納テーブル３の内容を表形式で示す説明図である。同図に示すように、アドレス０〜９に対応して命令ＣＭ１〜ＣＭ１０の命令が格納されており、各命令において次にフェッチされる命令がＬＤＲ[１]等で格納されている。なお、ＬＤＲ[ｉ]はアドレスｉのＬＤＲ命令を意味し、ＡＤＤ[ｊ]はアドレスｊのＡＤＤ命令を意味する。このように、ステップＳ１においてマイクロコード入力部３５によって各アドレスに対応する命令が格納され、ステップＳ２において始点情報設定部３６によって各命令の次にフェッチされる命令が追加的に格納されることにより、命令情報格納テーブル３９が完成する。
【００４９】
図１０は予め記憶部３４内に格納されているリソース競合チェック対応テーブル４０の一例を示す説明図である。同図に示すように、リソース競合チェック対応テーブル４０は、リソース競合チェック対象命令として「ＬＤＲ」，「ＡＤＤ」が格納されており、「ＬＤＲ」についてはチェック項目（要チェックステージ処理）として「レジスタ書き込み競合（ステージ数４）」が記述されており、「ＡＤＤ」についてはチェック項目として「メモリ読み出し競合（ステージ数３）」，「演算器競合（ステージ数４）」及び「メモリ書き込み競合（ステージ数６）」が格納されている。
【００５０】
リソース競合チェック対応テーブル４０によって、命令ＬＤＲにはステージ数４においてレジスタ書き込み競合の可能性を有する要チェックステージ処理が存在し、命令ＡＤＤにはステージ数３においてメモリ読み出し競合、ステージ数４において演算器競合、ステージ数６においてメモリ書き込み競合の可能性を有する３つの要チェックステージ処理が存在することを認識することができる。
【００５１】
始点情報設定部３６は、リソース競合チェック対応テーブル４０を参照して命令情報格納テーブル３９に格納された各命令をチェックすることにより、アドレス０〜２に記述された命令ＣＭ１〜ＣＭ３のＬＤＲ命令とアドレス３〜６に記述された命令ＣＭ４〜ＣＭ７のＡＤＤ命令をリソース競合チェック対象命令であることを認識する。したがって、始点情報設定部３６は、アドレスに対応して、リソース競合チェック対象命令（ＬＤＲ、ＡＤＤ）の命令コードＯＰ、チェック項目、及びステージ数を始点情報格納テーブル４１に格納する。上述したチェック項目及びステージ数が要チェックステージ処理の内容を規定する要チェックステージ処理情報となる。
【００５２】
さらに、始点情報設定部３６は、リソース競合チェック対象命令で、かつメモリアクセス命令である命令ＣＭ４〜ＣＭ７のＡＤＤ命令に関し、チェック項目が「メモリ読み出し競合」の場合は読み出しデータであるソースデータＳＤ０，ＳＤ１のバンク情報を格納し、チェック項目が「メモリ書き込み競合」の場合は書き込みデータであるデスティネーションデータＤＤ２のバンク情報を格納する。その結果、リソース競合チェック対象命令情報となる始点情報格納テーブル４１は完成する。
【００５３】
図１１はステップＳ２実行後の始点情報格納テーブル４１内容を表形式で示す説明図である。同図に示すように、始点情報格納テーブル４１において、アドレス“０”、命令「ＬＤＲ」、チェック項目「レジスタ書き込み競合」、およびステージ数“４”が始点情報Ｇ１として格納される。また、ＬＤＲは、メモリアクセス命令に該当ないため命令であるため、バンク情報の欄には、“０”を格納する。
【００５４】
また、３番地のＡＤＤ命令（ＣＭ４）に関しては、始点情報格納テーブル４１に、アドレス“３”、命令「ＡＤＤ」、チェック項目「メモリ読み出し競合」及びステージ数３、さらに、チェック項目「演算器競合」及びステージ数”４“、加えて、チェック項目「メモリ書き込み競合」及びステージ数“６”を始点情報Ｇ２として格納する。
【００５５】
また、ソース０（ソースデータＳＤ０）はバンクＡ、ソース１（ソースデータＳＤ１）はバンクＢ、デスティネーション（デスティネーションデータＤＤ２）はＡバンクが指定されているため、始点情報格納テーブル４１における「メモリ読み出し行」のバンク情報として“Ａ”,“Ｂ”（ソース０，ソース１）を格納し、「メモリ書き込み競合」のバンク情報として“Ａ”を格納する。
【００５６】
このように、始点情報設定部３６は、命令情報格納テーブル３９、リソース競合チェック対応テーブル４０、及びバンク情報格納テーブル５０を参照して、図１１で示す内容の始点情報格納テーブル４１を完成する。
【００５７】
図３に戻って、ステップＳ３において、トレース部３７は、ステップＳ２で完成された始点情報格納テーブル４１に基づいて、リソース競合チェック対象命令の要チェックステージ処理毎に開始アドレスから、格納されたステージ数だけトレースし、トレース結果であるチェックポイントを、当該リソース競合チェック対象命令名、チェック項目及びバンク情報を対応させる形式で、チェックポイント設定テーブル４２に格納する。
【００５８】
図１２はステップＳ３実行後のチェックポイント設定テーブル４２の内容を表形式で示す説明図である。以下、図１２を参照しつつ、ステップＳ３の処理について詳述する。
【００５９】
トレース部３７は、始点情報格納テーブル４１から始点情報Ｇ１を取り出し、アドレス０のＬＤＲ命令におけるレジスタ書き込み競合の可能性があるステージ数４の要チェックステージ処理のトレースを行い、チェックポイント“３”（アドレス０から４ステージ後のポイント）を認識する。その結果、チェックポイント“３”に対応づけて当該命令（ＬＤＲ［０］）、チェック項目（レジスタ書き込み競合）及びバンク情報“０”をチェックポイント設定テーブル４２に格納する。
【００６０】
同様に始点情報Ｇ２，Ｇ３を取り出し、チェックポイント４，５に対応付けて当該命令及びチェック項目並びにバンク情報をチェックポイント設定テーブル４２に格納する。
【００６１】
次に始点情報Ｇ４を取り出し、アドレス３のＡＤＤ命令におけるメモリ読み出し競合の可能性があるステージ数３の要チェックステージ処理のトレースを行い、チェックポイント“５”を認識する。その結果、チェックポイント“５”に対応づけて当該命令（ＡＤＤ［３］）、チェック項目（メモリ読み出し競合）及びバック情報「Ａ，Ｂ」を格納する。
【００６２】
続けて、アドレス３のＡＤＤ命令における演算器競合の可能性があるステージ数４の要チェックステージ処理のトレースを行いチェックポイント“６”を認識し、さらに、メモリ書き込み競合の可能性のあるステージ数６の要チェックステージ処理のトレースを行いチェックポイント“８”を認識する。チェックポイント“６”，“８”それぞれに対応づけて、当該命令、チェック項目及びバック情報を格納する。
【００６３】
このように、始点情報Ｇ４に関し、チェックポイント“５”に対応付けて当該命令（ＡＤＤ［３］）、チェック項目（メモリ読み出し競合）及びバンク情報（Ａ，Ｂ）をチェックポイント設定テーブル４２に格納し、チェックポイント“６”に対応付けて当該命令（ＡＤＤ［３］）、チェック項目（演算器競合）及びバンク情報（“０”）をチェックポイント設定テーブル４２に格納し、チェックポイント８に対応付けて当該命令（ＡＤＤ［３］）、チェック項目（メモリ書き込み競合）及びバンク情報（Ａ）をチェックポイント設定テーブル４２に格納する。
【００６４】
以下、同様にして、始点情報Ｇ５，Ｇ６，Ｇ７についても、要チェックステージ処理毎にトレースして、チェックポイントを認識し、認識したチェックポイントに対応づけて、当該命令、チェック項目及びバック情報を格納する。
【００６５】
その結果、最終的に図１２に示すように、チェックポイント数毎に分類して当該命令、チェック項目、バンク情報が格納されたにチェックポイント設定テーブル４２を得ることができる。
【００６６】
図３に戻って、ステップＳ４において、チェック部３８は、ステップＳ３で完成されたチェックポイント設定テーブル４２に基づいて、リソース競合が発生するか否かを判定する。以下、ステップＳ４の処理内容の詳細を説明する。
【００６７】
チェック部３８は、チェックポイント設定テーブル４２から、チェックポイント“３”のデータを取り出す。チェックポイント“３”に対応して格納されたデータは、リソース競合チェック対象命令が１つ（ＬＤＲ［０］）のみであるので、チェックポイント“３”においてリソース競合は発生しないと判定される。
【００６８】
同様に、チェックポイント“４”もリソース競合チェック対象命令が１つ（ＬＤＲ［１］）のみであるので、リソース競合は発生しないと判定される。
【００６９】
次に、チェックポイント“５”のデータを取り出す。チェックポイント“５”において、２つのリソース競合チェック対象命令（ＬＤＲ［２］，ＡＤＤ［３］）が存在する。ただし、命令ＬＤＲ［２］のチェック項目は「レジスタ書き込み競合」であり、命令ＡＤＤ［３］のチェック項目は「メモリ読み出し競合」であるため、レジスタ書き込みとメモリ読み出しとは同時に動作可能であるため、リソース競合は発生しないと判定される。
【００７０】
次に、チェックポイント“６”のデータを取り出す。チェックポイント“６”において、２つのリソース競合チェック対象命令（ＡＤＤ［４］，ＡＤＤ［３］）が存在する。ただし、命令ＡＤＤ［４］のチェック項目は「メモリ読み出し競合」であり、命令ＡＤＤ［３］のチェック項目は「演算器競合」であるため、演算器実行とメモリ読み出しとは同時に動作可能であるため、リソース競合は発生しないと判定される。
【００７１】
次に、チェックポイント“７”のデータを取り出す。チェックポイント“７”において、２つのリソース競合チェック対象命令（ＡＤＤ［５］，ＡＤＤ［４］）が存在する。ただし、命令ＡＤＤ［５］のチェック項目は「メモリ読み出し競合」であり、命令ＡＤＤ［４］のチェック項目は「演算器競合」であるため、演算器実行とメモリ読み出しとは同時に動作可能であるため、リソース競合は発生しないと判定される。
【００７２】
次に、チェックポイント“８”のデータが取り出される。チェックポイント“８”において、３つのリソース競合チェック対象命令（ＡＤＤ［６］，ＡＤＤ［５］，ＡＤＤ［３］）が存在する。そして、命令ＡＤＤ［６］のチェック項目は「メモリ読み出し競合」であり、命令ＡＤＤ［５］のチェック項目は「演算器競合」であり、命令ＡＤＤ［３］のチェック項目は「メモリ書き込み競合」となる。演算器実行とメモリ読み出し及びメモリ書き込みとは同時に動作可能であるため、リソース競合は発生しない。
【００７３】
しかし、メモリ読み出しとメモリ書き込みとは同時に同一バンクにアクセスする場合はバンク競合（メモリアクセス競合）によるリソース競合が生じる可能性がある。したがって、チェック部３８により、命令ＡＤＤ［６］の「メモリ読み出し競合」のバンク情報である「Ａ，Ｂ」と、命令ＡＤＤ［３］の「メモリ書き込み競合」のバンク情報である「Ａ」とを比較され、バンクＡにおいてバンク競合が生じると判定される。したがって、トレース部３７はチェックポイント“８”においてバンク競合が生じると判定する。
【００７４】
次に、チェックポイント“９”のデータを取り出す。チェックポイント“９”において、２つのリソース競合チェック対象命令（ＡＤＤ［６］，ＡＤＤ［４］）が存在する。ただし、命令ＡＤＤ［６］のチェック項目は「演算器競合」であり、命令ＡＤＤ［４］のチェック項目は「メモリ書き込み競合」であるため、演算器実行とメモリ書き込みとは同時に動作可能であるため、リソース競合は発生しないと判定される。
【００７５】
次に、チェックポイント“１０”のデータを取り出す。チェックポイント“１０”において、１つのリソース競合チェック対象命令（ＡＤＤ［５］）しか存在しないため、リソース競合は発生しないと判定される。
【００７６】
最後に、チェックポイント“１１”のデータを取り出す。チェックポイント“１１”において、１つのリソース競合チェック対象命令（ＡＤＤ［６］）しか存在しないため、競合は発生しないと判定される。
【００７７】
図１３はチェックポイント“８”における命令ＡＤＤ［３］と命令ＡＤＤ［６］とのバンク競合状態を模式的に示す説明図である。同図に示すように、命令ＡＤＤ［３］はプログラムカウンタＰＣが“３”の時にフェッチ（Ｆ）され、以降、プログラムカウンタＰＣが１インクリメントする毎にデコード（Ｄ），メモリ読み出し（Ｒ）、演算実行（Ｅ）、データ転送（Ｔ）及びメモリ書き込み（Ｗ）処理が順次実行される。その結果、プログラムカウンタＰＣが“３”から６ステージ後の“８”となるとき書き込み処理が実行される。
【００７８】
一方、命令ＡＤＤ［６］はプログラムカウンタＰＣが“６”の時にフェッチ（Ｆ）され、以降、プログラムカウンタＰＣが１インクリメントする毎にデコード（Ｄ），メモリ読み出し（Ｒ）、演算実行（Ｅ）、データ転送（Ｔ）及びメモリ書き込み（Ｗ）処理が順次実行される。その結果、プログラムカウンタＰＣが“６”から３ステージ後の“８”となるとき読み出し処理が実行される。
【００７９】
したがって、命令ＡＤＤ［３］におけるデスティネーションデータＤＤ２のバンクＡのメモリ１０に書き込む要チェックステージ処理処理と命令ＡＤＤ［６］におけるソースデータＳＤ０としてバンクＡから読み出す要チェックステージ処理との間にバンク競合によるリソース競合が生じる。
【００８０】
図３に戻って、ステップＳ５において、出力部３３は、ステップＳ４における判定結果（チェックポイント“８”において命令ＡＤＤ［６］のメモリ読み出し処理と命令ＡＤＤ［３］のメモリ書き込み処理との間にバンク競合が生ずる）を出力する。
【００８１】
（効果）
図１４は図４で示したマイクロコードＭＣ１に対応する従来のマイクロコードＭＣ２を示す説明図である。同図において、マイクロコードＭＣ２の命令ＣＭ２１〜ＣＭ３０がマイクロコードＭＣ１の命令ＣＭ１〜ＣＭ１０に対応する。
【００８２】
命令ＣＭ４〜ＣＭ７と命令ＣＭ２４〜ＣＭ２７との比較から明らかなように、従来のマイクロコードＭＣ２において、メモリアクセス命令であるＡＤＤを記述する際、ソースデータＳＤ０，ＳＤ１及びデスティネーションデータＤＤ２としてアクセス対象のメモリのバンク情報は記述されていない。
【００８３】
また、特許文献１に開示されたリソース競合チェック装置等の従来のリソース競合チェック装置はメモリアクセス命令に関し、メモリ書き込み競合等の同一内容のチェック項目（要チェックステージ処理）に対してのみリソース競合をチェックできるに過ぎなかった。
【００８４】
したがって、従来のリソース競合チェック装置では、マイクロコードＭＣ２に対して静的にバンク競合を含むリソース競合をチェックすることができなかった。
【００８５】
一方、本実施の形態においては、記憶部３４にバンク情報が格納可能なバンク情報格納テーブル５０を設け、マイクロコードに基づきバンク情報格納テーブル５０を完成するマイクロコード入力部３５、バンク情報格納テーブル５０に基づいてバンク情報を有する始点情報格納テーブル４１を完成する始点情報設定部３６、始点情報格納テーブル４１に基づいてトレース処理を行いチェックポイント設定テーブル４２を完成するトレース部３７、及びチェックポイント設定テーブル４２に基づいてバンク競合を含むリソース競合の有無を判定するチェック部３８を備えることにより、マイクロコードＭＣに対して静的にバンク競合を含むリソース競合をチェックすることができるという、従来のリソース競合チェック装置では達成することが不可能であった効果を奏する。
【００８６】
また、マイクロコードＭＣ１のメモリアクセス命令であるＡＤＤ命令等は、ソース，デスティネーション先のバンク情報を規定するバンク指定部分（ＦＡ，ＦＢ）を含んで記述されているため、従来はパイプラインシミュレーションの実行によってしかチェックできなかった間接アドレス参照方式によるメモリアクセス命令に対してもバンク競合を静的に正確にチェックすることができるため、マイクロコードの開発期間の短縮を図ることができる効果を奏する。
【００８７】
また、マイクロコードＭＣ１に記述するバンク情報は、バンク競合チェック専用のデータであるので、オブジェクトコード段階における命令コードサイズには影響を与えないという利点も有する。
【図面の簡単な説明】
【００８８】
【図１】この発明の実施の形態であるリソース競合チェック装置の構成を示すブロック図である。
【図２】リソース競合チェック対象のプログラムが実行されるコンピュータシステムにおけるメモリ構成を示すブロック図である。
【図３】本実施の形態におけるリソース競合チェック装置の処理内容を示すフローチャートである。
【図４】図１で示したマイクロコード入力部内に入力されるマイクロコードの一例を示す説明図である。
【図５】図３で示したマイクロコード入力処理の詳細を示すフローチャートである。
【図６】図４で示したマイクロコードの一部であるメモリアクセス命令の詳細を示す説明図である。
【図７】メモリアクセス命令についてのバンク情報の認識内容を模試的に示す説明図である。
【図８】図３で示したマイクロコード入力処理後のバンク情報格納テーブルの内容を表形式で示す説明図である。
【図９】図３で示した始点情報設定処理後の命令情報格納テーブルの内容を表形式で示す説明図である。
【図１０】図１で示したリソース競合チェック対応テーブルの一例を示す説明図である。
【図１１】図３で示した始点情報設定処理後の始点情報格納テーブルの内容を表形式で示す説明図である。
【図１２】図３で示したトレース処理実行後のチェックポイント設定テーブルの内容を表形式で示す説明図である。
【図１３】図３で示したリソース競合チェック時におけるバンク競合状態を模式的に示す説明図である。
【図１４】図４で示したマイクロコードに対応する従来のマイクロコードを示す説明図である。
【符号の説明】
【００８９】
１０，１１  メモリ、２０  演算器、３１  入力部、３２  リソース競合チェック部、３３  出力部、３４  記憶部、３５  マイクロコード入力部、３６  始点情報設定部、３７  トレース部、３８  チェック部、３９  命令情報格納テーブル、４０  リソース競合チェック対応テーブル、４１  始点情報格納テーブル、４２  チェックポイント設定テーブル。
【図１】
2008102604.tif 000003
【図２】
2008102604.tif 000004
【図３】
2008102604.tif 000005
【図４】
2008102604.tif 000006
【図５】
2008102604.tif 000007
【図６】
2008102604.tif 000008
【図７】
2008102604.tif 000009
【図８】
2008102604.tif 000010
【図９】
2008102604.tif 000011
【図１０】
2008102604.tif 000012
【図１１】
2008102604.tif 000013
【図１２】
2008102604.tif 000014
【図１３】
2008102604.tif 000015
【図１４】
2008102604.tif 000016