JP2013546095A - ディレクトリベースのマルチコアアーキテクチャ上におけるキャッシュ状態の移動の加速 - Google Patents

ディレクトリベースのマルチコアアーキテクチャ上におけるキャッシュ状態の移動の加速 Download PDF

Info

Publication number
JP2013546095A
JP2013546095A JP2013544447A JP2013544447A JP2013546095A JP 2013546095 A JP2013546095 A JP 2013546095A JP 2013544447 A JP2013544447 A JP 2013544447A JP 2013544447 A JP2013544447 A JP 2013544447A JP 2013546095 A JP2013546095 A JP 2013546095A
Authority
JP
Japan
Prior art keywords
cache
block
tile
directory
core processor
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.)
Granted
Application number
JP2013544447A
Other languages
English (en)
Other versions
JP5603507B2 (ja
Inventor
ゾリヒン ヤン
Original Assignee
エンパイア テクノロジー ディベロップメント エルエルシー
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 エンパイア テクノロジー ディベロップメント エルエルシー filed Critical エンパイア テクノロジー ディベロップメント エルエルシー
Publication of JP2013546095A publication Critical patent/JP2013546095A/ja
Application granted granted Critical
Publication of JP5603507B2 publication Critical patent/JP5603507B2/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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/0806Multiuser, multiprocessor or multiprocessing cache 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

マルチコアプロセッサにおいてキャッシュ状態の移動を加速させるための技術が本明細書において概略的に記載される。マルチコアプロセッサは第1のタイルと第2のタイルと第3のタイルとを含んでもよい。マルチコアプロセッサは第1のタイルにおける第1のコアにおいて実行するスレッドの、第1のタイルから第2のタイルへの移送を開始してもよい。マルチコアプロセッサは第1のタイルにおける第1のキャッシュから第2のタイルにおける第2のキャッシュに移動させられるブロックのブロックアドレスを決定し、第3のタイルにおけるディレクトリがブロックアドレスに対応することを識別してもよい。マルチコアプロセッサは第2のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートしてもよい。マルチコアプロセッサは第1のタイルから第2のタイルへのスレッドの移送を完了させるために効果的な第2のタイルにおける第2のキャッシュに第1のタイルにおける第1のキャッシュからブロックを移動させてもよい。
【選択図】図1

Description

特に断りがある場合でなければ、この節で記載される題材は本出願における特許請求の範囲に対する従来技術ではなく、この節で含まれることによって従来技術であるとは認められない。
ますます多くのコアが単一のマルチコアチップの中に統合されるので、スレッド移送は、マルチコアチップの機能、性能、および/または温度を管理し改善するためにますます利用され得る。典型的なスレッド移送のシナリオにおいて、第1のコアがスレッドを実行し第1のキャッシュを利用してもよい。第1のコアがスレッドを実行すると、第1のキャッシュはメモリから読み出された要求されたデータで満たされ得る。第1のキャッシュが満たされた後で、第1のキャッシュがキャッシュヒットを生じさせ得ることにより、第1のコアが第1のキャッシュから要求されたデータを効率的に読み出すことが出来る。
スレッド移送の間、コントローラが第1のコアから第2のコアにスレッドを移送させることにより、第2のコアがスレッドの実行を引き継いでもよい。第2のコアは「冷たい」(すなわち、空の)第2のキャッシュを利用してもよい。結果として、第2のキャッシュがキャッシュヒットではなくキャッシュミスを生じさせることにより、要求されたデータが第2のキャッシュにおいて見つけられないことがあり得る。各キャッシュミスの後、要求されたデータは、マルチコアチップ上の、第1のキャッシュなどの別のキャッシュからオンデマンドでフェッチされてもよい。第2のキャッシュが「温まる」(すなわち、要求されたデータで満たされる)時に、第2のキャッシュはキャッシュヒットを経験し得る。しかしながら、オンデマンドのフェッチを通じて第2のキャッシュを温めることは、かなりの時間およびエネルギーの消費をもたらし得る。大きなキャッシュを満たす時や、頻繁なスレッド移送を実装するアーキテクチャにおいては、こうした消費は特に負担になり得る。
本開示はマルチコアプロセッサにおいてキャッシュ状態の移動を加速させるための技術を概略的に記載する。例示的なマルチコアプロセッサは第1のタイルと第2のタイルと第3のタイルとを含んでもよい。マルチコアプロセッサは、キャッシュ状態の移動が加速され得る方法を行うように構成されてもよい。いくつかの例示的な方法においては、マルチコアプロセッサの第1のタイルにおける第1のコア上で実行するスレッドの、マルチコアプロセッサにおける第1のタイルから第2のタイルへの移送を開始することを含んでもよく、前記第1のタイルは第1のコアと第1のキャッシュとを備え、第2のタイルは第2のコアと第2のキャッシュとを備える。例示的な方法は、第1のキャッシュから第2のキャッシュに移動させられるブロックのブロックアドレスを決定することと、マルチコアプロセッサにおける第3のタイルを識別することとをさらに含んでもよく、前記第3のタイルはブロックアドレスに対応するディレクトリを備える。例示的な方法はまた、第2のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートすることと、第1のタイルから第2のタイルへのスレッドの移送を完了させるために効果的な第2のタイルにおける第2のキャッシュに第1のタイルにおける第1のキャッシュからブロックを移動させることとを含んでもよい。
本開示はまた一部のマルチコアプロセッサを概略的に記載する。例示的なマルチコアプロセッサは、第1のタイルと第2のタイルと第3のタイルとを含んでもよい。第1のタイルは第1のコアと第1のキャッシュと第1のディレクトリとを含んでもよい。第2のタイルは第2のコアと第2のキャッシュと第2のディレクトリとを含んでもよい。第3のタイルは第3のコアと第3のキャッシュと第3のディレクトリとを含んでもよい。マルチコアプロセッサは、第1のタイルにおける第1のコア上で実行するスレッドの第1のタイルから第2のタイルへの移送を開始するように構成されてもよい。マルチコアプロセッサはまた第1のキャッシュから第2のキャッシュに移動させられるブロックのブロックアドレスを決定し、ディレクトリがブロックアドレスと対応することを識別するように構成されてもよい。マルチコアプロセッサは第2のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートするよう、さらに構成されてもよい。マルチコアプロセッサはまた第1のタイルから第2のタイルへのスレッドの移送を完了させるために効果的な第2のタイルにおける第2のキャッシュに第1のタイルにおける第1のキャッシュからブロックを移動させるように構成されてもよい。
本開示はまたマルチコアプロセッサを概略的に記載する。一部の例示的なマルチコアプロセッサは第1のタイルと第2のタイルと第3のタイルと第4のタイルとを含んでもよい。第1のタイルは第1のコアと第1のキャッシュと第1のディレクトリとを含んでもよい。第2のタイルは第2のコアと第2のキャッシュと第2のディレクトリとを含んでもよい。第3のタイルは第3のコアと第3のキャッシュと第3のディレクトリとを含んでもよい。第4のタイルは第4のコアと第4のキャッシュと第4のディレクトリとを含んでもよい。マルチコアプロセッサは、第1のコア上で実行するスレッドの、第1のタイルから第2のタイルへの移送を開始するように構成されてもよい。マルチコアプロセッサはまた、第1のキャッシュから第2のキャッシュに移動させられる、第1のブロックのブロックアドレスの第1の組と第2のブロックのブロックアドレスの第2の組とを決定するように構成されてもよい。マルチコアプロセッサはさらに、第3のディレクトリがブロックアドレスの第1の組に対応することを識別するように構成されてもよく、第4のディレクトリがブロックアドレスの第2の組に対応することを識別してもよい。マルチコアプロセッサはまた、第2のキャッシュが第1のブロックを共有することを反映するように第3のディレクトリをアップデートするように構成されてもよく、第2のキャッシュが第2のブロックを共有することを反映するように第4のディレクトリをアップデートしてもよい。マルチコアプロセッサは、第1のタイルから第2のタイルへのスレッドの移送を完了するために効果的な第2のキャッシュに第1のキャッシュから第1のブロックと第2のブロックとを移動させるように構成されてもよい。マルチコアプロセッサはまた、第2のコア上でスレッドを実行するように構成されてもよい。
上記の要約は単なる例示であり、あらゆる意味で限定することを意図していない。上で記載された、例示的な態様、例示的な実施形態、および例示的な特徴に加えて、さらなる態様、さらなる実施形態、およびさらなる特徴が、添付の図面や以下の詳細な記載を参照して明らかになる。
本開示の上記の特徴や他の特徴は、添付の図面と共に、以下の記載や添付の特許請求の範囲からさらに完全に明らかになる。これらの図面は本開示に従ったいくつかの実施形態を描くだけであるので、本発明の範囲を限定すると考えられるべきではないことが理解でき、本開示は添付の図面の使用を通じてさらなる具体例や詳細と共に記載される。
キャッシュ状態の移動を加速させるように適合された例示的なディレクトリベースのマルチコアアーキテクチャを例示する機能的構成図である。 所与のブロックアドレスに対応するブロックを格納するキャッシュのうちの1つ以上を示すように適合された例示的なビットベクトルを例示する機能的構成図である。 所与のタイルから移動させられた各ブロックに対して、ディレクトリの状態やタイルの状態を示すレコードを維持するように適合された例示的なディレクトリベースのマルチコアアーキテクチャを例示する機能的構成図である。 マルチコアアーキテクチャにおいてキャッシュ状態の移動を加速させるための例示的なプロセスを例示する流れ図である。 例示的なコンピュータ計算システムを例示する構成図である。 コンピュータプログラム製品を例示する概略図であり、全てのコンピュータプログラム製品が、提示された少なくとも一部の実施形態に従って構成されている。
以下の詳細な記載において、本明細書の一部分を形成する添付の図面に参照が行われる。図面においては、特に断りがない限りは、同様な記号は典型的には同様な構成要素を識別する。詳細な記載、図面、および特許請求の範囲において記載された例示的な実施形態は限定とは考えられない。本明細書において提示される発明の精神や範囲を逸脱することなく、他の実施形態が利用されたり他の変更が行われたりしてもよい。本明細書において概略的に記載されると共に図面に例示されたような、本開示の態様が幅広い異なる構成で構成されたり置換されたり組み合わされたり分離されたり設計されたりすることが出来ることが容易に理解され、これらすべてが本明細書において明確に企図される。
本開示は、特に、スレッド移送の間またはスレッド移送の後に適切なキャッシュ間でキャッシュ状態を移動させるように適合されたディレクトリベースのマルチコアアーキテクチャに関する。例示的な例において、マルチコアプロセッサは第1のタイルと第2のタイルと第3のタイルとを含んでもよい。第1のタイルは、第1のコアと、関連する第1のキャッシュと、第1のディレクトリとを含んでもよい。第2のタイルは、第2のコアと、関連する第2のキャッシュと、第2のディレクトリとを含んでもよい。第3のタイルは、第3のコアと、関連する第3のキャッシュと、第3のディレクトリとを含んでもよい。第1のコアはスレッドを実行するように構成されてもよい。第1のコアがスレッドを実行すると、第1のキャッシュがメモリから引き出されたデータで満たされ得る。データは1つ以上のブロックアドレスと関連付けられてもよい。この例において、これらのブロックアドレスは第3のディレクトリに対応してもよい。すなわち、第3のディレクトリは、ブロックアドレスに対応するデータが第1のキャッシュにおいて見つけられることを示し得る。
コントローラが第1のタイルから第2のタイルにスレッドを移送するように構成されてもよい。この方法で、第2のコアがスレッドの実行を第1のコアから引き継ぐことが出来る。コントローラはまた、第1のキャッシュに格納されたデータと関連付けられるブロックアドレスを決定し、ブロックアドレスに対応するディレクトリを識別するように構成されてもよい。この例において、第3のディレクトリがブロックアドレスに対応してもよい。結果として、コントローラは、第2のキャッシュがデータを含むことを反映するように第3のディレクトリをアップデートするように構成されてもよい。コントローラはまた第1のキャッシュから第2のキャッシュにデータを移動させるように構成されてもよい。第2のコアがスレッドを実行した時に、第1のキャッシュ内のデータが第2のキャッシュに移動させられているので、第2のキャッシュはキャッシュヒットを生じさせることが出来る。
ここで図1を参照すると、機能的構成図が、本明細書において提示される少なくとも一部の実施形態に従って、キャッシュ状態の移動を加速させるように適合される例示的なディレクトリベースのマルチコアアーキテクチャ100を例示する。アーキテクチャ100はタイルA104A、タイルB104B、タイルC104C及びタイルD104Dを含む複数のタイルを含んでもよい。タイル104A〜104Dはコア106A〜106D、キャッシュ108A〜108D及びディレクトリ110A〜110Dを含んでもよい。タイル104A〜104Dは、まとめて、または概略的にタイル104と呼ばれてもよい。コア106A〜106Dは、まとめてコア106と呼ばれてもよい。キャッシュ108A〜108Dは、まとめて、または概略的にキャッシュ108と呼ばれてもよい。ディレクトリ110A〜110Dは、まとめて、または概略的にディレクトリ110と呼ばれてもよい。図1に例示された例において、アーキテクチャ100は16個のタイル104を含んでもよい。他の実施形態において、アーキテクチャ100は、任意の適切な数のタイルを含んでもよく、および/またはキャッシュを共有するタイルにおいて任意の適切な数のコアを含んでもよい。
コア106、キャッシュ108及びディレクトリ110のそれぞれが、タイル104のうちの1つに対応してもよい。タイル104はコントローラ112A〜112Dをさらに含んでもよい。コントローラ112A〜112Dは、まとめて、または概略的にコントローラ112と呼ばれてもよい。コントローラ112はそれぞれのキャッシュ108とそれぞれのディレクトリ110とにおける動作を行うためだけでなく、タイル104間の通信を可能にするように構成されてもよい。他の実施形態において、タイル104のうちの1つ以上が、それぞれ別個のキャッシュコントローラやディレクトリコントローラなどの複数のコントローラを含んでもよい。
ディレクトリ110はそれぞれ、ブロックアドレスに対応するブロックを保存するキャッシュ108のうちの1つ以上にブロックアドレスをマッピングするように構成されてもよい。ディレクトリ110のそれぞれが、例えば、様々な連続したアドレスなどの一組のブロックアドレスと関連付けられてもよい。他の実装において、ディレクトリ110のそれぞれに割り振られたブロックアドレスは、非連続的であってもよい(例えば、様々な粒度でインターリーブされてもよい)。一群のブロックアドレスがディレクトリ110の間で等しく割り当てられてもよい。例えば、ディレクトリ110Aが第1の範囲の連続したブロックアドレスと関連付けられてもよく、ディレクトリ110Bが第2の範囲の連続したブロックアドレスと関連付けられてもよい、などである。ディレクトリ110とブロックアドレスとの間のマッピングは固定されても可変であってもよい。さらに、ディレクトリ110間のマッピングは、コントローラ112によって知られても、適切なソースからコントローラ112によって引き出されてもよい。
一部の実施形態において、ディレクトリ110のそれぞれが、複数のビットベクトルを含んでもよく、各複数のビットベクトルは、それぞれの組のブロックアドレスのうちの1つに対応する。ビットベクトルの例示的な例が図2に示され、図2は以下でさらに詳細に記載される。各ビットベクトルはキャッシュ108の数に対応する多数のビットを格納するように構成されてもよい。例えば、各ビットベクトルは16個のビットを格納するように構成されてもよく、各ビットは16個のキャッシュ(例えば、図1のキャッシュ108)のうちの1つに対応する。16個のビットのうちのそれぞれが、少なくとも2つのビット値のうちの1つで構成されてもよい。第1のビット値(例えば、論理的「1」)は、対応するキャッシュが、ビットベクトルと関連付けられるブロックアドレスに対応するブロックを格納することを示してもよい。第2のビット値(論理的「0」)は、対応するキャッシュが、ビットベクトルと関連付けられるブロックアドレスに対応するブロックを格納しないことを示してもよい。様々な他の実施形態が、コアース・ビット・ベクトル、リミテッドポインタ、またはスパースディレクトリなどの他の適切なディレクトリフォーマットに依存してもよい。
第1の例示的な実装において、タイルD104DはコアD106Dを通じてスレッドを実行するように構成されてもよい。スレッドを実行する間に、コアD106Dはメモリ(図示せず)からデータを引き出し、キャッシュD108D上にデータを格納してもよい。コントローラD112Dは、タイルD104DからタイルA104Aにスレッドを移送することで、次に、コアA104Aがスレッドを実行し得るよう、適合されても良い。キャッシュA108Aは最初は冷たいことがあり得るので、キャッシュA108Aは、スレッドの実行の間に、要求されたデータに対するキャッシュミスをもたらし得る。各キャッシュミスに応答して、コントローラA112Aは、要求されたデータのブロックアドレスにマッピングされるディレクトリを決定するように構成されてもよい。先に記載された通り、様々なブロックアドレスとそれぞれのディレクトリ110と間のマッピングは、コントローラ112によって知られるか、または適切なソースから引き出されるかであり得る。
この第1の例において、コントローラA112Aは、ディレクトリC110Cが、要求されたデータのブロックアドレスをマッピングすることを決定してもよい。結果として、コントローラA112Aは、ブロックアドレスに対応するブロックを格納するキャッシュに対するコントローラC112Cをクエリするように適合されてもよい。ディレクトリC110Cは、ブロックアドレスに対応するブロックを格納するキャッシュを識別するビットベクトルを含んでもよい。この第1の例において、ディレクトリC110Cは、キャッシュC108Cがブロックアドレスに対応するブロックを格納することを識別してもよい。したがって、コントローラC112Cは、ディレクトリC110Cを読み取り、キャッシュC108Cからブロックを引き出し、コントローラA112Aにブロックを提供することによってクエリに応答するように構成されてもよい。次に、コントローラA112AがキャッシュA108Aにブロックを格納してもよい。
上記の第1の例において、ブロックアドレスにマッピングされたディレクトリと、それぞれのブロックを格納するキャッシュとが同じタイル内に含まれる。第1の例は、タイルA104Aとタイル104Cとを含む比較的ストレートフォワードな2ホップのコヒーレンストランザクションを例示するが、要求されたデータを格納するキャッシュはディレクトリと同じタイルには滅多に存在しない。すなわち、要求されたデータを格納するキャッシュは、典型的には、以下の別の例で例示されるように、ディレクトリとは異なるタイルに存在する。これらの場合のうちの多くにおいて、要求されたデータはタイルに含まれるキャッシュで見つけられ、そのタイルからスレッドが移送させられる。
第2の例の実装において、コントローラA112Aは、ディレクトリB110Bが、要求されたデータのブロックアドレスをマッピングすることを決定するように構成されてもよい。結果として、コントローラA112Aはブロックアドレスに対応するブロックを格納するキャッシュに関してコントローラB112Bをクエリするように適合されてもよい。ディレクトリB110Bはブロックアドレスに対応するブロックを格納するキャッシュを識別するビットベクトルを含んでもよい。この第2の例において、ディレクトリB110BはキャッシュD108Dがブロックアドレスに対応するブロックを格納することを識別してもよい。したがって、コントローラB112BはコントローラD112Dにクエリを転送するように適合されてもよい。コントローラD112DはキャッシュD108DからコントローラA112Aにブロックを提供することによってクエリに応答してもよい。次に、コントローラA112Aはキャッシュ108Aにブロックを格納してもよい。
第1の例に記載された2ホップのコヒーレントトランザクションとは対照的に、第2の例は、タイルA104A、タイルB104B及びタイルD104Dの間の3ホップのコヒーレントトランザクションを含む。特にキャッシュA108Aが冷たい時に、キャッシュA108Aが多くのキャッシュミスを生じさせ得るので、3ホップのトランザクションは費用がかかり得る。さらに、各トランザクションは逐次化されてもよいが、これもまた非常に費用がかかり得る。すなわち、多くの場合において、データは同じソース(例えば、第2の例のキャッシュD108D)から引き出される場合であっても、コントローラA112Aは、各キャッシュミス後に、要求されたデータに対して別個のクエリを開始するように適合されてもよい。上記の第1および第2の例示的な実装に関する様々な欠点に対処する第3の例示的な実装がここで記載される。
第3の例示的な実装において、コントローラD112DがタイルD104DからタイルA104Aへのスレッドの移送を開始するように構成された時には、コントローラD112DはまたキャッシュD108Dに格納されたブロックに対するブロックアドレスを決定するように構成されてもよい。コントローラD112DはキャッシュD108Dのキャッシュ・タグ・アレイ(図示せず)をスキャニングすることによってキャッシュD108Dに格納されたブロックに対するブロックアドレスを決定するように適合されてもよい。キャッシュD108Dに格納されたブロックのブロックアドレスを決定する際、コントローラD112Dはブロックアドレスにマッピングするディレクトリを決定するように適合されてもよい。
この第3の例において、コントローラD112Dは、ディレクトリB110BとディレクトリC110Cとがブロックアドレスの第1の組とブロックアドレスの第2の組とのそれぞれにマッピングすることを決定するように構成されてもよい。結果として、コントローラD112Dは、タイルA104Aがブロックアドレスの第1の組に対応するブロックのシェアラであることを示すよう、ディレクトリB110BをアップデートするようにコントローラB112Bに命令するべく適合されてもよい。コントローラB112Bはブロックアドレスの第1の組に対応するビットベクトル内でキャッシュA108Aに対応するビットのビット値を変えることによってディレクトリB110Bをアップデートするように適合されてもよい。コントローラD112DはまたタイルA104Aがブロックアドレスの第2の組に対応するブロックのシェアラであることを示すよう、ディレクトリC110CをアップデートするべくコントローラC112Cに命令するように構成されてもよい。コントローラC112Cはブロックアドレスの第2の組に対応するビットベクトル内でキャッシュA108Aに対応するビットのビット値を変えることによってディレクトリC110Cをアップデートするように構成されてもよい。
一部の実施形態において、コントローラD112Dは、単一のメッセージを送信することによってタイルA104Aがブロックアドレスの第1の組に対応するブロックのシェアラであることを示すよう、ディレクトリB110BをアップデートするべくコントローラB112Bに命令するように適合されてもよい。コントローラD112Dはまた、単一のメッセージを送信することによってタイルA104Aがブロックアドレスの第2の組に対応するブロックのシェアラであることを示すよう、ディレクトリC110CをアップデートするべくコントローラC112Cに命令するように適合されてもよい。例えば、メッセージはブロックアドレスのリストと、ブロックが移動させられる、キャッシュA108Aなどのキャッシュの識別子とを含んでもよい。複数のブロックアドレスを含む単一のメッセージを送信することによって、コントローラ112は、キャッシュで取り損なわれたブロックアドレス毎に別個のメッセージが送信されるオンデマンドのフェッチと比較して、関連するディレクトリをより効率的にアップデートすることが出来る。
コントローラB112Bが、タイルA104Aがブロックのシェアラであることを示すようにディレクトリB110Bをアップデートする時には、コントローラB112Bは第1のディレクトリの承認メッセージをコントローラD112Dに送信するように適合されてもよい。第1のディレクトリの承認メッセージは、ディレクトリB110Bが首尾よくアップデートされたこと、または将来行われる次のアップデートのために待ち行列に入れられたことを示してもよい。コントローラD112Dが、タイルA104Aがブロックのシェアラであることを示すようにディレクトリD110Dをアップデートする時には、コントローラD112Dは第2のディレクトリの承認メッセージをコントローラD112Dに送信するように適合されてもよい。第2のディレクトリの承認メッセージは、ディレクトリC110Cが首尾よくアップデートされたこと、または将来行われる次のアップデートのために待ち行列に入れられたことを示してもよい。
関連するディレクトリの承認を受信する際、コントローラD112DはキャッシュD108DからキャッシュA108Aへのブロックの移動を開始するように適合されてもよい。コントローラA112AがキャッシュA108Aへのブロックの移動を完了した時には、コントローラA112Aはキャッシュの承認をコントローラD112Dに送信するように構成されてもよい。キャッシュの承認は、ブロックが首尾よく移動させられたこと、またはキャッシュA108Aにおける最終的な配置のために待ち行列に入れられたことを示してもよい。少なくとも1つのブロックが所与の時間にキャッシュD108DとキャッシュA108Aとの間で移動させられてもよい。所与の時間に2つ以上のブロックを移動させることは、待ち時間、消費される帯域幅、および/または消費されるエネルギーを減少させる点で、アーキテクチャ100においてさらなる効率性を提供し得る。共に移動させられるブロックはまたさらなる効率性のために圧縮されてもよい。
コントローラD112DがキャッシュD108DからキャッシュA108Aにブロックを移動させる時には、コントローラD112DはキャッシュD108DからキャッシュA108Aにブロックを複製しても動かしてもよい。コントローラD112DがキャッシュD108DからキャッシュA108Aにブロックを複製する時には、ブロックはある程度の時間キャッシュD108DとキャッシュA108Aとの両方に残ってもよい。例えば、コアA106Aによるスレッドの実行が一時的でありコアD016Dにすぐに戻ることが見込まれる実装に対して複製が利用されてもよい。ブロックを複製する時に、コントローラD112Dはまたブロックのダーティエントリ(例えば、最近書き込まれたエントリ)を取り除くためにメイン・メモリ・コントローラに命令を送信してもよい。この方法で、キャッシュとメインメモリとにおけるブロックの複写が整合する。さらに、一部のコヒーレントプロトコルは、ブロックがキャッシュから取り戻されるまでメインメモリをアップデートすることなくダーティエントリがキャッシュに維持されることを可能にしてもよい。コントローラD112DがキャッシュD108DからキャッシュA108Aにブロックを動かす時には、キャッシュD108Dのブロックが直ちに無効化されることにより、コアD106Dによって後に実行されうる他のスレッドに対して利用可能なキャッシュD108Dを作ってもよい。例えば、コアA106Aによるスレッドの実行がより長い期間でありコアD106Dにすぐに戻ることが見込まれない実装のために、動かすことが利用されてもよい。
コントローラD112DがキャッシュD108DからキャッシュA108Aにブロックを移動させる時には、コントローラD112DはキャッシュD108Dにおけるブロックのうちの一部または全部をキャッシュA108Aに移動させてもよい。移動させられるブロックの数を制限することが、消費される帯域幅を減少させることが出来る。例えば、コントローラD112Dは最近最も使用された(「MRU」)移動方針を実装することにより、適切な数のMRUブロックだけがキャッシュD108DからキャッシュA108Aに移動させられてもよい。MRUブロックの数はスレッドのアクセスパターン(例えば、スレッドの一時的な再使用行動)に基づいて決定されてもよい。
コントローラD112DがキャッシュD108DからキャッシュA108Aにブロックを移動させる時には、コントローラD112Dが任意の適切な順序でブロックを移動させるように適合されてもよい。一部の実施形態において、コントローラD112Dはブロックのブロックアドレスに従って連続した順序でブロックを移動させるように構成されてもよい。一部の他の実施形態において、コントローラD112Dは最近最も使用されたものから最近最も使用されていないものという順序でブロックを移動させるように構成されてもよい。またさらに他の一部の実施形態において、コントローラD112Dはデータブロックを移動させる前に命令ブロックを移動させるように構成されてもよい。
一部の実施形態において上で記載された通り、コントローラD112Dはディレクトリの承認を受信した後にブロックの移動を開始するように適合されてもよい。一部の他の実施形態において、コントローラD112Dはディレクトリの承認を受信する前にブロックの移動を開始するように構成されてもよい。すなわち、コントローラD112Dはディレクトリをアップデートするのと同時にブロックを移動させてもよい。しかしながら、ディレクトリB110Bおよび/またはディレクトリC110Cが、キャッシュA108Aがブロックを含むことを反映するようにアップデートされる前に、コントローラA112AがキャッシュA108Aへのブロックの移動を完了した場合には、こうした手法はインコヒーレントキャッシュをもたらし得る。
無効化リクエストまたは介入リクエストが、対応するディレクトリに含まれる情報に基づいてブロックのシェアラにブロードキャストされてもよい。例えば、コントローラD112Dは、ディレクトリB110Bに含まれる情報に基づいてキャッシュD108Dに格納されたブロックに影響を与える無効化リクエストまたは介入リクエストを受信してもよい。しかしながら、ディレクトリB110Bがまだアップデートされていない場合には、ディレクトリB110BはキャッシュD108Dだけがブロックの複写を含むことを示してもよい。すなわち、ディレクトリB110Bは、キャッシュA108Aもまたブロックの複写を含むことを示さないことがあり得る。結果として、ブロックが無効化または介入された時には、キャッシュD108Dにおけるブロックの複写がキャッシュA108Aにおけるブロックの複写とは異なり得る。
キャッシュ間におけるこのインコヒーレンスの可能性に対処するために、タイルD104Dは、移動が開始されたが対応するディレクトリの承認がまだ受信されていないブロックのレコードを維持するように構成されてもよい。すなわち、レコードは、キャッシュA108Aもまたブロックの複写を含むことを示してもよい。コントローラD112Dが無効化リクエストまたは介入リクエストを受信した時には、コントローラD112Dは、レコードに基づいて無効化リクエストまたは介入リクエストをコントローラA112Aに転送するように適合されてもよい。この方法で、キャッシュA108Aにおけるブロックの複写が状況に応じて無効化または介入され得る。様々な実施形態において、レコードが移動状態表(「TST」)で具体化されてもよく、移動状態表(「TST」)は図3を参照して以下でさらに詳細に記載される。
ここで図2を参照すると、機能的構成図が、本明細書において提示される少なくとも一部の実施形態に従って、所与のブロックアドレスに対応するブロックを格納するキャッシュ108のうちの1つ以上を示すように適合された例示的なビットベクトル200を例示する。所与のディレクトリは複数のブロックアドレスに対応する複数のビットベクトルを含んでもよい。ビットベクトル200は第1のビット202A、第2のビット202B、第3のビット202C、第4のビット202D及びN番目のビット202Nを含んでもよい。第1のビット202Aはマルチコアアークテクチャにおける第1のキャッシュに対応してもよい。第2のビット202Bはマルチコアアーキテクチャにおける第2のキャッシュに対応してもよい。第3のビット202Cはマルチコアアーキテクチャにおける第3のキャッシュに対応してもよい。第4のビット202Dはマルチコアアーキテクチャにおける第4のキャッシュに対応してもよい。N番目のビット202NはマルチコアアーキテクチャにおけるN番目のキャッシュに対応してもよい。また、スパースディレクトリ、リミテッドポインタ、またはコアースディレクトリなどの他のディレクトリフォーマットが利用されてもよい。
図2に例示された例において、論理的1ビットの値は、対応するキャッシュがブロックを格納することを示してもよく、論理的0ビットの値は、対応するキャッシュがブロックを格納しないことを示してもよい。したがって、第1のビット202AとN番目のビット202Nとにおける論理的1ビットの値は、第1のキャッシュとN番目のキャッシュとがブロックを共有することを示してもよい。ビットベクトル200はマルチコアアーキテクチャにおけるキャッシュの数に対応する多数のビットを格納するように構成されてもよい。さらなるキャッシュがブロックを共有すると、および/またはキャッシュが無効化若しくは介入されると、ビットベクトル200は、コヒーレントな状態と共に動的にアップデートされてもよい。
ここで図3を参照すると、機能的構成図が、本明細書において提示された少なくとも一部の実施形態に従って、所与のタイルから移動させられた各ブロックに対して、ディレクトリの状態とタイルの状態とを示すレコードを維持するように適合された例示的なディレクトリベースのマルチコアアーキテクチャ300を例示する。アーキテクチャ300は第1のタイル302Aと第2のタイル302Bと第3のタイル302Cとを含み得る。第1のタイル302Aは移動状態表(「TST」)304、コア306A、キャッシュ308A、ディレクトリ310A及びコントローラ312Aを含んでもよい。第2のタイル302Bと第3のタイル302Cとはそれぞれ、コア306B〜306C、キャッシュ308B〜308C、ディレクトリ310B〜310C及びコントローラ312B〜312Cを含んでもよい。
TST304は第1の列314A、第2の列314B、第3の列314C及び第4の列314Dを含む複数の列を含むように構成されてもよい。列314A〜314Dのそれぞれは、キャッシュ308Aに格納されたブロックに対応してもよく、キャッシュ308Aのために、コントローラ312Aは別のタイル(例えば、タイル302B)にブロックの移動を開始し、対応するディレクトリをアップデートするためにさらに別のタイル(例えば、タイル302C)に命令を送信した。図3に例示された例において、第1の列314AはブロックXに対応してもよく、第2の列314BはブロックYに対応してもよい。さらに、第3の列314CはブロックZに対応してもよく、第4の列314DはブロックWに対応してもよい。TST304は、様々な実施形態に従って、キャッシュ308Aのキャッシュ・タグ・アレイから分離されてもキャッシュ308Aのキャッシュ・タグ・アレイと統合されてもよい。
TST304は第1のカラム318A、第2のカラム318B並びに第3のカラム318Cを含む複数のカラムをさらに含んでもよい。第1のカラム318Aでのテーブルエントリはブロック214A〜214Dに対するブロックタグまたは他の適切な識別子を格納するように構成されてもよい。第2のカラム318Bでのテーブルエントリはディレクトリの状態に対応するビットを格納するように構成されてもよい。第3のカラム318Cでのテーブルエントリはタイルの状態に対応するビットを格納するように構成されてもよい。ディレクトリの状態は、所与のディレクトリが、コントローラ312Aがディレクトリをアップデートするための命令を送信した後にアップデートされたか否かを示してもよい。所与のディレクトリは、コントローラ312Aが対応するディレクトリの承認を受信した時に首尾よくアップデートされたと考慮されてもよい。タイルの状態は、所与のブロックの移動が完了したか否かを示してもよい。所与のブロックの移動は、コントローラ312Aが対応するキャッシュの承認を受信した時に首尾よく完了したと考えられてもよい。アップデートされたディレクトリと、ブロックが移動させられるキャッシュとは、同じタイルに存在しても存在しなくてもよい。
図2に例示された例において、第2のカラム318B(すなわち、ディレクトリの状態のカラム)での論理的0ビットの値は、コントローラ312Aが、ディレクトリ310Cをアップデートするためのメッセージをコントローラ312Cに送信したことを表してもよい。しかしながら、コントローラ312Aは、ディレクトリ310Cが首尾よくアップデートされたことを示すディレクトリの承認をコントローラ312Cから受信していない。第2のカラム318Bでの論理的1ビットの値は、コントローラ312Aがディレクトリの承認をコントローラ312Cから受信したことを表してもよい。第3のカラム318C(すなわち、タイルの状態のカラム)での論理的0ビットの値は、コントローラ312Aがタイル302Bへの所与のブロックの移動を開始したことを表してもよい。しかしながら、コントローラ312Aは、ブロックが首尾よく移動されたことを示すキャッシュの承認をコントローラ312Bから受信していない。第3のカラム318Cでの論理的1ビットの値は、コントローラ312Aがキャッシュの承認をコントローラ312Bから受信したことを示してもよい。
ブロックXに対応する第1の列314A上のテーブルエントリは、ディレクトリの状態に対する論理的0ビットの値と、タイルの状態に対する論理的0の値とを含む。すなわち、コントローラ312AはブロックXに関するディレクトリの承認またはキャッシュの承認をまだ受信していない。ブロックYに対応する第2の列314B上のテーブルエントリは、ディレクトリの状態に対する論理的1ビットの値とタイルの状態に対する論理的0ビットの値とを含む。すなわち、コントローラ312Aがディレクトリの承認を受信したが、ブロックYに関するキャッシュの承認をまだ受信していない。
ブロックZに対応する第3の列314C上のテーブルエントリは、ディレクトリの状態に対する論理的0ビットの値と、タイルの状態に対する論理的1ビットの値とを含む。すなわち、コントローラ312Aはディレクトリの承認をまだ受信していないが、ブロックZに関するキャッシュの承認を受信している。ブロックWに対応する第4の列314D上のテーブルエントリは、ディレクトリの状態に対する論理的1ビットの値とタイル状態に対する論理的1ビットの値とを含む。すなわち、コントローラ312Aはディレクトリの承認とキャッシュの承認とを受信する。ディレクトリのアップデートとキャッシュの移動との両方の完了により、続いて、ブロックWがTST304から除去される準備が出来る。
コントローラ312Aは、無効化および/または介入のリクエストを維持(例えば、バッファリング)しコントローラ312Bに転送するか否かを決定するためにTST304を利用するように構成されてもよい。ディレクトリの状態とタイルの状態との両方が論理的1ビットの値を有する時には、ディレクトリ310Cは、キャッシュ308Bが所与のブロックを共有することを適切に示してもよい。結果として、コントローラ312Bは、無効化および/または介入のあらゆるリクエストのブロードキャストを適切に受信してもよい。この場合、コントローラ312Aは無効化および/または介入のリクエストを維持もコントローラ312Bに転送もしないように構成されてもよい。
ディレクトリの状態が論理的0ビットの値を有する時には、ディレクトリ310Cは、キャッシュ308Bが所与のブロックを共有することを適切に示さないこともあり得る。結果として、コントローラ312Bは無効化および/または介入のリクエストのブロードキャストを全く受信しないこともあり得る。この場合、コントローラ312Aは無効化および/または介入のリクエストを維持してコントローラ312Bに転送するように構成されてもよい。タイルの状態が論理的1ビットの値である場合には、キャッシュ308Bはブロックを格納してもよい。この場合、コントローラ312Aは無効化および/または介入のリクエストをコントローラ312Bに直ちに転送するように構成されてもよい。
タイルの状態が論理的0ビットの値である場合には、キャッシュ308Bがブロックを格納しないことがあり得る。この場合、コントローラ312Aがキャッシュの承認を受信するまで、コントローラ312Aはコントローラ312Bに無効化および/または介入のリクエストを転送するのを遅らせるように構成されてもよい。ディレクトリの状態が論理的1ビットの値であり、タイルの状態が論理的0ビットの値である時には、ディレクトリ310Cは適切にアップデートされてもよいが、キャッシュ308Bはブロックを格納しないこともあり得る。この場合、コントローラ312Aがキャッシュの承認を受信した時には、コントローラ312Aは無効化および/または介入のリクエストをコントローラ312Bに転送するように構成されてもよい。
ここで図4を参照すると、流れ図が、本発明において提示された少なくとも一部の実施形態に従ってマルチコアアーキテクチャにおいてキャッシュの状態の転送を加速させるように適合された例示的なプロセス400を例示する。プロセス400は、ブロック402〜410のうちの1つ以上によって例示されるような、様々な動作、機能、または作用を含んでもよい。動作は図4に示された連続した順序に厳密には従わないことがあり得る。例えば、2つの動作は互いに重ねられてもよい。
プロセス400はブロック402(第1のタイルから第2のタイルにスレッドを移送させる)で開始してもよく、コントローラは第1のタイルから第2のタイルにスレッドを移送させるように構成されてもよい。移送の結果として、第2のタイルにおける第2のコアが第1のタイルにおける第1のコアからスレッドの実行を引き継ぐことが出来る。マルチコアプロセッサなどのマルチコアアーキテクチャは、第1のタイル、第2のタイル及び第3のタイルを含んでもよい。第1のタイルは第1のコア、第1のキャッシュ及び第1のディレクトリを含んでもよい。第2のタイルは第2のコア、第2のキャッシュ及び第2のディレクトリを含んでもよい。第3のタイルは第3のコア、第3のキャッシュ及び第3のディレクトリを含んでもよい。ブロック402にブロック404が続いてもよい。
ブロック404(第1のキャッシュから第2のキャッシュに移動させられるブロックのブロックアドレスを決定する)において、コントローラは第1のキャッシュから第2のキャッシュに転送されるブロックに関する1つ以上のブロックアドレスを決定するように構成されてもよい。一部の実施形態において、コントローラは第1のキャッシュと関連付けられるキャッシュ・タグ・アレイをスキャニングすることによって第1のキャッシュから第2のキャッシュに転送されるブロックのブロックアドレスを決定するように構成されてもよい。ブロック404にブロック406が続いてもよい。
ブロック406(ブロックアドレスに対応する、第3のタイルにおける第3のディレクトリを識別する)において、コントローラはブロックアドレスに対応する第3のディレクトリを識別するように構成されてもよい。様々なブロックアドレスとディレクトリとの間のマッピングは固定されても可変であってもよい。コントローラはマッピングを既知であってもよく(例えば、コントローラにハードコードされても)、又は適切なソース(例えば、メモリ、格納デバイス、データベースなど)からマッピングを引き出してもよい。ブロック406にブロック408が続いてもよい。
ブロック408(第2のキャッシュがブロックを共有することを反映するように第3のディレクトリをアップデートする)において、コントローラは第2のキャッシュが第1のキャッシュとブロックを共有することを反映するべく、第3のディレクトリをアップデートするように構成されてもよい。一部の実施形態において、コントローラはディレクトリをアップデートするために第3のタイルに命令を送信するように構成されてもよい。第3のタイルは第2のキャッシュに対応するビットのビット値を関連するビットベクトル内で変更することによってディレクトリを更新するように構成されてもよい。ブロック408にブロック410が続いてもよい。
ブロック410(第1のキャッシュから第2のキャッシュにブロックを移動させる)において、コントローラが第1のタイルから第2のタイルへのスレッドの移送を完了させるために効果的な第2のキャッシュに第1のキャッシュからブロックを移動させるように構成されてもよい。ブロック410の後で、プロセス400は繰り返す(例えば、周期的に、連続的に、または必要に応じてオンデマンドで)か、または終了するかのいずれかであり得る。
図5は、本明細書において提示された少なくとも一部の実施形態を実装することが出来る例示的なコンピュータ計算システムのための例示的なコンピュータ・ハードウェア・アーキテクチャを示すコンピュータアーキテクチャの図である。図5はプロセッサ510とメモリ520、及び1つ以上のドライブ530とを含むコンピュータ500を含む。コンピュータ500は、従来のコンピュータシステム、内蔵制御コンピュータ、ラップトップ、もしくはサーバコンピュータ、モバイルデバイス、セットトップボックス、キオスク、車両情報システム、携帯電話、オーダメイド機械、または他のハードウェアプラットフォームとして実装されてもよい。
ドライブ530と、関連するコンピュータ格納媒体とは、コンピュータ500に対するコンピュータ読み取り可能な命令、データ構造、プログラムモジュール、および他のデータの格納を提供する。ドライブ530は、オペレーティングシステム540、アプリケーションプログラム550、プログラムモジュール560及びデータベース580を含むことが出来る。プログラムモジュール560は制御モジュール505を含んでもよい。制御モジュール505は、上でより詳細に記載されたような(例えば、図1〜4のうちの1つ以上に関する先の記載を参照されたい)、キャッシュの状態の移動を加速させるためのプロセス400を実行するように適合されてもよい。コンピュータ500はユーザ入力デバイス590をさらに含み、ユーザ入力デバイス590を通してユーザはコマンドとデータとを入力してもよい。入力デバイスは、電子デジタイザ、マイク、キーボード及びマウス、トラックボール、またはタッチパッドと通常呼ばれるポインティングデバイスとを含むことが出来る。他の入力デバイスは、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナなどを含んでもよい。
これらの入力デバイスや他の入力デバイスはシステムバスに結合されるユーザ入力インタフェースを通じてプロセッサ510に結合されることが出来るが、パラレルポート、ゲームポート、またはユニバーサル・シリアル・バス(「USB」)などの他のインタフェースやバスの構造体に結合されてもよい。コンピュータ500などのコンピュータはまた、スピーカなどの他の周辺出力デバイスを含んでもよく、その周辺出力デバイスは周辺出力インタフェース594などを通じて結合されてもよい。
コンピュータ500はネットワークインタフェース596に結合された遠隔のコンピュータなどの1つ以上のコンピュータに対する論理接続を使用して、ネットワーク接続された環境において動作してもよい。遠隔のコンピュータはパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、または他の共通ネットワークノードであってもよく、コンピュータ500に関して上で記載された要素のうちの多くまたは全てを含むことが出来る。ネットワーク接続環境は、オフィス、企業のワイド・エリア・ネットワーク(「WAN」)、ローカル・エリア・ネットワーク(「LAN」)、イントラネット、およびインターネットにおいて一般的である。
LANまたはWLANのネットワーク接続環境において使用された時に、コンピュータ500はネットワークインタフェース596またはアダプタを通じてLANに結合されてもよい。WANネットワーク接続環境において使用される時に、コンピュータ500は典型的には、インターネットまたはネットワーク508などのWANを通じて通信を確立するためのモデムや他の手段を含む。WANは、インターネット、例示されたネットワーク508、様々な他のネットワーク、またはそれらの任意の組み合わせを含み得る。コンピュータ間の、通信リンク、リング、メッシュ、バス、クラウド、またはネットワークを確立する他のメカニズムが使用されてもよいことが理解される。
一部の実施形態に従って、コンピュータ500はネットワーク接続環境に結合されてもよい。コンピュータ500は、1つ以上の物理的なコンピュータ読み取り可能ストレージ媒体、ドライブ530に関連づけられた媒体又はその他のストレージデバイスを含んでもよい。システムバスはプロセッサ510がコードおよび/またはデータをコンピュータ読み取り可能な格納媒体に読み込んだり、コンピュータ読み取り可能な格納媒体から読み取ったりすることを可能にしてもよい。媒体は任意の適切な技術を使用して実装される格納要素の形態で装置を表してもよく、その任意の適切な技術は、半導体、磁気材料、光学的材料、電気格納装置、電気化学格納装置、またはその他任意のこうした格納技術を含むが、それらには限定されない。媒体は、RAM、ROM、フラッシュまたは他の種類の揮発性または不揮発性のメモリ技術として特徴付けられるメモリ520と関連付けられる構成要素を表してもよい。媒体はまた、格納ドライブ530として実装される格納装置または別の方法で実装される二次格納装置を表してもよい。ハードドライブの実装はソリッドステートとして特徴付けられてもよく、または磁気的に符号化された情報を格納する回転媒体を含んでもよい。
格納媒体は1つ以上のプログラムモジュール560を含んでもよい。プログラムモジュール560は、プロセッサ510にロードされて実行された時に、汎用コンピュータ計算システムを特定用途向けコンピュータ計算システムに転換するソフトウェア命令を含んでもよい。この記載全体を通じて詳述される通り、プログラムモジュール560は、様々な器具または技術を提供し得、その様々な器具または技術によって、コンピュータ500は、本明細書において考察された、構成要素、論理フロー、および/またはデータ構造を使用して、全システムまたは全動作環境に関与する。
プロセッサ510は任意の数のトランジスタまたは他の回路要素から構築されてもよく、それらのトランジスタまたは他の回路要素は、個々に、またはまとめて任意の数の状態を呈してもよい。さらに具体的には、プロセッサ510は状態機械または有限状態機械として動作してもよい。こうした機械は、プログラムモジュール560内に含まれる実行可能な命令をロードすることによって、第2の機械または特定の機械に転換されてもよい。これらのコンピュータ実行可能な命令はプロセッサ510が状態間でどのように遷移するかを特定し、それによりプロセッサ510を構成するトランジスタまたは他の回路要素を第1の機械から第2の機械に転換することによってプロセッサ510を転換させてもよい。いずれかの機械の状態がまた、1つ以上の入力デバイス590、ネットワークインタフェース596、他の周辺機器、他のインタフェース、または1人以上のユーザまたは他の当事者から入力を受信することによって転換されてもよい。いずれかの機械が、プリンタ、スピーカ、ビデオディスプレイなどの様々な出力デバイスの状態や様々な物理的特性などを転換してもよい。
プログラムモジュール560を符号化はまた、格納媒体の物理的な構造を転換してもよい。物理的な構造の具体的な転換は、本記載の様々な実装において様々な要因に依存し得る。こうした要因の例は、一次格納装置または二次格納装置として特徴付けられる格納媒体を実装するために使用される技術などを含むが、それらには限定されない。例えば、格納媒体が半導体ベースのメモリとして実装される場合には、プログラムモジュール560は、ソフトウェアが半導体メモリ520内に符号化された時に半導体メモリ520の物理的状態を転換してもよい。例えば、ソフトウェアは、半導体メモリ520を構成する、トランジスタ、コンデンサ、または他のディスクリート回路要素の状態を転換してもよい。
別の例として、格納媒体はドライブ530などの磁気的技術または光学的技術を使用して実装されてもよい。こうした実装において、プログラムモジュール560は、ソフトウェアが磁気的媒体または光学的媒体内に符号化される時に、磁気的媒体または光学的媒体の物理的状態を転換してもよい。これらの転換は所与の磁気的媒体内の特定の場所の磁気的特性を変えることを含んでもよい。これらの転換はまた、所与の光学的媒体内の特定の場所の光学的特性を変えるためにそれらの場所の物理的特徴または特性を変えることを含んでもよい。物理的媒体の様々な他の転換が本記載の範囲や精神を逸脱することなく可能であることが理解されるべきである。
ここで図6を参照すると、図6は、本明細書において提示された少なくとも一部の実施形態に従って構成された、コンピュータ計算デバイス上でコンピュータプロセスを実行するためのコンピュータプログラムを含むコンピュータプログラム製品600の部分図を例示する概略図である。例示的なコンピュータプログラム製品の例示的な実施形態が信号搬送媒体602を使用して提供され、604:マルチコアプロセッサにおける第1のタイルから第2のタイルに、第1のタイルにおける第1のコア上で実行するスレッドの移送を開始するための1つ以上の命令;第1のタイルにおける第1のキャッシュから第2のタイルにおける第2のキャッシュに移動されるブロックのブロックアドレスを決定するための1つ以上の命令;ブロックアドレスに対応するディレクトリを備える第3のタイルを識別するための1つ以上の命令;第2のキャッシュがブロックを共有することを反映するようにディレクトリをアップデートするための1つ以上の命令;または第1のキャッシュから第2のキャッシュにブロックを移動させるための1つ以上の命令、のうちの少なくとも1つの命令を含んでもよい。一部の実施形態において、1つ以上のコンピュータプログラム製品600の信号搬送媒体602はコンピュータ読み取り可能な媒体606、記録可能な媒体608、および/または通信媒体610を含む。
本明細書に記載された発明は、コンピュータシステム上でのオペレーションシステムおよびアプリケーションプログラムの実行に関して実行するプログラムモジュールに関して概略的に提示されてきたが、当業者は他の実装が他の種類のプログラムモジュールと組み合わせて行われてもよいことを認識する。概して、プログラムモジュールは、特定のタスクを行うか、または特定の抽象データ種を実装する、ルーチン、プログラム、構成要素、データ構造、および他の種類の構造を含む。さらに、本明細書において記載された発明は、ハンドヘルドデバイス、マルチコア・プロセッサ・システム、マイクロプロセッサベースの消費者電子機器もしくはプログラマブル消費者電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に実施されてもよいことを当業者は理解する。
本開示は本出願において記載された特定の実施形態に関して制限されず、それらの実施形態は様々な態様の例示であることが意図される。当業者には理解される通り、多くの改変と変形とが本発明の精神と範囲とを逸脱することなく行われることが出来る。本明細書において列挙されたものに加えて、本開示の範囲内の、機能的に同等な方法や装置が、上の記載から当業者には明らかである。こうした改変や変形は添付の特許請求の範囲内に該当することを意図される。本開示は、こうした特許請求の範囲が権利を与えられる均等物の全範囲と共に、添付の特許請求の範囲の用語によってのみ制限される。本開示は、特定の方法、試薬、化合物、組成物、または生物学的システムに限定されず、それらは、当然変更することが出来ることを理解されたい。本明細書において使用される用語法は特定の実施形態を記載する目的のためだけであり、限定することを意図していないことも理解されたい。
本明細書における実質的に全ての複数形および/または単数形の用語の使用に関して、文脈および/または用途に適切である場合には、当業者は複数形から単数形および/または単数形から複数形に言い換えることが出来る。様々な単数形/複数形の置換が明確にする目的のために本明細書において明示的に述べられてもよい。
概して、本明細書において使用された用語、特に添付の特許請求の範囲(例えば、添付の特許請求の範囲の本文)において使用される用語は「開いた」用語(例えば、「含んでいる」という用語は「含んでいるが、それらには限定されない」と解釈されるべきであり、「有する」という用語は「少なくとも有する」と解釈されるべきであり、「含む」という用語は「含むが、それらには限定されない」と解釈されるべきであるなどである)と概略的に意図されることが当業者には理解される。導入された請求項の記載に関する特定の数字が意図される場合には、こうした意図がその請求項において明示的に記載されたことと、こうした記載が存在しない場合には、こうした意図が存在しないこととが当業者にはさらに理解される。例えば、理解を助けるために、以下の添付の特許請求の範囲は、請求項の記載を導入するために導入語句「少なくとも1つ」および「1つ以上」の使用を含んでもよい。しかしながら、同じ請求項が「1つ以上」または「少なくとも1つ」などの導入語句と「a」または「an」などの不定冠詞とを含む時であっても、こうした語句の使用は不定冠詞「a」または「an」による請求項の記載の導入が、たった1つのこうした記載を含む実施形態にこうした導入された請求項の記載を含むあらゆる特定の請求項を限定することを含意するように解釈されるべきではない(例えば、「a」および/または「an」は「少なくとも1つ」または「1つ以上」を意味すると解釈されるべきである)。請求項の記載を導入するために使用される定冠詞の使用の場合にも同様である。また、導入される請求項の記載の特定の数字が明示的に記載される場合であっても、こうした記載は少なくとも記載された数字を意味するように解釈されるべきであることを当業者は認識する(例えば、他の修飾語を伴わない「2つの記載」という単なる記載は、少なくとも2つの記載または2つ以上の記載を意味する)。さらに、「A、B、およびCなどのうちの少なくとも1つ」に対する慣例的な類似物が使用される例においては、概して、こうした構成は当業者がその慣例を理解する意味が意図される(例えば、「A、B、およびCのうちの少なくとも1つを有するシステム」は、Aを単独で有するシステム、Bを単独で有するシステム、Cを単独で有するシステム、AとBとを共に有するシステム、AとCとを共に有するシステム、BとCとを共に有するシステム、および/またはAとBとCとを共に有するシステムなどを含むが、それらには限定されない)。「A、B、またはCなどのうちの少なくとも1つ」に対する慣例的な類似物が使用される例においては、概して、こうした構成は当業者がその慣例を理解する意味が意図される(例えば、「A、B、またはCのうちの少なくとも1つを有するシステム」は、Aを単独で有するシステム、Bを単独で有するシステム、Cを単独で有するシステム、AとBとを共に有するシステム、AとCとを共に有するシステム、BとCとを共に有するシステム、および/またはAとBとCとを共に有するシステムなどを含むが、それらには限定されない)。詳細な説明、特許請求の範囲、または図面における2つ以上の代替用語を表す事実上全ての離接語および/または離接語句は、用語のうちの1つ、用語のうちのいずれか、または両方の用語を含む可能性を企図するように理解されるべきであることが当業者によってさらに理解される。例えば、「AまたはB」という語句は、「A」もしくは「B」、または「AおよびB」の可能性を含むように理解される。
さらに、本開示の特徴または態様がマーカッシュ群で記載される場合、本開示もまた、マーカッシュ群により、マーカッシュ群に所属するもののうちの個々のものまたは部分群に関して記載されることを当業者は認識する。
当業者によって理解される通り、明細書を提供する点などのありとあらゆる目的のために、本明細書において記載された全範囲もまた、考えられるありとあらゆる部分範囲やその部分範囲の組み合わせを含む。列挙されたあらゆる範囲は、その同じ範囲が、少なくとも等しい、半分、三分の一部分、四分の一部分、五分の一部分、十分の一部分などに解体されることを充分に記載したり可能にしたりすると容易に認識されることが出来る。非限定的な例として、本明細書で考察された各範囲は、下側三分の一、中間三分の一、そして上側三分の一などに容易に分割されることが出来る。やはり当業者によって理解される通り、「まで」、「少なくとも」、「よりも多い」、「よりも少ない」などの全ての用語は、記載された数字を含み、上で考察された通りに、次に部分範囲に分解されることが出来る範囲を指す。最終的に、当業者には理解される通り、ある範囲は、それぞれの個々のものを含む。従って、例えば、1つ〜3つの要素を有する群は、1つ、2つ、または3つの要素を有する群を指す。同様に、1つ〜5つの要素を有する群は、1つ、2つ、3つ、4つ、5つの要素を有する群などを指す。
様々な態様と様々な実施形態とが本明細書において記載されてきたが、他の態様や実施形態が当業者には明らかである。本明細書において開示された様々な態様と様々な実施形態とは例示の目的のためであり、限定することを意図しておらず、真の範囲と精神とは以下の特許請求の範囲によって示される。

Claims (26)

  1. マルチコアプロセッサにおいてキャッシュ状態の移動を加速させるための方法であって、
    前記マルチコアプロセッサの第1のタイルから第2のタイルへの、前記第1のタイルにおける第1のコア上で実行するスレッドの移送を開始することであって、前記第1のタイルは第1のコアと第1のキャッシュを備え、前記第2のタイルは第2のコアと第2のキャッシュを備える、移送の開始と、
    前記第1のキャッシュから第2のキャッシュへ移動されるブロックのブロックアドレスを決定することと、
    前記マルチコアプロセッサにおける第3のタイルを識別することであって、前記第3のタイルは前記ブロックアドレスに対応するディレクトリを備える、第3のタイルの識別と、
    前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートすることと、
    前記第1のタイルから前記第2のタイルへの前記スレッドの移送を完了させるために効果的な前記第2のタイルにおける第2のキャッシュに、前記第1のタイルにおける第1のキャッシュから前記ブロックを移動させること、
    を包含する、方法。
  2. 前記第1のキャッシュから第2のキャッシュに移動されるブロックのブロックアドレスを決定することが、前記ブロックのブロックアドレスを決定するために前記第1のキャッシュに関連付けられるキャッシュ・タグ・アレイをスキャニングすることを包含する、請求項1に記載の方法。
  3. 前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートすることが、
    前記ブロックアドレスのリストと前記第2のキャッシュの識別子とを備えるメッセージを、前記第1のタイルから前記第3のタイルに送信することと、
    前記第3のタイルにおいて前記メッセージを受信したことに応答して、前記第2のキャッシュが前記リストに含まれるブロックアドレスを共有することを反映するように前記ディレクトリをアップデートすることと、
    を包含する、請求項1に記載の方法。
  4. 前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートすることが、 前記第2のキャッシュが前記ブロックを含むことを反映するようにビットベクトルをアップデートすることを包含し、前記ディレクトリは複数のビットを含むビットベクトルを備え、前記複数のビットのそれぞれが前記マルチコアプロセッサにおける複数のタイルのうちの対応するものと関連付けられ、前記ビットのそれぞれの値は対応する前記タイルが前記ブロックを含むキャッシュを含むか否かを特定する、請求項1に記載の方法。
  5. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させることが、前記第2のキャッシュが前記ブロックを共有することを反映するようにディレクトリがアップデートされる前に、前記第1のキャッシュから前記第2のキャッシュへ前記ブロックを移動することを含む、請求項1に記載の方法。
  6. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させることが、前記第2のキャッシュが前記ブロックを共有することを反映するようにディレクトリをアップデートするのと同時に、前記第1のキャッシュから前記第2のキャッシュへ前記ブロックを移動することを含む、請求項1に記載の方法。
  7. 前記第1のタイルにおいて前記ブロックうちの少なくとも1つに対するキャッシュの無効化若しくは介入リクエストを受信することであって、前記第1のタイルはさらに移動状態表を備えるものである、リクエストの受信と、
    第1の種類の移動動作が完了されたか否かを決定することであって、前記ブロックが前記第1のキャッシュから第2のキャッシュに移動させられたことを前記移動状態表が示す時と、前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリがアップデートされていない時に、前記第1の種類の移動動作が完了されるように決定されるものである、決定と、
    前記第1の種類の移動動作が完了されたことを決定したことに応答して、前記キャッシュの無効化または介入のリクエストのうちいずれかを前記第1のキャッシュから前記第2のキャッシュに転送することと、
    をさらに包含する、請求項6に記載の方法。
  8. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させることが、前記第1のキャッシュと前記第2のキャッシュとの間で前記ブロックを複製することを包含する、請求項1に記載の方法。
  9. 前記第1のキャッシュと前記第2のキャッシュとの間で前記ブロックを複製することが、前記ブロックのダーティエントリを取り除くために前記マルチコアプロセッサに結合されたメインメモリをアップデートするための命令を送信することを包含する、請求項8に記載の方法。
  10. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させることが、
    前記第1のキャッシュから前記第2のキャッシュに前記ブロックを動かすことにより、前記第1のキャッシュにおける前記ブロックを無効化することと、
    前記無効化されたブロックを反映するように前記ディレクトリをアップデートすることと
    を包含する、請求項1に記載の方法。
  11. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させることが、前記第1のキャッシュから前記第2のキャッシュに最近最も使用されたブロックの一部分を移動させることを包含する、請求項1に記載の方法。
  12. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させることが、最近最も使用されたブロックから最近最も使用されていないブロックという順序で前記ブロックを移動させることを包含する、請求項1に記載の方法。
  13. 第1のコア、第1のキャッシュ及び第1のディレクトリを備える第1のタイルと、
    第2のコア、第2のキャッシュ及び第2のディレクトリを備える第2のタイルと、
    第3のコア、第3のキャッシュ及び第3のディレクトリを備える第3のタイルと
    を備えるマルチコアプロセッサであって、
    前記マルチコアプロセッサは、
    前記第1のコア上で実行するスレッドの、前記第1のタイルから前記第2のタイルへの移送を開始することと、
    前記第1のキャッシュから前記第2のキャッシュに移動させられるブロックのブロックアドレスを決定することと、
    前記第3のディレクトリが前記ブロックアドレスに対応することを識別することと、
    前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートすることと、
    前記第1のタイルから前記第2のタイルへの前記スレッドの移送を完了するために効果的な前記第2のタイルにおける前記第2のキャッシュに、前記第1のタイルにおける前記第1のキャッシュから前記ブロックを移動させることと
    を行うように構成される、マルチコアプロセッサ。
  14. 前記第1のキャッシュはキャッシュ・タグ・アレイを備え、前記マルチコアプロセッサは、前記第1のキャッシュから前記第2のキャッシュに移動させられるブロックのブロックアドレスを決定するように前記キャッシュ・タグ・アレイをスキャニングするようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  15. 前記第2のキャッシュが前記ブロックを共有することを反映するように前記第3のディレクトリをアップデートするために、前記マルチコアプロセッサがさらに、
    前記第1のタイルから前記第3のタイルに、前記ブロックアドレスのリストと前記第2のキャッシュの識別子とを備えるメッセージを送信することと、
    前記第3のタイルにおける前記メッセージの受信に応答して、前記第2のキャッシュが前記リストに含まれる前記ブロックアドレスを共有することを反映するように前記第3のディレクトリをアップデートすることと
    を行うように構成される、請求項13に記載のマルチコアプロセッサ。
  16. 前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリをアップデートするために、前記マルチコアプロセッサは前記第2のキャッシュが前記ブロックを含むことを反映するようにビットベクトルをアップデートするようにさらに構成され、前記第3のディレクトリは複数のビットを含むビットベクトルを備え、前記複数のビットのそれぞれは、前記マルチコアプロセッサにおける複数のタイルのうちの対応するものと関連付けられ、前記ビットのそれぞれの値は、前記タイルのうちの対応するものが前記ブロックを含むキャッシュを含むか否かを特定する、請求項13に記載のマルチコアプロセッサ。
  17. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第2のキャッシュが前記ブロックを共有することを反映するように前記第3のディレクトリがアップデートされる前に、前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  18. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第2のキャッシュが前記ブロックを共有することを反映するように前記第3のディレクトリをアップデートするのと同時に、前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  19. 前記第1のタイルは前記第1のキャッシュからのキャッシュの移動と関連付けられる移動状態表をさらに備え、前記マルチコアプロセッサは、
    前記第1のタイルにおいて前記ブロックのうちの少なくとも1つに対するキャッシュの無効化または介入のリクエストを受信することと、
    第1の種類の移動動作が完了されたか否かを決定することであって、前記ブロックが前記第1のキャッシュから第2のキャッシュに移動させられたことを前記移動状態表が示す時と、前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリがアップデートされていない時とに、前記第1の種類の移動動作は完了されるように決定される、決定と、
    前記第1の種類の移動動作が完了されたことを決定したことに応答して、前記キャッシュの無効化または介入のリクエストのうちのいずれかを前記第1のタイルから前記第2のタイルに転送することと
    を行うようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  20. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第1のキャッシュと前記第2のキャッシュとが前記ブロックを格納するように前記第1のキャッシュと前記第2のキャッシュとの間で前記ブロックを複製するようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  21. 前記第1のキャッシュと前記第2のキャッシュとの間で前記ブロックを複製するために、前記マルチコアプロセッサは、前記ブロックにおけるダーティエントリを取り除くために前記マルチコアプロセッサに結合されたメインメモリをアップデートするための命令を送信するようにさらに構成される、請求項20に記載のマルチコアプロセッサ。
  22. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは、前記第1のキャッシュはブロックを格納し、前記第2のキャッシュはブロックを格納しないように前記第1のキャッシュから前記第2のキャッシュに前記ブロックを動かすようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  23. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは前記第1のキャッシュから前記第2のキャッシュに前記ブロックにおける最近最も使用されたブロックのうちの一部を移動させるようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  24. 前記第1のキャッシュから前記第2のキャッシュに前記ブロックを移動させるために、前記マルチコアプロセッサは最近最も使用されたブロックから最近最も使用されていないブロックという順序で前記ブロックを移動させるようにさらに構成される、請求項13に記載のマルチコアプロセッサ。
  25. 第1のコア、第1のキャッシュ及び第1のディレクトリを備える第1のタイルと、
    第2のコア、第2のキャッシュ及び第2のディレクトリを備える第2のタイルと、
    第3のコア、第3のキャッシュ及び第3のディレクトリを備える第3のタイルと、
    第4のコア、第4のキャッシュ及び第4のディレクトリを備える第4のタイルと
    を備えるマルチコアプロセッサであって、
    前記マルチコアプロセッサは、
    前記第1のコア上で実行するスレッドの、前記第1のタイルから前記第2のタイルへの移送を開始することと、
    前記第1のキャッシュから前記第2のキャッシュに移動させられる、第1のブロックのブロックアドレスの第1の組と第2のブロックのブロックアドレスの第2の組とを決定することと、
    前記第3のディレクトリが前記ブロックアドレスの第1の組に対応することを識別することと、
    前記第4のディレクトリが前記ブロックアドレスの第2の組に対応することを識別することと、
    前記第2のキャッシュが前記第1のブロックを共有することを反映するように前記第3のディレクトリをアップデートすることと、
    前記第2のキャッシュが前記第2のブロックを共有することを反映するように前記第4のディレクトリをアップデートすることと、
    前記第1のタイルから前記第2のタイルへの前記スレッドの移送を完了するために効果的な前記第2のキャッシュに、前記第1のキャッシュから前記第1のブロックと前記第2のブロックとを移動させることと、
    前記第2のコア上で前記スレッドを実行することと
    を行うように構成される、マルチコアプロセッサ。
  26. 前記第1のタイルは前記第1のキャッシュからのキャッシュの移動と関連付けられる移動状態表をさらに備え、前記マルチコアプロセッサは、
    前記第1のタイルにおける前記ブロックのうちの少なくとも1つに対するキャッシュの無効化または介入のリクエストを受信することと、
    第1の種類の移動動作が完了されたか否かを決定することであって、前記ブロックが前記第1のキャッシュから第2のキャッシュに移動させられたことを前記移動状態表が示す時と、前記第2のキャッシュが前記ブロックを共有することを反映するように前記ディレクトリがアップデートされていない時に、前記第1の種類の移動動作は完了されるように決定される、決定と、
    前記第1の種類の移動動作が完了されたという決定に応答して、前記キャッシュの無効化または介入のリクエストのうちのいずれかを前記第1のタイルから前記第2のタイルに転送することと
    を行うようにさらに構成される、請求項25に記載のマルチコアプロセッサ。
JP2013544447A 2010-12-29 2010-12-29 ディレクトリベースのマルチコアアーキテクチャ上におけるキャッシュ状態の移動の加速 Expired - Fee Related JP5603507B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2010/062335 WO2012091702A1 (en) 2010-12-29 2010-12-29 Accelerating cache state transfer on a directory-based multicore architecture

Publications (2)

Publication Number Publication Date
JP2013546095A true JP2013546095A (ja) 2013-12-26
JP5603507B2 JP5603507B2 (ja) 2014-10-08

Family

ID=46381840

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013544447A Expired - Fee Related JP5603507B2 (ja) 2010-12-29 2010-12-29 ディレクトリベースのマルチコアアーキテクチャ上におけるキャッシュ状態の移動の加速

Country Status (4)

Country Link
US (2) US9336146B2 (ja)
JP (1) JP5603507B2 (ja)
KR (1) KR101497516B1 (ja)
WO (1) WO2012091702A1 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9298621B2 (en) * 2011-11-04 2016-03-29 Hewlett Packard Enterprise Development Lp Managing chip multi-processors through virtual domains
US9047194B2 (en) 2012-07-18 2015-06-02 Empire Technology Development Llc Virtual cache directory in multi-processor architectures
GB2502857B (en) * 2013-03-05 2015-01-21 Imagination Tech Ltd Migration of data to register file cache
US8671232B1 (en) * 2013-03-07 2014-03-11 Freescale Semiconductor, Inc. System and method for dynamically migrating stash transactions
WO2014196976A1 (en) * 2013-06-06 2014-12-11 Empire Technology Development, Llc Shared cache data movement in thread migration
CN105264501B (zh) 2013-06-19 2018-06-08 英派尔科技开发有限公司 定位多核处理器中的被高速缓存的数据的方法和装置
US9367325B2 (en) * 2013-06-29 2016-06-14 Intel Corporation Common architecture state presentation for processor having processing cores of different types
US9684607B2 (en) 2015-02-25 2017-06-20 Microsoft Technology Licensing, Llc Automatic recovery of application cache warmth
US9830265B2 (en) * 2013-11-20 2017-11-28 Netspeed Systems, Inc. Reuse of directory entries for holding state information through use of multiple formats
KR101513162B1 (ko) * 2014-02-19 2015-04-17 주식회사 큐레이소프트 보안 어플리케이션 구동 시스템
US10078613B1 (en) * 2014-03-05 2018-09-18 Mellanox Technologies, Ltd. Computing in parallel processing environments
US9632958B2 (en) 2014-07-06 2017-04-25 Freescale Semiconductor, Inc. System for migrating stash transactions
US9684596B2 (en) 2015-02-25 2017-06-20 Microsoft Technology Licensing, Llc Application cache replication to secondary application(s)
US20170168957A1 (en) * 2015-12-10 2017-06-15 Ati Technologies Ulc Aware Cache Replacement Policy
EP3718023A1 (en) 2017-12-01 2020-10-07 MemSQL Inc. Accelerated filtering, grouping and aggregation in a database system
US11513958B1 (en) 2019-05-29 2022-11-29 Marvell Asia Pte, Ltd. Shared mid-level data cache
US11036643B1 (en) 2019-05-29 2021-06-15 Marvell Asia Pte, Ltd. Mid-level instruction cache
US11327890B1 (en) * 2019-05-29 2022-05-10 Marvell Asia Pte, Ltd. Partitioning in a processor cache
US20220300450A1 (en) * 2019-08-22 2022-09-22 Google Llc Sharding for synchronous processors

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001236221A (ja) * 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
JP2004054931A (ja) * 2002-07-23 2004-02-19 Hewlett-Packard Development Co Lp 分散メモリマルチプロセッサシステムにおけるメモリ移行のためのシステムおよび方法
JP2006501546A (ja) * 2002-09-27 2006-01-12 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 統合ディレクトリとプロセッサキャッシュを備えたコンピュータシステム

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6857051B2 (en) * 1998-12-23 2005-02-15 Intel Corporation Method and apparatus for maintaining cache coherence in a computer system
US6751698B1 (en) * 1999-09-29 2004-06-15 Silicon Graphics, Inc. Multiprocessor node controller circuit and method
US6654858B1 (en) * 2000-08-31 2003-11-25 Hewlett-Packard Development Company, L.P. Method for reducing directory writes and latency in a high performance, directory-based, coherency protocol
IL161107A0 (en) * 2001-09-28 2004-08-31 Tidal Networks Inc Multi-threaded packet processing engine for stateful packet processing
US6779086B2 (en) * 2001-10-16 2004-08-17 International Business Machines Corporation Symmetric multiprocessor systems with an independent super-coherent cache directory
US6804632B2 (en) * 2001-12-06 2004-10-12 Intel Corporation Distribution of processing activity across processing hardware based on power consumption considerations
US20040139305A1 (en) * 2003-01-09 2004-07-15 International Business Machines Corporation Hardware-enabled instruction tracing
US20040139304A1 (en) * 2003-01-09 2004-07-15 International Business Machines Corporation High speed virtual instruction execution mechanism
US7047320B2 (en) * 2003-01-09 2006-05-16 International Business Machines Corporation Data processing system providing hardware acceleration of input/output (I/O) communication
US7783842B2 (en) * 2003-01-09 2010-08-24 International Business Machines Corporation Cache coherent I/O communication
US6976148B2 (en) * 2003-01-09 2005-12-13 International Business Machines Corporation Acceleration of input/output (I/O) communication through improved address translation
US7355601B2 (en) * 2003-06-30 2008-04-08 International Business Machines Corporation System and method for transfer of data between processors using a locked set, head and tail pointers
US7788452B2 (en) * 2004-01-20 2010-08-31 International Business Machines Corporation Method and apparatus for tracking cached addresses for maintaining cache coherency in a computer system having multiple caches
US7526515B2 (en) * 2004-01-21 2009-04-28 International Business Machines Corporation Method and system for a grid-enabled virtual machine with movable objects
US7454576B2 (en) * 2004-12-27 2008-11-18 Intel Corporation System and method for cache coherency in a cache with different cache location lengths
US20060143384A1 (en) * 2004-12-27 2006-06-29 Hughes Christopher J System and method for non-uniform cache in a multi-core processor
US7536514B2 (en) * 2005-09-13 2009-05-19 International Business Machines Corporation Early return indication for read exclusive requests in shared memory architecture
US7478190B2 (en) * 2006-02-10 2009-01-13 University Of Utah Technology Commercialization Office Microarchitectural wire management for performance and power in partitioned architectures
US7626588B1 (en) * 2006-06-16 2009-12-01 Nvidia Corporation Prescient cache management
US7543112B1 (en) * 2006-06-20 2009-06-02 Sun Microsystems, Inc. Efficient on-chip instruction and data caching for chip multiprocessors
US7853755B1 (en) * 2006-09-29 2010-12-14 Tilera Corporation Caching in multicore and multiprocessor architectures
US8799581B2 (en) * 2007-01-05 2014-08-05 International Business Machines Corporation Cache coherence monitoring and feedback
US7793044B1 (en) * 2007-01-16 2010-09-07 Oracle America, Inc. Efficient caching of stores in scalable chip multi-threaded systems
US20080244189A1 (en) * 2007-03-30 2008-10-02 Allison Brian D Method, Apparatus, System and Program Product Supporting Directory-Assisted Speculative Snoop Probe With Concurrent Memory Access
US7966453B2 (en) * 2007-12-12 2011-06-21 International Business Machines Corporation Method and apparatus for active software disown of cache line's exlusive rights
US8615647B2 (en) * 2008-02-29 2013-12-24 Intel Corporation Migrating execution of thread between cores of different instruction set architecture in multi-core processor and transitioning each core to respective on / off power state
US8117397B2 (en) * 2008-12-16 2012-02-14 International Business Machines Corporation Victim cache line selection
US8615633B2 (en) * 2009-04-23 2013-12-24 Empire Technology Development Llc Multi-core processor cache coherence for reduced off-chip traffic
WO2010142432A2 (en) * 2009-06-09 2010-12-16 Martin Vorbach System and method for a cache in a multi-core processor
US8799586B2 (en) * 2009-09-30 2014-08-05 Intel Corporation Memory mirroring and migration at home agent
US8667227B2 (en) * 2009-12-22 2014-03-04 Empire Technology Development, Llc Domain based cache coherence protocol
US8244986B2 (en) * 2009-12-30 2012-08-14 Empire Technology Development, Llc Data storage and access in multi-core processor architectures
US8904154B2 (en) * 2010-04-16 2014-12-02 Massachusetts Institute Of Technology Execution migration
US8832414B2 (en) * 2011-03-24 2014-09-09 Empire Technology Development Llc Dynamically determining the profitability of direct fetching in a multicore architecture
US9274960B2 (en) * 2012-03-20 2016-03-01 Stefanos Kaxiras System and method for simplifying cache coherence using multiple write policies
US9047194B2 (en) * 2012-07-18 2015-06-02 Empire Technology Development Llc Virtual cache directory in multi-processor architectures
US9235529B2 (en) * 2012-08-02 2016-01-12 Oracle International Corporation Using broadcast-based TLB sharing to reduce address-translation latency in a shared-memory system with optical interconnect
US9009446B2 (en) * 2012-08-02 2015-04-14 Oracle International Corporation Using broadcast-based TLB sharing to reduce address-translation latency in a shared-memory system with electrical interconnect
KR20140080058A (ko) * 2012-12-20 2014-06-30 삼성전자주식회사 멀티코어를 위한 로드 밸런싱 방법 및 휴대 단말
US9384132B2 (en) * 2013-06-28 2016-07-05 Intel Corporation Emulated message signaled interrupts in a virtualization environment
US9378069B2 (en) * 2014-03-05 2016-06-28 International Business Machines Corporation Lock spin wait operation for multi-threaded applications in a multi-core computing environment
US9740617B2 (en) * 2014-12-23 2017-08-22 Intel Corporation Hardware apparatuses and methods to control cache line coherence

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001236221A (ja) * 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
JP2004054931A (ja) * 2002-07-23 2004-02-19 Hewlett-Packard Development Co Lp 分散メモリマルチプロセッサシステムにおけるメモリ移行のためのシステムおよび方法
JP2006501546A (ja) * 2002-09-27 2006-01-12 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 統合ディレクトリとプロセッサキャッシュを備えたコンピュータシステム

Also Published As

Publication number Publication date
US20160210229A1 (en) 2016-07-21
US9336146B2 (en) 2016-05-10
US9760486B2 (en) 2017-09-12
KR20130101572A (ko) 2013-09-13
US20120173819A1 (en) 2012-07-05
WO2012091702A1 (en) 2012-07-05
KR101497516B1 (ko) 2015-03-02
JP5603507B2 (ja) 2014-10-08

Similar Documents

Publication Publication Date Title
JP5603507B2 (ja) ディレクトリベースのマルチコアアーキテクチャ上におけるキャッシュ状態の移動の加速
JP4421561B2 (ja) ハイブリッドdmaキュー及びdmaテーブルのデータ処理方法、装置及びシステム
CN100421088C (zh) 用于管理高速缓存数据的数字数据处理设备和方法
TWI267862B (en) Flash controller cache architecture
CN104765575B (zh) 信息存储处理方法
US20060230237A1 (en) Method and system for maintaining cache coherence of distributed shared memory system
JP4346612B2 (ja) 情報処理方法および装置
JP4645973B2 (ja) 命令セットのエミュレーションのための方法、装置及びシステム
JP2016219013A (ja) データを格納するための方法およびデータを格納するための一時的でないコンピュータ読取可能媒体
TW200809495A (en) Hybrid multi-tiered caching storage system
US20160062905A1 (en) Hierarchical cache structure and handling thereof
US20160147670A1 (en) Page cache device and method for efficient mapping
JP6859361B2 (ja) 中央処理ユニット(cpu)ベースシステムにおいて複数のラストレベルキャッシュ(llc)ラインを使用してメモリ帯域幅圧縮を行うこと
JP2017016691A (ja) テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法
JP2006190299A (ja) マルチプロセッサシステムにおける共有メモリの管理のための方法及び装置
CN1326132A (zh) 具有压缩指令的处理器及处理器指令的压缩方法
CN103345451B (zh) 一种在多核处理器中缓冲数据的方法
CN113312415A (zh) 用于数据库操作的近存储器加速
JP2016520905A (ja) ハイブリッド分散・集積機能性を有するダイレクトメモリアクセスコントローラ
JP5505516B2 (ja) 情報処理システムおよび情報送信方法
WO2019085649A1 (zh) 一种缓存访问方法、多级缓存系统及计算机系统
US20170139607A1 (en) Method and system for shared direct access storage
JPH09179779A (ja) コンピュータシステムおよびデータ転送方法
JP2006520044A (ja) データフローアプリケーションを処理するために最適化されるキャッシュを備えるデータ処理システム
JP5307796B2 (ja) 処理装置、処理システム、データ共有処理方法、及びデータ共有処理用集積回路

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130612

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140404

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140625

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140821

R150 Certificate of patent or registration of utility model

Ref document number: 5603507

Country of ref document: JP

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

LAPS Cancellation because of no payment of annual fees