JP5059749B2 - キャッシュライン境界を横切る命令におけるキャッシュミスの処理 - Google Patents

キャッシュライン境界を横切る命令におけるキャッシュミスの処理 Download PDF

Info

Publication number
JP5059749B2
JP5059749B2 JP2008512600A JP2008512600A JP5059749B2 JP 5059749 B2 JP5059749 B2 JP 5059749B2 JP 2008512600 A JP2008512600 A JP 2008512600A JP 2008512600 A JP2008512600 A JP 2008512600A JP 5059749 B2 JP5059749 B2 JP 5059749B2
Authority
JP
Japan
Prior art keywords
instruction
line
cache
data
fetch
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
Application number
JP2008512600A
Other languages
English (en)
Other versions
JP2008541314A (ja
Inventor
ステムペル、ブライアン・マイケル
ブリッジス、ジェフリー・トッド
スミス、ロドニー・ウェイン
サートリウス、トマス・アンドリュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2008541314A publication Critical patent/JP2008541314A/ja
Application granted granted Critical
Publication of JP5059749B2 publication Critical patent/JP5059749B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0886Variable-length word access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/655Same page detection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

この主題は、特に、プロセッサーが命令をフェッチしようと試みているキャッシュに命令の第2の部分がまだ存在しない場合(キャッシュミス)に、キャッシュライン境界を横切る命令のフェッチを効率的に処理するための技術およびプロセッサーアーキテクチャに関する。
現代のマイクロプロセッサーと他のプログラム可能なプロセッサー回路は、メモリのヒエラルキーを利用して命令を記憶し供給する。一般的なヒエラルキーは、プロセッサーのコア、例えば、プロセッサーチップ上に相対的に近接している命令キャッシュまたはL1キャッシュを含む。命令は、命令とデータの両方を記憶する、やや遠いキャッシュまたはL2キャッシュからL1命令キャッシュにロードされる。1つまたは両方のキャッシュには、メインメモリからの命令がロードされる。メインメモリには、プロセッサーを内蔵する装置のディスクドライブのようなより遠隔なソースからロードされてもよい。キャッシュメモリは性能を強化する。プロセッサーコアへの近接性のために、例えばL1キャッシュからの命令のフェッチは相対的に高速である。
多くの実施において、命令キャッシュのラインは多数の命令を保持する。命令あたりのビット数がすべての命令に対して固定であるなら、キャッシュラインはそのような命令の整数を保持するサイズに調節することができる。例えば、各命令が32ビットならば、256ビットキャッシュラインは8つのそのような命令を保持するであろう。そして、ラインに記憶された最初の命令と最後の命令の境界は、キャッシュラインの境界と一致するかまたはそろえられる。しかしながら、プロセッサーが異なる長さの命令、例えば、32ビット命令と16ビット命令を処理する場合、所定のキャッシュライン内の命令はそのラインの境界とそろわないかもしれない。命令が2つのキャッシュラインに重ならないかもしれないことをプロセッサーアーキテクチャが命じるなら、多少の無駄があるであろう。しかしながら、多くのアーキテクチャはそのようなキャッシュ制限を課さない。後者の場合、一方のラインに一部が記憶され、他方のラインに残りが記憶された命令を読む際に問題が生じる。例えば、32ビット命令において、16ビットがキャッシュの1つのラインの終わりに記憶され、他の16ビットが次のキャッシュラインの初めに記憶される場合である。
最新のプログラマブル処理回路はしばしば実行速度を改良するために、パイプライン処理アーキテクチャに依存する。パイプライン化されたプロセッサーは、パイプラインを移動する各命令をシーケンシャルに処理するために複数の処理ステージを含む。もちろん、一方のステージが命令を処理している間、パイプラインに沿った他方のステージは同時に他の命令を処理している。パイプラインの各ステージは、各プログラム命令の全体の処理において必要な異なる機能を実行する。順番および/または機能は多少変化してもよいが、典型的なシンプルなパイプラインは命令フェッチステージ、命令デコードステージ、メモリアクセスまたは読み出しステージ、命令実行ステージおよび結果ライトバックステージを含む。より進歩したプロセッサー設計は、これらのステージのいくつかまたはすべてをいくつかの別個のステージに分解してこれらの機能のサブ部分を実行する。スーパースカラー設計は、機能をさらに分解し、および/または二重の機能を提供し、同様の深さの並列パイプラインにおいて動作を実行する。
フェッチステージはヒエラルキーメモリシステムから命令を取得するパイプラインプロセッサーの部分です。多くのパイプライン設計において、フェッチ動作は2以上のステージに分解される。これらのステージのうち、1つのステージは、L1キャッシュからフェッチしたとき命令を収集し、より高いレベルのメモリと通信し、L1キャッシュに発見されなかった命令データを取得する。
命令の境界がキャッシュライン境界と交差しており、所望の命令の一部が今までのところL1キャッシュに存在しない場合にそのようなフェッチ動作において問題が起こり得る。例えば、L1キャッシュからフェッチされた命令を収集するステージが命令の第1の部分を受信するなら、そのステージは、命令がL1キャッシュ内に発見されたのでより高いレベルのメモリと通信しないであろう。同様に、そのステージがより高いレベルメモリからの第1の部分を含むラインをすでに取得しているなら、そのステージは、命令の他の部分を含むラインに対して第2の要求を開始しないであろう。代わりに、そのステージは、先行するステージにより次のキャッシュラインの処理から命令の残りを受信するために待つ。しかしながら、先行するステージが、所望の命令の残りの部分がL1キャッシュの適切なラインに存在しない(キャッシュミス)を検出するなら、命令の残りの部分を提供することができず、より高いレベルのメモリへの能力を有さず、命令の失われた部分を得ることができない。通常、ミスの場合には、このステージは、アドレスを次のステージに落とし、より高いレベルのメモリからデータを要求するが、次のステージは、分割された命令の第2の部分が先行するステージから来るのを待っている。いくつかの極端な場合において、フェッチ処理は、いずれのステージも要求することができない命令の一部を待っているある期間ロックするかもしれない。
上記の識別された問題を回避するために、パイプラインのフェッチセクション内の2以上のステージが他のメモリソースから命令を要求することを可能にすることは可能かもしれない。しかしながら、そのような解法は、フェッチステージの構成において、他のメモリリソースへのフェッチステージの相互接続において、およびフェッチステージへのおよびフェッチステージを介した命令のフローの管理において、複雑性を追加する。高性能プロセッサー設計の場合、できるだけ少ない場所からより高いレベルのメモリリソースに要求を出すことが望ましい。その理由は、例えば、各そのような要求は、要求されたデータの戻りを待っている間他の処理を遅延させるからである。それゆえ、命令がキャッシュライン境界を交差するかもしれない場合、命令をフェッチする際に改良の余地が依然としてさらにある。
本明細書における教示は、命令がキャッシュライン境界を交差する場合に、キャッシュミスのより効率的な処理を提供する。本質的に、命令の第1の部分のためのキャッシュラインに相当するアドレスは、キャッシュラインからの命令の関連する第1の部分のいずれもがパイプラインの後段のステージに落ちることなく、パイプラインのフェッチ部分の先頭に再循環される。命令の第2の部分のためのラインに相当するアドレス、すなわち、キャッシュミスを生じたアドレスは、プリフェッチ要求として取扱われる。ミスがあるので、プロセッサーは、必要な命令データを命令キャッシュにローディングすることを開始するが、このフェッチングシーケンスに関してこのデータもまたパイプラインの後段のステージに落下しない。第1のラインアドレスが再びフェッチステージを通過し、第2のラインアドレスが通常のシーケンスで続くと、命令のすべての部分が入手可能であり、フェッチすることができ通常の方法で結合することができる。
それゆえ、この教示の観点は、プログラマブルプロセッサーにおいて実行するためにメモリから命令をフェッチする方法を含む。この場合、命令はライン境界を横切るかもしれない。そのような方法の例は、フェッチされる命令が命令ライン間の境界を横切ることを検出することを含んでいるかもしれない。境界を横切る命令の第1の部分を含む命令データの第1のラインをフェッチすると、境界を横切る命令の第2の部分がキャッシュメモリに存在するか否かの決定がなされる。そうでなければ、データの第1のラインからいずれの命令も出力することなく、命令データの第1ラインのフェッチが再循環される。従って、この方法は、命令データの第2のラインをプリフェッチすることを含む。これは命令の欠けた部分を含む。第1ラインのためのフェッチを再循環した後、次に、処理は、命令データの第1のラインと命令データの第2のラインを伴う。命令データのフェッチされた第1および第2のラインからの部分は結合され、境界を横切る命令を出力する。
第1のラインに関する第2のフェッチ前に始まった任意の後のフェッチがあるなら、すなわち、再循環されたフェッチと、第2のラインのためのプリフェッチとの間に進行中の任意の他のフェッチ動作があるなら、任意のそのような介在するフェッチ処理は、フェッチパイプラインから一気に消去される。第1のラインに関するフェッチが再循環されると、イニシャルパスの期間にフェッチから生じたデータは無効とされ、データはフェッチセクションから脱落しない。
この教示の他の観点は、パイプラインプロセッサーのようなプログラマブルプロセッサーを介して処理するために命令をフェッチするフェッチセクションまたはシステムを含む。一例において、そのようなフェッチセクションは、命令キャッシュと、順にアドレスを処理するための少なくとも1つの処理ステージを含む。アドレス毎に、処理は、各それぞれのアドレスに対応する命令または命令の一部を含んでいてもよい命令キャッシュにおいてメモリの1ラインを識別する。処理はまた、識別されたラインからデータを読む。ライン間の境界を横切る命令とその命令のための第2のアドレスに対応するキャッシュのラインが最初は、境界を横切る命令の部分を含まないなら、第1のアドレスに関するフェッチを第1の命令キャッシュ処理ステージに再循環し、第2のアドレスに関するフェッチをプリフェッチに変換し、より高いレベルのメモリリソースから命令キャッシュへの命令データの1ラインのローディングを可能にする手段が提供される。
この教示の他の観点は、そのようなフェッチを内蔵するプログラマブルプロセッサー特にパイプラインプロセッサーを含む。
さらなる目的、利点および新規な特徴は、以下の記述に一部分述べられ、そして一部分は、以下の添付した図面を調べることにより当業者に明白になるであろうし、または例の生産または動作により学習してもよい。この教示の目的と利点は、特に添付されたクレームで指摘された方法論、手段および組み合わせの実施または使用により実現または達成されてもよい。
作図は、限定する目的ではなく例示する目的でこの教示に従う1つ以上の実施を描く。図において、同一の参照数字は、同一または類似のエレメントを指す。
以下の詳細な記載において、関連する教示の完全な理解を提供するために一例として多数の特定の詳細が述べられる。しかしながら、この教示はそのような詳細が無くても実施してもよいことは当業者には明白でなければならない。他のインスタンスにおいて、この教示の不必要な不明瞭な観点を回避するために、詳細なしに、よく知られた方法、手続、コンポーネント、回路が相対的に高いレベルで記載されている。
ここに議論されるように、プロセッサーのための命令をフェッチするように意図されたプロセッサーのシステムまたはセクションの一例は、命令キャッシュおよび複数の処理ステージを含む。そのようなものとして、フェッチセクション自体は典型的には処理ステージのパイプラインから形成される。命令はキャッシュライン境界を横切ることが許される。より高いレベルのメモリへの要求がキャッシュライン境界を横切る命令の第1の部分を有しているとき、ステージは次のラインをチェックする。境界を横切る命令データの第2の部分がキャッシュ(L1)に含まれていないとそのステージが決定するなら、そのステージは第1のラインからの命令の一部のイニシャルフェッチを無効にし、第1のフェッチアドレスをフェッチパイプラインのスタートに戻す。第2のアドレスのための処理がそのステージに移動すると、第2のフェッチはタッチ(touch)またはプリフェッチ動作に変換される。それゆえ、処理はデータを命令キャッシュにロードするが、フェッチパイプラインを介したこの第1のパス(pass)上のデコードステージに第2ラインをパスしない。その結果、命令の第2の部分を含む命令ラインはキャッシュに存在する。(再循環の後で)フェッチステージが第1のアドレスを再び処理するとき、第2のアドレスが再び通常の順番で続き、第2アドレスのためのキャッシュ内のラインは現在境界を横切る命令の必要な第2の部分を含む。第2のラインからの所望の命令のための部分は、フェッチされた第1のラインに落とすことができ、(第1ライン内のデータのほかの不必要な断片を交換する)、フェッチステージからの1サイクルの出力内で所望の命令を完了する。
この例において、第2のフェッチを含む(先行する)ステージより高いパイプラインの任意のステージは、一気に消去される。その結果、命令フェッチパイプラインを介した第2のパスの期間に、所望の命令が1サイクルで結合されるまで命令ラインデータはフェッチパイプラインから出力されない。
添付された図面に図解され、以下に議論される例について詳細に言及される。図1は、パイプラインプロセッサーと関連するメモリのいくつかのステージを図解する。図2は全体的なパイプラインプロセッサーを描画するのに対し、図1は、メモリからのフェッチ命令に含まれるようにパイプラインプロセッサーの第1のセクションの多少より詳細と、ここに述べられるようにキャッシュライン境界を横切る命令を処理することを示す。
図2を参照すると、簡単化されたパイプラインプロセッサー10は、パイプライン処理ステージの5つの主要な処理ステージを含む。すなわち、フェッチ11、デコード13、読み取り15、実行17、および書き戻し19である。図における矢印は、論理的なデータフローを表し、必ずしも物理的な接続ではない。当業者は、これらのステージのいずれかまたは全ては、関連する機能の部分を実行する複数のステージに分解してもよいし、またはパイプラインは、さらなる機能性を提供するためにさらなるステージを含んでもよいことを認識するであろう。実際のスーパースカラー例は2以上の並列パイプラインから構成されてもよい。各々は例えば複数のステージからなる。議論の目的のために、ステージの大範疇のいくつかは単一のステージとして示される。しかし、典型的には、各々は2以上のステージに分解される。キャッシュライン境界を横切る命令の処理のこの議論に対する特定の関心のセクションはフェッチセクション11である。それゆえ、そのセクションを形成する別個のステージは、図1においてより詳細に示される。図1と図2に別個に示されていないけれども、パイプラインプロセッサー10の各ステージは、関連するロジック機能を実施する状態機械または同種のものおよび命令および/または任意の処理結果を次のステージにパスするまたはGPRレジスタファイル29に戻すための関連するレジスタを含む。
例示パイプラインプロセッサー10において、パイプラインプロセッサー10の第1のセクションは命令フェッチ機能11を実行する。フェッチセクションは後段のステージによる処理のために命令を取得するための1つ以上のステーションを備える。フェッチステージ(複数の場合もある)は、一般的にメモリ21により表されるメモリのヒエラルキーから命令を取得する。メモリ21は典型的には、ときどきレベル1(L1)キャッシュ23、レベル2(L2)キャッシュ25と呼ばれる命令キャッシュとメインメモリ27を含む。命令は他のソース、例えば、ブートROMまたはディスクドライブからメインメモリにロードされてもよい。命令キャッシュのようなメモリのいくつかは、プロセッサー10のコア内にまたはコアに近接して存在していてもよいが、メインメモリのような他のメモリはプロセッサー10の外側にまたは別個に存在するであろう。いくつかのアーキテクチャにおいて、命令キャッシュ23は(図1の例に示すように)フェッチセクション11のエレメントであってもよい。
L2キャッシュ27は命令と処理されるデータ(オペランドデータ)の両方を記憶する。L2キャッシュ27は、例えばステージ15によりオペランドデータ読み取りの期間に使用される命令キャッシュ23と(図示しない)データキャッシュの両方により共有される。L2キャッシュ27は命令キャッシュ23より大きくアクセスが遅い。同様に、メインメモリ27はより大きくアクセスするのが遅いがかなりのより多くの情報を記憶する。例えば、命令キャッシュ23からのフェッチは、3つの処理サイクルを必要とするかもしれない。L2キャッシュ25からのフェッチは、10かそこらの処理サイクルを消費するのに対して、メインメモリ27からのフェッチは、おおよそ100処理サイクルを必要とするかもしれない。
フェッチステージ11は各命令をデコードステージ13に供給する。命令デコードステージ13のロジックは受信した命令バイトをデコードし、結果をパイプラインの次のステージに供給する。
ステージの次の大範疇は、ステージ15により集合的に表される、データアクセスまたは読み取りを提供する。読み出しステージ(複数の場合もある)15のロジックは、汎用レジスタ(GPR)ファイル29内の指定されたレジスタ内のオペランドデータをアクセスする。ある場合には、読み出しステージ(複数の場合もある)15のロジックはメモリまたは(図示しない)他のリソースからオペランドデータを取得してもよい。
命令とオペランドデータは、実行機能を提供する1つ以上のステージ17に渡される。実行ステージ(複数の場合も有る)は本質的には、検索されたオペランドデータ上の各命令の特定の機能を実行し、結果を生成する。実行機能を提供するステージまたはステージ群17は、例えば算術論理演算ユニット(ALU)を実施してもよい。ステージ19は結果をファイル29内のレジスタまたはL2キャッシュ25および/またはメインメモリ27のようなメモリに書き戻す。
上で述べたように、図1は、多少より詳細に、パイプライン、およびフェッチセクション11を形成する関連したエレメントのステージを示す。そこに示されるように、例示フェッチセクション11は、アドレスをシーケンシャルに処理するための3つのパイプラインステージ31、33、35を含む。フェッチパイプラインセクション11のステージを介したアドレスフローとして、いつでも1つのアドレスのみがステージ群の各自に存在し、ステージ群の各自で処理されている。一般的に、与えられたアドレスに対して、(IC1ステージ31内の)第1のサイクルはアドレスを処理し、命令キャッシュ23の適切なメモリラインのためのタグを識別する。(IC2ステージ33内の)第2のサイクルはタグを用いて命令キャッシュ23の特定ラインをアクセスする。フェッチパイプラインの命令データアライメント(IDA)セクションは、IC2ステージ33から落ちたアドレスデータを処理するためのIDAステージ35と、実際の命令を抽出するためにiCache23から落ちたデータを処理するためのIDAデータステージ39とを含む。それゆえ、(IDAエレメント35および39内の)第3のサイクルは命令キャッシュ23の特定ラインからのデータを処理し、デコードステージ13に出力するために、そのライン上の8以上の命令から少なくとも1つの命令、例えば16ビットまたは32ビット命令を回復する。プロセッサーは、IDAステージ内のキャッシュデータのラインから2以上の命令を抽出するように設計されてもよいことを当業者は理解するであろう。
さらに具体的に言うと、命令のアドレスは意図された実行の順番に第1のステージIC1 31に供給される。多くの場合、順番はシーケンシャルである。しかし、プログラム実行は順番を変えてもよい。例えば、条件付分岐命令の場合に条件の発生に応じて変えてもよい。命令キャッシュ23のメモリのラインは、対応するタグを用いてアクセスされる。第1の命令キャッシュ処理ステージ(IC1)31はコンテンツアドレッサブルメモリ(CAM)を用いて、受信した命令アドレスに応答して、キャッシュラインのためのタグを識別する。タグはキャッシュされた命令をサーチするために使用されたアドレスのサブセットである。本質的に、CAM(IC1)ステージ31はアドレス(タグ)を取り、それをキャッシュ23において一致することができる可能なタグと比較し、サーチ結果のセットを作成する。アドレスがステージ33にあるときにこれらはCAMサイクルの終わりで捕らえられ、RAM(IC2)サイクルの期間に使用される。従って、IDAデータステージ39に捕らえられるようにキャッシュ23から正しいデータを導く。パイプラインホールドがキャッシュによってIDAに出力されるデータの迅速な捕獲を防止する場合に、図1のキャッシュ23の出力において示されるラッチはトランスペアレントラッチである。
上述したように、1つのタグが命令キャッシュ23内のメモリの1ラインに相当するが、各ラインは多数の命令を保持する。それゆえ、メモリからの指定されたラインを回復するために1つのタグの処理は、IC2ステージ33における複数の記憶された命令を回復する。ここでIDA(命令データアライメント)ステージと呼ばれる第3のステージ35は、IDAデータ処理セクション39を制御し、選択された命令ラインからデータを受信し処理する。命令キャッシュ23のボトムラインまたはレジスタ37は、選択されたメモリラインからの命令データを保持する。IDAデータセクション39はレジスタ41を含みラッチ37からデータを受信し処理する。一例において、レジスタ41は64ビットラッチであってもよい。ステージ35およびレジスタ37におけるIDA処理は本質的に命令キャッシュ23のボトム39から適切なビットを選択し、命令として改編するためにビットを整列するように必要に応じてこれらのビットを再組織化し、回復された命令をデコードステージ13に出力する。後にさらに議論されるように、IDAデータセクション39の他のエレメントはキャッシュミスの場合により高いレベルのメモリ25および27から命令データを取得するような関連した機能を実行する。
Advanced Risc Machines社によりライセンスされた'ARM'タイププロセッサーのようないくつかのプロセッサーアーキテクチャは少なくとも2つの命令セットをサポートする。この場合1つのセットの命令は他のセットの命令とは異なる長さを有する。例えば、ARMタイププロセッサーにおいて、標準命令は32ビットの長さである。第2のまたはサム(Thumb)命令セットは、ARM状態における対応物とは異なって符号化された16ビットの圧縮された命令および32ビットの命令から構成される。16ビットサム(Thumb)命令は32ビットのARM等価物に解凍され、従って、通常の方法で処理することができる。しかしながら、低減された長さのために、16ビットサム(Thumb)命令は種々のメモリ装置においてより少ない記憶を必要とし、またはパイプラインプロセッサー10と関連している。典型的に、より長い語長を有する命令はより広範囲の動作を提供し、および/またはより強力なまたはより複雑な動作を提供する。上述したように、より短い語長を有する命令は、より短い命令セットの限定された能力が適切であるプログラムまたはサブルーチンに対してメモリ節約を提供する。
マシンはいくつかの状態−ARM, Thumb, Jazelle-X/T2EE等の1つで動作し、その状態に対して設計された命令に対してのみ動作してもよい。ARM状態は32ビット命令のみを含み、任意のエンコーディングは5つの最上位ビットにおいて適法である。T2EEがそうであるように、サム(Thumb)状態は16ビット命令と32ビット命令の混合物を含む。これらの状態において、5つの最上位ビットは、問題となっている命令が16ビット命令かまたは32ビット命令か否かを決定する。
図3に示されるように、256ビットキャッシュメモリラインの一例は、8つの32ビット命令を保持していてもよい。ARMにおいて、すべての命令は32ビットワードで構成され、すべての32ビット命令は、例えば、命令キャッシュ23のライン内の32ビットワードライン境界と一致する。キャッシュラインが16ビットのサム(Thumb)命令のみを含むなら、例えば、プロセッサーがサム(Thumb)モードで動作しているなら、図4に示すように同じキャッシュラインは16の16ビット命令を保持していてもよい。いくつかのプロセッサーおよび/またはサム(Thumb)を含むいくつかの動作モードは32ビット命令と16ビット命令の混合を可能にするであろう。従って1つのキャッシュラインは、32ビット命令と16ビット命令の混合を含むであろう。
図5は各キャッシュライン上で32ビット命令と16ビット命令の異なる組み合わせを保持する、2つの連続したラインを示す。ライン内の命令の配置は全く任意であり、パイプラインプロセッサー10が異なるARM命令およびサム(Thumb)命令に対して動作するとき、時間に対して変化するであろう。時々、命令はキャッシュライン境界と一致するであろう。しかしながら、図5の例により表されるように、32ビット命令が2つのキャッシュライン間の境界を横切る状況が生じるであろう。この例において、第1ラインCL1上の最後の16ビットは、32ビット命令のハーフAを保持する。第2ラインCL2の最初の16ビットは同じ32ビット命令の他のハーフBを保持する。今、図1のフェッチパイプライン11を介したA−B命令の処理について考える。
第1の処理サイクルの期間に、IC1ステージ31は、パートAを含むラインCL1に対応するアドレスを最初に受信し、そのアドレスを処理して、ラインCL1のためのタグを回復する。次の処理サイクルにおいて、IC2ステージ33はそのタグを用いて、CL1ラインをアクセスし、そのライン上のデータを命令キャッシュ23のボトムにおけるラッチ37に移動する。また、キャッシュ23はヒット(H)またはミス(M)ライン43にヒット表示を供給し、キャッシュのボトムにおけるラッチ37に今存在するCL1ラインは命令の所望のパートAを含むことを表示する。IC2がCL1のためのサーチ結果を処理している間、すなわち、第2の処理サイクルの期間、IC1ステージ31は次のアドレス、この場合、パートBを含むラインCL2に対応するアドレスを受信する。IC1ステージ31はそのアドレスを処理し、ラインCL2のためのサーチ結果を回復する。
フェッチ処理の第3のサイクルにおいて、パートAを含むラインCL1のためのアドレスは、IDAステージ35に落ちる。前のサイクルからのヒット(H)表示に応答して、IDAステージ35の処理は、IDAデータセクション39内のレジスタ41に、命令キャッシュ23のボトムのラッチ37から、命令のパートAの16ビットを含むビットを捕らえさせる。同時に、IC2ステージ33はラインCL2のためのタグを使用してメモリのそのラインからデータを回復し、データを命令キャッシュ23のボトムにおけるラッチ37にロードする。
IDAステージ35が第1のアドレスを受信すると、ラッチ37から降りてくるデータを調べる。本質的に、それは所望の命令のためのデータを探している。その解析の一部として、それは、要求された命令がキャッシュライン境界を横切るかどうかを識別するであろう。
命令の例としてARMおよびサム(Thumb)を用いて、32ビットサム(Thumb)命令は常に、5つの最上位ビットの3つの可能な値(11101;11110;11111)の1つで始まる。本質的に、ロジックは、ラッチ41内のデータの各16ビット部分を見ることができる。5つの最上位ビットが32ビット命令のための3つの必要な値の1つを有していないなら、16ビットはサム(Thumb)命令を表す。しかしながら、5つの最上位ビットが32ビット命令のために必要な3つの値の1つを有することをロジックが発見するごとに、ロジックは、16ビットを32ビット命令の最初のハーフとして認識する。スロットがキャッシュラインのトレーリングエンド(trailing end)にないとすると、ライン上の次の16ビットは、32ビット命令の他のハーフになるであろう。32ビット命令のための3つの値の1つを有するスロットが、5つの最上位ビットとして、キャッシュラインのトレーリングエンドにあるなら、32ビット命令はキャッシュライン境界を横切る。それゆえ、IDAステージ35は、命令のパートAが第1のラインCL1の終わりにあると決定することができるが、所望の命令のパートBを発見するために他のラインを見る必要がある。
最初に、我々は、この例のために、命令の他の部分は次のキャッシュラインCL2に含まれると仮定した。フェッチ処理の第2のサイクルの期間に、キャッシュ23はまた、キャッシュ23のボトムにあるラッチ37に今あるCL2ラインは、命令の所望のパートBを含むことを示すヒット(H)表示をH/Mライン43に供給する。このようにして、パートBは、キャッシュのボトムに現れる。IDAステージ35は、キャッシュラインデータの16ビットセクションを再び調べ、ラインCL1とラインCL2の間の境界を横切る命令の16ビットの第2の部分を発見する。IDAステージ35はレジスタ41に所望の命令のさらなるパートBを捕らえさせる。図6に図式的に表されるように、断片は適切に整列されていないかもしれないけれども、レジスタ41を形成する64ビットラッチは所望の命令の両方の断片を含む。IDAデータステージ39とレジスタ41によるさらなる処理は、図7に図式的に表すように、2つのパートAおよびBのデータビットを32ビット命令に整列し結合し、結合された命令をデコードステージ13に渡す。
先行する例は、所望の命令のパートAとパートBの両方が命令キャッシュ23内のCL1キャッシュラインとCL2キャッシュライン内に存在する、すなわち、ヒット−ヒット状況であると仮定される。しかしながら、当業者は、これは常にそうなるとは限らないことを理解するであろう。命令キャッシュ23のアクセスされたライン内の命令データに対して、命令の第2の部分をフェッチするための試みはキャッシュミスを生じるであろう状況が起こるであろう。今、ヒットミスについて考える。第1のパートAはCL1ライン(ヒット)に存在するがパートBは、IC2ステージ33の処理により回復されるとき(ミス)、CL2ライン内に最初は存在しない。
先の例のように、第1の処理サイクルの期間に、IC1ステージ31は最初にパートAを含むラインCL1に対応するアドレスを受信し、そのアドレスを処理して、ラインCL1のためのサーチ結果を回復する。次の処理サイクルにおいて、IC2ステージ33は、これらのサーチ結果を用いてCL1ラインをアクセスし、そのライン上のデータを命令キャッシュ23のボトムのラッチ37に移動する。キャッシュ23はまた、キャッシュのボトムにおけるラッチ37に今存在するCL1ラインは、命令の所望のパートAを含むことを表示するヒット(H)表示をライン43上に供給する。IC2がCL1のサーチ結果を処理している間、すなわち、第2の処理サイクルの期間、IC1ステージ31は、次のアドレス、この場合、パートBを含むと期待されているラインCL2に対応するアドレスを受信する。IC1ステージ31はそのアドレスを処理し、ラインCL2のためのサーチ結果を回復する。
フェッチ処理の第3のサイクルにおいて、パートAを含むラインCL1のためのアドレスは、IDAステージに降りてくる。先のサイクルからのヒット(H)表示に応答して、IDAステージ35の処理は、IDAデータセクション39内のレジスタ41に、命令キャッシュ23のボトムにおけるラッチ37から、命令のパートAの16ビットを含むビットを捕らえさせる。同時に、IC2ステージ33は、ラインCL2のためのサーチ結果を使用し、メモリのそのラインからデータを回復し、データを命令キャッシュ23のボトムにあるラッチ37にロードしようと試みる。
この点に関して、ヒット−ミス例の処理は本質的に第1のヒット−ヒット例と同じである。しかしながら、この第2の例において、そうでなければIC2ステージ33がCL2ラインからのデータをラッチ37に移動するとき、キャッシュ23は、キャッシュ23のボトムに今あるCL2ラインは命令の所望のパートBを含まないことを示すミス(M)をH/Mライン43に供給する。
この例において、A−B命令は、キャッシュライン境界を横切り、セクション11内のロジックは、命令キャッシュ23からアクセスされたデータの第1のラインCL1内の命令データの第1のパートAを(成功裏にフェッチした)が、命令データの第2のパートBは、キャッシュ23からアクセスされたデータの第2のラインCL2に存在しないことを決定した。それゆえ、(任意の命令データをデコードステージ13に通過させないように)IDAステージ35のロジックは、CL1ラインに対応するアドレスのフェッチを無効にする。また、第2のフェッチアドレスを含む(先行する)ステージより高いパイプラインの任意のステージはフラッシュ(flushed)される。図解された3つのステージフェッチアーキテクチャにおいて、IC1ステージ31は、CL2ラインのためのアドレスを保持するIC2ステージの上の唯一のステージであるので、IC1ステージはフラッシュ(flushed)される。
この時点で、IDAステージ35のロジックはまた、再フェッチステージ45を介してCL1に対応する第1のフェッチアドレスは、フェッチパイプライン11の開始に戻す。再フェッチステージ45は、次のサイクルにおいて、IC1ステージ31への次のアドレス入力として再循環されたアドレスを供給し、アドレス入力のストリングをその第1のアドレスにリセットするので、次の入力アドレスは、再循環されたアドレスの後、この場合、CL1ラインおよび命令の部分Aを識別したアドレスの後に順番に適切に続くアドレスである。特に注目すべきなのは、これは、その第1のアドレスに対して処理を再開するとき、部分Bを含むように期待されるラインCL2に相当するアドレスは、フェッチパイプライン11を最初に通過する場合のように、その第1のアドレスの後迅速にステージを再び流れることを意味することである。
第3の処理サイクルの期間、第2のラインCL2がミスを生じたと決定したとき、IC2ステージ33は、そのラインのためのフェッチをフェッチ(F)からタッチ(T)またはプリフェッチ動作に変換する。フェッチ動作は命令を検索し、デコードステージ13に命令を渡し、次には、それを最終的な実行のために渡す。タッチ(T)またはプリフェッチ動作は、命令を取り出すだけであり、命令が命令キャッシュ23にまだ存在していないなら、処理は命令をそのキャッシュ23にロードするであろうことを知る。プリフェッチは、実行のために後のステージに命令を落とすことなく、後の処理のために命令キャッシュ23に命令データが存在することを保証する。動作がミスを生じる場合、それは、タッチ処理は、L2キャッシュ25および/またはメインメモリ27のような他のメモリリソースから必要な命令データを取得するであろうことを意味し、命令データのラインは、関連するアドレスがフェッチセクション11のステージを流れる次の時間に提供されるであろう。
IC2ステージ33のロジックは、T/Fタイプフィールド47、典型的にはフラッグビットを含むラッチまたは同種のものを含む。これは、そのステージ33において処理中のアドレスがタッチ(Touch)またはフェッチタイプ動作に関連することを示す。IDAステージ35のロジックは、類似のT/Fタイプフィールド49を含むラッチまたは同種のものを含む。IC2ステージ33がアドレスをIDAステージ35に渡すと、そのフィールド47からのTまたはFタイプ表示をIDAステージ35内のフィールド49に渡す。
この議論の目的のために注目すべきは、第2のアドレスがIC2ステージ33に最初に受信されると、IC2ステージはそれをフェッチ(F)動作として取扱うことである。しかしながら、キャッシュライン境界を横切る命令の場合、キャッシュが、CL2キャッシュライン上に第2の部分Bが存在しないことを示すライン43にミス(M)を供給するとき、IC2ステージは、タイプフィールド47内のFをTに変更し、フェッチをタッチに効率的に変換する。次に、図1の破線矢印により表されるように、IC2ステージは、タッチ(T)表示をIDAステージ35に渡す。
第4の処理サイクルにおいて、第1のアドレスが再フェッチステージ45に渡されたとき、第2のアドレスはIDAステージ35に渡される。そのアドレスで、IC2ステージ33は、今度は、例えば、IDAステージロジック内のフィールド49に使用するためにタッチ表示(T)を渡すことによりプリフェッチ処理のためにのみアドレスが使用されるという表示を渡す。また、IDAステージ35は、ライン43上のミス(M)表示から、キャッシュ内のライン上に所望の命令データが存在しないことを知る。それゆえ、IDAステージ35およびIDAデータセクション39は、より高いレベルのメモリリソース(複数の場合もある)から必要な命令データをロードするためのステップを開始することができる。IDAエレメント35、39、41は、本質的に命令キャッシュ23にデータをロードするために、プリフェッチとして第2のアドレスに対してタッチ処理を取扱うが、任意の結果をデコードステージ13に渡さない。結果として、命令ラインは、より高いレベルのメモリからキャッシュ23にロードされ、後の処理のために利用される。
再循環の後で、フェッチセクション11が再び第1のアドレスに関する第1のフェッチを処理するとき、第2のアドレスが再び続くが、第2のアドレスのためのラインは今はL1命令キャッシュ23に存在する。第2のラインCL2からの所望の命令のための部分Bは、IDA処理の期間に、フェッチされた第1のラインCL2からの部分Aとともに落ちることができ、ライン内の別の不必要なデータの部分を交換し、まさに上で述べたヒット−ヒット例の場合のように、フェッチセクション11からの出力の1ライン内の所望の命令を完了する。しかしながら、これらの動作を理解するために、IDAステージに至る第2のラインアドレスのためのタッチの動作を多少より詳細に考察することは有効かもしれない。
パイプラインのフェッチセクション11は、L2キャッシュ25からIDAセクション39内のレジスタ41への命令データの転送のために使用される、2つのフィル(fill)バッファ51および53を含む。指定されたアドレスのためのフェッチタイプ動作がIDAステージ35に到達し、ミス(M)を生じると、IDAデータセクション39はミスした命令ラインのための要求をL2キャッシュ25に送信する。L2キャッシュ25は、要求されたラインのためのデータを含んでいてもよい。またはそうでなければ、L2キャッシュ25は、典型的にメインメモリ27から、要求されたラインのためのデータを取得する。L2キャッシュ25はラインの半分をバッファ51にロードし、他の半分をバッファ53にロードする。IDAデータセクション39のロジックは、キャッシュ23内のラッチ37からのそのデータのレジスタ41へのロードと類似した方法で、キャッシュラインデータの関連する部分をレジスタ41にロードする。同時に、バッファ51と53は、命令データの全体のラインを記憶と将来の使用のために命令キャッシュ23に供給する。
我々のヒット−ミス例において、第2のキャッシュラインアドレスのためのタッチはIDAエレメントとフィルバッファのこれらの動作を用いて、必要なラインCL2のためのデータを命令キャッシュ23にロードする。データはデコードステージに落とされないので、部分はIDAデータセクションに行くかもしれないが、典型的には、IDAレジスタ41にロードされない。IDAステージは、そのアドレスに関する第1のフローをタッチタイプ動作、すなわち、プリフェッチオンリーであるとみなす。
タッチが完了した後の次のサイクルにおいて、第1のアドレスは、IC1ステージ31において再び処理され、第1のキャッシュラインCL1のためのタグを識別する。IC1ステージ31は第1のタグをIC2ステージ33に渡す。次のサイクルにおいて、IC2ステージは、キャッシュラインIC1をリードし、一方第2のアドレスは、IC2ステージ33において再び処理され、第1のキャッシュラインCL2に対してタグを識別する。IC2ステージ33の処理は、CL1ラインからラッチ37にデータをロードし、次のサイクルにおいて、データのそのラインは、IDAレジスタ41に流れる選択された部分とともに落ちる。レジスタ41内の関連するCL1データとともに、IC2ステージ33はキャッシュラインCL2をリードし、そのラインからのデータをラッチ37にロードする。この第2のパスに対して、両方のキャッシュラインのリーディングは、先のヒット−ヒット例の場合のようにヒットを生成する。
このようにして、部分Bは、フェッチセクション11のパイプラインを介した命令の第2のパス上のキャッシュのボトムに現れ、IDAステージ35はレジスタ41に所望の命令のそのさらなる部分を捕らえさせる。図6によって図式的に表されるように、部分は適切に整列されていないかもしれないけれども、レジスタ41を形成する64ビットラッチは、今所望の命令の両方の部分を含む。IDAデータステージ39とレジスタ41によるさらなる処理は、図7により図式的に表されるように、2つの部分AおよびBのデータビットを整列して結合し、結合された命令を前の例のようにデコードステージ13に渡す。
例において、処理が第1のフェッチアドレスをフェッチパイプライン11のスタートに戻すと、デコードステージに渡さないように、その初期パスは、同時に無効にされる。また、第2のフェッチアドレスを含む(先行する)ステージより高いパイプラインの任意のステージはフラッシュ(flushed)される。第1のアドレスが再循環されると、第1のアドレスと、第2のアドレスのためのタッチ(touch)との間に進行中のアドレスは無い。プリフェッチが完了すると、IDAステージ35は、IDAレジスタ41内のアドレスと、関連するデータを破棄する。この結果、命令フェッチパイプラインを介した第2のパスの期間に所望の命令が結合されるまで、命令ラインデータはフェッチパイプライン11から出力されない。
このタイプの処理の場合、IDAエレメントのみがより高いレベルのメモリリソースからフェッチを開始することができる。これは、より高いレベルのメモリリソースに要求する命令フェッチ処理において唯一つのステージがあるという点において高性能処理設計を容易にする。再循環された第1のアドレスは、通常、IC1、IC2およびIDAに戻す前に再フェッチ45において1サイクルを費やすにすぎない。これらの場合において、フェッチステージを介した第2のパスの時間内に、L2キャッシュ25はすでに命令データの第2の部分をキャッシュ23に戻すことは通常できない。それゆえ、IDAステージは休み、L2キャッシュ25を待ち、フィルバッファ51、53から直接命令データの第2の半分を受信する。
先行する例において、キャッシュライン境界を横切る命令のための2つのラインの処理は、第1のラインが命令の一部を含むが、第2の例は含まないという点においてヒット−ミスを生じる。いずれのキャッシュラインも命令の所望の部分を含まない、すなわち、ミス−ミスの場合実質的に類似の処理が適用される。後者のケースにおいて、第1のラインのための処理は、L2キャッシュ25またはメインメモリ27からデータを取得し、命令データのラインを命令キャッシュ23にロードする。第2のラインがミスであると決定すると、第1のアドレスは再循環され;第2のフェッチはタッチに変換され;処理はヒット−ミスの例のように続く。
第1のキャッシュラインは、所望の命令の一部を含まないが、第2のラインは含む(ミス−ヒット)場合は、ヒット−ヒットの場合と非常に良く似てフェッチセクション11のステージを流れる。第1ラインの処理はミスを生じるが、IDA処理はより高いレベルのメモリリソースから命令データの必要なラインを取得する。第1のラインのためのIDAレジスタ41を満たすためにフィルバッファ51、53からビットが選択される。その後、ラッチ37からの第2ラインの処理(第2ライン上のヒット)は、ヒット−ヒット例の場合と同じである。
処理ロジックを要約するために、いつ命令フェッチ動作がIDAステージ35に到達したか、そして利用可能な目標となるキャッシュラインのための命令データのすべてを有したかの決定がなされる。IDAステージは命令がライン境界を横切るかどうかを決定する。そうでなければ、IDAステージは、通常の方法で命令を処理する。しかしながら、ライン境界の横切りがあるなら、IDAステージのロジックはキャッシュ23からのヒット/ミス表示を見て、境界を横切る命令の第2の部分を含まなければならない次のライン上にヒットがあるか否かを決定する。そうであるなら、IDAステージは、キャッシュから第2の部分を捕捉することができ、完全な命令をデコードステージ13に供給することができる。しかしながら、IC2ステージ33に係属している次のライン上にミスがあるなら、すなわち、次のキャッシュラインが、境界を横切る命令の必要な第2の部分を含まないなら、IDAステージおよびIC2ステージはここに開示された処理を実施する。
そのような場合、IDAステージ35は、第1のアドレスに関する現在のフェッチを無効にし、例えば、再フェッチステージ45を介して第1キャッシュラインのためのアドレスを再循環する。第2のラインのためのアドレスはIDAステージ35に落ちる。しかしながら、その際、第2アドレスのための処理はフェッチタイプ動作からプリフェッチタイプ動作に変換される。IC1ステージがフラッシュされる。IDAステージは、L2キャッシュ25および/またはメインメモリ27からの必要な命令データをロードするための動作を開始する。このアップロードが完了するときまでに、データは命令キャッシュ23に記憶され、IC1ステージ31は、再循環された第1のアドレスから処理を再開することができる。2度目にフェッチセクション11のステージを介して2つのアドレスが流れるので、境界を横切る命令のためのすべての必要なデータは、キャッシュメモリ23内の適切な2つのライン上に存在し、フェッチセクションはこれらの部分を検索することができ、ビットをコンパイルして1つの命令にし、例えばデコーディングのために、パイプラインプロセッサー10の下の次のステージに命令を出力する。
命令キャッシュ23が完全に動作可能であるとき、上で概要を述べた処理が適用される。しかしながら、命令キャッシュ23がディスエーブルの場合、例えばスタートアップのとき、フィルバッファ51、53を介したデータのローディングに類似の処理が適用されてもよい。その場合、プロセスフローは本質的にキャッシュ23のラインにミス−ミス状況を生じる。第2のアドレスがタッチに変換されるとき、フィルバッファの1つがテンポラリキャッシュとして使用され、命令部分Bのためのラインの関連する半分を保持する。第1の命令が循環されると、第1ラインの関連部分は、他のフィルバッファにロードされ、IDAデータセクションは、本質的にライン境界を横切らなかった命令に対して行うように、2つのバッファ51、53からの命令をコンパイルすることができる。
上で述べられたビットの数、例えば、異なるタイプの命令の16ビット長および32ビット長、キャッシュラインの8ワード長およびラッチ、レジスタおよびバッファの種々のサイズは例示に過ぎない。当業者は、命令長および種々のコンポーネントのサイズは、異なるプロセッサーアーキテクチャおよび実施において長くても良いしまたは短くても良いことを認識するであろう。また、構成において、より広範囲の可能な命令サイズ、例えば16ビット、32ビット、64ビットまたはそれ以上のビットであってもよい。さらに、フェッチセクション11またはパイプラインプロセッサー10においてさえもステージの数はかなり変化してもよい。けれども、プロセッサーは、ここに述べた開示に従ってライン境界を横切る命令のフェッチ処理を実施してもよい。
上述の記載は、ベストモードと考えられるものおよび/または他の例ついて記載したけれども、種々の変更を実施してもよく、ここに開示された主題は、種々のフォームおよび例で実施してもよく、教示は、多くのアプリケーションに適用されてもよい。そのうちのいくつかのみをここに記載した。それは、この教示の真の範囲内に入る任意のおよびすべてのアプリケーション、変更および変形を請求するために以下のクレームにより意図される。
図1は、境界を交差する命令の効率的な処理のためのフェッチセクション実施技術の例示エレメントを含むプログラマブルプロセッサーの一部の高レベルブロック図である。 図2は図1に示すエレメントを包含してもよいプログラマブルパイプラインプロセッサーの機能ブロック図である。 図3はキャッシュラインが8つの32ビット命令を含む命令キャッシュのラインからの命令データを描画する。 図4はキャッシュラインが16の16ビット命令を含む命令キャッシュのラインからの命令データを描画する。 図5は、各々が16ビット命令と32ビット命令と境界を交差する32ビット命令の一部を含む、命令キャッシュの2ラインからの命令データを描画する。 図6は、選択されたビットを1つの32ビット命令に編集するための命令データアライメント処理の前の64ビットレジスタ内のデータを描画する。 図7は、境界を横切る部分を含む2ラインをフェッチすることにより回復された結果として生じる32ビット命令を描画する。

Claims (18)

  1. 命令がメモリライン境界を横切る、プログラマブルプロセッサーにおいて実行するためにメモリから命令をフェッチする方法において、
    フェッチ手段により、第1のアドレスに応答して命令データの第1のラインを最初にフェッチすることと、
    決定手段により、命令データの第1のラインから、フェッチされる命令が、命令データの前記第1のラインと命令データの第2のラインとの間の境界を横切るか否かを決定することであって、命令データの前記フェッチされた第1ラインは、フェッチされる命令の第1の部分を含むことと、
    前記決定手段により、フェッチされる前記命令が前記境界を横切ると決定すると、第2のアドレスに対応するキャッシュメモリのラインがフェッチされる前記命令の第2の部分を含むか否かを決定することと、
    前記第2のアドレスに対応する前記キャッシュメモリがフェッチされる前記命令の前記第2の部分を含まないと決定すると、
    (a)再循環手段により、命令データの前記第1のラインの初期フェッチングを無効にし、前記第1のアドレスを再循環することと、
    (b)前記フェッチ手段により、より高いレベルのメモリリソースから命令データの前記第2のラインをプリフェッチすることと、
    (c)前記フェッチ手段により、前記再循環された第1のアドレスに応答して、命令データの前記第1のラインをフェッチすることと、
    (d)前記フェッチ手段により、前記第2のアドレスに応答して、命令データの前記プリフェッチされた第2のラインをフェッチすることと、
    (e)コンパイル手段により、命令データの前記フェッチされた前記第1および第2のラインからフェッチされる命令の前記第1および第2の部分をコンパイルすることと、
    を備え、
    前記より高いレベルのメモリリソースおよび前記キャッシュメモリは、マルチレベルのキャッシュヒエラルキーにおいて関連づけられ、前記より高いレベルのメモリリソースは、キャッシュメモリにおいてフェッチおよびキャッシュされることができる命令データを格納し、前記より高いレベルのメモリリソースは、前記キャッシュメモリのレベルよりも高い前記マルチレベルキャッシュヒエラルキーのレベルを有する、方法。
  2. 命令データの前記第1ラインの初期フェッチングを無効にすることは、命令データの前記初期フェッチングされた第1のラインから、フェッチされる前記命令のいずれかを、前記プロセッサーの他のエレメントに出力することを防止する、請求項1の方法。
  3. 前記プリフェッチは、前記キャッシュメモリからの命令データの前記第2のラインの次のフェッチングの前に命令データの前記第2ラインのいずれかを前記プロセッサーの他のエレメントに出力することなしに、より高いレベルのメモリリソースからの命令データの前記第2のラインを前記キャッシュメモリにロードする、請求項2の方法。
  4. 前記プリフェッチのステップは、前記第2のアドレスに関するフェッチ動作を前記第2のアドレスに関するタッチ動作に変換することを含む、請求項3の方法。
  5. 前記第2のアドレスに対応する前記キャッシュメモリが、フェッチされる前記命令の前記第2の部分を含まないと決定すると、次のアドレスに対してすでに始まったかもしれない任意のフェッチ関連処理をフラッシュすることをさらに備えた、請求項1の方法。
  6. プログラマブルプロセッサーのための命令をフェッチする方法において、
    検出手段により、フェッチされる命令が含まれるデータのメモリライン間の境界を横切ることを検出することと、
    前記検出手段により、前記境界を横切る命令の第1の部分を含む命令データの第1のラインをフェッチすると、前記境界を横切る命令の第2の部分がキャッシュメモリに存在しないことを検出することと、
    再循環手段により、前記第2の部分が前記キャッシュメモリに存在しないことを検出することに応答して、命令データの前記第1のラインからフェッチされる命令のいずれかの出力なしに、命令データの前記第1のラインを再循環することと、
    フェッチ手段により、命令データの第2のラインをプリフェッチすることと、
    前記フェッチ手段により、前記再循環に基いて、命令データの前記第1のラインをフェッチし、命令データの前記プリフェッチされた第2のラインをフェッチすることと、
    出力手段により、命令データの前記フェッチされた第1および第2のラインからの部分を結合し、前記境界を横切る命令を出力することと、
    を備えた方法。
  7. 前記第1のラインのフェッチの再循環は、前記第2の部分が前記キャッシュメモリに存在しないことを検出する前にフェッチされた前記第1のラインからフェッチされる前記命令の任意の部分を無効にすることを備えた、請求項6の方法。
  8. 前記第2のラインのプリフェッチは、前記第2のラインに関するフェッチング動作を前記第2のラインに関するプリフェッチング動作に変換することを含む、請求項6の方法。
  9. 前記第2のラインのプリフェッチと前記第1のラインの再循環されたフェッチングとの間の進行中の任意のフェッチ動作をフラッシュすることをさらに備えた、請求項6の方法。
  10. パイプラインプロセッサーのためのフェッチセクションにおいて、
    命令キャッシュと、
    アドレスの入力ストリングにおいて各それぞれのアドレスに対応するキャッシュラインを識別するための第1の命令キャッシュ処理ステージと、
    キャッシュラインの各識別に応答して、前記それぞれのアドレスに対応するキャッシュ内のメモリのラインから命令データを読む第2の命令キャッシュ処理ステージと、
    前記第2の命令キャッシュ処理ステージにより読まれた命令データの1つまたはそれ以上のラインに応答して、フェッチされた命令を出力する命令データアライメントセクションと、ここにおいて、前記命令データアライメントセクションはまた、最初に前記命令キャッシュ内に発見されなかった任意の命令または部分に対してより高いレベルのメモリリソースからデータを取得する、
    命令が前記第1および第2のアドレスに対応するライン間の境界を横切ることを検出し、第2のアドレスに対応する前記キャッシュのラインが最初は、前記境界を横切る命令の部分を含まないことを検出すると、前記第1の命令キャッシュ処理ステージへの第1のアドレスに関するフェッチを再循環し、前記第2のアドレスに関するフェッチをプリフェッチに変換し、前記命令データアライメントセクションに、より高いレベルのメモリリソースから前記命令キャッシュに命令データのラインをロードさせる手段と、
    を具備し、
    前記より高いレベルのメモリリソースおよび前記キャッシュメモリは、マルチレベルのキャッシュヒエラルキーにおいて関連づけられ、前記より高いレベルのメモリリソースは、キャッシュメモリにおいてフェッチおよびキャッシュされることができる命令データを格納し、前記より高いレベルのメモリリソースは、前記キャッシュメモリのレベルよりも高い前記マルチレベルキャッシュヒエラルキーのレベルを有する、
    パイプラインプロセッサーのためのフェッチセクション。
  11. 前記命令キャッシュの各ラインは、2またはそれ以上の異なる長さの複数の命令を記憶することができる、請求項10のフェッチセクション。
  12. 前記再循環する手段は、前記第1のアドレスを前記第1の命令キャッシュ処理ステージの入力に渡すための再フェッチステージを含む、請求項10のフェッチセクション。
  13. 前記フェッチされた命令をデコードするためのデコードステージと、デコードされた命令に従って処理するためにオペランドデータを取得するための読み出しステージと、オペランドデータに対してデコードされた命令を実行するための実行ステージと、実行結果を記憶装置に書くためのライトバックステージとをさらに備えた、請求項10のフェッチセクションを備えたパイプラインプロセッサー。
  14. パイプラインプロセッサーのためのフェッチセクションにおいて、
    命令キャッシュと、
    複数のアドレスの各々を順番に処理し、各それぞれのアドレスに対応する命令または部分を含んでいてもよい命令キャッシュ内のメモリのラインを識別し、識別されたラインからデータを読む、少なくとも1つの処理ステージと、
    フェッチされる命令がキャッシュライン境界を横切ることを検出し、2つのアドレスされたキャッシュラインの第2のラインにおいて境界を横切る命令の部分の欠落を検出し、この検出に応答して、前記2つのキャッシュラインの第1のラインに相当するアドレスに関するフェッチを無効にし、少なくとも1つの処理ステージへの入力のために対応するアドレスを再循環し、より高いレベルのメモリから、第2のキャッシュラインに対する欠落の部分を含むデータをプリフェッチし、前記フェッチセクションを介して前記対応するアドレスの第2のフロー上の前記境界を横切る命令の完全なフェッチをイネーブルにする手段と、
    を具備し、
    前記より高いレベルのメモリリソースおよび前記キャッシュメモリは、マルチレベルのキャッシュヒエラルキーにおいて関連づけられ、前記より高いレベルのメモリリソースは、キャッシュメモリにおいてフェッチおよびキャッシュされることができる命令データを格納し、前記より高いレベルのメモリリソースは、前記キャッシュメモリのレベルよりも高い前記マルチレベルキャッシュヒエラルキーのレベルを有する、
    パイプラインプロセッサのためのフェッチセクション。
  15. 前記少なくとも1つの処理ステージは、
    アドレスの入力ストリング内の各それぞれのアドレスに対応するキャッシュラインを識別するための第1の命令キャッシュ処理ステージと、
    キャッシュラインの各識別に応答して、前記それぞれのアドレスに対応するキャッシュ内のメモリのラインから命令データを読む第2の命令キャッシュ処理ステージと、
    前記第2の命令キャッシュ処理ステージにより読まれた命令データの1つまたはそれ以上のラインに応答して、フェッチされた命令を出力する命令データアライメントセクションと、
    を具備し、
    前記命令データアライメントセクションはまた前記命令キャッシュに最初は発見されない任意の命令または部分に対してより高いレベルのメモリリソースからデータを取得する、請求項14に記載のフェッチセクション。
  16. 命令キャッシュの各ラインは、2またはそれ以上の異なる長さの複数の命令を記憶することができる、請求項14のフェッチセクション。
  17. 前記再循環する手段は、前記少なくとも1つの処理ステージの入力に前記第1のアドレスを渡す再フェッチステージを含む、請求項14のフェッチセクション。
  18. 前記フェッチされた命令をデコードするデコードステージ、デコードされた命令に従って処理するためにオペランドデータを取得するための読みだしステージ、オペランドデータに対してデコードされた命令を実行する実行ステージ、実行結果を記憶装置に書くライトバックステージをさらに具備する、請求項14に記載のフェッチセクションを備えたパイプラインプロセッサ
JP2008512600A 2005-05-18 2006-05-18 キャッシュライン境界を横切る命令におけるキャッシュミスの処理 Expired - Fee Related JP5059749B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/132,749 US7404042B2 (en) 2005-05-18 2005-05-18 Handling cache miss in an instruction crossing a cache line boundary
US11/132,749 2005-05-18
PCT/US2006/019789 WO2006125220A2 (en) 2005-05-18 2006-05-18 Handling cache miss in an instruction crossing a cache line boundary

Publications (2)

Publication Number Publication Date
JP2008541314A JP2008541314A (ja) 2008-11-20
JP5059749B2 true JP5059749B2 (ja) 2012-10-31

Family

ID=37025150

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008512600A Expired - Fee Related JP5059749B2 (ja) 2005-05-18 2006-05-18 キャッシュライン境界を横切る命令におけるキャッシュミスの処理

Country Status (9)

Country Link
US (1) US7404042B2 (ja)
EP (1) EP1886218B1 (ja)
JP (1) JP5059749B2 (ja)
KR (1) KR100974023B1 (ja)
CN (1) CN100583028C (ja)
BR (1) BRPI0610069A2 (ja)
IL (1) IL187464A0 (ja)
TW (1) TWI319157B (ja)
WO (1) WO2006125220A2 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7454596B2 (en) * 2006-06-29 2008-11-18 Intel Corporation Method and apparatus for partitioned pipelined fetching of multiple execution threads
US8239657B2 (en) * 2007-02-07 2012-08-07 Qualcomm Incorporated Address translation method and apparatus
US20120144123A1 (en) 2010-12-01 2012-06-07 International Business Machines Corporation Read-ahead processing in networked client-server architecture
US9201652B2 (en) 2011-05-03 2015-12-01 Qualcomm Incorporated Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy
US10120692B2 (en) 2011-07-28 2018-11-06 Qualcomm Incorporated Methods and apparatus for storage and translation of an entropy encoded instruction sequence to executable form
WO2013101031A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US9460018B2 (en) 2012-05-09 2016-10-04 Qualcomm Incorporated Method and apparatus for tracking extra data permissions in an instruction cache
US8819342B2 (en) * 2012-09-26 2014-08-26 Qualcomm Incorporated Methods and apparatus for managing page crossing instructions with different cacheability
US9424046B2 (en) 2012-10-11 2016-08-23 Soft Machines Inc. Systems and methods for load canceling in a processor that is connected to an external interconnect fabric
US9348754B2 (en) 2012-10-11 2016-05-24 Soft Machines Inc. Systems and methods for implementing weak stream software data and instruction prefetching using a hardware data prefetcher
US10671391B2 (en) * 2014-02-25 2020-06-02 MIPS Tech, LLC Modeless instruction execution with 64/32-bit addressing
US9495297B2 (en) 2014-07-22 2016-11-15 International Business Machines Corporation Cache line crossing load techniques for a caching system
CN109240944B (zh) * 2018-08-16 2021-02-19 上海天数智芯半导体有限公司 一种基于可变长缓存行的数据读写方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689672A (en) 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US6006324A (en) * 1995-01-25 1999-12-21 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US6167506A (en) * 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6499085B2 (en) * 2000-12-29 2002-12-24 Intel Corporation Method and system for servicing cache line in response to partial cache line request
US6938126B2 (en) * 2002-04-12 2005-08-30 Intel Corporation Cache-line reuse-buffer
US6877082B1 (en) * 2002-12-23 2005-04-05 Lsi Logic Corporation Central processing unit including address generation system and instruction fetch apparatus
US7437512B2 (en) * 2004-02-26 2008-10-14 Marvell International Ltd. Low power semi-trace instruction/trace hybrid cache with logic for indexing the trace cache under certain conditions
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
US7509472B2 (en) * 2006-02-01 2009-03-24 Sun Microsystems, Inc. Collapsible front-end translation for instruction fetch
US7917731B2 (en) * 2006-08-02 2011-03-29 Qualcomm Incorporated Method and apparatus for prefetching non-sequential instruction addresses

Also Published As

Publication number Publication date
TWI319157B (en) 2010-01-01
EP1886218B1 (en) 2018-10-24
BRPI0610069A2 (pt) 2010-05-25
JP2008541314A (ja) 2008-11-20
US20060265572A1 (en) 2006-11-23
TW200713033A (en) 2007-04-01
WO2006125220A3 (en) 2007-05-10
CN100583028C (zh) 2010-01-20
EP1886218A2 (en) 2008-02-13
KR20080015017A (ko) 2008-02-15
IL187464A0 (en) 2008-03-20
US7404042B2 (en) 2008-07-22
KR100974023B1 (ko) 2010-08-05
CN101223503A (zh) 2008-07-16
WO2006125220A2 (en) 2006-11-23

Similar Documents

Publication Publication Date Title
JP5059749B2 (ja) キャッシュライン境界を横切る命令におけるキャッシュミスの処理
US10248570B2 (en) Methods, systems and apparatus for predicting the way of a set associative cache
JP5837126B2 (ja) 現在実行している命令セット以外の命令セットから命令をプリロードするシステム、方法およびソフトウェア
KR100783828B1 (ko) 단일 스레드 프로그램의 암시적 멀티스레디드 실행을 행할수 있는 멀티스레디드 프로세서
US5701430A (en) Cross-cache-line compounding algorithm for scism processors
US6907520B2 (en) Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US6944718B2 (en) Apparatus and method for speculative prefetching after data cache misses
KR101804908B1 (ko) 캐시 점유도 결정 및 명령어 스케줄링을 위한 방법 및 장치
US7010648B2 (en) Method and apparatus for avoiding cache pollution due to speculative memory load operations in a microprocessor
US7111126B2 (en) Apparatus and method for loading data values
KR101081623B1 (ko) 적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어
KR101005633B1 (ko) 일정한 개수의 가변 길이 명령을 가진 명령 캐시
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
TW201351145A (zh) 指令快取的減少耗能
JP2003515214A (ja) 計算を狭いオペランドで実施するための方法と装置
JP2020510255A (ja) キャッシュ・ミス・スレッド・バランシング
US6629235B1 (en) Condition code register architecture for supporting multiple execution units
JP2006514349A (ja) プロセッサのオペレーションを妨げることなくプロセッサの状態を判断するための方法及び装置
CN113568663A (zh) 代码预取指令
US8117383B2 (en) Hardware accelerator based method and device for string searching
TW201738736A (zh) 依據快取線決定記憶體所有權以偵測自修正程式碼的處理器與方法
JP2000029693A (ja) 命令キャッシュ装置及びその制御方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110329

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111213

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120313

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120321

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120529

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120613

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: 20120703

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120802

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150810

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5059749

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees