| 【発明の名称】 |
クイック・デコード命令を用いるための方法およびデータ処理システム |
| 【発明者】 |
【氏名】マウリシオ・ブレターニッツ,ジュニア
|
| 【要約】 |
【課題】通常のオプコードをクイック・オプコードで上書きする必要がない、クイック・デコード命令の使用方法およびデータ処理システムを提供する。
【解決手段】キャッシュ(230)のキャッシュ・ラインは、変更可能命令を含む。変更可能命令は、中央演算装置(210)(CPU)によってデコードされ、CPUはこの変更可能命令に関連する機能を実行する。変更可能命令を実行した後、CPU(210)は、変更可能命令の実行結果に基づいて、キャッシュ(200)に関連する命令変更ビットをセットする。後続の変更可能命令の配置プロセスの間、CPUデコード部(212)が、命令変更指示子に基づいて、変更された命令を変更可能命令と交換する。 |
【特許請求の範囲】
【請求項1】データ処理システム(200)であって:メモリ内において複数の状態を有する命令毎のビットフィールド;および中央演算装置(210);から成り、前記中央演算装置は前記ビットフィールドのステータスに基づいて、複数の意味を有するオプコードを認識し;前記ビットフィールドは前記オプコードに関連付けられ;前記中央演算装置は、前記オプコードの実行中に、自動的に前記ビットフィールドを変更することを特徴とするデータ処理システム(200)。 【請求項2】命令実行方法であって:a)中央演算装置による実行のために命令を取り込む段階; b)前記命令に関連して格納されたビットフィールドを検査する段階であって、複数のビットフィールド・ステータスを有する前記ビットフィールドを検査する段階; c)前記複数のビットフィールド状態に基づいて、複数の命令の意味の内どの1つを前記命令に割り当てるかを決定する段階;およびd)前記命令の実行の一部として、前記ビットフィールドを自動的に更新する段階;から成ることを特徴とする方法。 【請求項3】データ処理システム(200)であって:メモリ内に複数の状態を有する命令毎のビットフィールド;および中央演算装置(210);から成り、前記中央演算装置は前記ビットフィールドのステータスに基づいて、複数の意味を有するオプコードを認識し;前記ビットフィールドは前記オプコードに関連付けられ;前記中央演算装置は、第1回目の前記オプコードの実行の間に、自動的に前記ビットフィールドを変更することを特徴とするデータ処理システム(200)。 【請求項4】データ処理システム(200)であって:キャッシュ・メモリに2つの状態が格納される命令毎の1ビット・ビットフィールド;および中央演算装置(210);から成り、前記中央演算(210)は、前記1ビット・ビットフィールドのステータスに基づいて、2つの意味を有するオプコードを有し;前記1ビット・ビットフィールドは前記オプコードに関連付けられており;前記中央演算装置(210)は前記オプコードの実行中に、前記1ビット・ビットフィールドを自動的に変更し;前記中央演算装置(210)は、第1回目の前記オプコードの実行において、前記1ビット・ビットフィールドのステータスを自動的に変更する;ことを特徴とするデータ処理システム(200)。 【請求項5】データ処理システム(200)であって:元の命令を含むメモリ位置を有するメモリ;第1状態および第2状態を有する命令変更指示子;実行部(211);および前記メモリに結合され前記元の命令を受信し、かつ前記実行部(211)に結合され命令の実行を行うデコード部(212);から成り、前記デコード部(212)は、前記命令変更指示子が前記第1状態にある場合、前記元の命令を前記実行部(211)に供給し;前記デコード部(212)は、前記命令変更指示子が前記第2状態にある場合、別の命令を前記実行部(211)に供給することを特徴とするデータ処理システム(200)。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、一般的に命令のデコードおよび実行に関し、特に命令の条件付きデコード処理に関するものである。 【0002】 【従来の技術】JAVAバイト・コード・インタプリタ(JAVA byte code interpreter)は、通常バージョンおよびクイック・バージョンを有する多数の命令を有する。最初にこれらの命令の1つの通常オプコード(opcode)を見つけたとき、多数のチェックが起動される。これらのチェックは各々、通常は時間の形状のある量のオーバーヘッドを伴う。通常命令に対応するクイック命令は、関連するオーバーヘッドの全てを発生させることなく、命令の機能を実行する。 【0003】ジャワ・コード・インタプリタが、クイック・バージョンを有する命令オプコードを実行する場合、図1の従来技術に示すように、この命令を含むメモリ位置を別のクイック・バージョンで上書きする。その結果、以降このメモリ位置から取り込んだ場合、クイック・バージョンを実行し、したがって、このオプコードの通常バージョンが必要とするチェックを繰り返さない。 【0004】 【発明が解決しようとする課題】このような既存のコードの無視に伴う問題の1つに、変更された命令をメモリにライト・バック(write back)しなければならないために、オーバーヘッドが更に増加することがあげられる。キャッシュを用いる場合、キャッシュ内の命令が変更されるだけでなく、ある時点において、キャッシュ・ラインにフラッシュ(flush) が行われた場合に、このキャッシュ・ライン全体をメモリにライト・バックしなければならない場合もある。キャッシュの構成によっては、キャッシュに変化が起こったときにはいつでも、外部メモリも更新し、キャッシュと一致させなければならないこともある。これは、ライト・スルー・モード(write throughmode)として知られている。変更されたコードをメモリに再度移動させなければならないことにより、メモリ帯域の使用が増大し、このためにシステム動作全体の低速化を招く。加えて、既存のオプコードを上書きする必要性のために、追加のステップが必要となり、システム性能の低下に至る可能性がある。したがって、通常のオプコードをクイック・オプコードで上書きする必要性をなくすことができれば、有益であろう。 【0005】 【課題を解決するための手段】概して言えば、本発明の好適実施例においては、キャッシュ・ラインは変更可能命令(modifiable instruction)を含む。この変更可能命令は、中央演算装置(CPU)によってデコードされ、CPUが変更可能命令に関連する機能を実行する。変更可能命令を実行した後、CPUは、変更可能命令の実行結果に基づいて、命令変更ビットをセットする。後続の変更可能命令配置プロセスの間、CPUデコード部(212)は、命令変更指示子がセットされたという事実に基づいて、変更された命令を変更可能命令で自動的に置き換える。命令変更指示子を使用することにより、変更可能命令を他の実施例で無効にする必要はもはやなくなり、これによってシステムの時間および帯域が節約される。 【0006】 【発明の実施の形態】図2は、メモリ220およびキャッシュ230に結合されたCPU210を、ブロック図状で示す。キャッシュ230は、キャッシュ・ライン0ないしキャッシュ・ラインNから成る。各キャッシュ・ラインには、命令変更指示子が関連付けられている。図2では、これは、キャッシュ・ラインの1ビットの拡張部として示されている。 【0007】小型のプログラム・サイズを保存しつつ、効率的なプログラムの実行を達成するために、適応型オプコード(adaptive opcode) が用いられている。通常、適応型オプコードが用いられるのは、オプコードに関連する命令の機能的な実施態様が、実行時のシステムまたは状態情報に依存する場合である。JAVAは、適応型オプコードを用いる言語の一例である。例えば、JAVAは、ロード(LOAD)命令およびロード・クイック(LOADQ)命令を有する。命令LOADは、プログラムの実行中に、適応的に変更され、LOADQ命令となることができる。例をあげて説明すると、JAVAのLOADは、実行時に計算するためにアクセスすべきデータの供給源へのオフセットを必要とする。一旦計算したなら、その供給源、したがってオフセットは、通常変化せず、したがって、後続のアクセス時におけるクイック実行のために必要な供給源情報を維持するLOADQ命令がある。従来技術のシステムでこれは行うには、図1に示したように、LOAD命令をLOADQ命令で上書きしていた。 【0008】本発明の一実施例では、コード変更は、命令変更指示子を維持することによって行われる。図2を参照して、メモリ220は、図示しない供給源から複数のオプコードを受信する。複数のオプコードは、適応型オプコードを含む。適応型オプコードを含むメモリ220内のメモリ位置への第1のアクセスの間、処理システム200は、キャッシュ230からキャッシュ・ミスを受信し、実行すべき命令がキャッシュ内にないことを示す。キャッシュ・ミスを受信すると、処理システム200は、メモリ220から実行すべき命令を取り込み、キャッシュ230内のキャッシュ・ラインの1つを充填する。キャッシュ230内のキャッシュ・ラインが充填された場合、命令変更指示子ビットはクリアされる。 【0009】命令変更指示子をクリアすることにより、CPU210は、デコード部212を通じて、取り込まれたこの指示子に関連する命令が変更されていないことを知る。こうして、CPC210は、実行部211を通じて、通常命令即ちLOADを実行する。CPU210による通常命令の実行によって、命令変更指示子ビットがセットされ、この命令位置への後続のコールにおいては、適応型オプコードがコールされることが示される。例えば、JAVAの場合、命令変更ビットがセットされた場合、LOAD命令はLOADQ命令と交換することができる。 【0010】キャッシュ・ラインがフラッシュされる場合、他のデータで置き換えられたことを示し、命令変更指示子をメモリ220に格納する必要はない。これは、ライト・バック(write back)またはライト・スルー(write through) 処理を実行しなければならない場合のオーバーヘッドを防止する。一般的に言えば、最低使用頻度キャッシュ・ラインにフラッシュが行われるが、フラッシュされるラインは頻繁には用いられていないことを示す。したがって、相当な時間量が節約される訳ではないので、ライトバック処理を実行する必要はない。 【0011】尚、命令変更指示子(ビット)は、必ずしもキャッシュ・ラインの一部でなくてもよいことを注記しておく。重要なのは、各キャッシュ・ラインには命令変更ビットが関連付けられていることのみである。また、実行される適応型オプコードに2つ以上の可能な代替物がある場合、命令変更指示子も2ビット以上としてよいことを注記しておく。 【0012】他の実施例では、CPU210は、各キャッシュ・ラインの命令変更指示子部分とは別個の変更アレイを含む。命令フローが所与のキャッシュ・ラインに渡った場合、CPU210の変更アレイを初期化して、各命令に関連する命令変更指示子の状態を示す。所与のキャッシュ・ライン内の各命令に対して、1つの命令変更指示子がある。したがって、現キャッシュ・ラインから実行が継続する限り、CPU210の変更アレイのみが更新され、各命令変更ビットの現ステータスを示す。制御が現キャッシュ・ライン外に流れた後にのみ、次のキャッシュ・ラインへの移行、あるいはフロー遠回り命令(flow indirection instruction)によって、CPU210のアレイ内の情報は適切なキャッシュ・ラインに転送される。 【0013】これは、所与の命令が変更される場合においても、CPU210およびキャッシュ230間のバス上の帯域使用を防止するという利点がある。CPU210の変更アレイ内に現キャッシュ・ラインの命令変更指示子を保持することにより、CPUからキャッシュ230への更新は、キャッシュ・ライン毎に1回だけ行えばよい。 【0014】図3は、本発明による方法300を示す。方法300は、矩形の実行ブロック301ないし308,および菱形の判断ブロック310,311を含む。ステップ301において、命令の取り込みから開始し、実行すべき命令を取り込む。次に、ステップ310において、取り込んだ命令が現在キャッシュ内にあるか否かについて判定を行う。この命令がキャッシュ内にある場合、フローはステップ311に進む。逆に、現在キャッシュ内にはない場合、フローはステップ304に進む。ステップ311において、当該命令に関連する命令変更ビットがセットされているか否かについて判定を行う。対応する命令変更ビットがセットされている場合、フローはステップ302に進み、クイック・デコードを実行する。本実施例では、単一ビットのみを用いて通常命令およびクイック命令間の判定を行っているが、ステップ311は、多数の変更された命令の1つを使用すべきか否かに関する判定も可能であることを注記しておく。加えて、命令変更ビットは、実際には、実際の命令ワードのビットの1つとして内蔵する場合もある。 【0015】ステップ311において指示子ビットがセットされていないと判定された場合、フローはステップ303に進む。ステップ303において、通常命令のデコードが開始する。次に、ステップ307において、ステップ303におけるデコードの完了時に、命令変更指示子ビットがセットされる。ステップ310において、取り込まれた命令がキャッシュにないと判定された場合、フローはステップ304に進む。ステップ304において、メモリからの命令取り込みを完了し、メモリからキャッシュにロードする。次に、ステップ305において、命令変更指示子をクリアする。別の実施例では、命令変更子もメモリから受信することができ、この場合、命令変更子がロードされると、現命令が別のデコードのために使用可能か否かが示される。次に、ステップ306において、通常命令のデコードが行われる。次に、ステップ308において、命令変更指示子ビットをセットする。 【0016】本発明の一実施例について記載したが、記載した実施例には多数の変更が可能であることは理解されよう。例えば、キャッシュ・ライン・フラッシュ機構を変更し、変更したキャッシュ・ラインをメモリにライト・バックすることによって、元の命令に対してクイック命令の使用を反映させることも可能である。更に、端的に論じたように、先の説明では、1ビットの情報だけ余分にキャッシュ・ラインに追加することを前提とした。プログラム実行状態または以前のオプコードを含むより多くの情報を保持して、適応型オプコードを作成し、その実行を他の素子の状態によって制御することも可能である。可能な例として、「タッチ・ロード」処理(touch load operation)を有するループがあげられよう。タッチ・ロード処理とは、キャッシュ・ラインを初期状態において作成し、メモリからキャッシュ・ラインをロードする必要性をなくするものである。この場合、ループの第1の通過において、タッチ・ロードを、以降のループによる実行における実際のロードと置き換えることが望ましい。他の代替案としては、通常機能および非選択機能(no-opt function) 間で切り替わる命令を有することがあげられよう。これによって、非選択に置き換わる単一ビットに応じて、キャッシュ・ライン・レベルにおいて、命令の入力および出力の切り替えが可能となる。
|
| 【出願人】 |
【識別番号】390009597 【氏名又は名称】モトローラ・インコーポレイテッド 【氏名又は名称原語表記】MOTOROLA INCORPORATRED
|
| 【出願日】 |
平成9年(1997)7月15日 |
| 【代理人】 |
【弁理士】 【氏名又は名称】大貫 進介 (外1名)
|
| 【公開番号】 |
特開平10−91434 |
| 【公開日】 |
平成10年(1998)4月10日 |
| 【出願番号】 |
特願平9−205455 |
|