JP2021163453A - 待ち時間シフタを備えたプロセッサおよびそれを用いた制御方法 - Google Patents
待ち時間シフタを備えたプロセッサおよびそれを用いた制御方法 Download PDFInfo
- Publication number
- JP2021163453A JP2021163453A JP2020204775A JP2020204775A JP2021163453A JP 2021163453 A JP2021163453 A JP 2021163453A JP 2020204775 A JP2020204775 A JP 2020204775A JP 2020204775 A JP2020204775 A JP 2020204775A JP 2021163453 A JP2021163453 A JP 2021163453A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- shifter
- write
- waiting time
- clock cycle
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 19
- 239000000872 buffer Substances 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 7
- 230000005540 biological transmission Effects 0.000 claims description 2
- 230000006870 function Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000005352 clarification Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000005574 cross-species transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30141—Implementation provisions of register files, e.g. ports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
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)
- Executing Machine-Instructions (AREA)
Abstract
【課題】命令パイプラインのライトバックステージにおいて、複数の命令によるレジスタファイル書き戻し競合を回避するように命令発行を制御する方法を提供する。【解決手段】プロセッサ100において、待ち時間シフタ130は、複数のシフタエントリを含み、クロックサイクル毎にシフタエントリをシフトアウトする。シフタエントリのそれぞれは関連付けられたクロックサイクルにおける書き戻し動作に対するレジスタファイル140の書き込みポートの可用性を示す書き戻し値を含む。デコードユニット120は、命令をデコードし、待ち時間シフタ書き戻し値に従って命令を発令する。機能ユニット160は、デコードユニットおよびレジスタファイルに結合され、デコードユニットによって発令された命令を実行し、レジスタファイルの書き込みポートへの書き戻し動作を行う。【選択図】図2
Description
本開示は、一般にプロセッサアーキテクチャに関し、より具体的には、待ち時間シフタを含むプロセッサ、およびプロセッサの命令パイプラインを制御する方法に関する。
プロセッサのパフォーマンスを向上させるための手法の1つは、命令を実行するために命令パイプラインを使用することである。命令パイプラインでの命令の実行は、書き戻し段階を含むいくつかの段階に分解される。書き戻し段階では、レジスタファイルの書き込みポートを介して結果データをレジスタファイルに書き込む書き戻し動作が実行される。レジスタファイルの書き込みポートの数は限られているため、複数の命令が、同じクロックサイクルで使用可能な書き込みポートの数よりも多くの書き込みポートをレジスタファイルへの書き戻しに必要とする場合、競合が発生する可能性がある。書き込みポートの使用の競合により、命令パイプラインでの命令の停止または連結が発生し、それによりプロセッサの性能が低下する。さらに、書き戻し段階はパイプライン実行の最後の段階であることが多く、書き戻しの競合による命令の停止は、すべての実行パイプラインの段階に大きな波及効果をもたらします。さらに、命令パイプラインは非常に複雑な制御ロジックを有し、プロセッサの複数の場所や構成要素からの情報を必要とする。
プロセッサの性能を向上させるための要望として、命令の停止および連結を効率的に防止し得るプロセッサおよび制御方法の必要性が高まっている。
命令パイプラインの命令の実行では、複数の命令が、同じクロックサイクルで使用可能な書き込みポートの数よりも多くの書き込みポートをレジスタファイルへの書き戻しに必要とする場合、競合が発生する可能性がある。書き込みポートの使用の競合により、命令パイプラインでの命令の停止または連結が発生し、それによりプロセッサの性能が低下する。
本開示の実施形態の1つでは、マイクロプロセッサは、レジスタファイル、待ち時間シフタ、デコードユニット、および機能ユニットを含む。レジスタは書き込みポートを含む。待ち時間シフタは、複数のシフタエントリを含み、複数のシフタエントリのうちの一つのシフタエントリをクロックサイクルごとにシフトアウトするように構成され、複数のシフタエントリのそれぞれはクロックサイクルに関連付けられ、複数のシフタエントリのそれぞれはクロックサイクルにおける書き戻し動作に対するレジスタファイルの書き込みポートの可用性を示す書き戻し値を含む。デコードユニットは、待ち時間シフタに結合され、命令をデコードし、待ち時間シフタの複数のシフタエントリに含まれる書き戻し値に基づいて命令を発令するように構成される。また、機能ユニットは、デコードユニットおよびレジスタファイルに結合され、デコードユニットによって発令された命令を実行し、レジスタファイルの書き込みポートへの書き戻し動作を行うように構成される。
実施形態の1つでは、マイクロプロセッサのレジスタファイルの書き込みポートをスケジュールする方法は、少なくとも以下のステップを含む。第1のクロックサイクルは、発令される命令の実行待ち時間に基づいて決定される。第1のクロックサイクルにおける書き込みポートの可用性は、待ち時間シフタの書き戻し値に基づいて決定され、書き戻し値は、待ち時間シフタの複数のシフタエントリのうちの1つのシフタエントリに含まれ、複数のシフタエントリは、クロックサイクルごとにシフトアウトされる。待ち時間シフタの書き戻し値が、第1のクロックサイクルで書き込みポートが使用可能であることを示すときに、命令はデコードされて発令される。待ち時間シフタの書き戻し値が、第1のクロックサイクルで書き込みポートが使用不可であることを示すときに、命令は停止される。
本開示は、レジスタファイルの使用可能な書き込みポートへの潜在的な書き戻し競合を防ぐために、待ち時間シフタに基づいて実行パイプラインでの命令の発令を効果的にスケジュールする。命令の発令と実行に必要な全ての情報が待ち時間シフタで見つかり得るため、パイプライン実行機構が簡素化され、集中化され、プロセッサの消費電力が削減される。さらに、待ち時間シフタが回転バッファとともに実装されている場合、プロセッサの消費電力をさらに削減できる。
本開示の態様は、添付の図面を参照しつつ以下の詳細な説明を読むことで最もよく理解される。業界の標準的な慣行に従って、様々な特徴が一定の比率で描かれていないことに留意されたい。実際、様々な特徴の寸法は、説明を明確にするために、任意に拡大または縮小されている場合がある。
以下の開示は、本開示の異なる特徴を実装するための多くの異なる実施形態または例を提供する。本開示を簡略化するために、構成要素および配置の特定の例を以下に説明する。もちろん、これらは単なる例であり、限定を意図するものではない。例えば、以下の説明における第2の特徴の上または表面への第1の特徴の形成は、第1および第2の特徴が直接接触して形成される実施形態を含み得、さらに、第1および第2の特徴が直接接触し得ないように追加の特徴が第1および第2の特徴の間に形成され得る実施形態を含み得る。さらに、本開示は、様々な例において符号および/または文字を繰り返す場合がある。この繰り返しは、簡略化および明確化を目的としており、それ自体は、説明されている様々な実施形態および/または構成の間の関係を規定するものではない。
さらに、「の下に」、「より下に」、「低い」、「より上に」、「高い」などの空間的に相対的な用語は、1つの要素または特徴の、図示されている他の要素または特徴に対する関係を説明する記載を容易にするために本明細書で使用され得る。空間的に相対的な用語は、図示されている向きに加え、使用中または動作中の装置のさまざまな向きを包含することを意図している。装置は他の方法で配向されてもよく(90度または他の向きで回転)、本明細書で使用される空間的に相対的な記述子はそれに応じて同様に解釈されてもよい。
図1は、いくつかの実施形態に係る、プロセッサ100、メモリ200、入出力(I/O)インターフェース300、周辺機器400、およびバス500を含むコンピュータ処理システム10を示す。バス500は、コンピュータ処理システム10の構成要素間の双方向通信を可能にすることができる。本開示のいくつかの実施形態は、図1に示されているものよりも多い、少ない、または異なる構成要素を使用しても良い。一例として、コンピュータ処理システム10は、タイマ、シリアル周辺インターフェース、デジタル−アナログ変換器、アナログ−デジタル変換器、ディスプレイドライバ、複数種のメモリ、および他の任意の適切な構成要素をさらに含み得る。
いくつかの実施形態では、プロセッサ100は、命令パイプラインを使用して命令を実行するように構成され、命令の実行は、命令フェッチ段階、命令デコード段階、命令実行段階およびライトバック段階などのいくつかの段階に分解される。プロセッサ100は、比較的高いアクセス速度を有するデータキャッシュおよび命令キャッシュなどのキャッシュを含み得る。プロセッサ100のデータキャッシュは、L1データキャッシュ、L2データキャッシュ、およびL3データキャッシュを含み得るマルチレベルデータキャッシュであり得る。L1データキャッシュ、L2データキャッシュおよびL3データキャッシュは、プロセッサ100の内部または外部に配置され得る。いくつかの実施形態では、コンピュータ処理システム10は複数のプロセッサを含み、任意の数のプロセッサは、プロセッサ100と同じであっても、異なっていてもよい。
メモリ200は、命令のプログラムコードおよび命令の実行に必要なデータを格納するように構成される。メモリ200は、不揮発性メモリまたは揮発性メモリまたはそれらの組み合わせを含み得る。例えば、メモリ200は、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、読み取り専用メモリ(ROM)、プログラム可能な読み取り専用メモリ(PROM)、電気的にプログラム可能な読み取り専用メモリ(EPROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM)、フラッシュメモリの少なくとも一つを含み得る。
I/Oインターフェース300は、バス500を介して入力装置および出力装置をコンピュータシステム10に結合するように構成される。コンピュータシステム10は、入力装置からデータを受信し、I/Oインターフェース300を介して出力装置にデータを送信することができる。I/Oインターフェース300は、有線または無線接続でのシリアル接続インターフェースおよびパラレル接続インターフェースのうちの少なくとも1つを含み得る。周辺機器400は、キーボード、マウス、センサ、信号受信機、モニタおよび他の任意の適切な装置を含み得る。
図2は、いくつかの実施形態に係るプロセッサ100を示すブロック図である。プロセッサ100は、命令ユニット110、発令/デコードユニット120、待ち時間シフタ130、レジスタファイル140、実行キュー150および機能ユニットモジュール160を含み得る。命令ユニット110は、プロセッサ100による実行のための命令111を提供するように構成される。命令111は、プロセッサ100のアーキテクチャに応じて、スカラ命令またはベクトル命令であり得る。いくつかの実施形態では、命令111は、汎用命令、長待ち時間命令、または未知待ち時間命令であり得る。汎用命令は、既知の実行待ち時間を有する命令を指し得、既知の実行待ち時間は閾値よりも短い。長待ち時間命令は、既知の実行待ち時間を有する命令を指し得、既知の実行待ち時間は閾値よりも長い。例えば、長待ち時間命令は、浮動小数点除算命令、浮動小数点平方根命令、浮動小数点加算減算命令、および整数除算命令であり得る。未知待ち時間命令は、ロード命令などの未知実行待ち時間を有する命令を指し得る。
レジスタファイル140は、レジスタファイル140のデータを格納するように構成された複数のレジスタREG_1〜REG_Mを含み得る。レジスタREG_1〜REG_Mは、発令された命令の実行に使用されるオペランド、および/または発令された命令の書き戻し動作を通じてレジスタファイル140に書き込まれた結果データを格納することができる。レジスタREG_1〜REG_Nの数は、プロセッサ100のアーキテクチャに従って変化し得る。いくつかの実施形態では、レジスタファイル140は、少なくとも1つの書き込みポートWR_P1〜WR_PKをさらに含み、結果データは、少なくとも1つの書き込みポートWR_P1からWR_PKを介してレジスタファイル140に書き込まれる。いくつかの実施形態では、レジスタファイル140は、レジスタファイル140に格納されたデータを読み取るための少なくとも1つの読み取りポート(不図示)をさらに含み得る。
待ち時間シフタ130は、信号131を介してレジスタファイル140と通信することができる。待ち時間シフタ130は、クロックサイクルごとにシフトされる複数のシフタエントリを含むことができる。待ち時間シフタ130の各シフタエントリは、クロックサイクル(例えば、x番目のクロックサイクル、ここで、xは正の整数)に関連付けられ、各シフタエントリは、クロックサイクルにおけるレジスタファイル140の書き込みポートの可用性を示す書き戻し値(例えば、wb_shift[x])を含む。書き戻し値wb_shift[x]は、「1」の論理値と「0」の論理値のいずれかを示すマルチビット値またはシングルビット値であり得る。例えば、書き戻し値wb_shift[x]が論理値「1」の場合、x番目のクロックサイクルで書き込みポートが書き戻し動作に使用不可であることを示す。つまり、x番目のクロックサイクルで書き込みポートに行われる別の書き戻し動作がある。代わりに、書き戻し値wb_shift[x]が論理値「0」の場合、x番目のクロックサイクルで書き込みポートが書き戻し動作に使用可能であることを示す。いくつかの実施形態では、待ち時間シフタ130の書き戻し値は、プロセッサ100により実行される命令の発令時に設定される。
発令/デコードユニット120は、命令ユニット110および待ち時間シフタ130に結合され、待ち時間シフタ130のシフタエントリに格納された書き戻し値に基づいて命令111をデコードおよび発令するように構成される。いくつかの実施形態では、命令111が発令/デコードユニット120に提供されると、発令/デコードユニット120は、命令111の実行待ち時間を決定することができる。命令111の実行待ち時間は、命令111を実行するために必要とされるクロックサイクルの数であり得る。いくつかの実施形態では、xクロックサイクルの実行待ち時間を有する命令111は、x番目のクロックサイクルで書き戻し動作を有する。いくつかの実施形態では、発令/デコードユニット120は、待ち時間シフタ130の書き戻し値wb_shift[x]に基づいて、xクロックサイクルの実行待ち時間を有する命令111を停止または発令するかどうかを決定するように構成される。書き戻し値wb_shift[x]が「0」の場合、発令/デコードユニット120は、命令111を実行キュー150にデコードおよび発令する。命令111が発令されると、待ち時間シフタ130の書き戻し値wb_shift[x]が「1」に設定される。待ち時間シフタ130の書き戻し値wb_shift[x]が「1」である場合、発令/デコードユニット120は命令111の発令を停止し、次のクロックサイクルまたは(x+1)番目のクロックサイクルにおける書き込みポートの可用性を確認する。発令/デコードユニット120は、信号121を介して待ち時間シフタ130と通信する。
いくつかの実施形態では、実行キュー150は、発令/デコードユニット120に結合され、発令された命令をキューに配置するように構成される。実行キュー150は、発令された命令151を実行するために機能ユニットモジュール160に提供し得る。
機能ユニットモジュール160は、実行キュー150によって提供される発令された命令を実行するように構成された複数の機能ユニットFUNIT_A、FUNIT_BおよびFUNIT_Cを含み得る。いくつかの実施形態では、機能ユニットモジュール160は、演算論理回路(ALU)、アドレス生成ユニット(AGU)、浮動小数点ユニット(FPU)、ロードストアユニット(LSU)、分岐実行ユニット(BEU)、および他の適切な機能ユニットを含み得る。いくつかの実施形態では、マイクロプロセッサ100の機能ユニットによって実行される命令151は、レジスタファイル140に格納される一組のオペランドに関連づけられ得る。プロセッサ100の機能ユニットは、レジスタファイル140の利用可能な読み取りポートを介してレジスタファイル140にアクセスして、命令151の実行のために一組のオペランドを取得することができる。機能ユニットモジュール160によって出力された結果データ161は、レジスタファイル140の利用可能な書き込みポートを介した書き戻し動作でレジスタファイル140に書き込まれ得る。いくつかの実施形態では、機能ユニットモジュールの結果データ161は、プロセッサ100の性能を改善するために、命令パイプライン内の他の命令のために転送されてもよい。
いくつかの実施形態では、プロセッサ100は、カウンタ170およびデータキャッシュ180をさらに含み、カウンタ170は、信号171を介して待ち時間シフタ130と通信し得る。データキャッシュ180は、機能ユニットモジュール160のロード/格納機能ユニット(不図示)と通信し得る。カウンタ170は、カウンタ値ex_cnt[x]を有することができ、カウンタ170は、カウンタ値ex_cnt[x]が閾値に達するまで、クロックサイクルごとにカウンタ値ex_cnt[x]をカウントダウンするように構成される。いくつかの実施形態では、閾値は、待ち時間シフタ130内のシフタエントリの総数に従って決定される。いくつかの実施形態では、カウンタ170および待ち時間シフタ130は、発令/デコードユニット120が浮動小数点命令、平方根命令、浮動小数点加算減算命令、または整数除算命令などの長待ち時間命令を発令するのを支援するために使用され得る。
データキャッシュ180は、L1データキャッシュ、L2データキャッシュおよびL3データキャッシュなどの異なるキャッシュレベルを含み得、L1データキャッシュ、L2データキャッシュおよびL3データキャッシュのアクセス速度は異なる。L1データキャッシュのアクセス速度はL2データキャッシュのアクセス速度よりも速く、L2データキャッシュのアクセス速度はL3データキャッシュのアクセス速度よりも速い。いくつかの実施形態では、L1データキャッシュ、L2データキャッシュおよびL3データキャッシュの全ては、プロセッサ100の内部に配置される。他の実施形態では、L1データキャッシュはプロセッサ100の内部に配置され、L2データキャッシュおよびL3データキャッシュはプロセッサ100の外部に配置される。いくつかの実施形態では、要求受付プロトコルは、データキャッシュ180と待ち時間シフタ130の間に実装され得る。さらに、要求受付プロトコルは、外部メモリ(たとえば、図1のメモリ200)と待ち時間シフタ130の間でも実装され得る。要求受付プロトコルは、ロード命令などの未知待ち時間命令の発令を支援するために使用し得る。データキャッシュのヒット/ミスとデータバンクの競合の性質として、ロード命令の実行待ち時間は未知である。例えば、ロード命令の実行は、ロードデータの実行に必要なデータが、L2キャッシュデータまたはL3キャッシュデータではなくL1キャッシュデータにある場合、はるかに短くなる。外部メモリでデータが見つかった場合、ロード命令の実行待ち時間は長く、未知となる。
いくつかの実施形態では、レジスタファイル140の書き込みポートWR_P1〜WR_PKは、複数の共有書き込みポートおよび専用書き込みポートを含み、共有書き込みポートは全ての機能ユニットのため共有され、専用書き込みポートはロード命令などの未知待ち時間命令のために構成される。いくつかの実施形態では、プロセッサ内の待ち時間シフタ130の数は、レジスタファイル140内の共有書き込みポートの数に等しく、書き込みポートのそれぞれは待ち時間シフタの1つに関連付けられる。
図3Aは、いくつかの実施形態に係る、待ち時間シフタ330aを示す。待ち時間シフタ330aは、クロックサイクルごとに方向D1にシフトするよう構成された複数のシフタエントリE[0]〜E[N]を含み得る。シフタエントリE[0]はボトムシフタエントリ(例えば最下位ビット:LSB)と呼ばれ、シフタエントリE[N]はトップシフタエントリ(例えば最上位ビット:MSB)と呼ばれる。待ち時間シフタ330aは、クロックサイクルごとにボトムシフタエントリE[0]をシフトアウトし得る。いくつかの実施形態では、待ち時間シフタ330aのシフタエントリE[x]は、x番目のクロックサイクルにおけるレジスタファイル140の書き込みポートの可用性を示す書き戻し値wb_shift[x]を含む。例えば、書き戻し値wb_shift[x]が第1の所定値(例えば「1」)の場合、x番目のクロックサイクルで書き込みポートが使用不可であることを示す。代わりに、書き戻し値wb_shift[x]が第2の所定値(例えば「0」)の場合、x番目のクロックサイクルで書き込みポートが使用可能であることを示す。例えば、シフタエントリE[0]の書き戻し値wb_shift[0]は、レジスタファイル140の書き込みポートが次のクロックサイクルで使用可能であることを示す「0」である。書き戻し値wb_shift[5]は、レジスタファイル140の書き込みポートが5番目のクロックサイクルで使用不可であることを示す「1」である。
いくつかの実施形態では、発令/デコードユニット320は、待ち時間シフタ330aのシフタエントリE[0]〜E[N]に格納された書き戻し値wb_shift[0]〜wb_shift[N]に基づいて、命令の発令を制御し得る。例えば、発令/デコードユニット320がxクロックサイクルの実行待ち時間を有する命令を受信すると、発令/デコードユニット320は下記戻し値wb_shift[x]が「1」または「0」であるかどうかを確認し得る。書き戻し値wb_shift[x]が「0」である場合、発令/デコードユニット320は命令を発令し、命令の書き戻し動作はx番目のクロックサイクルで実行される。命令111が発令されると、待ち時間シフタ330aの書き戻し値wb_shift[x]が「1」に設定され、x番目のクロックサイクルにおける書き込みポート使用の競合が防止される。書き戻し値wb_shift[x]が「1」である場合、発令/デコードユニット320は命令を停止し、次のクロックサイクルまたは(x+1)番目のクロックサイクルにおける書き込みポートの可用性を確認する。発令/デコードユニット320は、使用可能なシフタエントリが見つかるまで、後続のクロックサイクルにおける待ち時間シフタ330aの書き戻し値を介して、書き込みポートの可用性を確認し得る。このようにして、待ち時間シフタ330aに格納された書き戻し値、wb_shift[x]、を単に確認することによって、書き込みポートの競合が確認される。命令パイプラインの制御は、待ち時間シフタ330aの使用により簡略化される。
図3Bは、いくつかの実施形態に係る、待ち時間シフタ330bを示す。図3Aに示す待ち時間シフタ330aと図3Bに示す待ち時間シフタ330bの違いは、待ち時間シフタ330bが待ち時間シフタ330aの情報よりも多くの情報を格納することである。より具体的には、書き戻し値に加えて、待ち時間シフタ330bの各エントリは、レジスタアドレス値wr_addr、機能ユニット値funit、および書き戻しサイズ値wr_sizeも含み得る。なお、命令の発令および実行に関連する他の情報または値は、待ち時間シフタ330bにも含まれ得る。
待ち時間シフタ330bの各シフタエントリにおけるレジスタアドレス値wr_addr[x]は、x番目のクロックサイクルにおいてデータが書き込まれるレジスタのアドレスを示し得る。例えば、レジスタアドレス値wr_addr[5]は、5番目のクロックサイクルにおいて結果データがレジスタv5に書き込まれることを示す。機能ユニット値funit[x]は、x番目のクロックサイクルで結果データを出力する機能ユニットを示す。例えば、機能ユニット値funit[5]は、5番目のクロックサイクルにおいてALUより結果データが出力されることを示す。書き戻しサイズ値wr_size[x]は、x番目のクロックサイクルにおける結果データのサイズを示す。例えば、書き戻しサイズ値wr_size[5]は、5番目のクロックサイクルにおいて結果データのサイズが「半分」であることを示す。
発令/デコードユニット320は、待ち時間シフタ330bに格納された書き戻し値wb_shift、レジスタアドレス値wr_addr、機能ユニット値funit、および書き戻しサイズ値wr_sizeのうちの少なくとも1つに基づいて、命令の発令を制御し得る。一例としては、書き戻し値wb_shift[x]が第1の所定値である場合、発令/デコードユニット320は命令を停止し、次のクロックサイクルにおける書き戻し値wb_shift[x+1]を確認する。書き戻し値wb_shift[x]が第2の所定値である場合、発令/デコードユニット320は命令を発令し得る。レジスタアドレス値wr_addr[x]、機能ユニット値funit[x]、サイズ値wr_size[x]は、発令/デコードユニット320からバス123を介して実行キュー150へ命令が発令されたときに、wb_shift[x]の設定とともに待ち時間シフタに書き込まれる。したがって、命令の発令および実行に必要な全ての情報は、待ち時間シフタ330bで見つけ得る。言い換えれば、機能ユニット、レジスタアドレス、および書き戻しデータサイズなどのすべての実行パイプライン制御は、待ち時間シフタ330bにあり、多くの異なる場所からの制御信号およびレジスタアドレスのルーティングは必要ない。さらに、機能ユニットモジュール(例えば、図2の機能ユニットモジュール160)の機能ユニットは、書き戻しレジスタを追跡する必要がない。このようにして、パイプライン実行機構が簡素化、集中化され、プロセッサの電力消費が削減される。いくつかの実施形態では、待ち時間シフタのエントリの数は、すべての命令の最大待ち時間値に設定される。
いくつかの実施形態では、図3Aおよび図3Bに示される待ち時間シフタ330aおよび330bは、電力消費をさらに節約するための回転バッファにより実装され得る。図3Cは、いくつかの実施形態に係る回転バッファ330cを示すブロック図である。回転バッファ300cは、待ち時間シフタの値を格納するように構成された複数のバッファエントリE[0]〜E[N]を含み得る。いくつかの実施形態では、回転バッファ300cは読み取りポインタRptを含み、読み取りポイントRptは格納された値が読み取られるバッファエントリのアドレスを示し得る。いくつかの実施形態では、回転バッファ330cの1つのバッファエントリがクロックサイクルごとにシフトされ、読み出しポインタRptはシフトアウトされたバッファエントリのアドレスを示すためにクロックサイクルごとに移動し得る。
全てのシフタエントリをクロックサイクルごとに新しい値で更新する必要があるため、待ち時間シフタでのシフト動作は電力を大量に消費する。回転バッファ330が待ち時間シフタ(例えば図3Aおよび図3Bの待ち時間シフタ330aおよび330b)として使用される場合、読み取りポイントRptは、全てのクロックサイクルにおける待ち時間シフタの全てのシフタエントリを更新する必要性を防ぎ得る。その結果、回転バッファによって実装される待ち時間シフタの電力消費が削減される。
図4は、いくつかの実施形態に係る待ち時間シフタ(例えば、図2の待ち時間シフタ130)に基づく命令I1の発令を示すフローチャート図である。ステップS410では、xクロックサイクルの実行待ち時間を有する命令I1が、発令/デコードユニット(例えば図2の発令/デコードユニット120)に提供される。ステップS420では、発令/デコードユニットは、待ち時間シフタに格納されている書き戻し値wb_shift[x]が第1の所定値(例えば「1」)または第2の所定値(例えば「0」)であるかどうかを判定し得る。書き戻し値wb_shift[x]が第1の所定値であると判定すると、発令/デコードユニットはx番目のクロックサイクルにおいて命令I1の発令を停止し、次のクロックサイクルにおいて書き戻し値wb_shift[x]を確認して命令I1を発令するか停止するかを決定する(ステップS430およびS440)。
書き戻し値wb_shift[x]が第2の所定値(例えば「0」)である場合、ステップS450で書き戻し値wb_shift[x]が第1の所定値(例えば「1」)に設定され、ステップS460で発令/デコードユニットは命令I1を発令する。換言すると、書き戻し値wb_shift[x]が第2の所定値(例えば「0」)の場合、x番目のクロックサイクルにおいてレジスタファイルの書き込みポートが命令I1の書き戻し動作に使用可能であることを示す。そのため、命令I1の発令が許可され、書き戻し値wb_shift[x]が第1の所定値に設定されx番目のクロックサイクルにおける書き込みポートへの他の書き戻し動作との競合を防ぐ。
図5は、いくつかの実施形態に係る待ち時間シフタ(例えば、図2の待ち時間シフタ130)に基づくベクトル命令V1の発令を示すフローチャート図である。ベクトル命令V1は、K個のマイクロ演算を含み得、K個のマイクロ演算のそれぞれは、xクロックサイクルの実行待ち時間を有する。ベクトル命令V1は、ステップS510において、発令/デコードユニット(例えば、図2の発令/デコードユニット120)に提供される。ステップS520では、発令/デコードユニットは、待ち時間シフタの複数の連続するシフタエントリにおける書き戻し値wb_shift[(x+K):x]を決定することができる。書き戻し値wb_shift[(x+K):x]の少なくとも1つが第1の所定値(例えば「1」)であると判定すると、発令/デコードユニットは、ステップS530でベクトル命令V1の発令を停止する。ステップS540において、発令/デコードユニットは、次のクロックサイクルまでベクトル命令V1を停止し、次のクロックサイクルにおける書き戻し値wb_shift[(x+K):(x)]を確認して、ベクトル命令V1を発令するかどうかを決定する。いくつかの実施形態では、K個のマイクロ演算の読み取り値は、連続したサイクルではなく、ストライド値sである。この場合、書き戻し値はwb_shift[K*s+1、(K−1)*s+1、(K−2)*s+1、…、2s+1、s+1、1]である。命令は、サイクルごとに、図2のバス151を介して実行キュー150から機能ユニット160に送信される。
全ての書き戻し値wb_shift[(x+K):x]が第2の所定値(例えば「0」)である場合、ステップS550で全ての書き戻し値wb_shift[(x+K):x]が第1の所定値(例えば「1」)に設定され、ステップS560で発令/デコードユニットはベクトル命令V1を発令する。換言すると、全ての書き戻し値wb_shift[(x+K):x]が第2の所定値(例えば「0」)の場合、x番目のクロックサイクルから(x+K)番目のクロックサイクルまで、レジスタファイルの書き込みポートがベクトル命令V1の書き戻し動作に使用可能であることを示す。そのため、ベクトル命令V1の発令が許可され、書き戻し値wb_shift[(x+k):x]が第1の所定値に設定され、(x+K)番目のクロックサイクルからx番目のクロックサイクルまで、書き込みポートへの他の書き戻し動作を防ぐ。K=0の場合、この図5は図4と同じであることに注意されたい。
図6は、いくつかの実施形態に係る待ち時間シフタ(例えば、図2の待ち時間シフタ130)に基づくM番目のクロックサイクルにおける命令I2の発令を示す。命令I2は、ステップS610において、発令/デコードユニット(例えば、図2の発令/デコードユニット120)に提供される。ステップS620では、発令/デコードユニットは、待ち時間シフタの書き戻し値wb_shift[x+M]が第1の所定値(例えば「1」)または第2の所定値(例えば「0」)であるかどうかを判定し得る。書き戻し値wb_shift[x+M]が第1の所定値である場合、発令/デコードユニットは命令I2の発令を1クロックサイクル停止し、次のクロックサイクルにおいて書き戻し値wb_shift[x+M]を再確認する(ステップS630およびS640)。待ち時間シフタの書き戻し値wb_shift[x+M]が第2の所定値(例えば「0」)である場合、ステップS650で書き戻し値wb_shift[x+M]が第1の所定値(例えば「1」)に設定され、ステップS660で発令/デコードユニットは命令I2を発令する。M=0の場合、この図6は図4と同じであることに注意されたい。
図7は、いくつかの実施形態に係る待ち時間シフタ(例えば、図2の待ち時間シフタ130)に基づくM番目のクロックサイクルにおけるベクトル命令V2の発令を示す。ベクトル命令V2は、K個のマイクロ演算を含み得、K個のマイクロ演算のそれぞれは、xクロックサイクルの実行待ち時間を有する。ベクトル命令V2は、ステップS710において、発令/デコードユニット(例えば、図2の発令/デコードユニット120)に提供される。ステップS720で、発令/デコードユニットは、待ち時間シフタの複数の連続するシフタエントリの書き戻し値wb_shift[(x+K+M):(x+M)]のいずれかが第1の所定値(例えば「1」)または第2の所定値であるかどうかを判定し得る。書き戻し値wb_shift[(x+K+M):(x+M)]の少なくとも1つが第1の所定値(例えば「1」)であると判定すると、発令/デコードユニットは、ベクトル命令V2の発令を1クロックサイクル停止し、書き戻し値wb_shift[(x+K+M):(x+M)]を確認して、ベクトル命令V2を発令するかどうかを決定する(ステップS730およびS740)。全ての書き戻し値wb_shift[(x+K+M):(x+M)]が第2の所定値(例えば「0」)であるとき、ステップS750で全ての書き戻し値wb_shift[(x+K+M−1):(x+M)]が第1の所定値(例えば「1」)に設定され、ステップS760で発令/デコードユニットはベクトル命令V2を発令する。M=0の場合、この図7は図5と同じであることに注意されたい。
いくつかの実施形態では、待ち時間シフタ内のエントリの数は、より小さなサイズに制限される。例えば、ほとんどの命令の待ち時間は32サイクル未満であり、一握りに満たない命令の待ち時間が32サイクルを超えるため、待ち時間シフタには32エントリが設定されており、長待ち時間命令を処理する機構が必要となる。長待ち時間カウンタは、長待ち時間命令に使用され、面積、電力、タイミングの点ではるかに効率的である。図8は、いくつかの実施形態に係る、待ち時間シフタ(例えば、図2の待ち時間シフタ130)および長待ち時間カウンタ(例えば、図2のカウンタ170)に基づく長待ち時間命令I3の発令を示す。長待ち時間命令I3は、浮動小数点命令、平方根命令、浮動小数点加算減算命令、および整数除算命令であり得る。
ステップS810において、yクロックサイクルの実行時間を有する長待ち時間命令I3は、発令/デコードユニット(例えば、図2の発令/デコードユニット120)に提供される。yの値は、待ち時間シフタ(例えば、図2の待ち時間シフタ130)のシフタエントリの総数であるNよりも大きい。簡素化のため、各カウンタ170は、長待ち時間命令を1つしか処理できない。カウンタ170は、ビジー状態および使用可能状態を有し得、ビジー状態はカウンタ170が1つの長待ち時間命令の処理においてビジーであることを示し、利用可能な状態は、カウンタ170が新しい長待ち時間命令の処理に使用可能であることを示す。ステップS820では、カウンタ170の状態が確認される。カウンタ170がビジー状態である場合、発令/デコードユニットは命令I3の発令を停止し、次のクロックサイクルでカウンタ170の状態を再確認する(ステップS830およびS840)。カウンタ170が利用可能な状態にあるとき、カウンタ値ex_cnt[y]は、長待ち時間命令I3の実行待ち時間yに基づいて、長待ち時間カウンタ(例えば、図2のカウンタ170)に設定される(ステップS850)。発令/デコードユニットは、ステップS860で命令I3を発令する。いくつかの実施形態では、カウンタは、カウンタ値ex_cnt[y]がNに達するまで、クロックサイクルごとにカウンタ値ex_cnt[y]をカウントダウンするように構成され、これは、長待ち時間命令からの結果データがNクロックサイクルでレジスタファイル140に書き戻されることを意味する。長待ち時間カウンタのカウンタ値ex_cnt[y]がNに達すると、トップの待ち時間シフタの書き戻し値wb_shift[N]が第1の所定値(例えば「1」)に設定される。前述のように、長待ち時間命令I3は待ち時間シフタに書き込む優先度が高いため、長待ち時間命令I3は常に競合なしに待ち時間シフタに書き込むことが可能である。
図9は、いくつかの実施形態に係る待ち時間シフタ(例えば、図2の待ち時間シフタ130)に基づく除算命令I4の発令を示す。除算動作の実行中に、既知の動的実行時間を有する除算命令である。換言すると、除算命令の実行時間を知るために数クロックサイクル(例えば6クロックサイクル)要する。いくつかの実施形態では、待ち時間シフタは命令発令段階中には設定されないが、実行時間が既知の場合、実行の数クロックサイクル後に設定される。
分割命令I4は、ステップS910において、発令/デコードユニット(例えば、図2の発令/デコードユニット120)に提供され、分割命令I4は、待ち時間シフタに書き戻し値を設定せずに実行キュー150に発令される(ステップS920)。命令I4は、実行のために最終的に機能ユニット160に発令される。機能ユニットは、ソースオペランドデータを分析して実際の待ち時間、例えば、ステップS930で機能ユニット160が待ち時間シフタ130にアクセスし、wb_shift[x]を第1の所定値に設定する前に、競合についてwb_shift[x]の値をチェックするとき、である命令I4のxを決定する。
将来のある時点で、機能ユニットモジュールから除算命令I4の待ち時間が既知となると、機能ユニットモジュールは待ち時間(例えば、xクロックサイクル)を待ち時間シフタに送る。ステップS940では、発令/デコードユニット120は、x番目のクロックサイクルに関連付けられているシフタエントリの書き戻し値wb_shift[x]が、第1の所定値(例えば「1」)または第2の所定値(例えば「0」)であるかどうかを判定し得る。書き戻し値wb_shift[x]が第1の所定値(例えば、「1」)である場合、発令/デコードユニット120は、次のクロックサイクルにおけるシフタエントリの書き戻し値を確認し得る(ステップS950)。ステップS950では、機能ユニット160によって生成された有効な結果データがレジスタファイル140に書き込まれた後のサイクル数を追跡するためにサイクルカウントが使用される。命令I4の結果データは、書き込みポートが使用可能な場合にのみ、レジスタファイル140に書き込むことができる。除算機能ユニットは、次の除算命令により結果データが上書きされる前に、結果データをいくつかのクロックサイクル、例えばHサイクル、の間保持できる。ステップS952において、サイクルカウントがHと比較され、サイクルカウントがHより大きい場合、次の除算命令は、ステップS954で機能ユニット160に発令される前に、実行キュー150内で超過サイクルの間停止されなければならない。書き戻し値wb_shift[x]が第2の所定値(例えば「0」)である場合、ステップS960で書き戻し値wb_shift[x]が第1の所定値(例えば「1」)に設定される。このように、待ち時間シフタの書き戻し値に基づいて、機能ユニットモジュールからレジスタファイルに除算命令I4の結果データを書き込むための書き戻し動作が実行される。
図10は、いくつかの実施形態に係る待ち時間シフタ(例えば、図2の待ち時間シフタ130)に基づくロード命令I5の発令を示す。データキャッシュのヒット/ミスとデータバンクの競合の性質として、ロード命令は未知の実行待ち時間を有する。要求受付プロトコルは、ロード命令の発令のために実装し得る。ロード命令のためのデータキャッシュヒットは、ロード実行ユニットが待ち時間シフタ130にアクセスしてwb_shift[x]を設定し、データキャッシュからデータを書き戻すための書き込みポートを要求する除算命令に類似する。
ロード命令I5は、ステップS1010およびS1020において、待ち時間シフタに書き戻し値を設定することなく提供および発令される。いくつかの実施形態では、機能ユニットモジュールのロード/格納機能ユニットは、データが見つかったときにデータキャッシュが有効なデータを示す信号を送信し、受付/応答信号により応答することでロード/格納機能ユニットがデータを受け付けることができる、受付/応答プロトコルで実装される。いくつかの実施形態では、データキャッシュが失われた場合、データは、L2データキャッシュ、L3データキャッシュまたは外部メモリなどの下位の構成要素において検索されなければならない。下位の構成要素でデータが見つかると、データキャッシュは有効データ信号をロード/格納機能ユニットに送信し得る。データキャッシュは、ロード/格納機能ユニットから受付/応答信号が受信されるまで、データを保持する。
ステップS1030において、ロード/格納機能ユニットは、有効なデータ信号(例えば、データキャッシュの有効なデータを示す信号)が受信されたかどうかを確認する。有効なデータ信号が受信されると、機能ユニットモジュールは、x番目のクロックサイクルに対応する書き戻し値wb_shift(x)が第1の所定値(例えば、「1」)であるかどうかを判定し得る。書き戻し値wb_shift(x)が第1の所定値である場合、ロード/格納機能ユニットは、データを保持するデータキャッシュへの受付/応答信号の送信を遅らせることができる(ステップS1050)。書き戻し値wb_shift(x)が第2の所定値(例えば「0」)である場合、ステップS1070においてロード/格納機能ユニットは受付/応答信号をデータキャッシュに送信し、ステップS1080において書き戻し値wb_shift(x)は第1の所定値(例えば「1」)に設定される。このようにして、ロード命令I5の発令および書き戻し動作の制御は、待ち時間シフタ(例えば、図2の待ち時間シフタ130)の使用により単純化される。
いくつかの実施形態では、レジスタファイル(例えば、図2のレジスタファイル140)は、複数の共有書き込みポートおよび専用書き込みポートを含み、共有書き込みポートは全ての機能ユニットまたは機能ユニットのグループ間で共有され、専用書き込みポートは、未知の実行待ち時間のために構成される。ロード命令などの未知の命令は、専用書き込みポートを使用してレジスタファイルに書き込まれるため、パイプラインにおける競合を防止しながらパイプライン制御機構が簡素化される。
図11は、いくつかの実施形態に係るパイプライン実行の制御方法を示す。ステップS1110において、発令される命令の第1のクロックサイクルは、命令の実行待ち時間に基づいて決定される。ステップS1120において、第1のクロックサイクルにおける書き込みポートの可用性は、待ち時間シフタの書き戻し値に基づいて決定され、書き戻し値は、待ち時間シフタの複数のシフタエントリのうちの1つのシフタエントリに含まれ、複数のシフタエントリは、クロックサイクルごとにシフトアウトされる。ステップS1130において、待ち時間シフタの書き戻し値が、第1のクロックサイクルで書き込みポートが使用可能であることを示すときに、命令はデコードされて発令される。ステップS1140において、待ち時間シフタの書き戻し値が、第1のクロックサイクルで書き込みポートが使用不可であることを示すときに、命令は停止される。
本開示のいくつかの実施形態によれば、レジスタファイル、待ち時間シフタ、デコードユニット、および複数の機能ユニットを含むプロセッサが導入される。レジスタファイルは書き込みポートを含む。待ち時間シフタは複数のシフタエントリを含み、クロックサイクルごとに複数のシフタエントリうちの1つのシフタエントリをシフトアウトするように構成される。複数のシフタエントリのそれぞれはクロックサイクルに関連付けられ、複数のシフタエントリのそれぞれは関連付けられたクロックサイクルにおける書き戻し動作に対するレジスタファイルの書き込みポートの可用性を示す書き戻し値を含む。デコードユニットは、待ち時間シフタに結合され、命令をデコードし、待ち時間シフタ書き戻し値に従って命令を発令するように構成される。複数の機能ユニットは、デコードユニットおよびレジスタファイルに結合され、デコードユニットによって発令された命令を実行し、レジスタファイルの書き込みポートへの書き戻し動作を行うように構成される。
本開示のいくつかの実施形態によれば、命令パイプラインを制御する方法が導入される。この方法は、命令の実行待ち時間時間に基づいて発令される命令の第1のクロックサイクルを判定するステップと、待ち時間シフタの書き戻し値に基づいて、第1のクロックサイクルで書き込みポートの可用性を判定するステップであり、書き戻し値は、待ち時間シフタの複数のシフタエントリうちの1つのシフタエントリに含まれ、複数のシフタエントリはクロックサイクルごとにシフトアウトするステップと、待ち時間シフタの書き戻し値が、書き込みポートが第1のクロックサイクルで使用可能であることを示す場合、命令をデコードして発令するステップと、待ち時間シフタの書き戻し値が、第1のクロックサイクルで書き込みポートが使用不可であることを示す場合に、命令を停止するステップと、を含む。
前述の内容は、当業者が以下の詳細な説明をよりよく理解できるように、いくつかの実施形態の特徴を概説する。当業者は、同じ目的を実行するため、および/または本明細書に導入された実施形態の同じ利点を達成するために、他の処理および構造を設計または修正するための基礎として本開示を容易に使用できることを理解する。当業者はまた、そのような均等の構造が本開示の趣旨および範囲から逸脱せず、本開示の趣旨および範囲から逸脱することなく本明細書の様々な変更、置換、および代替を行い得ることが理解されるべきである。
本発明は、コンピュータ処理システムの命令パイプラインに関する。
10:コンピュータ処理システム
100:プロセッサ
110:命令ユニット
111:命令
120、320:発令/デコードユニット
121:信号
123:バス
130、330a、330b:待ち時間シフタ
131:信号
140:レジスタファイル
150:実行キュー
151:発令された命令
160:機能ユニットモジュール
161:結果データ
170:カウンタ
171:信号
180:データキャッシュ
200:メモリ
300:入力/出力(IO)インターフェース
330c:回転バッファ
400:周辺機器
500:バス
S410、S420、S430、S440、S450、S460:ステップ
S510、S520、S530、S540、S550、S560:ステップ
S610、S620、S630、S640、S650、S660:ステップ
S710、S720、S730、S740、S750、S760:ステップ
S810、S820、S830、S840、S850、S860:ステップ
S910、S920、S930、S940、S950、S952,S954、S960:ステップ
S1010、S1020、S1030、S1040、S1050、S1070、S1080:ステップ
S1110、S1120、S1130、S1140:ステップ
E[0]、E[1]、E[N]:待ち時間シフタエントリ
D1:方向
Rpt:読み取りポインタ
Yes:Yes
No:No
FUNIT_A:機能ユニットA
FUNIT_B:機能ユニットB
FUNIT_C:機能ユニットC
REG_1−REG_M:レジスタ
WR_P1−WR_PK:書き込みポート
100:プロセッサ
110:命令ユニット
111:命令
120、320:発令/デコードユニット
121:信号
123:バス
130、330a、330b:待ち時間シフタ
131:信号
140:レジスタファイル
150:実行キュー
151:発令された命令
160:機能ユニットモジュール
161:結果データ
170:カウンタ
171:信号
180:データキャッシュ
200:メモリ
300:入力/出力(IO)インターフェース
330c:回転バッファ
400:周辺機器
500:バス
S410、S420、S430、S440、S450、S460:ステップ
S510、S520、S530、S540、S550、S560:ステップ
S610、S620、S630、S640、S650、S660:ステップ
S710、S720、S730、S740、S750、S760:ステップ
S810、S820、S830、S840、S850、S860:ステップ
S910、S920、S930、S940、S950、S952,S954、S960:ステップ
S1010、S1020、S1030、S1040、S1050、S1070、S1080:ステップ
S1110、S1120、S1130、S1140:ステップ
E[0]、E[1]、E[N]:待ち時間シフタエントリ
D1:方向
Rpt:読み取りポインタ
Yes:Yes
No:No
FUNIT_A:機能ユニットA
FUNIT_B:機能ユニットB
FUNIT_C:機能ユニットC
REG_1−REG_M:レジスタ
WR_P1−WR_PK:書き込みポート
Claims (29)
- 書き込みポートを含むレジスタファイルと、
複数のシフタエントリを含み、前記複数のシフタエントリのうちの1つのシフタエントリをクロックサイクルごとにシフトアウトするように構成された待ち時間シフタを含み、前記複数のシフタエントリのそれぞれはクロックサイクルに関連付けられ、前記複数のシフタエントリのそれぞれは前記クロックサイクルにおける書き戻し動作に対する前記レジスタファイルの前記書き込みポートの可用性を示す書き戻し値を含み、
前記待ち時間シフタに結合され、命令をデコードし、前記待ち時間シフタの前記複数のシフタエントリに含まれる前記書き戻し値に基づいて前記命令を発令するように構成されるデコードユニットと、
前記デコードユニットおよび前記レジスタファイルに結合され、前記デコードユニットによって発令された前記命令を実行し、前記レジスタファイルの前記書き込みポートへの前記書き戻し値において結果データを生成するよう構成される少なくとも1つの機能ユニットと、
を含む、マイクロプロセッサ。 - 前記待ち時間シフタは、クロックサイクルごとに前記待ち時間シフタのボトムシフタエントリをシフトアウトするように構成され、前記シフタのシフトアウトされた値は、前記レジスタファイルの前記書き戻し動作を制御する、請求項1に記載のマイクロプロセッサ。
- 前記書き戻し値が第1の所定値である場合、前記レジスタファイルの前記書き込みポートは、前記クロックサイクルにおける前記書き戻し動作に対して使用不可であり、
前記書き戻し値が第2の所定値である場合、前記レジスタファイルの前記書き込みポートは、前記クロックサイクルにおける前記書き戻し動作に対して使用可能である、
請求項1に記載のマイクロプロセッサ。 - 発令される第1の命令が、第1のクロックサイクルで第1の書き戻し動作を実行するように構成され、前記待ち時間シフタが前記レジスタファイルの前記書き込みポートが前記第1のクロックサイクルで使用不可であることを示す場合、前記デコードユニットは前記第1の命令の発令を停止するよう構成され、
発令される前記第1の命令が、前記第1のクロックサイクルで前記第1の書き戻し動作を実行するように構成され、前記待ち時間シフタが前記レジスタファイルの前記書き込みポートが前記第1のクロックサイクルで使用可能であることを示す場合、前記デコードユニットは前記第1の命令を発令し、前記第1のクロックサイクルに関連付けられた前記シフタエントリの前記書き戻し値を前記第1の所定値に設定するよう構成される、
請求項3に記載のマイクロプロセッサ。 - 前記第1の命令の前記第1のクロックサイクルは、前記第1の命令の実行待ち時間に従って決定される、請求項4に記載のマイクロプロセッサ。
- 前記デコードユニットが前記第1のクロックサイクルで前記第1の命令の発令を停止するように構成されている場合、前記デコードユニットは、前記第1のクロックサイクルの次の第2のクロックサイクルで前記レジスタファイルの前記書き込みポートの可用性を判定するよう構成される、
請求項4に記載のマイクロプロセッサ。 - 前記デコードユニットに結合され、前記デコードユニットに前記命令を提供するように構成される命令ユニットと、
前記デコードユニットおよび少なくとも1つの機能ユニットに結合される実行キューであって、発令された命令を前記実行キューの複数のキューエントリに格納し、前記実行キューに格納された前記発令された命令を前記少なくとも1つの機能ユニットに提供するように構成される前記実行キューと、
をさらに含む、請求項1に記載のマイクロプロセッサ。 - 前記レジスタファイルは、複数のレジスタアドレスを有する複数のレジスタをさらに含み、
前記待ち時間シフタの前記複数のシフタエントリのそれぞれは、
前記命令の前記書き戻し動作のために前記複数のレジスタアドレスのうちの1つのレジスタアドレスを格納するように構成されたレジスタアドレス値と、
前記命令を実行するための前記少なくとも1つの機能ユニットのうちの1つの機能ユニットを示すように構成された機能ユニット値と、さらに含む、
請求項1に記載のマイクロプロセッサ。 - 前記待ち時間シフタは、回転バッファを使用して実装され、前記回転バッファは、
前記回転バッファから要素が読み出されるバッファアドレスを示すように構成された読み取りポインタを含む、
請求項1に記載のマイクロプロセッサ。 - 前記待ち時間シフタに結合され、設定可能なカウンタ値が第1の閾値に達するまで、クロックサイクルごとに前記設定可能なカウンタ値をカウントダウンするように構成された長待ち時間カウンタを含み、
前記デコードユニットはさらに、前記長待ち時間カウンタの状態に基づいて前記命令をデコードおよび発令するように構成され、
前記長待ち時間カウンタの前記状態がビジー状態であり、前記命令の前記実行待ち時間が第2の閾値を超える場合、前記デコードユニットは、前記命令の発令を停止するように構成され、
前記長待ち時間カウンタの前記状態が使用可能状態であり、前記命令の前記実行待ち時間が前記第2の閾値を超える場合、前記設定可能なカウンタ値は前記命令の前記実行待ち時間に従って設定される、
をさらに含む、請求項1に記載のマイクロプロセッサ。 - 前記設定可能なカウンタが前記カウンタにより前記第1の閾値までカウントダウンされた場合、前記待ち時間シフタのトップシフタエントリが前記命令に設定される、
請求項10に記載のマイクロプロセッサ。 - 有効なデータ信号がデータキャッシュから受信され、前記クロックサイクルの前記書き戻し値が前記クロックサイクルで前記レジスタファイルの前記書き込みポートが使用不可であることを示すかの判定に応答して、前記データキャッシュへの受付信号の送信を遅らせ、
前記有効なデータ信号が前記データキャッシュから受信され、前記クロックサイクルの前記書き戻し値が前記クロックサイクルで前記レジスタファイルの前記書き込みポートが使用可能であることを示すかの判定に応答して、前記データキャッシュへ前記受付信号を送信するように構成されたロード/格納機能ユニットを、前記少なくとも一つの機能ユニットが含む
請求項1に記載のマイクロプロセッサ。 - 前記書き込みポートが、
前記少なくとも1つの機能ユニットに共有される複数の第1の書き込みポートと、
未知待ち時間命令専用の第2の書き込みポートと、を含む、
請求項1記載のマイクロプロセッサ。 - 前記待ち時間シフタは、複数の第1の待ち時間シフタを含み、前記複数の第1の待ち時間シフタのそれぞれは、前記複数の第1の書き込みポートの1つに対応する、
請求項13に記載のマイクロプロセッサ。 - 前記命令は、複数のマイクロ演算を含むベクトル命令であり、
前記ベクトル命令の前記複数のマイクロ演算は、前記複数の第1の待ち時間シフタのうちの同じ第1の待ち時間シフタに含まれる、
請求項14に記載のマイクロプロセッサ。 - 前記命令は、複数のマイクロ演算を含むベクトル命令であり、
前記マイクロ演算は、前記待ち時間シフタの連続するシフタエントリに含まれる、
請求項1に記載のマイクロプロセッサ。 - 発令される命令の実行待ち時間に基づいて第1のクロックサイクルを決定し、
前記第1のクロックサイクルにおける前記書き込みポートの可用性を、待ち時間シフタの書き戻し値に基づいて決定し、前記書き戻し値は、待ち時間シフタの複数のシフタエントリのうちの1つのシフタエントリに含まれ、前記複数のシフタエントリは、クロックサイクルごとにシフトアウトされ、
前記待ち時間シフタの前記書き戻し値が、前記第1のクロックサイクルにおいて前記書き込みポートが使用可能であることを示すときに、前記命令をデコードして発令し、
前記待ち時間シフタの前記書き戻し値が、前記第1のクロックサイクルにおいて前記書き込みポートが使用不可であることを示すときに、前記命令を停止する、
マイクロプロセッサのレジスタファイルの書き込みポートをスケジュールする方法。 - 前記書き戻し値が第1の所定値である場合、前記レジスタファイルの前記書き込みポートは、前記クロックサイクルにおける前記書き戻し動作に対して使用不可であり、
前記書き戻し値が第2の所定値である場合、前記レジスタファイルの前記書き込みポートは、前記クロックサイクルにおける前記書き戻し動作に対して使用可能である、
請求項17に記載の方法。 - 前記命令がデコードされて発令されたときに、前記書き戻し値を前記第1の所定値に設定し、
前記レジスタファイルの前記書き込みポートが、前記第1のクロックサイクルの次の第2のクロックサイクルで使用可能かどうかを判定し、
前記待ち時間シフタの前記書き戻し値が、前記第2のクロックサイクルで前記書き込みポートが使用可能であることを示すときに、前記命令をデコードして発令する、
ことをさらに含む、請求項18に記載の方法。 - 前記待ち時間シフタの前記複数のシフタエントリのそれぞれは、
前記命令の前記書き戻し動作のために前記複数のレジスタアドレスのうちの1つのレジスタアドレスを格納するように構成されたレジスタアドレス値と、
前記命令を実行するための前記少なくとも1つの機能ユニットのうちの1つの機能ユニットを示すように構成された機能ユニット値と、さらに含む、
請求項17に記載の方法。 - 長待ち時間カウンタの状態を判定し、
前記命令の実行待ち時間が第2の閾値を超えるかどうかを判定し、
前記長待ち時間カウンタの前記状態がビジー状態であり、前記命令の前記実行待ち時間が前記第2の閾値を超える場合、前記命令の発令を停止し、
前記長待ち時間カウンタの前記状態が使用可能状態であり、前記命令の前記実行待ち時間が前記第2の閾値を超える場合、前記命令の前記実行待ち時間に基づいて、前記長待ち時間カウンタの設定可能なカウンタ値を設定する、
ことをさらに含む、請求項17に記載の方法。 - 前記設定可能なカウンタ値が第1の閾値に達するまで、クロックサイクルごとに前記設定可能なカウンタ値をカウントダウンし、
前記設定可能なカウンタが前記第1の閾値までカウントダウンされたことの判定に応答して、前記命令を発令し、前記命令の前記待ち時間シフタのトップシフタエントリを設定する、
ことをさらに含む、請求項21に記載の方法。 - マイクロプロセッサを含み、前記マイクロプロセッサは、
書き込みポートを含むレジスタファイルと、
複数のシフタエントリを含み、前記複数のシフタエントリのうちの1つのシフタエントリをクロックサイクルごとにシフトアウトするように構成された待ち時間シフタを含み、前記複数のシフタエントリのそれぞれはクロックサイクルに関連付けられ、前記複数のシフタエントリのそれぞれは前記クロックサイクルにおける書き戻し動作に対する前記レジスタファイルの前記書き込みポートの可用性を示す書き戻し値を含み、
命令を提供するように構成された命令ユニットと、
前記待ち時間シフタに結合され、前記命令をデコードし、前記待ち時間シフタの前記複数のシフタエントリに含まれる前記書き戻し値に基づいて前記命令を発令するように構成されるデコードユニットと、
前記デコードユニットに結合された実行キューであって、発令された命令を前記実行キューの複数のキューエントリに格納するように構成された前記実行キューと、
前記実行キューおよび前記レジスタファイルに結合され、前記発令された前記命令を実行し、前記レジスタファイルの前記書き込みポートへの書き戻し値において結果データを生成するよう構成される少なくとも1つの機能ユニットと、
前記マイクロプロセッサに結合されたメインメモリと、
前記マイクロプロセッサに結合されたバスブリッジと、
前記バスブリッジに結合された入力/出力装置と、
を含む、データ処理システム。 - 前記待ち時間シフタは、クロックサイクルごとに前記待ち時間シフタのボトムシフタエントリをシフトアウトするように構成され、前記シフタのシフトアウトされた値は、前記レジスタファイルの前記書き戻し動作を制御する、請求項23に記載のデータ処理システム。
- 前記書き戻し値が第1の所定値である場合、前記レジスタファイルの前記書き込みポートは、前記クロックサイクルにおける前記書き戻し動作に対して使用不可であり、
前記書き戻し値が第2の所定値である場合、前記レジスタファイルの前記書き込みポートは、前記クロックサイクルにおける前記書き戻し動作に対して使用可能である、
請求項23記載のデータ処理システム。 - 発令される第1の命令が、第1のクロックサイクルにおいて第1の書き戻し動作を実行するように構成され、前記待ち時間シフタが前記レジスタファイルの前記書き込みポートが前記第1のクロックサイクルにおいて使用不可であることを示す場合、前記デコードユニットは前記第1の命令の発令を停止するよう構成され、
発令される前記第1の命令が、前記第1のクロックサイクルにおいて前記第1の書き戻し動作を実行するように構成され、前記待ち時間シフタが前記レジスタファイルの前記書き込みポートが前記第1のクロックサイクルで使用可能であることを示す場合、前記デコードユニットは前記第1の命令を発令し、前記第1のクロックサイクルに関連付けられた前記シフタエントリの前記書き戻し値を前記第1の所定値に設定するよう構成される、
請求項23記載のデータ処理システム。 - 前記第1の命令の前記第1のクロックサイクルは、前記第1の命令の実行待ち時間に従って決定される、請求項26に記載のデータ処理システム。
- 前記待ち時間シフタに結合され、設定可能なカウンタ値が第1の閾値に達するまで、クロックサイクルごとに前記設定可能なカウンタ値をカウントダウンするように構成された長待ち時間カウンタを含み、
前記デコードユニットはさらに、前記長待ち時間カウンタの状態に基づいて前記命令をデコードおよび発令するように構成され、
前記長待ち時間カウンタの前記状態がビジー状態であり、前記命令の実行待ち時間が第2の閾値を超える場合、前記デコードユニットは、前記命令の発令を停止するように構成され、
前記長待ち時間カウンタの前記状態が使用可能状態であり、前記命令の前記実行待ち時間が前記第2の閾値を超える場合、前記設定可能なカウンタ値は前記命令の前記実行待ち時間に従って設定される、
請求項23記載のデータ処理システム。 - 前記設定可能なカウンタが前記カウンタにより前記第1の閾値までカウントダウンされた場合、前記待ち時間シフタのトップシフタエントリが前記命令に設定される、
請求項27記載のデータ処理システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/836,864 US11132199B1 (en) | 2020-03-31 | 2020-03-31 | Processor having latency shifter and controlling method using the same |
US16/836,864 | 2020-03-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021163453A true JP2021163453A (ja) | 2021-10-11 |
Family
ID=77854611
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020204775A Withdrawn JP2021163453A (ja) | 2020-03-31 | 2020-12-10 | 待ち時間シフタを備えたプロセッサおよびそれを用いた制御方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11132199B1 (ja) |
JP (1) | JP2021163453A (ja) |
CN (1) | CN113467830A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023058542A1 (ja) | 2021-10-04 | 2023-04-13 | 株式会社アマダ | ワークピース分離装置、ワークピース分離方法、及びパレット棚装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11687347B2 (en) | 2021-05-25 | 2023-06-27 | Andes Technology Corporation | Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard |
US11829187B2 (en) | 2022-01-30 | 2023-11-28 | Simplex Micro, Inc. | Microprocessor with time counter for statically dispatching instructions |
US11954491B2 (en) | 2022-01-30 | 2024-04-09 | Simplex Micro, Inc. | Multi-threading microprocessor with a time counter for statically dispatching instructions |
US11829762B2 (en) | 2022-01-30 | 2023-11-28 | Simplex Micro, Inc. | Time-resource matrix for a microprocessor with time counter for statically dispatching instructions |
US11829767B2 (en) | 2022-01-30 | 2023-11-28 | Simplex Micro, Inc. | Register scoreboard for a microprocessor with a time counter for statically dispatching instructions |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5222240A (en) * | 1990-02-14 | 1993-06-22 | Intel Corporation | Method and apparatus for delaying writing back the results of instructions to a processor |
US5826055A (en) * | 1991-07-08 | 1998-10-20 | Seiko Epson Corporation | System and method for retiring instructions in a superscalar microprocessor |
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 |
US6367027B1 (en) * | 1999-03-22 | 2002-04-02 | Infineon Technologies Ag | Skew pointer generation |
US7478225B1 (en) * | 2004-06-30 | 2009-01-13 | Sun Microsystems, Inc. | Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor |
US7418551B2 (en) * | 2004-07-06 | 2008-08-26 | Intel Corporation | Multi-purpose register cache |
US7506140B2 (en) * | 2005-02-04 | 2009-03-17 | Mips Technologies, Inc. | Return data selector employing barrel-incrementer-based round-robin apparatus |
US8782378B2 (en) * | 2010-09-14 | 2014-07-15 | Arm Limited | Dynamic instruction splitting |
US9286069B2 (en) * | 2012-12-21 | 2016-03-15 | Arm Limited | Dynamic write port re-arbitration |
-
2020
- 2020-03-31 US US16/836,864 patent/US11132199B1/en active Active
- 2020-11-27 CN CN202011360338.XA patent/CN113467830A/zh not_active Withdrawn
- 2020-12-10 JP JP2020204775A patent/JP2021163453A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023058542A1 (ja) | 2021-10-04 | 2023-04-13 | 株式会社アマダ | ワークピース分離装置、ワークピース分離方法、及びパレット棚装置 |
Also Published As
Publication number | Publication date |
---|---|
US20210303305A1 (en) | 2021-09-30 |
US11132199B1 (en) | 2021-09-28 |
CN113467830A (zh) | 2021-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2021163453A (ja) | 待ち時間シフタを備えたプロセッサおよびそれを用いた制御方法 | |
JP5372929B2 (ja) | 階層マイクロコードストアを有するマルチコアプロセッサ | |
JP2021174506A (ja) | 事前設定された未来時間において命令を実行するためのパイプライン制御を備えるマイクプロセッサ | |
US10303609B2 (en) | Independent tuning of multiple hardware prefetchers | |
US8904153B2 (en) | Vector loads with multiple vector elements from a same cache line in a scattered load operation | |
US20190004810A1 (en) | Instructions for remote atomic operations | |
KR101594502B1 (ko) | 바이패스 멀티플 인스턴스화 테이블을 갖는 이동 제거 시스템 및 방법 | |
US20160179586A1 (en) | Lightweight restricted transactional memory for speculative compiler optimization | |
US11263013B2 (en) | Processor having read shifter and controlling method using the same | |
US11204770B2 (en) | Microprocessor having self-resetting register scoreboard | |
US20200310815A1 (en) | System, Apparatus And Method For Program Order Queue (POQ) To Manage Data Dependencies In Processor Having Multiple Instruction Queues | |
KR20190033084A (ko) | 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적 | |
US6735687B1 (en) | Multithreaded microprocessor with asymmetrical central processing units | |
US11907712B2 (en) | Methods, systems, and apparatuses for out-of-order access to a shared microcode sequencer by a clustered decode pipeline | |
US20210200550A1 (en) | Loop exit predictor | |
EP3109754A1 (en) | Systems, methods, and apparatuses for improving performance of status dependent computations | |
EP4020229A1 (en) | System, apparatus and method for prefetching physical pages in a processor | |
US20220206945A1 (en) | Adaptive remote atomics | |
CN112148106A (zh) | 用于处理器的混合预留站的系统、装置和方法 | |
US20230099989A1 (en) | Scalable toggle point control circuitry for a clustered decode pipeline | |
US20230195456A1 (en) | System, apparatus and method for throttling fusion of micro-operations in a processor | |
US20210200538A1 (en) | Dual write micro-op queue | |
CN113568663A (zh) | 代码预取指令 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20201210 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20211130 |