JP3981378B2 - データ処理装置におけるパイプライン間の同期 - Google Patents

データ処理装置におけるパイプライン間の同期 Download PDF

Info

Publication number
JP3981378B2
JP3981378B2 JP2004533589A JP2004533589A JP3981378B2 JP 3981378 B2 JP3981378 B2 JP 3981378B2 JP 2004533589 A JP2004533589 A JP 2004533589A JP 2004533589 A JP2004533589 A JP 2004533589A JP 3981378 B2 JP3981378 B2 JP 3981378B2
Authority
JP
Japan
Prior art keywords
pipeline
queue
coprocessor
instruction
stage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2004533589A
Other languages
English (en)
Other versions
JP2005538439A (ja
Inventor
エヴァンス、マーティン、ロバート
デヴェルー、イアン、ヴィクター
Original Assignee
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2005538439A publication Critical patent/JP2005538439A/ja
Application granted granted Critical
Publication of JP3981378B2 publication Critical patent/JP3981378B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • G06F9/3881Arrangements for communication of instructions and data

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Description

(発明の分野)
本発明は、データ処理装置におけるパイプライン間の同期を達成する技法に関する。
(従来技術の説明)
複数のパイプラインステージを有するパイプラインの敷設されたプロセッサーの形をとるメインプロセッサーを、データ処理装置に備えることが知られている。これによって、複数のインストラクションが、いかなる時点においても、メインプロセッサーでの実行の処理中とすることができる。どの特定のインストラクションを実行する間も、そのインストラクションはメインプロセッサーの種々のパイプラインステージを通り、そのインストラクションの実行は、典型的には、インストラクションがメインプロセッサーの最後のパイプラインステージを経て処理されるとき完了し、その時点で、データ処理装置の状態は、そのインストラクションの実行の結果を反映するよう更新されている。一例として、メインプロセッサーのアクセス可能なレジスターバンクの1つ以上のレジスターの内容は、インストラクションの実行の結果に依存して更新される。
データ処理装置によって実行される一連のインストラクションに現れる特定のコプロセッサーインストラクションを実行する1つ以上のコプロセッサーを、データ処理装置に備えることもまた知られている。メインプロセッサーがパイプラインの敷設されたアーキテクチャーを有する状況においては、コプロセッサーが、パイプラインの敷設されたアーキテクチャーを有することもまた普通であり、そしてそれ故、コプロセッサーが、コプロセッサーインストラクションを実行するために、そのコプロセッサーインストラクションが処理される複数のパイプラインステージを有することもまた普通である。典型的には、各コプロセッサーインストラクションは、メインプロセッサーのパイプラインとコプロセッサーのパイプラインとの双方を通って経路付けられるよう配置される。コプロセッサーは、多かれ少なかれメインプロセッサーと調和して動くよう意図されており、したがってコプロセッサーのパイプラインがメインプロセッサーのパイプラインと同期され続けられるよう措置が講じられている。
コプロセッサーインストラクションを実行する間に、メインプロセッサーの種々のパイプラインステージとコプロセッサーのパイプラインステージとの間の相互作用の必要性があるという事実から、同期の必要性が発生している。例えば、コプロセッサーインストラクションによって特定される条件符号が合致しないならば、コプロセッサーインストラクションは、メインプロセッサーによってキャンセルされるか、またはコプロセッサーインストラクションが実行された結果ブランチが誤って予測された場合には、コプロセッサーのパイプライン全体をフラッシュする(どっと流す)必要がある。さらにはコプロセッサーインストラクションがロードを定義するか演算を蓄積する場合には、メインプロセッサーとコプロセッサーとの間でデータを受け渡す必要がある。
現在に至るまで、一方のパイプラインから他方のパイプラインへと固定したタイミングで信号を受け渡すことによって、コプロセッサーパイプラインは、メインプロセッサーパイプラインと同期され続けている。同期を維持するために、これらの信号は主として、一方のパイプラインがストールする(止まる)とき、他方のパイプラインにおいてもストールを引き起こす。しかしながら、他にも複雑な要因があり、例えば、メインパイプラインがコプロセッサーインストラクションをキャンセルする必要があるか、またはパイプラインがフラッシュされる必要があるとき、それによってメインプロセッサーとコプロセッサーとの間の相互作用が著しく複雑になり、そのときそれらはストールと相互に作用する。パイプラインの敷設されたプロセッサーが長くなると、パイプライン間の固定したタイミングでの信号の受け渡しを含む、この緊密に結合した構成を用いてパイプライン間に同期を達成するのはさらに困難となる。
コプロセッサーのインターフェースに課せられる主な制約は、それが、2サイクルの遅延にわたって作動しなければならないというもので、すなわち、メインプロセッサーからコプロセッサーへと受け渡されるまたはその逆のいかなる信号も、一方から他方に伝播するのに、クロックサイクル全体が与えられなければならず、それ故、次のクロックサイクルまで実行できないというものである。これが意味するのは、インターフェースを横切る信号は、インターフェースの一方の側のレジスターからクロックアウトされて、他方の側の別のレジスターに直接クロックインされなければならず、かつ組み合わせの処理が介入してはならない。この制約は、メインプロセッサー(ここではプロセッサーコアとも称する)およびコプロセッサーが相当の距離を離して置かれるので、信号の伝播時間をカバーするために大きなタイミングマージンを許容しなければならないという事実から生じるものである。このことがとりわけ真実であるのは、コプロセッサーが、メインプロセッサーの設計とは別に、例えば別の関係者によって、設計される状況においてである。この、信号の伝播における遅延のために、先に記述した緊密な結合の同期技法を用いてパイプラインの同期を維持するのは困難となる。
したがって、データ処理装置において、パイプライン間の同期を得る技法を改善することが望ましい。
(発明の概要)
第一の観点から見ると、本発明は、一連のインストラクションを実行するよう動作可能なメインプロセッサーであって、複数の第一パイプラインステージを有する第一のパイプラインを備えるメインプロセッサーと、前記一連のインストラクションにおけるコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーであって、複数の第二パイプラインステージを有する第二のパイプラインを備え、かつ各コプロセッサーインストラクションは第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされているコプロセッサーと、1つのパイプラインにおける所定のパイプラインステージを別のパイプラインにおけるパートナーパイプラインステージと結合する少なくとも1つの同期キュー(待ち行列)であって、その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき同期キューにトークンが置かれるように動作可能であり、かつパートナーパイプラインステージは、同期キューからのトークンを受け取ってそのコプロセッサーインストラクションを処理するよう動作可能であり、それによって、所定のパイプラインステージとパートナーパイプラインステージとの間で第一および第二のパイプラインを同期させる同期キューとを備えるデータ処理装置を提供する。
本発明によると、データ処理装置は、少なくとも1つの同期キューを備え、1つのパイプラインの所定のパイプラインステージを別のパイプラインのパートナーパイプラインステージと結合している。その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき、トークンが同期キューに入れられるようにアレンジされており、そして、パートナーパイプラインステージは、同期キューからトークンを受け取ると、そのコプロセッサーインストラクションを処理するよう動作可能であり、それによって、その時点で第一および第二のパイプラインを同期させている。
したがって、発明は、2つのパイプライン間でいくぶんの緩みを許容するトークンをベースとしたパイプライン同期技法を提供しており、そこでは全てのステージでの厳格な同期が必要とされておらず、一方確実に重大な情報の転送のためにパイプラインが正しく同期されるものとしている。発明の技法は、パイプライン間に固定したタイミングで信号を送ることを必要とした、制御駆動、緊密結合の、従来技術の構成と対比して、データ駆動、緩やかな結合の同期構成と見ることができる。
ある実施例においては、唯一の同期キューのみがあるということも可能であるが、好ましい実施例において、データ処理装置はさらに、前記同期キューを複数備えていて、前記同期キューの各々は、1つのパイプラインの所定のパイプラインステージを他のパイプラインのパートナーパイプラインステージと結合する。
好ましい実施例において、少なくとも1つの同期キューの1つは、インストラクションキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、コプロセッサーインストラクションを識別するトークンがインストラクションキューに入れられるようにアレンジされており、かつパートナーパイプラインステージは、第二のパイプラインにあって、トークンを受け取ると、そのトークンの識別するコプロセッサーインストラクションを処理し始めるよう動作可能である。
インストラクションキューに関して、所定のパイプラインステージとパートナーパイプラインステージの双方が、好ましくは、それら各々のパイプラインの第一パイプラインステージの1つである。より特定すると、好ましい実施例において、所定のパイプラインステージは、第一のパイプラインのフェッチ(取り出し)ステージであり、かつパートナーパイプラインステージは、第二のパイプラインの復号ステージであり、その復号ステージは、トークンを受け取るとコプロセッサーインストラクションを復号するよう動作可能である。
そのような好ましい実施例において、第一のパイプラインのフェッチステージは、好ましくは、一連のインストラクションの中の各インストラクションについてトークンがインストラクションキューに入れられるように動作可能であり、かつ第二のパイプラインの復号ステージは、関連するトークンを受け取ると、各インストラクションを復号して、そのインストラクションがコプロセッサーによる更なる処理を要求するコプロセッサーインストラクションであるかどうかを判定するようにアレンジされている。
前記のアプローチの代案として、代わりに、インストラクションの各々が、まず、第一のパイプラインの復号ステージによって復号されるようにし、そして、実際に、コプロセッサーによって実行されるべきコプロセッサーインストラクションであったインストラクションのみを、インストラクションキューを介して送ることが可能であることが理解される。この瞬間において、所定のパイプラインステージが、第一のパイプラインの復号ステージであるかまたは復号ステージに続くステージである必要があるということが明らかである。
好ましい実施例において、少なくとも1つの同期キューの1つがキャンセルキューであり、所定のパイプラインステージが、第一のパイプラインにあって、かつトークンがキャンセルキューに入れられるようにアレンジされていて、その所定のパイプラインステージのコプロセッサーインストラクションがキャンセルされるべきかどうかを識別し、またパートナーパイプラインステージが、第二のパイプラインにあって、キャンセルキューからトークンを受け取り、かつそのトークンが、コプロセッサーインストラクションがキャンセルされるべきであることを識別するならば、そのコプロセッサーインストラクションがキャンセルされるように動作可能である。
したがって、メインプロセッサーはそれがすでにコプロセッサーに渡してしまったインストラクションをキャンセルするよう望むことになる。このことが起こるのは、例えば、インストラクションがその条件符号のいずれかを満たさず、それによってメインプロセッサーとコプロセッサーの双方でキャンセルされるべきインストラクションを実行することが必要となるときである。キャンセルキューは、この情報をメインプロセッサーからコプロセッサーへと運ぶ。
好ましい実施例において、キャンセルキューに関して、前記所定のパイプラインステージは、第一のパイプラインの発行ステージであり、かつパートナーパイプラインステージは、第二のパイプラインの発行ステージに続くステージである。より特定すると、好ましい実施例において、パートナーパイプラインステージは、コプロセッサーパイプラインの第一の実行ステージである。
好ましい実施例において、パートナーパイプラインステージは、キャンセルキューからトークンを受け取り、かつコプロセッサーインストラクションがキャンセルされるべきであることをそのトークンが識別するならば、第二のパイプラインからコプロセッサーインストラクションを取り除くよう動作可能である。インストラクションが第二のパイプラインから取り除かれ、あるいは浄化されるのに、多くの方法があるということが理解される。例えば、そのインストラクションをパイプラインから実際に取り除いて直ちに効力を発することが可能である。しかしながら、好ましい実施例において、その代わりに、インストラクションがパイプラインの残りのステージのいくつかを通ることが可能であるが、インストラクションが実行されるべきでないことを指示するフラッグが設定されていて、インストラクションがなおもキューからトークンを選ぶものとされる。
好ましい実施例において、少なくとも1つの同期キューの1つは、フィニッシュキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、かつトークンがフィニッシュキューに入れられるようにアレンジされていて、その所定のパイプラインステージのコプロセッサーインストラクションを第二のパイプラインから後退させる許可を識別し、またパートナーパイプラインステージが、第二のパイプラインにあって、フィニッシュキューからトークンを受け取り、かつコプロセッサーインストラクションを後退させることが許可されていることをそのトークンが識別するならば、そのコプロセッサーインストラクションを後退させるように動作可能である。
したがって、コプロセッサーパイプラインの各インストラクションを後退させるよう許可することによって、フィニッシュキューは、パイプラインの端で同期を維持する。好ましい実施例において、コプロセッサーパイプラインの長さは、フィニッシュキューの端から現れる対応するトークンを受け取ることが可能なだけ十分長くコプロセッサーインストラクションの後退を遅延させる必要性によって指令される。
フィニッシュキューに関して、所定のパイプラインステージは、好ましくは第一のパイプラインのライトバックステージであり、かつパートナーパイプラインステージは、好ましくは第二のパイプラインのライトバックステージである。
好ましい実施例において、少なくとも1つの同期キューの1つは、長さキューであり、前記所定のパイプラインステージは、第二のパイプラインにあって、かつベクトル化コプロセッサーインストラクションについて、トークンが長さキューに入れられるようにアレンジされていて、そのベクトル化コプロセッサーインストラクションについて長さ情報を識別し、またパートナーパイプラインステージは、第一のパイプラインにあって、かつ長さキューからトークンを受け取って、その長さ情報を、第一のパイプライン内でベクトル化コプロセッサーインストラクションを更に処理する要因として盛り込むように動作可能である。
コプロセッサーインストラクションによってはベクトル化されるものがあり、それらによって、インストラクションの幾度かの反復が、単一のインストラクションの中で特定できるものとなる。典型的な例は、ロードおよび蓄積インストラクション、いくつかのデータ値を単一のインストラクションで転送できるベクトル化ロードまたはベクトル化蓄積インストラクションである。これには、典型的には、コプロセッサーの一組のレジスターとメモリーの連続したひとまとまりの位置との間で、またはその反対に、何語かのデータを転送することが含まれている。
コプロセッサーがコプロセッサーインストラクションを復号したとき、ベクトル化ロードまたは蓄積演算がどれだけ長いかを知るものとなり、この情報は、同期トークンとして、長さキューを介してメインプロセッサーに送り返される。
長さキューに関して、好ましい実施例において、前記所定のパイプラインステージは、第二のパイプラインの復号ステージであり、かつパートナーパイプラインステージは、第一のパイプラインの第一の実行ステージである。
本発明の好ましい実施例において、少なくとも1つの同期キューの1つは、アクセプトキューであり、前記所定のパイプラインステージは、第二のパイプラインにあって、かつトークンがアクセプトキューに入れられるようにアレンジされて、その所定のパイプラインステージのコプロセッサーインストラクションがコプロセッサーによって実行されることをアクセプトするべきかどうか識別し、またパートナーパイプラインステージは、第一のパイプラインにあって、アクセプトキューからトークンを受け取り、かつコプロセッサーインストラクションがアクセプトされるべきでないことをそのトークンが識別するならば、そのコプロセッサーインストラクションがメインプロセッサーによって拒絶されるものとなるように動作可能である。
コプロセッサーは、前記所定のパイプラインステージで、さもなければ有効なコプロセッサーインストラクションをアクセプトできないと判断し、この情報を、同期トークンとして、アクセプトキューを介してメインプロセッサーに送る。インストラクションをコプロセッサーがアクセプトできないならば、「バウンス(返送)された」と言われる。好ましい実施例において、コプロセッサーがインストラクションをバウンスするならば、それは、パイプラインからインストラクションを取り除かないで、それを「ファントム」インストラクションに変換し、そのインストラクションの実行が確実に完了しないものとなる。
アクセプトキューに関して、好ましい実施例において、前記所定のパイプラインステージは、第二のパイプラインの発行ステージであり、かつパートナーパイプラインステージは、第一のパイプラインの第二の実行ステージである。
更には、パートナーパイプラインステージは、好ましくはアクセプトキューからトークンを受け取り、かつコプロセッサーインストラクションがアクセプトされるべきではないことを識別するならば、コプロセッサーインストラクションを第一のパイプラインから取り除くように動作可能である。キャンセルキューに関して先に記述したとおり、インストラクションをパイプラインから取り除き、または浄化するのに多くの方法がある。好ましい実施例において、第一のパイプラインのパートナーパイプラインステージは、アクセプトキューからトークンを受け取って対応するコプロセッサーインストラクションがアクセプトされるべきではないことを識別し、インストラクションが第一のパイプラインの残りのステージのいくつかを通るが、フラッグを設定してそのインストラクションが実行されるべきではないことを指示するようにアレンジされる。
本発明の好ましい実施例において用いられる前述の種々の制御キューと同様に、一つ以上の同期キューもまた提供されて、メインプロセッサーとコプロセッサーの間のデータキューとして働く。より特定すると、好ましい実施例において、少なくとも1つの同期キューの1つは、コプロセッサーインストラクションが、コプロセッサーからメインプロセッサーのアクセスが可能なメモリーにデータアイテムが転送されるように動作可能である蓄積インストラクションであるときに用いられる蓄積キューであり、前記所定のパイプラインステージが第二のパイプラインにあって、かつ前記蓄積インストラクションの1つを処理するとき、トークンが蓄積キューに入れられるようにアレンジされて転送されるべき各データアイテムを識別し、またパートナーパイプラインステージは、第一のパイプラインにあって、かつ各トークンを蓄積キューから受け取って、対応するデータアイテムがメモリーへと転送されるように動作可能である。
好ましい実施例において、蓄積キューに関して、前記所定のパイプラインステージは、第二のパイプラインの発行ステージであり、かつパートナーパイプラインステージは、第一のパイプラインのアドレス生成ステージである。
蓄積転送は、単一の値またはベクトルであり得る。後者の場合には、コプロセッサーは、第二のパイプラインの発行ステージのインストラクションを反復することによって、多重転送を有効に一連の単一転送へと変換する。これによって、蓄積インストラクションには、各アイテムを転送する瞬間が作り出される。インストラクションは、それが反復する間、コプロセッサー発行ステージに留まり、パイプラインを下って行くそれ自体のコピーを作り出す。反復されるインストラクションの最初のものは「ヘッド」と称され、他のものは「テール」と称される。
好ましい実施例において、少なくとも1つの同期キューの1つは、コプロセッサーインストラクションが、メインプロセッサーのアクセスが可能なメモリーからコプロセッサーへとデータアイテムが転送されるように動作可能なロードインストラクションであるときに用いられるロードキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、かつ前記ロードインストラクションの1つを処理するとき、トークンがロードキューに入れられるようにアレンジされていて、転送されるべき各データアイテムを識別し、またパートナーパイプラインステージが、第二のパイプラインにあって、かつロードキューから各トークンを受け取って、対応するデータアイテムがコプロセッサーに転送されるように動作可能である。
好ましい実施例において、ロードキューに関して、前記所定のパイプラインステージは、第一のパイプラインのライトバックステージであり、かつパートナーパイプラインステージは、第二のパイプラインのライトバックステージである。
蓄積インストラクションと共にあるとき、ロードインストラクションは、単一のデータ値またはベクトルロードインストラクションを介しての複数のデータ値の転送を特定する。したがって、好ましい実施例において、ロードデータは、メインプロセッサーのライトバックステージによってインターフェースを横切って送られ、コプロセッサーパイプラインのライトバックステージによって受け取られる。好ましい実施例において、コプロセッサーパイプラインは、フィニッシュトークンがライトバックステージのインストラクションが退却できるものとするのを待つことを除いては、発行ステージを越えてストールできないので、ロードインストラクションは常に、コプロセッサーにデータが到着するのと同期してコプロセッサーパイプラインのライトバックステージに到着する。したがって、好ましい実施例において、ライトバックステージのロードインストラクションが到着してデータを再編成するのに用いられるダブルバッファで、ロードキューは単純に形成される。
好ましい実施例において、先に記述したとおり、ロードインストラクションと蓄積インストラクションは、転送されるべき複数のデータアイテムを定義するベクトル化コプロセッサーインストラクションであり、装置は、ロードキューおよび蓄積キューの少なくとも一方と関係し、制御信号を所定のパイプラインステージに送って所定のパイプラインステージによるトークンの発行を停止させるよう動作可能で、一方関連するロードまたは蓄積キューは一杯になったと判定されるフロー制御ロジックを更に備える。
フロー制御ロジックは、受け取りパイプラインがデータを処理できないならば、データの流れを止めることができる。好ましい実施例において、フロー制御ロジックは、蓄積キューに提供され、フロー制御ロジックは、パートナーパイプラインステージがデータアイテムをアクセプトできないメインプロセッサーから指示を受け取って制御信号を発行するよう動作可能である。好ましい実施例において、ロードインストラクションは常に、ロードキューを介してコプロセッサーにデータが到着するのと同期して、コプロセッサーパイプラインのライトバックステージに到着するという先に記述した事実があるので、好ましい実施例において、フロー制御ロジックをロードキューと関連付ける必要は無い。しかしながら、そのような同期を保証することのできない実施例においては、フロー制御ロジックもまた、必要ならばロードキューを備えることができるということが理解される。
好ましい実施例において、メインプロセッサーのロード蓄積ユニットが、コプロセッサーからのデータの流れを止めることができるよう名フロー制御を、蓄積データは要求する。これは、停止信号をコプロセッサーに送ることで行われる。好ましい実施例において、この信号は、コプロセッサーに到着するのに2クロックサイクルかかるので、それは、好ましくは、蓄積キューが一杯になるという危険が起こり次第生成される。比較的短いキューでは、この危険はメインプロセッサーのロード蓄積ユニットがデータアイテムをアクセプトできなくなるやいなや現実のものとなり、したがって、好ましい実施例では、メインプロセッサーのロード蓄積ユニットがデータをアクセプトできなくなるごとに、停止信号がコプロセッサーに送られる。
メインプロセッサーは、コプロセッサーパイプラインのインストラクションを識別できるようになることが時には必要である。これは、例えば、メインプロセッサーがどのインストラクションをフラッシュするべきであるかをコプロセッサーに指示できるように、フラッシュを行う上で必要である。したがって、メインプロセッサーはコプロセッサーに送られる各インストラクションにタグを与え、それは、好ましい実施例において、パイプラインのタグの全てがいかなる瞬間でも一意性を有するだけ十分大きな値のプールから引き出される。
したがって、好ましい実施例において、各トークンには、そのトークンの関係するコプロセッサーインストラクションを識別するタグが含まれている。
したがって、好ましい実施例において、メインプロセッサーは、第一および第二の双方のパイプラインからコプロセッサーインストラクションをフラッシュする必要があるとき、フラッシュ信号をコプロセッサーへと放送して、フラッシュされる必要のある最も古いインストラクションに関係するタグを識別するよう動作可能であり、コプロセッサーは、タグからその最も古いインストラクションを識別して、コプロセッサー内でその最も古いインストラクションおよびその後のいかなるインストラクションをも第二のパイプラインからフラッシュするよう動作可能である。
更に、好ましい実施例において、前記少なくとも1つの同期キューの1つ以上は、前記フラッシュ信号に応答してフラッシュされ、タグを用いてそのキューの中のどのトークンがフラッシュされるべきかを識別する。
好ましい実施例において、連続するコプロセッサーインストラクションが連続したタグを有するならば、フラッシュを行う機構が簡略化される。これは、好ましい実施例において、コプロセッサーに送られたインストラクションがコプロセッサーインストラクションであるときにタグ番号を増やすだけのことで達成される。これは、インストラクションを送った後に行われ、そうであるので、コプロセッサーインストラクションが送られる前よりもむしろ送られた後に、タグが変わる。好ましい実施例において、メインプロセッサーは、どのような種類のインストラクションであるのかを判定するためにインストラクションを復号する時間がまだ無いので、インストラクションを送る前にタグを増やすことが可能なわけではない。コプロセッサー復号ステージがノンコプロセッサーインストラクションを取り除くとき、それは、連続するタグを担持するインストラクションの流れと一緒に無くなってしまう。
同期キューは種々の形を取り得ることが理解される。しかしながら、好ましい実施例において、各同期キューは、トークンを蓄積する所定数のエントリーを有するファーストインファーストアウト(FIFO)バッファを備える。好ましい実施例において、ロードキュー以外のキューの各々は、トークンを蓄積する3つのエントリーまたはスロットを有する。先に記述したとおり、好ましい実施例のロードキューは、好ましくはダブルバッファによって提供される。
ある実施例においては、複数のコプロセッサーが提供され、各同期キューは、メインプロセッサーのパイプラインステージをコプロセッサーの1つにおけるパイプラインステージと結合する。経済的な理由から、好ましい実施例においては、確実に、できる限り少ししかコプロセッサーインターフェースが複製されないようになっている。とりわけ、好ましい実施例のコプロセッサーは長さを共有し、データキューをアクセプトして蓄積するが、それらはメインプロセッサーが保持する。これらのキューが共有されるならば、1つのコプロセッサーだけがいつでもキューを使えるであろうが、それは、1つのコプロセッサーだけをいつもアクティブにすることによってほとんど直ちに保証される。しかしながら、一般にこれは大きな制限とはならず、それは、一般的に言って、いつも1つのコプロセッサーしか用いられていないからである。更に詳しく言うと、プロセッサーは典型的にはドライバソフトウェアで駆動されるが、それは、1つのプロセッサーしか駆動しない。ドライバソフトウェアを呼び出してそこから戻ることによって、一般に、1つのコプロセッサーを用いることと異なるコプロセッサーを用いることとの間に、いくつかのコアインストラクションがあることが確実なものとなる。
本発明のトークンをベースとしたパイプライン同期技法は、データ処理装置の非同期および同期設計の双方に適用可能であることが理解される。しかしながら、好ましい実施例においては、データ処理装置は同期設計を有しており、トークンは、所定のパイプラインステージによって、キューに入れられるようになり、かつクロックサイクルの変化端でパートナーパイプラインステージによってキューから受け取られるものとなっている。
第二の観点から見ると、本発明によって、データ処理装置のパイプライン間の同期方法が提供され、そのデータ処理装置は、一連のインストラクションを実行するよう動作可能なメインプロセッサーと前記一連のインストラクションの中のコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーとを備え、そのメインプロセッサーは、複数の第一パイプラインステージを有する第一のパイプラインを備え、かつコプロセッサーは、複数の第二パイプラインステージを有する第二のパイプラインを備え、各コプロセッサーインストラクションは、第一のパイプラインおよび第二のパイプラインの双方を通って経路付けされるようアレンジされており、その方法は、(a)1つのパイプラインの所定のパイプラインステージを、他のパイプラインのパートナーパイプラインステージと同期キューを介して結合し、(b)その所定のパイプラインステージがコプロセッサーインストラクションを処理しているときにトークンを同期キューに入れ、(c)パートナーパイプラインステージが同期キューからトークンを受け取ると、パートナーパイプラインステージ内でコプロセッサーインストラクションを処理するステップを備え、それによって、所定のパイプラインステージとパートナーパイプラインステージの間で第一および第二のパイプラインの同期が得られる。
本発明は更に、単に例として、添付する図面に例示されるようなそれの好ましい実施例を参照して記述される。
(好ましい実施例の説明)
図1は、本発明の好ましい実施例の同期技法が使用されるデータ処理システムを示す。図1に示されるように、プロセッサーコア40は、プロセッサーコア40によって要求されるインストラクションのアクセスされるインストラクションキャッシュまたは他のメモリー装置10に結合されている。プロセッサーコア40内には、プリフェッチ(先取り)ユニット20が提供されていて、パイプライン化プロセッサー30によって要求されると、プリフェッチユニットの判断するインストラクションの要求が経路50を通って発行される。そして、インストラクションが検索されるインストラクションメモリー10が、インストラクションを出力して、経路60を通してプリフェッチユニット20に戻し、そしてそこから、それらは経路70を通してパイプライン化プロセッサー30へと送られる。インストラクションを実行しているとき、パイプライン化プロセッサー30は、データ値を収容するレジスターバンク35のレジスターとインターフェースで接続して、インストラクションによって操作される。ロードインストラクションが用いられて、データ値をデータメモリー87からレジスターバンクへとローディングし、そして蓄積インストラクションが用いられて、データ値をレジスターバンク35からデータメモリー87へと蓄積する。そしてデータ処理インストラクションが、レジスターバンク35の特定のレジスターに蓄積されるデータ値で実行される。
プリフェッチユニットによってプリフェッチ(先取り)されるインストラクションシーケンスのインストラクションには、インストラクションの流れにおいて変化を生じるようアレンジされるブランチインストラクションがある。ブランチインストラクションには、インストラクション自体の操作符号内のブランチについてターゲットアドレスを特定するものがあり、そうしてこれらのブランチインストラクションの予測が行われると、そのようなブランチインストラクションに続いてどのインストラクションをプリフェッチすべきかを決定する上でプリフェッチユニット20の助けとなるものがある。そのようなブランチ予測は、ブランチ予測ロジック25によって行われる。ブランチ予測ロジック25が、そのようなブランチインストラクションが実行されると予測し、そうしてそのブランチが取られるならば、プリフェッチユニット20は、次のインストラクションとして、ターゲットアドレスの特定するインストラクションを検索するようアレンジされる。反対に、ブランチ予測ロジック25がブランチインストラクションは実行されず、したがってそのブランチが取られないと予測するならば、フェッチユニット20は、次のインストラクションとして、インストラクションメモリー10の次に続くアドレスのインストラクションを検索する。
パイプライン化プロセッサー30内で、そのようなブランチインストラクションのいずれかを実行するかどうかが究極的に決定されるとき、なんらかの動作を行うようプリフェッチユニット20が要求されるとすれば、関係する情報がプリフェッチユニット20に送り返されることは、明らかに重要である。例えば、予測可能なブランチインストラクションについて、行われた予測が間違っていたならば、プリフェッチユニット20に知らせる必要がある。例えば、ブランチ予測ロジック25が、ブランチが取られると予測し、そうしてターゲットアドレスのインストラクションを検索したが、インストラクションがパイプライン化プロセッサー30によって続いて実行されるとき、そのブランチインストラクションは実際には実行されるべきではないと判断されるならば、回復アドレスが、強制PC信号として経路80を通して出力される必要があり、この場合、その回復アドレスは、そのブランチインストラクションの後、次に続くアドレスである。同様に、ブランチ予測ロジック25が、ブランチインストラクションを実行されないと予測したが、実際は、パイプライン化プロセッサー30が、それは実行されるべきであると続いて判断するならば、回復アドレスが、経路80を経てプリフェッチユニット20へと再発行される必要があり、この場合、その回復アドレスは、そのブランチのターゲットアドレスである。そうでなくて、ブランチ予測が正しかったならば、更なる動作が必要とはされず、強制PC信号も、経路80を通してプリフェッチユニット20に発行される必要は無い。
ブランチインストラクションが実際に実行されない1つの理由は、ブランチインストラクションはしばしば、実行時にある条件が存在するときのみに実行される条件付インストラクションであると特定されるからである。これらの様々な条件は、一組の条件符号を参照して特定され、そうして、インストラクションが実行されるならば、1つ以上の条件符号が特定の値を有さなければならないと特定する。条件符号の状態についてある予測を行い、したがってブランチインストラクションが実行されるかどうかについての予測を行うことが可能である一方で、そのブランチインストラクションがパイプライン化プロセッサー30内の所定のポイントに到達するときのみ、条件符号の絶対的な評価を行うことができ、それは、条件符号が、インストラクションシーケンスの条件符号設定インストラクションによって更新され、そうして、条件符号の状態が、時間を経て変わるからである。
インストラクションシーケンス内のあるインストラクションもまた、コプロセッサーインストラクションであり、それらは、コプロセッサー110のパイプライン化プロセッサー130内で実行される。そのようなコプロセッサーインストラクションは、経路95を通してコプロセッサー110のパイプライン化プロセッサー130へと発行される。そして、パイプライン化プロセッサー130は、必要であればコプロセッサーレジスター120を参照してコプロセッサーインストラクションを実行し、コプロセッサーインストラクションの結果をコア40に戻す必要があるならば、それらは経路100を通して戻される。
コプロセッサーインストラクションは、経路90を通してコプロセッサーに送られるが、それはまた、コア40のパイプライン化プロセッサー30の種々のパイプラインステージを通されて、例えば、そのコプロセッサーインストラクションが、実行時に条件符号の状態に依存する条件付コプロセッサーインストラクションであるならば、そのコプロセッサーインストラクションが実際に実行されるべきであるかどうかについて決定をなすことが可能となる。制御信号は、所定のキューを介してパイプライン化プロセッサー30とパイプライン化プロセッサー130との間を通されて、確実に、双方のパイプラインを通るコプロセッサーインストラクションの進行が、必要なポイントで同期したままであるようにする。このプロセスは、以下でより詳細に説明される。
図2Aは、本発明の好ましい実施例による、図1のパイプライン化プロセッサー30内に提供されるパイプラインの種々のパイプラインステージを例示するブロック図である。ステージ190では、プリフェッチユニット20からインストラクションがフェッチされ、その後それは、復号ステージ200で復号され、そして続いて、発行ステージ210に送られ、そこでインストラクションの必要とするデータが、レジスターバンク35の適切なレジスターから得られる。
この時点で、プロセッサーは、2つの補助パイプラインへと、すなわち、パイプラインステージ220、230、240および250を収容する第一の補助パイプラインと、パイプラインステージ260、270、280および290を収容する第二の補助パイプラインとに枝分かれする。第一の補助パイプラインは、ロード/蓄積パイプライン222であり、ここでは、ロード/蓄積ユニット(LSU)とも称する。ロード/蓄積パイプラインは、ロードまたは蓄積インストラクションを処理するのに用いられ、したがって、ロードまたは蓄積インストラクションは、パイプラインステージ210からパイプラインステージ220へと経路付けられる。パイプラインステージ220で行われる処理は、ロードまたは蓄積動作を有効とするのに用いられるメモリーアクセスに必要とされるアドレスを生成するものである。このプロセスは、典型的には、2つのレジスターの値を加え合わせること、またはレジスターの値をインストラクションなどの中で特定される「直接の」値に加えることを含んでいる。ステージ230および240は、2つのメモリーパイプラインステージであって、その間、ロードまたは蓄積インストラクションによって必要とされるメモリーアクセスが生じる。図2Aに例示される発明の好ましい実施例には、2つのメモリーステージ230、240があるが、それは、ロードおよび蓄積動作が、そのような実施例においては典型的に少なくとも2クロックサイクルかかるからである。
メモリーアクセスが完了するとき、インストラクションは、メモリー2パイプラインステージ240から、ここではまた退却ステージとも称するライトバックステージ250へと移動する。ライトバックステージにおいては、レジスターバンク35は、ロードまたは蓄積動作の結果を反映するよう更新の用意がなされ、その更新は、ライトバックステージの終わりに起こる。
加算または減算インストラクションのような算数ロジックインストラクションは、いずれもパイプラインステージ210から第二の補助パイプライン262(ここではまたALUパイプラインとも称する)のパイプラインステージ260へと経路付けられ、このステージは、シフトロジックを提供して演算子の要求されるシフティングを行うことを可能とする。そしてインストラクションが、パイプラインステージ270へと経路付けられ、それは、その算数ロジックインストラクションを実行する算数ロジックユニットを組み込んでいる。この実行ステージの後、インストラクションは、パイプラインの飽和ステージ280へと送られ、そこでは、必要とされる結果の飽和が行われる。例えば、算数論理インストラクションによっては、結果が所定数のビットに飽和されることを要求するものがあり、そうして一例として、16ビットの結果が9ビットの結果へと飽和されることを必要とする。そのようなプロセスは、パイプラインステージ280内で行われる。要求された飽和の後、続いてインストラクションは、ライトバックステージ290へと送られるが、ここではそれはまた退却ステージと称される。ライトバックステージ250を参照して先に説明したとおり、ライトバックステージの目的は、データ処理装置の状態を更新することであり、とりわけ、ライトバックステージのインストラクションの実行の結果を考慮してレジスターバンク35を更新することである。
図2Bは、本発明の好ましい実施例による、図1のコプロセッサー110のパイプライン化プロセッサー130内に備えられるパイプラインの種々のパイプラインステージを例示する。最初の2つのステージは、復号ステージ205と発行ステージ215である。そして、インストラクションは、5つの実行ステージ225、235、245、255および265を通り、その後、インストラクションは、ライトバックステージ275に入り、そこでコプロセッサーレジスター120が、ライトバックステージのコプロセッサーインストラクションを実行した結果を考慮して更新される。
残りの図面を参照してより詳細に説明されるとおり、プロセッサーコアとコプロセッサーの特定のパイプラインステージ間に種々のキューが備えられて、トークンをベースとした構成を用いる各キューによって結合されるパイプラインステージ間に同期が生じることが可能となる。より特定すると、1つ以上の制御キュー285が、ALUパイプライン262とコプロセッサーパイプラインとの間に備えられ、加えて、1つ以上のデータキュー295が、コアのLSUパイプライン222とコプロセッサーパイプラインとの間に備えられる。
重大な情報の送信のために、確実に、パイプラインが正しく同期されるものとする、本発明の好ましい実施例で用いられるトークンをベースとしたパイプライン同期技法が、図3乃至19を参照してここに説明される。以下の記述において、メインプロセッサーはコアと称され、かつまたコプロセッサーは「GCP」または一般コプロセッサーと称される。図3乃至図19は、以下の、番号を付けた段落を参照して説明される。
1 序論
コアは、インストラクションを複数のコプロセッサーに送って、それらとデータを交換する必要がある。これらのコプロセッサーは、多かれ少なかれコアと調和することが意図されており、同様にコアにパイプライン化されている。インストラクションは、コアパイプラインのフェッチステージから送り出されてコプロセッサーによって復号され、そしてそれは、復号されたインストラクションをそれ自体のパイプラインへと下す。コプロセッサーインストラクションは、条件符号がうまくいかなければ、コアによってキャンセルされ、あるいはコプロセッサーパイプライン全体が、ブランチが誤って予測された場合にはフラッシュされる。ロードおよび蓄積データもまた、コアLSUとコプロセッサーパイプラインの間を通る必要がある。
コプロセッサーインターフェースに課せられた大きな制約は、それが、2サイクルの遅延にわたって動作しなければならないというものであり、すなわち、コアからコプロセッサーへと送られる、あるいはその逆の信号はいずれも、一方から他方へと伝播するためにクロックサイクル全体が与えられなければならない。これが意味するのは、インターフェースを横切る信号は、インターフェースの一方の側のレジスターからクロックを送られなければならず、かつ他方の側の別のレジスターへと直接クロックを送らなければならず、組み合わせのプロセスが介入してはならない。この制約が生じるのは、コアおよびコプロセッサーが相当距離離されて配置され、信号伝播時間をカバーするために大きなタイミングマージンが許容されなければならないからである。信号伝播におけるこの遅延によって、パイプラインの同期を維持するのが困難となり、緊密に結合した同期方法を除外してしまう。
以下の記述では、2つのパイプラインの間にいくぶんの緩みを許容し、一方確実に、重大な情報の送信のためにパイプラインが正しく配列されるようにする、トークンをベースとするパイプライン同期方法が説明される。
2 説明
GCPインターフェースは、一方のパイプラインから他方のパイプラインへとトークンを交換することによって、2つのパイプライン間の緩やかな同期を達成する。これらのトークンは、パイプライン間のキューを下り、また更なる情報を運搬する。多くの場合、キューの主要な目的は、処理されているインストラクションについての情報を運搬し、または一方のパイプラインに他方のパイプラインで生じている事象のことを知らせるものである。トークンは、コプロセッサーインストラクションが、関係するパイプラインステージから次のステージへと送られるたびごとに生成される。これらのトークンは、他方のパイプラインでパートナーステージによって選択され、そのステージの対応するインストラクションが動き続けることを許可するのに用いられる。各パイプラインを下るコプロセッサーインストラクションの動きは、パイプラインを接続する種々のキューに沿ったトークンの動きによって正確に整合される。そうして、一般的なコプロセッサーインターフェースは、制御駆動よりもむしろデータ駆動である。
2.1 コプロセッサーインストラクション
GCPは、コプロセッサーに特有の一組のインストラクションから取られる複数のインストラクションを実行する必要がある。所定のコプロセッサーは、必ずしも全ての可能なコプロセッサーインストラクションを実行するものではなく、また取り扱うことのできないこれらのインストラクションを拒絶する。以下の表1は、特定の1つのプロセッサーコア、すなわち英国ケンブリッジのARMリミティッドによって開発されたARMプロセッサーコアの1つによって支援されるコプロセッサーインストラクションを全て列挙し、各々を簡潔に説明する。
Figure 0003981378
コプロセッサーインストラクションは、3つのメイングループ、すなわち、ロード、蓄積および処理インストラクションに属する。ロードおよび蓄積インストラクションは、情報がコアとコプロセッサーとの間を通ることを許可する。それらの中にはベクトル化されたものもあり、すなわち、それらは、いくつかの値が単一のインストラクションに転送されることを許可する。これには、典型的には、コプロセッサーの一組のレジスターとメモリーの連続する一組の領域との間で数語のデータを転送することが含まれている。他のインストラクション、例えば、MCRおよびMRCは、コアとコプロセッサーのレジスター間でデータの転送を許可する。CDPインストラクションは、コプロセッサー内に既に保持されているデータに特定の操作を実行することを制御し、その結果をコプロセッサーレジスターに書き戻すか、または他の何らかの方法でコプロセッサーの状態を変える。どの操作が行われるべきかは、インストラクション内の操作符号フィールドによって特定される。
コアパイプラインは、全てのインストラクション、コアおよびコプロセッサーインストラクションの双方を取り扱う。他方コプロセッサーは、コプロセッサーインストラクションを取り扱うのみであり、それでコプロセッサーパイプラインは、時間的に大きな割合で空になっていそうである。
2.2 コプロセッサーパイプライン
GCPパイプラインは、コアパイプラインに非常に類似するが、フェッチステージを欠く。代わりに、インストラクションは、コアからGCPパイプラインの復号ステージへと送られる。そして復号ステージは、インストラクションを復号し、ノンコプロセッサーインストラクションおよび、整合しないコプロセッサー番号を収容するいかなるコプロセッサーインストラクションをも拒絶する。いずれのベクトル化データ転送の長さもまた、この時点で決定されてコアへと返送される。そして、復号されたインストラクションは、発行ステージへと送られる。このステージは、インストラクションのこの特定の事例がアクセプトされるかどうかを決定する。そうできなければ、おそらくはそれが存在していないレジスターをアドレスするからであり、インストラクションがバウンスされて、コアにそれをアクセプトできないと知らせる。インストラクションが有効でもあり、かつ実行可能でもあるならば、それは実行パイプラインEX1乃至EX6を下る。EX6(ここではまたライトバック(WB)ステージとも称する)のパイプラインの底で、インストラクションは退却を待ち、それが整合トークンをコアによって送り込まれた別のキューから受け取るときにそれを行うことができる。
2.3 トークンをベースとするパイプライン同期
図3は、コアおよびGCPパイプライン並びにそれらの間で通信を行う同期キューを示す。各キューは、非常に短いファーストインファーストアウト(FIFO)バッファとして実行される。キューには、明確なフロー制御が必要とされず、それは、キューの間のパイプライン長によって、いずれのキューも任意の時間に保持できる項目の数が制限されるからである。図示されている形状では、各キューにおいて3つを超えるスロットが使用可能である必要はない。必要とされる状態情報は、キューが空であるときに指示するフラッグのみである。これは、キューの受信端でモニターされることしか必要でなく、そして関係するパイプラインステージが動き続けることができるかどうかを判定する。キューによって運搬されるいかなる情報もまた、同時に読み、作用することができる。
パイプライン同期の動作は、各キューの目的を説明することで記述される。
2.3.1 インストラクションキュー
コアは、全てのインストラクションを、そのフェッチステージ190を残してインストラクションキュー300に送る。理想的には、それはコプロセッサーインストラクションで送るのみであるが、このステージにはインストラクションを復号する時間が無い。インストラクションがGCP自体の復号ステージ205に到着するとインストラクションを復号し、かつノンコプロセッサーインストラクションを拒絶することがGCPにゆだねられている。それは、これを静かに行うことができるが、コアがこれらのインストラクションを取り除くことを知る必要がないからであって、それは、その復号ステージ200において各インストラクションのタイプを決定することとなるからである。インストラクションキュー300は、3スロット長である。
2.3.2 キャンセルキュー
コアは、それが既にコプロセッサーへと送ったインストラクションを、キャンセルすることを望むかもしれない。このようなことが起こるのは、インストラクションがその条件符号を達成できないときであって、それによって、インストラクションは、コアおよびコプロセッサーの双方におけるインストラクションの流れから取り除かれることが必要となる。キャンセルキュー310は、この情報をコプロセッサーへと運び、それは3スロット長である。
2.3.3 フィニッシュキュー
フィニッシュキュー320は、3スロット長であって、コプロセッサーパイプラインの各インストラクションに退却するよう許可することによって、パイプラインの端で同期性を維持する。コプロセッサーインストラクションの退却を、フィニッシュキュー320の端から現れるトークンに合致させるのに十分な長さだけ遅延させる必要性によって、コプロセッサーパイプラインの長さが決定される。ロードおよび蓄積インストラクションは、フィニッシュキューを利用するものではないので、CDPインストラクションのみがこのキューを必要とすることになる。ロードおよび蓄積インストラクションがどのように退却するかは、後の章で説明される。
2.3.4 長さキュー
コプロセッサーがインストラクションを復号したとき、それは、ベクトル化ロードまたは蓄積動作がどれだけ長くなるのかを知ることとなる。この情報は、同期トークンと一緒に長さキュー330に送られる。一般的な場合において、インストラクションを、フェッチステージ190から、情報が必要とされるEX1ステージ260(ここではシフトステージとも称される)までコアパイプラインで送るよりも、インストラクションを受け取り、それを復号して長さを戻すほうが長くかかる。コアEX1ステージにトークンが到着するのが遅れると、そのステージが1サイクルだけストールすることになる。これによって、余分なサイクルがコプロセッサーインストラクションの実行に加えられる。幸運なことに、この罰則が全てのコプロセッサーインストラクションについて被られるわけではないが、この理由は後の章で詳述する。長さキューは、3スロット長である。
2.3.5 アクセプトキュー
コプロセッサーは、それがインストラクションをアクセプトできず、そしてこの情報を同期トークンと一緒にアクセプトキュー340へと送ることを、発行ステージで決定する。コアEX2ステージ270(ここではまたALUステージとも称される)が、対応するインストラクションを拒絶するようにそれに告げるトークンを受け取ると、それは、EX2ステージをクリアすることによって、パイプラインからインストラクションを取り除く。アクセプトキューは、3スロット長である。
2.3.6 フラッシュ放送
ブランチが誤って予測されているならば、コアが双方のパイプラインをフラッシュすることが必要となる。この動作は、潜在的にパイプライン全体に影響を及ぼすので、それは、キューにおいて送られるものではなく、コアからコプロセッサーへと放送され、キューと同じタイミングの制約を受ける。フラッシュ信号は、コプロセッサーによって受け取られるとき、パイプラインおよびインストラクションキュー300がクリアされて、インストラクションにフラッシュを引き起こさせる。
図4は、コアおよびパイプラインステージ並びに両者を接続するキューをより詳細に示す図である。コアのロード/蓄積ユニット(LSU)222もまた示されている。LSUは、蓄積キュー400を介してコプロセッサーから蓄積データをアクセプトし、そしてロードキュー410を介してコプロセッサーに送るロードデータを生成する。
インストラクションキュー300およびコプロセッサー復号ステージ205が、別々に示されているが、実際にはそれらは好ましい実施例において、単一のブロックを形成する。この理由は、2.5.4章で説明される。
2.4 データ転送
たいていのコプロセッサーインストラクションは、結果的に、単一の値かまたはベクトルとして、インターフェースを横切るデータの転送を生じる。したがって、データを送るのに経路が必要とされる。これらの経路によって、コアLSU222がコプロセッサーパイプラインと通信できるようになる。コプロセッサーは、一般的に別個のLSUを有してはいないので、ロードデータの蓄積および受け取りのためのデータの生成が、直接パイプラインによって行われる。
図5は、コアLSU222とコプロセッサーパイプラインとの間の通信の概略を示す図である。
ロードおよび蓄積は、以下の章で別々に記述される。
2.4.1 ロード
ロードデータは、図5に示されるように、コアLSU222のWBステージ250によってインターフェースを横切って送られ、コプロセッサーパイプラインのEX6ステージ275(すなわちWBステージ)によって受け取られる。EX6のインストラクションが退却できるようにするフィニッシュトークンを待つこと以外には、コプロセッサーパイプラインは、発行ステージを超えてストールできないので、ロードインストラクションは、常にデータがコプロセッサーに到着するのと同期してEX6に到着する。したがって、ロードキューは、ダブルバッファ410によって実行され、それは、EX6へのロードインストラクションの到着でデータを再調整するように働く。このダブルバッファ410は、図4に示されている。
2.4.2 蓄積
コアLSUは、データが到着するときにそれをアクセプトすることを保証できないので、蓄積キュー400が必要となる。このキューは、LSU222のDC1ステージ230(ここではまたメモリー1ステージとも称される)を、コプロセッサーの発行ステージ215に接続する。様々な量のデータが転送されるので、LSU222がデータの転送を一時的に停止できるようにするよう、蓄積キュー400にフロー制御が必要となる。これについては、後でより詳細に記述される。
2.5 トークンキュー管理
トークンキュー(すなわち、ロードキュー410以外のキューの全て)は、その全てが3スロット長であり、同一の機能を有するが、短いFIFOとして実行される。たいていのキューは、同期したパイプラインの自己制限的な性質のために、フロー制御が必要ではないが、蓄積データキュー400は、コプロセッサーからそこへの情報のフローが制御可能である必要がある。キューの形およびフロー制御を加えることについては、以下の章で説明される。
2.5.1 キューの実行
キューFIFOは、マルチプレクサ660、670を用いることによって選択される現在の出力で、3つのレジスター600、610、620として実行される。図6は、この配置を例示する。キューは、3つのレジスター600、610、620からなり、その各々は、それぞれフラッグ630、640、650と関係していて、レジスターが有効なデータを収容しているかどうかを指示する。新しいデータが、バッファA、すなわちレジスター600に書き込まれることによって、キューへと移動され、そして次のレジスターが空であるもしくは空になろうとしている限り、キューに沿って移動し続ける。キューがいっぱいであるならば、最も古いデータ、したがってキューから読み出されるべき最初のものがバッファCを占め、かつ最も新しいものがバッファAを占める。
マルチプレクサ660、670もまた現在のフラッグを選択し、そしてそれらは、選択された出力が有効であるかどうかを指示する。
2.5.2 キュー変更
キューは、各サイクルでバッファA600に書き込まれ、インターフェースを横切って到着するデータをアクセプトし、かつバッファAフラッグ630は、データと関連する有効ビットをアクセプトする。キューが一杯でない限り、この結果、データの損失を生じることは無く、それは、バッファAの内容が、同じサイクルの間にバッファB610へと移されるからである。キューが一杯であるならば、バッファA600のローディングが抑制されてデータの損失を防止する。いずれにしても、先に記述したとおり、図3および図4に示されるパイプラインの形は、3を超えるスロットが各キューで利用可能である必要はなく、そうすると、キューが一杯であるときにインターフェースによって有効なデータが提供されることもなく、データ損失が続いて起こることも無い。3つのバッファフラッグ630、640、650の状態が用いられて、どのバッファが各サイクルの間にキュー出力を提供するのかが決定される。出力は常に、最も古いデータを収容するバッファによって提供される。これは、それが一杯であるならばバッファCであり、またはバッファBであり、あるいはそれが空であるならばバッファAである。単一の優先符号器は、3つのフラッグを見て正しいマルチプレクサ選択信号を提供できる。また3つのフラッグの状態によって、データがキューにおいて1つのバッファから別のものへとどのように移されるのかが決定される。表2は、3つのフラッグがどのように復号されるのかを示す(「X」は「関心無し」状態を示す)。
Figure 0003981378
キューが一杯でないならば、たとえそのフラッグが設定されていても、バッファAの現在の内容はバッファBへと移されるので、新しいデータをバッファAへと移すことができることに注意する。
キューが読み取られるとき、情報を提供するバッファに関係するフラッグがクリアされなければならない。この動作は、入力動作と結合されてサイクルの終わりにバッファが上書きされるものとなるが、その間、それはキュー出力を提供する。このことは、読み取りイネーブル信号を用いて実行され、選択されたステージのフラッグをマスクし、それが入力に利用できるようにする。図7は、キューの読み取りおよび書き込みを例示する。
4つの有効な入力(「1」、「2」、「3」および「4」)がキューに書き込まれ、そしてそれらが到着するとバッファA600にクロックを送り込む。図は、最初の入力がバッファC620に到着するまで、3つの入力がバッファからバッファへとどのようにクロックされるのかを示す。この時点で、キューからの読み取りが要求される。バッファCが一杯であるので、データを供給することが選択される。それが読み取られているとき、更なる入力をアクセプトするのは自由であるので、それはバッファBから値「2」を受け取り、バッファBは、バッファAから値「3」を受け取る。バッファAは、バッファBに書き込みを行うことで自由になっているので、それは、入力から値「4」をアクセプトすることができる。
2.5.3 フロー制御
前述したとおり、コアLSU222がコプロセッサーからのデータの流れを停止できるようにするのに、蓄積データは、フロー制御を必要とする。これは、停止信号をコプロセッサーに送ることによって行われる。この信号は、コプロセッサーに到達するのに2クロックサイクルかかるので、蓄積キュー400が一杯になるという危険が起こり次第、それが生成されなければならない。キュー長が3であると、コアLSUがデータ項目をアクセプトできなくなり次第、この危険が現実のものとなる。そうしてLSUがデータをアクセプトできないときはいつでも、停止信号がコプロセッサーに送られる。遅延があるために、コプロセッサーは、停止信号が生じた後データを更に2サイクル送り続ける。停止信号が送られるときにもまた項目「飛行中」があるならば、キューは、それを送った後3項目をアクセプトしなければならない。図8は、この状況を例示する。
LSUは、最初の2つの転送AおよびBをアクセプトする。しかしながら、第3の項目Cをアクセプトして、停止信号をポイント800で生じさせることはできない。この信号がポイント810でコプロセッサーに到達するまでに、更に3つの項目C、DおよびEを送っており、かつ既に6番目の項目Fをインターフェースに入れている。ここで停止信号を受け取っているので、コプロセッサーは、項目Fをインターフェースに残す。この新しい項目を見るとそれをアクセプトすることができないので、LSU222は、ポイント820でペンディングフラッグを設定してその存在を記録する。LSUが更なるデータをアクセプトできるとき、それは、キューをアンローディングし始め、ポイント830で停止信号を放棄する。この放棄がポイント840でコプロセッサーに到達するまでに、キューは空となっていて通常のサービスを再開できる。
2.5.4 インストラクションの復号
メモリーからフェッチされる全てのインストラクションを、コアは、GCPインターフェース越しに送り、そこでそれはインストラクションキュー300に入る。理想的には、それはコプロセッサーインストラクションのみで送られるべきであるが、このステージではインストラクションを復号するのに十分な時間を有していない。インストラクションが、それ自体の復号ステージ205に到着すると復号し、かつノンコプロセッサーインストラクションを拒絶することが、GCPにゆだねられる。それは、これを静かに行うことができるが、コアがこれらのインストラクションを取り除くのに承認を必要としないからであって、それは、それがそのときまでに、それ自体の復号ステージ200において各インストラクションのタイプを決定するからである。これが意味するのは、コアから受け取られるインストラクションは、それがインストラクションキューに入るや否や復号されなければならないということである。したがって、インストラクションキュー300は、標準キューの変更化バージョンであって、それは、インストラクション復号器205を組み込んでいる。図9は、インストラクションキューがどのように実行されるのかを示す。
復号器205は、バッファA900に書き込まれるインストラクションをそれが到着するや否や復号し、そしてそれに続くバッファB910およびC920は、バッファAのインストラクションの復号化バージョンを受け取る。ここでAフラッグ930は、Aにおけるデータが有効で、コプロセッサーインストラクションをも表すことを示す。そうして、ノンコプロセッサーまたは認識されていないインストラクションが、直ちにインストラクションキューから落とされ、決して送り続けられることはない。コプロセッサーはまた、コプロセッサーインストラクションにおけるコプロセッサー番号フィールドを比較し、かつそれをそれ自体と比べる。番号が整合しなければインストラクションは無効である。
2.6 インストラクションのタグ付け
時折、コアは、コプロセッサーパイプラインにおいてインストラクションを特定できるようになる必要がある。これは、どのインストラクションがフラッシュされるべきかを、コアがコプロセッサーに指示できるようにフラッシング(詳細は後でカバーされる)に必要である。したがって、コアは、コプロセッサーに送られる各インストラクションにタグを付与し、それは、任意の瞬間にパイプラインの全てのタグが一意的であるだけ十分に大きな値のプールから引き出される。好ましい実施例において、これを達成するのに16のタグが十分であり、4ビットのタグフィールドを必要としている。タグがインストラクションに割り当てられるごとに、モジュロ16でタグ番号が増加されて次のタグを生成する。
連続するコプロセッサーインストラクションが、引き続くタグを有するならば、フラッシング機構が簡略化される。これは、コプロセッサーに送られるインストラクションがコプロセッサーインストラクションであるとき、タグ番号を増加するだけで達成される。これは、インストラクションを送った後に行われ、それで、コプロセッサーインストラクションが送られる前ではなくむしろ後にタグが変わる。コアは、インストラクションを復号してそれがどんな種類のインストラクションであるかを判定するだけの時間をまだ有していないので、インストラクションを送る前にタグを増大させることはできない。コプロセッサー復号ステージ205がノンコプロセッサーインストラクションを取り除くとき、それは連続するタグを運ぶインストラクションの流れで取り去られる。
タグはまた、キューを下るトークンのシーケンスがコアおよびコプロセッサーパイプラインを下るインストラクションのシーケンスと整合することを確かめるのにも用いられる。
3 動作
ここで、GCPインターフェースの機能の仕方を、行われる種々の動作と起こる事象とを例示して説明する。説明に伴う図は、トークンが種々のキューを下って2つのパイプライン間のインターフェースを横切ることを示す。各キューの識別は、開始および終了ポイントを観察し、図3を参照することによって推定される。
3.1 通常動作
図10は、コアおよびコプロセッサーパイプラインの通常の動作を示す。
通常の動作において、コアは、全てのインストラクションを、インストラクションキュー300を介してコプロセッサーへと送り、そしてインストラクションがコプロセッサーインストラクションであるならば、タグを増加させる。コプロセッサーは、インストラクションを復号して、それがコプロセッサーインストラクションではないならば、もしくはそれが誤ったコプロセッサー番号を収容しているならば、それを捨てる。そして各コプロセッサーインストラクションは、パイプラインを下ってそれが発行ステージへと入っていくとき、トークンを長さキュー330に送る。そして、インストラクションは、それがキャンセルキュー310からトークンを受け取るまで発行ステージに残る。インストラクションがキャンセルされることをキャンセルトークンが要求しないならば、それはEX1ステージにまで移行し続け、トークンをアクセプトキュー340へと入れる。そしてインストラクションは、それがEX6ステージに到達するまでパイプラインを下る。この時点でそれはフィニッシュキュー320からトークンを受け取るのを待っているが、フィニッシュキューはそれを退却させることができる。
図10は、長さキュー330を下るトークンにコプロセッサーが応答するのにかかる時間によって、トークンを待つ間に、コアパイプラインが、どのように、インストラクションAについてそのEX1ステージでストールするようになるのかを示す。続いて、この遅延によって、インストラクションBがその発行ステージを離れるときコアの送るトークンを、コプロセッサーパイプラインステージEX1においてBが待つようになる。結果として、インストラクションBは、EX6に到着するのが遅れ、そしてフィニッシュキューのトークンがそこで1サイクル待っていることを見出す。しかしながら、インストラクションCがパイプラインの底に到着するまでに、2つのパイプラインは一旦より一層同期する。
図10から、コプロセッサーパイプラインを実行することで1サイクルのタイミングペナルティが生じることが明らかであるが、それは、インストラクションがコアの発行ステージでストールするからである。しかしながら、次の2つのインストラクションは、ペナルティが共有されるようにこのストールを利用する。パイプラインを下る全てのインストラクションがコプロセッサーインストラクションであるならば、3つ目のインストラクションごとにストールが起こり、そうしてペナルティは、コプロセッサーインストラクションごとにサイクルの余分な3分の1にまで下がる。他方、コプロセッサーインストラクションがパイプラインにおいてまばらであるならば、各コプロセッサーインストラクションについて、単一サイクルペナルティが被られる。そうして平均タイミングペナルティは、コプロセッサーインストラクションの割合が上がると低下する。
3.2 ストール
図11は、コプロセッサーがその発行ステージにおいてストールするとき、コアおよびコプロセッサーパイプラインがどのように振舞うのかを示す。
コプロセッサーインストラクションAがパイプラインを下る経路は、インストラクションがコアの発行ステージおよびコプロセッサーの復号ステージから送り出されるとき、トークンの交換があって、通常の方法で開始する。そして、インストラクションはコプロセッサーの発行ステージでストールし、トークンがアクセプトキュー340を介してコアのEX2ステージに送られるのを遅延させ、したがってそれは、それがそれを待つ間ストールする。インストラクションが結局はコプロセッサーのEX1ステージへと移行し続けるとき、それは、キャンセルキュー310を介してインストラクションによって前もって掲示されていたトークンを、それがコアの発行ステージを離れるときにピックアップする。
図11はまた、一度にキューにおいて待つことのできる項目の数を、パイプラインそれ自体が、どのように制限するのかを示す。インストラクションAがEX2においてストールされて、トークンがアクセプトキュー340に現れるのを待つ間、それは、インストラクションCが移行し続けてトークンをキャンセルキュー310に入れるのを防止するがしかし、インストラクションBは既にそれを行っている。それによって、キャンセルキューで待っている項目の数は2に限定される。同様の機構が、トークンをパイプライン間で送る他のキューにおいても働いている。
3.3 キャンセル
図12は、コプロセッサーインストラクションが、その発行ステージにおいてコアによってキャンセルされるとき、どのように、コアおよびコプロセッサーパイプラインが振舞うのかを示す。
インストラクションCは、通常コアパイプラインを下って進み、それが発行ステージに到達するまで、トークンをインストラクションキュー300に送る。この時点で、それはトークンをキャンセルキュー310に送り、インストラクションがキャンセルされるべきであることを指示する。これを行うと、それは(影によって指示されるように)コアパイプライン内のファントムに変わり、EX2ステージまで通常通りパイプラインを下り続ける。これが行われて、それが、長さキュー330およびアクセプトキュー340を介してコプロセッサーパイプラインのそれの相手方によって送られるトークンをピックアップできるものとなる。これらは、コプロセッサーキューのインストラクションが、キャンセルキュー310からのトークンを読む前に送られている。これによって、送っているインストラクションの各々に対応するインストラクションが、他方のパイプラインで受け取られていることを確認することで、キューを下るトークンの経路が正しいものであり続ける。インストラクションCは、最終的に、それがコアのEX2ステージを離れるとき終了するが、それは、もはやトークンをピックアップする必要が無くなるからである。EX1ステージのキャンセルキュー310からキャンセルトークンをピックアップすると直ちに、コプロセッサーパイプラインのインストラクションは終了する。
3.4 バウンス
図13は、コプロセッサーインストラクションがコプロセッサーによってバウンスされる(アクセプトされない)とき、コアおよびコプロセッサーパイプラインがどのように振舞うのかを示す。
インストラクションCは、通常のやり方でコプロセッサーパイプラインを通り、それが発行ステージに到達するまでトークンを長さキュー330に送る。この時点で、それは、トークンをアクセプトキュー340に送り、インストラクションがコプロセッサーによってアクセプトされないことを指示する。これを行うと、それはファントムに変わって、それが終了するときにステージEX1を離れるまで、それは通常通りパイプラインを下り続ける。これを行って、それが、コアパイプラインの相手方によってキャンセルキュー310に送られるトークンをピックアップできるようにする。コアパイプラインのインストラクションは、EX2ステージのアクセプトキュー340からアクセプトトークンをピックアップすると直ちに終了する。
コプロセッサーパイプラインでバウンスされているインストラクションの振る舞いは、コアパイプラインでキャンセルされているものとほとんど同じであり、そしてこの機構の良い例が、コアによってキャンセルされ、およびまたコプロセッサーによってバウンスされるインストラクションをパイプラインが取り扱う方法で示される。図14は、この状態を示す。
この状態において、唯一の目的が、他のパイプラインからトークンをピックアップすることであるか、またはコプロセッサーの場合には、フラッシュの間に整合のためのタグを提供することである、ファントムを、双方のパイプラインが作り出している。各々が、トークンを受け取ってそれに終了するよう告げるが、この情報は冗長であり、それは、ファントムとしてそれが既に終りを決定付けられているからである。
3.5 フラッシュ
図15は、コアがコプロセッサーにフラッシュ信号を送るとき、コアおよびコプロセッサーパイプラインがどのように振舞うのかを示す。
発行からEX4に含まれるまでのいずれのステージでも、コアによってフラッシュが誘発される。この情報は、一連のキューを通してコプロセッサーパイプラインに送ることができるが、この構成は、不必要にキューを増加させる。その代わりにタグ付けが用いられて、単一の放送信号がコプロセッサーに送られて、対応するタグを送ることによってフラッシュされるべきインストラクションを識別できる。そして、コプロセッサーは、フラッシュタグと同じまたはそれより後のタグを有する全てのインストラクションを見出し、そしてそれらを取り除かなければならない。キューを下るトークンと違い、フラッシュ信号は固定遅延を有していて、コアにおけるフラッシュとコプロセッサーにおけるフラッシュとの間のタイミング関係が正確に知られるものとなっている。
図15において、インストラクションCは、それがコアのEX1ステージに到達するとき、フラッシュを誘発する。したがって、それは次のサイクルで終了し、パイプラインにおいてそれに続く全てのインストラクションをそれと一緒に持ち去る。それが終了すると、それは放送信号450(図において点線の矢印で示されている)をコプロセッサーパイプラインに送る。コプロセッサーがこの信号を受け取るとき、それは整合するタグを求めてパイプラインを調べ、そしてそのポイントから上の全てのインストラクションを取り除き、それらは、図15においてインストラクションC、DおよびF(いずれにしても終了しかかっている復号ステージのコアインストラクション)である。インストラクションAおよびBは、フラッシングポイントに先行してパイプラインを下り続ける。
たいていのトークンキューもまた、フラッシングを必要とし、そしてこれもまた、各インストラクションに添付されるタグを用いて行われる。トークンキューの受け取り端でステージが通される前に整合が見出されるならば、トークンキューは単純にクリアされる。そうでなければ、それは、キューのタグを整合することによって適切にフラッシュされなければならない。この動作は、蓄積キュー400を含んで、フィニッシュキュー320を除く全てのキューで行われなければならない。したがって、コプロセッサーは、インストラクション300およびキャンセル310キューをフラッシュしなければならず、かつコアは、長さ330、アクセプト340および蓄積400キューをフラッシュしなければならない。
フラッシング動作は、フラッシュ信号が受け取られるや否やコプロセッサーによって行われ、そして簡略化されるが、それはキューが他の動作を行わないからである。これが意味するのは、フラッシングはキューの更新と結合される必要はないということである。図15を吟味すると、フラッシュされるキューに何も影響することが起こらないフラッシュに続いて単一のサイクルがあることが示されており、それは、キューをフラッシュする動作を行うのによい機会である。しかしながら、このことは、ロードまたは蓄積キューには当てはまらず、それらは後で説明される。
フラッシュコマンドは、それと関連して、フラッシュがどこから始まるべきかを指示するタグ値を有する。これは、全てのインストラクションによって運ばれるタグと整合される。キューがフラッシュされるべきであるならば、同じまたはより新しいタグを備える各バッファがクリアされる。図16は、キューのフラッシングを例示する。
キューの各バッファ600、610、620は、それと関連してタグ比較器604、614、624を有する。フラッシュタグ632は、各比較器に提示されて、キューに保持される有効なインストラクションの各々に属するタグ602、612、622と比較される。バッファのタグがフラッシュタグ以上であれば、キューのバッファは、その満杯フラッグがクリアされており、それが現在空であることを指示する。
3.6 退却
インストラクションがコプロセッサーパイプラインの底に到達するとき、それは退却することを望む。それがどのように退却するかは、そのインストラクションの種類およびそれが反復されるか否かに依存する。CDPインストラクションは、それが、フィニッシュキュー320でそれに合致するトークンを見出すときに退却する。
ロードおよび蓄積インストラクションが退却する条件は、後の章で説明される。
4 データ転送
4.1 一般原理
データ転送は、コア側では、LSU222によって管理され、またコプロセッサー側では、パイプライン自体に管理される。転送は、単一の値であるかベクトルであり得る。後者の場合、コプロセッサーは、発行ステージでインストラクションを反復することによって、多重転送を有効に一連の単一転送へと変換する。これによって、転送されるべき、各項目についてのロードまたは蓄積インストラクションの実例が作り出される。インストラクションは、それが反復する間、コプロセッサー発行ステージに留まり、それ自体のコピーを作り出す。ロードについて、これらはパイプラインを下って、それらがロードキュー410から各データ項目を、それがEX6ステージに到達するときにピックアップできるようにする。蓄積について、反復されるインストラクションは、発行ステージから出されないが、それらが作り出されると消失して、反復するごとに蓄積キュー400に入れるために蓄積データを生成する。図17は、ロードインストラクションCの例を示す。反復されるインストラクション(大文字で示されている)の最初はヘッドであり、他のもの(小文字で示されている)はテールである。示されている例において、ベクトル長が4であり、それで1つのヘッドと3つのテールがある。
ヘッドインストラクションのみが、コアパイプラインとのトークン交換に関係し、それは、この方法でインストラクションを反復するものではなく、テールインストラクションは、コプロセッサーパイプラインを静かに下る。反復されるロードインストラクションがキャンセルされるかフラッシュされるとき、全てのテールインストラクション(同じタグを持っている)は、パイプラインから取り除かれなければならない。ヘッドインストラクションのみが、キャンセルされるときファントムとなり、テールは完全に取り除かれる。
4.2 ロード
ロードデータは、コアLSU222のWBステージ250から現れ、ロードキュー410からコプロセッサーEX6ステージ275によって受け取られる。ベクトル化されたロードの各項目は、反復されるロードインストラクションの1つの実例によってピックアップされる。パイプラインのタイミングは、ロードインストラクションが常に用意されているか、各データ項目をピックアップするようEX6に丁度到着したというようなものである。ロードインストラクションがEX6に到着しているが、ロード情報がまだ現れないならば、ロードインストラクションはEX6でストールしなければならず、コプロセッサーパイプラインの残りをストールする。そうして、ロードインストラクションは、それがロードデータに合致するとき、退却する。
4.2.1 ロードバッファ
コプロセッサーEX6ステージにおいてロードインストラクションでロードデータの正しい配列を達成するために、データはコプロセッサーに到達するとき、二重にバッファされる必要がある。図18により例示されている。
ロードデータバッファは、パイプラインレジスターとして機能し、それでフロー制御を必要とせず、またタグを運ぶ必要も無い。唯一の要件は、データと有効ビットである。コアLSU222のWBステージ250から現れるロードデータの各項目はコアバッファ1000に入れられ、それの対応する有効ビットがバッファ1030に蓄積される。そして、データ項目と関連する有効ビットがインターフェースを超えてGCPへと送られ、そこでそれは、今度はバッファ1010、1040および1020、1050を通って送られる。図19は、コアのロードインストラクションが、どのように、コアLSUに入り、ロードデータの一項目の生成を開始し、そしてそれがコアインターフェースバッファ1010とGCPの二重バッファ1020、1030を介してコプロセッサーへと送られ、EX6でコプロセッサーロードインストラクションと合致するのかを示している。
ロード転送のために働くこの形のデータバッファリングについて、インストラクションが常に、コアEX4ステージの対応するインストラクションが到着するのと同時またはその前に、コプロセッサーEX6に到着するような方法で、2つのパイプラインを同期する必要がある。コアからフィニッシュキュー320を下るトークンが、対応するロードデータ項目がロードデータパイプラインバッファの端に到着するのと同時に到着することもまた必要である。これらの条件は、コプロセッサーパイプラインが、フィニッシュキュー320にトークンが無いことに応答して、発行ステージの後にストールするだけであるならば、かつ、LSU222が、アクセプトキュー340からのトークンを、それによってロードインストラクションがそのADDステージ220から動き続けることができるようになる前に見るならば、満足される。加えて、WBストールは、LSUからロードデータを送るのを遅延させなければならない。
4.2.2 フラッシュ
コアEX4ステージ290を含まないフラッシュは、ロードデータバッファに影響を及ぼすことができず、ロード転送は正常に完了する。フラッシュがコアEX4ステージのインストラクションによって開始されるならば、これはロードインストラクションではなく、それは、ロードインストラクションがフラッシュを誘発できないからである。フラッシュポイントの後ろのコプロセッサーロードインストラクションはいずれも、それらがコプロセッサーパイプラインのEX6ステージ275までにも至るならば、フィニッシュトークンが無いためにストールすることとなり、そうしてデータ転送は全く起こることとはならない。ロードデータバッファ410のいずれのデータも、パイプラインが再ローディングする間のフラッシュデッド期間に自然に終了する。
4.2.3 キャンセル
ロードインストラクションがキャンセルされるならば、ヘッドおよびいずれのテールの双方とも取り除かれなければならず、ヘッドは、ファントムで置き換えられるのみである。コプロセッサーEX1ステージ225でキャンセルが生じると、データ転送が起こることにはならず、したがってロードデータを取り扱うのに特別な方策が講じられるものではない。
4.2.4 退却
ロードインストラクションがコプロセッサーパイプラインの底に到達するとき、それは、ロードデータバッファ410の端で、データ項目を見出さなければならない。インストラクションがヘッドインストラクションであるならば、それはまた、フィニッシュキュー320でトークンを見出さなければならない。テールインストラクションは、そのロードデータが提示されていることのみを必要とし、フィニッシュキューからのトークンを必要としない。
4.3 蓄積
蓄積データは、コプロセッサー発行ステージ215から現れ、コアLSU DC1ステージ230によって受け取られる。ベクトル化された蓄積の各項目は、蓄積インストラクションがコプロセッサー発行ステージで反復すると生成される。反復された蓄積インストラクションは、さらに使われることは無く、コプロセッサーパイプラインを下されない。ヘッドインストラクションのみがパイプラインを下る。これが意味するのは、蓄積反復が一旦開始されると、コアによって明確に止められるまで止まらないというものである。とりわけ、蓄積ヘッドインストラクションが、コプロセッサーパイプラインのEX1ステージでストールされるならば、反復が続き、そしてストールによって影響されない。
4.3.1 蓄積データキュー
蓄積データ転送は、LSU222によって任意の時間に止められるので、蓄積データキュー400が必要とされる。更には、蓄積データベクトルが任意の長さであるので、フロー制御が必要とされ、これについては2.5.3章で既に説明されている。3つのスロットのキューの長さは、丁度、データを損失せずにフロー制御を用いることができるのに充分である。
4.3.2 フラッシュ
蓄積インストラクションがフラッシュに含まれるとき、蓄積データキュー400は、コアによってフラッシュされなければならない。コアがコプロセッサーにフラッシュを通知した後、2サイクル間キューは充填し続けるので(信号伝播遅延による)、コアは、蓄積データキュー400フラッシュを行う前に、2サイクル間遅延しなければならない。フラッシュの後のデッド期間は、これを行うのに充分なだけ長く続く。
4.3.3 キャンセル
コアが蓄積インストラクションをキャンセルするならば、それは、それが蓄積データを受け取り始める前にインストラクションがキャンセルされることに気付く。コプロセッサーがキャンセル信号を受け取ってそれに働きかけるまでに、それは、既に1つのデータ項目を蓄積データキュー400に送っている。したがって、コアは、キャンセルの後、この信号項目を取り除き、かつ処理しなければならない。これが達成されるのは、デッドデータをピックアップするために、単一の蓄積インストラクションファントムを、LSU222を通して送ることによってである。代わりに、発行ステージがキャンセルキューを見越して、蓄積インストラクションがデータを送り始める前にキャンセルされないということを決定してもよい。
4.3.4 退却
蓄積インストラクションは、フィニッシュトークンキュー320を利用しないので、コプロセッサーパイプラインの底に到達するや否や退却する。
5. 複数のコプロセッサー
コアに取り付けられるコプロセッサーが2つ以上あってもよく、そうして複数のコプロセッサーを取り扱うのに何らかの手段が必要とされる。経済的な理由から、コプロセッサーインターフェースはできる限り複製されないようにすることを確認するのが重要である。とりわけ、コプロセッサーは、長さ330、アクセプト340および蓄積データ400キューを共有し、それらはコアによって維持される。これらのキューが共有されることとなると、1つのコプロセッサーのみが任意の時間にキューを用いることとなる。このようなことが最も容易に保証されるのは、任意の時間に1つのコプロセッサーしかアクティブでないようにすることによってである。一般的に言って、これは重大な制限ではなく、それは、1つのコプロセッサーしか任意の時間に用いられないからである。典型的には、プロセッサーは、ドライバソフトウェアを通して駆動され、それは1つのコプロセッサーだけを駆動する。ドライバソフトウェアを呼び出してそれから戻ることで、1つのコプロセッサーを使うことと異なるコプロセッサーを使うこととの間に、確実にいくつかのコアインストラクションがあるようにする。
5.1 相互結合の配慮
1つのコプロセッサーしか任意の時間にコアと通信できないならば、全てのコプロセッサーは、コアからのGCPインターフェース信号を共有する。コプロセッサーからコアへの信号は、全てのコプロセッサーがインアクティブのとき出力をゼロに保持するならば、単に一緒にOR化されている。
5.2 コプロセッサーの選択
コプロセッサーは、コアからの信号によってイネーブルされる。好ましい実施例には、これらの信号が16あり、各々のコプロセッサーに1つずつであって、任意の時間に1つだけがアクティブである。加えて、コプロセッサーへのインストラクションにはコプロセッサー番号が含まれていて、コプロセッサーがそれら自身の番号と整合しないインストラクションを拒絶できるようにし、またコアインストラクションを拒絶する。
5.3 コプロセッサーの切り替え
異なるコプロセッサーについてその最後にアドレスされたものに向かうコプロセッサーインストラクションを、コアが復号するとき、それは、先のコプロセッサーインストラクションが退却してしまうまで、このインストラクションをストールする。これによって、確実に、現在選択されているコプロセッサーの全ての活動が止まってしまう。そして、コプロセッサーの選択が切り替えられて、最後にアクティブであったコプロセッサーをディスエーブルし、新しいコプロセッサーをアクティベートする。新しいコプロセッサーインストラクションを受け取っているコプロセッサーは、それを無視してディスエーブルされる。したがって、インストラクションは、コアに嫌われる必要があり、ここで新しくアクティベートされたコプロセッサーによってアクセプトされる。
ここには発明の特定の実施例が記述されているが、発明はそれらに限定されるものではなく、かつ発明の範囲内で多くの変更および付加がなされることが明らかである。例えば、添付した従属請求項の特長は、本発明の範囲から逸脱することなく、独立請求項の特長と様々に組み合わせることができる。
本発明の好ましい実施例の同期技法が実行されるシステムのブロック図である。 本発明の好ましい実施例によるパイプライン化プロセッサーを概略的に示す図である。 本発明の好ましい実施例によるパイプライン化コプロセッサーを概略的に示す図である。 本発明の好ましい実施例によるプロセッサーコアのパイプラインステージ、コプロセッサーのパイプラインステージおよびそれらの間を通信する同期制御キューを概略的に示す図である。 種々のパイプラインおよびそれらを接続するキューを示すより詳細なブロック図である。 メインプロセッサーのロード蓄積ユニットとロードおよび蓄積動作のためのコプロセッサーパイプラインの間の通信を概略的に示す図である。 本発明の好ましい実施例によるキューの構造を示す図である。 キューの読み取りおよび書き込みを示すタイミング図である。 本発明の好ましい実施例において用いられるフロー制御の概念を示す図である。 本発明の好ましい実施例においてどのようにインストラクションキューが実行されるのかを示す図である。 コアとコプロセッサーパイプラインとの間の相互作用の通常の動作を概略的に示す図である。 本発明の1つの実施例によって、コプロセッサーがその発行ステージでストールするとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。 本発明の1つの実施例によって、コプロセッサーインストラクションがその発行ステージでコアによってキャンセルされるとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。 本発明の1つの実施例によって、コプロセッサーインストラクションがコプロセッサーによってバウンスされるとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。 本発明の1つの実施例によって、コアによってキャンセルされ、またコプロセッサーによってバウンスされるインストラクションをパイプラインが取り扱う方法を示す図である。 本発明の1つの実施例によって、コアがコプロセッサーにフラッシュ信号を送るとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。 本発明の1つの実施例で用いられる、キューをフラッシュするアプローチを概略的に示す図である。 本発明の1つの実施例による、ベクトル化ロードインストラクション「C」についてのインストラクション反復を示す図である。 本発明の1つの実施例による、ロードデータのバッファリングを概略的に示す図である。 本発明の1つの実施例による、どのようにして、コアのロードインストラクションが、コアのロード蓄積ユニットに入ってロードデータの1つの項目の生成を開始し、そしてそれがコプロセッサーに送られるのかを示す図である。

Claims (41)

  1. 一連のインストラクションを実行するよう動作可能なメインプロセッサーであって、複数の第一パイプラインステージを有する第一のパイプラインを備えるメインプロセッサーと、
    前記一連のインストラクションにおけるコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーであって、複数の第二パイプラインステージを有する第二のパイプラインを備え、かつ各コプロセッサーインストラクションは第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされているコプロセッサーと、
    所定の複数エントリーを有するファーストインファーストアウト(FIFO)バッファを備え、1つのパイプラインにおける所定のパイプラインステージを別のパイプラインにおけるパートナーパイプラインステージと結合する少なくとも1つの同期キューであって、その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき同期キューのエントリー内にトークンが置かれるように動作可能であり、該トークンはそのトークンが関係するコプロセッサーインストラクションを一意的に識別するタグを含み、かつパートナーパイプラインステージは、同期キューからのトークンを受け取ってそのコプロセッサーインストラクションを処理するよう動作可能であり、それによって、 所定のパイプラインステージとパートナーパイプラインステージとの間で第一および第二のパイプラインの同期をパイプライン間で固定したタイミングで信号を受け渡すことなく行う同期キューと
    を備えるデータ処理装置。
  2. 更に前記同期キューを複数備え、前記同期キューの各々は1つのパイプラインにおける所定のパイプラインステージを別のパイプラインにおけるパートナーパイプラインステージと結合する請求項1に記載のデータ処理装置。
  3. 少なくとも1つの同期キューの1つはインストラクションキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、コプロセッサーインストラクションを識別するトークンがインストラクションキューに入れられるようにアレンジされており、かつパートナーパイプラインステージは、第二のパイプラインにあって、トークンを受け取ってトークンの識別するコプロセッサーインストラクションを処理し始めるよう動作可能である請求項1または2に記載のデータ処理装置。
  4. 前記所定のパイプラインステージは、第一のパイプラインにおけるフェッチステージであり、かつパートナーパイプラインステージは、第二のパイプラインにおける復号ステージであり、その復号ステージは、トークンを受け取ってコプロセッサーインストラクションを復号するよう動作可能である請求項3に記載のデータ処理装置。
  5. 前記第一のパイプラインのフェッチステージは、トークンが、一連のインストラクションにおける各インストラクションのインストラクションキューに入れられるよう動作可能であり、かつ前記第二のパイプラインの復号ステージは、関連するトークンを受け取って各インストラクションを復号し、そのインストラクションが、コプロセッサーによる更なる処理を必要とするコプロセッサーインストラクションであるかどうかを判断するようアレンジされている請求項4に記載のデータ処理装置。
  6. 少なくとも1つの同期キューの1つがキャンセルキューであり、前記所定のパイプラインステージが、第一のパイプラインにあって、その所定のパイプラインステージのコプロセッサーインストラクションがキャンセルされるべきかどうかを識別するトークンが、キャンセルキューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第二のパイプラインにあって、キャンセルキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはキャンセルされるべきであると識別するならば、そのコプロセッサーインストラクションがキャンセルされるように動作可能である請求項1乃至5のいずれかに記載のデータ処理装置。
  7. 前記所定のパイプラインステージが、第一のパイプラインの発行ステージであり、かつパートナーパイプラインステージが、第二のパイプラインの発行ステージに続くステージである請求項6に記載のデータ処理装置。
  8. 前記パートナーパイプラインステージは、キャンセルキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはキャンセルされるべきであると識別するならば、コプロセッサーインストラクションを第二のパイプラインから取り除くよう動作可能である請求項6または7に記載のデータ処理装置。
  9. 少なくとも1つの同期キューの1つが、フィニッシュキューであり、前記所定のパイプラインステージが、第一のパイプラインにあって、その所定のパイプラインステージのコプロセッサーインストラクションが、第二のパイプラインから退却するための許可を識別するトークンがフィニッシュキューに入れられるようにアレンジされ、かつパートナーパイプラインステージが、第二のパイプラインにあって、フィニッシュキューからトークンを受け取って、かつコプロセッサーインストラクションが退却するよう許可されることをトークンが識別するならば、そのコプロセッサーインストラクションが退却するように動作可能である請求項1乃至8のいずれかに記載のデータ処理装置。
  10. 前記所定のパイプラインステージが、第一のパイプラインのライトバックステージであり、かつパートナーパイプラインステージが、第二のパイプラインのライトバックステージである請求項9に記載のデータ処理装置。
  11. 少なくとも1つの同期キューの1つが、長さキューであり、前記所定のパイプラインステージが、第二のパイプラインにあって、ベクトル化コプロセッサーインストラクションについて、そのベクトル化コプロセッサーインストラクションの長さ情報を識別するトークンが長さキューに入れられるようにアレンジされ、かつパートナーパイプラインステージが、第一のパイプラインにあって、長さキューからトークンを受け取って、長さ情報を、第一のパイプライン内のベクトル化コプロセッサーインストラクションをさらに処理する要因として盛り込むよう動作可能である請求項1乃至10のいずれかに記載のデータ処理装置。
  12. 前記所定のパイプラインステージが、第二のパイプラインの復号ステージであり、かつパートナーパイプラインステージが、第一のパイプラインの第一実行ステージである請求項11に記載のデータ処理装置。
  13. 少なくとも1つの同期キューの1つがアクセプトキューであり、前記所定のパイプラインステージが、第二のパイプラインにあって、その所定のパイプラインステージのコプロセッサーインストラクションがコプロセッサーによって実行されるようアクセプトされるべきかどうかを識別するトークンが、アクセプトキューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第一のパイプラインにあって、アクセプトキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはアクセプトされるべきではないと識別するならば、そのコプロセッサーインストラクションがメインプロセッサーによって拒絶されるものとするよう動作可能である請求項1乃至12のいずれかに記載のデータ処理装置。
  14. 前記所定のパイプラインステージが、第二のパイプラインの発行ステージであり、かつパートナーパイプラインステージが、第一のパイプラインの第二実行ステージである請求項13に記載のデータ処理装置。
  15. パートナーパイプラインステージが、アクセプトキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはアクセプトされるべきではないと識別するならば、第一のパイプラインからコプロセッサーインストラクションを取り除くよう動作可能である請求項13または14に記載のデータ処理装置。
  16. 少なくとも1つの同期キューの1つが、コプロセッサーインストラクションが、コプロセッサーからメインプロセッサーのアクセスの可能なメモリーにデータアイテムが転送されるように動作可能な蓄積インストラクションであるときに用いられる蓄積キューであり、前記所定のパイプラインステージが、第二のパイプラインにあって、前記蓄積インストラクションの1つを処理するとき、転送されるべき各データアイテムを識別するトークンが蓄積キューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第一のパイプラインにあって、蓄積キューから各トークンを受け取って、対応するデータアイテムがメモリーに転送されるように動作可能である請求項1乃至15のいずれかに記載のデータ処理装置。
  17. 前記所定のパイプラインステージが、第二のパイプラインの発行ステージにあり、かつパートナーパイプラインステージが、第一のパイプラインのアドレス生成ステージである請求項16に記載のデータ処理装置。
  18. 少なくとも1つの同期キューの1つが、コプロセッサーインストラクションが、メインプロセッサーのアクセスの可能なメモリーからコプロセッサーにデータアイテムが転送されるように動作可能であるロードインストラクションであるとき用いられるロードキューであり、前記所定のパイプラインステージが、第一のパイプラインにあって、前記ロードインストラクションの1つを処理するとき、転送されるべき各データアイテムを識別するトークンがロードキューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第二のパイプラインにあって、ロードキューから各トークンを受け取って、対応するデータアイテムがコプロセッサーに転送されるように動作可能である請求項1乃至17のいずれかに記載のデータ処理装置。
  19. 前記所定のパイプラインステージは、第一パイプラインのライトバックステージであり、かつパートナーパイプラインステージは、第二パイプラインのライトバックステージである請求項17に記載のデータ処理装置。
  20. ロードインストラクションおよび蓄積インストラクションが、転送されるべき複数のデータアイテムを定義するベクトル化コプロセッサーインストラクションであり、かつロードキューおよび蓄積キューの少なくとも一方と関連し、制御信号を前記所定のパイプラインステージに送って、前記所定のパイプラインステージによるトークンの発行を停止させ、その間に前記関連するロードまたは蓄積キューが一杯になると判定されるフロー制御ロジックを更に備える、請求項16に従属する請求項18に記載のデータ処理装置。
  21. フロー制御ロジックが、蓄積キューに備えられ、フロー制御ロジックは、パートナーパイプラインステージがデータアイテムをアクセプトできないメインプロセッサーからの指示を受け取って制御信号を発行するよう動作可能である請求項20に記載のデータ処理装置。
  22. ロードキューがダブルバッファである請求項21に記載のデータ処理装置。
  23. メインプロセッサーは、第一および第二のパイプライン双方からコプロセッサーインストラクションをフラッシュする必要があるとき、フラッシュされる必要のある最も古いインストラクションに関係するタグを識別するコプロセッサーにフラッシュ信号を放送するよう動作可能であり、コプロセッサーは、タグからの最も古いインストラクションを識別して、第二のパイプラインからコプロセッサー内のその最も古いインストラクションおよびそれより後のいずれのインストラクションをもフラッシュするよう動作可能である請求項1乃至22のいずれかに記載のデータ処理装置。
  24. タグをキュー内のどのトークンがフラッシュされるべきかを識別するのに用いて、前記少なくとも1つの同期キューの1つ以上が、前記フラッシュ信号に応答してフラッシュされる請求項23に記載のデータ処理装置。
  25. 前記コプロセッサーを複数備え、各同期キューが、メインプロセッサーのパイプラインステージを1つのコプロセッサーのパイプラインステージと結合させる請求項1乃至24のいずれかに記載のデータ処理装置。
  26. トークンが、前記所定のパイプラインステージによってキューに入れられ、かつクロックサイクルの変化端でパートナーパイプラインステージによってキューから受け取られるような同期設計を有する請求項1乃至25のいずれかに記載のデータ処理装置。
  27. データ処理装置におけるパイプライン間の同期方法であって、そのデータ処理装置は、一連のインストラクションを実行するよう動作可能なメインプロセッサーと、前記一連のインストラクションの中のコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーとを備え、そのメインプロセッサーは、複数の第一パイプラインステージを有する第一のパイプラインを備え、コプロセッサーは、複数の第二パイプラインステージを有する第二パイプラインを備え、かつ各コプロセッサーインストラクションは、その第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされており、
    (a)1つのパイプラインの所定のパイプラインステージを、所定の複数エントリーを有するファーストインファーストアウト(FIFO)バッファを備えた同期キューを介して別のパイプラインのパートナーパイプラインステージと結合させ、
    (b)前記所定のパイプラインステージがコプロセッサーインストラクションを処理しているとき、同期キューのエントリーにトークンを入れ、該トークンはそのトークンが関係するコプロセッサーインストラクションを一意的に識別するタグを含み、
    (c)パートナーパイプラインステージが同期キューからトークンを受け取ると、パートナーパイプラインステージ内でコプロセッサーインストラクションを処理する
    ステップを備え、
    それによって、前記所定のパイプラインステージとパートナーパイプラインステージとの間で第一および第二のパイプラインの同期がパイプライン間で固定したタイミングで信号を受け渡しすることなく得られる
    方法。
  28. 前記同期キューが複数備えられ、かつ前記ステップ(a)乃至(c)が各同期キューについて行われる請求項27に記載の方法。
  29. 少なくとも1つの同期キューの1つがインストラクションキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
    前記ステップ(b)で、コプロセッサーインストラクションを識別するインストラクションキューにトークンを入れ、
    前記ステップ(c)で、トークンを受け取って、パートナーパイプラインステージ内でトークンによって識別されるコプロセッサーインストラクションの処理を開始する
    ステップを備える請求項27または28に記載の方法。
  30. 少なくとも1つの同期キューの1つがキャンセルキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
    前記ステップ(b)で、キャンセルキューにトークンを入れて、その所定のパイプラインステージのコプロセッサーインストラクションがキャンセルされるべきかどうかを識別し、
    前記ステップ(c)で、パートナーパイプラインステージがキャンセルキューからトークンを受け取り、かつコプロセッサーインストラクションがキャンセルされるべきであることをそのトークンが識別するならば、そのコプロセッサーインストラクションがキャンセルされるものとする
    ステップを備える請求項27乃至29のいずれかに記載の方法。
  31. 少なくとも1つの同期キューの1つがフィニッシュキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
    前記ステップ(b)で、トークンをフィニッシュキューに入れて、その所定のパイプラインステージのコプロセッサーインストラクションを第二のパイプラインから退却させる許可を識別し、
    前記ステップ(c)で、パートナーパイプラインステージがフィニッシュキューからトークンを受け取り、かつコプロセッサーインストラクションが退却するよう許可されることをそのトークンが識別するならば、そのコプロセッサーインストラクションが退却するものとする
    ステップを備える請求項27乃至30のいずれかに記載の方法。
  32. 少なくとも1つの同期キューの1つが長さキューであり、前記所定のパイプラインステージが第二のパイプラインにあって、かつパートナーパイプラインステージが第一のパイプラインにあり、
    前記ステップ(b)で、ベクトル化コプロセッサーインストラクションについて、長さキューにトークンを入れて、ベクトル化コプロセッサーインストラクションについて長さ情報を識別し、
    前記ステップ(c)で、パートナーパイプラインステージが長さキューからトークンを受け取ると、長さ情報を、第一のパイプライン内でのベクトル化コプロセッサーインストラクションの更なる処理に要因として盛り込む
    ステップを備える請求項27乃至31のいずれかに記載の方法。
  33. 少なくとも1つの同期キューの1つがアクセプトキューであり、前記所定のパイプラインステージが第二のパイプラインにあって、かつパートナーパイプラインステージが第一のパイプラインにあり、
    前記ステップ(b)で、アクセプトキューにトークンを入れて、その所定のパイプラインステージのコプロセッサーインストラクションがコプロセッサーによって実行されるようアクセプトされるべきであるかどうかを識別し、
    前記ステップ(c)で、パートナーパイプラインステージがアクセプトキューからトークンを受け取り、かつコプロセッサーインストラクションがアクセプトされるべきでないとそのトークンが識別するならば、コプロセッサーインストラクションがメインプロセッサーによって拒絶されるものとする
    ステップを備える請求項27乃至32のいずれかに記載の方法。
  34. 少なくとも1つの同期キューの1つが、コプロセッサーインストラクションが、コプロセッサーからメインプロセッサーのアクセスが可能なメモリーにデータアイテムが転送されるものとするように動作可能な蓄積インストラクションであるとき用いられる蓄積キューであり、所定のパイプラインステージが第二のパイプラインにあって、かつパートナーパイプラインステージが第一のパイプラインにあり、
    前記ステップ(b)で、前記蓄積インストラクションの1つを処理するとき、蓄積キューにトークンを入れて、転送されるべき各データアイテムを識別し、
    前記ステップ(c)で、パートナーパイプラインステージが蓄積キューから各トークンを受け取ると、対応するデータアイテムがメモリーに転送されるようにする
    ステップを備える請求項27乃至33のいずれかに記載の方法。
  35. 少なくとも1つの同期キューの1つが、コプロセッサーインストラクションが、メインプロセッサーのアクセスが可能なメモリーからコプロセッサーにデータアイテムが転送されるように動作可能なロードインストラクションであるとき用いられるロードキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
    前記ステップ(b)で、前記ロードインストラクションの1つを処理するとき、ロードキューにトークンを入れて、転送されるべき各データアイテムを識別し、
    前記ステップ(c)で、パートナーパイプラインステージがロードキューから各トークンを受け取ると、対応するデータアイテムがコプロセッサーに転送されるものとする
    ステップを備える請求項27乃至34のいずれかに記載の方法。
  36. ロードインストラクションおよび蓄積インストラクションが転送されるべき複数のデータアイテムを定義するベクトル化コプロセッサーインストラクションであり、
    (d)ロードキューおよび蓄積キューの少なくとも一方について、制御信号を所定のパイプラインステージに送って所定のパイプラインステージによるトークンの発行を停止させ、その間関連するロードまたは蓄積キューが一杯になると判定される
    ステップを更に備える、請求項34従属する請求項35に記載の方法。
  37. 前記ステップ(d)が蓄積キューについて行われ、前記ステップ(d)で、前記方法が、パートナーパイプラインステージがデータアイテムをアクセプトできないとメインプロセッサーから指示を受け取ると、制御信号を発行するステップを備える
    請求項36に記載の方法。
  38. コプロセッサーインストラクションを第一および第二のパイプラインの双方からフラッシュすることが必要であるとき、
    フラッシュ信号をメインプロセッサーからコプロセッサーへと放送して、フラッシュされる必要のある最も古いインストラクションに関係するタグを識別し、
    コプロセッサー内で、タグからその最も古いインストラクションを識別して、かつコプロセッサー内のその最も古いインストラクションおよびそれより後のいずれのインストラクションをも第二のパイプラインからフラッシュする
    ステップを更に備える請求項27乃至37のいずれかに記載の方法。
  39. タグを用いてキュー内のどのトークンがフラッシュされるべきかを識別し、前記フラッシュ信号に応答して、前記少なくとも1つの同期キューの1つ以上をフラッシュするステップを更に備える請求項38に記載の方法。
  40. 前記コプロセッサーを複数備え、各同期キューが、メインプロセッサーのパイプラインステージを1つのコプロセッサーのパイプラインステージと結合する請求項27乃至39のいずれかに記載の方法。
  41. トークンは、前記所定のパイプラインステージがキューに入れ、かつクロックサイクルの変化端でパートナーパイプラインステージがキューから受け取るようにデータ処理装置が同期設計を有する請求項27乃至40のいずれかに記載の方法。
JP2004533589A 2002-09-04 2003-06-04 データ処理装置におけるパイプライン間の同期 Expired - Lifetime JP3981378B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0220559A GB2392742B (en) 2002-09-04 2002-09-04 Synchronisation between pipelines in a data processing apparatus
PCT/GB2003/002411 WO2004023290A1 (en) 2002-09-04 2003-06-04 Synchronisation between pipelines in a data processing apparatus

Publications (2)

Publication Number Publication Date
JP2005538439A JP2005538439A (ja) 2005-12-15
JP3981378B2 true JP3981378B2 (ja) 2007-09-26

Family

ID=9943500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004533589A Expired - Lifetime JP3981378B2 (ja) 2002-09-04 2003-06-04 データ処理装置におけるパイプライン間の同期

Country Status (13)

Country Link
US (1) US7490221B2 (ja)
EP (1) EP1535144B3 (ja)
JP (1) JP3981378B2 (ja)
KR (1) KR100983786B1 (ja)
CN (1) CN100367193C (ja)
AU (1) AU2003241029A1 (ja)
DE (2) DE60306937T4 (ja)
GB (1) GB2392742B (ja)
IL (2) IL165381A0 (ja)
MY (1) MY131233A (ja)
RU (1) RU2005109409A (ja)
TW (1) TWI309019B (ja)
WO (1) WO2004023290A1 (ja)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7346759B1 (en) 2004-08-06 2008-03-18 Xilinx, Inc. Decoder interface
US7546441B1 (en) 2004-08-06 2009-06-09 Xilinx, Inc. Coprocessor interface controller
US7590823B1 (en) * 2004-08-06 2009-09-15 Xilinx, Inc. Method and system for handling an instruction not supported in a coprocessor formed using configurable logic
US7590822B1 (en) * 2004-08-06 2009-09-15 Xilinx, Inc. Tracking an instruction through a processor pipeline
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation
US7328331B2 (en) * 2005-01-25 2008-02-05 Hewlett-Packard Development Company, L.P. Method and system of aligning execution point of duplicate copies of a user program by copying memory stores
JP4527571B2 (ja) * 2005-03-14 2010-08-18 富士通株式会社 再構成可能演算処理装置
JP3867804B2 (ja) * 2005-03-22 2007-01-17 セイコーエプソン株式会社 集積回路装置
US7493471B2 (en) * 2005-10-31 2009-02-17 Sun Microsystems, Inc. Coprocessor receiving renamed register identifier from master to complete an operation upon register data ready
US7490223B2 (en) * 2005-10-31 2009-02-10 Sun Microsystems, Inc. Dynamic resource allocation among master processors that require service from a coprocessor
US7668186B1 (en) * 2006-03-07 2010-02-23 Xilinx, Inc. Token ecosystem for buffer management
US8145882B1 (en) * 2006-05-25 2012-03-27 Mips Technologies, Inc. Apparatus and method for processing template based user defined instructions
US8032734B2 (en) * 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US7647475B2 (en) * 2006-09-06 2010-01-12 Mips Technologies, Inc. System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
US20080082793A1 (en) * 2006-09-29 2008-04-03 Mips Technologies, Inc. Detection and prevention of write-after-write hazards, and applications thereof
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US8407451B2 (en) * 2007-02-06 2013-03-26 International Business Machines Corporation Method and apparatus for enabling resource allocation identification at the instruction level in a processor system
US8006068B1 (en) * 2007-04-18 2011-08-23 Xilinx, Inc. Processor access to data cache with fixed or low variable latency via instructions to an auxiliary processing unit
US7984272B2 (en) * 2007-06-27 2011-07-19 International Business Machines Corporation Design structure for single hot forward interconnect scheme for delayed execution pipelines
US7769987B2 (en) * 2007-06-27 2010-08-03 International Business Machines Corporation Single hot forward interconnect scheme for delayed execution pipelines
JP2009054032A (ja) * 2007-08-28 2009-03-12 Toshiba Corp 並列プロセッサ
US7788470B1 (en) * 2008-03-27 2010-08-31 Xilinx, Inc. Shadow pipeline in an auxiliary processor unit controller
JP5493837B2 (ja) * 2009-12-25 2014-05-14 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置のパイプライン制御方法
US9304774B2 (en) * 2011-02-04 2016-04-05 Qualcomm Incorporated Processor with a coprocessor having early access to not-yet issued instructions
WO2012120573A1 (ja) * 2011-03-04 2012-09-13 日本電気株式会社 デッドロック回避方法、デッドロック回避機構
JP2012252374A (ja) * 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
KR101849702B1 (ko) * 2011-07-25 2018-04-17 삼성전자주식회사 외부 인트린직 인터페이스
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9773531B2 (en) * 2012-06-08 2017-09-26 Hewlett Packard Enterprise Development Lp Accessing memory
US9378023B2 (en) 2012-06-13 2016-06-28 International Business Machines Corporation Cross-pipe serialization for multi-pipeline processor
US9582287B2 (en) * 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US20140281429A1 (en) * 2013-03-14 2014-09-18 Qualcomm Incorporated Eliminating redundant synchronization barriers in instruction processing circuits, and related processor systems, methods, and computer-readable media
CN103383641A (zh) * 2013-04-19 2013-11-06 中国科学院自动化研究所 一种多流水线同步装置
CN104424129B (zh) * 2013-08-19 2019-07-26 上海芯豪微电子有限公司 基于指令读缓冲的缓存系统和方法
US10318305B2 (en) * 2013-09-06 2019-06-11 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with pepelined arithmetic and logic unit
US9325520B2 (en) * 2013-09-06 2016-04-26 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with scheduled token passing
US11113054B2 (en) 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
EP2940575B1 (en) * 2014-05-02 2018-05-09 Nxp B.V. Controller circuits, data interface blocks, and methods for transferring data
US20150378900A1 (en) * 2014-06-27 2015-12-31 International Business Machines Corporation Co-processor memory accesses in a transactional memory
US11132203B2 (en) * 2014-08-14 2021-09-28 Texas Instruments Incorporated System and method for synchronizing instruction execution between a central processor and a coprocessor
US9870339B2 (en) 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing
US10120683B2 (en) * 2016-04-27 2018-11-06 International Business Machines Corporation Supporting even instruction tag (‘ITAG’) requirements in a multi-slice processor using null internal operations (IOPs)
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10380058B2 (en) * 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
GB2563384B (en) * 2017-06-07 2019-12-25 Advanced Risc Mach Ltd Programmable instruction buffering
US10552162B2 (en) 2018-01-22 2020-02-04 International Business Machines Corporation Variable latency flush filtering
GB2570729B (en) * 2018-02-06 2022-04-06 Xmos Ltd Processing system
CN110896406A (zh) * 2018-09-13 2020-03-20 华为技术有限公司 数据存储方法、装置及服务器
CN111258657B (zh) * 2020-01-23 2020-11-20 上海燧原智能科技有限公司 流水线控制方法及相关设备
US11734017B1 (en) 2020-12-07 2023-08-22 Waymo Llc Methods and systems for processing vehicle sensor data across multiple digital signal processing cores virtually arranged in segments based on a type of sensor
US11301410B1 (en) * 2020-12-13 2022-04-12 Advanced Mciro Devices, Inc. Tags for request packets on a network communication link
CN112738469A (zh) * 2020-12-25 2021-04-30 浙江合众新能源汽车有限公司 图像处理方法、设备、系统和计算机可读介质
US20220245261A1 (en) * 2021-02-01 2022-08-04 Protegrity Corporation Parallel tokenization of date and time information in a distributed network environment

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2564805B2 (ja) * 1985-08-08 1996-12-18 日本電気株式会社 情報処理装置
US5241635A (en) * 1988-11-18 1993-08-31 Massachusetts Institute Of Technology Tagged token data processing system with operand matching in activation frames
US5197140A (en) * 1989-11-17 1993-03-23 Texas Instruments Incorporated Sliced addressing multi-processor and method of operation
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US6112017A (en) * 1992-06-30 2000-08-29 Discovision Associates Pipeline processing machine having a plurality of reconfigurable processing stages interconnected by a two-wire interface bus
US6240508B1 (en) * 1992-07-06 2001-05-29 Compaq Computer Corporation Decode and execution synchronized pipeline processing using decode generated memory read queue with stop entry to allow execution generated memory read
US5572704A (en) * 1993-12-15 1996-11-05 Silicon Graphics, Inc. System and method for controlling split-level caches in a multi-processor system including data loss and deadlock prevention schemes
US5860000A (en) * 1996-01-31 1999-01-12 Hitachi Micro Systems, Inc. Floating point unit pipeline synchronized with processor pipeline
US6259456B1 (en) * 1997-04-30 2001-07-10 Canon Kabushiki Kaisha Data normalization techniques
US6381692B1 (en) 1997-07-16 2002-04-30 California Institute Of Technology Pipelined asynchronous processing
US6477638B1 (en) 1999-10-01 2002-11-05 Hitachi, Ltd. Synchronized instruction advancement through CPU and FPU pipelines

Also Published As

Publication number Publication date
DE60306937T2 (de) 2007-02-15
MY131233A (en) 2007-07-31
GB2392742B (en) 2005-10-19
WO2004023290A1 (en) 2004-03-18
DE60306937T4 (de) 2009-03-05
TW200409023A (en) 2004-06-01
AU2003241029A1 (en) 2004-03-29
EP1535144B1 (en) 2006-07-19
US20040044878A1 (en) 2004-03-04
IL165381A (en) 2010-04-15
CN1678988A (zh) 2005-10-05
KR100983786B1 (ko) 2010-09-28
IL165381A0 (en) 2006-01-15
TWI309019B (en) 2009-04-21
JP2005538439A (ja) 2005-12-15
DE60306937D1 (de) 2006-08-31
CN100367193C (zh) 2008-02-06
US7490221B2 (en) 2009-02-10
GB2392742A (en) 2004-03-10
EP1535144A1 (en) 2005-06-01
EP1535144B3 (en) 2009-02-18
RU2005109409A (ru) 2005-09-10
GB0220559D0 (en) 2002-10-09
KR20050057199A (ko) 2005-06-16

Similar Documents

Publication Publication Date Title
JP3981378B2 (ja) データ処理装置におけるパイプライン間の同期
US7721071B2 (en) System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
JP3014773B2 (ja) プロセサアーキテクチャ
US6336183B1 (en) System and method for executing store instructions
WO2017032022A1 (en) Device and processing architecture for instruction memory efficiency
JP5209933B2 (ja) データ処理装置
EP1662377B1 (en) Branch predicting apparatus and branch predicting method using return address stacks
US9304774B2 (en) Processor with a coprocessor having early access to not-yet issued instructions
JP2002522841A (ja) 異なる待ち時間を伴う命令のスケジューリング
US20030182536A1 (en) Instruction issuing device and instruction issuing method
US6912650B2 (en) Pre-prefetching target of following branch instruction based on past history
US7484078B2 (en) Pipelined asynchronous instruction processor having two write pipeline stages with control of write ordering from stages to maintain sequential program ordering
CN105005463A (zh) 具有世代重命名的计算机处理器
US20050251661A1 (en) Method and apparatus for handling transfer of guarded instructions in a computer system
JP5128382B2 (ja) 複数のロード命令を実行するための方法および装置
US10713049B2 (en) Stunt box to broadcast and store results until retirement for an out-of-order processor
JP3741945B2 (ja) 命令フェッチ制御装置
EP1050805B1 (en) Transfer of guard values in a computer system
US7143247B1 (en) Method and apparatus for parallel execution pipeline data storage in a computer memory
US6789185B1 (en) Instruction control apparatus and method using micro program
JP5093237B2 (ja) 命令処理装置
EP1762929B1 (en) Centralized resolution of conditional instructions
US6918028B1 (en) Pipelined processor including a loosely coupled side pipe
JP2015184979A (ja) 演算装置および命令フェッチ方法
JPH0290326A (ja) 先行制御方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060125

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061106

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070205

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070507

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070601

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070629

R150 Certificate of patent or registration of utility model

Ref document number: 3981378

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100706

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110706

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110706

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120706

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120706

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130706

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term