(57)【要約】命令実行遅延は、システム設計が完成された後に変更されて、当該システムが命令実行に影響を及ぼす種々の条件を動的に考慮することを可能にする。幾つかの実施形態において、この動的遅延は、当該処理システムによって実行されるべきアプリケーションによって決定される。他の実施形態において、この動的遅延は、以前に実行された命令の履歴を分析することによって決定される。更に他の実施形態において、この動的遅延は、与えられたアプリケーションに利用可能な処理資源を評価することによって決定される。何れにしても、この遅延は命令毎のベース、複数の命令毎のベースで、またはアプリケーション毎のベースで動的に変更されてよい。プロセッサ命令実行は、第一の組の1以上の命令についての第一の遅延値、および第二の組の１以上の命令についての第二の遅延値を決定することによって制御されてよい。前記命令組の実行は、対応する遅延値に基づいて遅延される。【選択図】図１
2010501102.tif 000002
【特許請求の範囲】
【請求項１】
命令の実行を制御する方法であって：
第一の組の複数の命令について第一の遅延値を決定することと；
前記第一の遅延に基づいて、前記第一の組の１以上の命令の実行を遅延させることと；
第二の組の１以上の命令について第二の遅延値を決定することと；
前記第二の遅延に基づいて、前記第二の組の１以上の命令の実行を遅延させること
を含んでなる方法。
【請求項２】
請求項１に記載の方法であって、更に、個々の一つの前記遅延値を対応する１以上の命令の組に関連付けることを含んでなる方法。
【請求項３】
請求項２に記載の方法であって、個々の一つの前記遅延値を対応する１以上の命令の組に関連付けることが、各組の１以上の命令を対応する遅延値でタグ標識することを含んでなる方法。
【請求項４】
請求項１に記載の方法であって、前記遅延値は、コードコンパイル時間、コードロード時間およびコードラン時間の少なくとも一つの間に決定される方法。
【請求項５】
請求項１に記載の方法であって、前記遅延値は、対応する組の命令に関連付けられたアプリケーションに基づいて決定される方法。
【請求項６】
請求項５に記載の方法であって、前記遅延値は、対応するアプリケーションに利用可能なプロセッサ資源に基づいて決定される方法。
【請求項７】
請求項１に記載の方法であって、前記遅延値は、対応するアプリケーションに利用可能なプロセッサ資源に基づいて決定される方法。
【請求項８】
請求項１に記載の方法であって：前記前記遅延値を決定することは、
投機的命令実行の履歴を維持することと；
前記投機的命令実行の履歴に基づいて、前記遅延値を決定すること
を含んでなる方法。
【請求項９】
請求項８に記載の方法であって、投機的命令実行の履歴を維持することは、実行パイプラインフラッシュの発生を追跡することを含んでなる方法。
【請求項１０】
請求項１に記載の方法であって、前記遅延値は、少なくとも一つの完全な投機的命令実行、非投機的命令実行、一定数の命令処理遅延サイクル後の完全な投機的命令実行、および一部投機的命令実行のうちの少なくとも一つを示す方法。
【請求項１１】
請求項１０に記載の方法であって、前記一部投機的命令実行は、対応する命令が委託されるまで、各命令の実行を保留することを含んでなる方法。
【請求項１２】
請求項１に記載の方法であって：前記遅延値を決定することが、
前記一組の１以上の命令の個々の一つを処理して、対応する遅延値を確認することと；
前記遅延値の保存を指令すること
を含んでなる方法。
【請求項１３】
請求項１２に記載の方法であって：前記一組の１以上の命令の個々の一つの実行を、対応する遅延値に基づいて遅延させることが、
前記レジスタから前記遅延値を検索することと；
前記一組の１以上の命令の個々の一つの実行を、対応する検索された遅延値に基づいて遅延させること
を含んでなる方法。
【請求項１４】
請求項１３に記載の方法であって、前記一組の命令を実行する結果の保存を指示することが、前記一組の命令の１以上に関連付けられた、未委託の命令からの結果を一時的に保存することを含んでなる方法。
【請求項１５】
請求項１４に記載の方法であって、更に、委託される前記一組の１以上の命令に関連付けられた結果を用いて、前記アーキテクトされた状態を更新することを含んでなる方法。
【請求項１６】
請求項１４に記載の方法であって、更に、実行パイプラインフラッシュ条件に応答して、未委託の命令に関連付けられた結果をクリアすることを含んでなる方法。
【請求項１７】
請求項１６に記載の方法であって、前記実行パイプラインフラッシュ条件は、ブランチ誤予測エラー、例外、トラップ、割込み、および障害の少なくとも一つに対応する方法。
【請求項１８】
第一の組の１以上の命令のための第一の遅延値、および第二の組の１以上の命令のための第二の遅延値を決定するように構成された遅延決定ユニットと；
前記第一の遅延に基づいて前記第一の組の１以上の命令の実行を遅延させ、また前記第一の遅延に基づいて前記第一の組の１以上の命令の実行を遅延させように構成された処理ユニットと
を具備してなる処理装置。
【請求項１９】
請求項１８に記載の処理装置であって、前記処理ユニットは更に、個々の一つの遅延値を前記対応する組の１以上の命令に関連付けるように構成される装置。
【請求項２０】
請求項１９に記載の処理装置であって、前記処理ユニットは、前記遅延値の個別の一つを、各組の１以上の命令を対応する遅延値でタグ標識することにより、対応する一組の１以上の命令と関連付けるように構成される装置。
【請求項２１】
請求項１８に記載の処理装置であって、前記遅延決定ユニットは、少なくとも一つのコードコンパイル時間、コードロード時間、およびコードラン時間のうちの少なくとも一つの間に、遅延値を決定するように構成される装置。
【請求項２２】
請求項１８に記載の処理装置であって、前記遅延決定ユニットは、対応する１以上の命令の組に関連付けられたアプリケーションに基づいて遅延値を決定するように構成される装置。
【請求項２３】
請求項２２に記載の処理装置であって、前記遅延決定ユニットは、対応するアプリケーションに利用可能なプロセッサ資源に基づいて前記遅延値を決定するように構成される装置。
【請求項２４】
請求項１８に記載の処理装置であって、前記遅延決定ユニットは、対応するアプリケーションに利用可能なプロセッサ資源に基づいて前記遅延値を決定するように構成される装置。
【請求項２５】
請求項１８に記載の処理装置であって、前記遅延決定ユニットは、投機的命令実行の履歴を維持すること、および該投機的命令実行の履歴に基づいて前記遅延値を決定することにより、前記遅延値を決定するように構成される装置。
【請求項２６】
請求項２５に記載の処理装置であって、前記遅延決定ユニットは、実行パイプラインフラッシュの発生を追跡することにより、投機的命令実行の履歴を維持するように構成される装置。
【請求項２７】
請求項２６に記載の処理装置であって、前記遅延値は、完全な投機的命令実行、非投機的命令実行、一定数の命令処理遅延サイクル後の完全な投機的命令実行、および一部投機的な命令実行のうちの少なくとも一つを指示する装置。
【請求項２８】
請求項２７に記載の処理装置であって、一部投機的な命令実行は、対応する命令が委託されるまで、特定のステージで各命令の実行を停止する装置。
【請求項２９】
請求項２８に記載の処理装置であって、前記遅延決定ユニットは、前記一組の１以上の命令の個々の一つを処理して対応する遅延値を確認すること、およびこの値のレジスタ中への保存を指令することによって、遅延を決定するように構成される装置。
【請求項３０】
請求項２９に記載の処理装置であって、前記処理ユニットは、前記レジスタから前記遅延値を検索し、対応する検索された遅延地に基づいて前記一組の１以上の命令の個々の一つの実行を遅延させ、該一組の命令を実行した結果の保存を指令することによって、前記対応する遅延値に基づいて前記一組の１以上の命令の個々の一つの実行を遅延させるように構成される装置。
【請求項３１】
請求項３０に記載の処理装置であって、前記処理ユニットは、前記一組の命令の１以上に関連した委託されない命令の結果を一時的に保存することによる、前記命令の組を実行したことの結果の保存を指令するように構成される装置。
【請求項３２】
請求項３１に記載の処理装置であって、前記処理ユニットは、更に、委託される前記一組の１以上の命令の少なくとも一つと関連付けられた結果を用いて、前記アーキテクトされた状態を更新するように構成される装置。
【請求項３３】
請求項３１に記載の処理装置であって、前記処理ユニットは、更に、実行パイプラインフラッシュ条件に応答して、未委託の命令と関連付けられた結果をクリアするように構成される装置。
【請求項３４】
請求項３３に記載の処理装置であって、前記実行パイプラインフラッシュ条件は、ブランチ誤予測エラー、実行、トラップ、割り込み、および障害の少なくとも一つに対応する装置。
【請求項３５】
コプロセッサにおいて命令実行遅延を課する方法であって：
関連のプロセッサから受信した遅延値に従って、入力される命令の実行を遅延させることと；
関連のプロセッサからの新たな遅延値の受信に応答して、その後に入力される命令に課される遅延の量を変化させること
を含んでなる方法。
【請求項３６】
プロセッサにおいて命令実行遅延を変更するためのコンピュータプログラム製品であって：
前記プロセッサにより実行される１以上のアプリケーションに基づいて、第一の組の１以上の命令のための第一の遅延値および第二の組の１以上の命令のための第二の遅延値を決定するためのプログラムコードと；
前記プロセッサに前記遅延地を与えるためのプログラムコード
を含んでなるコンピュータプログラム製品。
【発明の詳細な説明】
【発明の分野】
【０００１】
本発明は、一般的にはマイクロプロセッサに関し、特に、命令実行を動的に遅延させることに関する。
【関連技術の説明】
【０００２】
現代の処理システムは、慣用的に、メインプロセッサまたは中央プロセッサ、および1以上のコプロセッサを含んでいる。メインプロセッサは一定のタスクをコプロセッサに肩代わりさせる。例えば、浮動小数点処理、算術計算処理、グラフィック処理、信号処理、ストリング処理、暗号化処理、および／またはベクトル処理のタスクは、対応するコプロセッサに肩代わりさせることができる。メインプロセッサに課されるコンピュータ処理の負荷は、プロセッサ集約的タスクを肩代わりさせることによって軽減され、システム特性は改善される。
【０００３】
コプロセッサに肩代わりされる命令は投機的なものであってよい。即ち、メインプロセッサは、該命令が実行のためにコプロセッサに与えられるときに、それが実行されるべきかどうかを最終的に決定していなくともよい。これは、条件付きの分岐命令に関して起きる。条件付きの分岐命令に遭遇したとき、プロセッサは、それが異なるコードストリームにジャンプするか(即ち、分岐がとられるか)、または、該分岐の後の命令で実行が継続されるか（即ち、分岐がとられない）の何れの経路がとられるかを予測する。次いで、該プロセッサまたはコプロセッサは、予測された経路に関連した1以上の命令を投機的に実行する。分岐命令が後で決定されたときに、当該経路は誤って予測されたと決定される可能性があり、これは屡々誤予測と称される。分岐誤予測が生じたときは、誤予測経路における全ての命令は廃棄またはフラッシュされる。誤予測された経路における命令に関して行われる全ての仕事は不要であるが、やはり実質的であり得るので、電力消費に悪影響を及ぼす可能性がある。
【０００４】
誤予測された分岐に付随した悪影響を低減するために、従来のコプロセッサは、固定された命令実行遅延を伴って動作する。従来のコプロセッサによって受信された命令は、固定された遅延に対応する実行遅延を招く。このように、コプロセッサによって受信された命令の実行は、固定された遅延が経過するまで開始されない。プロセッサの設計が「凍結」であれば、命令実行の遅延は該設計を改変することなく修飾することはできない。従って、従来のコプロセッサによって実行される各命令は、実行される特定のソフトウエアアプリケーションまたはそれが実行される環境にかかわりなく、同じ固定された遅延を受ける。しかし、異なるアプリケーションタイプは、異なった命令実行予測可能性をもたらす。即ち、幾つかのアプリケーションタイプに関連付けられた投機的命令は、殆ど常に正しく予測され、従って、分岐誤予測の可能性が比較的低いので、投機的命令実行は非常に信頼性が高い。
【０００５】
例えば、ビデオ復号アプリケーションによって採用される逆変換関数は、ビデオフレーム毎の各マクロブロックについて実行される。逆に、他のアプリケーションタイプに関連付けられた投機的命令の実行は信頼性が低く、実行パイプラインフラッシングの可能性を高くする。例えば、ビデオ復号アプリケーションによって実行されるデブロッキングおよびデリンギングのフィルター関数は、特定のビデオフレームの画素値に依存し、低い予測可能性で実行される。その結果、固定された命令実行遅延は、異なる命令実行予測可能性を有するアプリケーションに関連した投機的命令を実行するときに、プロセッサの特性または能力を妨げる可能性がある。
【０００６】
命令実行遅延は、慣用的には、完全な投機的命令実行を可能にする一方の極端、または投機的命令実行を可能にしない他方の極端に固定される。完全な投機的命令実行モードにおいては、コプロセッサはそれに与えられた各命令を遅延なく、且つ該命令がメインプロセッサによって委託される前に投機的に実行する。従って、この固定された命令実行遅延は実質的にゼロである。この技術は特性のためには有益であるが、投機的命令実行が予測不能になるときには電力効率を阻害する。例えば、高度に投機的な命令は、しばしば誤予測され、従って、ゼロ遅延コプロセッサに対して頻繁に不要なコードを実行させる可能性がある。電力効率は、誤予測された指令に関連した計算が実行パイプラインからフラッシュされる毎に劣化する。しかし、コプロセッサへと送出される新規な命令についての追加のスタートアップ潜伏時間がないため、特性は向上する。
【０００７】
逆に、非投機的実行構成においては、メインプロセッサが対応する命令を委託するまで、コプロセッサは命令実行を遅らせる。この技術は、その後に送出される命令の実行を妨げることによって、高度に投機的な命令についての電力の観点から有益であるが、それはその追加のスタートアップ潜伏時間に起因してシステム特性を阻害する。分岐が屡々正しく予測され、且つ連続的にコプロセッサに供給され得るときは、長いスタートアップ潜伏時間が隠蔽されて、特性は顕著に劣化しない。他方、例えばプロセッサがコプロセッサからの結果を待っているときは、非投機的アプローチは命令の有効潜伏時間を大きく増大させる。
【発明の概要】
【０００８】
ここに教示される方法および装置に従えば、処理システムにおいて実行される命令は、動的に変化可能な命令実行遅延を受ける。該遅延は、完全に投機的または非投機的な実行を生じるように変更することができるが、それはまた、部分的に投機的な実行を生じることができ、その場合、命令は幾つかの投機的計算を実行するが、命令が委託されるまで特定の段階で実行を停止する。更に、典型的には命令がアーキテクトされた状態を更新する準備ができるときまでに投機が決定されることを希望して、該遅延は、設定されたサイクル数の後に完全な投機的実行を許容するように構成することができる。動的なルーチンの実行遅延制御は、命令実行遅延が望ましいかどうか、または如何なる範囲で望ましいかに影響を与える種々の変更条件を、当該処理システムが考慮することを可能にする。
【０００９】
幾つかの実施形態において、この動的遅延は、当該処理システムによって実行されるべきアプリケーションによって決定される。他の実施形態においては、この動的遅延は、以前に実行された命令のヒストリーを分析することによって決定される。更に他の実施形態において、この動的遅延は、所定のアプリケーションに利用可能な処理資源を評価することによって決定される。何れにせよ、この遅延は命令毎のベース、複数の命令毎のベースで、またはアプリケーション毎のベースで動的に変更されてよい。
【００１０】
プロセッサ命令実行は、第一の組の1以上の命令についての第一の遅延値、および第二の組の１以上の命令についての第二の遅延値を決定することによって制御されてよい。前記命令組の実行は、対応する遅延値に基づいて遅延される。遅延決定ユニットは遅延値を決定し、処理ユニットは対応する遅延値に基づいて前記命令組を実行する。遅延決定ユニットは、メインプロセッサまたはコプロセッサに含められてよい。処理ユニットは、メインプロセッサまたはコプロセッサに含められた１以上の実行ユニットを含んでなるものであってよい。
【００１１】
勿論、本発明は上記特徴および利点に限定されない。当業者は、以下の詳細な説明を読み、且つ添付の図面を見ることにより、追加の特徴および利点を理解するであろう。
【図面の簡単な説明】
【００１２】
【図１】図１は、遅延決定ユニットを有する処理システムの実施形態を示すブロック図である。
【図２】図２は、動的な命令実効遅延値を付された命令の実施形態を示すブロック図である。
【図３】図３は、動的な命令実行遅延情報を保存するレジスタの実施形態を示すブロック図である。
【図４】図４は、プロセッサ命令実行を制御するためのプログラム論理の実施形態を示す論理フロー図である。
【図５】図５は、遅延決定ユニットを有するメインプロセッサを含む処理システムの実施形態を示すブロック図である。
【図６】図６は、専用コプロセッサに含められた遅延決定ユニットを有する処理システムの実施形態を示すブロック図である。
【図７】図７は、遅延決定ユニットを有するプロセッサの実施形態を示すブロック図である。
【詳細な説明】
【００１３】
図１は、メインプロセッサもしくは中央プロセッサ１２およびコプロセッサ１４を含む、処理システム１０の実施形態を示している。コプロセッサ１４は、動的な命令実行遅延に基づいてメインプロセッサ１２により提供される命令を実行する。即ち、コプロセッサは、この動的遅延に従って命令実行を遅延させる。設計段階が完了した後に命令実行を変更する能力は、当該処理システム１０が、動的遅延を調節することに基づいて、命令実行に影響を与える種々の条件を動的に明らかにすることを可能にする。
【００１４】
幾つかの実施形態において、遅延決定ユニット１６はメインプロセッサ１２、コプロセッサ１４または異なるコプロセッサ（図示せず）に含まれるか、または該プロセッサに関連付けられ、該遅延決定ユニット１６は、コプロセッサ１４によって実行されるべき1以上の特定組の命令の投機的性質の原因となる。遅延決定ユニット１６は、コプロセッサ１４に関連した命令実行遅延を変化させることによって、命令の投機的性質の原因となる。幾つかの命令は他の命令よりも幾分投機的であってよく、即ち、それらは幾分委託され易くて、それらがメインプロセッサ１２またはコプロセッサ１４におけるアーキテクトされた状態を更新することを可能にしてよい。該アーキテクトされた状態は、プロセッサの命令組によってプログラマーに見える何れかの状態を含んでいる。例えば、命令実行の結果は、メインプロセッサ１２に含められるかまたはこれに関連付けられたレジスタファイル１８の中に保存されてよく、或いはコプロセッサ１４に含められるかまたはこれに関連付けられたレジスタファイル１９の中に保存されてよい。このように、コプロセッサ１４に肩代わりされる各命令または命令の組は、それらの投機的性質に基づく実行遅延を受けてよい。例えば、高度に投機的な命令はより大きな実行遅延を受ける可能性がある一方、より低い投機的な命令はより小さい遅延を受ける可能性がある。
【００１５】
他の実施形態において、遅延決定ユニット１６は、当該処理システム１０によって実行されるべきアプリケーションに利用可能な処理資源の範囲に責任を負う。即ち、遅延決定ユニット１６は、処理速度、メモリー帯域幅、キャッシュサイズ、ディスプレー能力、バッテリーモード、バッテリー寿命、電力節減モード等のような処理資源に基づいて、動的遅延を変更する。このようにして遅延決定ユニット１６は、コプロセッサ１４に関連付けられた実行遅延を変更することによって、処理システム１０が、コプロセッサ１４のシステム特性および電力消費の間のトレードオフを調整することを可能にする。例えば、バッテリー寿命が問題であれば、遅延決定ユニット１６は、メインプロセッサ１２によって最初に委託されるまでは命令が実行されずに電力消費が低減されるように、コプロセッサ１４の遅延を変更してよい。
【００１６】
命令実行遅延の調節をトリガーする条件に関係なく、遅延は、命令毎、複数の命令毎、またはアプリケーション毎のベースで動的に変更されてよい。命令実行遅延を変更する能力は、命令パイプラインフラッシュを妨害しない；むしろ、それは遅延に基づく投機的実行制御を可能にする。ユーザに対する利益は、電力および特性を動的にバランスさせること、および処理システム１０の最適化である。
【００１７】
更に詳細に言えば、メインプロセッサ１２は、コプロセッサ１４を含むように通信的に結合される。メインプロセッサ１２は、命令ユニット２０、１以上の実行ユニット２２、およびレジスタファイル１８を含んでいる。命令ユニット２０は、実行ユニット２２およびコプロセッサ１４に対する命令フローの集中制御を提供する。実行ユニット２２は、１以上のロード／保存ユニット（図示せず）、浮動小数点ユニット（図示せず）、および整数ユニット（図示せず）を含んでよく、命令ユニット２０により送給される命令を実行する。レジスタファイル１８はレジスタのアレイを含んでおり、該アレイはメモリー（図示せず）とメインプロセッサ１２の機能ユニット（例えば実行ユニット２２）との間でデータをステージする。同様に、コプロセッサのレジスタファイル１９は、メモリー（図示せず）とコプロセッサ１４の機能ユニット（例えば実行ユニット２６）との間でデータをステージするレジスタのアレイを含んでいる。レジスタファイル１８は、メインプロセッサ１２によって対応する命令が委託される前に、１時的な結果を保存してよい。このような構成において、レジスタファイル１８はレジスタ再命名を実行してよく、これは物理的レジスタファイルエントリーのアーキテクトされたレジスタ名への動的マッピングを可能にする。このように、一時的結果を保持するレジスタエントリーは、命令が委託されるときに再命名されてよい。同様に、コプロセッサ１４は、それによって発生された一時的結果を、提示命令が委託されるまで保存してよく、そのときにはレジスタファイル１９が更新される。
【００１８】
コプロセッサ１４は、命令ユニットによってオフロードされた命令を受信する。幾つかの実施形態において、コプロセッサ１４は、コプロセッサ機能のみを実行することができ、メモリー（図示せず）から命令を読込んだり、プログラムフロー制御命令を実行したり、入力／出力動作を実行したり、メモリーを管理する等を行ったりすることはできない。従って、メインプロセッサ１２はコプロセッサ１４のために命令を読込み、コプロセッシング機能以外の他の動作を取扱う。他の実施形態において、コプロセッサ１４は汎用プロセッサのようにより多くの機能を実行し、メインプロセッサ１２の制御下において、制限された範囲の追加の機能を実行する。
【００１９】
それとは無関係に、コプロセッサ１４に肩代わりされる命令は、その後のコプロセッサ実行ユニット２６へのディスパッチのために、命令待ち行列２４の中にバッファーされてよく、またはコプロセッサ実行ユニット２６に直接提供されてよい。コプロセッサの命令待ち行列２４は、メインプロセッサ１２の中、またはコプロセッサ１４の外部の他の場所にあってよい。コプロセッサ実行ユニット２６は、命令を実行するための複数のステージ２８、例えば復号ステージ、レジスタアクセスステージ、実行ステージ、および書き戻しステージを含んでよい。コプロセッサ実行ユニット２６のパイプライン化された性質にかかわらず、各命令は、レジスタ３０に保存された動的遅延に基づいてコプロセッサ１４により実行される。更に、コプロセッサに与えられた各命令または一組の命令は、その対応する遅延に関連付けられる。この関連は、レジスタ３０が、未だ完全に実行されない命令に関連付けられた遅延値を喪失することなく、動的に再プログラムされることを可能にする。その結果、命令待ち行列２４および種々の実行ステージ２８を通して移動する命令に関連付けられた遅延は、その後の使用のためにアクセス可能である。一つの実施形態において、コプロセッサ１４により処理される各組の１以上の命令は、図２に示したその割当てられた遅延でタグ標識される。従って、コプロセッサ命令待ち行列２４および実行ユニット２６を通して移動する命令は、復号された命令を含む第一のフィールド３２と、該命令に関連した遅延値を含む第二のフィールド３４と、任意のタグを含む第三のフィールド、および1以上の任意のフラッグビットを含む第四のフィールド３８を含んでなるものである。
【００２０】
動的命令実行遅延値は、種々の形態で表現されてよい。動的命令実行遅延値のためのこれら種々の形態は、別々に、または組み合わせて利用されてよい。一つの実施形態において、動的命令実行遅延は、図３に示したレジスタ３０における投機的命令実行フラッグ４０に対応する。命令は、投機的命令実行フラッグ４０が設定されるときには、遅延なく投機的に実行される。もう一つの実施形態において、動的命令実行遅延は、図３に示したレジスタ３０における命令委託フラッグ４２に対応する。命令委託フラッグ４２が設定されるときは、メインプロセッサ１２によって対応する命令が委託されるまで、即ち、該命令が実行されるべきことをメインプロセッサ１２が最終的に決定するまで、命令実行は遅延される。
【００２１】
更にもう一つの実施形態において、動的命令実行遅延は、図３に示すように、レジスタ３０におけるプロセッササイクル計数フィールド４４に対応している。計数フィールド４４に或る値がロードされるときに、命令実行は、係数フィールド４４に対応するプロセッササイクル数が経過するまで遅延される。他の条件はその実行を遅延させないと仮定すれば、充分なプロセッササイクル数が経過した後に命令実行が開始されてよい。更にもう一つの実施形態において、動的命令実行遅延は、図３に示すように、レジスタ３０におけるパイプラインステージフィールド４６に対応する。パイプラインステージフィールド４６は、それを通して命令実行が処理されるコプロセッサ１４実行パイプラインステージ２８の数を示す。命令実行は、メインプロセッサ１２が対応する命令を委託するまで、指示されたステージで停止する。命令実行は、メインプロセッサ１２が当該命令を委託した後に、残りのステージ２８を再開する。例えば、パイプラインステージフィールド４６に保存された値は、コプロセッサ実行ユニットの書き戻し段階の直前のステージ、例えば、図１に示したステージｎを示してよい。命令は、それらが書き戻し段階に達するまで、遅延なく実行される。従って、その結果は、該命令がメインプロセッサ１２によって委託されるまでアーキテクトされた段階を更新せず、命令が委託されない場合には暫定的な結果がフラッシュされることを可能にする。
【００２２】
図１に戻ると、遅延決定ユニット１６は、図４のステップ１００に示すように、個々の命令または命令群に関連付けられるべき動的命令実行遅延を決定する。この遅延決定ユニット１６は、動的遅延を発生するのに適したファームウエアおよび／またはハードウエアを含んでいる。しかし発生されると遅延値はコプロセッサ１４に提供され、図４のステップ１０２によって示されるように、ここではこの値が、コプロセッサ１４により処理される命令によって受ける実行遅延を決定する。
【００２３】
幾つかの実施形態において、遅延決定ユニット１６は、処理システム１０によって実行されるべきアプリケーションに基づいて、動的命令実行遅延を決定する。即ち、該アプリケーションが適切な実行遅延を指示し、或いは適切な遅延が該アプリケーションによって、または該アプリケーションのために決定され得る。一つの実施形態において、該アプリケーションは、該アプリケーションに利用可能な処理資源、例えば処理速度、メモリー帯域幅、キャッシュサイズ、表示能力、バッテリーモード、バッテリー寿命、電力節減モード等に基づいて、動的遅延を決定する。
【００２４】
もう一つの実施形態において、アプリケーションは、該アプリケーションが許容し得る命令実行遅延に基づいて動的遅延を決定する。例えば、幾つかのアプリケーション、例えば、高サイクル計数のバッチ処理を行うアプリケーション（ここでは計算が行われた後に結果が顕著に消費される）は、高いシステム特性に悪影響を及ぼすことなく、高い命令実行遅延を許容することができる。逆に、他のアプリケーション、例えば短い命令組を有するか、または直ちに結果を必要とするアプリケーションは、高い命令実行遅延を許容することができない。
【００２５】
システム特性は、命令実行遅延を適合させることによって、個別のアプリケーションに対して最適化することができる。処理システム１０によって実行される各アプリケーションは、命令実行遅延を、例えば命令毎、複数の命令毎、またはアプリケーション毎のベースで調節してよい。アプリケーションは、例えばＪａｖａ（登録商標）ジャストインタイムコンパイラを使用してコンパイル時間の間に、アプリケーションロード時間の間に、またはアプリケーション実行時間（ラン時間とも称される）の間に、動的遅延を決定してよい。何れにしても、遅延決定ユニット１６は、望ましい命令実行遅延を指示する命令をメインプロセッサ１２に提供する。この命令に応答して、メインプロセッサ１２は、該動的遅延値をコプロセッサレジスタ３０に直接書き込んでよい。或いは、メインプロセッサ１２は該命令をコプロセッサ１４に回付し、そこではコプロセッサ１４が該命令を復号し、それに従ってレジスタ３０を更新する。
【００２６】
他の実施形態では、遅延決定ユニット１６は、ブランチ履歴データに基づいて動的命令実行遅延を決定する。一つの実施形態において、遅延決定ユニット１６は、ブランチ履歴データ、例えばブランチ予測精度を示すデータの表５０を保持している。一つの実施形態において、ブランチ履歴データは実施パイプラインフラッシュの頻度に対応する。その関係において、遅延決定ユニット１６は、コプロセッサ１４がその命令待ち行列２４から命令をフラッシュする各時間を追跡し、これらの発生を、各フラッシュを生じさせた対応する命令に関連付ける。このデータは、一定の命令が如何に投機的であるかの指標を提供する。ある命令がより投機的であるほど当該命令に割当てられ得る遅延は大きく、逆もまた同様である。
【００２７】
もう一つの実施形態において、ブランチ履歴データは、メインプロセッサ１２に含まれるブランチ処理ユニット（図示せず）によって維持されるデータ、例えばブランチ履歴表（図示せず）に維持されるデータに対応する。命令または一組の命令がコプロセッサ１４に肩代わりされるとき、遅延決定ユニット１６は履歴表５０にアクセスして、該命令がメインプロセッサ１２によって委託される可能性が大きいか小さいかを決定する。命令が投機的であるほど、該命令に割当てられる遅延は大きくなる。投機性が小さい命令については、逆のことが当てはまる。
【００２８】
更に他の実施形態では、遅延決定ユニット１６は、動的命令実行遅延を決定するためにハイブリッドアプローチを用いる。ハイブリッドアプローチに従えば、処理システムによって実行されるべきアプリケーションは、遅延決定ユニット１６に保持されている履歴データを使用して、動的遅延値を決定する。即ち、該アプリケーションは履歴表５０を探索して、該アプリケーションを構成する命令に割当てるべき実行遅延を決定する。該ハイブリッドアプローチは、個々のアプリケーションのための最適な命令実行遅延を決定するために、プログラムが履歴データにアクセスすることを可能にする。これは、コンパイル時間、ロード時間、またはラン時間の間に起こり得る。
【００２９】
如何にして動的遅延が決定されるかとは無関係に、遅延決定ユニット１６は、先に述べたようにメインプロセッサ１２の中に含められてよい。図５は、遅延決定ユニット１６がメインプロセッサ１２の命令ユニット２０の中に含められ、またはこれと関連付けられる処理システム１０の一実施形態を示している。命令取込みユニット６０は、命令キャッシュ（図示せず）から命令を検索し、これを復号し、該復号された命令を命令待ち行列６２の中にロードする。命令ディスパッチユニット６４は、待ち行列中で大気中の命令を適切な実行ユニット２２へとディスパッチする。ブランチ処理ユニット（ＢＰＵ）６６はブランチ命令を検出し、検出されたブランチのタイプに応じて、例えばブランチ標的アドレスおよび／または特定のブランチが取られるかどうかを予測することによって、種々のブランチ予測機構を実行する。ＢＰＵは、最近実行されたブランチンの採用／不採用のブランチ履歴表（ＢＨＴ）６８を保持する。
【００３０】
遅延決定ユニット１６は、ＢＨＴ６８にアクセスして、ＢＨＴ６８により追跡された履歴を有する命令に割当てられた動的遅延値を決定してよい。一実施形態において、遅延決定ユニット１６は、その履歴表５０にＢＨＴ６８のそれを補充する。遅延決定ユニット１６は、ＢＨＴ６８に保存された情報を使用して、例えば、以前に採用／または不採用であったブランチ履歴の強さまたは弱さに基づいて遅延値を決定することにより、動的命令実行遅延値を決定する。結果として得られた動的遅延値は、先に説明したように、肩代わりされた命令の実行を遅延させるためにコプロセッサ１４に提供される。
【００３１】
もう一つの選択肢として、図６は処理システムの一つの実施形態を示しており、ここでは遅延決定ユニット１６が、１以上の他のコプロセッサ１４および／またはメインプロセッサ１２のための動的命令実行遅延を決定するための専用として、コプロセッサ７０に含められている。他のコプロセッサ１４およびメインプロセッサ１２の各々は、前記専用コプロセッサ７０によって発生された動的遅延情報を保存するためのレジスタを含んでいる。専用コプロセッサ７０は、全体のシステム動作をモニターして、他のコプロセッサ１４およびメインプロセッサ１２の各々のために何れの動的遅延が最適であるかを決定する。こうして、前記専用プロセッサ７０は、他のコプロセッサ１４およびメインプロセッサ１２の各々のために独特に適した動的遅延値を決定してよい。専用のコプロセッサ７０は、ここで先に開示した実施形態の何れかに従って、例えば、処理システム１０により実行されるべきアプリケーションによって、以前に実行された命令の履歴を分析することによって、または所定のアプリケーションに利用可能なシステム資源を評価することによって、動的遅延値を決定してよい。
【００３２】
先にここで開示した種々の動的遅延決定の実施形態は、その大部分においてコプロセッサを用いて説明したが、それらはメインプロセッサ１２に含められた実行ユニット２２にも等しく適用可能である。即ち、１以上のメインプロセッサ実行ユニット２２は、遅延決定ユニット１６によって決定された動的遅延値を使用して、内部命令実効タイミングを制御してよい。これに関連して、図７は、メインプロセッサ１２の１以上の実行ユニット２２に関連付けられた命令実行遅延を制御するための、遅延決定ユニット１６を含むメインプロセッサの一実施形態を示している。
【００３３】
実行ユニット２２は、命令を実行するための複数のステージ８２、例えば復号ステージ、レジスタアクセスステージ、実行ステージおよび書き戻しステージを含んでよい。メインプロセッサ１２によって内部的に実行されるべき命令は、後で実効するために命令待ち行列８０の中にバッファーされてよく、或いは、実行ステージ８２の最初のステージに直接提供されてよい。実行ユニット２２のパイプラインおよび待ち行列の性質とは無関係に、命令実行は、１以上のレジスタ３０に保存された動的命令実行遅延に基づいている。命令実行遅延の動的変更を可能にするために、実行ユニット２２に与えられる各組の１以上の命令は、その対応する遅延と関連付けられる。こうして、レジスタ３０は未だ実効されていない以前の命令に割当てられた遅延値を喪失することなく、動的に再プログラムされてよい。動的遅延値は、ここで先に開示した実施形態の何れかに従って決定されてよい。また、遅延決定ユニット１６は、メインプロセッサ１２に含められた各実行ユニット１８について異なる動的遅延を決定して、実効単位毎のベースでの命令実行タイミング制御を可能にしてよい。
【００３４】
処理システム１０の中で実効される少なくとも幾つかの命令は、動的に変化する遅延値に基づいて前実行遅延を受ける。幾つかの実施形態において、動的遅延は、処理システム１０により実行されるべきアプリケーションによって決定される。アプリケーションに基づく遅延調節は、コンパイル時間、ロード時間、またはラン時間において行うことができる。他の実施形態において、動的遅延は、先に実行された命令の履歴を分析することによって決定される。更に他の実施形態では、動的遅延は、与えられたアプリケーションに利用可能な処理資源を評価することによって決定される。にもかかわらず、動的命令実行遅延はメインプロセッサ１２またはコプロセッサ１４によって決定されてよい。動的遅延は、ゼロ遅延、サイクル、またはステージおよび事象に基づくものであってよい。ステージおよび事象に基づく遅延は、特定の事象が生じるまで（例えば委託を受けるまで）、命令待ち行列を含む特定のステージに保持される命令をもたらす。該遅延は、命令ごと、複数の命令毎、またはアプリケーション毎のベースで動的に変更されてよい。
【００３５】
上記範囲の変形例および応用を念頭に置けば、本発明は上記の記載によって制限されず、また添付の図面によっても制限されないことが理解されるべきである。本発明は、特許請求の範囲およびその法的均等物によってのみ限定されるものである。
【図１】
2010501102.tif 000003
【図２】
2010501102.tif 000004
【図３】
2010501102.tif 000005
【図４】
2010501102.tif 000006
【図５】
2010501102.tif 000007
【図６】
2010501102.tif 000008
【図７】
2010501102.tif 000009
【国際調査報告】
2010501102.tif 000010
2010501102.tif 000011