JP3732555B2 - 非逐次アクセスの実効待ち時間が短いパイプライン・キャッシュシステム - Google Patents
非逐次アクセスの実効待ち時間が短いパイプライン・キャッシュシステム Download PDFInfo
- Publication number
- JP3732555B2 JP3732555B2 JP18505495A JP18505495A JP3732555B2 JP 3732555 B2 JP3732555 B2 JP 3732555B2 JP 18505495 A JP18505495 A JP 18505495A JP 18505495 A JP18505495 A JP 18505495A JP 3732555 B2 JP3732555 B2 JP 3732555B2
- Authority
- JP
- Japan
- Prior art keywords
- address
- cache
- sequential
- record
- look
- 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
- 230000004044 response Effects 0.000 claims description 29
- 238000010586 diagram Methods 0.000 description 6
- 238000000034 method Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003071 parasitic effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- 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, look ahead
-
- 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
Description
【産業上の利用分野】
本発明は、キャッシュメモリを使用するデータ処理システムに関し、より詳しく、キャッシュの非逐次アクセスの実効待ち時間を短縮する技術に関する。
【0002】
【従来の技術】
キャッシュは、主メモリに記憶された命令またはデータにプロセッサがアクセスするのに必要な実効時間を短くするために様々な形で使用される。キャッシュの理論は、大容量の比較的遅い主メモリと共に、非常に速いメモリの小さい部分をキャッシュとして使用することによって、コンピュータシステムはより高い処理速度を達成することができるというものである。キャッシュメモリは、動作上、データ処理装置と主メモリとの間に置かれる。プロセッサは、主メモリにアクセスする必要があるとき、まずキャッシュメモリを検索して、必要とする情報がキャッシュで利用可能可能かどうかを判断する。データ及びまたは命令を主メモリから取り出すときは、それらの情報は、主メモリの連続した記憶場所から取り出される情報ブロックの一部(キャッシュラインとして知られる)としてキャッシュに格納される。その後同じアドレスへのメモリアクセスを行うときは、プロセッサは、主メモリよりむしろ高速キャッシュメモリとやり取りする。統計的には、情報を主メモリの特定のブロックにアクセスして取り出したときは、次のアクセスではその同じブロックから情報を呼び出すことになる確立が非常に高い。このメモリー参照の局所性という性質があるために、平均メモリ・アクセスタイムは大幅に短縮される。
【0003】
キャッシュの設計には、互いに相容れない主要な目標が2つのある。第1には、キャッシュ・サイズは、キャッシュミスの場合のオフチップメモリ・アクセスが最小限となるように、十分大きいことが望ましい。第2には、プロセッサが高速化するにつれて、システム全体の性能が遅くならないように命令及びデータをプロセッサへリターンすることができるよう、キャッシュを十分高速に設計することが特に重要になる。不都合なことに、キャッシュメモリは、大きくなるほど、寄生キャパシタンスの増加のために遅くなる。
【0004】
これらの2つの目標を調和させるために、従来多くの技術が用いられている。キャッシュをあるタイプのデータ専用にすることによって、キャッシュに要求される相対的なサイズを小さくすることができる。例えば、多くのプロセッサには、命令キャッシュとデータキャッシュが別個に組み込まれている。さらに、命令キャッシュ用のアクセスのパターンは通常逐次式であるため、ヒット/ミス比が比較的高い。従って、命令を検索するのにオフチップにアクセスする必要が少なくなり、性能が高くなる。
【0005】
キャッシュの速度の大きさには2つの要素が関与する。キャッシュの待ち時間は、キャッシュに対するアドレスの呈示と要求されたデータのキャッシュからの受取りとの間の遅延時間(通常プロセッサ・サイクルで測定される)である。キャッシュのスループットは、ある一定時間で実行することができるメモリアクセス動作の回数の尺度である。待ち時間中は、キャッシュは、アドレスに応答してキャッシュからデータがリターンされないアイドル期間を持っていると見なすことができる。アイドル期間の持続時間Lは、待ち時間より1サイクル短い。
【0006】
パイプライン・メモリシステムでは、先取り法を用いてスループットを高くすることができるということは、当技術分野においては周知である。カリフォルニア州サンタクララのインテル社(Intel Corporation of Santa Clara, California)のIntel i960CATM及びi960CFTMプロセッサは、パイプライン・メモリシステムをサポートするプロセッサの例である。特に、命令キャッシュは、例えば2段パイプライン・キャッシュとして実施することが可能である。パイプラインの第1段においては、命令アドレス(命令ポインタ)がキャッシュのタグアレイに呈示される。その結果は1サイクル間ラッチされ、第2段においては、ヒットの場合はキャッシュの命令アレイラインにアクセスし、キャッシュミスの場合はメモリにアクセスすることによりメモリアクセスが続けられる。言い換えると、例えば命令アドレスをサイクル1で呈示すると、キャッシュはサイクル2では待ち状態を取り、命令アドレスがキャッシュでヒットすれば、その命令がサイクル3でリターンされる。
【0007】
上記のパイプライン・キャッシュの待ち時間は2サイクルである。しかしながら、実効待ち時間は、アイドル・サイクルの間に後続の逐次アドレスから命令を先取りすることによって1サイクル短縮することができる。サイクル2においては、命令シーケンサ(プログラムカウンタ)がフェッチすべき次の命令を指示するための命令ポインタをインクリメントし、そのポインタ・アドレスをキャッシュに呈示する。その結果、サイクル1で呈示されたアドレスで見付かった命令がサイクル3でリターンされ、次の命令はサイクル4でリターンされる。このようにして、キャッシュのスループットは、1サイクルおきに1命令から1サイクルごとに1命令へ100パーセントの増加が達成されている。
【0008】
当業者であれば、パイプライン・キャッシュの段数はシステムの要求に対応して広い範囲を取り得るということは理解できよう。さらに、当業者ならば、命令ポインタが各パイプライン段の間にインクリメントされる数は、プロセッサがスーパースカラ型(1サイクルにつき複数の命令を出す)であるかどうか、とりわけパイプライン段数によって変化するということは理解できよう。唯一必要なのは、前のサイクルでフェッチされた最後の命令の直後の命令を指示するように命令ポインタをインクリメントすることである。
【0009】
パイプライン・キャッシュからの命令を逐次先取りする方法を用いると、命令スループットを比較的高く保つことが可能である。しかしながら、非逐次メモリアクセスになると、パイプライン・キャッシュは性能的な不利を被る。非逐次アクセスには、命令フローの変化の中でも、とりわけ分岐コール(呼出し)及び割込みなどがある。上に述べたように、命令シーケンサは、命令ポインタを逐次インクリメントすることによって命令を先取りさせる。しかしながら、分岐命令に遭遇すると、命令フローは、その分岐命令によって指定された目標アドレスへ転向されなければならない。プロセッサは、分岐命令を解読して分岐命令に遭遇したことを検知し、命令フローを継続する分岐目標アドレスを決定するために多くのサイクル数を必要とする。この期間中に、パイプライン・キャッシュは、分岐命令の直後の逐次命令フロー中にある先取りされた命令をリターンする。分岐が検出された後は、これらの先取りされた命令は、洗い流す、すなわち実行せずにパイプラインから排出しなければならず、かつ命令フローを分岐目標アドレスへ転向しなければならない。
【0010】
分岐目標アドレスがパイプライン・キャッシュに呈示されると、そのアドレスにある命令がパイプライン・キャッシュの待ち時間に等しい期間後にリターンされる。典型的なコンピュータプログラムにおいては、おおよそ5命令毎に1つの割合で分岐命令が発生するので、この遅延は、命令スループットを大きく低下させる。このスループットの低下は、各待ち時間サイクルが1命令だけではなく多数の命令の遅延を表すスーパースカラ・マシンにおいては一層ひどくなる。
【0011】
【発明が解決しようとする課題】
従って、非逐次メモリアクセスによって生じる実効待ち時間を短縮することによってパイプライン・キャッシュの性能を向上させることが要望されている。
【0012】
【課題を解決するための手段】
上記目的達成のため、本発明は、非逐次メモリアクセスにおける実効待ち時間を短縮するための方法及び装置を提供するものである。本発明のキャッシュは、パイプライン・キャッシュでのレコード・アドレスのヒットに応答して少なくとも1つのキャッシュ出力レコードが得られる多段式パイプライン・キャッシュを有する。このパイプライン・キャッシュは、出力レコードを全く出さないLクロックサイクルのアイドル期間後にレコードを出力する。本発明は、分岐目標キャッシュ(BTC)でヒットした非逐次レコード・アドレスに応答してアイドル期間中に少なくとも1つのレコードを出すBTCを設けることによってパイプライン・キャッシュの実効待ち時間を短縮するものである。このキャッシュは、さらに、アイドル期間に先行するゼロサイクルの間に非逐次レコード・アドレス(A)及びルックアヘッド・アドレス(A+(L×W)、Wはレコードが出されるイシュー幅を示す)をパイプライン・キャッシュに供給するルックアヘッド回路を有する。パイプライン・キャッシュは、それぞれ、パイプライン・キャッシュでヒットした非逐次レコード・アドレス及びルックアヘッド・アドレスに応答して、アイドル期間の後にルックアヘッド・アドレスに応じてルックアヘッド・レコード及び非逐次レコードを出力する。非逐次レコードがBTCでキャッシュミスになると、マルチプレクサが、パイプライン・キャッシュ中から出力として非逐次レコードを選択する。非逐次アドレスがBTCでヒットしすると、マルチプレクサはルックアヘッド・レコードを出力として選択する。
【0013】
もう一つの実施態様においては、BTCのタグヒット論理装置が十分に速い場合、非逐次アドレスがBTCでヒットすると、ルックアヘッド回路はそのゼロサイクル中にルックアヘッド・アドレスのみをパイプライン・キャッシュに供給する。その場合、パイプライン・キャッシュは、パイプライン・キャッシュでヒットしたルックアヘッド・アドレスに応答して、アイドル期間の後にルックアヘッド・アドレスからルックアヘッド・レコードを出力する。一方、非逐次アドレスがBTCでキャッシュミスを起こすと、ルックアヘッド回路は、そのゼロサイクル中に非逐次レコード・アドレスをパイプライン・キャッシュに供給する。パイプライン・キャッシュでヒットした非逐次アドレスに応答して、パイプライン・キャッシュは、アイドル期間の後にで非逐次レコードを出力する。
【0014】
上記のどちらの態様においても、非逐次アドレスがBTCでヒットすると、ルックアヘッド回路は、そのゼロサイクルの後に、ルックアヘッド・アドレスに続いて少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給する。しかしながら、BTCで非逐次アドレスのキャッシュミスが起こると、ルックアヘッド回路は、そのゼロサイクルの後に、非逐次アドレスに続いて少なくとも1つの逐次レコードアドレスをパイプライン・キャッシュに供給する。ルックアヘッド回路によって供給された逐次レコード・アドレスのパイプライン・キャッシュでのヒットに応答して、パイプライン・キャッシュは、少なくとも1つのレコードを供給する。
【0015】
マルチサイクル・アイドル期間の場合は、BTCは、アイドル期間の第1のサイクル中に、非逐次レコード・アドレスによって指定された非逐次レコードを出力する。アイドル期間の残りのサイクルにおいては、BTCは、非逐次レコード・アドレスに続く逐次レコード・アドレスから逐次レコードを出力する。イシュー幅Wを有するスーパースカラ・システムの場合は、BTCは、アイドル期間の各サイクル中にW個のレコードを出力する。
【0016】
アイドル期間の後、パイプライン・キャッシュは、前のサイクル中にBTCによって出された最後のレコードのレコード・アドレスに続く逐次レコード・アドレスから少なくとも1つの逐次レコードを出力する。しかしながら、BTCがアイドル期間中にレコードを出力しないと、パイプライン・キャッシュは、パイプライン・キャッシュでヒットした非逐次レコード・アドレスに応答して、アイドル期間の後に非逐次レコードを出力する。
【0017】
好ましくは、キャッシュに記憶されるレコードは命令を表すレコードとする。非逐次レコード・アドレスは、例えば、分岐命令の目標アドレス、割込みハンドラの開始アドレス、あるいはサブルーチンのコールまたは戻りアドレス(復帰アドレス)である。
【0018】
以下、本発明を実施例について図面を参照しつつ詳細に説明する。
【0019】
【実施例】
本発明によれば、非逐次アクセスにおける実効待ち時間が短いパイプライン・キャッシュシステムが得られる。以下の説明においては、本発明の完全な理解を図るために、詳細な事項が特定的に記載してある。しかしながら、本発明がこれらの詳細な事項の記載なしで実施可能なことは当業者にとって明白であろう。また、その他の場合においては、前記シーケンサ、その他の周知の素子、装置、プロセス・ステップ等は、本発明が不明確になるのを避けるため、詳細な記載は省略した。
【0020】
図1は、本発明のパイプライン・キャッシュのアーキテクチャを示すブロック図である。プロセッサチップ100は、CPUコア102及び本発明のオンチップ命令キャッシュ104を有する。
【0021】
命令キャッシュ104は、メモリバス108を介してメモリデバイス106に接続されている。当業者であれば、発明の説明が不必要に複雑になるのを避けるために、図1ではバスコントローラやデータキャッシュのような多数の接続や構成部品が省略されているということは理解できよう。命令キャッシュ104は、ルックアヘッド制御回路110、分岐目標命令キャッシュ112、パイプライン・キャッシュ114及びマルチプレクサ(MUX)116を有する。パイプライン・キャッシュ114は、CPUコア102によって使用されるレコードの一種である命令を記憶する。このキャッシュは何段にでもパイプライン化することができる。分岐目標命令キャッシュ(BTIC)112は、分岐、コール、リターン及びその他の非逐次アクセスのために専用に用いられる小さな高速キャッシュである。このBTICは、これらの1つの動作から生じるアドレスがプロセッサコア102によって送られたときだけアクティブになる。このBTICの目的は、非逐次アクセスのためにパイプライン・キャッシュに生じる待ち時間を埋めることにある。
【0022】
ルックアヘッド制御(LAC)回路110は、パイプライン・キャッシュ114に与えるアドレスを制御する。CPUコア102は、非逐次アクセスを実行しようとするとき、アドレスを命令キャッシュ104に呈示する。他のサイクル中に、アイドル期間中にCPUコア102により消費された命令語の数だけ前回の命令ポインタをインクリメントして、前記キャッシュに対するアドレスがLAC110から生成される(ワード・バイ・ワードアドレス指定であると仮定した場合)。非逐次アクセスに遭遇すると、CPUコア102からのブランチ・アドレスがBTIC112に与えられて、分岐目標アドレスの命令がBTIC112に格納されているかどうかの判断が行われる。同時に、ルックアヘッド制御装置110は、分岐目標アドレスAとルックアヘッド・アドレスA+Nを共にパイプライン・キャッシュ114に与える。数Nは、CPUコア102がアイドル期間中に消費する命令の数によって決まる。例えば、パイプライン・キャッシュ114が2サイクルの待ち時間(すなわち、アイドル期間L=1サイクル)で、CPUコア102がイシュー幅(issue width )Wが3のスーパースカラ・プロセッサであるとすると、ルックアヘッド装置110はN=3命令だけ先取りする。一般に、アイドル期間中にBTIC112によってCPUコア102に与えられる「充填(fill-in )」命令の数Nは、次式に従って計算される。
N=L×W
【0023】
BTIC112は、ヒットすると、CPUコア102が必要とする命令をアイドル期間中に出力する。アイドル期間に続いて、パイプライン・キャッシュ114は後続の命令を出す(それらがパイプライン・キャッシュ114中にある場合)。一方、BTIC112でキャッシュミスが起こると、BTIC112によっては命令が全く与えられず、プロセッサはそのアイドル期間にわたって立ち往生(機能停止)する。アイドル期間が終わった後、分岐目標アドレスの命令がパイプライン・キャッシュ114によってCPUコア102に供給され、BTIC112に格納される。これはそれらの命令がパイプライン・キャッシュ114に格納されている場合である。一方、命令がパイプライン・キャッシュ114にない場合は、それらの命令は外部メモリ106からCPUコア102に供給され、BTIC112及びパイプライン・キャッシュ114に格納される。本発明は、分岐目標アドレスに関連して説明するが、当業者であれば、本発明の動作はサブルーチンコール及び戻りアドレス、割込みハンドラ・アドレス及びその他の非逐次アクセス・アドレスにも同様に適用であるということは理解できよう。さらに、本発明は、命令キャッシュばかりでなく、あらゆる形の情報レコードを保持するキャッシュに適用することができる。
【0024】
以下、本発明の命令キャッシュの動作を、図2及び3のタイミング図を参照しつつさらに詳細に説明する。図2及び3に例示するシステムにおいては、この実施例は、スカラ・プロセッサにおける2段パイプライン・キャッシュであると仮定する(イシュー幅は1に等しい)。図2に示すように、CPUコア102とキャッシュ104の間では多数の信号がやり取りされる。分岐信号(能動ハイ)は、CPUコア102が非逐次アクセスを要求していることを示す。また、CPUコア102は、非逐次アクセス、例えば分岐の目標アドレスAをルックアヘッド制御装置110及び分岐目標命令キャッシュ112に与える。CPU_READY信号は、それがハイのとき、CPUが情報を処理することができる状態にあるということを示し、逆に、CPU_READY信号がローに落ちたときは、CPUが機能停止しなければならないということを示す。
【0025】
図2に示すように、CPUコア102は、サイクル0で分岐目標アドレスAを出している。パイプライン・キャッシュ114は2サイクルの待ち時間を呈するので、ルックアヘッド制御回路110は、アドレスA及びルックアヘッド・アドレスA+N=A+(L×W)=A+(1×1)=A+1(LAC_OUT)を出す。図2の例においては、サイクル0におけるハイのBTIC_HIT線によって示されるように、アドレスAがBTIC112でヒットする。BTIC112は比較的高速のパイプライン・キャッシュであるため、サイクル1でアドレスAの命令I[A]をリターンする。このようにして、BTIC112は、サイクル1においてパイプライン・キャッシュ114のアイドル期間を埋める。
【0026】
BTICヒットに応答して、MUX116は、命令I[A]を選択し、CPUコア102へ出力する(MUX_OUT)。パイプライン・キャッシュ114はデュアルポートであるため、2つのアドレスを与えられると、2つの対応する命令を出力することができるようになっている。この例の場合、サイクル2において、パイプライン・キャッシュ114(PC_OUT)は、LAC110によりサイクル0で呈示されたアドレスに応答して、2サイクルの待ち時間後にアドレスA及びA+1の命令をリターンする。サイクル2においては、前のサイクルでBTICヒットが検出されているので、MUX116は、パイプライン・キャッシュ114の出力からアドレスA+1の命令のみを選択する。サイクル0の後の各サイクルについてはこの例の場合、CPUコア102は他に分岐目標アドレスを呈示していない。このように、これら後続のサイクルにおいては、LAC110は、通常のように動作して、A+2、A+3等の逐次ルックアヘッド・アドレスを出力する。通常の2サイクルの待ち時間の後、パイプライン・キャッシュ114は、LAC110によってアドレスA+2を呈示されてからそのアドレスの命令を出力する(パイプライン・キャッシュ114でヒットした場合)。命令が通常のように逐次処理される間は、MUX116は、パイプライン・キャッシュ114の出力を選択して、命令をCPUコア102に供給する。ここで、CPU_READYの線がローになって、CPU機能停止を示していることが図から分かる。この場合、CPUコア102は命令処理を延期しなければならない。このようにして、パイプライン・キャッシュ114は、アドレスA+2の命令の出力を続け、LAC110は、サイクル4で機能停止が解除されるまでA+3のルックアヘッド・アドレスを出し続ける。
【0027】
図3は、BTICミスの場合を示す。キャッシュミスが起こった場合、BTIC112は、サイクル1にアドレスAからの命令を入れることができない。その代りに、2サイクルの待ち時間の後、MUX116は、パイプライン・キャッシュ114の出力から命令I[A]を選択する(パイプライン・キャッシュでヒットした場合)。パイプライン・キャッシュ114が命令をリターンするとき、その命令はCPUコア102に供給されるばかりでなく、以後におけるメモリアクセスのためにBTIC112にも格納される。また、LAC110は、サイクル0でキャッシュミスが検出されると、これに応答して、サイクル1でルックアヘッド・アドレスA+1を繰り返し、その結果、パイプライン・キャッシュ114はアドレスA+1の命令をリターンする(パイプライン・キャッシュ114でヒットが起こった場合)。また、図3には、図2と同様の機能停止の効果も示されている。
【0028】
もう一つの実施例においては、BTIC112のタグヒット論理装置は、ルックアヘッド制御110の動作を変えるのに十分な速度で反応することができる。例えば、図2においては、LAC110は、パイプライン・キャッシュ114に分岐目標アドレスA及びルックアヘッド・アドレスA+1を共に出力しなければならない。サイクル0では、LAC110は、BTICでヒットが生じるか(パイプライン・キャッシュはI[A+1]のみ出力すればよい)、キャッシュミスが起こるか(この場合パイプライン・キャッシュ114はI[A]とI[A+1]を共に出力する必要がある)が不確かである。しかしながら、BTIC112がルックアヘッド制御回路110にサイクル0でのヒットを通知するのに十分速ければ、LAC110は、分岐アドレスとルックアヘッド・アドレスを両方とも出力すべきかどうか、あるいはルックアヘッド・アドレスだけ出力すべきかを決定することができるはずである。ヒットの場合は、I[A]がBTIC112中にあることが分かり、従ってアドレスAをパイプライン・キャッシュ114に呈示する必要がない。そして、LAC110は、ルックアヘッド・アドレスA+1のみをパイプライン・キャッシュ114に呈示する。このような高速のBTICは、例えば、図2において、BTIC_HIT信号を左へ移動させ、LAC_OUT信号がアサートされる(立ち上がる)前に論理ハイレベルに達するようにすることにより表すことができる。
【0029】
同様にBTICでキャッシュミスが起こった場合は、パイプライン・キャッシュ114がBTIC112の代りにサイクル2でI[A]を出力する動作を受け持つことになるから、LAC110は分岐目標アドレスAをパイプライン・キャッシュ114に呈示しさえすればよいということが分かる。以後のサイクルでは、非逐次アクセスがなければ、通常の逐次動作が続けられる。
【0030】
以上の説明では、パイプライン・キャッシュ114は何らかのアドレスが呈示されたとき、これに応答して生じたヒットを記録するものと仮定した。もちろん、アドレスがBTIC112でもパイプライン・キャッシュ114でもキャッシュミスになった場合は、プロセッサは所望の命令が主メモリ106からリターンされるまで不定数の待ち状態を経る必要がある。その命令は、リターンされると同時にパイプライン・キャッシュ114にもBTIC112にも格納される。
【0031】
図4及び5は、スカラ・プロセッサ100で実施された4段パイプライン・キャッシュ114(アイドル時間=3サイクル)の場合のBTICのヒットとBTICのキャッシュミスの結果をそれぞれ示すタイミング図である。サイクル0においては、ルックアヘッド制御回路110が分岐目標アドレスA及びルックアヘッド・アドレスA+N(ただしN=3)をパイプライン・キャッシュ114に呈示する。ルックアヘッド・アドレスA+3=A+(L×W)=A+(3×1)(スカラ・プロセッサの場合)=A+3。あるいは、図2と3に関連して説明したしように、LAC110がルックアヘッド・アドレスをパイプライン・キャッシュ114へ出力する前にヒットかキャッシュミスかをルックアヘッド制御回路110に示すことができるほどBTICのタグヒット論理装置が十分高速であれば、ルックアヘッド制御回路110はBTICヒットの場合はルックアヘッド・アドレスのみ、BTICミス(キャッシュミス)の場合は分岐目標アドレスのみを出力するだけでよい。
【0032】
この例においては、アイドル期間は3サイクルであり、このことは、パイプライン・キャッシュ114は、サイクル0で呈示されたアドレスに応答してサイクル1、2または3中に命令をリターンするということを行わないということを意味する。パイプライン・キャッシュ114の性能は、このアイドル期間にBTIC112によって供給される命令を充填することによって強化することができる。この場合、BTICヒットが起こると、BTIC112は、CPUコア102から受け取った分岐目標アドレスに応答してサイクル1、2と3中に命令I[A]、I[A+1]とI[A+2]をそれぞれ出力する。マルチプレクサ116は、BTICヒットが起こった場合の3サイクルのアイドル期間中はBTIC112の命令出力を選択する。アイドル期間が経過した後は、マルチプレクサ116はパイプライン・キャッシュ114の出力を選択する。
【0033】
分岐目標アドレスAがBTIC112でキャッシュミスになると、4サイクル待ち時間のために、そのアドレスの命令は、サイクル4まではパイプライン・キャッシュ114によってリターンされない(パイプライン・キャッシュでヒットした場合)。
【0034】
本発明は、通常アイドル期間になるような処理時間を埋めるための非逐次アクセス専用に用いられる小さな高速キャッシュを使用する。この性能強化は、各アイドル・サイクルで、1つの命令だけではなく、多くの命令を出す機会が失われるスーパースカラ・システムにおいてとりわけ有用である。そのようなアイドル時間によって通常生じる性能の低下は、1サイクルより長い待ち時間を有する多段式のパイプライン・キャッシュを使用する場合にさらに顕著になる。従って、このようなアイドル時間を全て埋めることができる本発明は、従来技術に対して著しい改善効果をもたらすものである。
【0035】
以上、本発明を特定実施例により詳細に説明したが、当業者にとって、発明の要旨及び範囲を逸脱することなく、様々な修正態様及び変更態様が可能なことは明白であろう。特に、上記説明から、本発明は任意の範囲のイシュー幅を有するスカラのプロセッサでもスーパースカラでも動作する任意の段数を有するパイプライン・キャッシュに適用可能であるということは明らかであろう。
【0036】
【発明の効果】
本発明によれば、非逐次メモリアクセスによって生じる実効待ち時間を短縮することによってパイプライン・キャッシュの性能を向上させることができる。
【図面の簡単な説明】
【図1】 本発明のキャッシュを組み込んだコンピュータシステムを示すブロック図である。
【図2】 本発明をスカラ・プロセッサにおける2段パイプライン・キャッシュに適用した場合に、非逐次レコード・アクセスが分岐目標キャッシュでヒットした場合の一例の動作を説明するためのタイミング図である。
【図3】 本発明をスカラ・プロセッサにおける2段パイプライン・キャッシュに適用した場合に、非逐次レコード・アクセスが分岐目標キャッシュでキャッシュミスを起こした場合の一例の動作を説明するためのタイミング図である。
【図4】 本発明をスカラ・プロセッサにおける4段パイプライン・キャッシュに適用した場合に、非逐次レコード・アクセスが分岐目標キャッシュでヒットした場合の動作を説明するためのタイミング図である。
【図5】 本発明をスカラ・プロセッサにおける4段パイプライン・キャッシュに適用した場合に、非逐次レコード・アクセスが分岐目標キャッシュでキャッシュミスを起こした場合の一例の動作を説明するためのタイミング図である。
【符号の説明】
100…プロセッサチップ、102…CPUコア、104…命令キャッシュ、106…メモリデバイス、108…メモリバス、110…ルックアヘッド制御回路、112…分岐目標命令キャッシュ、114…パイプライン・キャッシュ、116…マルチプレクサ。
Claims (8)
- 情報を処理するためのコンピュータシステムにおけるオンチップ・キャッシュであって:
ヒットしたレコード・アドレスに応答して、少なくとも1つのキャッシュ出力レコードを、クロックサイクル数Lのアイドル期間の後で供給する多段式パイプライン・キャッシュを備え;
ヒットした非逐次レコード・アドレスに応答して少なくとも1つのレコードをアイドル期間中に供給する分岐目標キャッシュ(BTC)を備え;
アイドル期間に先立つゼロサイクル中に、非逐次レコード・アドレス及びルックアヘッド・アドレスを、前記パイプライン・キャッシュに供給するルックアヘッド回路を備え、前記パイプライン・キャッシュでヒットした非逐次レコード・アドレス及びルックアヘッド・アドレスにそれぞれ応答して非逐次レコード及びルックアヘッド・レコードが、前記パイプライン・キャッシュからアイドル期間の後でそれぞれ出力され、前記ルックアヘッド・アドレスは、非逐次レコード・アドレスをA,イシュー幅をWとして、A+(L×W)で示され;
非逐次アドレスがBTCでミスであると前記パイプライン・キャッシュからの非逐次レコードを、非逐次アドレスがBTCでヒットであるとルックアヘッド・レコードを、オンチップ・キャッシュの出力として選択するマルチプレクサを備えている、
ことを特徴とするオンチップ・キャッシュ。 - 請求項1に記載のオンチップ・キャッシュにおいて、
ゼロサイクルの後に前記ルックアヘッド回路は、非逐次アドレスがBTCでヒットであるときには、前記ルックアヘッド・アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、非逐次アドレスがBTCでミスであるときには、前記非逐次アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、
前記パイプライン・キャッシュにおいて、前記ルックアヘッド回路から供給されてヒットした少なくとも1つの逐次レコード・アドレスに応じて、前記パイプライン・キャッシュは少なくとも1つのレコードを供給する
ことを特徴とするオンチップ・キャッシュ。 - 情報を処理するためのコンピュータシステムにおけるオンチップ・キャッシュであって:
ヒットしたレコード・アドレスに応答して、少なくとも1つのキャッシュ出力レコードを、クロックサイクル数Lのアイドル期間の後で供給する多段式パイプライン・キャッシュを備え;
ヒットした非逐次レコード・アドレスに応答して少なくとも1つのレコードをアイドル期間中に供給する分岐目標キャッシュ(BTC)を備え;
ルックアヘッド回路を備え、そのルックアヘッド回路は、非逐次レコード・アドレスがBTCでヒットであればアイドル期間に先立つゼロサイクルにおいて、前記パイプライン・キャッシュにルックアヘッド・アドレスを供給し、前記パイプライン・キャッシュでヒットしたルックアヘッド・アドレスに応じてルックアヘッド・レコードが、当該アイドル期間の後に、前記パイプライン・キャッシュから供給され、そして、前記ルックアヘッド回路は、非逐次レコード・アドレスがBTCでミスであればアイドル期間に先立つゼロサイクルにおいて、前記パイプライン・キャッシュに非逐次レコード・アドレスを供給し、前記パイプライン・キャッシュでヒットした非逐次レコード・アドレスに応じて非逐次レコードが、当該アイドル期間の後に、前記パイプライン・キャッシュから供給され、前記ルックアヘッド・アドレスは、非逐次レコード・アドレスをA,イシュー幅をWとして、A+(L×W)で示され;
非逐次アドレスがBTCでミスであると前記パイプライン・キャッシュからの非逐次レコードを、非逐次アドレスがBTCでヒットであるとルックアヘッド・レコードを、オンチップ・キャッシュの出力として選択するマルチプレクサを備えている、
ことを特徴とするオンチップ・キャッシュ。 - 請求項3に記載のオンチップ・キャッシュにおいて、
ゼロサイクルの後に前記ルックアヘッド回路は、非逐次アドレスがBTCでヒットであるときには、前記ルックアヘッド・アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、非逐次アドレスがBTCでミスであるときには、前記非逐次アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、
前記パイプライン・キャッシュにおいて、前記ルックアヘッド回路から供給された少なくとも1つの逐次レコード・アドレスに応じて、前記パイプライン・キャッシュは少なくとも1つのレコードを供給する
ことを特徴とするオンチップ・キャッシュ。 - コンピュータ・システムであって、
情報を処理するためのプロセッサと、
上記プロセッサに接続されたメモリ・デバイスと、
上記プロセッサに接続されたオンチップ・キャッシュと
を備え、このオンチップ・キャッシュは:
ヒットしたレコード・アドレスに応答して、少なくとも1つのキャッシュ出力レコードを、クロックサイクル数Lのアイドル期間の後で供給する多段式パイプライン・キャッシュを備え;
ヒットした非逐次レコード・アドレスに応答して少なくとも1つのレコードをアイドル期間中に供給する分岐目標キャッシュ(BTC)を備え;
アイドル期間に先立つゼロサイクル中に、非逐次レコード・アドレス及びルックアヘッド・アドレスを、前記パイプライン・キャッシュに供給するルックアヘッド回路を備え、前記パイプライン・キャッシュでヒットした非逐次レコード・アドレス及びルックアヘッド・アドレスにそれぞれ応答して非逐次レコード及びルックアヘッド・レコードが、前記パイプライン・キャッシュからアイドル期間の後でそれぞれ出力され、前記ルックアヘッド・アドレスは、非逐次レコード・アドレスをA,イシュー幅をWとして、A+(L×W)で示され;
非逐次アドレスがBTCでミスであると前記パイプライン・キャッシュからの非逐次レコードを、非逐次アドレスがBTCでヒットであるとルックアヘッド・レコードを、オンチップ・キャッシュの出力として選択するマルチプレクサを備えている
ことを特徴とする、コンピュータ・システム。 - 請求項5に記載のコンピュータ・システムにおいて、
ゼロサイクルの後に前記ルックアヘッド回路は、非逐次アドレスがBTCでヒットであるときには、前記ルックアヘッド・アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、非逐次アドレスがBTCでミスであるときには、前記非逐次アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、
前記パイプライン・キャッシュにおいて、前記ルックアヘッド回路から供給されてヒットした少なくとも1つの逐次レコード・アドレスに応じて、前記パイプライン・キャッシュは少なくとも1つのレコードを供給する
ことを特徴とするコンピュータ・システム。 - コンピュータ・システムであって、
情報を処理するためのプロセッサと、
上記プロセッサに接続されたメモリ・デバイスと、
上記プロセッサに接続されたオンチップ・キャッシュと
を備え、このオンチップ・キャッシュは:
ヒットしたレコード・アドレスに応答して、少なくとも1つのキャッシュ出力レコードを、クロックサイクル数Lのアイドル期間の後で供給する多段式パイプライン・キャッシュを備え;
ヒットした非逐次レコード・アドレスに応答して少なくとも1つのレコードをアイドル期間中に供給する分岐目標キャッシュ(BTC)を備え;
ルックアヘッド回路を備え、そのルックアヘッド回路は、非逐次レコード・アドレスがBTCでヒットであればアイドル期間に先立つゼロサイクルにおいて、前記パイプライン・キャッシュにルックアヘッド・アドレスを供給し、前記パイプライン・キャッシュでヒットしたルックアヘッド・アドレスに応じてルックアヘッド・レコードが、当該アイドル期間の後に、前記パイプライン・キャッシュから供給され、そして、前記ルックアヘッド回路は、非逐次レコード・アドレスがBTCでミスであればアイドル期間に先立つゼロサイクルにおいて、前記パイプライン・キャッシュに非逐次レコード・アドレスを供給し、前記パイプライン・キャッシュでヒットした非逐次レコード・アドレスに応じて非逐次レコードが、当該アイドル期間の後に、前記パイプライン・キャッシュから供給され、前記ルックアヘッド・アドレスは、非逐次レコード・アドレスをA,イシュー幅をWとして、A+(L×W)で示され;
非逐次アドレスがBTCでミスであると前記パイプライン・キャッシュからの非逐次レコードを、非逐次アドレスがBTCでヒットであるとルックアヘッド・レコードを、オンチップ・キャッシュの出力として選択するマルチプレクサを備えている、
ことを特徴とするコンピュータ・システム。 - 請求項7に記載のコンピュータ・システムにおいて、
ゼロサイクルの後に前記ルックアヘッド回路は、非逐次アドレスがBTCでヒットであるときには、前記ルックアヘッド・アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、非逐次アドレスがBTCでミスであるときには、前記非逐次アドレスに続く少なくとも1つの逐次レコード・アドレスをパイプライン・キャッシュに供給し、
前記パイプライン・キャッシュにおいて、前記ルックアヘッド回路から供給された少なくとも1つの逐次レコード・アドレスに応じて、前記パイプライン・キャッシュは少なくとも1つのレコードを供給する
ことを特徴とするコンピュータ・システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/269,650 US5561782A (en) | 1994-06-30 | 1994-06-30 | Pipelined cache system having low effective latency for nonsequential accesses |
US269650 | 2002-10-11 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0830454A JPH0830454A (ja) | 1996-02-02 |
JP3732555B2 true JP3732555B2 (ja) | 2006-01-05 |
Family
ID=23028115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP18505495A Expired - Fee Related JP3732555B2 (ja) | 1994-06-30 | 1995-06-29 | 非逐次アクセスの実効待ち時間が短いパイプライン・キャッシュシステム |
Country Status (4)
Country | Link |
---|---|
US (1) | US5561782A (ja) |
JP (1) | JP3732555B2 (ja) |
KR (1) | KR100252569B1 (ja) |
TW (1) | TW280880B (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6021471A (en) * | 1994-11-15 | 2000-02-01 | Advanced Micro Devices, Inc. | Multiple level cache control system with address and data pipelines |
US5860096A (en) * | 1994-10-17 | 1999-01-12 | Hewlett-Packard Company | Multi-level instruction cache for a computer |
US5740412A (en) * | 1996-05-06 | 1998-04-14 | International Business Machines Corporation | Set-select multiplexer with an array built-in self-test feature |
US5778435A (en) * | 1996-05-30 | 1998-07-07 | Lucent Technologies, Inc. | History-based prefetch cache including a time queue |
KR100255510B1 (ko) * | 1997-05-09 | 2000-05-01 | 김영환 | 원포트램셀구조로이루어진캐시데이터램 |
US6199154B1 (en) | 1997-11-17 | 2001-03-06 | Advanced Micro Devices, Inc. | Selecting cache to fetch in multi-level cache system based on fetch address source and pre-fetching additional data to the cache for future access |
US7461211B2 (en) * | 2004-08-17 | 2008-12-02 | Nvidia Corporation | System, apparatus and method for generating nonsequential predictions to access a memory |
WO2006038991A2 (en) * | 2004-08-17 | 2006-04-13 | Nvidia Corporation | System, apparatus and method for managing predictions of various access types to a memory associated with cache |
JP2008257508A (ja) * | 2007-04-05 | 2008-10-23 | Nec Electronics Corp | キャッシュ制御方法およびキャッシュ装置並びにマイクロコンピュータ |
US9317293B2 (en) | 2012-11-28 | 2016-04-19 | Qualcomm Incorporated | Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media |
US9021210B2 (en) | 2013-02-12 | 2015-04-28 | International Business Machines Corporation | Cache prefetching based on non-sequential lagging cache affinity |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60168238A (ja) * | 1984-02-10 | 1985-08-31 | Hitachi Ltd | パイプラインデータ処理装置 |
JPS6393038A (ja) * | 1986-10-07 | 1988-04-23 | Mitsubishi Electric Corp | 計算機 |
US4926323A (en) * | 1988-03-03 | 1990-05-15 | Advanced Micro Devices, Inc. | Streamlined instruction processor |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5283873A (en) * | 1990-06-29 | 1994-02-01 | Digital Equipment Corporation | Next line prediction apparatus for a pipelined computed system |
US5337415A (en) * | 1992-12-04 | 1994-08-09 | Hewlett-Packard Company | Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency |
-
1994
- 1994-06-30 US US08/269,650 patent/US5561782A/en not_active Expired - Fee Related
- 1994-11-23 TW TW083110903A patent/TW280880B/zh active
-
1995
- 1995-04-14 KR KR1019950008810A patent/KR100252569B1/ko active IP Right Grant
- 1995-06-29 JP JP18505495A patent/JP3732555B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
KR960002008A (ko) | 1996-01-26 |
JPH0830454A (ja) | 1996-02-02 |
US5561782A (en) | 1996-10-01 |
TW280880B (ja) | 1996-07-11 |
KR100252569B1 (ko) | 2000-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100277818B1 (ko) | 컴퓨터 시스템의 데이터 처리 속도를 증가시키는 방법 | |
US5499355A (en) | Prefetching into a cache to minimize main memory access time and cache size in a computer system | |
US5027270A (en) | Processor controlled interface with instruction streaming | |
US5265236A (en) | Method and apparatus for increasing the speed of memory access in a virtual memory system having fast page mode | |
US6185660B1 (en) | Pending access queue for providing data to a target register during an intermediate pipeline phase after a computer cache miss | |
US4701844A (en) | Dual cache for independent prefetch and execution units | |
JP3016575B2 (ja) | 複数キャッシュ・メモリ・アクセス方法 | |
US5649144A (en) | Apparatus, systems and methods for improving data cache hit rates | |
EP0457403B1 (en) | Multilevel instruction cache and method for using said cache | |
US5953512A (en) | Microprocessor circuits, systems, and methods implementing a loop and/or stride predicting load target buffer | |
US6226722B1 (en) | Integrated level two cache and controller with multiple ports, L1 bypass and concurrent accessing | |
JP3577331B2 (ja) | キャッシュメモリシステムおよびマイクロプロセッサ内の命令を操作するための方法 | |
JP3516963B2 (ja) | メモリアクセス制御装置 | |
US5509137A (en) | Store processing method in a pipelined cache memory | |
JPH10232827A (ja) | 先取りキャッシュ書戻しの方法と装置 | |
US5649154A (en) | Cache memory system having secondary cache integrated with primary cache for use with VLSI circuits | |
JPS63150731A (ja) | コンピュータシステムおよびその実行方法 | |
JP2009545820A (ja) | 非シーケンシャル命令アドレスをプリフェッチするための方法および装置 | |
JPH10124314A (ja) | データプロセッサ及びデータ処理システム | |
US20080140934A1 (en) | Store-Through L2 Cache Mode | |
JP3732555B2 (ja) | 非逐次アクセスの実効待ち時間が短いパイプライン・キャッシュシステム | |
US6658534B1 (en) | Mechanism to reduce instruction cache miss penalties and methods therefor | |
US5666505A (en) | Heuristic prefetch mechanism and method for computer system | |
US6470444B1 (en) | Method and apparatus for dividing a store operation into pre-fetch and store micro-operations | |
US5367657A (en) | Method and apparatus for efficient read prefetching of instruction code data in computer memory subsystems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050124 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050201 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050502 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050510 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050728 |
|
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: 20050920 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051013 |
|
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: 20091021 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091021 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101021 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101021 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111021 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121021 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131021 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |