(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-19
(45)【発行日】2023-06-27
(54)【発明の名称】プロセッサ及びパイプライン処理方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20230620BHJP
G06F 9/32 20180101ALI20230620BHJP
G06F 9/30 20180101ALI20230620BHJP
G06F 12/0842 20160101ALI20230620BHJP
G06F 12/0862 20160101ALI20230620BHJP
G06F 9/52 20060101ALI20230620BHJP
【FI】
G06F9/38 310A
G06F9/38 310X
G06F9/38 310E
G06F9/32 310A
G06F9/30 330C
G06F9/30 350A
G06F12/0842
G06F12/0862
G06F9/52 150A
(21)【出願番号】P 2020558846
(86)(22)【出願日】2018-12-11
(86)【国際出願番号】 JP2018045538
(87)【国際公開番号】W WO2020121416
(87)【国際公開日】2020-06-18
【審査請求日】2021-10-06
(73)【特許権者】
【識別番号】000106276
【氏名又は名称】サンケン電気株式会社
(74)【代理人】
【識別番号】100097113
【氏名又は名称】堀 城之
(74)【代理人】
【識別番号】100162363
【氏名又は名称】前島 幸彦
(72)【発明者】
【氏名】美馬 和大
(72)【発明者】
【氏名】宍戸 仁美
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平11-249907(JP,A)
【文献】特開平08-055033(JP,A)
【文献】特開平10-124316(JP,A)
【文献】特開2010-086131(JP,A)
【文献】特開平10-283203(JP,A)
【文献】米国特許第06493741(US,B1)
【文献】米国特許第06105127(US,A)
【文献】米国特許第08041754(US,B1)
【文献】米国特許出願公開第2006/0179274(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/32
G06F 9/30
G06F 12/0842
G06F 12/0862
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、
実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた
前記命令をデコードするデコード部と前記デコード部でデコードされた
前記命令を実行する演算実行部とを備えたパイプライン処理部と、
前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する
前記命令の命令フェッチの情報を保持する命令保持部と、
ウェイト指示に基づき実行すべき
前記スレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前
記命令の前記命令フェッチの情報に基づき前
記命令のデコードから実行する実行スレッド選択部と、
を備え
、
前記命令保持部は、前記命令が有効か無効かを示すバリッドと前記命令に対応するスレッド番号を示すタグとフェッチされた前記命令との情報を格納する複数のキャッシュラインを有するキャッシュからなり、
前記デコード部でデコードされた前記命令が前記ウェイト命令で且つフェッチされた前記命令とデコードされた前記命令とが同一の前記スレッドにある場合で且つ前記バリッドに基づき前記複数のキャッシュラインのいずれかのキャッシュラインを選択し、選択されたキャッシュラインに前記フェッチされた前記命令を書き込む選択回路と、
前記実行スレッド選択部からウェイト解除すべき前記スレッドの実行指示を受けると、前記タグと前記ウェイト解除すべき前記スレッドとが一致する場合で且つ前記バリッドに基づき前記選択されたキャッシュラインから前記フェッチされた前記命令を読み出して前記デコード部に出力する判定部と、
を備えるプロセッサ。
【請求項2】
複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、
実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた
命令フェッチ情報をデコードするデコード部と前記デコード部でデコードされた
結果を実行する演算実行部とを備え
、前記デコード部によるデコードと同時に次の前記命令を前記フェッチ部によってフェッチするパイプライン処理部と、
前記デコード部でデコードされた結果が前記ウェイト命令である場合に、前記ウェイト命令に対応する前記スレッドに対してウェイト指示を出力するウェイト制御部と、
前記ウェイト指示に基づき、前記ウェイト命令の次の前記命令の前記命令フェッチ情報を保持する命令保持部と、
前記ウェイト命令の実行によってウェイト状態の前記スレッドに対して前記ウェイト状態を解除する指示が入力されたとき、前記デコード部による前記命令保持部に保持された前記命令フェッチ情報のデコードから実行させる実行スレッド選択部と、
を備えるプロセッサ。
【請求項3】
前記命令保持部は、前記複数のスレッドの個数と同数設けられる請求項2記載のプロセッサ。
【請求項4】
前記命令保持部は、前記複数のスレッドの個数よりも少ない個数設けられ、前記複数のスレッドの内の優先順位が高い前記スレッドにのみ前記命令保持部を割り当てる請求項2記載のプロセッサ。
【請求項5】
複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、
実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた
前記命令をデコードし、デコードされた
前記命令を実行するパイプライン処理を行うステップと、
前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する
前記命令の命令フェッ
チ情報を命令保持部に保持する命令保持ステップと、
ウェイト指示に基づき実行すべき
前記スレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前
記命令の前記命令フェッ
チ情報に基づき前
記命令のデコードから実行する実行スレッド選択ステップと、
を備え
、
前記命令保持部は、前記命令が有効か無効かを示すバリッドと前記命令に対応するスレッド番号を示すタグとフェッチされた前記命令との情報を格納する複数のキャッシュラインを有するキャッシュからなり、
前記デコードされた前記命令が前記ウェイト命令で且つフェッチされた前記命令とデコードされた前記命令とが同一の前記スレッドにある場合で且つ前記バリッドに基づき前記複数のキャッシュラインのいずれかのキャッシュラインを選択し、選択されたキャッシュラインに前記フェッチされた前記命令を書き込む選択ステップと、
前記実行スレッド選択ステップからウェイト解除すべき前記スレッドの実行指示を受けると、前記タグと前記ウェイト解除すべき前記スレッドとが一致する場合で且つ前記バリッドに基づき前記選択されたキャッシュラインから前記フェッチされた前記命令を読み出してデコードする判定ステップと、
を備えるパイプライン処理方法。
【請求項6】
複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、
実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた
命令フェッチ情報をデコードし、デコードされた
結果を実行し、
デコードと同時に次の前記命令をフェッチするパイプライン処理を行うステップと、
前記デコードされた結果が前記ウェイト命令である場合に、前記ウェイト命令に対応する前記スレッドに対してウェイト指示を出力するウェイト制御ステップと、
前記ウェイト指示に基づき、前記ウェイト命令の次の前記命令の前記命令フェッチ情報を命令保持部に保持する命令保持ステップと、
前記ウェイト命令の実行によってウェイト状態の前記スレッドに対して前記ウェイト状態を解除する指示が入力されたとき、前記命令保持部に保持された前記命令フェッチ情報のデコードから実行する実行スレッド選択ステップと、
を備えるパイプライン処理方法。
【請求項7】
前記命令保持部は、前記複数のスレッドの個数と同数設けられる請求項6記載のパイプライン処理方法。
【請求項8】
前記命令保持部は、前記複数のスレッドの個数よりも少ない個数設けられ、前記複数のスレッドの内の優先順位が高い前記スレッドにのみ前記命令保持部を割り当てる請求項6記載のパイプライン処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、パイプライン処理するとともに、ウェイト命令を実行するプロセッサ及びパイプライン処理方法に関する。
【背景技術】
【0002】
プロセッサでは、処理速度を向上するためにパイプライン処理が行われている。パイプライン処理は、命令をフェッチし、命令をデコードして演算を実行する処理であり、命令Aのフェッチが終わってデコードを開始すると、同時に命令Bのフェッチを開始する処理である。
【0003】
即ち、パイプライン処理においては、複数の命令を並行して処理することが行われている。複数の命令は、プロセッサとは別に構成される命令メモリに格納され、任意のアドレスと結び付けられる。
【0004】
パイプライン処理では、実行された命令の結果によっては、その後の命令順や操作が変わることがある。このとき、パイプライン内で処理されている命令を一掃する作業が必要である。これをパイプラインフラッシュと呼ぶ。この例の一つがウェイト(待機)命令を処理する場合である。
【0005】
パイプラインでウェイト命令を実行すると、パイプラインは演算の処理を一旦、停止し、パイプラインフラッシュして、待機する。即ち、ウェイト命令の次の命令は、ウェイト状態が外部から解除されるまで実行しない。そして、ウェイト状態から復帰(起動)する時に、次の命令を最初の「命令フェッチ」からやり直す。
【0006】
次に、
図8を参照しながら、従来のウェイト命令実行時のプロセッサのパイプライン処理を説明する。
図8において、FEは、フェッチであり、DEはデコードであり、EXは、演算実行であり、WB1,WB2は、データのレジスタへの書き込みである。
【0007】
例えば、命令C1のフェッチが終わってデコードを開始すると、同時にウェイト命令WAITのフェッチを開始する。次に、ウェイト命令WAITのデコードを開始すると、同時に命令C3をパイプラインフラッシュする。そして、ウェイトを解除して、命令C3を再フェッチしている。
【0008】
また、特許文献1に記載された従来のウェイト命令を実行するプロセッサが知られている。このプロセッサは、ウェイト命令を備え、ウェイト命令を実行すると、プロセッサ内の処理を停止させる状態であるウェイトステート状態に移行し、ウェイトステート離脱要求信号を受信すると、ウェイトステート状態から離脱し、プログラムカウンタが指し示す命令から引き続き実行する。
【先行技術文献】
【特許文献】
【0009】
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、
図8に示すパイプライン処理では、ウェイト命令を実行すると、演算の処理を停止して待機し、ウェイト状態から復帰時に、次の命令を命令フェッチからやり直していた。このため、タイムロスが生じ、処理速度が遅くなる。
【0011】
本発明の課題は、タイムロスが生じることを抑制し、処理速度を向上させることができるプロセッサ及びパイプライン処理方法を提供することにある。
【課題を解決するための手段】
【0012】
本発明に係るプロセッサは、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた前記命令をデコードするデコード部と前記デコード部でデコードされた前記命令を実行する演算実行部とを備えたパイプライン処理部と、前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する前記命令の命令フェッチの情報を保持する命令保持部と、ウェイト指示に基づき実行すべき前記スレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記命令の前記命令フェッチの情報に基づき前記命令のデコードから実行する実行スレッド選択部とを備え、前記命令保持部は、前記命令が有効か無効かを示すバリッドと前記命令に対応するスレッド番号を示すタグとフェッチされた前記命令との情報を格納する複数のキャッシュラインを有するキャッシュからなり、前記デコード部でデコードされた前記命令が前記ウェイト命令で且つフェッチされた前記命令とデコードされた前記命令とが同一の前記スレッドにある場合で且つ前記バリッドに基づき前記複数のキャッシュラインのいずれかのキャッシュラインを選択し、選択されたキャッシュラインに前記フェッチされた前記命令を書き込む選択回路と、前記実行スレッド選択部からウェイト解除すべき前記スレッドの実行指示を受けると、前記タグと前記ウェイト解除すべき前記スレッドとが一致する場合で且つ前記バリッドに基づき前記選択されたキャッシュラインから前記フェッチされた前記命令を読み出して前記デコード部に出力する判定部とを備える。
また、本発明に係るプロセッサは、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた命令フェッチ情報をデコードするデコード部と前記デコード部でデコードされた結果を実行する演算実行部とを備え、前記デコード部によるデコードと同時に次の前記命令を前記フェッチ部によってフェッチするパイプライン処理部と、前記デコード部でデコードされた結果が前記ウェイト命令である場合に、前記ウェイト命令に対応する前記スレッドに対してウェイト指示を出力するウェイト制御部と、前記ウェイト指示に基づき、前記ウェイト命令の次の前記命令の前記命令フェッチ情報を保持する命令保持部と、前記ウェイト命令の実行によってウェイト状態の前記スレッドに対して前記ウェイト状態を解除する指示が入力されたとき、前記デコード部による前記命令保持部に保持された前記命令フェッチ情報のデコードから実行させる実行スレッド選択部とを備える。
【0013】
また、本発明のパイプライン処理方法は、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた前記命令をデコードし、デコードされた前記命令を実行するパイプライン処理を行うステップと、前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する前記命令の命令フェッチ情報を命令保持部に保持する命令保持ステップと、ウェイト指示に基づき実行すべき前記スレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記命令の前記命令フェッチ情報に基づき前記命令のデコードから実行する実行スレッド選択ステップとを備え、前記命令保持部は、前記命令が有効か無効かを示すバリッドと前記命令に対応するスレッド番号を示すタグとフェッチされた前記命令との情報を格納する複数のキャッシュラインを有するキャッシュからなり、前記デコードされた前記命令が前記ウェイト命令で且つフェッチされた前記命令とデコードされた前記命令とが同一の前記スレッドにある場合で且つ前記バリッドに基づき前記複数のキャッシュラインのいずれかのキャッシュラインを選択し、選択されたキャッシュラインに前記フェッチされた前記命令を書き込む選択ステップと、前記実行スレッド選択ステップからウェイト解除すべき前記スレッドの実行指示を受けると、前記タグと前記ウェイト解除すべき前記スレッドとが一致する場合で且つ前記バリッドに基づき前記選択されたキャッシュラインから前記フェッチされた前記命令を読み出してデコードする判定ステップとを備える。
また、本発明のパイプライン処理方法は、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた命令フェッチ情報をデコードし、デコードされた結果を実行し、デコードと同時に次の前記命令をフェッチするパイプライン処理を行うステップと、前記デコードされた結果が前記ウェイト命令である場合に、前記ウェイト命令に対応する前記スレッドに対してウェイト指示を出力するウェイト制御ステップと、前記ウェイト指示に基づき、前記ウェイト命令の次の前記命令の前記命令フェッチ情報を命令保持部に保持する命令保持ステップと、前記ウェイト命令の実行によってウェイト状態の前記スレッドに対して前記ウェイト状態を解除する指示が入力されたとき、前記命令保持部に保持された前記命令フェッチ情報のデコードから実行する実行スレッド選択ステップとを備える。
【発明の効果】
【0014】
本発明によれば、命令保持部は、実行権を得たスレッドのウェイト命令の実行時に、ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持し、実行スレッド選択部は、ウェイト指示に基づき実行すべきスレッドを選択し、ウェイト命令の実行時からのウェイト状態が解除された時に、命令保持部に保持された処理命令の命令フェッチの情報に基づき処理命令のデコードから実行する。従って、タイムロスが生じることを抑制し、処理速度を向上させることができる。
【図面の簡単な説明】
【0015】
【
図1】
図1は、本発明のウェイト命令実行時のプロセッサのパイプライン処理を示す図である。
【
図2】
図2は、本発明の実施例1に係るプロセッサ内のパイプライン構成図である。
【
図3】
図3は、従来のプロセッサのマルチスレッドのパイプライン処理を示す図である。
【
図4】
図4は、実施例1に係るプロセッサのマルチスレッドのパイプライン処理を示す図である。
【
図5】
図5は、本発明の実施例2に係るプロセッサ内のパイプライン構成図である。
【
図6】
図6は、本発明の実施例3に係るプロセッサ内のパイプライン構成図である。
【
図7】
図7は、本発明の実施例3に係るプロセッサ内のキャッシュライン内の情報を示す図である。
【
図8】
図8は、従来のウェイト命令実行時のプロセッサのパイプライン処理を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明の実施の形態のプロセッサ及びパイプライン処理方法について、図面を参照しながら詳細に説明する。
【0017】
パイプライン処理は、複数の命令を並行して処理する。以下の実施例では、複数のスレッドに属する命令を処理するマルチスレッドについて説明するが、本発明は、マルタスレッド以外にも適用可能である。
【0018】
(本発明の概要)
まず、
図1に示す本発明のウェイト命令実行時のプロセッサのパイプライン処理を用いて、本発明の概要を説明する。なお、従来の
図8に示すパイプライン処理と本発明の
図1に示すパイプライン処理とを対比させて説明する。
【0019】
従来の
図8に示すパイプライン処理では、ウェイト命令WAITの次の命令C3をパイプラインフラッシュし、ウェイト解除時には再フェッチを行っていた。
【0020】
これに対して、本発明は、
図1に示すように、命令C3をパイプラインフラッシュせず、ウェイト命令WAITの実行EX時に、ウェイト命令WAITの次の命令C3の命令フェッチの情報を保持する。
【0021】
そして、ウェイト命令WAITの実行EX時からのウェイト状態が解除された時に、保持された命令C3の命令フェッチの情報に基づき命令C3のデコードから処理を実行する。
【0022】
従って、タイムロスが生じることを抑制し、処理速度を向上させることができる。また、ウェイト状態からの起動を早くすることができる。
【0023】
(実施例1)
次に、本発明のプロセッサ及びパイプライン処理方法の実施例について説明する。
図2は、本発明の実施例1に係るプロセッサ内のパイプライン構成図である。実施例1に係るプロセッサは、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサである。パイプライン処理は、命令フェッチ(F)1、デコード(D)2、演算実行(E)3、結果格納(W)4からなる。例えば、命令Aのフェッチが終わってデコードを開始すると、同時に命令Bのフェッチを開始する処理である。
【0024】
命令フェッチ(F)1は、本発明のフェッチ部に相当し、スレッド(TH)11、プログラムカウンタ(PC)12、命令メモリ13、レジスタ15を有する。レジスタ15には、コードTH0,TH1で示される複数の命令バッファ14-0,14-1が設けられる。複数の命令バッファ14-0,14-1は、複数のスレッドTH0,TH1と対応して同数個設けられている。
【0025】
デコード(D)2は、本発明のデコード部に相当し、セレクタ20、命令デコーダ21、ウェイト制御部22を備える。演算実行(E)3は、本発明の演算実行部に相当し、レジスタ読み出し部31、データ読み出し部32、演算制御部33を備える。
【0026】
複数のスレッドTH0~TH1は、複数の命令のアドレスと結び付けられている。なお、実施例1では、スレッドを2個としたが、スレッドは、3個以上設けても良い。
【0027】
命令フェッチ(F)1において、スレッド(TH)11は、フェッチされた命令のスレッド番号である。PC12は、現在処理中の命令が格納されている命令メモリ13上のアドレスである。命令メモリ13は、PC12のアドレスに対応して各スレッド(例えば、TH1)に属する一連の複数の命令を格納する。
【0028】
複数の命令バッファ14-0~14-1は、本発明の命令保持部に対応し、複数のスレッドTH0~TH1の個数と同数設けられ、実行権を得たスレッドのウェイ命令を実行する時に、ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持する。
【0029】
セレクタ20は、実行スレッド選択部5で選択されたスレッドに対応する命令バッファ14-0又は命令バッファ14-1を選択する。
【0030】
命令デコーダ21は、セレクタ20によって選択された命令バッファに格納された命令をデコードして、デコード結果をウェイト制御部22に出力する。ウェイト制御部22は、命令デコーダ21からのデコード結果がウェイト命令である場合に、ウェイト命令に対応するスレッドに対してウェイト指示を出力する。
【0031】
ウェイト指示を入力したスレッドは、実行スレッド選択部5に対してウェイト指示を出力する。実行スレッド選択部5は、ウェイト指示に基づき実行すべきスレッドを選択し、選択されたスレッドに対応する命令バッファ14-0又は命令バッファ14-1に対して、ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持させる。
【0032】
また、スレッドに対してウェイト状態を解除する解除イベントが入力されたとき、スレッドは、実行スレッド選択部5に対してウェイト状態を解除するための解除指示を出力する。
【0033】
実行スレッド選択部5は、セレクタ20を制御することにより、選択されたスレッドに対応する命令バッファ14-0又は命令バッファ14-1から命令フェッチ情報を読み出して、命令フェッチ情報を命令デコーダ21に出力させる。
【0034】
命令デコーダ21は、命令バッファ14-0又は命令バッファ14-1からの命令フェッチの情報に基づき処理命令のデコードから実行する。
【0035】
レジスタ読み出し部31は、レジスタ15に格納されたTH(11)スレッド番号のレジスタのデータを読み出してレジスタ書き込み部41に出力する。データ読み出し部32は、命令デコーダ21でデコードされた命令のデータを読み出してレジスタ書き込み部41と演算制御部33に出力する。演算制御部33は、データ読み出し部32で読み出され且つデコードされた命令を実行し、実行結果をレジスタ書き込み部41に出力する。
【0036】
加算部25は、レジスタ15に格納されたプログラムカウンタPC12の値を変更して、変更結果をPC12に出力する。結果格納(W)4は、データをレジスタに書き込むレジスタ書き込み部41を有する。
【0037】
次に、このように構成された実施例1のプロセッサ及びパイプライン処理方法の動作を、
図2及び
図4を参照しながら詳細に説明する。
図2では、スレッドのウェイト命令WAITがフェッチされてから、ウェイト状態から復帰するまでの流れを示している。
図4では、スレッドTH1のウェイト命令WAITがフェッチされる例を示している。ここでは、スレッドTH1のウェイト命令WAITについて説明するが、スレッドTH2のウェイト命令WAITの場合もスレッドTH1のウェイト命令WAITの場合と同じある。
【0038】
まず、命令バッファ14-0,14-1には、命令メモリ13からフェッチされた命令のコードが格納される。実行スレッド選択部5は、命令を実行すべきスレッドTH1を決定して、実行指示をスレッド11とセレクタ20とに出力する。これに従って、命令バッファ14-0,14-1の内の命令バッファ14-1がセレクタ20により選択されて、命令バッファ14-1から命令デコーダ21に命令コードが送られる。
【0039】
命令デコーダ21により命令がウェイト命令WAITであると判定されると、ウェイト制御部22からスレッドTH1にウェイト指示が送られる。スレッドTH1は、ウェイト状態になる。実行スレッド選択部5は、ウェイト指示に基づきスレッドTH1を選択し、スレッドTH1に対応する命令バッファ14-1に、スレッドTH1のウェイト命令WAITの次の命令C2の命令フェッチ情報を保持させる。ウェイト状態でも、命令C2の命令フェッチ情報は保持される。
【0040】
次に、ウェイト解除のための外部信号がスレッドTH1に届くと、スレッドTH1は、実行要求を実行スレッド選択部5に出力する。実行スレッド選択部5は、スレッドTH1の命令C2の実行指示を「命令デコード」ステージに出力する。
【0041】
この実行指示によって、ウェイトが解除されたスレッドTH1の命令バッファ14-1に保持された命令C2の命令フェッチ情報が読み出されて、セレクタ20を介して命令デコーダ21に命令C2の命令フェッチ情報が送られる。これにより、命令デコーダ21による「命令デコード」ステージから命令C2の処理を再開することができる。
【0042】
従って、再フェッチは不要となる。これにより、命令をパイプラインフラッシュしてしまい、もう一度フェッチからやり直すというタイムロスをなくすことができる。このため、タイムロスの発生を抑制し、処理速度を向上させることができる。また、ウェイト状態からの起動を早くすることができる。
【0043】
次に、
図3を参照しながら、従来のマルチスレッドのパイプライン処理を説明する。ウェイト命令WAITの次の命令C2は、捨てられ(×で示した。)、ウェイト状態が解除された時には、再び、命令C2の命令フェッチから処理を実行している。このため、もう一度フェッチからやり直すというタイムロスが発生し、処理速度が遅くなる。
【0044】
(実施例2)
図5は、本発明の実施例2に係るプロセッサ内のパイプライン構成図である。実施例2のプロセッサにおいて、2つの命令バッファ14-0,14-1が、複数のスレッドTH0~THN(N≧3)の個数よりも少ない個数設けられることを特徴とする。また、命令フェッチ1にセレクタ16を設けている。
【0045】
複数のスレッドTH0~THNは、スレッドTH0>スレッドTH1>・・・>スレッドTHNの順で優先順位が高い。優先順位が高いスレッドにのみ命令バッファを割り当てる。実施例2では、スレッドTH0,TH1のみに命令バッファ14-0,14-1が設けられている。
【0046】
セレクタ16は、スレッドがスレッドTH0である場合には、命令バッファ14-0を選択し、命令メモリ13からの命令の命令フェッチ情報を命令バッファ14-0に保持する。セレクタ16は、スレッドがスレッドTH1である場合には、命令バッファ14-1を選択し、命令メモリ13からの命令の命令フェッチ情報を命令バッファ14-1に保持する。
【0047】
次に、スレッドTH0のウェイトを解除する時には、命令バッファ14-0から命令の命令フェッチ情報を読み出し、スレッドTH1のウェイトを解除する時には、命令バッファ14-1から命令の命令フェッチ情報を読み出し、命令デコーダ21による「命令デコード」ステージから命令の処理を再開することができる。
【0048】
これに対して、スレッドTH0,TH1以外のスレッドTH2~THNのウェイトを解除する時には、再度、命令フェッチを行う。
【0049】
このように命令バッファ14-0,14-1が、複数のスレッドTH0~THNの個数よりも少ない個数設けられるので、ハードウェア増加を抑制することができる。また、実施例2のプロセッサ及びパイプライン処理方法においても、実施例1のプロセッサ及びパイプライン処理方法と同様な効果が得られる。
【0050】
(実施例3)
図6は、本発明の実施例3に係るプロセッサ内のパイプライン構成図である。実施例3に係るプロセッサは、命令バッファをキャッシュ構造で形成したことを特徴とする。キャッシュ構造は、ダイレクトマップ構造の場合には、前記実施例2相当である。本発明は、ウェイト命令の次のフェッチされた命令のみを格納するだけでよいので、本発明は、複数のキャッシュラインを対応させたセットアソシアティブ方式を採る必要はない。
【0051】
全部のキャッシュラインにタグの内容とアクセスするアドレスとが一致しているかどうかを検査する検査回路を設け、検査回路で並列に検査するフルアソシアティブ方式を採用する場合が本発明に適している。
【0052】
実施例3に係るプロセッサは、格納先選択回路16、キャッシュ(キャッシュメモリ)17、命令バッファ18、セレクタ20a,20b、ヒット判定部23を備える。
【0053】
キャッシュ17は、併設された複数のキャッシュライン17-1~17-nから構成されており、ウェイト命令の次の命令の命令フェッチ情報のみを格納する。ウェイト命令の次の命令の命令フェッチ情報のみをキャッシュライン17-1~17-nに格納すればよく、過去の命令をキャッシュライン17-1~17-nに格納しておく必要がない。このため、キャッシュエントリ数は、スレッド数以下であれば十分である。
【0054】
キャッシュライン17-1~17-nは、
図7に示すように、V、タグ、データの情報、(場合によってはキャッシュされた順番を示す情報)を有する。V(Valid、バリッド)は、命令が有効か無効かを示す。Vは、格納先選択回路16により選択され、命令がキャッシュライン17-1~17-nに書き込まれたときに有効(V=1)となる。Vは、ウェイト命令からの解除により、本エントリから命令が読み出されたときに無効(V=0)となる。タグは、データ読み出し時のデータ検索(選択)に使用される情報である。ここでは、格納される命令に対応するスレッド番号がタグに書き込まれる。命令は、ウェイト命令の次のフェッチされた命令である。
【0055】
格納先選択回路16aは、本発明の選択回路に相当し、フェッチした命令をキャッシュ17へ格納するかどうかを判定し、また、どのキャッシュラインへ命令を格納するかを判定する。格納先選択回路16aは、命令デコーダ21でデコードされた命令がウェイト命令で且つフェッチされる命令とデコードされる命令が同一スレッドにある場合で且つバリッドVに基づき、複数のキャッシュライン17-1~17-nの中からキャッシュラインを選択し、選択されたキャッシュラインにフェッチされた命令を書き込む。
【0056】
キャッシュライン17-1~17-nの中に、V=0のキャッシュラインがある場合には、当該キャッシュラインにフェッチされた命令を書き込み、V=0のキャッシュラインがない場合には、最も古い命令を追い出して追い出したキャッシュラインにフェッチされた命令を書き込む。キャッシュ17は、最も古い命令を判定できる情報又は構造を採る。キャッシュ17をFIFO(First In First Out)構造にすることにより、最も古い命令は、FIFOの先頭であることから、最も古い命令の判定は、容易である。
【0057】
デコードされた命令がウェイト命令でない場合には、フェッチされた命令は通常の命令バッファ18に格納される。これは、ウェイト命令の次の命令によってキャッシュ17を汚染することを避けるためである。
【0058】
ヒット判定部23は、本発明の判定部に相当し、実行スレッド選択部5bからウェイト解除によって発生する実行指示を受け取ると、キャッシュライン17-1~17-nのバリッドV及びタグに基づきウェイト解除直後のデコードすべき命令を選択する。
【0059】
ヒット判定部23は、キャッシュライン17-1~17-nの命令が有効(V=1)で、且つタグとウェイト解除すべきスレッドが一致する場合には、当該キャッシュラインからフェッチされた命令を読み出すための選択信号をセレクタ20a(第1セレクタ)に出力する。セレクタ20aは、選択信号に従って、当該キャッシュラインからフェッチされた命令を読み出す。
【0060】
また、ヒット判定部23は、同時にキャッシュ17に、ウェイト解除すべき命令が存在することを示すためのヒット信号をセレクタ20bに出力する。セレクタ20bは、ヒット信号に基づきキャッシュ17を選択する、即ち、キャッシュ17にヒットすれば、キャッシュ17のキャッシュライン17-1~17-nからの命令を命令デコーダ21に出力する。
【0061】
一方、ヒット信号がヒット判定部23からセレクタ20bに送られない場合、即ち、キャッシュメモリ17にヒットしない場合には、セレクタ20bは、命令バッファ18を選択する。この場合には、再度、命令メモリ13からの命令をフェッチし、命令バッファ18にフェッチした命令を格納し、その後、命令デコーダ21に当該命令を出力する。
【0062】
このように実施例3のプロセッサ及びパイプライン処理方法によれば、実施例2のプロセッサ及びパイプライン処理方法と同様な効果が得られる。また、キャッシュ17にしたので、実施例2のときよりもフレキシビリティが高くなる。
【符号の説明】
【0063】
1 命令フェッチ(F)
2 デコード(D)
3 演算実行(E)
4 結果格納(W)
5,5a,5b 実行スレッド選択部
11 スレッド(TH)
12 プログラムカウンタ(PC)
13 命令メモリ
14-0,14-1 命令バッファ
15 レジスタ
16 セレクタ
16a 格納先選択回路
17 キャッシュメモリ
17-1~17-n キャッシュライン
18 命令バッファ
20,20a,20b セレクタ
21 命令デコーダ
22 ウェイト制御部
23 ヒット判定部
25 加算部
31レジスタ読み出し部
32 データ読み出し部
33 演算制御部
41 レジスタ書き込み部
TH0~THN スレッド
C1~C3 命令