JP2011070695A - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP2011070695A
JP2011070695A JP2010270035A JP2010270035A JP2011070695A JP 2011070695 A JP2011070695 A JP 2011070695A JP 2010270035 A JP2010270035 A JP 2010270035A JP 2010270035 A JP2010270035 A JP 2010270035A JP 2011070695 A JP2011070695 A JP 2011070695A
Authority
JP
Japan
Prior art keywords
instruction
thread
issue
priority
information
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.)
Withdrawn
Application number
JP2010270035A
Other languages
English (en)
Inventor
Fumio Arakawa
文男 荒川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2010270035A priority Critical patent/JP2011070695A/ja
Publication of JP2011070695A publication Critical patent/JP2011070695A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】余剰能力を他の電子制御装置に供給できるプロセッサを提供する。
【解決手段】本発明に係るプロセッサは、プロセッサ状態の退避回復を伴わずに、N(Nは2以上の整数)スレッドを同時又は時分割に実行する。前記スレッドは、優先度を有する。プロセッサは、N−1以下のスレッドを実行し、実行中の前記スレッドより優先度の高いスレッドを受付けた場合には、前記スレッドより優先度の低いスレッドの終了処理を開始、又は、前記スレッドを優先度の低いスレッドとして実行する。
【選択図】図23

Description

本発明は、プロセッサに関し、例えば複数命令フローの優先度管理と効率的実行を可能にするプロセッサに適用して有効な技術に関する。
近年、プロセッサの処理効率向上のために1つのプロセッサで同時又は時分割に複数命令フロー(以下、命令流とも記す)を処理するマルチスレッドプロセッサを用いることが一般的になってきている。このようなマルチスレッドプロセッサは、複数の命令フローをどう選択すれば高い処理効率が得られるかという観点から技術開発が進められている。
特許文献1には、命令流毎に、命令解読手段、優先度保持手段、及び保持された優先度に従って機能ユニットに発行すべき命令を決定する制御手段を備える技術が開示されている。特許文献1の技術では、優先順位が同じ命令発行要求が2つ以上ある場合には、サイクル毎に優先する論理プロセッサを変更する方法、以前発行できなかった論理プロセッサを優先する方法、そして、固定的とする方法のうちいずれかの方法により命令発行を決定する。これにより、複数命令流間で各命令流の処理性能を柔軟に調整することができ、特に、同順位の優先度の命令流が均等に処理されるようにすることができる。命令流間で同期をとって処理する場合には、最も遅い命令流が処理性能を律するので、命令流が均等に処理されると、全体の処理効率が向上することになる。
特許文献2には、ソフトウェアによって割当てられた、それぞれのスレッドの優先度に基づいて、プロセッサ・リソースを割当てる技術が開示されている。特許文献2の技術では、例えば、キャッシュ・ミスなどによって効率の落ちたスレッドにも、固定的な割合でリソースを割当てるために、効率的なリソース割当てを実現できない、という問題を回避できる。具体的には、特許文献2の技術では、特定の命令スレッドに関連した、予め定義された事象又は状況が発生すると、1つ又は複数のスレッドの優先度を調整して、その優先度に従って命令をインターリーブする。これにより、効率の落ちている高優先度スレッドによる非効率なリソース占有を抑止して、効率的なリソース割当てを実現することができる。
特開平10−124316号公報 特開2004−326766号公報
しかしながら、特許文献1,2では、ソフトウェアで指定した優先度をハードウェアが調整することで処理効率を向上させるので、優先度の高いスレッドを、そのスレッド単独で処理した場合とマルチスレッド処理した場合とでは、前者より後者の方が、実行時間が延びてしまう可能性が高い。要するに、このような技術は、効率向上を実行時間保証より優先させたシステム、即ち、スループット重視の情報系システムにおいて特に有効となる。
一方、制御系システムは、最悪の実行時間でも応答時間を保証して正常動作するように予め調整したシステムであって、実行時間を保証するためにスループットが犠牲になっている場合が多い。このため、制御系システムでは、スループットを重視して外部からの処理依頼を受付けると応答時間を保証できない場合がある。制御系システムとしては、例えば、最新の自動車の制御及び情報処理を行う車載システムがあり、このシステムには、エンジン制御、ブレーキ制御等を行う各電子制御装置やカーインフォメーションシステムが車内ネットワークで接続されている。しかしながら、各電子制御装置は、独立にチューニングされており、たとえ余剰能力があっても、その電子制御装置の応答時間を保証しつつ、余剰能力を他の電子制御装置に供給する機能を備えてはいない。
例えば、特許文献1では、あるスレッドの命令発行が直前に不可となった場合には、それ以外のスレッドの命令を発行できるとしても、その命令の代わりに発行することはしない。このため、スレッドの優先度を厳密に守ろうとすると、最優先スレッドの命令発行が直前に不可になった場合には、命令を発行できなくなってしまう。しかも、一般に命令発行の可否判定は、命令発行の直前に行われるので、スレッドの優先度を厳密に守ると、最優先スレッド以外の命令発行は困難となる。
本発明の目的は、処理の効率化を図ることができるプロセッサを提供することにある。
本発明の別の目的は、ソフトウェアで指定した優先度を厳密に守りながら、応答時間を保証できるプロセッサを提供することにある。
本発明の更に別の目的は、余剰能力を他の電子制御装置に供給できるプロセッサを提供することにある。
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
〔1〕本発明に係るプロセッサは、発行命令選択回路(10)を有する。プロセッサは、前記発行命令選択回路に供給された命令をデコードして実行可能である。前記命令は、前記命令が発行された動作サイクルの次動作サイクル以降の命令発行情報(isid)を有する。前記命令発行情報は、前記命令を発行可能な動作サイクルの位置を示す情報である。
上記より、命令がある動作サイクルで発行されたとき、当該命令が保有する命令発行情報により、次動作サイクル以降については命令を発行可能な動作サイクルの位置が既に確定しているから、この動作サイクルの位置に従って必要な命令を発行でき、プロセッサの処理の効率化を図ることができる。尚、動作サイクルの位置は、本明細書中、スロットとも称する。
本発明の具体的な一つの形態として、前記命令発行情報は、前記命令の初回又は前回実行時に生成された情報である。上記より、命令の2回目以降の実行時から、命令発行情報を活用できる。
本発明の具体的な一つの形態として、前記命令発行情報は、前記命令の作成時に生成された情報である。上記より、命令の1回目の実行時から、命令発行情報を活用できる。
本発明の具体的な一つの形態として、命令記憶部(IC)は、前記命令を一時的に保持する。命令発行情報記憶部(ISINF)は、前記命令発行情報を一時的に保持する。前記命令発行情報は、前記命令記憶部から読み出された前記命令と共に、前記命令発行情報記憶部から読み出される。上記より、命令に命令発行情報を付加することができる。また、新たな命令に新たな命令発行情報を付加するときには、命令発行情報記憶部を更新するだけでよい。
本発明の具体的な一つの形態として、前記命令は、優先度を有する。前記発行命令選択回路は、前記命令発行情報に基づいて、優先度の高い命令を前記動作サイクルに発行し、優先度の低い命令を前記動作サイクルとは別の動作サイクルに発行する。上記より、優先度の低い命令は、優先度の高い命令が発行されない別の動作サイクル(又は、後の動作サイクル)に発行されるから、ソフトウェアで指定した優先度を厳密に守りつつ、応答時間を保証できる。
本発明の具体的な一つの形態として、前記発行命令選択回路は、前記命令を発行するか否かを判定する発行可否判定回路(ISO)を有する。前記発行可否判定回路は、前記優先度の高い命令を発行可能である場合に不活性化される。上記より、命令の発行可否が命令発行情報で判定できる場合には、ハードウェアである発行可否判定回路を使用しないので、消費電力を低減できる。
〔2〕本発明に係るプロセッサは、プロセッサ状態の退避回復を伴わずに、N(Nは2以上の整数)スレッドを同時又は時分割に実行する。前記スレッドは、優先度を有する。プロセッサは、N−1以下のスレッドを実行し、実行中の前記スレッドより優先度の高いスレッドを受付けた場合には、前記スレッドより優先度の低いスレッドの終了処理を開始、又は、前記スレッドを優先度の低いスレッドとして実行する。
上記より、即時実行開始の必要な優先度の高いスレッドを受付ける可能性がある場合に、複数のスレッドのうち少なくとも1つを実行せず、ホットスタンバイ状態にすることができる。このため、実行していないスレッドは直ちに実行可能となり、このスレッドを最優先スレッドにすれば、実行中のスレッドの優先度は低くなるので、最優先スレッドの応答時間を保証できる。また、他にも優先スレッドを受付ける可能性がある場合には、実行中のスレッドよりも優先度の低いスレッドの終了処理を開始するので、ホットスタンバイ状態に戻ることができる。
従って、ホットスタンバイ状態を維持することにより、優先スレッドの即時実行開始を保証できるから、本来の応答時間を保証しつつ、余剰能力を活用して外部からの処理依頼を受付けることもできる。例えば、このプロセッサを適用した電子制御装置を複数有する制御系システムでは、余剰能力を他の電子制御装置に供給できるから、負荷の効率的分散を行うことができる。
〔3〕本発明に係るプロセッサは、プロセッサ状態の退避回復を伴わずに、複数スレッドを同時又は時分割に実行する。前記複数スレッドは、優先度を有する。プロセッサは、優先スレッド中の命令フローを1回目に実行したときに、前記命令フロー中の命令を発行可能な動作サイクルの位置を記憶し、前記命令フローの2回目以降の実行において、非優先スレッドを、前記動作サイクルとは別の動作サイクルで実行する。
上記より、命令フローの2回目以降の実行において、非優先スレッドは、動作サイクルの位置に従い、優先スレッドが実行されない別の動作サイクルで実行されるから、プロセッサの処理の効率化を図ると共に、ソフトウェアで指定した優先度を厳密に守りつつ、応答時間を保証できる。
〔4〕本発明に係るプロセッサは、発行すべき命令を発行命令選択回路で選択して複数のスレッドによる命令実行を処理する。前記発行命令選択回路は、発行した命令が保有する命令発行情報に従って、その後に発行可能な動作サイクルの位置を制御する。
上記より、発行した命令が保有する命令発行情報により、次動作サイクル以降については命令を発行可能な動作サイクルの位置を確定することができるから、この確定した動作サイクルの位置に従って必要な命令を発行できる。従って、プロセッサの処理の効率化を図ることができる。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
即ち、処理の効率化を図ることができる。また、ソフトウェアで指定した優先度を厳密に守りながら、応答時間を保証できる。更に、余剰能力を他の電子制御装置に供給できる。
第1のプログラムを例示する説明図である。 スカラプロセッサと2ウェイスーパースカラプロセッサにそれぞれ対応するアセンブラプログラムのループ部の動作を例示する説明図である。 第2のプログラムを例示する説明図である。 マルチスレッドプロセッサによるループ部の動作を例示する説明図である。 比較例としてのマルチスレッドプロセッサのパイプライン構造を例示する説明図である。 代表的な信号の生成タイミングを例示する説明図である。 比較例としてのマルチスレッドプロセッサによるスレッド切替えを例示する説明図である。 命令デコードステージIDで処理した命令を例示する説明図である。 スレッド選択を遅らせた場合の比較例としてのパイプライン構造を例示する説明図である。 本発明の実施形態1に係るプロセッサの構成を示す概略図である。 1命令に2ビットの発行情報を付加した例を示す説明図である。 発行情報を活用するプロセッサ1のパイプライン構造部分4を例示する説明図である。 スレッド選択回路10を例示する説明図である。 2ビットの発行情報によるスレッド選択制御論理を例示する説明図である。 優先スレッドの空き発行スロットで非優先スレッドの命令を発行しているプロセッサ1の動作を例示する説明図である。 1命令に1ビットの発行情報を付加した例を示す説明図である。 1ビットの発行情報によるスレッド選択制御論理を例示する説明図である。 優先スレッドの空き発行スロットで非優先スレッドの命令を発行している実施形態2に係るプロセッサの動作を例示する説明図である。 命令デコーダIDUの一部の構成を例示する説明図である。 スレッド選択回路CTLのスレッド選択制御論理を例示する説明図である。 命令コード内に3ビットの発行情報を付加した例を示す説明図である。 3ビットの発行情報によるスレッド選択制御論理を例示する説明図である。 実施形態5に係るプロセッサによるホットスタンバイ動作を例示する説明図である。 各実施形態に係るプロセッサを用いた制御系システムを例示する説明図である。
《マルチスレッドプロセッサ》
本発明に係る各実施形態を詳細に説明する前に、まず、各実施形態の比較例となるマルチスレッドプロセッサの構成、動作等を図1〜図9に基づいて説明する。図1には、プロセッサの動作例を説明するための第1のプログラムが例示される。第1のプログラムは、C言語で記述されているように、N個の要素を持つ2つの配列a[i]とb[i]を加算し、配列c[i]に格納するプログラムである。この第1のプログラムを、アセンブラで記述した場合について説明する。このアセンブラプログラムでは、スタックのプッシュポップを主用途とするポストインクリメントロード命令と、プリデクリメントストア命令とを有するアーキテクチャ、例えばスカラプロセッサを想定している。このため、配列のロードには、ポストインクリメントロード命令を使用する。また、配列へのストアには、ポストインクリメントストア命令がないので、プログラム実行中に配列要素c[i]とa[i]の距離が一定であることを活用して、アドレス更新のない通常のストア命令を使用する。
まず、初期設定として4つの即値転送命令「mov #_a,r0」、「mov #_b,r1」、「mov #(_c−_a),r2」及び「mov #N,r3」によって、2つの配列の先頭アドレス_a及び_b、2つの配列のアドレスの距離_c−_a、及び配列の要素数Nを、それぞれレジスタr0、r1、r2、及びr3に格納する。次に、ループ部では、ポストインクリメントロード命令「mov @r0+,r4」及び「mov @r1+,r5」によって、r0及びr1の指す配列a及びbのアドレスから配列要素をr4及びr5にロードすると同時に、r0及びr1をインクリメントして次の配列要素を指すようにする。その後、直ちに加算をしようとしてもロードデータ待ちとなるので、加算の前にデクリメント・テスト命令「dt r3」によって、r3に格納された要素数Nをデクリメントし、その結果がゼロかどうかをテストし、ゼロであればフラグをセットし、ゼロでなければフラグをクリアする。
次に、加算命令「add r4,r5」によって、r4及びr5にロードされた配列要素を加算し、r5に格納する。そして、ディレイスロット付条件分岐命令「bf/s _L00」によって、フラグをチェックし、クリアされていれば、残り要素数Nがまだゼロではないので、ディレイスロット命令実行後に、ラベル_L00の指すループの先頭に分岐する。一方、セットされていれば、残り要素数Nがゼロなので、分岐せずにループを抜ける。最後に、ディレイスロット命令「mov r5,@(r0+r2)」によって、配列aの要素を指すr0と「配列aとcのアドレスの距離_c−_a」を格納したr2を加算して、配列cの要素アドレスを計算して、そのアドレスに配列要素の加算結果であるr5の値をストアする。
次に、このアセンブラプログラムを、2命令同時実行可能な2ウェイスーパースカラプロセッサ向けに最適化した場合について説明する。ここで、スーパースカラ方式は、ロードストア命令と他の命令の2命令同時発行が可能であるとする。このため、スーパースカラ向けに最適化したアセンブラプログラムでは、同種の命令の連続によるリソース競合を避けるために、ポストインクリメントロード命令「mov @r1+,r5」とデクリメント・テスト命令「dt r3」の順序を交換している。
図2には、スカラプロセッサと2ウェイスーパースカラプロセッサにそれぞれ対応するアセンブラプログラムのループ部の動作が例示される。ここで、ロードレイテンシは2を想定しており、ロード命令とロードデータを使用する命令の距離が2以上であれば、プログラムはストールしない。また、分岐命令の実行サイクル、即ち、分岐命令とターゲット命令の距離は2としている。その結果、スカラプロセッサの動作例では、対応するアセンブラプログラムのループを構成する6命令を、6サイクルで実行することができる。
一方、2ウェイスーパースカラプロセッサの動作例では、対応するアセンブラプログラムのループを構成する6命令の実行に、スカラプロセッサと同じ6サイクルかかってしまう。この理由を以下に示す。4命令目の「add r4,r5」は、3命令目の「mov @r1+,r5」の実行結果を待つ必要があり、そのため、3命令分の空きスロットができる。また、「add r4,r5」の後続命令「bf/s _L00」は、実行リソース競合により「add r4,r5」と同時にできないので、1命令分の空きスロットができる。更に、「bf/s _L00」とそのターゲット命令であるループ先頭命令「mov @r0+,r4」の距離は2であるので、2命令分の空きスロットができる。
従って、2ウェイスーパースカラプロセッサの動作例では、合計6つの命令発行スロットが空きスロットとなるので、図示のように、6命令の実行にスカラプロセッサと同じ6サイクルかかってしまう。このため、通常、2ウェイスーパースカラプロセッサのIPC(Instructions per cycle)は最大2であるのに対して、対応するアセンブラプログラムではIPCが1となり、プロセッサの効率が下がってしまう。尚、IPCとは、プロセッサの性能指標であって、1サイクルに何命令実行可能かを示す単位である。
このような場合に、空いている命令発行スロットを活用してプロセッサの効率を上げる方式として、マルチスレッド方式がある。このマルチスレッド方式は、複数のプログラムカウンタ及びレジスタファイルを用いて、複数の命令フローを同時又は時分割に実行する方式である。
以下、マルチスレッド方式によって、第1のプログラム実行時の空き命令発行スロットを活用して、図3に示す第2のプログラムを実行する場合を考える。第2のプログラムは、C言語で記述されているように、配列xのN要素を加算して変数yに代入するプログラムである。この第2のプログラムを、アセンブラで記述した場合について説明する。まず、初期設定として4つの即値転送命令「mov #_x,r0」「mov #_y,r1」「mov #N,r2」及び「mov #0,r3」によって、配列の先頭アドレス_x、変数yのアドレス_y、配列の要素数N、及び変数yの初期値0を、それぞれレジスタr0、r1、r2、及びr3に格納する。
ループ部では、ポストインクリメントロード命令「mov @r0+,r4」によって、r0の指す配列aのアドレスから配列要素をr4にロードすると同時に、r0をインクリメントして次の配列要素を指すようにする。その後、直ちに加算をしようとしてもロードデータ待ちとなるので、加算の前にデクリメント・テスト命令「dt r2」によって、r2に格納された要素数Nをデクリメントし、その結果がゼロかどうかをテストし、ゼロであればフラグをセットし、ゼロでなければフラグをクリアする。次に、ディレイスロット付条件分岐命令「bf/s _L01」によって、フラグをチェックし、クリアされていれば、残り要素数Nがまだゼロではないので、ディレイスロット命令実行後に、ラベル_L01の指すループ部の先頭に分岐する。一方、セットされていれば、残り要素数Nがゼロなので、分岐せずにループ部を抜ける。ディレイスロット命令「add r4,r3」によって、ロードされた配列要素r4を変数yの格納されたr3に加算し、r3を更新する。そして、残り要素数Nがゼロになってループ部を抜けたら、ストア命令「mov r3,@r1」によって、変数yのアドレスに加算結果r3の値をストアする。
図4には、マルチスレッドプロセッサで、第1のプログラム実行時の空き命令発行スロットを活用して第2のプログラムを実行した場合のループ部の動作が例示される。ここでは、第1及び第2のプログラムをマルチスレッドプロセッサの第1及び第2のスレッドに割当てて実行する。また、2つのプログラムの実行優先度は、常に第1のプログラムの方が高いものとする。
このため、第1のプログラムのループ部は、6サイクル単位で図2と同一動作を繰り返す。一方、第2のプログラムは、実行優先度が低いので第1のプログラムが命令発行スロットを使用せず、実行リソースに空きがある場合のみ実行できる。その結果、図4に示すように、第1のプログラムのループ部の2サイクル目の空きスロットでは、同時に第1のプログラムが「mov @r1+,r5」を実行しているから、ロードストア命令の実行リソースに空きがなく、第2のプログラムのループ部の先頭命令「mov @r0+,r4」は実行できない。3サイクル目の2つの空きスロットでは、「mov @r0+,r4」及び「dt r2」を実行できる。4サイクル目の空きスロットでは、第1のプログラムが「add r4,r5」を実行しているから、ロードストア命令以外の実行リソースに空きがなく、第2のプログラムの「bf/s _L01」は実行できない。6サイクル目の2つの空きスロットでは、「bf/s _L01」が実行できる。しかし、次の命令の「add r4,r3」は、「bf/s _L01」とリソースが競合するので実行できない。そして、第1のプログラムの次のループ部の2サイクル目の空きスロットでは、「add r4,r3」を実行できる。
従って、第2のプログラムは、第1のプログラムと2サイクルずれた形で6つの空きスロットのうち4つを活用して、6サイクルでループ部の処理を実行できる。即ち、このマルチスレッドプロセッサでは、6サイクルで10命令を実行しているので、図2の例では1であったIPCが約1.7になり、効率が大幅に改善されている。
ところで、図4に示す動作例は、第1のプログラムが使用しない命令発行スロット及びリソースがあれば、第2のプログラムが活用できると仮定した上での例を示したものである。しかしながら、実際には、スレッドの優先度を厳密に守ろうとすると、最優先スレッドの命令発行が直前に不可になった場合には、命令を発行できない。そして、命令発行の可否判定は、一般に発行直前であるため、スレッドの優先度を厳密に守ると最優先スレッド以外の命令発行は困難である。
図5には、比較例としてのマルチスレッドプロセッサのパイプライン構造が例示される。ここでは、2つのプログラムカウンタPC0及びPC1、2つのレジスタファイルRF0及びRF1によって、2つのプログラムの並列実行を可能にしている。また、2つの命令キューIQ0及びIQ1によって、サイクル単位のプログラム切替えを可能にしている。パイプラインは、命令アドレスIA、命令フェッチIF、命令デコードID、演算EX1、EX2、及びライトバックWBの6ステージを有する。
命令アドレスステージIAでは、命令フェッチユニットIFUが命令デコーダIDUから供給される分岐アドレスBAと、2つのプログラムカウンタPC0及びPC1とから命令フェッチアドレスIFAを生成し、命令キャッシュICに供給する。
命令フェッチステージIFでは、命令キャッシュICの命令フェッチアドレスIFAの指すアドレスからフェッチした命令を、命令キャッシュ出力として、命令選択回路IMUXと命令キューIQ0又はIQ1とに供給する。供給した命令を直ちに使用する場合は、命令選択回路IMUXで命令キャッシュ出力を選択し、命令デコーダIDUに供給する。一方、直ちに使用しない場合は、命令キューIQ0又はIQ1に命令OPICをバッファする。命令キューIQ0又はIQ1にバッファした命令は、キューの先頭から出力されて、スレッド選択回路THMUX及び命令選択回路IMUXで選択され、命令デコーダIDUに供給される。
命令デコードステージIDでは、供給された命令をデコードし、レジスタスレッド選択回路RMUX、フォワーディング回路FWD、及び実行ユニットEXUの制御信号を出力する。また、命令実行に必要なリソース及びオペランドが使用可能かどうかを判断し、実行不可能であれば実行可能になるまで命令発行を待つと共に、後続命令を待たせる。実行可能であれば実行開始の指示を出す。更に、レジスタスレッド選択回路RMUX及びフォワーディング回路FWDでは、制御情報に従ってオペランドを選択して実行ユニットEXUに供給する。
実行ステージEX1及びEX2では、命令デコーダIDUからの制御情報に従って実行ユニットEXUが命令を実行する。特に、EX2ステージでは、データキャッシュDCアクセスを行う。ライトバックステージWBでは、命令の実行結果をレジスタファイルRF0又はRF1に格納する。
図6には、代表的な信号の生成タイミングが例示される。命令フェッチステージIFでは、命令キューIQ0又はIQ1出力、スレッド選択回路THMUX出力、命令キャッシュ出力、命令選択回路IMUXの順に確定していく。命令デコードステージIDでは、命令コード、リソース使用可否、オペランド使用可否、フォワーディング制御情報、命令発行可否が順次確定していく。
図7には、スレッド優先度を厳密に守る場合のスレッド切替えが例示される。まず、命令発行可否は、命令デコードステージIDの終盤で判定されるので、命令デコードステージIDまでは優先スレッドを実行する。そして、命令デコードステージIDで命令発行不可であると判定されると、命令フェッチステージIFのスレッド選択回路THMUXで非優先スレッドの命令を選択し、非優先スレッドの命令を実行する。その後、優先スレッドの命令が実行可能となったら再実行する。その結果、図示のように優先スレッドが命令を発行していない期間が3サイクルあるにもかかわらず、非優先スレッドの命令は、1サイクルしか発行できていない。そして、優先スレッドの命令を発行できない期間が2サイクル以下であると、非優先スレッドの命令は発行できない。
図2の動作例で、命令デコードステージIDにて発行されなかった命令も含めて、命令デコードステージIDで処理した命令を図8に例示する。図中、取消線のある命令が発行されなかった命令である。ディレイスロット付条件分岐命令「bf/s _L00」は、実行時に条件判定を行うものとする。このため、命令デコードステージIDで「bf/s _L00」をデコード中に、命令フェッチステージIFでは非分岐時に実行する命令、即ち、この例ではループ部を抜けた場合に実行する命令が選択され、命令デコードステージIDに供給される。図8ではこの非分岐時に実行する命令を、NT#1及びNT#2としている。そして、ループ部を繰り返し実行している間は、これらの命令は命令デコードステージIDでキャンセルされ、発行されない。
図8では、全ての命令の発行できない期間が2サイクル以下である。例えば、加算命令「add r4,r5」及び分岐命令「bf/s _L00」は、2サイクル発行できずに待たされており、他の命令は直ちに発行できている。このため、図5に示したマルチスレッドプロセッサのパイプライン構造では、図7で説明したように、非優先スレッドの命令を発行できないという問題が生じる。
この問題を解決する1つの方法としては、スレッド選択を遅らせることが挙げられる。即ち、命令デコードステージIDで命令発行可否を判定した後に、実行するスレッドを選択すればよい。
図9には、スレッド選択を遅らせた場合の比較例としてのパイプライン構造が例示される。まず、命令アドレスステージIAは、図5の方式と同一である。命令フェッチステージIFでは、図5のようなスレッド選択は行わず、多重化された命令選択回路IMUX0及びIMUX1で、多重化された命令デコーダIDU0及びIDU1に供給する命令を選択する。命令選択回路IMUX0では、命令キャッシュ出力又は命令キューIQ0出力を選択する。また、命令選択回路IMUX1では、命令キャッシュ出力又は命令キューIQ1出力を選択する。このとき、優先スレッドの命令が命令デコーダIDU0に供給される。
命令デコードステージIDでは、多重化された命令デコーダIDU0及びIDU1が供給された命令をデコードし、多重化されたフォワーディング回路FWD0及びFWD1の制御信号と、実行ユニットEXUの制御信号を出力する。また、命令実行に必要なリソース及びオペランドが使用可能かどうかを判断し、実行不可能であれば実行可能になるまで命令発行を待つと共に、後続命令を待たせる。一方、実行可能であれば、実行開始の指示を出す。そして、命令デコーダIDU0は、実行可否判定結果をレジスタスレッド選択回路RMUX及び実行ユニットEXUの制御信号スレッド選択回路THMUXに出力する。また、フォワーディング回路FWD0及びFWD1は、制御情報に従ってオペランドを選択して、レジスタスレッド選択回路RMUXに供給する。
実行ステージEX1及びEX2では、実行ユニットEXUの制御信号スレッド選択回路THMUXが命令デコーダIDU0及びIDU1からの制御情報を、命令デコーダIDU0からの実行可否判定結果に従って選択する。また、レジスタスレッド選択回路RMUXは、実行可否判定結果に従ってフォワーディング回路FWD0及びFWD1からオペランドを選択する。実行可否判定結果が実行可の場合は、命令デコーダIDU0でデコードした優先スレッドの実行が可能なので、命令デコーダIDU0からの制御情報及びフォワーディング回路FWD0の出力を選択する。一方、実行可否判定結果が実行不可の場合は、非優先スレッドの命令発行を行うので、命令デコーダIDU1からの制御情報及びフォワーディング回路FWD1の出力を選択する。その後の動作は、図5の例と同一である。
従って、図9に示すパイプライン構造によれば、サイクル毎に実行スレッドを切替えることができるが、その反面、スレッド選択を命令フェッチステージIFから遅らせた分、多重化すべきハードウェアが増加してしまう。即ち、命令デコードステージIDでのハードウェアは、比較的大きくなり、このステージにおける多重化により面積が増大し、面積効率が低下してしまう。また、実行しないスレッドについても命令デコードステージIDの処理を行うので、命令デコードステージIDの消費電力が2倍になってしまう。
マルチスレッドプロセッサの本来の目的は、ピークIPCを使い切れないシングルスレッドプロセッサに比較的少量のハードウェアを追加することで、効率を向上させることにある。このため、上記した多重化により、効率が低下することは望ましくない。更に、図9の例ではスレッド選択を実行ステージEX1で行っているので、実行ステージEX1のサイクルタイムが増大して、動作周波数が低下してしまう。尚、図5の例では、命令キャッシュ出力を命令キューIQ0又はIQ1にバッファした場合のみスレッド選択を行うので、サイクルタイムは増大しない。
以上のように、図5に示した比較例では、非優先スレッドの発行が困難であり、図9に示した比較例では、面積効率、電力効率及び動作周波数が低下するという問題があった。これに対して、以下に示す各実施形態は、命令コードに、次のサイクル以降に実行する命令の発行情報を付加することにより、これらの問題を解決するものである。
《実施形態1》
図10には、本発明の実施形態1に係るプロセッサの構成が概略的に例示される。CPU(中央処理装置であり、以下、プロセッサとも記す)1は、マルチスレッドプロセッサであって、CPUコア2と、内部バスであるBUS(Internal Bus)3を備えている。CPUコア2は、パイプライン構造部分4と、BIU(Bus Interface Unit)5とを有する。さらに、プロセッサ1は、IP(Intellectual Property)モジュールと称される機能モジュール(以下、IPと記す)6,7と、外部バスインタフェース部であるEMI(External Memory Interface)8とを備えている。また、プロセッサ1には、MEM(Memory)9等が接続される。
パイプライン構造部分4は、高速化のためにパイプライン化された部分であって、パイプラインは、キャッシュ等の内蔵高速メモリの速度に合わせてチューニングされている。このため、CPUコア2外へのアクセスにはパイプライン化されていないBIU5が使用される。
図11には、1命令に2ビットの発行情報を付加した例が示される。同図に示される命令コードの命令長に特に制限はないが、本実施形態では16ビットとしている。また、発行情報のエンコードは、00:「次サイクル全発行スロット使用」、01:「次サイクル後行発行スロット不使用」、10:「次サイクル全発行スロット不使用」、11:「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」とする。
図12には、発行情報を活用するプロセッサ1のパイプライン構造部分4が例示されている。図中、説明の便宜上、命令キューIQ0及びIQ1、スレッド選択回路THMUX、命令選択回路IMUX、及び命令デコーダIDUのラッチ部分からなる領域を太線で囲み、スレッド選択回路10とした。このパイプライン構造部分4は、図5に示したパイプライン構造と比べると、発行情報バッファISINFを付加した点が異なる。2ビットの発行情報は、命令デコードステージIDで生成され、命令キャッシュICにバッファされた命令に付加される付加情報である。発行情報バッファISINFは、命令キャッシュICと独立したアレイで構成されており、2ビットの発行情報を保存する。このため、発行情報を命令に付加するときには、発行情報バッファISINFのみを更新すればよい。また、発行情報バッファISINFは、命令キャッシュICとアレイが独立していても、書込むエントリを揃えることにより、読出し時は命令と同時に発行情報を読出すことができる。尚、命令キャッシュICエントリのリプレース時には、対応する発行情報を初期化する。発行情報が不明な場合は、命令を発行できる可能性があるので、00:「次サイクル全発行スロット使用」を初期値とする。
図13には、スレッド選択回路10が例示されている。スレッド選択回路10は、2命令同時発行のスーパースカラ方式用に2命令op0及びop1を、その有効情報opv0及びopv1と共に出力する。選択回路10には、選択入力信号である命令キャッシュIC出力の4命令opic0、opic1、opic2及びopic3と、その有効信号opvic0、opvic1、opvic2及びopvic3と、命令に付加されている発行情報バッファISINFからの発行情報isic0、isic1、isic2及びisic3が入力される。
4命令opic0、opic1、opic2及びopic3と、その有効信号opvic0、opvic1、opvic2及びopvic3は、命令キューIQ0又はIQ1に入力される。発行情報isic0、isic1、isic2及びisic3は、命令キューIQ0に入力される。また、先行命令opic0、その有効信号opvic0及び先行命令付加情報isic0は、命令選択回路IMUX0にも入力される。後行命令opic1及びその有効信号opvic1は、命令選択回路IMUX1にも入力され、命令キャッシュIC出力の命令を直ちに供給する場合に、命令選択回路IMUX0又は命令選択回路IMUX1で選択される。
命令キューIQ0は、バッファした命令の先頭2命令を優先スレッドの先行命令op00及び後行命令op01として出力し、これらの命令が有効かどうかを示す有効信号opv00及びopv01も出力する。更に、命令キューIQ0は、先行命令op00の発行情報isiqも出力する。命令キューIQ1は、バッファした命令の先頭2命令を非優先スレッドの先行命令op10及び後行命令op11として出力し、これらの命令が有効かどうかを示す有効信号opv10及びopv11も同時に出力する。
スレッド選択回路THMUX0は、スレッド選択制御回路CTLから出力される先行命令スレッド選択信号thif0が0であれば、優先スレッドの先行命令op00及びその有効信号opv00を選択し、先行命令スレッド選択信号thif0が1であれば、非優先スレッドの先行命令op10及びその有効信号opv10を選択する。そして、スレッド選択回路THMUX0は、先行命令opiq0及び有効信号opviq0として出力する。発行情報isiqは、先行命令スレッド選択信号thif0が0の場合のみ使用されるので、先行命令スレッド選択信号thif0の値とは関係なく先行命令opiq0に付加しておく。スレッド選択回路THMUX1は、スレッド選択制御回路CTLから出力される後行命令スレッド選択信号thif1が0であれば、優先スレッドの後行命令op01及びその有効信号opv01を選択し、後行命令スレッド選択信号thif1が1であれば、非優先スレッドの後行命令命令op11及びその有効信号opv11を選択する。そして、スレッド選択回路THMUX1は、後行命令opiq1及び有効信号opviq1として出力する。
命令選択回路IMUX0は、スレッド選択回路THMUX0出力の有効信号opviq0が1の場合には、スレッド選択回路THMUX0出力opiq0、その有効信号opviq0、及び発行情報isiqを選択する。また、命令選択回路IMUX0は、有効信号opviq0が0の場合には、命令キャッシュIC出力命令opic0、その有効信号opvic0、及び発行情報isic0を選択する。そして、命令選択回路IMUX0は、先行命令opif0、その有効信号opvif0、及び発行情報isifとして出力する。命令選択回路IMUX1は、スレッド選択回路THMUX1出力の有効信号opviq1が1の場合には、スレッド選択回路THMUX1出力opiq1及びその有効信号opviq1を選択する。また、命令選択回路IMUX1は、有効信号opviq1が0の場合には、命令キャッシュIC出力命令opic1及びその有効信号opvic1を選択する。そして、命令選択回路IMUX1は、後行命令opif1及びその有効信号opvif1として出力する。尚、命令選択回路IMUX0及びIMUX1は、本実施形態のように命令フェッチステージIFで命令キャッシュICリードから命令デコーダIDUへ供給する命令の選択までを1サイクルで行う場合に必要な回路である。このため、命令選択回路IMUX0及びIMUX1は、パイプライン段数を増やして常に一旦命令キューIQ0及びIQ1に命令コードを格納する方式にした場合は不要となる。
命令デコーダ入力ラッチOP0は、その出力が命令デコードステージIDで実行可能と判断され発行された場合に、命令選択回路IMUX0出力の先行命令opif0及びその有効信号opvif0を次の命令デコーダ入力としてラッチし、新たな先行命令op0及びその有効情報opv0として出力する。命令デコーダ入力ラッチOP1は、その出力が命令デコードステージIDで実行可能と判断され発行された場合に、命令選択回路IMUX1出力の後行命令opif1及びその有効信号opvif1を次の命令デコーダ入力としてラッチし、新たな後行命令op1及びその有効情報opv1として出力する。
先行命令スレッドラッチTHは、スレッド選択制御回路CTLから出力される先行命令スレッド選択信号thif0を命令デコーダ入力ラッチOP0の更新と同時にラッチし、命令デコードステージIDの先行命令スレッドthid0として出力する。また、発行情報ラッチISは、先行命令スレッドthif0が0であれば、発行情報isifを入力として選択する。また、発行情報ラッチISは、先行命令スレッドthif0が1であれば、スレッド選択制御回路CTLから出力される発行情報isnxtを入力として選択する。そして、発行情報ラッチISは、命令デコーダ入力ラッチOP0の更新と同時にラッチし、命令デコードステージIDの次サイクル発行情報isidとして出力する。
図14には、2ビットの発行情報によるスレッド選択制御論理が例示されている。スレッド選択制御回路CTLは、命令デコードステージIDの先行命令有効情報opv0、先行命令スレッドthid0、及び発行情報isidを入力とし、図14の真理値表に従って、スレッド選択信号thif0及びthif1と発行情報isnxtを生成して出力する。
図14のケース#1は、先行命令有効情報opv0が0かつスレッド選択信号thif0が0の場合である。これは、優先スレッドであるスレッド0の命令が選択されたにもかかわらず有効な命令がない場合に相当し、発行情報isidも有効な情報を保持していない。このため、次のサイクルも優先スレッドであるスレッド0の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1を共に0とする。先行命令スレッド選択信号thif0が0なので、発行情報isnxtは、先行命令スレッドラッチTHの入力として選択されず、生成しても使用しない信号であるので、出力は任意の値でよい。図14では*が任意の値を表す。
ケース#2から#5は、opv0が1で命令が有効であるか、thid0が1で非優先スレッドが選択されている場合である。この条件は、opv0が1で命令が有効かつthid0が0で優先スレッドが選択されている場合と、thid0が1で非優先スレッドが選択されている場合の2つに排他的に分類できる。
前者の場合、発行情報isidとして優先スレッドの先行命令opif0に付加された発行情報isifが選択されている。この場合、図11のエンコーディングに従って、次に優先スレッドが発行スロットを使用するかどうかが分かるので、先行及び後行命令スレッド選択信号thif0及びthif1が図14のように決定される。具体的には、ケース#2では、発行情報isidが00:「次サイクル全発行スロット使用」なので、次のサイクルは優先スレッドであるスレッド0の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1を共に0とする。ケース#3では、発行情報isidが01:「次サイクル後行発行スロット不使用」なので、次のサイクルは先行命令には優先スレッドであるスレッド0の命令が、後行命令には非優先スレッドであるスレッド1の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1をそれぞれ0及び1とする。ケース#4及び#5では、発行情報isidがそれぞれ10:「次サイクル全発行スロット不使用」及び11:「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」なので、次のサイクルは非優先スレッドのスレッド1の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1を共に1とする。
また、ケース#4及びケース#5では、次サイクルに非優先スレッドの命令を選択するので、発行情報isifに有効な情報がない。このため、発行情報isnxtを生成して次サイクルに発行情報isifの代わりに使用する。ケース#4では、次々サイクルは「全発行スロット使用」なので、発行情報isnxtを00とする。ケース#5では、次々サイクルは「後行発行スロット不使用」なので、発行情報isnxtを01とする。他のケースでは次サイクルも発行情報isifに有効な情報が載ってくるのでそちらを使用する。
後者の場合、上記ケース#4及びケース#5で生成した発行情報isnxtが選択されてラッチされ、次サイクル発行情報isidとなっている。その結果、図14のケース#2及びケース#3の状態となり、動作は前者の場合のケース#2及びケース#3と同一である。後者の場合でケース#4及びケース#5となることはない。
以上のスレッド選択制御論理により、スレッド選択制御信号thif0及びthif1が適切に制御され、優先スレッドの使用しない発行スロットが非優先スレッドに割当てられる。
図15には、優先スレッドの空き発行スロットで非優先スレッドの命令を発行しているプロセッサ1の動作が例示される。尚、ここでは、図4の例と同様に、図1に示した第1のプログラムを優先スレッドとして実行している時の空き命令発行スロットを活用して、図3に示した第2のプログラムを非優先スレッドとして実行した場合のループ部の動作例を示している。本実施形態では、初回実行時に発行情報を生成して発行情報バッファISINFに格納し、2回目からは発行情報を活用して、空き発行スロットで非優先スレッドの命令を発行する。最初の6サイクルは初回実行であるので、発行情報は、初期値00で「次サイクル全発行スロット使用」なので、発行スロットは、優先スレッドに割当てられ非優先スレッドの命令は発行できない。
2ループ目では、発行情報が更新されているので以下のように動作する。1サイクル目は、優先スレッドである第1のプログラムの2命令を発行する。そして、1サイクル目の発行情報は01で「次サイクル後行発行スロット不使用」なので、2サイクル目は、先行命令には優先スレッドである第1のプログラムの命令が、後行命令には非優先スレッドである第2のプログラムの命令が選択される。しかし、2命令ともロードストア命令で実行リソースが競合するので、後行の非優先スレッドの命令は発行できない。2サイクル目の発行情報は11で「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」なので、3サイクル目では非優先スレッドである第2のプログラムの命令を選択し、4サイクル目に備えて発行情報を01、即ち「次サイクル後行発行スロット不使用」に変更する。この優先スレッドの3サイクル目が、非優先スレッドの1サイクル目となり、以下2サイクル遅れで非優先スレッドが実行される。
4サイクル目では、3サイクル目の発行情報が01になっているので、1サイクル目同様、先行命令には優先スレッドである第1のプログラムの命令が、後行命令には非優先スレッドである第2のプログラムの命令が選択される。しかし、2命令ともロードストア以外の命令で実行リソースが競合するので、後行の非優先スレッドの命令は発行できない。4サイクル目の発行情報は00で「次サイクル全発行スロット使用」であるので、5サイクル目では、優先スレッドである第1のプログラムの命令を2命令発行する。5サイクル目の発行情報は10で「次サイクル全発行スロット不使用」なので、6サイクル目では非優先スレッドである第2のプログラムの命令を選択し、3ループ目の1サイクル目に備えて発行情報を00即ち「次サイクル全発行スロット使用」に変更する。しかし、2命令ともロードストア以外の命令で実行リソースが競合するので、後行命令は発行できない。
3ループ目の1サイクル目では、2ループ目の6サイクル目の発行情報が00になっているので、2ループ目の1サイクル目と同様、優先スレッドの2命令を選択し発行する。そして、1サイクル目の発行情報は01で「次サイクル後行発行スロット不使用」なので、2サイクル目は先行命令には優先スレッドの命令が、後行命令には非優先スレッドの命令が選択され発行される。ここで、非優先スレッドの1ループ目が6サイクルで完了する。以下、優先スレッドと非優先スレッドが2サイクルずれてそれぞれ1ループ6サイクルで実行される。
以上のように、本実施形態によれば、優先スレッドの空き発行スロットを使って非優先スレッドの命令が発行することが可能となり、2ループ目からはスレッド選択を理想的に行えると仮定した図4と同一の命令発行が可能となっている。そして、図2の例では1であったIPCが約1.7になり、効率を大幅に改善することができる。
《実施形態2》
本発明の実施形態2に係るプロセッサは、上記したプロセッサ1と比べると、発行情報が1ビットとなった点が異なり、パイプライン構造部分及びスレッド選択回路の構成等は、図12及び図13に示したものと同様となる。尚、本実施形態では、発行情報が1ビットであるので、後行スロットのみ空いている場合を活用することはできない。そこで、2つのスレッドの同時発行はしないものとして制御を簡略化している。
図16には、1命令に1ビットの発行情報を付加した例が示される。命令長は、図11に示したものと同様に16ビットとしている。また、発行情報のエンコードは、0:「次サイクル発行スロット使用」、1:「次サイクル発行スロット不使用」とする。
図17には、1ビットの発行情報によるスレッド選択制御論理が例示される。2つのスレッドの同時発行はなく、常に先行及び後行スロットに同一スレッドの命令が発行される。従って、常に先行及び後行命令スレッド選択信号thif0及びthif1の値は同一である。ケース#1は、先行命令有効情報opv0が0かつスレッド選択信号thif0が0の場合である。図14と同様に、次のサイクルも優先スレッドであるスレッド0の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1を共に0とする。
ケース#2及び#3は、opv0が1で命令が有効であるか、thid0が1で非優先スレッドが選択されている場合である。この条件は、opv0が1で命令が有効かつthid0が0で優先スレッドが選択されている場合と、thid0が1で非優先スレッドが選択されている場合の2つに排他的に分類できる。
前者の場合、発行情報isidとして優先スレッドの先行命令opif0に付加された発行情報isifが選択されている。この場合、図16のエンコーディングに従って、次に優先スレッドが発行スロットを使用するかどうかが分かるので、先行及び後行命令スレッド選択信号thif0及びthif1が図17のように決定される。具体的には、ケース#2では、発行情報isidが0で「次サイクル発行スロット使用」なので、次のサイクルは優先スレッドであるスレッド0の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1を共に0とする。ケース#3では、発行情報isidが1で「次サイクル発行スロット不使用」なので、次のサイクルは非優先スレッドであるスレッド1の命令が選択されるように、先行及び後行命令スレッド選択信号thif0及びthif1を共に1とする。
また、ケース#3では、次サイクルに非優先スレッドの命令を選択するので、発行情報isifに有効な情報がない。このため、発行情報isnxtを生成して次サイクルに発行情報isifの代わりに使用する。次々サイクルは発行スロットを使用するので発行情報isnxtは0とする。一方、ケース#2では、次サイクルも発行情報isifに有効な情報が載ってくるのでそちらを使用する。
後者の場合、上記ケース#3で生成した発行情報isnxtが選択されてラッチされ、次サイクル発行情報isidとなっている。その結果、図17のケース#2の状態となり、動作は前者の場合のケース#2と同一である。後者の場合でケース#3となることはない。
以上のスレッド選択制御論理により、スレッド選択制御信号thif0及びthif1が適切に制御され、優先スレッドの使用しない発行スロットがサイクル単位で非優先スレッドに割当てられる。
図18には、優先スレッドの空き発行スロットで非優先スレッドの命令を発行している実施形態2に係るプロセッサの動作が例示される。尚、ここでは、図15の例と同様に、図1に示した第1のプログラムを優先スレッドとして実行している時の空き命令発行スロットを活用して、図3に示した第2のプログラムを非優先スレッドとして実行した場合のループ部の動作例である。本実施形態では、初回実行時に発行情報を生成して発行情報バッファISINFに格納し、2回目からは発行情報を活用して、空き発行スロットで非優先スレッドの命令を発行する。最初の6サイクルは初回実行であるので、発行情報は初期値0で「次サイクル発行スロット使用」なので、発行スロットは、優先スレッドに割当てられ非優先スレッドの命令は発行できない。
2ループ目では発行情報が更新されているので以下のように動作する。1サイクル目は、優先スレッドである第1のプログラムの2命令を発行する。そして、1サイクル目の発行情報は0で「次サイクル発行スロット使用」なので、2サイクル目も優先スレッドの命令が選択される。しかし、レジスタ競合により後行命令は発行できない。2サイクル目の発行情報は1で「次サイクル発行スロット不使用」なので、3サイクル目では非優先スレッドである第2のプログラムの命令を選択し、4サイクル目に備えて発行情報を0、即ち「次サイクル発行スロット使用」に変更する。この優先スレッドの3サイクル目が、非優先スレッドの1サイクル目となり、以下2サイクル遅れで非優先スレッドが実行される。
4サイクル目では、3サイクル目の発行情報が0になっているので、1、2サイクル目と同様に、優先スレッドである第1のプログラムの命令が選択される。しかし、2命令ともロードストア以外の命令で実行リソースが競合するので、後行命令は発行できない。4サイクル目の発行情報は0で「次サイクル発行スロット使用」であるので、5サイクル目も1、2、4サイクル目と同様に、優先スレッドである第1のプログラムの命令を2命令発行する。5サイクル目の発行情報は1で「次サイクル発行スロット不使用」なので、6サイクル目では非優先スレッドである第2のプログラムの命令を選択し、3ループ目の1サイクル目に備えて発行情報を0、即ち「次サイクル発行スロット使用」に変更する。しかし、2命令ともロードストア以外の命令で実行リソースが競合するので、後行命令は発行できない。
3ループ目も2ループ目と同様に、1、2、4、5サイクル目で優先スレッドを選択し、3、6サイクル目で非優先スレッドを選択する。優先スレッドの動作は2ループ目と同一である。非優先スレッドは、1ループ目が終了していないので、7サイクル目の処理を優先スレッドの3サイクル目で行う。この時、後行発行スロットには非分岐側のループを抜けた場合の命令「mov r3,@r1」が入るが、ループを抜けていないので発行はキャンセルされる。その後、非優先スレッドは、優先スレッドの6サイクル目で2ループ目に入る。
その結果、優先スレッドは1ループ6サイクルで、非優先スレッドは1ループ9サイクルで実行される。従って、発行情報が有効でない優先スレッドの1ループ目を除くと、18サイクルで優先スレッド3回、非優先スレッド2回の実行が可能となっている。優先スレッドのみの実行では18サイクルで18命令であるので、IPCは1であったが、本実施形態によれば、更に非優先スレッドの命令を8命令実行するのでIPCが約1.4になり、効率を大幅に改善することができる。
《実施形態3》
本発明の実施形態3に係るプロセッサは、上記したプロセッサ1と比べると、図13に示した命令デコーダIDUのラッチ部分の構成等が異なる。図19には、命令デコーダIDUの一部の構成が例示されている。図19の入力信号opif0、opvif0、isif、opif1及びopvif1と、出力信号thif0及びthif1とは、図13の信号と同一である。図13では、入力信号opif0、opvif0、opif1及びopvif1を、命令デコーダ入力ラッチOP0及びOP1で単純にラッチしていた。これに対して、本実施形態では、先行命令opif0及び先行命令有効信号opvif0を、2つの命令デコーダ入力ラッチOP0CTL及びOP0ISにラッチする。同様に、後行命令opif1及び後行命令有効信号opvif1を2つの命令デコーダ入力ラッチOP1CTL及びOP1ISにラッチする。
入力ラッチOP0ISの更新は、発行可否判定回路活性化信号isac0によって行う。発行情報が有効で優先スレッドが発行可能な場合は、活性化信号isac0を0として、入力ラッチOP0ISを更新せずに、活性化信号isac0をラッチして、ラッチした信号で発行可否判定回路IS0の出力を強制的に発行可能とし、発行信号issue0として出力する。他の場合は、活性化信号isac0を1として発行可否判定回路IS0を活性化し、その出力を発行信号issue0として出力する。ここで、発行情報が有効で優先スレッドが発行不可能な場合も、優先スレッドが選択されていれば、発行可否判定回路IS0を使用しなくても発行不可能であることが判明するが、優先スレッドが発行不可能な場合は、通常非優先スレッドが選択されているので、発行可否判定回路IS0による判定が必要である。
入力ラッチOP0CTLの出力に接続されている実行制御情報生成回路CTL0及びオペランドフォワーディング情報生成回路FWD0は、発行可否が発行情報によって予め判明している場合でも、実行制御情報exectl0及びフォワーディング情報fwdctl0を出力して、オペランド供給及び命令実行を制御する。従って、これらの生成回路の入力信号である入力ラッチOP1CTLの出力は、活性化信号isac0が0であっても更新する。以上が先行命令用の回路の説明であるが、後行命令用の回路も同様に動作する。
図20には、図19に示すスレッド選択回路CTLのスレッド選択制御論理が例示される。このスレッド選択制御論理は、図14と類似しているが、発行情報isidのエンコーディングのうち11を「発行情報無効」に割当てている点が異なる。即ち、図14及び図17に示すスレッド選択制御論理では、発行情報が無効な場合は優先スレッドが実行できる可能性があるので「次サイクル全発行スロット使用」として優先スレッドを選択し、発行可否判定回路は常に使用する。一方、本実施形態では「発行情報無効」の場合は、発行可否判定回路IS0及びIS1を活性化して発行可否判定を行い、発行情報が有効で「次サイクル全発行スロット使用」の場合は発行可能であることが判明しているので、発行可否判定回路IS0及びIS1は使用しない。従って、これらを区別する必要があるので、図11のエンコーディングのうち11を「発行情報無効」に割当てている。
その結果、図11の11:「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」という場合を記憶することができず、代わりに10:「次サイクル全発行スロット不使用」を使用することになる。この違いを図15の動作例に当てはめると、優先スレッドのループの2サイクル目に11:「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」という場合があり、これが10:「次サイクル全発行スロット不使用」となる。その結果、ループの4サイクル目の後行スロットが空いていることが分からず、4サイクル目の後行スロットに優先スレッドの命令が選択されてしまう。しかし、図15の動作例ではここで非優先スレッドの命令が選択されてもリソース競合により実行できないので、性能は劣化しない。そして、このエンコーディングの変更による性能劣化は、他の場合も比較的小さいと考えられる。
さて、図20のスレッド選択制御論理のケース#1から#4の出力信号thif0、thif1及びisnxtは、図14と同一であるが、図14にはない出力信号として発行可否判定回路活性化信号isac0及びisac1がある。これらの信号は、発行情報が有効なケース#2から#4では、それぞれスレッド選択信号thif0及びthif1と同じ値である。これは、優先スレッドを選択すると、発行可否判定回路IS0及びIS1を活性化させないためである。一方、ケース#1では、発行情報が無効であるので、活性化信号isac0及びisac1を1にして、発行可否判定回路IS0及びIS1を活性化させる。また、ケース#5も発行情報が無効であるので、全ての出力信号がケース#1と同一である。
以上のように、本実施形態によれば、発行情報が有効な場合は、発行可否判定をしなくても優先スレッドの発行可否が判明するから、発行情報が有効な場合は、発行可否判定回路IS0及びIS1の動作を抑止することができる。従って、近年、スーパースカラ化やスーパーパイプライン化により、リソース競合やオペランド競合の要因が増大し、それを検出して発行可否を判定する回路も肥大化しているので、発行可否判定回路IS0及びIS1の動作を抑止することで、消費電力を低減できる。この発行可否判定回路IS0及びIS1の動作を抑止するには、例えば、命令デコーダIDUのラッチ部分に供給されているクロック、即ち、フリップフロップに不図示のクロックドライバーから供給されるクロックを停止すればよい。このような、消費電力を低減する技術は、携帯機器からサーバーシステム、スーパーコンピュータに至るまで、全ての機器のプロセッサにとって有効な技術となる。
《実施形態4》
本発明の実施形態4に係るプロセッサは、上記したプロセッサ1と比べると、32ビット命令のうち3ビットを発行情報にしている点が異なる。即ち、この発行情報は、命令に付加されているのではなく、命令コード内に入れられている。図21には、命令コード内に3ビットの発行情報を付加した例が示される。同図に示される命令コードの命令長に特に制限はないが、本実施形態では32ビットとしている。また、発行情報のエンコードは、不使用発行スロットが000:「なし」、001:「1サイクル後の後行」、010:「1サイクル後」、011:「1サイクル後と2サイクル後の後行」とする。また、100:「1,2サイクル後」、101:「1,2サイクル後と3サイクル後の後行」、110:「1,2,3サイクル後」、111:「1,2,3サイクル後と4サイクル後の後行」とする。従って、最大3.5サイクル、7発行スロットの空きまで発行情報として保持することができる。
本実施形態では、命令コード内に発行情報が入っているので、実施形態1、2のパイプライン構造部分に含まれる図12に示した発行情報バッファISINFは不要となる。従って、パイプライン構造部分は、図5に示す一般的な構成となり、スレッド選択回路の構成は、実施形態1、2の図13に示したものと同様となる。
図22には、3ビットの発行情報によるスレッド選択制御論理が例示される。スレッド選択制御回路CTLは、発行情報が図21のように3ビットでエンコードされているので、図22のように9通りの制御になる。ケース#1は、実施形態1、2のケース#1と同様に発行情報が無効なので、次サイクルも優先スレッドを選択するために、スレッド選択信号thif0及びthif1を0とする。そして、発行情報isnxtは任意の値*でよい。ここで、残りの発行情報が有効な8通りのうち、最も不使用発行スロットが多い111:「1,2,3サイクル後と4サイクル後の後行発行スロット」が不使用の場合であるケース#9を説明する。1サイクル後の発行スロットは不使用なので、スレッド選択信号thif0及びthif1を1とする。そして1サイクル後には、不使用発行スロットが1サイクル分減って、101:「1,2サイクル後と3サイクル後の後行発行スロットが不使用」の場合になるので、発行情報isnxtを101とする。ケース#4から#8も同様に、スレッド選択信号thif0及びthif1を1とし、発行情報isnxtを不使用発行スロットが1サイクル分減った場合のコードにする。また、ケース#2及び#3の動作は、発行情報が2ビットの場合の図14のケース#2及び#3と同一である。
以上のように、本実施形態によれば、実施形態1、2ではハードウェアである命令デコーダIDUで生成していた発行情報を、命令コード生成時にコンパイラ等のソフトウェアで生成して予め埋め込むことができる。さらに、実施形態1、2では、2回目の実行時から有効に機能した発行情報を1回目から活用することができる。このため、本実施形態は、ループ構造が少なかったり、ループ回数が少なかったりして、2回目以降の実行の割合が少ない場合に特に有効となる。また、発行情報を3ビットにして、図21のようにエンコードしているので、命令発行間隔が開いた場合にも、空き発行スロットを有効に使用することができる。このため、本実施形態は、並列性が低かったり、メモリアクセス等によるデータ待ちが多かったりする場合に特に有効となる。
《実施形態5》
本発明の実施形態5に係るプロセッサは、上記したプロセッサ1と比べると、優先スレッドの即時実行開始を保証するために、実行しているスレッドより優先度の高いスレッドがくる可能性のあるときは、マルチスレッドの1つを使用せずにホットスタンバイ状態にしておく点が異なる。本実施形態に係るプロセッサは、実施形態1から4と同様に、優先スレッドと非優先スレッドの2スレッドの発行が可能なマルチスレッドプロセッサである。図23には、実施形態5に係るプロセッサによるホットスタンバイ動作が例示されている。この動作例では、図3に示す第2のプログラムを非優先スレッドとして実行中に、ループ部の1サイクル目で先頭2命令を実行した後に、優先スレッドとして図1に示す第1のプログラムの実行を開始している。更に、このプロセッサでは、実施形態4のように1回目の実行時から発行情報を活用できるものとする。このプロセッサでは、非優先スレッドのみを実行し、優先スレッド実行用のハードウェアを使用していないので、優先スレッドは即時実行開始可能である。
具体的には、優先スレッドのプログラムは、初期化ルーチンを4サイクル実行し、ループ部を1ループ当り6サイクルで実行していく。優先スレッド実行中は、発行情報によって不使用スロットで非優先スレッドの命令を実行できる。また、この動作例では、不使用スロットを使って非優先スレッドの終了処理を開始する。例えば、優先スレッドのループ部の2、3、及び6サイクル目は、ロードストアリソース競合により後行スロットの発行はできないが、初期化ルーチンの2、3、及び4サイクル目と、ループ部の1、4、及び5サイクル目を使って、非優先スレッドの終了処理であるレジスタの退避を進めることができる。
以上のように、本実施形態によれば、実行中の非優先スレッドより優先度の高いスレッドがくる可能性のあるときは、非優先スレッドの実行を終了して、再びホットスタンバイ状態にすることにより、優先度の高いスレッドの即時実行開始を保証することができる。また、実行を開始した優先スレッドより優先度の高いスレッドがくる可能性のあるときは、優先スレッドで実行を開始したプログラムを非優先スレッドで実行するように切替えることにより、より優先度の高いスレッドの即時実行開始を保証することができる。
《制御系システム》
図24には、上記した各実施形態に係るプロセッサを用いた制御系システムが例示されている。同図に示される制御システムは、特に限定されないが、自動車の制御及び情報処理を行う車載システム等を想定している。この制御系システムでは、ネットワークNWを介して2つの電子制御装置ECU0及びECU1が接続されている。電子制御装置ECU0は、各実施形態に係るプロセッサCPU0と、メモリMEM0とを備えている。メモリMEM0には、主にプロセッサCPU0で実行されるプログラムPG0及びPG2が格納されている。一方、電子制御装置ECU1は、各実施形態に係るプロセッサCPU1と、メモリMEM1とを備えている。メモリMEM1には、主にプロセッサCPU1で実行されるプログラムPG1及びPG2が格納されている。プログラムPG2は、本来は電子制御装置ECU0で実行すべきプログラムであるが、2つの電子制御装置ECU0及びECU1の双方に格納されており、実行優先度はプログラムPG0及びPG1より低いものとする。
電子制御装置ECU0において、プロセッサCPU0により、優先度の高いプログラムPG0を優先スレッドで、優先度の低いプログラムPG2を非優先スレッドで実行すれば、プログラムPG0の実行時間を保証しつつ、プログラムPG2の実行も進めることが可能である。しかし、場合によっては、プログラムPG0が並列度の高いプログラムであり、実行中は余剰能力がなく、一方で、電子制御装置ECU1で実行中のプログラムPG1の方は並列度が低いプログラムであり、余剰能力が多いという状況も考えられる。
このような場合に、本来の処理担当である電子制御装置ECU0が、ネットワークNW経由で余剰能力の多い電子制御装置ECU1に処理を依頼すれば、プログラムPG2をより速く実行することができる。このため、この制御システムでは、優先度の高いプログラムPG1の実行時間を保証しつつ、プログラムPG2の実行も進めることができる。その結果、2つの電子制御装置ECU0及びECU1の間で、余剰能力を供給することになり、負荷の効率的分散が可能となる。
以上のように、この制御系システムによれば、応答時間を保証しつつ、他の電子制御装置からの処理依頼を受付けることができるから、スループットを向上させることができる。特に、車載システムでは、エンジン制御、ブレーキ制御等を行う各種電子制御装置やカーインフォメーションシステムは車内ネットワークで接続されているので、電子制御装置の余剰能力を他の電子制御装置やカーインフォメーションシステムに提供することにより、システム全体の性能を向上させることができる。
以上、本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、実施形態5に係るプロセッサでは、実行しているスレッドより優先度の高いスレッドを受付ける可能性がある場合に、ホットスタンバイ状態にするようにしたが、ここでは、所定の割込み制御により優先度を判定して、より優先度の高いスレッドの即時実行開始を保証するようにしてもよい。
また、図24に示した制御システムでは、状況に応じてどちらの電子制御装置でもプログラムPG2を実行可能なように、予め双方のメモリMEM0及びMEM1に格納しているが、これに限られない。即ち、プログラム転送時間が問題にならず、逆にプログラムを格納するメモリ容量が問題となるような場合には、処理を依頼するときにプログラムを、処理依頼を受付ける側の電子制御装置に転送するようにしてもよい。これは、電子制御装置が処理能力に応じたメモリ容量を有しているのが一般的であり、使用しないプログラムを格納しておく余裕がない場合であっても、使用時にはプログラムを格納するスペースを確保できるからである。
1 プロセッサ(CPU)
2 CPUコア
3 内部バス(BUS)
4 パイプライン構造部分
5 BIS
6,7 機能モジュール(IP)
8 EMI
9 MEM
10 スレッド選択回路
IFU 命令フェッチユニット
PC0,PC1 プログラムカウンタ
IC 命令キャッシュ
ISINF 発行情報バッファ
IQ0,IQ1 命令キュー
THMUX スレッド選択回路
IMUX 命令選択回路
IDU 命令デコーダ
RF0,RF1 レジスタファイル
RMUX レジスタスレッド選択回路
FWD フォワーディング回路
EXU 実行ユニット
DC データキャッシュ
CTL スレッド選択制御回路

Claims (1)

  1. プロセッサ状態の退避回復を伴わずに、N(Nは2以上の整数)スレッドを同時又は時分割に実行するプロセッサであって、
    前記スレッドは、優先度を有し、
    N−1以下のスレッドを実行することによりホットスタンバイ状態を形成し、実行中の前記スレッドより優先度の高いスレッドを受付けた場合には、前記ホットスタンバイ状態を利用して、前記スレッドより優先度の低いスレッドの終了処理を開始、又は、前記スレッドを優先度の低いスレッドとして実行するプロセッサ。
JP2010270035A 2010-12-03 2010-12-03 プロセッサ Withdrawn JP2011070695A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010270035A JP2011070695A (ja) 2010-12-03 2010-12-03 プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010270035A JP2011070695A (ja) 2010-12-03 2010-12-03 プロセッサ

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2005300121A Division JP2007109057A (ja) 2005-10-14 2005-10-14 プロセッサ

Publications (1)

Publication Number Publication Date
JP2011070695A true JP2011070695A (ja) 2011-04-07

Family

ID=44015834

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010270035A Withdrawn JP2011070695A (ja) 2010-12-03 2010-12-03 プロセッサ

Country Status (1)

Country Link
JP (1) JP2011070695A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020107306A (ja) * 2018-12-27 2020-07-09 グラフコアー リミテッドGraphcore Limited マルチスレッドプロセッサの命令キャッシュ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020107306A (ja) * 2018-12-27 2020-07-09 グラフコアー リミテッドGraphcore Limited マルチスレッドプロセッサの命令キャッシュ
US11567768B2 (en) 2018-12-27 2023-01-31 Graphcore Limited Repeat instruction for loading and/or executing code in a claimable repeat cache a specified number of times

Similar Documents

Publication Publication Date Title
US6542921B1 (en) Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US7051329B1 (en) Method and apparatus for managing resources in a multithreaded processor
JP3573943B2 (ja) マルチスレッド・プロセッサによる実行のために命令をディスパッチする装置
US7600135B2 (en) Apparatus and method for software specified power management performance using low power virtual threads
US20080046689A1 (en) Method and apparatus for cooperative multithreading
US20040172631A1 (en) Concurrent-multitasking processor
US20060236136A1 (en) Apparatus and method for automatic low power mode invocation in a multi-threaded processor
WO2011155097A1 (ja) 命令発行制御装置及び方法
JP5209933B2 (ja) データ処理装置
JP2005284749A (ja) 並列処理コンピュータ
JP2010522920A (ja) パイプラインプロセッサにおける長い待ち時間命令の処理
JP5861354B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP4086808B2 (ja) マルチスレッド・プロセッサにおいて処理する命令スレッドを選択するための方法および装置
JP2004171573A (ja) 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ
JP2007109057A (ja) プロセッサ
US7490223B2 (en) Dynamic resource allocation among master processors that require service from a coprocessor
JP4985452B2 (ja) ベクトル処理装置
JP2011170619A (ja) マルチスレッド処理装置
US7328327B2 (en) Technique for reducing traffic in an instruction fetch unit of a chip multiprocessor
JP2011070695A (ja) プロセッサ
CN117501254A (zh) 使用近存储器计算为复杂操作提供原子性
WO2002046887A2 (en) Concurrent-multitasking processor
US10503541B2 (en) System and method for handling dependencies in dynamic thread spawning for a multi-threading processor
JP7032647B2 (ja) 演算処理装置及び演算処理装置の制御方法
WO2015035339A1 (en) System and method for an asynchronous processor with heterogeneous processors

Legal Events

Date Code Title Description
A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20120801