JP3871884B2 - 記憶からロードへの転送のための機構 - Google Patents
記憶からロードへの転送のための機構 Download PDFInfo
- Publication number
- JP3871884B2 JP3871884B2 JP2000571340A JP2000571340A JP3871884B2 JP 3871884 B2 JP3871884 B2 JP 3871884B2 JP 2000571340 A JP2000571340 A JP 2000571340A JP 2000571340 A JP2000571340 A JP 2000571340A JP 3871884 B2 JP3871884 B2 JP 3871884B2
- Authority
- JP
- Japan
- Prior art keywords
- storage
- load
- byte
- address
- queue
- 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 - Fee Related
Links
- 238000012546 transfer Methods 0.000 title claims description 62
- 230000007246 mechanism Effects 0.000 title description 8
- 239000013598 vector Substances 0.000 claims description 101
- 230000015654 memory Effects 0.000 claims description 48
- 238000000034 method Methods 0.000 claims description 28
- 230000004044 response Effects 0.000 claims description 10
- 206010038933 Retinopathy of prematurity Diseases 0.000 description 44
- 238000010586 diagram Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 9
- 239000000872 buffer Substances 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 6
- 230000003466 anti-cipated effect Effects 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 5
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 230000001360 synchronised effect Effects 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- 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/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
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)
Description
【発明の背景】
1.技術分野
この発明はプロセッサの分野に関し、より特定的には、メモリ依存性検査および記憶データのその後のロードへの転送に関する。
【0002】
2.背景技術
EP−A−0 651 331はスーパーパイプラインのスーパースカラマイクロプロセッサに対する書込バッファを開示する。データハザードまたはリードアフタライト(RAW)依存性などの依存性を検出するための設備が与えられ、そこで読取命令の読取物理アドレスは書込バッファのすべてのエントリにおける各物理アドレス値に対して比較される。RAWハザードの場合には、データを書込動作からその後の読取に転送するために、読取は書込動作によって書込まれるためのバイトの部分集合を形成するバイトのみを含むという条件が満たされる必要がある。
US−A−5 606 670は、アウトオブオーダ実行コンピュータシステムにおけるロード動作のために出力バッファ付記憶データに記憶バッファの信号を送るための方法および装置を開示する。バッファ付メモリ記憶動作の実行状態を考慮して、メモリロード動作が発行される時間に機能的に依存するバッファ付メモリ記憶動作の変動可能な部分集合からメモリロード動作に対する記憶データを条件付転送する記憶転送回路が設けられる。
スーパースカラプロセッサは、クロックサイクル当たり複数の命令を発行および実行し、かつ設計に一致する可能な限り高いクロック周波数を用いることによって高性能を達成することを試みる。時とともに、スーパースカラプロセッサの性能を増加させるために、スーパースカラプロセッサによって同時に発行および/または実行可能な命令の数が増加してきた。
【0003】
不運なことに、より多くの命令が同時に実行されるために、ロードを迅速に処理することがより重要になってきた。ロードは、ロードによってアクセスされる記憶場所に記憶されるデータがプロセッサ(たとえば内部レジスタ)に伝達されるような(内部レジスタに対向する)外部メモリへのアクセスである。これに対して記憶は、プロセッサによって生成されるデータが記憶によってアクセスされる記憶場所に記憶されるような外部メモリへのアクセスである。ロードおよび記憶が外部メモリにアクセスすることが定められる一方で、プロセッサ内部の1つまたはそれ以上のキャッシュを用いて、キャッシュ内でヒットしたアクセスに対するメモリ待ち時間を減少させてもよい。
【0004】
ロードがデータをメモリからプロセッサに伝達し、典型的にはデータはその後の命令演算によって動作され得るため、データをその後の命令演算に与えるためにロードを迅速に処理することが重要である。データが迅速に与えられないと、その後の命令演算が停止する。実行のためのスケジューリングにその他の命令が利用可能でないとき、全体の命令スループットが減少し得る(したがって性能が減少し得る)。スーパースカラプロセッサがより多数の命令を同時に発行/実行することを試みると、これらの効果ば増加し得る。したがって迅速なロード処理の要求も増加する。
【0005】
加えて、プロセッサ内で同時に発行/実行される命令の数が増加すると、記憶キュー内にある記憶の数も平均的に増加し得る。典型的には、記憶が推論的でないことが知られるまでは、記憶はメモリ(キャッシュまたは外部)に制約されない。たとえば、記憶はリタイアされるまで制約されなくてもよい。記憶はメモリに制約できるまで記憶キュー内に置かれ、記憶のアドレスオペランドおよび記憶されるデータを用いて生成される記憶アドレスを含む。
【0006】
記憶キュー内のより多数の記憶は単独では性能の問題を示さないかもしれないが、より多数の記憶はロードの迅速な処理に対する性能の問題を間接的に示し得る。記憶キュー内の記憶の数が増加すると、ロードによってアクセスされるデータが記憶キュー(キャッシュ/外部メモリに対向して)にある可能性が増加する。さらに、ロードによってアクセスされるいくつかのバイトは記憶キュー内の1つの進行中の記憶によって変更され、一方、ロードによってアクセスされる他のバイトは記憶キュー内の別の進行中の記憶によって変更される可能性も増加する。またさらに、ロードによって用いられる記憶データが記憶キュー内で利用可能でない可能性が増加する。これらの事象がより頻繁に起こると、迅速なロード処理への障壁がより大きくなり得る。
【0007】
【発明の開示】
前述に概説した問題の大部分は、ロードに記憶転送を与えるよう構成されたロード/記憶ユニットによって解決される。このロード/記憶ユニットは、その他のバイトと独立してロードによってアクセスされる各バイトに対するそこに含まれる記憶キューをサーチし、そのバイトを更新するための最新の記憶(プログラム順序で)を判定する。したがって、ロードによってアクセスされる1つまたはそれ以上のバイトが1つの記憶によって変更され、一方ロードによってアクセスされる1つまたはそれ以上のその他のバイトが別の記憶によって変更されたとしても、この転送機構はロードによってアクセスされるバイトをアセンブルできる。有利なことに、ロードデータが記憶キューに記憶されていれば、ロードデータはそこから転送されてもよい。より特定的には、ロードデータは任意の数の記憶から正確に転送されてもよい。たとえば、転送は0記憶(記憶キューが空であるか、または特定のロードに対して記憶キュー内にヒットが検出されないとき)、1記憶(その記憶がロードによってアクセスされる各バイトを更新するために最新であるとき)、または最大N記憶(ここでNはロードによってアクセスされるバイトの数)から起こってもよい。ロードを迅速に処理できるため、このロード/記憶ユニットを含むプロセッサ全体の性能が増加し得る。
【0008】
特定の実施例の1つにおいては、ロード/記憶ユニットはロードおよび記憶のアドレスの最下位ビットの予め定められたセットからビットベクトルを生成する。このビットベクトルは、最下位ビットの数によって定められた範囲内の各バイトに対するビットを含む。このビットは、そのバイトが(記憶ビットベクトルに対して)更新されたか、または(ロードビットベクトルに対して)アクセスされるか否かを示す。次いでロード/記憶ユニットは各バイトの最新の更新を配置するためにビットベクトルを調べてもよい(および、ビットベクトルを生成するために用いられた最下位ビットを除く、記憶およびロードアドレスの残りのビットを比較してもよい)。ビットベクトルは各アクセス/更新されたバイトを個別に識別するため、各バイトの最新の更新を配置するための処理は各バイトに対して独立に(および並行して)行なわれてもよい。さまざまな記憶キューエントリから選択されたバイトは次いでともにマージされ、ロードによってアクセスされるバイトのセットを形成する。
【0009】
概して、記憶キューからのロードによってアクセスされる記憶データの転送のための方法が予期される。ロードによってアクセスされる第1のバイトは記憶キュー内の第1の記憶キューエントリから選択される。第1の記憶キューエントリに対応する第1の記憶は、第1のバイトを更新するために、プログラム順序において最新である。ロードによってアクセスされる第2のバイトは記憶キュー内の第2の記憶キューエントリから選択され、この第2の記憶キューエントリは第1の記憶キューエントリとは異なる。第2の記憶キューエントリに対応する第2の記憶は、第2のバイトを更新するためにプログラム順序において最新である。第2のバイトの選択は第1のバイトの選択と独立である。
【0010】
ロード/記憶ユニットが予期される。ロード/記憶ユニットは、まだデータキャッシュにリタイアされていない記憶に対応し、そこに結合される論理を転送するアドレスおよびデータを記憶するよう構成された記憶キューを含む。転送論理はロードアドレスを受取るためにさらに結合され、ロードアドレスに対応するロードによってアクセスされる複数のバイトの各々1つに対して独立に、記憶キューに記憶されるどの記憶がその複数のバイトの1つの最新の更新であるかを判定するよう構成される。記憶キュー内の1つの記憶から複数のバイトのうちの少なくとも1つが提供可能であり、記憶キュー内の別の記憶からは複数のバイトのうち別の少なくとも1つを与えることができる。
【0011】
さらにプロセッサが予期される。このプロセッサは、1つまたはそれ以上のアドレス生成ユニットを含む少なくとも1つの実行コアを含む。アドレス生成ユニットは、記憶に対応するロードおよび記憶アドレスに対応するロードアドレスを生成するよう構成される。プロセッサは実行コアに結合されるロード/記憶ユニットをさらに含み、このロード/記憶ユニットは、プロセッサ内で処理中の記憶に対する記憶アドレスと対応する記憶データとを記憶するよう構成される記憶キューを含む。加えてロード/記憶ユニットは、ロードアドレスを受取り、かつロードに対応する記憶データが記憶キューに記憶されているときにはロードに対応する記憶データを記憶キューから転送するよう構成される。ロード/記憶ユニットは、特定のロードによってアクセスされる各バイトに対し、バイトごとに基づいてそこからデータを独立に転送するための記憶キュー内の特定の記憶を選択するよう構成される。
【0012】
この発明のその他の目的および利点については、以下の詳細な説明を読み、添付の図面を参照することによって明らかになるであろう。
【0013】
この発明にはさまざまな変更および代替形が可能であるため、特定の実施例は例として図面中に示し、ここに詳細に説明する。しかしその図面および詳細な説明はこの発明を開示される特定の形に制限することを意図するものではなく、反対に添付の請求項によって定められるこの発明の趣旨および範囲内にあるすべての変更形、同等のものおよび代替形を含むことを意図するものであることが理解されるべきである。
【0014】
【この発明を実行するためのモード】
図1は、プロセッサ10の実施例の1つを示すブロック図である。その他の実施例も可能であり予期される。図1の実施例において、プロセッサ10はラインプレディクタ12と、命令キャッシュ(I−キャッシュ)14と、アラインメントユニット16と、分岐履歴表18と、間接アドレスキャッシュ20と、復帰スタック22と、デコードユニット24と、プレディクタミスデコードユニット26と、マイクロコードユニット28と、マップユニット30と、マップサイロ32と、アーキテクチャ改名ブロック34と、1対の命令キュー36A−36Bと、1対のレジスタファイル38A−38Bと、1対の実行コア40A−40Bと、ロード/記憶ユニット42と、データキャッシュ(D−キャッシュ)44と、外部インターフェイスユニット46と、PCサイロおよびリダイレクトユニット48と、命令TLB(ITB)50とを含む。ラインプレディクタ12は、ITB50と、プレディクタミスデコードユニット26と、分岐履歴表18と、間接アドレスキャッシュ20と、復帰スタック22と、PCサイロおよびリダイレクトブロック48と、アラインメントユニット16と、I−キャッシュ14とに接続される。I−キャッシュ14はアラインメントユニット16に接続される。アラインメントユニット16はプレディクタミスデコードユニット26およびデコードユニット24にさらに接続される。デコードユニット24はマイクロコードユニット28およびマップユニット30にさらに接続される。マップユニット30はマップサイロ32と、アーキテクチャ改名ブロック34と、命令キュー36A−36Bと、ロード/記憶ユニット42と、実行コア40A−40Bと、PCサイロおよびリダイレクトブロック48とに接続される。命令キュー36A−36Bは互いに接続され、またそれぞれの実行コア40A−40Bおよびレジスタファイル38A−38Bに接続される。レジスタファイル38A−38Bは互いに接続され、またそれぞれの実行コア40A−40Bに接続される。実行コア40A−40Bはロード/記憶ユニット42と、データキャッシュ44と、PCサイロおよびリダイレクトユニット48とにさらに接続される。ロード/記憶ユニット42はPCサイロおよびリダイレクトユニット48と、D−キャッシュ44と、外部インターフェイスユニット46とに接続される。D−キャッシュ44はレジスタファイル38に接続され、外部インターフェイスユニット46は外部インターフェイス52に接続される。ここで参照番号とそれに続く記号とによって参照される構成要素は、参照番号のみによって集合的に参照される。たとえば、命令キュー36A−36Bは命令キュー36として集合的に参照される。
【0015】
概して、ロード/記憶ユニット42はロードのためにそこに含まれる記憶キューからの転送を与える。転送機構はロードの各バイトに対してその他のバイトとは独立に記憶キューをサーチし、そのバイトを更新するために(プログラム順序で)最新の記憶を判定する。したがって、ロードによってアクセスされる1つまたはそれ以上のバイトが1つの記憶によって変更され、一方ロードによってアクセスされる1つまたはそれ以上の他のバイトが別の記憶によって変更されたとしても、転送機構はロードによってアクセスされるバイトをアセンブルできる。有利なことに、ロードデータが記憶キューに記憶されているときにはロードデータは記憶キューから転送できる。ロードを迅速に処理できるため、プロセッサ10全体の性能を増加できる。
【0016】
ここで用いる「プログラム順序」という語は、実行されるプログラムにおいて特定化される命令のシーケンスを示す。(プログラム順序において)ある特定の記憶と転送が試みられるロードとの間の他の記憶がバイトを更新しないとき、その特定の記憶はバイトを更新するためにプログラム順序において最新である。
【0017】
特定の実施例の1つにおいて、ロード/記憶ユニット42は、ロードおよび記憶のアドレスの最下位ビットの予め定められたセットからビットベクトルを生成する。ビットベクトルは最下位ビットの数によって定められた範囲内の各バイトに対するビットを含む。ビットはそのバイトが(記憶ビットベクトルに対して)更新されたか、または(ロードビットベクトルに対して)アクセスされるか否かを示す。たとえば、セットされたビットはそのバイトが更新/アクセスされたことを示してもよく、クリアされたビットはそのバイトが更新/アクセスされないことを示してもよい。代替的には、クリアされたビットがそのバイトが更新/アクセスされたことを示し、セットされたビットがそのバイトが更新/アクセスされないことを示してもよい。記憶アドレスは記憶キューに記憶されるため、ロード/記憶ユニット42は記憶ビットベクトルを生成してもよく、またデータキャッシュ44およびロード/記憶ユニット42への対応するロードアドレスの提出の際にロードビットベクトルを生成してもよい。次いでロード/記憶ユニット42は各バイトの最新の更新を配置するためにビットベクトルを調べてもよい(および、ビットベクトルを生成するために用いられた最下位ビットを除く、記憶およびロードアドレスの残りのビットを比較してもよい)。ビットベクトルは各アクセス/更新されたバイトを個別に識別するため、各バイトの最新の更新を配置するための処理は各バイトに対して独立に(および並行して)行なわれてもよい。さまざまな記憶キューエントリから選択されたバイトは次いでともにマージされ、ロードによってアクセスされるバイトのセットを形成する。
【0018】
なお、ロードおよび記憶は一般的にそれに関連するアドレスを有し、そのアドレスはロード/記憶によってアクセスまたは更新されたメモリ内のメモリの場所を識別する。プロセッサ10はロード/記憶の1つまたはそれ以上のアドレスオペランドを用いてアドレスを生成する。アドレスオペランドはレジスタ値および命令内にエンコードされる変位を含んでもよい。
【0019】
図1の実施例において、プロセッサ10はさまざまなバイト長の、複合命令セットコンピューティング(CISC)命令セットアーキテクチャを用いる。たとえばプロセッサ10はx86命令セットアーキテクチャ(IA−32とも呼ばれる)を用いてもよい。その他の実施例は、固定長命令セットアーキテクチャおよび減少命令セットコンピューティング(RISC)命令セットアーキテクチャを含む、その他の命令セットアーキテクチャを用いてもよい。図1に示される特定の特徴はこうしたアーキテクチャにおいて省略されてもよい。
【0020】
ラインプレディクタ12はI−キャッシュ14に対するフェッチアドレスを生成するよう構成され、アラインメントユニット16に命令演算のラインに関する情報を与えるよう付加的に構成される。一般的に、ラインプレディクタ12はプロセッサ10によって以前に推論的にフェッチされた命令演算のラインと、ラインのフェッチの際に選択される各ラインに対応する1つまたはそれ以上の次のフェッチアドレスとを記憶する。実施例の1つにおいて、ラインプレディクタ12は1Kエントリを記憶するよう構成され、その各々は命令演算の1ラインを定める。所望であれば、ラインプレディクタ12はデュアルポーティングなしにその各々を同時に読取および更新可能にするための、たとえば256エントリの4つのバンクに並べられてもよい。
【0021】
ラインプレディクタ12は次のフェッチアドレスをI−キャッシュ14に与えて、対応する命令バイトをフェッチする。I−キャッシュ14は命令バイトを記憶するための高速キャッシュメモリである。実施例の1つに従うと、I−キャッシュ14はたとえば256Kバイトの、64バイトのキャッシュラインを用いるフォーウェイセットアソシアティブ編成を含んでもよい。しかし、あらゆるI−キャッシュ構造が好適であり得る。加えて、命令演算の対応するラインに関するフェッチ情報に対する入力として、次のフェッチアドレスがラインプレディクタ12に戻される。次のフェッチアドレスは、PCサイロおよびリダイレクトユニット48に報告される例外状態に応答してITB50によって与えられるアドレスによって無効にされてもよい。
【0022】
ラインプレディクタによって与えられる次のフェッチアドレスは、ライン内の最後の命令に続くアドレスであってもよい(ラインが非分岐命令において終結するとき)。代替的には、次のフェッチアドレスはラインを終結させる分岐命令の目標アドレスであってもよい。さらに別の代替形においては、ラインは復帰命令によって終結されてもよく、この場合に次のフェッチアドレスは復帰スタック22から得られる。
【0023】
フェッチアドレスに応答して、ラインプレディクタ12はアラインメントユニット16に、フェッチアドレスにおいて開始する命令演算のラインに関する情報を与える。アラインメントユニット16はI−キャッシュ14からのフェッチアドレスに対応する命令バイトを受取り、与えられた命令演算情報に従って命令バイトを選択して発行位置のセットとする。より特定的には、ラインプレディクタ12はライン命令演算内の各命令に対するシフト量と、ラインを含む命令演算のセットへの命令のマッピングとを与える。命令は複数の命令演算に対応し得るため、その命令に対応するシフト量を複数の発生位置に対する命令バイトの選択に用いてもよい。発行位置は、ライン内の可能な命令演算の各々に対して与えられる。実施例の1つにおいては、命令演算のラインは最大6つの命令に対応する最大8つの命令演算を含んでもよい。一般的に、ここで用いる命令演算のラインとは、デコードユニット24に同時に発行される命令演算の群を示すものである。命令演算のラインは1つのユニットとしてマイクロプロセッサ10のパイプラインを通って命令キュー36に進行する。命令キュー36に記憶されると、個々の命令演算はあらゆる順序で実行されてもよい。
【0024】
デコードユニット24内の発行位置(およびそれに続く命令キュー36までのパイプライン段)は、それらのパイプライン段内のハードウェアに対するライン内の命令演算のプログラム順序を定める。アラインメントユニット16によって発行位置に整列された命令演算は、命令キュー36A−36B内に記憶されるまでその発行位置に留まる。したがって、第1の発行位置内の命令演算がプログラム順序において第2の発行位置内に同時にある命令演算に先行するとき、第1の発行位置は第2の発行位置に先行すると呼ばれてもよい。同様に、第1の発行位置内の命令演算がプログラム順序において第2の発行位置内に同時にある命令演算に後続するとき、第1の発行位置は第2の発行位置に後続すると呼ばれてもよい。発行位置内の命令演算は、ライン内のその他の命令演算に対して先行または後続すると呼ばれてもよい。
【0025】
ここで用いる命令演算(またはROP)とは、実行コア40A−40B内の実行ユニットが単一のエンティティとして実行するように構成されるような演算のことである。簡単な命令は単一の命令演算に対応してもよく、より複雑な命令は複数の命令演算に対応してもよい。より複雑な命令のあるものはマイクロコードルーチンとしてマイクロコードユニット28内で実現されてもよい。さらに、非CISC命令セットを用いる実施例は、各命令に対する単一の命令演算を用いてもよい(すなわち、こうした実施例においては命令および命令演算は同義であってもよい)。特定の実施例の1つにおいては、ラインは最大6つの命令に対応する最大8つの命令演算を含んでもよい。加えて特定の実施例においては、分岐命令が検出されたときに6つの命令および/または8つの命令演算よりも少ないところでラインを終結させてもよい。望みに応じてラインに対する命令演算に関する付加的な制限を用いてもよい。
【0026】
ラインプレディクタ12によって生成される次のフェッチアドレスは分岐履歴表18、間接アドレスキャッシュ20および復帰スタック22に経路付けされる。分岐履歴表18は、次のフェッチアドレスによって識別されるラインを終結させ得る条件付き分岐命令に対する分岐履歴を与える。ラインプレディクタ12は分岐履歴表18によって与えられる予測を用いて、ラインを終結する条件付き分岐命令がテークンと予測されるべきか、ノットテークンと予測されるべきかを定めてもよい。実施例の1つにおいて、ラインプレディクタ12はテークンまたはノットテークンを選択するために用いられる分岐予測を記憶してもよく、分岐履歴表18は、ラインプレディクタ予測をキャンセルして異なる次のフェッチアドレスを選択させ得るより正確な予測を与えるために用いられる。間接アドレスキャッシュ20は、頻繁に変化する間接分岐目標アドレスを予測するために用いられる。ラインプレディクタ12は次のフェッチアドレスとして、予め生成された間接目標アドレスを記憶してもよい。対応するラインが間接分岐命令によって終結されるとき、間接アドレスキャッシュ20はラインプレディクタ12によって与えられる次のフェッチアドレスを無効にしてもよい。さらにラインがサブルーチン呼出命令によって終結されるときには、命令演算のライン内の最後の命令に続くアドレスが復帰スタック22に押出されてもよい。ラインに対して可能な次のフェッチアドレスが復帰命令によって終結されるとき、復帰スタック22はその頂部に記憶されるアドレスをラインプレディクタ12に与える。
【0027】
前述のブロックに次のフェッチアドレスおよび命令演算情報を与えることに加え、ラインプレディクタ12はPCサイロおよびリダイレクトユニット48に次のフェッチアドレスおよび命令演算情報を与えるよう構成される。PCサイロおよびリダイレクトユニット48はフェッチアドレスおよびライン情報を記憶し、例外における命令フェッチのリダイレクトおよび命令の順序正しいリタイアに対する責を負う。PCサイロおよびリダイレクトユニット48は、プロセッサ10内で処理中であり得る複数のラインの命令演算に対応するフェッチアドレスおよび命令演算情報を記憶するための環状バッファを含んでもよい。命令のラインのリタイアの際に、PCサイロおよびリダイレクトユニット48は条件付き分岐および間接分岐の実行にそれぞれ従って分岐履歴表18および間接アドレスキャッシュ20を更新してもよい。例外を処理する際に、PCサイロおよびリダイレクトユニット48は例外を起こす命令に後続する復帰スタック22からのエントリを取除いてもよい。加えて、PCサイロおよびリダイレクトユニット48は例外を起こす命令の表示をマップユニット30、命令キュー36およびロード/記憶ユニット42に経路付けることによって、それらのユニットが例外を起こす命令および回復推論状態に後続する命令をキャンセルできるようにしてもよい。
【0028】
実施例の1つにおいて、PCサイロおよびリダイレクトユニット48は各命令演算にシーケンス番号(R♯)を割当てることによって、プロセッサ10内で処理中の命令演算の順序を識別する。PCサイロおよびリダイレクトユニット48はラインを伴う可能な命令演算の各々にR♯を割当ててもよい。ラインに含まれるものが命令演算の最大数よりも少ないとき、割当てられたR♯のいくつかはそのラインに対して用いられない。しかし、PCサイロおよびリダイレクトユニット48は命令演算の次のラインに対して次のR♯のセットを割当てるよう構成されてもよく、よって割当てられたが用いられないR♯は命令演算の対応するラインがリタイアされるまで用いられずに残る。この態様で、所与のラインに割当てられたR♯の部分はプロセッサ10内のラインを識別するために用いられてもよい。実施例の1つにおいては、最大8つのROPがラインに割当てられてもよい。したがって、各ライン内の第1のROPには8の倍数のR♯が配置されてもよい。したがって用いられないR♯は自動的に飛ばされる。
【0029】
前述に、次のアドレスを予測して命令演算のラインに対する命令演算情報を与えるラインプレディクタ12を説明した。この動作は各フェッチアドレスがラインプレディクタ12にヒットする限り起こる。ラインプレディクタ12にミスを検出すると、アラインメントユニット16は対応する命令バイトをI−キャッシュ14からプレディクタミスデコードユニット26に経路付ける。プレディクタミスデコードユニット26は、ミスしたフェッチアドレスによって特定されるオフセットにおいて始まる命令をデコードし、命令演算情報のラインと次のフェッチアドレスとを生成する。プレディクタミスデコードユニット26は、命令演算のライン上のあらゆる制限をプロセッサ10が設計されたとおり(たとえば、命令演算の最大数、命令の最大数、分岐命令の終結など)に強制する。ラインのデコードを完了する際に、プレディクタミスデコードユニット26は記憶のために情報をラインプレディクタ12に与える。なお、プレディクタミスデコードユニット26は命令がデコードされるときに命令をディスパッチするよう構成されてもよい。図1において、このオプションを点線によって例示する。代替的には、プレディクタミスデコードユニット26は命令情報のラインをデコードしてそれを記憶のためにラインプレディクタ12に与えてもよい。続いて、ミスしたフェッチアドレスがラインプレディクタ12中で再び試みられてもよく、ヒットが検出され得る。さらに、ラインプレディクタ12中のヒットが検出されてI−キャッシュ14中のミスが起こり得る。対応する命令バイトは外部インターフェイスユニット46を通じてフェッチされ、I−キャッシュ14に記憶されてもよい。
【0030】
実施例の1つにおいて、ラインプレディクタ12およびI−キャッシュ14は物理アドレス指定を用いる。しかし、例外を検出する際には、PCサイロおよびリダイレクトユニット48には論理(または仮想)アドレスが供給される。したがって間接アドレスはラインプレディクタ12(および対応する命令バイトを読取るために並行してI−キャッシュ14)に提出するためにITB50によって変換される。加えてPCサイロおよびリダイレクトユニット48は、相対分岐目標アドレスなどのPC相対計算に用いるための仮想ルックアヘッドPC値を維持する。各ラインに対応する仮想ルックアヘッドPCがITB50によって変換されることにより、対応する物理アドレスがラインプレディクタ12によって生成される物理フェッチアドレスと整合することが証明される。不整合が起こると、ラインプレディクタ12は正しい物理アドレスによって更新され、正しい命令がフェッチされる。PCサイロおよびリダイレクトユニット48はさらに、保護バウンダリを超えるフェッチなどに関する例外を取扱う。PCサイロおよびリダイレクトユニット48はまた、最新のリタイアされた命令のアドレスを示すリタイアPC値を維持する。この実施例において、PCサイロおよびリダイレクトユニット48は命令演算のラインを同時にリタイアしてもよい。したがって、PCサイロおよびリダイレクトユニット48はラインのR♯表示をマップユニット30、命令キュー36A−36B、およびロード/記憶ユニット42に送ってもよい。
【0031】
前述のとおり、デコードユニット24は複数の発行位置においてアラインメントユニット16から命令演算を受取るよう構成される。デコードユニット24は、各発行位置に対して並行に(命令バイトに対応するどの命令演算が特定の発行位置において生成されるかの表示に沿って)整列された命令バイトをデコードする。デコードユニット24は各命令演算に対するソースおよびデスティネーションオペランドを識別し、実行コア40A−40Bによって用いられる命令演算符号化を生成する。デコードユニット24はまた、マイクロコード中で実現される命令に対するマイクロコードユニット28からのマイクロコードルーチンをフェッチするよう構成される。
【0032】
特定の実施例の1つに従うと、次の命令演算はプロセッサ10によって支持される。すなわち整数と、浮動小数点付加(マルチメディアを含む)と、浮動小数点乗算(マルチメディアを含む)と、分岐と、ロードと、記憶アドレス生成と、記憶データとである。各命令演算は最大2つのソースレジスタオペランドと1つのデスティネーションレジスタオペランドとを用いてもよい。特定の実施例の1つに従うと、整数結果と状態コード(またはフラグ)更新との両方を記憶するために、単一のデスティネーションレジスタオペランドが整数ROPに割当てられてもよい。対応する論理レジスタはどちらも整数演算のリタイアの際に対応するPR♯を受取る。ある種の命令は、2つのデスティネーションレジスタを更新するために同じタイプの2つの命令演算を生成してもよい(たとえば、ESPおよび特定化されたデスティネーションレジスタを更新するPOPなど)。
【0033】
デコードされる命令演算と、ソースおよびデスティネーションレジスタ数とがマップユニット30に与えられる。マップユニット30は、物理レジスタ数(PR♯)を各デスティネーションレジスタオペランドおよび各命令演算のソースレジスタオペランドに割当てることによってレジスタ改名を行なうよう構成される。物理レジスタ数はレジスタファイル38A−38B内のレジスタを識別する。加えてマップユニット30は、キュー数(IQ♯)を各命令演算に割当てて、命令演算を記憶するために割当てられる命令キュー36A−36B内の場所を識別する。マップユニット30は、命令演算のソースオペランドに割当てられる各物理レジスタ数を更新する命令のキュー番号を与えることによって、各命令演算に対する依存性の表示を付加的に与える。マップユニット30は、物理レジスタ数と各命令演算に割当てられる数に対する命令(および対応する論理レジスタ数)とによってマップサイロ32を更新する。さらにマップサイロ32は、命令のラインに先行する論理レジスタに対応するルックアヘッド状態と、PCサイロに関する命令のラインを識別するR♯とを記憶するよう構成されてもよい。前述のPCサイロと同様に、マップサイロ32はエントリの環状バッファを含んでもよい。各エントリは命令演算の1つのラインに対応する情報を記憶するよう構成されてもよい。
【0034】
マップユニット30およびマップサイロ32はさらにPCサイロ48からリタイア命令を受取るよう構成される。命令演算のラインをリタイアする際に、マップサイロ32はラインに割当てられるデスティネーション物理レジスタ数と対応する論理レジスタ数とを記憶のためにアーキテクチャ改名ブロック34に運ぶ。アーキテクチャ改名ブロック34は各論理レジスタに対する制約されたレジスタ状態を表わす、各論理レジスタに対応する物理レジスタ数を記憶する。新たな物理レジスタ数によって対応する論理レジスタが更新される際にアーキテクチャ改名ブロック34から変位される物理レジスタ数は、その後の命令に対する配置のために物理レジスタ数のフリーリストに戻される。実施例の1つにおいては、物理レジスタ数をフリーリストに戻す前に、その物理レジスタ数はアーキテクチャ改名ブロック34内の残りの物理レジスタ数と比較される。物理レジスタ数が変位された後にもアーキテクチャ改名ブロック34内に表わされるとき、その物理レジスタ数はフリーリストに加えられない。こうした実施例は、同じ物理レジスタ数を用いて命令の1つ以上の結果を記憶する場合に用いられてもよい。たとえば、x86命令セットアーキテクチャを用いる実施例は、浮動小数点オペランドを記憶するために十分に大きい物理レジスタを与え得る。この態様で、あらゆるタイプのオペランドを記憶するためにあらゆる物理レジスタが用いられてもよい。しかし、整数オペランドおよび状態コードオペランドは所与の物理レジスタ内の空間を完全には用いない。こうした実施例においては、プロセッサ10は命令の整数結果および状態コード結果の両方を記憶するために単一の物理レジスタを割当ててもよい。物理レジスタに対応する状態コード結果をオーバーライトする命令のその後のリタイアは同じ整数レジスタを更新しなくてもよく、よって物理レジスタは新たな状態コード結果を制約する際に自由ではない可能性がある。同様に、物理レジスタに対応する整数レジスタを更新する命令のその後のリタイアは状態コードレジスタを更新しなくてもよく、よって物理レジスタは新たな整数結果を制約する際に自由ではない可能性がある。
【0035】
さらに、マップユニット30およびマップサイロ32はPCサイロ48から例外表示を受取るよう構成される。例外を起こす命令演算を含むラインに続く命令演算のラインは、マップサイロ32内で無効とマークされる。命令演算のその後のラインに対応する物理レジスタ数はリタイアのための対応するラインの選択の際に解放される(かつ、アーキテクチャ改名ブロック34は無効化されたデスティネーションレジスタによって更新されない)。加えて、マップユニット30によって維持されるルックアヘッドレジスタ状態は、例外を起こす命令に対応するルックアヘッドレジスタ状態に復元される。
【0036】
命令演算のラインと、ソース物理レジスタ数と、ソースキュー数と、デスティネーション物理レジスタ数とはマップユニット30によって割当てられるキュー数に従って命令キュー36A−36Bに記憶される。実施例の1つに従うと、命令キュー36A−36Bは対称であり、あらゆる命令を記憶できる。さらに、いずれかの命令キューに記憶されるその他の命令演算に関して特定の命令演算に対する依存性が起こり得る。たとえば、マップユニット30は命令演算のラインを一方の命令キュー36A−36Bに記憶し、続く命令演算のラインを他方の命令キュー36A−36Bに記憶してもよい。命令演算は、少なくともその命令演算が実行のためにスケジューリングされるまでは命令キュー36A−36B中に残る。実施例の1つにおいて、命令演算はリタイアされるまで命令キュー36A−36B中に残る。
【0037】
命令キュー36A−36Bは、特定の命令演算を実行のためにスケジューリングする際に、その特定の命令演算がどのクロックサイクルにおいてレジスタファイル38A−38Bを更新するかを定める。実行コア40A−40B内の異なる実行ユニットは異なる数のパイプライン段(すなわち異なる待ち時間)を用いてもよい。さらに、特定の命令はパイプライン内で他のものよりも長い待ち時間を経験してもよい。したがって(いくつかのクロックサイクル中の)特定の命令演算に対する待ち時間を測定するカウントダウンが生成される。命令キュー36A−36Bは(レジスタファイルを読取る依存性命令演算に先行して、またはそれと同時に更新が起こるまで)特定された数のクロックサイクルを待ち、次いでその特定の命令演算に依存する命令演算がスケジューリングされ得ることを示す。たとえば特定的な実施例の1つにおいては、依存性命令演算はそれらがレジスタファイル38A−38Bの更新に関して依存する命令演算に2クロックサイクル先行してスケジューリングされてもよい。別の実施例においては、依存性命令演算をそれらがレジスタファイル38A−38Bの完了および更新に関して依存す命令演算に先行または後続する異なる数のクロックサイクルでスケジューリングしてもよい。各命令キュー36A−36Bはその命令キュー内の命令演算に対するカウントダウンを維持し、カウントダウンの終了の際に内部で依存性命令演算がスケジューリングされるようにする。加えて、その命令キューはカウントダウンの終了の際に他方の命令キューに表示を与える。その後、他方の命令キューが依存性命令演算をスケジューリングしてもよい。この、他方の命令キューへの命令演算完了の遅延した伝達によって、レジスタファイル38A−38Bは実行コア40A−40Bの一方によって与えられる結果を他方のレジスタファイルに伝搬できる。各レジスタファイル38A−38Bはプロセッサ10によって用いられる物理レジスタのセットを実現し、実行コア40A−40Bの一方によって更新される。この更新は次いで他方のレジスタファイルに伝搬される。なお、命令キュー36A−36Bはその依存性が満たされるときに(すなわちキュー内の順序に関してアウトオブオーダで)命令をスケジューリングしてもよい。
【0038】
命令キュー36Aからスケジューリングされた命令演算はレジスタファイル38Aからのソース物理レジスタ数に従ってソースオペランドを読取り、実行のために実行コア40Aに運ばれる。実行コア40Aは命令演算を実行し、レジスタファイル38A内のデスティネーションに割当てられた物理レジスタを更新する。いくつかの命令演算はデスティネーションレジスタを有さず、この場合に実行コア40Aはデスティネーション物理レジスタを更新しない。加えて、実行コア40Aは命令演算のR♯と命令演算に関する例外情報(あれば)とをPCサイロおよびリダイレクトユニット48に伝達する。命令キュー36B、レジスタファイル38Bおよび実行コア40Bは類似の態様で動作してもよい。
【0039】
実施例の1つにおいて、実行コア40Aおよび実行コア40Bは対称である。各実行コア40はたとえば浮動小数点付加ユニット、浮動小数点乗算ユニット、2つの整数ユニット、分岐ユニット、ロードアドレス生成ユニット、記憶アドレス生成ユニット、および記憶データユニットなどを含んでもよい。実行ユニットのその他の構成も可能である。
【0040】
デスティネーションレジスタを有さない命令演算には、記憶アドレス生成、記憶データ演算、および分岐演算などがある。記憶アドレス/記憶データ演算は結果をロード/記憶ユニット42に与える。ロード/記憶ユニット42はメモリデータ演算を行なうためにD−キャッシュ44にインターフェイスを与える。実行コア40A−40Bは命令のアドレスオペランドに基づいてロードROPおよび記憶アドレスROPを実行し、それぞれロードおよび記憶アドレスを生成する。より特定的には、ロードアドレスおよび記憶アドレスは実行コア40A−40Bによる生成の際に(実行コア40A−40BおよびD−キャッシュ44の間の接続を介して直接的に)D−キャッシュ44に提出されてもよい。D−キャッシュ44にヒットしたロードアドレスによってデータはD−キャッシュ44からレジスタファイル38に経路づけられる。他方で、ヒットした記憶アドレスは記憶キューエントリを割当てられる。続いて、(記憶データをレジスタファイル38A−38Bからロード/記憶ユニット42に経路づけるために用いられる)記憶データ命令演算によって記憶データが与えられる。したがってこの実施例において、記憶は記憶アドレス命令演算および記憶データ命令演算を含んでもよい。言い換えると、この記憶アドレス命令演算および対応する記憶データ命令演算は同じ命令に由来する。記憶は命令であってもよく、またはメモリデスティネーションオペランドを有する別の命令の暗黙部分であってもよい。記憶命令のリタイアの際に、データはD−キャッシュ44に記憶される。加えて、ロード/記憶ユニット42は(外部インターフェイス46を介して)続くキャッシュフィルのためにD−キャッシュ44をミスしたロード/記憶アドレスを記憶し、かつミスしたロード/記憶演算を再び試みるためのロード/記憶バッファを含んでもよい。ロード/記憶ユニット42はロード/記憶メモリ依存性を取扱うためにさらに構成される。
【0041】
図2に、プロセッサ10の部分の実施例の1つのブロック図を示す。その他の実施例も可能であり予期される。図2の実施例において、記憶アドレス生成ユニット(AGU)40AA、ロードAGU40ABおよび記憶データユニット40ACが示される。記憶AGU40AA、ロードAGU40ABおよび記憶データユニット40ACは実行コア40A(図1に示す)に含まれる。実施例の1つにおいて、実行コア40Bが同様に構成されてもよい。代替的には、実行コア40Bは図2に例示される実行ユニットの1つまたはそれ以上を省略してもよい。図2には記憶変換バッファ(TB)40ADおよびロードTB40AEが付加的に例示されており、これらは実行コア40Aに含まれていてもよい。D−キャッシュ44およびロード/記憶ユニット42が例示されており、このロード/記憶ユニット42はロード/記憶キュー60と、転送論理62と、記憶キュー64とを含む。最後に、回転/マルチプレクサ回路66が示される。記憶AGU40AAは記憶TB40ADに接続され、さらにD−キャッシュ44、ロード/記憶キュー60および記憶キュー64に接続される。ロードAGU40ABはロードTB40AEに接続され、さらにデータキャッシュ44、ロード/記憶キュー60および転送論理62に接続される。記憶データユニット40ACは記憶キュー64に接続される。PCサイロ48も記憶キュー64に接続される。記憶キュー64、転送論理62およびデータキャッシュ44は回転/マルチプレクサ回路66に接続され、さらにレジスタファイル38A−38Bに接続される。データキャッシュ44はロード/記憶キュー60および記憶キュー64に接続される。実行コア40Bはこの実施例において、データキャッシュ44、ロード/記憶キュー60、転送論理62および記憶キュー64にも接続される。
【0042】
記憶AGU40AAは記憶アドレスROPを実行し、その記憶アドレスROPが由来する記憶に対応する記憶アドレスを生成する。生成されるアドレスは仮想アドレス(VA)であり、物理アドレス(PA)への変換のために記憶TB40ADに運ばれる。あらゆる好適な変換機構が用いられてもよく、変換機構は一般的にプロセッサ10によって用いられる命令セットアーキテクチャに従って定められる。たとえば、プロセッサ10の実施例の1つはx86命令セットアーキテクチャを用いる。こうした実施例において、仮想アドレスは最初にセグメンテーション機構を通じて線形アドレスに変換される論理アドレスである。論理アドレスおよび線形アドレスが同等であるフラットアドレス指定モードが用いられてもよい。線形アドレスはページング機構を通じて物理アドレスに変換される。記憶TB40ADは変換を迅速に行なうために最近用いられた変換を記憶する。所与のアドレスに対する変換が記憶TB40ADに見出されないとき、変換バッファリロードシーケンスが行なわれて対応する変換のために外部メモリに記憶される変換情報がサーチされる。
【0043】
記憶キュー64はプロセッサ10内で処理中の(すなわち発行されてまだリタイアされていない)記憶に対応するアドレスとデータとを記憶する。この実施例においてより特定的には、記憶キュー64は実行されたがまだリタイアされていない記憶を保持する。したがって記憶キュー64は記憶TB40ADから物理記憶アドレスおよび対応するR♯を受取るよう構成される。アドレスを受取ると、記憶キュー64は記憶のための記憶キューエントリを配置してそこに記憶アドレスを置く。記憶キュー64は実行コア40B内の記憶AGU/記憶TB構造から物理記憶アドレスを同様に受取ってもよい。
【0044】
その後、記憶に対応する記憶データROPは記憶データユニット40ACによって実行される。記憶データユニット40ACは記憶データROPに割当てられるR♯に沿って記憶データを記憶キュー64に伝送する。記憶キュー64は記憶データを、対応する記憶に割当てられる記憶キューエントリに記憶する。記憶キュー64は実行ユニット40B内の記憶データユニットからの記憶データを同様に受取ってもよい。
【0045】
記憶AGU40AAおよび記憶TB40ADの動作と同様に、ロードAGU40ABおよびロードTB40AEはロードROPに対応するロード物理アドレスを生成し、そのロード物理アドレスを転送論理62に伝達する。転送論理62はロードによってアクセスされたバイトが記憶キュー64に記憶されるか否かを定める。アクセスされたバイトの各々を個々に処理することにより、転送論理62はそのバイトに対する最新の記憶のための記憶キュー64をサーチする。更新が置かれると、バイトが記憶キュー64から選択されて回転/マルチプレクサ回路66に与えられる。この態様で、アクセスされたバイトの各々は記憶キュー64内のバイトの最新の更新から与えられる(更新がそのバイトに対して置かれるとき)。場合に応じて、各バイトが個別の記憶から与えられてもよく、または2つまたはそれ以上のバイトが同じ記憶から与えられる一方でその他のバイトは異なる記憶から与えられてもよく、または同じ記憶がすべてのアクセスされたバイトを与えてもよい。したがって記憶キュー64から選択されたアクセスされたバイトは効果的にマージされて回転/マルチプレクサ回路66におけるロードデータを与える。
【0046】
転送論理62はまた、選択および回転制御を回転/マルチプレクサ回路66に与える。ロードROPが記憶キュー64内の記憶から転送されたデータを受取ったことを転送論理62が検出すると、転送論理62は回転/マルチプレクサ回路66に記憶キュー64から与えられたデータを選択するよう信号を送る。加えて、記憶キュー64から与えられたデータはメモリの順序である(すなわちバイトはバイト場所の記憶キュー64内に、対応する記憶のアドレスに従って整列されて記憶される)。データはレジスタファイル38A−38Bでの記憶のために適切に整列されるよう回転されてもよい。転送論理62もこの信号を与える。最後に、ロードROPが記憶キュー64から転送されるデータを受取らないことを転送論理62が検出すると、転送論理62は回転/マルチプレクサ回路66にデータキャッシュ44の出力を選択するよう信号を送る。
【0047】
なお、ロードROPはロードROPによってアクセスされる記憶データを与える記憶データROPよりも前に実行されてもよい。このような場合、記憶キュー64はアクセスされたバイトの代わりに記憶データROPのR♯を与えてもよい。ロードROPは記憶データROPのスケジューリングに続いて実行のために再スケジューリングされてもよい。ロード/記憶ユニット42は、記憶データがロードへの転送のために利用可能でないときに命令キュー36A−36Bに信号を送って(その後のあらゆるスケジューリングされたROPと同様に)ロードの再スケジューリングを許してもよい。加えてマップユニット30は、記憶データが利用可能でないロードヒット記憶の場合を予測するよう構成されてもよい。記憶データROPのR♯がPCサイロ48に与えられることによって、(記憶データが利用可能でない)その後のロードヒット記憶シナリオの予測において用いるためにマップユニット30に記憶命令に関する情報を与えてもよい。
【0048】
前述に従って記憶キュー64にロードおよび記憶アドレスを与えることに加え、ロードおよび記憶アドレスはデータキャッシュ44におけるヒットが検出されたかどうかを判定するためにデータキャッシュ44に提出される。ロードROPに対し、データキャッシュ44のヒットが検出されると、データはデータキャッシュ44からレジスタファイル38A−38Bに転送される。ロードROPがデータキャッシュ44をミスしたとき、ロードROPはその後の再試行のために(および、ロードROPがロード/記憶キュー60のヘッドに達し、かつW/Oがより早いメモリ演算からのキャッシュフィルを介したD−キャッシュ44におけるヒットとなることが推論的でないとき、最終的にはメモリからのミスしたキャッシュラインをフェッチするための外部インターフェイスユニット46への伝送のために)ロード/記憶キュー60に記憶される。データキャッシュ44に再試行される際に、ロードROPは転送論理62にも運ばれることによって、記憶キュー64内の記憶データがロードROPに対して転送されるかどうかが定められる。(実行コア40Aまたは40Bのいずれかより)データキャッシュ44に対して試みられた各ロードROPに対するヒット/ミス表示はロード/記憶キュー60に運ばれることによって、そのロードROPがそこに記憶されるかどうかが定められる。記憶アドレスROPに対し、ヒット/ミス表示はその記憶が(ロードROPと同様に)ロード/記憶キュー60のエントリに割当てられるかどうかを判定する。しかし記憶アドレスROPはそのヒット/ミス状態にかかわらず記憶キュー64に割当てられる。なお、あらゆる数のエントリが用いられてもよいが、例示的な実施例の1つにおいてロード/記憶キュー60は128エントリを含んでもよく、記憶キュー64は64エントリを含んでもよい。
【0049】
PCサイロ48は記憶キュー64にリタイア制御信号を与える。前述のとおり、この実施例においてPCサイロ48はROPのラインを同時にリタイアする。PCサイロ48はリタイアされたROPのR♯を記憶キュー64に与えることにより、記憶キュー64にデータキャッシュ44に対して制約するための記憶データを選択させてもよい。特定の記憶をすぐに制約できないとき(たとえばその記憶がデータキャッシュ44におけるミスであるとき、または1つ以上の記憶が同時にリタイアされるとき)、記憶キュー64はその特定の記憶のリタイアを記録し、続いて記憶データを制約してもよい。
【0050】
なお、図2(および以下のその他の図面)に示す実施例においては、記憶からロードへの転送を行なうために物理アドレスを用いるが、仮想アドレス、論理アドレスまたは線形アドレスを用いるその他の実施例も予期される。さらに、前述の実施例において実行コア40Bは実行コア40Aと同じロード/記憶実行リソースを有する(すなわち実行コア40Aおよび40Bは実行リソースに関して対称である)ものとして説明されたが、その他の実施例では望みに応じて非対称実行リソースを用いてもよい。
【0051】
図3に、記憶キュー64および転送論理62の実施例の1つを例示するブロック図を示す。その他の実施例も可能であり予期される。図3に示すとおり、記憶キュー64は記憶アドレスキュー64Aと、記憶ビットベクトルキュー64Bと、記憶データキュー64Cとを含む。加えて図3には1対のビットベクトルジェネレータ70Aおよび70Bが示される。図3には、図面の簡略化のために1つのロードアドレスに対するデータの転送を例示する。図2に示すとおり、記憶キュー64は最大3つのロードROP(実行コア40Aおよび40Bから各々1つ、およびロード/記憶キュー60から再試行されるロードのために1つ)に対するロードデータを供給するよう構成されてもよい。他のロードROPのために類似のハードウェアが用いられてもよい。この考察に対して、ロード情報はロードTB40AEから受取られるものとして説明され、記憶アドレス情報は記憶TB40ADからのものとして説明されるであろう。記憶データ情報は記憶データユニット40ACから受取られるものとして説明されるであろう。しかし、図2に示されるものを含む各情報に対するその他のソースが実現される。さらに、転送の目的のために仮想アドレスが用いられる実施例においては、アドレスはAGUから直接受取られてもよい。
【0052】
ビットベクトルジェネレータ70Aは、ロードTB40AEからロードアドレスの予め定められた数の最下位ビットと、ロードの大きさの表示(すなわちロードアドレスにおいて始まるアクセスされるバイトの数)とを受取るよう接続され、さらに転送論理62に接続される。同様に、ビットベクトルジェネレータ70Bは記憶TB40ADから記憶アドレスの予め定められた数の最下位ビットと、記憶の大きさとを受取るよう接続され、記憶ビットベクトルキュー64Bに接続される。なお、ロードが1つの大きさのみである実施例においては、大きさの情報は省略されてもよい。記憶ビットベクトルキュー64Bおよび記憶アドレスキュー64Aは転送論理62に接続され、さらにマルチプレクサ(muxes)のセット72A−72Hと回転/マルチプレクサ回路66とに接続される。マルチプレクサ72A−72Hは回転/マルチプレクサ回路66および記憶データキュー64Cに接続される。記憶データキュー64Cは記憶データユニット70ACから記憶データと対応するR♯とを受取るよう接続され、またリタイアR♯を受取るためにPCサイロ48に接続される。さらに記憶データキュー64Cは記憶TB40ADから記憶アドレスROPに対応するR♯を受取るように接続される。記憶アドレスキュー64Aは記憶TB40ADから記憶アドレスを受取り、ロードTB40AEからロードアドレスを受取るよう接続される。より特定的には、記憶アドレスキュー64Aはビットベクトルジェネレータ70Aによって受取られる最下位ビットを除くアドレスを受取るよう結合される。
【0053】
ビットベクトルジェネレータ70Aおよび70Bに受取られた予め定められた数の最下位ビットは、アクセスまたは更新されたバイトが存在し得るバイトの範囲を定める。言い換えると、最下位ビットを除くアドレスはバイトの範囲内にあるバイトのセットに対して同じである。ビットベクトルジェネレータ70A−70Bはその範囲内の各バイトに対するビットを有するビットベクトルを生成する。ビットはバイトが対応するロードまたは記憶に応答してアクセス/更新されるときにはセットされ、バイトが対応するロードまたは記憶に応答してアクセス/更新されないときにはクリアされる。ビットベクトルジェネレータ70Bによって生成された記憶ビットベクトルは、記憶ビットベクトルキュー64Bに記憶される。したがって、記憶ビットベクトルは記憶キュー64に提出される各記憶アドレスに対して生成される。ビットベクトルジェネレータ70Aによって生成されるロードビットベクトルは転送論理62に与えられる。
【0054】
ロードアドレスの残りのビット(ロードビットベクトルを形成するために用いられたビットを除く)は記憶アドレスキュー64Aに与えられる。ロードアドレスは、記憶アドレスキュー64Aに記憶される記憶アドレスと比較される。記憶アドレスキュー64Aはたとえば、そこに記憶される記憶アドレスに対するロードアドレスのための内容アドレスメモリ(CAM)であってもよい。代替的な構成も可能である。与えられたロードアドレスに整合する記憶アドレスを含む記憶アドレスキュー64A内の各エントリは、転送論理62に「ヒット」信号を発行する。
【0055】
ロードビットベクトルおよび記憶アドレスキュー64Aからのヒット信号に加え、転送論理62は記憶キュー64内の記憶に対応する記憶ビットベクトルを受取る。転送論理62は各バイトを独立に処理して、ロードビットベクトル中の対応するビットを調べてバイトがアクセスされたかどうかを定め、各記憶ビットベクトル中の対応するビットを調べてバイトが対応する記憶によって更新されたかどうかを判定する。(記憶ビットベクトル中の対応するビットおよび記憶アドレスキュー64Aからの対応する発行されたヒット信号を介して)バイトが更新されたことを示す各記憶キューエントリは、記憶キュー内の記憶のプログラム順序に従ってバイトに対する最新の更新をピックする転送論理62内のピックワン回路に関係する。選択されたバイトは、転送論理62によってマルチプレクサ72に発行された選択信号を介して記憶データキュー64Cから検索される。各マルチプレクサ72A−72Hは記憶キュー64内の異なるバイトに対応する。たとえばマルチプレクサ72Aは、転送論理62の制御下で記憶キュー64内の各エントリのバイト0位置からロードデータのバイト0を選択する。同様に、マルチプレクサ72Hは転送論理62の制御下で記憶キュー64内の各エントリのバイト7位置からロードデータのバイト7を選択する。その他のバイト位置はその他のマルチプレクサによって選択される(簡略化のため図3には示さず)。加えて転送論理62はロードデータバイトが記憶キュー64から与えられたかどうかを定め、回転/マルチプレクサ回路66に選択制御を与えることによって回転/マルチプレクサ回路66の入力としてマルチプレクサ72から与えられるデータバイトを選択する。
【0056】
転送論理62からは回転制御も与えられる。データバイトは記憶キュー64Cにメモリの順序で(すなわち、この例示的な実施例の8バイトデータキューエントリに対する8バイトバウンダリなど、キューエントリの大きさであるバウンダリに対して整列されるメモリブロック内の記憶場所に対応するキューエントリ内のバイト場所に)記憶される。メモリに対するロードおよび記憶は記憶場所に関してあらゆる整列を有してもよいのに対し、レジスタ内のバイト場所は固定される。したがってマルチプレクサ72によって与えられるデータバイトの回転は、バイトをレジスタファイルに対して整列するために行なわれてもよい。
【0057】
一般的に、記憶キュー64内のエントリは、記憶に対応する記憶アドレスROPの実行の際に割当てられる。エントリは記憶アドレスキュー64A中のエントリと、記憶ビットベクトルキュー64B中のエントリと、記憶データキュー64C中のエントリとを含む。たとえば図3に例示されるエントリ76A、76Bおよび76Cは、記憶キュー64中の記憶キューエントリを含んでもよい。記憶アドレス(ビットベクトルを生成するために用いられる最下位ビットを除く)は記憶アドレスキュー64Aに記憶され、対応する記憶ビットベクトルは記憶TB40ADから記憶アドレスを受取る際に記憶ビットベクトルキュー64Bに記憶される。加えて、対応する記憶データROPに対応するR♯は、記憶TB40ADから記憶アドレスを受取る際に記憶データキュー64Cに記憶される。この実施例において、記憶データROPはROPの同じライン内の記憶アドレスROPを継続する。したがって、対応するR♯は1つずつ増加する記憶アドレスROPのR♯である。
【0058】
続いて、対応する記憶データROPは記憶データユニット40ACによって実行され、R♯および記憶データは記憶データキュー64Cに与えられる。記憶データユニット40ACによって与えられるR♯が記憶データキュー64Cに記憶されるR♯と比較されることにより、その記憶データが記憶されるべきエントリが定められる。記憶データキュー64Cはたとえば、実施例の1つにおいて記憶データ演算のR♯に対するCAMとして実現されてもよい。代替的な構成も可能である。R♯における適合が検出されるエントリがデータを記録する。記憶データキュー64Cはそのデータが妥当であることを示す妥当ビットを付加的に含んでもよい。CAM整合は妥当ビットをセットするために用いられもよい。データが妥当でないとき、記憶データキュー64Cはデータの代わりにマルチプレクサ72A−72Hへの入力として記憶データ演算のR♯を与えてもよい。代替的には、データがまだ妥当でないときにR♯を自動的に与えるために、記憶データキュー64C内の各バイト場所にR♯が記憶されてもよい。
【0059】
この例示的な実施例において、ビットベクトルは16ビットを含むのに対し、記憶データキューはエントリ当り最大8バイトの記憶データを記憶する。よってこの例示的な実施例は記憶当り最大8バイトの記憶データを支持する。しかし、整列されない8バイト値の明白な支持を可能にするために16ビットのビットベクトルが支持される。言い換えると、16ビットを有するビットベクトルによって、あらゆる整列されない8バイト量を0および1のマスクとして表わし得る。たとえばビットベクトルが8ビットのとき、全体のビットベクトルは記憶の整列にかかわらず(およびロードによってアクセスされるバイトが記憶によって更新されたかどうかにかかわらず)8バイト記憶に対するものとなる。一般的に、Nを単一の記憶によって更新可能なバイトの最大数とするとき、2Nビットのビットベクトルを用いることが望ましい。
【0060】
なお、この例示的な実施例においては16ビットを有するビットベクトルが実現され、8バイトロードおよび記憶はこの例示的な実施例において支持される最大ロードおよび記憶であるため、ビットベクトル内の特定のビットは互いに排他的である。たとえば、ビットベクトルによって示される範囲内のバイト0に対応するビットと、その範囲内のバイト8に対応するビットとは互いに排他的である。バイト0がアクセス/更新されたと示されるとき、バイト8はアクセス/更新されたと示されることができない。同様に、バイト1およびバイト9は互いに排他的である、などである。加えて、ビットベクトル内のバイト0またはバイト8のいずれかに対応するバイトは記憶データキュー64C内のバイト0位置に記憶される。したがって、ピック論理はビットベクトル位置0および8を調べた結果を論理的にORして、記憶データキュー64Cのバイト0に対する選択制御を生成してもよい。しかしその結果をORする前に、対応するバイトがロードによりアクセスされかつ対応する記憶によって更新されたかどうかを判定するために、ビットは独立に調べられる。
【0061】
PCサイロ48はリタイアされたROPのラインを示すリタイアR♯を与える。記憶データキュー64Cは、リタイアR♯を記憶データキュー64Cに記憶されるR♯と比較する。例示的な実施例の1つに従うと、記憶データキュー64CはリタイアR♯に関してCAMとして動作してもよい。代替的な構成も可能であり予期される。リタイアR♯上のCAMは、PCサイロ48によって与えられるR♯を有するラインを識別するR♯の部分のみを比較してもよい。あらゆる検出された整合は、そのキューエントリ中の記憶がリタイアされてD−キャッシュ44に制約され得ることを示す。記憶キュー64は、たとえばその記憶がD−キャッシュ44に制約され得るか否かを示すビットを各エントリに含んでもよい。そのビットはリタイアR♯の比較に従ってセットされてもよい。記憶がリタイアされたと示されると、D−キャッシュ44への伝送のために記憶が記憶キュー64から選択されてもよい。D−キャッシュ44を更新する際に、記憶は記憶キュー64から削除されてもよい。
【0062】
なお、この説明および図3においては、特定のビット範囲およびその他の特徴の大きさが示されるが、これらの範囲および大きさは単に例示的なものであって、設計選択の問題によって変化し得る。さらに、ビットベクトルジェネレータ70A−70Bを用いることに対する代替形として、アドレス生成ユニットを構成して対応するビットベクトルを生成してもよい。さらに、前述のCAM構造の代替形の1つとして、比較を行なうためにそこに接続される分離したコンパレータ回路を有するレジスタ中でキューエントリを実現してもよい。その他の代替形も可能である。
【0063】
図4に、図3に示す分離したマルチプレクサ回路72A−72Hを除去し得る記憶データキュー64Cの例示的な実施例を示す。図3に示されるものを含む、その他の代替的な構成も予期される。図4に示すとおり、記憶データキュー64Cは図3において各マルチプレクサ72A−72Hの出力として例示されるロードバイトバスのセットに接続される。各記憶キューエントリのバイト0はロード、バイト0バスに接続される。同様に、各記憶キューエントリのバイト1はロード、バイト1バスに接続される、などである。これまでマルチプレクサ72A−72Hに与えられていた選択信号は、代わりに各キューエントリにイネーブル信号として与えられる。キューエントリ内の各バイトに対して1つのイネーブル信号が与えられる。そのバイトに対するイネーブル信号がアサートされると、キューエントリはそこに接続されるバス上のバイトを駆動する。イネーブル信号がデアサートされると、キューエントリはそこに接続されるバス上のバイトを駆動しない。この構成は典型的に「ワイヤードOR」構成と呼ばれる。
【0064】
図5に、転送論理62の実施例の1つの一部分のブロック図を示す。その他の実施例も可能であり予期される。図5の実施例において、転送論理62は複数のピックワン回路(ロードに転送され得る各バイトに対して1つ、たとえば特定の実施例の1つにおいては8つのピックワン回路)を含む。たとえば、図5においてはピックワン回路80Aおよび80Bが示される。加えて転送論理62に組合せ論理が与えられることによって、ビットベクトルジェネレータ70Aおよび記憶ビットベクトルキュー64Bからのビットベクトル、ならびに記憶アドレスキュー64Aに対するヒット信号が処理される。たとえば、組合せ論理82Aは記憶キューエントリ0に対するバイト0および8を処理するために与えられる。同様に、組合せ論理82Bは記憶キューエントリ1に対するバイト0および8を処理し、組合せ論理82Cおよび82Dはそれぞれ記憶キューエントリ0および1に対するバイト1および9を処理する。その他の組合せ論理(図示せず)はその他のバイトおよび/またはその他の記憶キューエントリを処理する。
【0065】
ピックワン回路80Aは記憶データキュー64Cからバイト0を選択する。ピックワン回路80Bは記憶データキュー64Cからバイト1を選択する。その他のピックワン回路(図5には示さず)はバイト2から7を選択するために用いられる。ピックワン回路80Aおよび80Bは、各記憶キューエントリに対してそのエントリがロードによってアクセスされる特定のバイトを更新する記憶を記憶しているか否かを判定する組合せ論理からの入力信号を受取るように各々接続される。たとえば組合せ論理82Aは、記憶キューエントリ0中の記憶がビットベクトルによって定められるバイトの範囲内でバイト0またはバイト8(それぞれSBV0(0)およびSBV0(8))を更新し、かつ対応するバイト0またはバイト8がロード(それぞれLBV(0)およびLBV(8))によってアクセスされるかどうかを判定する。その結果得られる判断は、ともに論理的にORされ(例示的な実施例においてアクセスバイト0およびバイト8は互いに排他的であるため)、エントリ0(ST0ヒット)に対する記憶アドレスキュー64Aに対するヒット信号と組合される。バイトがロードによってアクセスされ、(対応するビットベクトルによって示されるとおり)記憶によって更新されて、ロードおよび記憶アドレス(ビットベクトルの生成に用いられたビットを除く)が整合するとき、組合せ論理はピックワン回路に信号をアサートし、記憶キューエントリはピックワンに関係する。そうでないとき、信号はピックワン論理回路にデアサートされ、記憶キューエントリはピックワンに関係しない。
【0066】
同様に、組合せ論理82Bは記憶キューエントリ1(図5のSBV1)からの記憶キュービットベクトルと、ロードビットベクトルと、記憶キューエントリ1(図5のST1ヒット)に対する記憶アドレスキューヒット信号とを分析することによって、信号をアサート/デアサートする。組合せ論理82Cおよび82Dは、バイト1および9に対する記憶およびロードビットベクトル(組合せ論理82Cに対して記憶キューエントリ0、および組合せ論理82Dに対して記憶キューエントリ1)からのビットを調べる。
【0067】
ピックワン回路は互いに独立して、ピックワン回路が割当てられるバイトの最新の更新を選択する。たとえばピックワン回路80Aは、バイト0および8に対するビットベクトル表示および記憶アドレスキューヒット信号に応答して、記憶データキュー64Cからバイト0を選択する。それとは独立に、ピックワン回路80Bは記憶データキュー64Cからバイト1を選択する。したがって、ピックワン回路80Aはマルチプレクサ72A(図3)に選択信号を与えるか、または各キューエントリ(図4)のバイト0に対するイネーブル信号を与える。同様に、ピックワン回路80Bはロードデータ(図3)のバイト1を与えるために接続されたマルチプレクサに選択信号を与えるか、または各キューエントリ(図4)のバイト1に対するイネーブル信号を与えてもよい。実施例の1つにおいて、記憶キュー64はキュー中の最も古いエントリを示すヘッドポインタと最新のエントリを示すテールポインタとを有する円形先入れ先出し(FIFO)バッファとして実現されてもよい。エントリが削除される際にエントリをシフトする代わりに、ヘッドおよびテールポインタは増加および減少されるされることによってキューに記憶を付加および削除する。こうした実施例のためにピックワン回路80A−80Bはヘッドおよびテールポインタを受取り、組合せ論理82A−82Dなどの組合せ論理からの入力信号から、テールポインタによって示されるエントリに対応する信号からヘッドポインタによって示されるエントリに対応する信号までを走査する。このような実施例に対して、記憶は記憶キュー64にプログラム順序で割当てられてもよい。代替的には、所望であれば記憶キュー内の記憶の順序を定めるためにR♯を用いてもよい。
【0068】
なお、記憶キューからのバイトの選択に関係する記憶キューエントリの論理的決定を例示するために、図5においては組合せ論理82A−82Dを示すが、あらゆる好適な論理を用いてもよい。所望に応じて、入力信号の検知(アサート/デアサート)は代替的な組合せ論理を与えるために変化させてもよく、論理ゲートの論理的に同等のセットが同様に用いられてもよい。さらに、回転/マルチプレクサ回路66に対する選択および回転制御を生成するために付加的な論理ブロック(図5に示さず)を用いてもよい。選択制御は転送のための記憶キュー64からのバイトの選択に基づいてもよく、回転制御は(メモリおよび記憶データキュー64C内のバイトの整列を定める)最下位ロードアドレスビットと、(デスティネーションレジスタにいくつのバイトが転送されるかを定める)ロードの大きさとに基づいてもよい。
【0069】
図6に、記憶キューエントリの例示的なセットからの転送の例を示す。図6には記憶アドレスキュー64Aと、記憶ビットベクトルキュー64Bと、記憶データキュー64Cとが示される。例においては簡潔のため、5つのエントリを示す。しかし記憶キューはあらゆる好適な数のエントリを含んでもよい。たとえば例示的な実施例の1つにおいて、記憶キュー64は64のエントリを含んでもよい。記憶アドレスキュー64Aはエントリ90A−90Eを含む。記憶ビットベクトルキュー64Bは対応するエントリ92A−92Eを含み、記憶データキュー64Cは対応するエントリ94A−94Eを含む。言い換えると、エントリ90A、92Aおよび94Aは記憶キュー64の第1のエントリを含む。同様に、エントリ90B、92Bおよび94Bは記憶キュー64の第2のエントリを含む、などである。この例において、記憶キューヘッドポインタは、エントリ90A、92Aおよび94Aを含むエントリがキュー中で最も古いエントリであることを示し、記憶キューテールポインタは、エントリ90E、92Eおよび94Eを含むエントリが最新のエントリであることを示す。残りのエントリは最古のエントリと最新のエントリとの間に存在する。
【0070】
記憶アドレスキューエントリ90A、90B、90Dおよび90Eの各々は特定のアドレスA1を記憶する。記憶アドレスキューエントリ90Cは異なるアドレスA2を記憶する。各記憶に対応するビットベクトルは記憶ビットベクトルキューエントリ92A−92E中に例示されており、記憶データは記憶データキューエントリ94A−94E中に例示される。
【0071】
この例において、ロードは図6に例示されるとおりアドレスA1およびロードビットベクトルを有して行なわれる。ロードビットベクトルに従って、4つのバイト(バイト11、10、9および8)がアクセスされる。記憶ビットベクトルキュー64B中のビットベクトルを調べて、アクセスされるバイトへの以下の更新が示される。すなわち、エントリ92Bおよび92Eのビットベクトルはバイト11への更新を示し、エントリ92Bおよび92Dのビットベクトルはバイト10への更新を示し、エントリ92Bおよび92Cのビットベクトルはバイト9および8への更新を示す。しかし、(ビットベクトルキューエントリ92Cに対応する)記憶アドレスキューエントリ90CのアドレスはアドレスA2を記憶する。ロードはアドレスA1にアクセスするため、エントリ90C、92Cおよび94C中の記憶は転送の配慮から削除される。したがって、ピックワン回路は92Bおよび92Eに対応するエントリからのバイト11と、エントリ92Bおよび92Dからのバイト10と、エントリ92Bからのバイト9および8とに対して最新の更新を走査する。
【0072】
前述のとおり、テールポインタは最新のエントリが90Eに対応するエントリであることを示し、一方ヘッドポインタは最も古いエントリが90Aに対応するエントリであることを示す。したがって、バイト11はエントリ94Eから選択され、バイト10はエントリ94Dから選択され、バイト9および8はエントリ94Bから選択される。バイト11は記憶データキュー内のバイト位置3であり、同様にバイト10はバイト位置2であり、バイト9はバイト位置1であり、バイト8はバイト位置0である。したがって、ロードに対して転送されたデータは(16進法で)76 DD DE F0である。値76はエントリ94Eのバイト位置3から得られる。値DDはエントリ94Dのバイト位置2から得られる。値DEおよびF0はエントリ94Bの(それぞれ)バイト位置1および0から得られる。この例において、これらの値は記憶データキュー64C内に太字で例示される。
【0073】
この例が例示するとおり、バイトが2つまたはそれ以上の異なる記憶から得られたものであっても、ロードによってアクセスされるバイトはアセンブルされてもよい。ロードデータは任意の数の記憶から正確に転送され得ることが有利である。たとえば、転送は0記憶(記憶キュー64が空であるか、または特定のロードに対して記憶キュー64においてヒットが検出されないとき)、1記憶(その記憶がロードによってアクセスされる各バイトを更新するために最新であるとき)、または最大N記憶(ここでNはロードによってアクセスされるバイトの数)から起こってもよい。
【0074】
図7に、バスブリッジ202を通じてさまざまなシステム構成要素に結合されるプロセッサ10を含むコンピュータシステム200の実施例の1つのブロック図を示す。その他の実施例も可能であり予期される。ここに示すシステムにおいて、主メモリ204はメモリバス206を通じてバスブリッジ202に結合され、グラフィックコントローラ208はAGPバス210を通じてバスブリッジ202に結合される。最後に、複数のPCIデバイス212A−212BがPCIバス214を通じてバスブリッジ202に結合される。EISA/ISAバス220を通じて1つまたはそれ以上のEISAまたはISAデバイス218に電子インターフェイスを提供するために、二次的なバスブリッジ216がさらに設けられてもよい。プロセッサ10は外部インターフェイス52を通じてバスブリッジ202に結合される。
【0075】
バスブリッジ202はプロセッサ10と、主メモリ204と、グラフィックコントローラ208と、PCIバス214に結合されるデバイスとの間のインターフェイスを提供する。バスブリッジ202に接続されたデバイスの1つから動作を受取ると、バスブリッジ202はその動作の目標を識別する(たとえば特定のデバイス、またはPCIバス214の場合にはその目標はPCIバス214上にある)。バスブリッジ202はその動作を目標デバイスに経路付ける。一般的にバスブリッジ202は、ソースデバイスまたはバスによって用いられるプロトコルから目標デバイスまたはバスによって用いられるプロトコルに動作を変換する。
【0076】
ISA/EISAバスにPCIバス214に対するインターフェイスを与えることに加え、二次的なバスブリッジ216は所望に応じて付加的な機能をさらに組入れてもよい。二次的なバスブリッジ216と一体化した、または外部からの入力/出力コントローラ(図示せず)をコンピュータシステム200に含ませることによって、所望に応じてキーボードおよびマウス222ならびにさまざまな直列および並列ポートに対する動作的支持を提供してもよい。他の実施例においては、プロセッサ10とバスブリッジ202との間の外部インターフェイス52に外部キャッシュユニット(図示せず)をさらに結合させてもよい。代替的には、外部キャッシュをバスブリッジ202に結合させてもよく、外部キャッシュに対するキャッシュ制御論理をバスブリッジ202に一体化させてもよい。
【0077】
主メモリ204は、アプリケーションプログラムが記憶されるメモリであり、そこからプロセッサ10が最初に実行される。好適な主メモリ204はDRAM(ダイナミックランダムアクセスメモリ)を含む。たとえば、主メモリ204はSDRAM(同期DRAM)の複数のバンクを含んでもよい。代替的には、主メモリ204はRAMBUS DRAM(RDRAM)またはその他のあらゆる好適なDRAMを含んでもよい。
【0078】
PCIデバイス212A−212Bは、さまざまな周辺デバイス、たとえばネットワークインターフェイスカード、映像加速器、音声カード、ハードまたはフロッピー(登録商標)ディスクドライブまたはドライブコントローラ、SCSI(小型コンピュータシステムインターフェイス)アダプタ、および電話カードなどを例示するものである。同様に、ISAデバイス218はさまざまなタイプの周辺デバイス、たとえばモデム、サウンドカード、およびGPIBまたはフィールドバスインターフェイスカードなどのさまざまなデータ獲得カードなどを例示するものである。
【0079】
グラフィックコントローラ208は、ディスプレイ226上のテキストおよび画像の解釈を制御するために設けられる。グラフィックコントローラ208は、主メモリ204中に、およびそこから効率的にシフトし得る3次元データ構造を解釈するために当該技術分野において一般的に公知の典型的なグラフィック加速器を実施してもよい。したがってグラフィックコントローラ208は、主メモリ204へのアクセスを得るためにバスブリッジ202内の目標インターフェイスへのアクセスを要求および受取ることのできるAGPバス210のマスタであってもよい。専用のグラフィックバスは主メモリ204からのデータの迅速な検索を提供する。特定の動作に対して、グラフィックコントローラ208はAGPバス210にPCIプロトコルトランザクションを生成するようにさらに構成されてもよい。よってバスブリッジ202のAGPインターフェイスはAGPプロトコルトランザクションならびにPCIプロトコル目標およびイニシエータトランザクションの両方を支持するための機能を含んでもよい。ディスプレイ226は画像またはテキストを示し得るあらゆる電子ディスプレイである。好適なディスプレイ226は陰極線管(“CRT”)、液晶ディスプレイ(“LCD”)などを含む。
【0080】
なお、前述の説明においては例としてAGP、PCI、およびISAまたはEISAバスを用いたが、所望に応じてあらゆるバスアーキテクチャが置き換えられてもよい。さらにコンピュータシステム200は、付加的なプロセッサ(たとえばコンピュータシステム200の任意の構成要素として示されるプロセッサ10aなど)を含む多重処理コンピュータシステムであってもよい。プロセッサ10aはプロセッサ10と類似のものであってもよい。より特定的には、プロセッサ10aはプロセッサ10と同一の複製品であってもよい。プロセッサ10aは(図7に示すように)プロセッサ10と外部インターフェイス52を共有してもよく、または独立のバスを介してバスブリッジ202に接続されてもよい。
【0081】
なお、ここではさまざまな信号がアサートおよびデアサートされるとして説明される。特定の信号は論理1値を有するときにアサートされ、論理0値を有するときにデアサートされるよう定められてもよい。代替的には、特定の信号は論理0値を有するときにアサートされ、論理1値を有するときにデアサートされるよう定められてもよい。特定の信号に対してどの定義が適用されるかは設計の選択上の問題である。
【0082】
【産業への適用性】
この発明はプロセッサおよびコンピュータシステムの分野に適用可能である。
【0083】
前述の開示を完全に評価すると、多数の修正形および変更形が当業者に明らかとなる。添付の請求項はこのような修正形および変更形のすべてを包含することを意図するものである。
【図面の簡単な説明】
【図1】 プロセッサの実施例の1つを示すブロック図である。
【図2】 データキャッシュ、ロード/記憶ユニット、および機能ユニットを含む、図1に示すプロセッサの1つの実施例の部分を示すブロック図である。
【図3】 図2に示すロード/記憶ユニットの実施例の1つに従った記憶キューおよび転送論理を例示するブロック図である。
【図4】 図3に示す記憶キューの記憶データ部分の例示的な実現例を例示する図である。
【図5】 図3に示す転送論理の実施例の1つを例示する図である。
【図6】 図2に示す記憶キューからの転送データの例を示す図である。
【図7】 図1に示すプロセッサを含むコンピュータシステムのブロック図である。
Claims (26)
- 記憶キューからロードによってアクセスされる記憶データを転送するための方法であって、
前記記憶キュー内の第1の記憶キューエントリから前記ロードによってアクセスされる第1のバイトを選択するステップを含み、前記第1の記憶キューエントリに対応する第1の記憶は前記第1のバイトを更新するためにプログラム順序において最新であり、さらに
前記記憶キュー内の第2の記憶キューエントリから前記ロードによってアクセスされる第2のバイトを選択するステップを含み、前記第2の記憶キューエントリは前記第1の記憶キューエントリと異なり、前記第2の記憶キューエントリに対応する第2の記憶は前記第2のバイトを更新するためにプログラム順序において最新であり、また前記第2のバイトを選択する前記ステップは、前記第1のバイトを選択する前記ステップと独立である、方法。 - 前記ロードに対応するロードアドレスの予め定められた数の最下位ビットによって定められる予め定められた範囲内の各バイトに対応するビットを有するロードビットベクトルを生成するステップをさらに含み、前記ビットは対応するバイトが前記ロードによってアクセスされるか否かを示し、さらに
前記第1の記憶に対応する第1の記憶アドレスの前記予め定められた数の最下位ビットによって定められる予め定められた範囲内の各バイトに対応するビットを有する第1の記憶ビットベクトルを生成するステップを含み、前記ビットは対応するバイトが前記第1の記憶によって更新されるか否かを示し、さらに
前記第2の記憶に対応する第2の記憶アドレスの前記予め定められた数の最下位ビットによって定められる予め定められた範囲内の各バイトに対応するビットを有する第2の記憶ビットベクトルを生成するステップを含み、前記ビットは対応するバイトが前記第2の記憶によって更新されるか否かを示す、請求項1に記載の方法。 - 第1のバイトを選択する前記ステップは
前記ロードビットベクトル内の対応するビットを調べて前記第1のバイトが前記ロードによってアクセスされることを判定するステップと、
前記第1の記憶ビットベクトル内の対応するビットを調べて前記第1の記憶が前記第1のバイトを更新することを判定するステップとを含む、請求項2に記載の方法。 - 前記予め定められた数の最下位ビットを除く前記ロードアドレスと前記第1の記憶アドレスとを比較するステップをさらに含み、前記第1のバイトを選択する
前記ステップは前記比較するステップに応答して行なわれる、請求項3に記載の方法。 - 第2のバイトを選択する前記ステップは
前記ロードビットベクトル内の対応するビットを調べて前記第2のバイトが前記ロードによってアクセスされることを判定するステップと、
前記第2の記憶ビットベクトル内の対応するビットを調べて前記第2の記憶が前記第2のバイトを更新することを判定するステップとを含む、請求項4に記載の方法。 - 前記予め定められた数の最下位ビットを除く前記ロードアドレスと前記第2の記憶アドレスとを比較するステップをさらに含み、前記第2のバイトを選択する前記ステップは前記比較するステップに応答して行なわれる、請求項5に記載の方法。
- 前記第1の記憶キューエントリに前記第1の記憶ビットベクトルを記憶し、前記第2の記憶キューエントリに前記第2の記憶ビットベクトルを記憶するステップをさらに含む、請求項2に記載の方法。
- 第1のバイトを選択する前記ステップおよび第2のバイトを選択する前記ステップと独立して前記記憶キューから前記ロードによってアクセスされる第3のバイトを選択するステップをさらに含む、請求項1に記載の方法。
- 第3のバイトを選択する前記ステップは、前記第1の記憶が前記第3のバイトを更新するためにプログラム順序において最新であることを判定するステップに応答して前記第1の記憶キューエントリから前記第3のバイトを選択するステップを含む、請求項8に記載の方法。
- 第3のバイトを選択する前記ステップは、前記第2の記憶が前記第3のバイトを更新するためにプログラム順序において最新であることを判定するステップに応答して前記第2の記憶キューエントリから前記第3のバイトを選択するステップを含む、請求項8に記載の方法。
- 記憶アドレス命令演算を実行する際に前記第1の記憶キューエントリを割当てるステップをさらに含む、請求項1に記載の方法。
- 記憶データ命令演算を実行する際にデータを前記第1の記憶キューエントリに記憶するステップをさらに含む、請求項11に記載の方法。
- 前記記憶アドレス命令演算および前記記憶データ命令演算を単一の命令から導くステップをさらに含む、請求項12に記載の方法。
- データキャッシュにまだリタイアされていない記憶に対応するアドレスおよびデータを記憶するよう構成される記憶キューと、
前記記憶キューに結合されかつロードアドレスを受取るための転送論理とを含み、前記転送論理は、前記ロードアドレスに対応するロードによってアクセスされる複数のバイトの各々1つに対して独立に、前記記憶キューに記憶される前記記憶のどの1つが前記複数のバイトの前記1つの最新の更新であるかを判定するよう構成され、前記転送論理は前記記憶キュー内の1つの記憶から前記複数のバイトの少なくとも1つを選択し、かつ前記記憶キュー内の別の記憶から前記複数のバイトの別の少なくとも1つを選択するよう構成される、ロード/記憶ユニット。 - 前記記憶キューに結合され、かつ各記憶アドレスの複数の最下位ビットを受取るための第1のビットベクトルジェネレータをさらに含み、前記第1のビットベクトルジェネレータは前記各記憶アドレスに対応する記憶ビットベクトルを生成するよう構成され、前記記憶ビットベクトルの各ビットはバイトに対応し、そのバイトが前記記憶によって更新されるか否かを示し、前記ロード/記憶ユニットは前記記憶キューに前記記憶ビットベクトルを記憶するよう構成される、請求項14に記載のロード/記憶ユニット。
- 前記転送論理に結合され、かつ前記ロードアドレスの複数の最下位ビットを受取るための第2のビットベクトルジェネレータをさらに含み、前記第2のビットベクトルジェネレータは前記ロードアドレスに対応するロードビットベクトルを生成するよう構成され、前記ロードビットベクトルの各ビットはバイトに対応し、そのバイトが前記ロードアドレスに対応するロードによってアクセスされるか否かを示す、請求項15
に記載のロード/記憶ユニット。 - 前記転送論理は、前記ロードビットベクトルと、前記記憶ビットベクトルと、前記ロードアドレス(前記複数の最下位ビットを除く)および前記記憶アドレス(前記複数の最下位ビットを除く)の比較の結果とを調べて、前記ロードによってアクセスされる各バイトに対する最新の更新を判定するよう構成される、請求項16に記載のロード/記憶ユニット。
- 1つまたはそれ以上のアドレス生成ユニットを含む少なくとも1つの実行コアを含み、前記アドレス生成ユニットはロードに対応するロードアドレスおよび記憶に対応する記憶アドレスを生成するよう構成され、さらに
前記実行コアに結合されるロード/記憶ユニットを含み、前記ロード/記憶ユニットはプロセッサ内で処理中の記憶に対する前記記憶アドレスおよび対応する記憶データを記憶するよう構成される記憶キューを含み、前記ロード/記憶ユニットは前記ロードに対応する記憶データが前記記憶キューに記憶されているときに、前記ロードアドレスを受取って前記記憶キューから前記ロードに対応する記憶データを転送するよう構成され、前記ロード/記憶ユニットは前記記憶キュー内の特定の記憶を選択し、そこから特定のロードによってアクセスされる各バイトに対してバイトごとに基づいて独立にデータを転送するよう構成される、プロセッサ。 - 前記実行コアは記憶データを前記ロード/記憶ユニットに届けるよう構成される記憶データユニットをさらに含む、請求項18に記載のプロセッサ。
- 前記記憶データユニットは記憶データ命令演算を実行するステップに応答して記憶データを届けるよう構成される、請求項19に記載のプロセッサ。
- 前記1つまたはそれ以上のアドレス生成ユニットは、記憶アドレス命令演算に応答して前記記憶アドレスを生成するよう構成される記憶アドレス生成ユニットを含む、請求項20に記載のプロセッサ。
- 前記プロセッサは前記記憶アドレス命令演算および前記記憶データ命令演算を同じ命令から導くよう構成される、請求項20に記載のプロセッサ。
- 前記ロード/記憶ユニットに結合される第2の実行コアをさらに含み、前記第2の実行コアは1つまたはそれ以上のアドレス生成ユニットを含み、前記アドレス生成ユニットはロードに対応するロードアドレスおよび記憶に対応する記憶アドレスを生成するよう構成される、請求項18に記載のプロセッサ。
- 前記実行コアおよび前記ロード/記憶ユニットに結合されるデータキャッシュをさらに含み、前記データキャッシュは前記記憶キュー中に前記データがないことに応答して前記特定のロードによってアクセスされるデータを与えるよう構成される、請求項18に記載のプロセッサ。
- 前記ロード/記憶ユニットは前記特定の記憶に対応する記憶ビットベクトルを生成するよう構成され、前記記憶ビットベクトルの各ビットはバイトに対応し、そのバイトが前記特定の記憶によって更新されるか否かを示し、前記ロード/記憶ユニットは前記記憶キューに前記記憶ビットベクトルを記憶するよう構成される、請求項18に記載のプロセッサ。
- 前記ロード/記憶ユニットは前記特定のロードに対応するロードビットベクトルを生成するよう構成され、前記ロードビットベクトルの各ビットはバイトに対応し、そのバイトが前記特定のロードによってアクセスされるか否かを示す、請求項25に記載のプロセッサ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/158,465 | 1998-09-22 | ||
US09/158,465 US6141747A (en) | 1998-09-22 | 1998-09-22 | System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word |
PCT/US1999/007332 WO2000017746A1 (en) | 1998-09-22 | 1999-04-03 | Mechanism for store to load forwarding |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002525742A JP2002525742A (ja) | 2002-08-13 |
JP2002525742A5 JP2002525742A5 (ja) | 2006-04-06 |
JP3871884B2 true JP3871884B2 (ja) | 2007-01-24 |
Family
ID=22568258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000571340A Expired - Fee Related JP3871884B2 (ja) | 1998-09-22 | 1999-04-03 | 記憶からロードへの転送のための機構 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6141747A (ja) |
EP (1) | EP1116103B1 (ja) |
JP (1) | JP3871884B2 (ja) |
KR (1) | KR100626858B1 (ja) |
DE (1) | DE69932066T2 (ja) |
WO (1) | WO2000017746A1 (ja) |
Families Citing this family (87)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000041182A1 (en) * | 1998-12-30 | 2000-07-13 | Intel Corporation | Memory array organization |
US7779236B1 (en) * | 1998-12-31 | 2010-08-17 | Stmicroelectronics, Inc. | Symbolic store-load bypass |
US6247097B1 (en) * | 1999-01-22 | 2001-06-12 | International Business Machines Corporation | Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions |
US6625723B1 (en) * | 1999-07-07 | 2003-09-23 | Intel Corporation | Unified renaming scheme for load and store instructions |
US6594754B1 (en) | 1999-07-07 | 2003-07-15 | Intel Corporation | Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters |
US6385676B1 (en) * | 1999-07-12 | 2002-05-07 | Hewlett-Packard Company | Coherent ordering queue for computer system |
US6481251B1 (en) | 1999-10-25 | 2002-11-19 | Advanced Micro Devices, Inc. | Store queue number assignment and tracking |
US6523109B1 (en) | 1999-10-25 | 2003-02-18 | Advanced Micro Devices, Inc. | Store queue multimatch detection |
US6591342B1 (en) * | 1999-12-14 | 2003-07-08 | Intel Corporation | Memory disambiguation for large instruction windows |
US6970996B1 (en) * | 2000-01-04 | 2005-11-29 | National Semiconductor Corporation | Operand queue for use in a floating point unit to reduce read-after-write latency and method of operation |
US7065632B1 (en) * | 2000-04-07 | 2006-06-20 | Ip First Llc | Method and apparatus for speculatively forwarding storehit data in a hierarchical manner |
US6678807B2 (en) * | 2000-12-21 | 2004-01-13 | Intel Corporation | System and method for multiple store buffer forwarding in a system with a restrictive memory model |
US7739483B2 (en) * | 2001-09-28 | 2010-06-15 | Intel Corporation | Method and apparatus for increasing load bandwidth |
US20030177312A1 (en) * | 2002-03-15 | 2003-09-18 | Aravindh Baktha | Controlling a store data forwarding mechanism during execution of a load operation |
US7085889B2 (en) | 2002-03-22 | 2006-08-01 | Intel Corporation | Use of a context identifier in a cache memory |
US7202942B2 (en) * | 2003-05-28 | 2007-04-10 | Doppler, Ltd. | System and method for measuring velocity using frequency modulation of laser output |
EP1462934A1 (en) * | 2003-03-29 | 2004-09-29 | Deutsche Thomson-Brandt Gmbh | Method and apparatus for forwarding of results |
US7177982B2 (en) * | 2004-01-16 | 2007-02-13 | International Business Machines Corporation | Method to maintain order between multiple queues with different ordering requirements in a high frequency system |
US7376817B2 (en) * | 2005-08-10 | 2008-05-20 | P.A. Semi, Inc. | Partial load/store forward prediction |
US20070288725A1 (en) * | 2006-06-07 | 2007-12-13 | Luick David A | A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism |
US7461238B2 (en) * | 2006-06-07 | 2008-12-02 | International Business Machines Corporation | Simple load and store disambiguation and scheduling at predecode |
US7594100B2 (en) * | 2006-09-29 | 2009-09-22 | Sun Microsystems, Inc. | Efficient store queue architecture |
US7600098B1 (en) * | 2006-09-29 | 2009-10-06 | Sun Microsystems, Inc. | Method and system for efficient implementation of very large store buffer |
US7640414B2 (en) * | 2006-11-16 | 2009-12-29 | International Business Machines Corporation | Method and apparatus for forwarding store data to loads in a pipelined processor |
US7752393B2 (en) * | 2006-11-16 | 2010-07-06 | International Business Machines Corporation | Design structure for forwarding store data to loads in a pipelined processor |
US7721066B2 (en) * | 2007-06-05 | 2010-05-18 | Apple Inc. | Efficient encoding for detecting load dependency on store with misalignment |
US8447911B2 (en) * | 2007-07-05 | 2013-05-21 | Board Of Regents, University Of Texas System | Unordered load/store queue |
US7849290B2 (en) * | 2007-07-09 | 2010-12-07 | Oracle America, Inc. | Store queue architecture for a processor that supports speculative execution |
US8645670B2 (en) * | 2008-02-15 | 2014-02-04 | International Business Machines Corporation | Specialized store queue and buffer design for silent store implementation |
US8627047B2 (en) * | 2008-02-15 | 2014-01-07 | International Business Machines Corporation | Store data forwarding with no memory model restrictions |
WO2010050947A1 (en) * | 2008-10-30 | 2010-05-06 | Hewlett-Packard Development Company, L.P. | Redundant array of independent disks (raid) write cache sub-assembly |
US20100250850A1 (en) * | 2009-03-25 | 2010-09-30 | Faraday Technology Corp. | Processor and method for executing load operation and store operation thereof |
US8914617B2 (en) * | 2009-12-26 | 2014-12-16 | Intel Corporation | Tracking mechanism coupled to retirement in reorder buffer for indicating sharing logical registers of physical register in record indexed by logical register |
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
US9128725B2 (en) | 2012-05-04 | 2015-09-08 | Apple Inc. | Load-store dependency predictor content management |
US9600289B2 (en) | 2012-05-30 | 2017-03-21 | Apple Inc. | Load-store dependency predictor PC hashing |
US20140244984A1 (en) * | 2013-02-26 | 2014-08-28 | Advanced Micro Devices, Inc. | Eligible store maps for store-to-load forwarding |
US9619382B2 (en) | 2013-08-19 | 2017-04-11 | Intel Corporation | Systems and methods for read request bypassing a last level cache that interfaces with an external fabric |
US9665468B2 (en) | 2013-08-19 | 2017-05-30 | Intel Corporation | Systems and methods for invasive debug of a processor without processor execution of instructions |
US9632947B2 (en) * | 2013-08-19 | 2017-04-25 | Intel Corporation | Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early |
US9361227B2 (en) | 2013-08-30 | 2016-06-07 | Soft Machines, Inc. | Systems and methods for faster read after write forwarding using a virtual address |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US9710268B2 (en) | 2014-04-29 | 2017-07-18 | Apple Inc. | Reducing latency for pointer chasing loads |
US9483409B2 (en) | 2015-02-05 | 2016-11-01 | International Business Machines Corporation | Store forwarding cache |
US9891824B2 (en) | 2015-04-24 | 2018-02-13 | International Business Machines Corporation | Sub-block input/output (I/O) commands for storage device including byte stream buffer |
US10514925B1 (en) | 2016-01-28 | 2019-12-24 | Apple Inc. | Load speculation recovery |
US10437595B1 (en) | 2016-03-15 | 2019-10-08 | Apple Inc. | Load/store dependency predictor optimization for replayed loads |
US10402168B2 (en) | 2016-10-01 | 2019-09-03 | Intel Corporation | Low energy consumption mantissa multiplication for floating point multiply-add operations |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10474375B2 (en) * | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10572376B2 (en) * | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10387319B2 (en) | 2017-07-01 | 2019-08-20 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features |
US10445451B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10380063B2 (en) | 2017-09-30 | 2019-08-13 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator |
US10417002B2 (en) | 2017-10-06 | 2019-09-17 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
US10606590B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Effective address based load store unit in out of order processors |
US10606591B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US11175924B2 (en) | 2017-10-06 | 2021-11-16 | International Business Machines Corporation | Load-store unit with partitioned reorder queues with single cam port |
US10572256B2 (en) | 2017-10-06 | 2020-02-25 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10579387B2 (en) | 2017-10-06 | 2020-03-03 | International Business Machines Corporation | Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor |
US10394558B2 (en) | 2017-10-06 | 2019-08-27 | International Business Machines Corporation | Executing load-store operations without address translation hardware per load-store unit port |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator |
US10445250B2 (en) | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with a configurable spatial accelerator |
US10565134B2 (en) | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US10459866B1 (en) | 2018-06-30 | 2019-10-29 | Intel Corporation | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11907713B2 (en) | 2019-12-28 | 2024-02-20 | Intel Corporation | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
US11379241B2 (en) * | 2020-07-30 | 2022-07-05 | International Business Machines Corporation | Handling oversize store to load forwarding in a processor |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0651331B1 (en) * | 1993-10-18 | 2002-01-09 | National Semiconductor Corporation | A write buffer for a superpipelined, superscalar microprocessor |
US5471598A (en) * | 1993-10-18 | 1995-11-28 | Cyrix Corporation | Data dependency detection and handling in a microprocessor with write buffer |
US5878245A (en) * | 1993-10-29 | 1999-03-02 | Advanced Micro Devices, Inc. | High performance load/store functional unit and data cache |
US5588126A (en) * | 1993-12-30 | 1996-12-24 | Intel Corporation | Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system |
US5784586A (en) * | 1995-02-14 | 1998-07-21 | Fujitsu Limited | Addressing method for executing load instructions out of order with respect to store instructions |
US5832297A (en) * | 1995-04-12 | 1998-11-03 | Advanced Micro Devices, Inc. | Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations |
US5802588A (en) * | 1995-04-12 | 1998-09-01 | Advanced Micro Devices, Inc. | Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer |
US5835747A (en) * | 1996-01-26 | 1998-11-10 | Advanced Micro Devices, Inc. | Hierarchical scan logic for out-of-order load/store execution control |
US6021485A (en) * | 1997-04-10 | 2000-02-01 | International Business Machines Corporation | Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching |
-
1998
- 1998-09-22 US US09/158,465 patent/US6141747A/en not_active Expired - Lifetime
-
1999
- 1999-04-03 JP JP2000571340A patent/JP3871884B2/ja not_active Expired - Fee Related
- 1999-04-03 DE DE69932066T patent/DE69932066T2/de not_active Expired - Lifetime
- 1999-04-03 WO PCT/US1999/007332 patent/WO2000017746A1/en active IP Right Grant
- 1999-04-03 EP EP99916331A patent/EP1116103B1/en not_active Expired - Lifetime
- 1999-04-03 KR KR1020017003691A patent/KR100626858B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
US6141747A (en) | 2000-10-31 |
DE69932066D1 (en) | 2006-08-03 |
WO2000017746A1 (en) | 2000-03-30 |
EP1116103A1 (en) | 2001-07-18 |
KR20010073182A (ko) | 2001-07-31 |
KR100626858B1 (ko) | 2006-09-22 |
DE69932066T2 (de) | 2007-06-21 |
JP2002525742A (ja) | 2002-08-13 |
EP1116103B1 (en) | 2006-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3871884B2 (ja) | 記憶からロードへの転送のための機構 | |
US6256721B1 (en) | Register renaming in which moves are accomplished by swapping tags | |
US5860107A (en) | Processor and method for store gathering through merged store operations | |
US6065103A (en) | Speculative store buffer | |
JP3919802B2 (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
US6122656A (en) | Processor configured to map logical register numbers to physical register numbers using virtual register numbers | |
US5903740A (en) | Apparatus and method for retiring instructions in excess of the number of accessible write ports | |
US6134651A (en) | Reorder buffer employed in a microprocessor to store instruction results having a plurality of entries predetermined to correspond to a plurality of functional units | |
US5961634A (en) | Reorder buffer having a future file for storing speculative instruction execution results | |
US6260134B1 (en) | Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte | |
US8171240B1 (en) | Misalignment predictor | |
US5870579A (en) | Reorder buffer including a circuit for selecting a designated mask corresponding to an instruction that results in an exception | |
US5920710A (en) | Apparatus and method for modifying status bits in a reorder buffer with a large speculative state | |
US6266763B1 (en) | Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values | |
US6332187B1 (en) | Cumulative lookahead to eliminate chained dependencies | |
US6230262B1 (en) | Processor configured to selectively free physical registers upon retirement of instructions | |
US6604191B1 (en) | Method and apparatus for accelerating instruction fetching for a processor | |
CN116414458A (zh) | 指令处理方法以及处理器 | |
US6134650A (en) | Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060210 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060210 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060928 |
|
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: 20061003 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061018 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101027 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111027 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111027 Year of fee payment: 5 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111027 Year of fee payment: 5 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121027 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |