(57)【要約】      （修正有）【課題】マルチサイクル非パイプライン化命令シーケンシングを処理するシステムおよび方法を提供する。【解決手段】このシステムおよび方法を用いると、非パイプライン化命令が発行ポイントで検出された時に、発行論理が、最高速の非パイプライン化命令を完了できる最小サイクル数のストールを開始する。次に、実行ユニットが、非パイプライン化命令が実際に完了するまでストールを引き継ぐ。実行ユニットは、命令を完了するよりわずかに前に、発行論理へのストールを解放する。【選択図】図５
2006285990.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムにおいて非パイプライン化命令を処理する方法であって、
前記非パイプライン化命令を実行ユニットに発行するステップと、
初期ストール期間の間、前記実行ユニットへの他の命令の発行をストールさせるステップと、
前記初期ストール期間の後にストール要求が前記実行ユニットから受け取られたかどうかを判定するステップと、
ストール要求が前記実行ユニットから受け取られた場合に、追加のプロセッサ・サイクルの間前記実行ユニットへの他の命令の発行をストールさせることを延長するステップと
を含む方法。
【請求項２】
前記初期ストール期間が、最高速の非パイプライン化命令実行の実行を完了するのに必要な最小のプロセッサ・サイクル数である、請求項１に記載の方法。
【請求項３】
ストール要求が前記実行ユニットから受け取られない場合に、他の命令の発行をストールさせることを中止するステップと、
ストール要求が受け取られない場合に、前記非パイプライン化命令をパイプライン命令として前記実行ユニットに再発行するステップと
をさらに含む、請求項１に記載の方法。
【請求項４】
前記方法が、前記データ処理システムのプロセッサの発行ユニット内で実行される、請求項１に記載の方法。
【請求項５】
実行ユニットによる処理のために命令を受け取るステップと、
前記命令がパイプライン化命令または非パイプライン化命令のどちらであるかを判定するステップと
をさらに含む、請求項１に記載の方法。
【請求項６】
前記命令がパイプライン化命令または非パイプライン化命令のどちらであるかを判定するステップが、
前記命令に関連する実行コードを処理するステップと、
前記実行コードをパイプライン命令実行コードのテーブルと比較するステップであって、前記実行コードが前記パイプライン命令実行コードの前記テーブルに存在しない場合に、前記命令が非パイプライン化命令と判定される、ステップと
を含む、請求項５に記載の方法。
【請求項７】
初期ストール期間の間、前記実行ユニットへの他の命令の発行をストールするステップが、
発行論理ユニットをストール状態にするためにステートマシンを使用するステップと、
初期ストール期間が経過するまで、ある状態から別の状態に遷移するステップと
を含む、請求項１に記載の方法。
【請求項８】
前記ステートマシンが、前記実行ユニットへの前記命令の発行の前に非ストール状態であり、前記実行ユニットへの前記命令の発行時に第１ストール状態に遷移する、請求項７に記載の方法。
【請求項９】
ストール要求が受け取られない場合に前記非パイプライン化命令をパイプライン命令として前記実行ユニットに再発行するステップが、前記非パイプライン化命令の結果を次の従属的命令にバイパスすることが可能である時に前記非パイプライン化命令を再発行するステップを含む、請求項３に記載の方法。
【請求項１０】
前記非パイプライン化命令が、乗算、除算、内積、または平方根命令のうちの１つである、請求項１に記載の方法。
【請求項１１】
発行論理ユニットと、
前記発行論理ユニットに結合された実行ユニットと
を含み、前記発行論理ユニットが、
非パイプライン化命令を前記実行ユニットに発行する動作と、
初期ストール期間の間、前記実行ユニットへの他の命令の発行をストールする動作と、
前記初期ストール期間の後にストール要求が前記実行ユニットから受け取られたかどうかを判定する動作と、
ストール要求が前記実行ユニットから受け取られた場合に、追加のプロセッサ・サイクルの間前記実行ユニットへの他の命令の発行のストールを延長する動作と
を実行する論理を含む、プロセッサ。
【請求項１２】
前記初期ストール期間が、最高速の非パイプライン化命令実行の実行を完了するのに必要な最小のプロセッサ・サイクル数である、請求項１１に記載のプロセッサ。
【請求項１３】
前記発行論理ユニットが、
ストール要求が前記実行ユニットから受け取られない場合に、他の命令の発行のストールを中止する動作と、
ストール要求が受け取られない場合に、前記非パイプライン化命令をパイプライン命令として前記実行ユニットに再発行する動作と
を実行する論理をさらに含む、請求項１１に記載のプロセッサ。
【請求項１４】
前記発行論理ユニットが、
実行ユニットによる処理のために命令を受け取る動作と、
前記命令がパイプライン化命令または非パイプライン化命令のどちらであるかを判定する動作と
を実行する論理をさらに含む、請求項１１に記載のプロセッサ。
【請求項１５】
前記発行論理ユニットの前記論理が、
前記命令に関連する実行コードを処理することと、
前記実行コードをパイプライン命令実行コードのテーブルと比較するステップであって、前記実行コードがパイプライン命令実行コードの前記テーブルに存在しない場合に、前記命令が非パイプライン化命令と判定される、ステップと
によって前記命令がパイプライン化命令または非パイプライン化命令のどちらであるかを判定する、請求項１４に記載のプロセッサ。
【請求項１６】
前記発行論理ユニットの前記論理が、
前記発行論理ユニットをストール状態にするためにステートマシンを使用するステップと、
初期ストール期間が経過するまで、あるストール状態から別のストール状態に遷移するステップと
によって、初期ストール期間の間、前記実行ユニットへの他の命令の発行をストールする、請求項１１に記載のプロセッサ。
【請求項１７】
前記ステートマシンが、前記実行ユニットへの前記命令の発行の前に非ストール状態であり、前記実行ユニットへの前記命令の発行時に第１ストール状態に遷移する、請求項１６に記載のプロセッサ。
【請求項１８】
ストール要求が受け取られない場合に前記非パイプライン化命令をパイプライン命令として前記実行ユニットに再発行する前記発行論理ユニットの前記論理が、前記非パイプライン化命令の結果を次の従属的命令にバイパスすることが可能である時に前記非パイプライン化命令を再発行する論理を含む、請求項１３に記載のプロセッサ。
【請求項１９】
前記非パイプライン化命令が、乗算、除算、内積、または平方根命令のうちの１つである、請求項１１に記載のプロセッサ。
【請求項２０】
非パイプライン化命令を処理する、コンピュータ可読媒体内のコンピュータ・プログラムであって、
前記非パイプライン化命令を実行ユニットに発行する命令と、
初期ストール期間の間、前記実行ユニットへの他の命令の発行をストールする命令と、
前記初期ストール期間の後にストール要求が前記実行ユニットから受け取られたかどうかを判定する命令と、
ストール要求が前記実行ユニットから受け取られた場合に、追加のプロセッサ・サイクルの間前記実行ユニットへの他の命令の発行のストールを延長する命令と
を含むコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には改善されたデータ処理システムに関する。具体的には、本発明は、マルチサイクル非パイプライン化命令シーケンシングを処理するシステムおよび方法を提供する。
【背景技術】
【０００２】
通常、乗算、除算、平方根、またはハードウェアによって実装される他の複雑な数学ルーチンあるいはこれらの組合せは、パイプライン化がむずかしく、高価である。そのような複雑な命令を計算するのに必要なアルゴリズムは、それ自体が複雑であり、通常は、反復解に分解されなければならない。ループが用いられるので、複雑な命令のそのような処理は、パイプライン化することができず、あるいは、ループが試みられる時に衝突が発生する可能性がある。これらのアルゴリズムを直接に実装することのコストは、プロセッサを設計する時の電力および面積の両方の観点から高すぎる。
【０００３】
これらの演算をパイプライン化するのではなく、多くのプロセッサは、その代わりに、演算の正しい結果を最終的に作る算術演算のより単純でより短い組を通る再帰ループを実行する。これは、正しい結果を作るが、再帰ループは、完了に追加のプロセッサ・サイクルを必要とし、これによって、プロセッサの待ち時間が増える。さらに、従属的命令すなわち、実行できるようになる前に非パイプライン化命令の結果を必要とする命令は、結果を従属的命令の処理で使用できるようになる前にこの再帰ループが完了するのを待たなければならず、これによって待ち時間がさらに増える。
【０００４】
上で述べた再帰ループを使用して処理されるものなどの非パイプライン化命令は、しばしば、処理がむずかしく、面倒である。一般に、性能は、非パイプライン化命令が実行を終了するのに必要とする時間の長さに関する早期の仮定を行うことによって失われる。後続命令は、非パイプライン化命令が完了するまで遅延される。この遅延の計算された時間は、しばしば、不正確であり、過度に楽観的である。その結果、実行時に最初の不正確な仮定を訂正する際に、追加のオーバーヘッドが生じる。
【０００５】
この待ち時間に対処するために、参照によって本明細書に組み込まれている米国特許第5,948,098番に記載の１つの手法は、長待ち時間実行ユニットを追加して、長待ち時間命令に起因するストールを回避する。この手法は、よい性能をもたらすが、追加の長待ち時間実行ユニットは、従来のプロセッサと比較された時に、追加のオンチップ面積および電力を必要とする。
【特許文献１】米国特許第5,948,098番
【発明の開示】
【発明が解決しようとする課題】
【０００６】
したがって、実行完了時間の不正な仮定に関連する追加のオーバーヘッドをこうむらない、パイプライン化されない形で複雑な命令を処理するシステムおよび方法を有することが有益である。さらに、レジスタ・ファイルからの読取およびバイパスに複数のサイクルを必要とする深いパイプラインを有するプロセッサについて、これらのパイプライン化されない複雑な命令を処理するために新しいバイパスおよび検出ハードウェアを追加するのではなく、既存のバイパス・ハードウェアおよびバイパス検出を使用することが有益である。
【課題を解決するための手段】
【０００７】
本発明は、マルチサイクル非パイプライン化命令シーケンシングを処理するシステムおよび方法を提供する。本発明のシステムおよび方法を用いると、非パイプライン化命令が発行ポイントで検出された時に、発行論理が、最高速の非パイプライン化命令を完了できる最小サイクル数のストールを開始する。次に、実行ユニットが、非パイプライン化命令がほぼ完了するまでストールを引き継ぐ。これによって、実行ユニットに、非パイプライン化命令が完了する時を正確に判定するためのより多くの時間が与えられる。
【０００８】
実行ユニットは、命令を完了するよりわずかに前に、発行論理へのストールを解放する。発行ユニットは、その命令をもう一度発行する。次に、実行ユニットは、パイプライン化された結果の最初のバイパス・ステージの前のステージに、非パイプライン化動作の結果を挿入する。ストール解放および非パイプライン化結果のパイプライン化命令バイパス・ネットワークへの挿入のタイミングは、パイプライン化命令が第２の発行の時に発行された場合と同一のタイミング特性およびバイパス特性を有する非パイプライン化命令の第２の発行に対応する。続く命令の命令結果ストールおよびバイパスは、パイプライン化命令が非パイプライン化動作の「第２」発行の時に発行されたかのように計算することができる。
【０００９】
この形で、実行ユニットがストール信号を解放するタイミングは、従属的命令ができる限り早く結果をバイパスできるようにセットされる。言い換えると、従属的命令は、結果へのアクセスを入手するために、結果がプロセッサ・レジスタ・ファイルに書き込まれるのを待つ必要がない。逆に、従属的命令は、ストール待ち時間を減らすのを助けるために、使用可能になると同時に結果を「バイパス」することができる。本発明の上記および他の特徴および利益は、好ましい実施形態の次の詳細な説明で説明され、これに鑑みて当業者に明白になる。
【００１０】
本発明の特徴を表すと思われる新規の特徴は、添付請求項に示されている。しかし、本発明自体ならびにその使用の好ましい態様、さらなる目的、および長所は、添付図面と共に読まれる時に、例示的実施形態の次の詳細な説明を参照することによって最もよく理解される。
【発明を実施するための最良の形態】
【００１１】
上で述べたように、本発明は、マルチサイクル非パイプライン化命令シーケンシングを処理するシステムおよび方法を提供する。本発明の機構は、従属的命令のパイプライン化実行を可能にするために命令パイプラインの適当なステージに非パイプライン化マルチサイクル命令の結果を供給すると同時に、非パイプライン化された形で複雑な命令すなわちマルチサイクル命令を処理するように動作する。本発明の機構および動作の詳細な説明を提供する前に、従来のパイプライン化実行ユニットの動作をまず説明することが役立つ。
【００１２】
図１は、汎用コンピュータ（図示せず）のＣＰＵ（中央処理装置）の従来の実行ユニット１００の例示的な図である。実行ユニット１００に、コンピュータ・プログラムのある命令を実行するパイプライン１０２が含まれる。パイプライン１０２は、パイプライン１０２内の各命令を実行する連続するパイプライン・ステージＳ１からＳ９を有する。パイプライン・ステージＳ１からＳ９に、オペランド選択ステージＳ１、オペランド処理（すなわち実行）ステージＳ２、他のパイプライン・ステージＳ３からＳ６、妥当性判定ステージＳ７、もう１つのパイプライン・ステージＳ８、およびオペランド書込ステージＳ９が含まれる。下で説明するように、パイプライン・ステージＳ１およびＳ３からＳ９のそれぞれは、１マシン・サイクルで行われ、オペランド処理ステージＳ２は、さまざまな個数のマシン・サイクルで行われる。
【００１３】
パイプライン１０２内の各命令１５１は、まず、ＣＰＵによって、実行ユニット１００のディスパッチ・コントローラ１０４に発行される。ディスパッチ・コントローラ１０４は、発行された命令を、制御論理１１０で、オペランド選択ステージＳ１中にパイプライン１０２にディスパッチする。ディスパッチ・コントローラ１０４は、命令を事前デコードし、これに応答して、パイプライン・ステージＳ１からＳ９中に、命令が下で説明する形でアーキテクチャ・レジスタ・ファイル（architectural register file、ＡＲＦ）１０６およびパイプライン１０２の動作を制御するための制御信号を生成する。
【００１４】
パイプライン１０２のオペランド選択ステージＳ１に、マルチプレクサ（ＭＵＸ）１２８が含まれる。パイプライン１０２内の各命令のオペランド選択ステージＳ１中に、ＭＵＸ  １２８は、パイプライン１０２のオペランド処理ステージＳ２による処理のために１つまたは複数のソース・オペランドＳ１  ＳＳＯＰ１またはＳ１  ＳＳＯＰ２あるいはその両方を選択する。次に説明するように、この選択は、ＡＲＦ  １０６から受け取られたソース・オペランドＳ１  ＳＯＰ１およびＳ１  ＳＯＰ２と、それぞれオペランド・バイパス１１４から１２０から受け取られたローカル宛先オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰと、それぞれ別のパイプライン（図示せず）のオペランド・バイパス１２１から１２７から受け取られた外部宛先オペランドＳ２  ＸＤＯＰからＳ８  ＸＤＯＰと、パイプライン１０２の制御論理１１０から受け取られた即値ソース・オペランドＩＭＭＤ  ＳＯＰとの間から行われる。
【００１５】
ＡＲＦ  １０６に、コンピュータのアーキテクチャ・レジスタが含まれる。パイプライン１０２内の各命令のオペランド選択ステージＳ１中に、ＡＲＦ  １０６は、ソース・オペランドＳ１  ＳＯＰ１およびＳ１  ＳＯＰ２を、ＡＲＦ  １０６の選択されたアーキテクチャ・レジスタからパイプライン１０２のオペランド選択ステージＳ１に選択的に供給する。ＡＲＦ  １０６によって供給されたソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２は、ソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２がＡＲＦ  １０６のアーキテクチャ・レジスタの１つで現在使用可能であるとディスパッチ・コントローラ１０４が判定した場合に、ＭＵＸ  １２８の１つによって選択される。このアーキテクチャ・レジスタは、命令によってソースとして指定される。
【００１６】
しかし、パイプライン１０２内の命令ごとに、ディスパッチ・コントローラ１０４が、その命令がソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２ではなく制御論理１１０からの即値ソース・オペランドＩＭＭＤ  ＳＯＰを必要とすると判定する場合がある。この場合に、ＭＵＸ  １２８の１つが、即値ソース・オペランドＩＭＭＤ  ＳＯＰを選択する。
【００１７】
ディスパッチ・コントローラ１０４は、パイプライン１０２内の各命令のオペランド選択ステージＳ１中に、ソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２が、まだＡＲＦ  １０６のアーキテクチャ・レジスタ内で使用可能でなく、飛行中であり、他所で使用可能であると判定する場合がある。この場合に、ソース・オペランドは、ローカル宛先（または結果）オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰの１つまたは外部宛先オペランドＳ２  ＸＤＯＰからＳ８  ＸＤＯＰの１つとして使用可能であり、その後、ＭＵＸ  １２８の１つによって選択される場合がある。ローカル宛先オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰは、それぞれ、パイプライン１０２内の他の命令のパイプライン・ステージＳ２からＳ８中にパイプライン１０２によって生成される。外部宛先オペランドＳ２  ＸＤＯＰからＳ８  ＸＤＯＰは、それぞれ、別のパイプライン（Ｘによって指定されるが図示せず）内の命令のパイプライン・ステージＳ２からＳ８中に生成される。これは、このパイプラインのめいめいの外部オペランド・バイパス・ソースによって行われる。
【００１８】
オペランド処理ステージＳ２では、パイプライン１０２内の命令ごとに、１つまたは複数の選択されたソース・オペランドＳ１  ＳＳＯＰ１またはＳ１  ＳＳＯＰ２あるいはその両方が、まず、１つまたは複数の選択されたソース・オペランドＳ２  ＳＳＯＰ１またはＳ２  ＳＳＯＰ２あるいはその両方としてオペランド処理ステージＳ２のレジスタ１３４によってラッチされる。さらに、オペランド処理ステージＳ２では、命令について、パイプライン１０２の制御論理１１０が、オペランド処理ステージＳ２の算術論理１３２に１つまたは複数の選択されたソース・オペランドＳ２  ＳＳＯＰ１またはＳ２  ＳＳＯＰ２あるいはその両方を処理させ、これに応答して命令の宛先オペランドＳ２  ＬＤＯＰを生成させる制御信号を生成する。これらの制御信号は、命令のデコードに応答して生成される。
【００１９】
パイプライン・ステージＳ３からＳ８に、それぞれ、レジスタ１３８から１４３が含まれる。したがって、パイプライン・ステージＳ３では、パイプライン１０２内の命令ごとに、レジスタ１３８が、ローカル宛先オペランドＳ３  ＬＤＯＰとして、その命令についてオペランド処理ステージＳ２で生成されたローカル宛先オペランドＳ２  ＬＤＯＰをラッチする。同様に、パイプライン・ステージＳ４からＳ８で、パイプライン内の命令ごとに、レジスタ１３９から１４３が、それぞれ、宛先オペランドＳ４  ＬＤＯＰからＳ８  ＬＤＯＰとして、前のパイプライン・ステージＳ３からＳ７でそれぞれラッチされたローカル宛先オペランドＳ３  ＬＤＯＰからＳ７  ＬＤＯＰをラッチする。したがって、宛先オペランドＳ３  ＬＤＯＰからＳ８  ＬＤＯＰのすべてが、宛先オペランドＳ２  ＬＤＯＰの遅延されたバージョンである。
【００２０】
パイプライン・ステージＳ３からＳ６およびＳ８は、他の処理が実行ユニット１００で行われているので必要である。さらに、ディスパッチ・コントローラ１０４は、妥当性判定ステージＳ７で、命令が有効または無効のどちらであるかの判定を行う。
【００２１】
ディスパッチ・コントローラ１０４によって有効と判定されたパイプライン１０２内の命令ごとに、その命令によって宛先として指定されたＡＲＦ  １０６内のアーキテクチャ・レジスタに、その命令のオペランド書込ステージＳ９中に宛先オペランドＳ８  ＬＤＯＰが保管される。したがって、この特定の命令の宛先オペランドＳ８  ＬＤＯＰは、パイプライン１０２または実行ユニット１００の別のパイプライン内の後の命令のオペランド選択ステージＳ１でソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２としてＡＲＦ  １０６内で使用可能である。
【００２２】
しかし、パイプライン１０２内の命令が、分岐誤予測、トラップ、または命令再循環（instructionrecirculate）に起因して無効になる場合がある。分岐誤予測は、ディスパッチ・コントローラ１０４が実行ユニット１００の別のパイプラインから受け取るＢＭＰ（BranchMisPredict、分岐誤予測）信号１５２によって示される。トラップは、ディスパッチ・コントローラ１０４によってローカルに検出されるか、ディスパッチ・コントローラ１０４が実行ユニットの他のパイプラインから受け取るＴＲＰ（Trap、トラップ）信号１５２から検出することができる。さらに、命令再循環は、データ・キャッシュ・ミスが発生した時にディスパッチ・コントローラ１０４がＣＰＵのデータ・キャッシュ（図示せず）から受け取るＲＣＬ（InstructionRecirculate、命令再循環）信号１５２によって示される。
【００２３】
ディスパッチ・コントローラ１０４が、パイプライン１０２内の命令が無効であると判定した場合に、ＡＲＦ  １０６に、命令の宛先オペランドＳ８  ＬＤＯＰが保管されない。この形で、ＡＲＦ  １０６を破壊することができない。というのは、命令が有効であるとディスパッチ・コントローラ１０４が判定するまで、命令の宛先オペランドＳ８  ＬＤＯＰが、ＡＲＦ  １０６に保管されないからである。
【００２４】
しかし、パイプライン１０２内の後の命令が、飛行中であり、まだＡＲＦ  １０６に保管されていない、パイプライン１０２内の以前の命令のローカル宛先オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰまたは別のパイプラインの以前の命令の外部宛先オペランドＳ２  ＸＤＯＰからＳ８  ＸＤＯＰあるいはこの両方に従属的する場合がある。同様に、他のパイプラインの後の命令が、飛行中であり、まだＡＲＦ  １０６に保管されていない、パイプライン１０２内の以前の命令のローカル宛先オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰに従属的する場合がある。したがって、これらのローカルおよび外部の宛先オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰおよびＳ２  ＸＤＯＰからＳ８  ＸＤＯＰは、ＣＰＵの性能を保つために、最小の待ち時間で使用可能にされなければならない。これを行うために、実行ユニット１００に、パイプライン１０２からのオペランド・バイパス１１４から１２０および別のパイプラインからのオペランド・バイパス１２１から１２７が含まれる。
【００２５】
具体的に言うと、算術論理１３２は、オペランド処理ステージＳ２のオペランド・バイパス１１４によってＭＵＸ  １２８に結合される。同様に、レジスタ１３８から１４３は、それぞれ、中間ステージＳ３からＳ８のオペランド・バイパス１１５から１２０によってＭＵＸ  １２８に結合される。この形で、算術論理１３２およびレジスタ１３８から１４３は、それぞれ、ローカル宛先オペランドＳ２  ＬＤＯＰからＳ８  ＬＤＯＰのローカル・オペランド・バイパス・ソースになる。また、前に説明したように、別のパイプライン内の外部オペランド・バイパス・ソースが、パイプライン・ステージＳ２からＳ８のオペランド・バイパス１２１から１２７によってＭＵＸ  １２８に結合されて、外部宛先オペランドＳ２  ＸＤＯＰからＳ８  ＸＤＯＰが供給される。
【００２６】
したがって、オペランド選択ステージＳ１では、パイプライン１０２内の命令ごとに、この特定の命令が、パイプライン１０２または実行ユニット１００内の別のパイプライン内の以前の命令が宛先として指定したものと同一の、ＡＲＦ  １０６内の選択されたレジスタを、ソースとして指定することができる。この以前の命令は、パイプライン１０２または他のパイプラインのパイプライン・ステージＳ２、…、Ｓ７、またはＳ８内とすることができる。この場合に、以前の命令について生成されたローカルまたは外部の宛先オペランドＳ８  ＬＤＯＰまたはＳ８  ＸＤＯＰは、まだ選択されたレジスタから使用可能でないが、対応するオペランド・バイパス１１４、…、１２６、または１２７上でのローカルまたは外部の宛先オペランドＳ２  ＬＤＯＰ、…、Ｓ６  ＸＤＯＰ、またはＳ７  ＸＤＯＰとして使用可能になる。その結果、ＭＵＸ  １２８は、このローカルまたは外部の宛先オペランドＳ２  ＬＤＯＰ、…、Ｓ６  ＸＤＯＰ、またはＳ７  ＸＤＯＰを、算術論理１３２による処理のために選択する。
【００２７】
図２に、パイプライン１０２に関してこれをより正確に示す。図からわかるように、パイプライン１０２内の最初の命令ＡＤＤは、このＡＤＤ命令のオペランド選択ステージＳ１中にソースとして指定された、ＡＲＦ  １０６のレジスタｒ０およびｒ１からそのソース・オペランドＳ１  ＳＯＰ１およびＳ１  ＳＯＰ２を入手する。この命令ＡＤＤのオペランド処理ステージＳ２中に、宛先オペランドＳ２  ＬＤＯＰが生成される。しかし、宛先オペランドＳ８  ＬＤＯＰは、命令ＡＤＤのオペランド書込ステージＳ９中だけに、宛先として指定されたＡＲＦ  １０６のレジスタｒ２に書き込まれる。したがって、命令ＡＤＤのパイプライン・ステージＳ２、…、Ｓ７、またはＳ８中にそのオペランド選択ステージＳ１を有し、ソースとしてレジスタｒ２を指定することによってこの命令ＡＤＤに従属的するすべての命令ＳＵＢ、…、またはＡＮＤは、対応するオペランド・バイパス１１４、…、１１９、または１２０を使用して、選択されたソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２として宛先オペランドＳ２  ＬＤＯＰ、…、Ｓ２  ＬＤＯＰ、またはＳ８  ＬＤＯＰを入手しなければならない。また、命令ＡＤＤのパイプライン・ステージＳ２からＳ８の後にそのオペランド選択ステージＳ１を有する命令ＸＮＯＲなどだけに関して、選択されたソース・オペランドＳ１  ＳＯＰ１またはＳ１  ＳＯＰ２が、レジスタｒ２から直接に使用可能になる。したがって、ＡＲＦ  １０６は、各命令のオペランド書込ステージＳ９でのみ書き込まれるので、パイプライン１０２は、パイプライン１０２内でパイプライン・ステージＳ２からＳ８のオペランド・バイパス１１４から１２０を有しなければならず、他のパイプラインからのオペランド・バイパス１２１から１２７にも結合されなければならない。
【００２８】
多くのＣＰＵで、算術論理１３２は、事前定義の算術命令タイプのすべての命令について、１つまたは複数の選択されたソース・オペランドＳ１  ＳＳＯＰ１またはＳ１  ＳＳＯＰ２あるいはこの両方を処理する（すなわち、これに対する算術計算を実行する）ように構成されている。これには、一般的に使用されているのでＣＰＵの性能にクリティカルな性能クリティカル算術命令が含まれる場合がある。性能クリティカル算術命令のそれぞれについて、オペランド処理ステージＳ２は、１マシン・サイクルで行われる。事前定義の算術命令タイプの命令に、頻繁には使用されず、したがってＣＰＵの性能にさほどクリティカルでない非性能クリティカル算術命令も含まれる場合がある。これらの非性能クリティカル算術命令のそれぞれについて、オペランド処理ステージＳ２は、サブステージを有し、命令に従属的して変換するマシン・サイクル数を有する複数のマシン・サイクルで行われる。
【００２９】
処理にマルチサイクルを必要とする複雑な命令が実行ユニットに発行された時に、その命令は、オペランド処理ステージＳ２および算術論理１３２のこれらのサブステージを使用して実行ユニットによって処理される。そのような複雑な命令の例に、乗算、除算、内積、平方根、および他の複雑な数学ルーチンが含まれる。この命令が処理されている間に、パイプライン１０２に発行される他のすべての命令は、複雑な命令の計算時間の最初の推定によって決定される時間期間の間、発行ユニット内でストールされる。
【００３０】
上で述べたように、完了時間のこれらの最初の推定は、しばしば不正であり、より多くのまたはより少ないプロセッサ・サイクルが、これらの命令の処理に実際に必要である。より少ないプロセッサ・サイクルが命令の処理に必要な場合には、命令の処理に必要な時間の最初の予測に基づいて発行ユニットがストールし続けている間に、プロセッサ・サイクルが浪費される。
【００３１】
より多くのプロセッサ・サイクルが必要な場合に、複雑なマルチサイクル非パイプライン化命令の処理時間のそのような誤計算は、発行ユニットが実行ユニット内の命令の処理時間を再計算しなければならないことをもたらす。さらに、発行ユニットは、追加のプロセッサ・サイクルの間、命令の発行をストールしなければならない。この再計算は、プロセッサ内の追加のオーバーヘッドを作り、通常は、命令の処理が完了するのに必要なものより多数のプロセッサ・サイクルの間、発行ユニットがストールすることをもたらす。その結果、プロセッサ・サイクルは、予測された量のプロセッサ・サイクルが経過するまで、発行ユニットがパイプラインへの追加命令の発行をストールすることによって浪費される。
【００３２】
本発明は、マルチサイクル非パイプライン化命令シーケンシングの処理を可能にする論理を発行ユニット内および実行ユニット内に設けることによって、そのようなオーバーヘッドを回避する。本発明の機構を用いると、非パイプライン化命令が発行ポイントで検出された時に、発行論理が、最高速の非パイプライン化命令を完了できる最小のサイクル数だけのストールを開始する。次に、実行ユニットが、その非パイプライン化命令が実際に完了するまで、ストールを引き継ぐ。これによって、実行ユニットに、非パイプライン化命令が完了する時を正確に判定するためのより多くの時間が与えられる。実行ユニットが命令を完了する少し前にまたはそれと実質的に同時に、実行ユニットは、ストールを発行論理に解放し、発行論理は、その後、命令発行を継続することができる。
【００３３】
図３は、本発明の例示的態様を実装できるコンピューティング・デバイスの例示的なブロック図である。図３からわかるように、コンピュータ２００に、ＣＰＵ  ２０２、外部キャッシュ２０４、主メモリ２０６、副メモリ２０８、グラフィックス・デバイス２１０、およびネットワーク接続２１２が含まれる。
【００３４】
ＣＰＵ  ２０２に、命令キャッシュ２１４、データ・キャッシュ２１６、外部メモリ・コントローラ２１８、およびシステム・インターフェース２２０が含まれる。外部メモリ・コントローラ２１８は、命令キャッシュ２１４、データ・キャッシュ２１６、外部キャッシュ２０４、および主メモリ２０６に接続される。システム・インターフェース２２０は、データ・キャッシュ２１６、副メモリ２０８、グラフィックス・デバイス２１０、およびネットワーク接続２１２に接続される。
【００３５】
ＣＰＵ  ２０２には、発行ユニット２２４も含まれ、発行ユニット２２４は、コンピュータ・プログラムの命令を命令キャッシュ２１４から取り出す。次に、発行ユニット２２４は、取り出された命令を、実行のために実行ユニット２２６内のさまざまなパイプラインに発行する。ＣＰＵ  ２０２に、さらに、実行ユニット２２６が含まれ、実行ユニット２２６には、実行ユニット・コア２２８、算術論理２３０、および制御論理２９４が含まれる。
【００３６】
実行ユニット・コア２２８に、図１のパイプライン１０２などの実行パイプラインが含まれる。算術論理２３０に、パイプライン化命令および非パイプライン化命令を実行する論理が含まれる。本発明は、マルチサイクル非パイプライン化命令が算術論理２３０によって処理されようとしている時に、発行ユニット２２４がまず命令のストールを処理するように、発行ユニット２２４内および制御論理２９４内の論理を提供する。次に、発行ユニット２２４は、命令の初期ストールの後に、命令のストールの処理を実行ユニット２２６の制御論理２９４にハンド・オフする。
【００３７】
図４は、本発明による発行ユニットと実行ユニットの間の相互作用を示す例示的なブロック図である。図４に示されているように、発行ユニット３１０が、実行ユニット３３０への発行のために命令キャッシュ３２０から命令を取り出した時に、発行ユニットの発行論理３１２が、その命令がパイプライン命令または非パイプライン命令のどちらであるかを判定する。この判定は、たとえば、命令に関連する実行コード（図示せず）を処理し、実行コードを発行ユニット３１０に常駐するパイプライン命令実行コードのテーブル（図示せず）と比較することによって行うことができる。その実行コードがこのテーブルに存在する場合に、関連する命令は、パイプライン命令である。その実行コードがこのテーブルに存在しない場合に、関連する命令は、非パイプライン命令である。
【００３８】
パイプライン命令について、発行ユニット３１０は、その命令を普通の形で実行ユニット３３０のパイプライン３３４に発行する。命令が非パイプライン命令である場合に、発行ユニット３１０の発行論理３１２は、その非パイプライン命令を実行ユニット３３０の非パイプライン算術論理３３６に発行する。
【００３９】
発行論理３１２は、最高速の非パイプライン化命令が実行ユニット３３０内で完了する最小サイクル数を判定し、そのプロセッサ・サイクル数の間の発行ユニット３１０内のストールを開始する。本発明の好ましい実施形態では、この最小サイクル数が、発行ユニット３１０に保管された固定された数である。この最小サイクル数は、異なるプロセッサ・アーキテクチャおよび実行ユニットについて異なる可能性がある。１つの例示的プロセッサ・アーキテクチャでは、最高速の非パイプライン化命令を実行ユニットによって完了できる最小サイクル数が、５プロセッサ・サイクルである。
【００４０】
次に、発行ユニット３１０は、最小サイクル数、たとえば５プロセッサ・サイクルの間、実行ユニット３３０へのそれ以上の命令の発行をストールする。このストールの開始は、たとえば、０へのカウンタの初期化を伴うことができ、このカウンタは、各プロセッサ・サイクルに増分される。他の実施形態では、ストールの開始およびストール自体が、下で詳細に説明するように、ステートマシンのある状態から別の状態への遷移によって管理される。したがって、例示的実施形態では、発行ユニット３１０は、発行ユニット３１０に関連するかこれによってアクセス可能なカウンタ／ステートマシンまたは類似物によって初期ストール期間が経過したと判定されるまで、実行ユニット３３０にこれ以上命令を発行しない。
【００４１】
発行ユニット３１０でのストールの開始および初期ストール期間の満了の後に、実行ユニット３３０に発行される命令のストールの制御は、実行ユニット３３０内の制御論理３３２にハンド・オーバーされる。実行ユニットの制御論理３３２は、初期ストール期間が満了した後に、命令の処理が完了したかどうかを判定する。算術論理３３６による命令の処理が、初期ストール期間すなわち、最高速の非パイプライン化命令を完了できる最小サイクル数以内に完了していない場合には、実行ユニット３３０の制御論理３３２は、発行ユニット３１０がもう１つのプロセッサ・サイクルにストールを継続しなければならないことを示す信号を発行ユニット３１０に送る。ストール信号のこの判定および実行ユニット３３０からの発行は、初期ストール期間の後、命令処理が算術論理３３６内で完了するまで、各後続のプロセッサ・サイクルに実行される。
【００４２】
初期ストール期間内または延長されたストール期間内のいずれかに、実行ユニット３３０によって発行ユニット３１０に送られるストール信号に基づいて、命令が完了している場合に、制御論理３３２は、命令の完了を示す信号を発行ユニット３１０に送り返すか、単にストール信号をデアサートし、これによって、命令処理の完了を示す。その結果、発行ユニット３１０は、発行ユニット３１０のストール状態を解放し、実行ユニット３３０のパイプライン３３４にパイプライン命令として命令を再発行する。実行ユニット３３０は、この再発行された命令をパイプライン命令、たとえばＡＤＤ命令または類似物とみなし、パイプライン３３４を使用してこれを実行する。
【００４３】
さらに、上で説明した算術論理３３６での非パイプライン化命令の実行の結果が、パイプライン３３４のバイパス制御を使用して、パイプライン３３４の適当なステージに注入される。この形で、再発行されたパイプライン命令の結果が、再発行されたパイプライン命令が実際にパイプライン３３４で実行された場合に実際の結果が存在するはずのパイプライン３３４のステージに挿入される。この形で、マルチサイクル非パイプライン化命令の結果が、パイプライン３３４に存在し、他の従属的命令が、レジスタ・ファイル、たとえばＡＲＦ  １０６にアクセスする必要なしに、マルチサイクル非パイプライン化命令の結果を入手するのにパイプラインの既存バイパス制御を使用できるようになる。その後、再発行されたパイプライン命令の結果を、当技術分野で一般に知られた形でレジスタ・ファイルに書き込むことができる。
【００４４】
図５は、本発明の例示的実施形態によるパイプラインの例示的な図である。図５に示されたパイプラインは、図１のパイプラインに似ているが、非パイプライン化命令の実行を処理するために追加の非パイプライン化算術論理ユニット４１０が設けられていることが異なる。この非パイプライン化算術論理ユニット４１０は、たとえば非パイプライン化命令の実行に使用される、算術論理１３２のサブステージを構成することができる。加算器４２０は、パイプライン化命令に使用される主算術論理１３２を構成することができる。マルチプレクサ４３０は、非パイプライン化算術論理ユニット４１０の結果と加算器４２０（すなわち、パイプライン化命令）の結果を多重化するために設けられている。２つの入力のうちの１つを選択するのに使用される、マルチプレクサ４３０への制御信号は、図１の制御論理１１０などの制御論理によって供給される。
【００４５】
図５からわかるように、パイプライン化命令と非パイプライン化命令の両方の、発行された命令は、実行ユニットの発行ステージ（ＩＳ）で受け取られる。次に、発行された命令の読取アドレスを使用して、第１レジスタ・ファイル・ステージ（ＲＦ１）中にレジスタ・ファイル４４０からオペランド・データを読み取る。レジスタ・ファイル４４０から読み取られたオペランド・データは、第２レジスタ・ファイル・ステージ（ＲＦ２）中にマルチプレクサ４５０および４６０に供給される。たとえば制御論理１１０からの制御信号が、マルチプレクサ４５０および４６０に入力されて、マルチプレクサ４５０および４６０への選択された入力が、第１実行ステージ（ＥＸ１）中に加算器４２０および非パイプライン化算術論理ユニット４１０に出力される。
【００４６】
加算器４２０および非パイプライン化算術論理ユニット４１０の出力は、マルチプレクサ４３０に供給される。制御論理１１０などからの制御信号が、加算器４２０からのパイプライン出力と非パイプライン化算術論理ユニット４１０からの非パイプライン化出力の間で選択するためにマルチプレクサ４３０に供給される。マルチプレクサ４３０からの出力は、後続の実行ステージＥＸ２からＥＸ５のそれぞれのラッチに入力される。各実行ステージＥＸ２からＥＸ５の各ラッチの出力は、マルチプレクサ４５０および４６０に入力される。実行ステージ５（ＥＸ５）の出力は、ライト・バック・ラッチ（ＷＢ）にも送られ、レジスタ・ファイル４４０にライト・バックされる。
【００４７】
図５に示されたパイプライン４００は、どのオペランドが命令の完了に必要であるかを判定するのに使用される制御論理の制御の下で動作する。この制御論理に、従属的命令に必要なオペランドがあるステージがどれであるか（ＩＳ〜ＥＸ５）および従属的命令に必要なオペランドを入手するためにストールが必要であるかどうかを判定する、従属的性判定論理、従属的性ストール論理、および類似物が含まれる。各実行ステージ（ＥＸ２〜ＥＸ５）からのループ・バックは、従属的命令がレジスタ・ファイル４４０へのライト・バックの前にオペランドを入手することを可能にするバイパスを提供する。
【００４８】
したがって、図５に示されているように、非パイプライン化命令のオペランドは、第１実行ステージ（ＥＸ１）中に非パイプライン化算術論理ユニット４１０に送られ、加算器４２０にも供給される。非パイプライン化算術論理ユニット４１０は、これらのオペランドを操作して、マルチプレクサ４３０への入力の１つとして供給される出力を生成する。この処理中に、最高速の非パイプライン算術演算が完了するのに必要な最小サイクル数すなわち初期ストール期間の間、それ以上の命令は、発行ユニット（たとえば、図４の発行ユニット３１０を参照されたい）によって、実行ユニットに、したがってパイプライン４００に発行されていない。その結果、非パイプライン化算術論理ユニット４１０が非パイプライン化命令のオペランドに対して演算を実行している間は、従属的命令がパイプラインを通過していない。
【００４９】
非パイプライン化算術論理ユニット４１０へのオペランドの入力は、実行ユニット・ストール信号（ＸＵ＿ＳＴＡＬＬ）のアサートを開始し、この信号は、各プロセッサ・サイクルに発行ユニット内のストール制御論理、たとえば発行論理３１２に入力される。このＸＵ＿ＳＴＡＬＬ信号がアサートされている間は、発行ユニットは、初期ストール期間の後に、サイクルごとの基礎でストールを継続する。
【００５０】
非パイプライン化算術論理ユニット４１０による出力の生成時に、非パイプライン化算術論理ユニット４１０は、ＸＵ＿ＳＴＡＬＬ信号をデアサートし、実行ユニットに発行される命令のストールが、解除される。発行ユニットは、この非パイプライン化命令を、パイプライン化命令としてパイプライン４００に再発行する。非パイプライン化算術論理ユニット４１０の出力が、ステージＥＸ１でマルチプレクサ４３０を介してパイプライン４００に挿入される。
【００５１】
図６および７は、本発明の例示的実施形態による例の命令シーケンシングを示す例示的な図である。図示の命令シーケンスでは、命令結果が、図５に示されたものなどのＲＦ２ステージにバイパスされ、実行ステージＥＸ２、ＥＸ３、ＥＸ４、ＥＸ５、およびＥＸ６（ライト・バック（ＷＢ））ならびにＥＸ７（ライト・バック＋１（ＷＢ＋１））からバイパスすることができる。
【００５２】
図６に示された命令シーケンスでは、第１のパイプライン化加算命令ｒ１０＝ｒ２＋ｒ１のオペランドｒ２およびｒ１が、パイプライン４００に入力される。その後、第２のパイプライン化加算命令ｒ１１＝ｒ３＋ｒ４が、パイプライン４００に発行される。この第２の加算命令は、第１の加算命令に従属的しない。
【００５３】
第３のパイプライン化加算命令ｒ１２＝ｒ１１＋ｒ２が、パイプライン４００に入力され、この命令は、第２のパイプライン化加算命令の結果に従属的する。図６に示されているように、第３のパイプライン化加算命令がバイパス・ステージ（ＲＦ２）にある時に、第２のパイプライン化加算命令の結果が、実行ステージＥＸ２にあり、制御信号が、マルチプレクサ４５０および４６０に送られて、第３のパイプライン化加算命令の実行に使用するために第２パイプライン化加算命令の結果がバイパスされる（この図では、ＥＸ２からＲＦ２に向かう曲がった矢印として示されている）。
【００５４】
次に、非パイプライン化乗算命令ｒ１３＝ｒ１２＊ｒ３が、実行ユニットに発行される。この非パイプライン化命令は、第３の加算命令の結果に従属的する。この非パイプライン化乗算命令が実行ユニットに発行された時に、初期ストール期間が開始され、従属的命令は、この乗算命令の結果まで発行されない。非パイプライン化乗算命令は、この非パイプライン化乗算命令が第２レジスタ・ファイル（ＲＦ２）ステージにある時に、第３の加算命令の結果を実行ステージＥＸ２から受け取る。
【００５５】
図６に示されているように、この非パイプライン化乗算命令は、非パイプライン化算術ユニットでの完了に５プロセッサ・サイクルを必要とする（発行ステージ（ＩＳ）内の乗算命令の第２の発行のストールを参照されたい）。この非パイプライン化乗算命令は、その後、パイプライン化命令として実行ユニットにもう一度再発行される。乗算命令の結果が、この命令の第１の発行から入手可能なので、この命令の第２の発行は、パイプラインを通過することができる。この乗算命令の結果は、マルチプレクサ４５０および４６０へのバイパス入力によって使用可能にされる。第４のパイプライン化加算命令ｒ１３＝ｒ１０＋ｒ１２などの後続の従属的命令のすべてが、この乗算命令の第２の発行から、この乗算命令の必要な結果を実行ユニットに受け取る（ＥＸ２からＲＦ２への曲がった矢印によって示されているように）。
【００５６】
図７に、第２のパイプライン化加算命令ｒ１３＝ｒ１１＋ｒ４が、第１のパイプライン化加算命令ｒ１１＝ｒ１０＋ｒ２に従属的するが、非パイプライン化乗算命令ｒ１２＝ｒ１０＊ｒ３に従属的しない場合の命令シーケンスのもう１つの例を示す。図７には、パイプライン化命令が、非パイプライン化乗算命令に従属的しないが、第２のパイプライン化加算命令が、非パイプライン化乗算命令を処理する必要に起因してストールされることが示されている。上で述べたように、このシーケンシングは、実行ユニット内の、制御論理１１０などの制御論理ユニットの従属的性判定論理および従属的性ストール論理によって制御される。
【００５７】
図８は、本発明の１つの例示的実施形態による命令のストールを制御する発行ユニット内の論理を示す例示的な図である。この論理は、たとえば、図４の発行ユニット３１０の発行論理３１２の一部とすることができる。
【００５８】
図８に示されているように、従属的性ストール生成論理６１０が、パイプライン化命令の間に実行ユニットへの命令の発行をストールするかどうかを判定するために設けられている。従属的性ストール生成論理６１０は、発行された命令の間の従属的性を計算し、記憶し、実行ユニットへの命令の発行のストールを制御する。
【００５９】
従属的性ストール生成論理６１０の出力は、ＯＲゲート６２０およびＡＮＤゲート６３０に供給される。出力信号は、実行ユニットへの命令の発行をストールしなければならない時に、従属的性ストール生成論理６１０によってアサートされる。
【００６０】
図８に示されているように、ＡＮＤゲート６３０への入力は、従属的性ストール生成論理６１０からの従属的性ストール信号（ｄｅｐｅｎｄｅｎｃｙ＿ＳＴＡＬＬ）、デコーダ（図示せず）からのデコード二重発行信号（ＤＥＣＯＤＥ−ｄｏｕｂｌｅ−ｉｓｓｕｅ）、および二重発行ステートマシン６４０からの「前半発行済（ｆｉｒｓｔ−ｈａｌｆ−ｉｓｓｕｅｄ）」信号である。デコード二重発行信号は、命令が非パイプライン化命令であることを命令の実行コードが示す場合にＣＰＵの従来の命令デコーダ（図示せず）によってアサートされる信号である。前半発行済信号は、図９に関して下で詳細に説明するように、二重発行ステートマシン６４０がパイプライン化命令状態から非パイプライン化命令の「前半発行済」状態に遷移する時に二重発行ステートマシン６４０がアサートする信号である。デコード二重発行信号がアサートされており、非パイプライン化命令の前半が発行されておらず、従属的性ストール生成論理６１０が、ストールが必要であることを示さない時に、ＡＮＤゲート６３０は、「前半発行（ｉｓｓｕｅ−ｆｉｒｓｔ−ｈａｌｆ）」信号を二重発行ステートマシン６４０に出力する。
【００６１】
ＯＲゲート６２０は、実行ユニット・ストール信号ＸＵ＿ＳＴＡＬＬ、従属的性ストール生成論理６１０からの従属的性ストール信号、および二重発行ステートマシン６４０からの二重ストール信号（ｄｂ＿ＳＴＡＬＬ）を入力として受け取る。これらの信号のいずれかがアサートされている場合に、ＯＲゲート６２０は、ユニット・ストール発行信号（ＩＵ＿ＳＴＡＬＬ）を従属的性ストール生成論理６１０に発行する。
【００６２】
二重ストール信号は、初期ストール期間中に、最高速の非パイプライン化命令が非パイプライン化算術ユニット内の実行ユニットによって実行される最小サイクルの間の実行ユニットへの命令の発行のストールを起こさせるために二重発行ステートマシン６４０によってアサートされる。二重発行ステートマシン６４０は、パイプライン化命令または非パイプライン化命令のいずれであれ、実行ユニットによって実行される命令の状態を記憶するのに使用される、単一のステートマシンまたは複数のステートマシンとすることができる。
【００６３】
図９は、本発明の１つの例示的実施形態によるステートマシンを示す例示的な図である。図９の弧は、状態遷移をもたらす、図８に示された信号の状態を表す数値の組によってラベルを付けられている。この数値の組は、ｄｅｐｅｎｄｅｎｃｙ＿ＳＴＡＬＬ、ｉｓｓｕｅ−ｆｉｒｓｔ−ｈａｌｆ／ｆｉｒｓｔ−ｈａｌｆ−ｉｓｓｕｅｄ、およびｄｂ＿ＳＴＡＬＬとして編成されている。この組の「×」値は、「ドント・ケア」値を表し、状態遷移を行う時にこの信号の実際の状態が考慮されないことを意味する。
【００６４】
図９に示されているように、単純なステートマシン７００が、二重発行される命令の処理を追跡するのに使用される。ステートマシン７００は、単一のステートマシンとすることができ、あるいは、実際に２つの独立のステートマシンとして実装することができ、一方の２状態ステートマシンを、二重発行命令が１回発行されたか否かの追跡に使用することができ、第２のステートマシンを、カウンタ、一連の状態遷移、または類似物を使用して命令のストールを制御するのに使用することができる。この第２のステートマシンは、所定のサイクル数のストールを必要とする他のストール機構すなわち、同期化命令と組み合わせることができる。
【００６５】
図示のステートマシン７００に示されているように、二重発行命令が、発行ステージ（ＩＳ）にない場合、または二重発行命令が発行ステージにあるが１回発行されていない場合に、ステートマシン７００は、状態Ｐ  ７１０に留まる。二重発行命令が１回目に発行される時に、状態は、状態Ｐ  ７１０から「前半命令発行済」状態７２０の状態Ｓ１に遷移する。ステートマシン７００は、ｆｉｒｓｔ−ｈａｌｆ−ｉｓｓｕｅｄ信号をアサートする。ステートマシン７００は、状態Ｓ１、Ｓ２、Ｓ３、…Ｓ＊を通って遷移することによって、所定のサイクル数の間にｄｂ＿ＳＴＡＬＬ信号もアサートする。これによって、初期ストール期間が経過するまで、非パイプライン化命令の第２の発行および他の後続命令が防がれる。
【００６６】
ステートマシン７００は、状態Ｓ＊に達した時に、ｄｂ＿ＳＴＡＬＬ信号をデアサートする。この時までに、実行ユニットは、追加のストール・サイクルを必要とするかどうかを判定している。そうである場合には、ステートマシン７００は、ＸＵ＿ＳＴＡＬＬ信号がアサートされなくなるまで状態Ｓ＊に留まる。ＸＵ＿ＳＴＡＬＬがアサートされなくなった時に、ストール状態が解放され、非パイプライン化命令および後続命令の発行が許可される。実行ユニットは、この第２の発行を無視するが、非パイプライン化結果は、パイプライン内で、その時に発行されたパイプライン化命令の場合と同一の位置に挿入される。制御論理は、この第２の発行を、パイプライン化命令の通常の発行であるかのように扱い、データをそのデータに従属的する後続命令に正しく転送するようにマルチプレクサ制御をセットする。
【００６７】
したがって、上で説明した機構を使用することによって、本発明は、命令実行に必要なプロセッサ・サイクルが最小化され、処理時間の誤計算に起因するオーバーヘッドが最小化される効率的な形でマルチサイクル非パイプライン化命令シーケンシングを処理するシステムおよび方法を提供する。本発明を用いると、非パイプライン化命令の完了を待つのに使用されるプロセッサ・サイクル数が、正確に、その非パイプライン化命令を完了するのに必要なプロセッサ・サイクル数になる。すなわち、初期ストール期間が、最高速の非パイプライン化命令実行に必要な最小サイクル数と等しく、このストール期間の延長が、プロセッサ・サイクルごとの基礎で制御されるので、プロセッサ・サイクルは、絶対に、不必要に命令をストールすることで浪費されない。
【００６８】
図１０は、本発明の例示的実施形態による発行ユニットの例示的動作の概要を示す流れ図である。図１１は、本発明の例示的実施形態による実行ユニットの例示的動作の概要を示す流れ図である。流れ図の各ブロックおよび流れ図のブロックの組合せを、コンピュータ・プログラム命令によって実装できることを理解されたい。プロセッサまたは他のプログラマブル・データ処理装置で実行される命令が、流れ図の１つまたは複数のブロックで指定された機能を実装する手段を作るように、これらのコンピュータ・プログラム命令を、機械を作るためにプロセッサまたは他のプログラマブル・データ処理装置に供給することができる。コンピュータ可読メモリまたは記憶媒体に保管された命令が、流れ図の１つまたは複数のブロックで指定された機能を実装する命令手段を含む製造品を作るように、これらのコンピュータ・プログラム命令を、プロセッサまたは他のプログラマブル・データ処理装置に特定の形で機能するように指示することができるコンピュータ可読メモリまたは記憶媒体に保管することもできる。
【００６９】
したがって、流れ図のブロックは、指定された機能を実行する手段の組合せ、指定された機能を実行するステップの組合せ、および指定された機能を実行するプログラム命令手段をサポートする。流れ図の各ブロックおよび流れ図のブロックの組合せを、指定された機能またはステップを実行する特殊目的ハードウェアベース・コンピュータ・システムによって、または特殊目的ハードウェアおよびコンピュータ命令の組合せによって実装できることも理解されたい。
【００７０】
図１０に示されているように、本発明による発行ユニット、たとえば図４の発行ユニット３１０の動作は、命令キャッシュから命令を取り出すことによって開始される（ステップ８１０）。その命令がパイプライン命令であるかどうかに関する判定を、たとえば、発行論理３１２によって行うことができる（ステップ８２０）。そうである場合には、命令を、当技術分野で一般に知られている形で実行ユニットのパイプラインに、発行ユニット３１０などによって送り（ステップ８３０）、この動作は、本発明による動作に関して終了する。実際には、発行ユニットは、命令キャッシュからの命令の取出を継続し、図１０に示された処理が、取り出された命令ごとに繰り返される。
【００７１】
命令が非パイプライン命令である場合に、発行ユニットが、その命令を非パイプライン化命令として実行ユニットの算術論理に発行する（ステップ８４０）。次に、発行ユニットは、最高速の非パイプライン化命令完了に必要な最小プロセッサ・サイクル数と等しい初期ストール期間の発行ユニット内でのストール状態を開始する（ステップ８５０）。
【００７２】
次に、発行ユニットは、初期ストール期間の経過を待ち、その間に、さらなる命令は、発行ユニットによって実行ユニットに発行されない（ステップ８６０）。この初期ストール期間の後に、発行ユニットは、ストール信号が実行ユニットから受け取られているかどうかを判定する（ステップ８７０）。ストール信号が実行ユニットから受け取られている場合には、発行ユニットは、追加のプロセッサ・サイクルの間ストールし（ステップ８８０）、ステップ８７０に戻る。ストール信号が受け取られていない場合には、命令完了信号が受け取られており、発行ユニットのストール状態が解除される（ステップ８９０）。次に、発行ユニットは、非パイプライン化命令をパイプライン命令として実行ユニットに再発行し（ステップ８９５）、この動作が終了する。やはり、本発明に関する動作はここで終了するが、発行ユニット全体としての動作は、図１０に示された処理に関して、後続の取り出された命令ごとに継続される。
【００７３】
図１１を参照すると、本発明に関する実行ユニット、たとえば図４の実行ユニット３３０の動作は、発行ユニットから命令を受け取ることによって開始される（ステップ９１０）。その命令がパイプライン命令である場合には、その命令は、当技術分野で一般に知られた形で実行ユニットのパイプラインによって実行される（ステップ９２０）。その命令が非パイプライン化命令である場合には、その命令は、実行ユニットの算術論理によって実行される（ステップ９３０）。命令が実行を完了したかどうかに関する判定を、たとえば、図５の非パイプライン化算術論理ユニット４１０などによって行う（ステップ９４０）。そうである場合には、たとえば非パイプライン化算術論理ユニット４１０によって、完了信号が発行ユニットに送られ（ステップ９５０）、命令の実行の結果が、パイプラインの、その命令がパイプラインで実行された場合に命令の結果が存在するステージに注入される。前に述べたように、この完了信号は、非パイプライン化命令処理の完了を示す実際の信号とすることができ、あるいは、たとえば実行ユニット・ストール信号（ＸＵ＿ＳＴＡＬＬ）のデアサートとすることができる。
【００７４】
非パイプライン化命令の処理の完了および結果のパイプラインへの注入の後に、この動作は、本発明に関して終了する。しかし、実行ユニットの実際の動作は、継続され、図１１に示された処理が、実行ユニットが受け取る後続の命令ごとに実行される。
【００７５】
命令実行が完了していない場合には、たとえば非パイプライン化算術論理ユニット４１０によって、初期ストール期間が経過したかどうかに関する判定を行う（ステップ９７０）。そうでない場合には、この動作はステップ９４０に戻る。初期ストール期間が経過し、命令実行が完了していない場合には、ストール信号、たとえばストール信号ＸＵ＿ＳＴＡＬＬを、たとえば非パイプライン化算術論理ユニット４１０から発行ユニットに送り、発行ユニットに、もう１つのプロセッサ・サイクルの間、命令ストールを継続させる（ステップ９８０）。その後、この動作はステップ９４０に戻る。
【００７６】
したがって、本発明は、チップ上の追加面積を必要とせず、追加電力を必要としない、マルチサイクル非パイプライン化命令スケジューリングを処理する機構を提供する。さらに、本発明は、非パイプライン化命令の実行時間の誤予測に関連するオーバーヘッドを除去する、そのような非パイプライン化命令を処理する機構を提供する。
【００７７】
完全に機能するデータ処理システムの文脈で本発明を説明したが、本発明の処理を、命令のコンピュータ可読媒体およびさまざまな形で配布できることと、本発明が、配布の実行に実際に使用される信号担持媒体の特定のタイプにかかわりなく同様に適用されることを当業者が諒解するであろうことに留意することが重要である。コンピュータ可読媒体の例に、フロッピ・ディスク、ハード・ディスク・ドライブ、ＲＡＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどの記録可能型媒体と、たとえばラジオ周波数伝送および光波伝送などの形の伝送形態を使用する、ディジタル通信リンク、アナログ通信リンク、有線または無線の通信リンクなどの伝送型媒体が含まれる。コンピュータ可読媒体は、特定のデータ処理システムでの実際の使用のために復号されるコード化されたフォーマットの形をとることができる。
【００７８】
本発明の説明は、例示および説明のために提示されたものであり、網羅的であることまたは開示された形態の発明に制限されることを意図されていない。多くの修正形態および変形形態が、当業者に明白である。実施形態は、本発明および実用的応用例を最もよく説明し、企図された特定の使用に合わせたさまざまな変更を伴うさまざまな実施形態について当業者が本発明を理解できるようにするために選択され、記述されたものである。
【図面の簡単な説明】
【００７９】
【図１】コンピューティング・デバイスの中央処理装置の従来の実行ユニットを示す例示的な図である。
【図２】図１の実行ユニットのオペランド・バイパスがアーキテクチャ・レジスタ・ファイルと共にどのように使用されるかを示す例示的な図である。
【図３】本発明によるコンピュータを示す例示的なブロック図である。
【図４】本発明による発行ユニットと実行ユニットの間の相互作用を示す例示的なブロック図である。
【図５】本発明の例示的実施形態によるパイプラインを示す例示的な図である。
【図６】本発明の例示的実施形態による例の命令シーケンシングを示す例示的な図である。
【図７】本発明の例示的実施形態による例の命令シーケンシングを示す例示的な図である。
【図８】本発明の１つの例示的実施形態による命令のストールを制御する発行ユニット内の論理を示す例示的な図である。
【図９】本発明の１つの例示的実施形態によるステートマシンを示す例示的な図である。
【図１０】本発明の例示的実施形態による発行ユニットの例示的動作の概要を示す流れ図である。
【図１１】本発明の例示的実施形態による実行ユニットの例示的動作の概要を示す流れ図である。
【符号の説明】
【００８０】
１００  実行ユニット
１０２  パイプライン
１０４  ディスパッチ・コントローラ
１０６  アーキテクチャ・レジスタ・ファイル（ＡＲＦ）
１１０  制御論理
１１４から１２０  オペランド・バイパス
１２１から１２７  オペランド・バイパス
１２８  マルチプレクサ（ＭＵＸ）
１３２  算術論理
１３４  レジスタ
１３８から１４３  レジスタ
１５１  命令
１５２  ＢＭＰ（分岐誤予測）信号、  ＴＲＰ（トラップ）信号、ＲＣＬ（命令再循環）信号
２００  コンピュータ
２０２  ＣＰＵ
２０４  外部キャッシュ
２０６  主メモリ
２０８  副メモリ
２１０  グラフィックス・デバイス
２１２  ネットワーク接続
２１４  命令キャッシュ
２１６  データ・キャッシュ
２１８  外部メモリ・コントローラ
２２０  システム・インターフェース
２２４  発行ユニット
２２６  実行ユニット
２２８  実行ユニット・コア
２３０  算術論理
２９４  制御論理
３１０  発行ユニット
３１２  発行論理
３２０  命令キャッシュ
３３０  実行ユニット
３３２  制御論理
３３４  パイプライン
３３６  非パイプライン算術論理
４００  パイプライン
４１０  非パイプライン化算術論理ユニット
４２０  加算器
４３０、４５０、４６０  マルチプレクサ
４４０  レジスタ・ファイル
６１０  従属的性ストール生成論理
６２０  ＯＲゲート
６３０  ＡＮＤゲート
６４０  二重発行ステートマシン
７００  ステートマシン
７１０  状態Ｐ
７２０  「前半命令発行済」状態
ＥＸ１  第１実行ステージ
ＥＸ２からＥＸ５  実行ステージ
ＩＭＭＤ  ＳＯＰ  即値ソース・オペランド
ＩＳ  発行ステージ
ＲＦ１  第１レジスタ・ファイル・ステージ
ＲＦ２  第２レジスタ・ファイル・ステージ
Ｓ１  オペランド選択ステージ
Ｓ２  オペランド処理ステージ
Ｓ３からＳ６  パイプライン・ステージ
Ｓ７  妥当性判定ステージ
Ｓ８  パイプライン・ステージ
Ｓ９  オペランド書込ステージ
Ｓ１  ＳＳＯＰ１、Ｓ１  ＳＳＯＰ２  ソース・オペランド
Ｓ２  ＬＤＯＰ  ローカル宛先オペランド
Ｓ２  ＳＳＯＰ１  ソース・オペランド
Ｓ２  ＸＤＯＰ  外部宛先オペランド
ＷＢ  ライト・バック・ラッチ
ＸＵ＿ＳＴＡＬＬ  実行ユニット・ストール信号
【図１】
2006285990.tif 000003
【図２】
2006285990.tif 000004
【図３】
2006285990.tif 000005
【図４】
2006285990.tif 000006
【図５】
2006285990.tif 000007
【図６】
2006285990.tif 000008
【図７】
2006285990.tif 000009
【図８】
2006285990.tif 000010
【図９】
2006285990.tif 000011
【図１０】
2006285990.tif 000012
【図１１】
2006285990.tif 000013