(57)【要約】【課題】ある処理の前回の入力値と今回の入力値との比較結果に応じて該処理の実行をスキップするマイクロプロセッサにおいて、入力値の比較を効率良く行う。【解決手段】マイクロプロセッサ１００は、レジスタａの値を保存する退避領域１１２が設けられたメインメモリ１１０と、キャッシュメモリ１２０と、第１と第２のステータスを有するフラグ１８０を有する。このマイクロプロセッサ１００は、フラグリセット命令と、フラグ設定付きメモリリード命令と、フラグ設定付きメモリライト命令と、フラグ設定付きレジスタ設定命令と、フラグ参照付き分岐命令とに対応する。【選択図】図１
2011141619.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリと、
キャッシュメモリと、
第１と第２のステータスを有するフラグとを備えたマイクロプロセッサであって、
前記フラグの設定を伴うメモリリード命令であるフラグ設定付きメモリリード命令と、前記フラグの設定を伴い、メモリリード以外によりデータを得ると共に該データをレジスタに設定するレジスタ設定命令であるフラグ設定付きレジスタ設定命令と、前記フラグの設定を伴うメモリライト命令であるフラグ設定付きライト命令と、フラグリセット命令と、フラグ参照分岐命令とに対応し、
前記フラグリセット命令に従って前記フラグを前記第１のステータスに設定し、
前記フラグ設定付きメモリリード命令に従って読出しを行い、読出し時にキャッシュミスが生じた場合と、リードアドレスが非キャッシュ領域のアドレスであり、かつ読み出したデータが前記リードアドレスに対応するキャッシュデータと異なる場合において、前記フラグを前記第２のステータスに設定し、
前記フラグ設定付きメモリライト命令に従って書込みを行い、書込み時にキャッシミスが生じた場合と、ライトアドレスに対応するキャッシュデータと書込データが異なる場合において、前記フラグを前記第２のステータスに設定し、
フラグ設定付きレジスタ設定命令に従って、今回得られたデータと、該命令の前回の実行により設定されたレジスタの値とを比較し、一致しない場合にのみ、前記フラグを前記第２のステータスに設定すると共に、今回得られたデータで前記レジスタの値を更新し、
前記フラグ参照付き分岐命令に従って、前記フラグを参照し、該フラグが前記第１のステータスであるときには、指定された分岐先への分岐をし、該フラグが前記第２のステータスであるときには、次の命令を実行することを特徴とするマイクロプロセッサ。
【請求項２】
前記メインメモリは、前記フラグ設定付きメモリリード命令と、前記フラグ設定付きメモリライト命令と、前記フラグ設定付きレジスタ設定命令のうちの１つまたは複数の命令の実行を含む第１の処理の処理結果を入力値とする第２の処理の処理結果を保存する退避領域が設けられており、
前記第１の処理の前に前記フラグリセット命令を実行することにより前記フラグを第１のステータスに設定し、
前記第２の処理の前に前記フラグ参照付き分岐命令を実行することにより、前記フラグのステータスが前記第１のステータスである場合に前記第２の処理の実行をスキップし、
前記第２の処理が実行された場合にのみ、前記退避領域に保存された処理結果を今回の処理結果で更新することを特徴とする請求項１に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関する。
【背景技術】
【０００２】
近年、マイクロプロセッサが様々な分野で広く利用されるようになっており、マイクロプロセッサに対して、種々の視点から改良する試みがなされている。
【０００３】
例えば、特許文献１に開示された技術は、キャッシュミスとキャッシュヒット時のコードを夫々作成しておき、キャッシュミスまたはキャッシュヒットが生じた際に、対応するコードに分岐する。この技術によれば、コンバイルの効率を向上させることができるとされている。
【０００４】
また、特許文献２に開示された技術は、ＣＰＵ内（汎用演算ユニット内や浮動小数点演算ユニット内など）に履歴記憶を設け、既に実行した各命令に対して、演算の入力と結果のデータ、主記憶のリード／ライトアドレスとデータなどを履歴記憶に記憶しておく。再度同じ命令（演算命令またはリード／ライト命令）を実行する際に、履歴記憶の内容に応じて演算またはリード／ライトの実行をスキップする。具体的には、演算命令を実行する場合には、現在の入力データと、履歴記憶において記憶され、過去における該演算命令の入力データとを比較し、それらが同じである場合には、演算の実行をスキップする。また、リード／ライト命令を実行する場合には、現在のリード／ライトアドレスと履歴記憶に記憶されたリード／ライトアドレスとを比較し、それらが同じである場合には、リード／ライトの実行をスキップする。こうすることにより、命令の実行時間を短縮し、主記憶に対するロード／ストア操作を抑制することができるとされている。また、実行される命令に対応する履歴情報の有無を判定する時間を短縮するために、命令を命令キューに登録する際に、該命令に対して、対応する履歴情報の有無をＶフィールドに登録する。そして、命令キュー内の命令を実行する際に、そのＶフィールドを参照し、対応する履歴情報があれば、上述した比較を行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−９１４５５号公報
【特許文献２】再公表特許ＷＯ９８／１１４８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
マイクロプロセッサが行う処理のうち、ある処理（処理Ｂとする）の入力値は、他の処理（処理Ａとする）の実行結果である場合がある。この場合において、例えば図１６に示すフローのように、特許文献２の手法を適用することができる。分かりやすいように、例として、処理Ａでは１つの命令（命令Ａ）のみが実行され、処理Ｂでは１つの命令（命令Ｂ）のみが実行される。
【０００７】
ＣＰＵ内に履歴記憶を設け、過去に実行された命令Ｂの入力値と実行結果とを対応付けて記憶するための履歴記憶を設ける。そして、命令Ａの実行により命令Ｂの今回の入力値を得ると（Ｓ１０）、履歴記憶に記憶された命令Ｂの以前の入力値と実行結果を読み込んで、以前の入力値と今回の入力値を比較する（Ｓ１２、Ｓ１４）。比較の結果、以前の入力値のうちに、今回の入力値と同じ入力値がある場合には（Ｓ１４：Ｙｅｓ）、命令Ｂの実行をスキップする。一方、今回の入力値と同じ入力値が無い場合には、今回の入力値を履歴記憶に追加すると共に、命令Ｂを実行する（Ｓ１４：Ｎｏ、Ｓ１６、Ｓ１８）。そして、命令Ｂの今回の実行結果を、履歴記憶に追加する（Ｓ２０）。
【０００８】
図１６に示すフローから分かるように、この手法では、命令Ｂを実行する度に過去の入力値との比較を行う必要がある。特許文献２に記載されたように、命令キューに命令を登録する際に、履歴記憶のＶフィールドに該命令に対応する履歴情報の有無を記載するようにしたとしても、命令Ｂの実行に際して、該命令に対応する履歴情報の有無が分かるようになったに過ぎず、上記比較を省くことができない。
【課題を解決するための手段】
【０００９】
本発明の一つの態様は、マイクロプロセッサである。このマイクロプロセッサは、メインメモリと、キャッシュメモリと、第１と第２のステータスを有するフラグとを備える。
【００１０】
このマイクロプロセッサは、上記フラグの設定を伴うメモリリード命令であるフラグ設定付きメモリリード命令と、上記フラグの設定を伴い、メモリリード以外によりデータを得ると共に該データをレジスタに設定するレジスタ設定命令であるフラグ設定付きレジスタ設定命令と、上記フラグの設定を伴うメモリライト命令であるフラグ設定付きライト命令と、フラグリセット命令と、フラグ参照分岐命令とに対応する。
【００１１】
該マイクロプロセッサは、フラグリセット命令に従ってフラグを第１のステータスに設定する。
【００１２】
また、フラグ設定付きメモリリード命令に従って読出しを行い、読出し時にキャッシュミスが生じた場合と、リードアドレスが非キャッシュ領域のアドレスであり、かつ読み出したデータが前記リードアドレスに対応するキャッシュデータと異なる場合において、フラグを前記第２のステータスに設定する。
【００１３】
また、フラグ設定付きメモリライト命令に従って書込みを行い、書込み時にキャッシミスが生じた場合と、ライトアドレスに対応するキャッシュデータと書込データが異なる場合において、フラグを第２のステータスに設定する。
【００１４】
また、フラグ設定付きレジスタ設定命令に従って、今回得られたデータと、該命令の前回の実行により設定されたレジスタの値とを比較し、一致しない場合にのみ、フラグを第２のステータスに設定すると共に、今回得られたデータでレジスタの値を更新する。
【００１５】
また、フラグ参照付き分岐命令に従って、フラグを参照し、フラグが第１のステータスであるときには、指定された分岐先への分岐をし、フラグが第２のステータスであるときには、次の命令を実行する。
【００１６】
なお、上記態様のマイクロプロセッサを方法やシステムに置き換えて表現したもの、該マイクロプロセッサの一部の処理をコンピュータに実行せしめるプログラム、該マイクロプロセッサを備えた装置なども、本発明の態様としては有効である。
【発明の効果】
【００１７】
本発明にかかる技術によれば、ある処理の前の入力値と今回の入力値との比較結果に応じて該処理の実行をスキップするマイクロプロセッサにおいて、入力値の比較を効率良く行うことができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態にかかるマイクロプロセッサを示す図である。
【図２】図１に示すマイクロプロセッサがフラグ設定付きメモリライト命令を実行するフローチャートである。
【図３】図１に示すマイクロプロセッサがフラグ設定付きメモリリード命令を実行するフローチャートである。
【図４】図１に示すマイクロプロセッサがフラグ設定付きレジスタ設定命令を実行するフローチャートである。
【図５】図１に示すマイクロプロセッサがフラグ参照付き分岐命令を実行するフローチャートである。
【図６】処理例を示す図である。
【図７】図１に示すマイクロプロセッサにより図６に示す処理を実行するための命令コードである。
【図８】図１に示すマイクロプロセッサが図７に示す命令コードを実行するフローチャートである。
【図９】図７に示す命令コードの実行に伴う各構成要素の状態遷移を示す図である（その１）。
【図１０】図７に示す命令コードの実行に伴う各構成要素の状態遷移を示す図である（その２）。
【図１１】図６に示す処理例を本発明とは別の手法で実現する場合の命令コードの一例を示す図である。
【図１２】図１１に示す命令コードの実行に伴い各構成要素の遷移を示す図である。
【図１３】図６に示す処理例を本発明とは別の手法で実現する場合の命令コードの別の例を示す図である。
【図１４】図１３に示す命令コードの実行に伴う各構成要素の状態遷移を示す図である（その１）。
【図１５】図１３に示す命令コードの実行に伴う各構成要素の状態遷移を示す図である（その２）。
【図１６】特許文献２の手法の問題点を説明するための図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００２０】
図１は、本発明の第１の実施の形態にかかるマイクロプロセッサ１００を示す。マイクロプロセッサ１００は、メインメモリ１１０、キャッシュメモリ１２０、メモリＩ／Ｏ１３０と、ＣＰＵ１４０、レジスタ群１５０、バス１９０を備える。
【００２１】
ＣＰＵ１３０は、命令を制御する命令制御ユニット、分岐演算を行う分岐演算ユニット、固定小数点命令とロード／ストア命令を実行する汎用演算ユニット、浮動小数点演算を実行する浮動小数点演算ユニットなどの図示しない構成要素を備える。ＣＰＵ１４０は、レジスタ群１５０内の各レジスタに直接アクセスする一方、バス１９０を介して、メインメモリ１１０、キャッシュメモリ１２０、メモリＩ／Ｏ１３０との間のデータや命令の受渡しを行う。
【００２２】
レジスタ群１５０には、複数のレジスタ（レジスタａ、ｂ、ｃ、・・・）と、フラグレジスタ１８０を備える。
【００２３】
以下において、説明上の便宜のため、フラグレジスタ１８０をフラグ１８０といい、単に「レジスタ」をいう場合には、フラグ１８０以外のレジスタを意味する。
【００２４】
メインメモリ１１０には、レジスタの値を保存するための退避領域１１２が設けられている。
【００２５】
マイクロプロセッサ１００は、以下の点において、キャッシュメモリを備える通常のマイクロプロセッサと異なる。
（１）フラグ１８０を有する。
（３）ＣＰＵ１４０は下記の５つの命令に対応する：
フラグリセット命令、フラグ設定付きメモリリード命令、フラグ設定付きメモリリード命令、フラグ設定付きレジスタ設定命令、フラグ参照付き分岐命令。
【００２６】
フラグ１８０は、ＣＰＵ１４０によりステータスが設定される。フラグレジスタ１８０は、「同一」または「異なる」の２つのステータスを有し、例えば値「０」が「同一」ステータスを示し、値「１」が「異なる」ステータスを示す。
【００２７】
フラグリセット命令は、フラグ１８０のステータスをリセットする命令である。この命令に対して、ＣＰＵ１４０は、フラグ１８０のステータスを２つのステータスのうちの所定の一方に設定する。本実施の形態において、例として、ＣＰＵ１４０は、フラグリセット命令に対して、フラグ１８０のステータスを「０」（同一）に設定する。
【００２８】
フラグ設定付きメモリライト命令は、フラグ１８０の設定を伴うメモリライト命令である。この命令に対して、ＣＰＵ１４０は、通常のメモリライト時の処理以外に、フラグ１８０の設定を行う場合がある。図２は、ＣＰＵ１４０がこの命令を実行するフローチャートの一例である。
【００２９】
ＣＰＵ１４０は、フラグ設定付きメモリライト命令を実行する際に、２つの場合においてフラグ１８０のステータスを、フラグリセット命令により設定されるステータスと異なるステータスすなわち「１」（異なる）に設定する。１つは、キャッシュミスの場合（Ｓ１００：Ｙｅｓ）であり、もう１つは、キャッシュミスではないが、ライトアドレスに対応するキャッシュデータと書込データとが異なる場合（Ｓ１００：Ｎｏ、Ｓ１０８：Ｎｏ）である。
【００３０】
図２に示すように、上記２つの場合において、ＣＰＵ１４０は、フラグ１８０を「１」に設定すると共に、キャッシュデータの更新とメインメモリ１１０への書込みを行う（Ｓ１０２、Ｓ１０４、Ｓ１０６）。キャッシュデータの更新は、具体的には、上記ライトアドレスのデータがキャッシュメモリ１２０に記憶されていない場合、該ライトアドレスのデータをキャッシュメモリ１２０に追加し、キャッシュメモリ１２０に記憶されたライトアドレスのデータと書込データとが異なる場合、キャッシュメモリ１２０に記憶されたライトアドレスのデータを書込データに置換えることである。
【００３１】
上記２つの場合以外（Ｓ１００：Ｎｏ、Ｓ１０８：Ｙｅｓ）、ＣＰＵ１４０は、通常のメモリライトを実行し、フラグ１８０の設定をしない。
【００３２】
フラグ設定付きメモリリード命令は、フラグ１８０の設定を伴うメモリリード命令である。この命令に対して、ＣＰＵ１４０は、通常のメモリリード時の処理以外に、フラグ１８０の設定を行う場合がある。図３は、ＣＰＵ１４０がこの命令を実行するフローチャートの一例である。
【００３３】
ＣＰＵ１４０は、フラグ設定付きメモリリード命令を実行する際に、２つの場合においてフラグ１８０のステータスを「１」（異なる）に設定する。１つは、リードアドレスがメモリＩ／Ｏ１３０を含む非キャッシュ領域を示すアドレスであり、かつメモリＩ／Ｏ１３０に読み出したデータがリードアドレスに対応するキャッシュデータと異なる場合（Ｓ１１０：Ｙｅｓ、Ｓ１１２、Ｓ１１４：Ｎｏ）である。もう１つは、キャッシュミスの場合（Ｓ１１０：Ｎｏ、Ｓ１２０：Ｙｅｓ）である。
【００３４】
図３に示すように、上記２つの場合において、ＣＰＵ１４０は、リードアドレスに対応するキャッシュデータを更新すると共に、フラグ１８０を「１」に設定する（Ｓ１１６、Ｓ１１８）。そして、上記キャッシュデータを、該リード命令により指定されたレジスタに設定する（Ｓ１２２）。
【００３５】
上記２つの場合以外（Ｓ１１０：Ｎｏ、Ｓ１２０：Ｎｏ）、ＣＰＵ１４０は、通常のメモリリードを実行し、リードアドレスに対応するキャッシュデータを、該リード命令により指定されたレジスタに設定する（Ｓ１２２）。この場合、ＣＰＵ１４０は、フラグ１８０の設定をしない。
【００３６】
本発明の説明中でいう「レジスタ設定命令」は、メモリリード以外によりデータを得ると共に該データをレジスタに設定する命令を意味する。例えば、レジスタ変数として割り当てられているレジスタからデータを取得して設定対象のレジスタに設定したり、他のレジスタに格納された値に対して何らかの演算を施して得たデータを設定対象のレジスタに設定したりするなどの命令である。フラグ設定付きレジスタ設定命令は、フラグ１８０の設定を伴うレジスタ設定命令である。この命令に対して、ＣＰＵ１４０は、上述したレジスタ設定命令に対応する処理以外に、フラグ１８０の設定を行う場合がある。図４は、ＣＰＵ１４０がこの命令を実行するフローチャートの一例である。
【００３７】
ＣＰＵ１４０は、フラグ設定付きレジスタ設定命令を実行する際に、今回得られたデータと、該命令の前回の実行により設定されたレジスタの値（レジスタ保存値）とを比較し、一致しない場合にのみ、フラグ１８０を「１」（異なる）に設定すると共に、今回得られたデータで上記レジスタの値を更新する（Ｓ１３０：Ｎｏ、Ｓ１３２、Ｓ１３４）。なお、レジスタ保存値と今回得られたデータとが同じである場合には、ＣＰＵ１４０は、フラグ１８０とレジスタの設定をせずに次の命令に移行する。
【００３８】
フラグ参照付き分岐命令は、フラグ１８０のステータスに応じて、該命令により指定された分岐先への分岐と、次の命令の実行とのいずれかを行う命令である。図５は、ＣＰＵ１４０がこの命令を実行するフローチャートである。
【００３９】
ＣＰＵ１４０は、この命令を実行する際に、まず、フラグ１８０を参照する。フラグ１８０が、２つのステータスのうちの、フラグリセット命令に従って設定されるステータス（本実施の形態では、「０」（同一））である場合（Ｓ１４０：Ｙｅｓ）、ＣＰＵ１４０は、指定された分岐先への分岐を行う（Ｓ１４２）。
【００４０】
一方、ステップＳ１４０において、フラグ１８０が、フラグリセット命令に従って設定されるステータスと異なる場合（Ｓ１４０：Ｎｏ）、ＣＰＵ１４０は、指定された分岐先への分岐をせずに次の命令を実行する。
【００４１】
マイクロプロセッサ１００のこのような構成によれば、第１の処理（以下処理Ａという）の処理結果を入力値とする第２の処理（以下処理Ｂという）の実行の前に、処理Ｂをスキップするか否かの判定を下記のように行うことができる。
【００４２】
まず、処理Ａの実行の前に、フラグリセット命令を実行する。これにより、フラグ１８０は、「０」（同一）に設定される。
【００４３】
そして、処理Ａの各命令を実行する。処理Ａの各命令のうち、リード命令についてはフラグ設定付きメモリリード命令、ライト命令についてはフラグ設定付きメモリライト命令、レジスタ設定付き命令についてはフラグ設定付きレジスタ設定命令を用いるようにすれば、処理Ａの実行が完了した時点で、処理Ａの今回の処理結果と前回の処理結果とが同一であるか否かは、フラグ１８０のステータスにより示される。処理Ｂは、処理Ａの処理結果を入力値とするため、フラグ１８０のステータスは、処理Ｂの今回の入力値と前回の入力値とが同一であるか否かを示すことになる。
【００４４】
例えば、処理Ａは、レジスタａの値とレジスタｂの値を加算してレジスタｃに格納するレジスタ設定命令のフラグ設定付き命令を実行する処理であり、処理Ｂは、レジスタｃの値を入力値とする処理である場合、ＣＰＵ１４０は、レジスタａとレジスタｂの値を加算して和を得、この和と、レジスタｃに格納された、前回の処理Ａの処理結果とを比較する。一致すれば、レジスタｃとフラグ１８０の設定をせずに次の命令に移行する一方、一致しない場合には、フラグ１８０を「１」（異なる）に設定すると共に、レジスタｃの値を新しく得た和で更新する。
【００４５】
また例えば、処理Ａは、所定のリードアドレスからデータをレジスタａに読み出す処理であり、処理Ｂは、レジスタａの値を入力値とする処理である場合、ＣＰＵ１４０は、メモリリードを行い、キャッシュミスの場合と、リードアドレスがメモリＩ／Ｏ１３０を含む非キャッシュ領域を示すアドレスであり、かつメモリＩ／Ｏ１３０に読み出したデータがリードアドレスに対応するキャッシュデータと異なる場合において、リードアドレスに対応するキャッシュデータを更新すると共に、フラグ１８０を「１」に設定する。そして、キャッシュデータを、レジスタａに設定する。それ以外の場合には、ＣＰＵ１４０は、通常のメモリリードを実行し、リードアドレスに対応するキャッシュデータをレジスタａに設定する。
【００４６】
処理Ｂの処理結果は、退避領域１１２を用いて保存する。退避領域１１２における処理Ｂの処理結果の更新は、処理Ｂが実行された場合にのみ行う。処理Ｂの前には、フラグ参照付き分岐命令を実行し、フラグ１８０が「０」であれば処理Ｂをスキップする。後に処理Ｂの処理結果を用いる際に、退避領域１１２から処理Ｂの処理結果を読み出せばよい。勿論、フラグ参照付き分岐命令の前に退避領域１１２から処理Ｂの処理結果を読み出して後の処理に備えるようにしてもよい。
【００４７】
こうすることにより、処理Ａの実行が完了した時点で、フラグ１８０が処理Ｂをスキップするか否かを示すステータスになるため、処理Ｂの入力値を保存する必要が無く、メモリ消費を抑制することができる。さらに、処理Ｂの入力値の比較は、処理Ａの実行中に行われるため、効率が良い。
【００４８】
また、処理Ａに含まれるメモリリード／ライト命令についてフラグ設定付きリード／ライト命令を用い、キャッシュヒット／ミスや、読出データまたは書込データとキャッシュデータの比較結果に応じてフラグ１８０のステータスを設定するので、簡単である。
【００４９】
以下、図６に示す具体的な処理例を用いて詳細に説明する。以下の説明及び図示において、「ＭＥＭ＋数字」は、リードアドレスまたはライトアドレスを意味する。なお、説明を簡潔化するために、誤解が生じない前提下で、「ＭＥＭ＋数字」により該アドレスが示す領域を指す場合もある。
【００５０】
図６に示す処理例は、「ＭＥＭ１」に格納されている値を、「ＭＥＭ２」に格納されている値で除算し、除算結果をレジスタｃに格納する処理である。図６に示すように、この処理を、処理Ａと処理Ｂに分けることができる。処理Ａは、「ＭＥＭ１」と「ＭＥＭ２」に格納されている値をレジスタｂとレジスタｃにそれぞれ読み出す処理であり、処理Ｂは、レジスタｂの値をレジスタｃの値で除算し、除算結果をレジスタａに格納する処理である。
【００５１】
図７は、図６に示す処理を実現するために、マイクロプロセッサ１００が実行する命令コードである。図７の各行の命令を説明する。
【００５２】
１行目は、フラグリセット命令である。この命令の実行により、フラグ１８０のステータスが「０」（同一）に設定される。
【００５３】
２行目は、「ＭＥＭ１」に格納されている値をレジスタｂに読み出すための、フラグ設定付きメモリリード命令である。この命令は、図３に示すフローチャートで実行される。
【００５４】
３行目も、「ＭＥＭ２」に格納されている値をレジスタｃに読み出すための、フラグ設定付きメモリリード命令である。この命令も、図３に示すフローチャートで実行される。
【００５５】
ここで、処理Ａが完了する。処理Ａの実行中に、「ＭＥＭ１」と「ＭＥＭ２」のリード時にキャッシュミスが生じた場合や、読み出したデータがキャッシュデータと異なる場合には、フラグ１８０は「異なる」に変更される。
【００５６】
処理Ａの後、処理Ｂの前に、４行目と５行目の命令が実行される。４行目は、「ＭＥＭ５」に格納されている値をレジスタａに読み出すメモリリード命令である。なお、後述の説明から分かるように、［ＭＥＭ５］は、処理Ｂの結果を保存する退避領域１１２のアドレスである。この命令は、処理Ｂがスキップされた場合に、処理Ｂの処理結果を用いる後の処理のために備えるものであり、フラグ付きである必要が無い。なお、４行目の命令のタイミングは、処理Ａの直後に限らず、５行目のフラグ参照付き分岐命令と、処理Ｂの各命令とを除いた、処理Ｂの処理結果を用いる後処理の前の任意のタイミングであってもよい。
【００５７】
５行目は、フラグ参照付き分岐命令である。この命令は、図５に示すフローチャートで実行される。具体的には、フラグ１８０が「０」（同一）である場合には、指定された分岐先（ここでは８行目）への分岐がなされ、次の命令から、分岐先の直前の命令までの各命令（ここでは６行目〜７行目までの命令）の実行がスキップされる。一方、フラグ１８０が「１」である場合には、分岐が行われず、次の命令が実行される。
【００５８】
６行目は、レジスタｂの値をレジスタｃの値で除算し、除算結果をレジスタａに格納する命令である。この命令により処理Ｂが実行される。
【００５９】
７行目は、レジスタａの値を「ＭＥＭ５」にライトする命令である。「ＭＥＭ５」は、レジスタａの値を保存する退避領域１１２である。本実施の形態では、「ＭＥＭ１」と「ＭＥＭ２」に格納されている値を読み出す前に常にフラグリセット命令が実行されるので、このライト命令は、フラグ設定付きメモリライト命令と通常のライト命令のいずれであってもよい。通常のライト命令の場合、フラグ１８０の設定が行われない。フラグ設定付きメモリライト命令の場合、図２に示すフローチャートで実行されるため、通常のライト命令時の動作に加え、フラグ１８０は「異なる」に設定される場合がある。
【００６０】
図８は、図７に示す命令コードが実行されるフローチャートを示す。まず、フラグ１８０は、「０」（同一）にリセットされる（Ｓ１５０）。そして、図７の２行目と３行目が示す処理Ａが実行される（Ｓ１５２）。なお、処理Ａの実行は、フラグ１８０の操作を含む。
【００６１】
処理Ｂの実行に先立って、退避領域１１２すなわち「ＭＥＭ５」に格納された、処理Ｂの前回の結果をレジスタａに読み出す処理が行われる（Ｓ１５４）。
【００６２】
そして、処理Ｂの実行の前に、フラグ参照付き分岐命令が実行される。フラグ１８０が「０」（同一）であれば（Ｓ１６０：Ｙｅｓ）、処理Ｂはスキップされる。一方、フラグ１８０が「１」（異なる）であれば（Ｓ１６０：Ｎｏ）、処理Ｂは実行されると共に、その結果は退避領域１１２（「ＭＥＭ５」）に書き込まれる。
【００６３】
図９と図１０は、図７に示す命令コードの実行に伴って、関連する構成要素の状態遷移を示す。図９と図１０は、処理Ｂの実行の直前でフラグ１８０が「０」のままである場合と、処理Ｂの前にフラグ１８０が「１」に設定された場合にそれぞれ対応する。また、図中１列目は命令を示し、２列目は、同じ行の左端の命令の実行に要するステップ数（サイクル数）を示す。３列目からは、同じ行の左端の命令が実行される直前の上記各構成要素のそれぞれの状態である。
【００６４】
図９に示すように、１行目の左端で示される１つ目の命令（フラグリセット命令）の実行の直前に、フラグ１８０のステータスが不定であり、レジスタａ、ｂ、ｃに記憶されたデータも不定である。また、メインメモリ１１０におけるアドレス「ＭＥＭ１」、キャッシュメモリ１２０におけるアドレス「ＭＥＭ１」のデータは「１２」である。メインメモリ１１０におけるアドレス「ＭＥＭ２」、キャッシュメモリ１２０におけるアドレス「ＭＥＭ２」のデータは「３」である。メインメモリ１１０におけるアドレス「ＭＥＭ５」、キャッシュメモリ１２０におけるアドレス「ＭＥＭ５」のデータは「４」である。
【００６５】
この命令は、１サイクルで実行が完了する。その実行により、２行目に示されるように、フラグ１８０のステータスは「０」（同一）になる。他の各構成要素の状態は、変らない。
【００６６】
この状態で２行目左端の命令（フラグ設定付きメモリリード命令）が実行される。その実行により、３行目に示されるように、レジスタｂの値は「１２」になる。フラグ１８０を含む他の各構成要素の状態は、変わらない。なお、この命令も、１サイクルで実行が完了する。
【００６７】
この状態で３行目左端の命令（フラグ設定付きメモリリード命令）が実行される。その実行により、４行目に示されるように、レジスタｃの値は「３」になる。フラグ１８０を含む他の各構成要素の状態は、変わらない。なお、この命令も、１サイクルで実行が完了する。
【００６８】
この状態で４行目左端の命令（メモリリード命令）が実行される。その実行により、５行目に示されるように、レジスタａの値は「４」になる。フラグ１８０を含む他の各構成要素の状態は変わらい。なお、この命令も、１サイクルで完了する。
【００６９】
この状態で５行目左端の命令（フラグ設定付き分岐命令）が実行される。フラグ１８０のステータスが「０」であるため、分岐先への分岐がなされる。この命令の実行による構成要素の状態変更が無い。したがって、ここで、処理Ｂの実行がスキップされたものの、処理Ｂの今回の実行結果になるはずの「４」は、レジスタａと退避領域１１２（「ＭＥＭ５」に格納されている。
なお、この命令も、１サイクルで実行が完了する。
これにより、図７に示す命令コードは、計５サイクルで実行完了される。
【００７０】
次に、処理Ｂの前にフラグ１８０が「異なる」に設定された場合を説明する。
図１０に示すように、１行目の左端で示される１つ目の命令（フラグリセット命令）の実行の直前に、フラグ１８０のステータスが不定であり、レジスタａ、ｂ、ｃに記憶されたデータも不定である。また、メインメモリ１１０におけるアドレス「ＭＥＭ１」、キャッシュメモリ１２０におけるアドレス「ＭＥＭ１」のデータは「１２」である。メインメモリ１１０におけるアドレス「ＭＥＭ５」、キャッシュメモリ１２０におけるアドレス「ＭＥＭ５」のデータは「４」である。
【００７１】
しかし、アドレス「ＭＥＭ２」のデータについては、図９の場合と異なる。メインメモリ１１０におけるアドレス「ＭＥＭ２」のデータは「６」であることに対して、キャッシュメモリ１２０におけるアドレス「ＭＥＭ２」のデータは「３」である。
【００７２】
フラグリセット命令は、１サイクルで実行が完了する。その実行により、２行目に示されるように、フラグ１８０のステータスは「０」にされる。他の各構成要素の状態は、変らない。
【００７３】
この状態で２行目左端の命令（フラグ設定付きメモリリード命令）が実行される。その実行により、３行目に示されるように、レジスタｂの値は「１２」になる。フラグ１８０を含む他の各構成要素の状態は、変わらない。なお、この命令も、１サイクルで実行が完了する。
【００７４】
この状態で３行目左端の命令（フラグ設定付きメモリリード命令）が実行される。キャッシュミスが生じたため、該命令の実行により、４行目に示されるように、メインメモリ１１０からアドレス「ＭＥＭ２」のデータ「６」はレジスタｃに読み出され、キャッシュメモリ１２０のアドレス「ＭＥＭ２」のデータは「６」に更新され、フラグ１８０のステータスは「１」（異なる）に設定される。他の各構成要素の状態は、変わらない。
【００７５】
この状態で４行目左端の命令（メモリリード命令）が実行される。その実行により、５行目に示されるように、レジスタａの値は「４」になる。フラグ１８０を含む他の各構成要素の状態は変わらない。
【００７６】
この状態で５行目左端の命令（フラグ設定付き分岐命令）が実行される。フラグ１８０のステータスが「１」（異なる）であるため、分岐先への分岐がなされず、次の行の命令（処理Ｂの命令）への移行がなされる。なお、各構成要素の状態は、変更が無い。
【００７７】
そして、６行目の左端に示す処理Ｂの命令が実行される。その実行により、７行目に示されるように、レジスタａの値は「２」になる。他の構成要素の状態は、変らない。なお、この命令の実行は、３２サイクルを要する。
【００７８】
この状態で、７行目のメモリライト命令が実行される。その実行により、８行目に示されるように、メインメモリ１１０とキャッシュメモリ１２０のアドレス「ＭＥＭ５」のデータは、「２」に更新される。また、このメモリライト命令がフラグ設定付きメモリライト命令であれば、フラグ１８０を「異なる」に設定することは再度行われる。
これにより、図６に示す命令コードが示す処理は、計３８サイクルで完了する。
【００７９】
ここで、図６に示す処理例を他の手法で実現する場合と比較してみる。
まず、処理Ｂの前回と今回の入力値の比較結果に応じて処理Ｂをスキップすることをしない場合と比較する。マイクロプロセッサは、キャッシュメモリ１２０とフラグ１８０に対応する構成要素を備えないものとする。また、処理Ｂの結果を退避領域１１２に退避させることもしない。
【００８０】
図１１は、この場合の命令コードであり、図１２は、図１１に示す命令コードの実行に伴う各構成要素の状態遷移を示す図である。
【００８１】
図１１と図１２から分かるように、処理Ｂの前回と今回の入力値の比較結果に応じて処理Ｂをスキップすることをしないため、処理Ｂの前回と今回の入力値（すなわち処理Ａの前回と今回の処理結果）の関係にかかわらず、図６に示す処理の実現に要するサイクル数は、毎回同じの「３４」である。
【００８２】
本発明の実施の形態のマイクロプロセッサ１００では、処理Ｂの入力値と今回の入力値が同一である場合には５サイクルを要し、異なる場合には３８サイクルを要する。例えば、処理Ｂの前回と今回の入力値が同一である場合と、異なる場合との割合が「５：５」であるときに、マイクロプロセッサ１００は上記手法より３７％程度の処理時間を節約することができる。勿論、処理Ｂの実行回数が多いほど、処理Ｂのサイクル数が多いほど、処理時間を節約することができる。
【００８３】
次に、処理Ｂの前回と今回の入力値の比較結果に応じて処理Ｂをスキップするが、キャッシュメモリを用いない手法の場合と比較する。この場合のマイクロプロセッサは、処理Ｂの前回と今回の入力値を比較するためのフラグを有するが、マイクロプロセッサ１００におけるフラグ１８０と区別するため、以下「同値フラグ」という。
【００８４】
この場合、図６に示す処理を実現するために、図１３に示す命令コードが考えられる。なお、「ＭＥＭ３」と「ＭＥＭ４」は、メインメモリにおける、処理Ｂの前回の２つの入力値のそれぞれの退避領域である。
【００８５】
図１３の１行目は、アドレス「ＭＥＭ１」のデータをレジスタｂに読み出す命令である。この命令の実行により、処理Ｂの今回の１つ目の入力値は、レジスタｂに格納される。
【００８６】
２行目は、アドレス「ＭＥＭ２」のデータをレジスタｃに読み出す命令である。この命令の実行により、処理Ｂの今回の２つ目の入力値は、レジスタｃに格納される。
【００８７】
ここで、処理Ａが完了するが、処理Ｂをスキップするか否かのため、続く３行目は、「ＭＥＭ３」のデータをレジスタｄに読み出す命令である。この命令の実行により、処理Ｂの前回の１つ目の入力値は、レジスタｄに格納される。
【００８８】
４行目は、レジスタｂとｄを比較する命令である。この命令の実行により、処理Ｂの前回の１つ目の入力値と今回の１つ目の入力値とが同一である否かの結果が得られる。この結果は、同値フラグに設定される。
【００８９】
５行目は、同値フラグの値を参照し、次の命令の実行、またはＬＡＢＥ１が示す分岐先（１０行目）への分岐を行う命令である。具体的には、同値フラグが「同一」を示す場合には次の行の命令を実行し、同値フラグが「異なる」を示す場合には、６行目から９行目までをスキップして１０行目のＬＡＢＥ１に分岐する。
【００９０】
６行目は、アドレス「ＭＥＭ４」のデータをレジスタｄに読み出す命令である。この命令の実行により、処理Ｂの前回の２つ目の入力値は、レジスタｄに格納される。
【００９１】
７行目は、アドレス「ＭＥＭ５」のデータをレジスタａに読み出す命令である。この命令の実行により、処理Ｂの前回の処理結果は、レジスタａに格納される。
【００９２】
８行目は、レジスタｃとｄを比較する命令である。この命令の実行により、処理Ｂの前回の２つ目の入力値と今回の２つ目の入力値とが同一である否かの結果が得られる。この結果は、同値フラグに設定される。
【００９３】
９行目は、同値フラグの値を参照し、次の命令の実行、またはＬＡＢＥ２が示す分岐先（１５行目）への分岐を行う命令である。具体的には、同値フラグが「異なる」を示す場合には次の行の命令を実行し、同値フラグが「同一」を示す場合には、１１行目から１４行目までをスキップして１５行目のＬＡＢＥ２に分岐する。
【００９４】
１１行目は、レジスタｂ、すなわち処理Ｂの今回の１つ目の入力値をメインメモリのアドレス「ＭＥＭ３」にライトする命令である。１２行目は、レジスタｃ、すなわち処理Ｂの今回の２つ目の入力値をメインメモリのアドレス「ＭＥＭ４」にライトする命令である。１３行目は、処理Ｂを実行する命令である。１４行目は、レジスタａ、すなわち処理Ｂの今回の処理結果をメインメモリのアドレス「ＭＥＭ５」にライトする命令である。これらの処理により、処理Ｂの今回の２つの入力値と処理結果は、アドレス「ＭＥＭ３」、「ＭＥＭ４」、「ＭＥＭ５」にそれぞれ格納される。
【００９５】
図１４と図１５は、図１３に示す命令コードの実行に伴って、関連する構成要素の状態遷移を示す。図１４は、処理Ｂの今回の２つの入力値が前回の２つの入力値とそれぞれ同様である場合に対応し、図１５は、処理Ｂの１つ目の入力値について前回と今回とで同じであるが、２つ目の入力値については前回と今回とで異なる場合に対応する。
【００９６】
図１４から分かるように、処理Ｂの今回の２つの入力値が前回の２つの入力値と同様である場合に、図１３の命令コードが示す処理は、計９サイクルで完了する。また、図１５から分かるように、処理Ｂの１つ目の入力値について前回と今回とで同じであるが、２つ目の入力値については前回と今回とで異なる場合には、図１３の命令コードが示す処理は、計４４サイクルで完了する。
【００９７】
すなわち、この技術は、処理Ｂの前回と今回の入力値の比較結果に応じて処理Ｂをスキップすることをしない技術より、処理速度を２２％程度速めることができるものの、本発明の実施の形態にかかるマイクロプロセッサ１００ほどの効果を得ることができない。
【００９８】
また、この技術は、処理Ｂの入力値の数が多いほど比較する回数が多く、要するサイクル数も多くなる。さらに、処理Ｂの前回の入力値をすべて記憶しておく必要があるため、入力値の数が多いほどメモリの消費量が大きい。したがって、処理Ｂの入力値の数が多いほど、本発明の技術によるメモリ消費量の削減と高速化の効果がより顕著である。
【００９９】
＜第２の実施の形態＞
図１に示す第１の実施の形態では、処理Ｂの前回と今回１つ目の入力値が同一であるか否か、処理Ｂの前回と今回の２つ目の入力値が同一であるか否かについて、１つのフラグ１８０のみを用い、いずれ一方が「同一」ではない場合に、フラグ１８０を「異なる」に設定するようにしている。それぞれの入力値について別々のフラグを用いるようにしてもよい。
【０１００】
具体的には、フラグ１８０の代わりに、レジスタｂに対応するフラグ１８０ｂと、レジスタｃに対応するフラグ１８０ｃを設ける。処理Ａの実行前にフラグ１８０ｂと１８０ｃをリセットする。そして、処理Ａの実行に伴い、処理Ｂの前回と今回の１つ目の入力値が同一ではない場合（すなわちジメインメモリ１１０からレジスタｂの今回の１つ目の入力をレジスタｂに読み出す際にキャッシュミスが生じた場合と、読み出したデータとキャッシュデータとが異なる場合）にフラグ１８０ｂのステータスを「異なる」に設定する。同様に、処理Ｂの前回と今回の２つ目の入力値が同一ではない場合に、フラグ１８０ｃのステータスを「異なる」に設定する。
【０１０１】
そして、フラグ１８０ｂと１８０ｃのいずれか一方が「異なる」である場合に処理Ｂを実行し、処理結果を退避領域に保存する一方、フラグ１８０ｂと１８０ｃの両方とも「同一」である場合には処理Ｂをスキップする。
このような構成のマイクロプロセッサも、本発明の上述した効果を得ることができる。
【０１０２】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対してさまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【０１０３】
１００  マイクロプロセッサ
１１０  メインメモリ
１１２  退避領域
１２０  キャッシュメモリ
１３０  メモリＩ／Ｏ
１４０  ＣＰＵ
１５０  レジスタ群
１８０  フラグ
１９０  バス
ａ  レジスタ
ｂ  レジスタ
ｃ  レジスタ
【図１】
2011141619.tif 000003
【図２】
2011141619.tif 000004
【図３】
2011141619.tif 000005
【図４】
2011141619.tif 000006
【図５】
2011141619.tif 000007
【図６】
2011141619.tif 000008
【図７】
2011141619.tif 000009
【図８】
2011141619.tif 000010
【図９】
2011141619.tif 000011
【図１０】
2011141619.tif 000012
【図１１】
2011141619.tif 000013
【図１２】
2011141619.tif 000014
【図１３】
2011141619.tif 000015
【図１４】
2011141619.tif 000016
【図１５】
2011141619.tif 000017
【図１６】
2011141619.tif 000018