JP2005250830A - プロセッサおよび主記憶共有マルチプロセッサ - Google Patents

プロセッサおよび主記憶共有マルチプロセッサ Download PDF

Info

Publication number
JP2005250830A
JP2005250830A JP2004060149A JP2004060149A JP2005250830A JP 2005250830 A JP2005250830 A JP 2005250830A JP 2004060149 A JP2004060149 A JP 2004060149A JP 2004060149 A JP2004060149 A JP 2004060149A JP 2005250830 A JP2005250830 A JP 2005250830A
Authority
JP
Japan
Prior art keywords
size
block
processor
cache
command
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.)
Pending
Application number
JP2004060149A
Other languages
English (en)
Inventor
Hideki Aoki
秀貴 青木
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2004060149A priority Critical patent/JP2005250830A/ja
Priority to US11/065,259 priority patent/US20050198438A1/en
Publication of JP2005250830A publication Critical patent/JP2005250830A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory

Landscapes

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

Abstract

【課題】主記憶共有マルチプロセッサにおいて、キャッシュ一貫性を保持するためのトランザクションを削減する。
【解決手段】主記憶の各ページに対応して、当該ページが各ノードグループのキャッシュに登録されていないかどうか(登録されていない場合を0)をビット列で保持するディレクトリ340を設ける。プロセッサ10は、指定ページに対応するディレクトリエントリを0クリアする命令を持つ。また縮約装置330は、結合網100を流れるキャッシュ一貫性保持のためのトランザクションを観測し、ディレクトリ中で0に設定できるビットを検出する。
【選択図】 図1

Description

本発明は、主記憶共有マルチプロセッサに係り、特に、主記憶共有型の高速な並列計算機システムを構築するに用いて好適な主記憶共有マルチプロセッサに関する。
近年パーソナルコンピュータ(PC)、ワークステーション(WS)の上位機種、およびサーバ機などでは、主記憶共有型のマルチプロセッサ(SMP、Symmetric MultiProcessor)構成が広まっており、性能を向上させるために、20〜30台以上の多数台のプロセッサの間で主記憶を共有することが重要な課題になってきている。主記憶共有型のマルチプロセッサの構成方法として広く使われている方式として共有バスがあるが、バスではバスのスループットがネックになるため、接続可能なプロセッサの数は高々8台程度である。従って、多数台のプロセッサを接続する方式としては適さない。
現在おこなわれている多数台のプロセッサを接続する主記憶共有マルチプロセッサの構成方法には、大きくふたつの方式がある。そのひとつに、クロスバスイッチによる構成があり、そのような構成は、例えば、非特許文献1に開示されている。この方式では、プロセッサと主記憶を持つ各ボードを、高速なクロスバスイッチで接続し、プロセッサ間のキャッシュ一貫性を保持する。この方式では、キャッシュ一貫性の保持が高速にできるという利点がある。しかし、キャッシュの一貫性を保持するためのトランザクションが全プロセッサにブロードキャストされるため、クロスバスイッチにかかるトラフィックが非常に高く、性能的に隘路になるとともに、高速なスイッチが必要になるためコスト高を招くという欠点がある。さらに、キャッシュ一貫性保持のためのトランザクションをブロードキャストしなければならないため、台数が非常に多いシステムを実現することは困難であり、数十台程度が限度である。
これに対して、ディレクトリ方式によるマルチプロセッサの構成があり、たとえば非特許文献2に開示されている。この方式では、主記憶のキャッシュブロックごとに、そのキャッシュブロックがどのプロセッサにキャッシュされているかを示すビットマップであるディレクトリを設けることにより、必要なプロセッサにのみキャッシュ一貫性を保持するためのトランザクションを送る。これにより、スイッチにかかるトラフィックを大幅に削減することができ、スイッチのハードウェアコストを削減することができる。しかし、ディレクトリ方式では、ディレクトリを置くための記憶領域が大きくなると言う欠点を持つ。例えば、16プロセッサ、4GB主記憶、128B/ラインのシステムのディレクトリとしては、4GB÷128B×16bit=64MBもの記憶領域が必要になる。
ディレクトリのサイズが大きいという問題に対し、ディレクトリのサイズを削減する方法として、特許文献1、特許文献2、および、特許文献3に開示されているような、主記憶のキャッシュブロックより大きい単位ごとに、どのプロセッサにキャッシュされているかを示すディレクトリを設ける技術が知られている。
特開平09−311820号公報
特開平08−263374号公報 特開平07−200403号公報 「進化したシステム・アーキテクチャ」(SunWorld誌1996年1月号、第29頁から第32頁) "The Stanford FLASH Multiprocessor"(第21回ISCA Proceedings) Don Anderson, Tom Shanley著, "PENTUIM PROCESSOR SYSTEM ARCHITECTURE Second Edition" (MINDSHARE INC., 1995年), 第61頁から第91頁
従来技術で述べた、主記憶のキャッシュブロックより大きい単位ごとに、どのプロセッサにキャッシュされているかを示すディレクトリを設ける技術には、以下のような問題がある。例えば、キャッシュブロックのサイズが128B(バイト)とし、ディレクトリのエントリを4KB(キロバイト)のページごとに設ける場合を考える。この時、あるプロセッサが、あるページのうちのただひとつのキャッシュブロックしかキャッシュに登録していなくても、そのページに含まれる他のキャッシュブロックに対するキャッシュ一貫性保持のためのトランザクションが、そのプロセッサに向けて送られることになる。また、キャッシュに登録していたあるキャッシュブロックのキャッシュ登録を解除しても、その1キャッシュブロックのキャッシュ登録解除から、そのページに含まれるすべてのキャッシュブロックがキャッシュに登録されていないことを検出することは困難である。その結果、いったんキャッシュに登録されたページは、それ以降ずっと、そのページに対するキャッシュ一貫性保持のためのトランザクションを送られることになり、性能低下を引き起こす。
本発明の目的は、主記憶のキャッシュブロックより大きいページごとにディレクトリを設けた際に、いったんキャッシュに登録されたページが、それ以降ずっと、そのページに対するキャッシュ一貫性保持のためのトランザクションを送られる続けることを解決することにある。
上記問題を解決するため、本発明による主記憶マルチプロセッサは、第1のサイズのブロックをひとつまたは複数保持するキャッシュを有する複数のプロセッサと、主記憶と、前記主記憶の、前記第1のサイズの2以上の自然数倍である第2のサイズの各ブロック対応にエントリを有するディレクトリを有し、前記複数のプロセッサを、それぞれ0個以上のプロセッサを含む複数のプロセッサグループに分け、前記ディレクトリの各エントリは、前記プロセッサグループのそれぞれに対応するビット列を含み、前記ビット列は、対応する前記プロセッサグループに属するいずれのプロセッサの有するキャッシュにも、前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないかどうかを示し、前記ディレクトリの、指定した前記第2のサイズのブロックに対応するエントリの前記ビット列を、いずれのプロセッサグループの有するキャッシュにも、前記指定した前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないことを示すよう書き換える操作が、ひとつの命令によって開始されるようにしている。
さらに、前記プロセッサグループのひとつが、前記第2のサイズのあるブロックに属するすべての前記第1のサイズのブロックに対して、自プロセッサグループのキャッシュにのみ登録されており他プロセッサグループのキャッシュには登録されていないことを保証する操作をおこない、かつ、他プロセッサグループが前記第2のサイズの前記ブロックに属する前記第1のサイズのブロックをキャッシュに登録するための操作をおこなっていないことを検出し、前記第2のサイズの前記ブロックに対応した前記ディレクトリのエントリにおける前記ビット列において、自ノードグループに対応するビットのみを、対応する前記プロセッサグループに属する少なくともひとつのプロセッサの有するキャッシュに、前記第2のサイズのブロックに属する前記第1のサイズのブロックが少なくともひとつ登録されていることを示すように設定し、その他のビットは、対応する前記プロセッサグループに属するいずれのプロセッサの有するキャッシュにも、前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないことを示すように設定する、ディレクトリエントリ縮約装置を設けている。
本発明により、主記憶のキャッシュブロックより大きいページごとにディレクトリを設けた場合であっても、いったんキャッシュに登録されたページを、自主的な命令発行やディレクトリ縮約装置による自動検出により、ディレクトリエントリの登録から解除することが可能となる。これにより、そのページに対してキャッシュ一貫性保持のためのトランザクションが送られる続けることを解決することができる。
以下、図面を用いて本発明を実施するための最良の形態を説明する。
(1)装置の概要
図1は、本発明の一実施例による主記憶共有マルチプロセッサ999(以下、システム999)の構成を示すブロック図である。本システムは8ノードのシステムであり、ノード1ないし8、主記憶200、ディレクトリユニット300が、結合網100により相互に接続される。ノード1ないしノード8はそれぞれ線11、21、31、41、51、61、71、81を介して、主記憶200は線201を介して、ディレクトリユニット300は線400、401を介して結合網100に接続される。本実施例の結合網100はクロスバネットワークであるが、それ以外の結合方式でもよい。結合網100については公知の技術であるので、詳細な説明はおこなわない。
ノード1ないし8は同じ構造を有し、各ノードがプロセッサ10を有する。本実施例では各ノードがプロセッサを1個だけ有するが、各ノードが複数のプロセッサを有してもよく、また、各ノードの有するプロセッサの数が異なってもよい。システム999では、すべてのプロセッサが主記憶200にアクセスすることができる、いわゆる共有メモリ型の並列計算機である。
プロセッサ10は、キャッシュ12、PF(Page Flush)機構13、および、PP(Page Purge)機構14を有する。キャッシュ12は128B(バイト)のキャッシュブロック単位に管理され、キャッシュコヒーレンシ制御を、Modified(M)、Exclusive(E)、Shared(S)、Invalid(I)の4状態で管理するMESIプロトコルによって実現する。MESIプロトコルによるキャッシュコヒーレンシ制御は、例えば非特許文献3に詳しい。
ディレクトリユニット300は、受信フィルタ310、CCC(Cache Coherency Control)装置320、縮約装置330、ディレクトリ340、busy記憶領域350、および、req記憶領域360を有する。
CCC装置320は、ノードグループ表370、valid記憶領域380、および、data記憶領域390を有する。線400を介して結合網100と受信フィルタ310が、線401を介して受信フィルタ310、CCC装置320と結合網100が、線402を介して受信フィルタ310とCCC装置320が、線403を介して受信フィルタ310とbusy記憶領域350が、線404を介してCCC装置320とbusy記憶領域350が、線405を介してCCC装置320とディレクトリ340が、線406を介してCCC装置320とreq記憶領域360が、線407を介してCCC装置320と縮約装置330が、線408を介して縮約装置330とディレクトリ340が、線409を介してreq記憶領域360と縮約装置330が、それぞれ接続されている。
縮約装置330は、direction記憶領域331、page記憶領域332、node−group記憶領域333、および、カウンタ334を有する。
システム999では、ひとつまたは複数のノードをひとつのノードグループとする。ノード1ないし8は、それぞれひとつのノードグループに属する。システム999は最大4個のノードグループA、B、C、Dを扱うことができ、ノード1および2がノードグループAを、ノード3ないし5がノードグループBを、ノード6および7がノードグループCを、ノード8がノードグループDを、それぞれ形成する。ノードグループは、後述するディレクトリ340の各エントリにおいて1ビットの情報として扱われ、ディレクトリユニット300があるノードグループに対してキャッシュコヒーレンシ制御のためのコマンドを送信する際には、そのノードグループに属するすべてのノードに対して送信する。ノードとノードグループの対応関係は、ノードグループ表370に設定する。ノードグループ表370は、システム起動時に設定する。図2は、ノードグループ表370の構成を示している。ノードグループ370は、ノードグループを表す次元とノードを表す次元とからなる二次元の表であり、あるノードがあるノードグループに属する場合にその交点を1とし、そうでない部分はすべて0とした表である。例えば、ノード1はノードグループAに属するため、ノード1とノードグループAの交点は1であり、ノード1とノードグループBの交点、ノード1とノードグループCの交点、および、ノード1とノードグループDの交点は0である。
次に、図3を用いてディレクトリ340について説明する。ディレクトリ340は、ページと呼ぶ4KB(キロバイト)サイズの主記憶ブロックのそれぞれについて、当該ページ中の少なくともひとつのキャッシュブロックが、どのノードグループのキャッシュに存在している可能性があるかという情報を保持するテーブルである。ディレクトリを4KBのページ単位で管理するため、128Bのキャッシュブロック単位で管理する場合と比べて、必要な容量を128B÷4KB=1/32に抑えることができる。各ディレクトリエントリは4ビットからなり、左のビットから順に、ノードグループA、ノードグループB、ノードグループC、ノードグループDに対応する。ディレクトリエントリのあるビットが1である場合には、当該ページに属する少なくともひとつのキャッシュブロックが、そのビットに対応したノードグループに属するノードのいずれかにキャッシュされている可能性があることを示し、ディレクトリエントリのあるビットが0である場合には、当該ページに属するキャッシュブロックが、そのビットに対応したノードグループに属するノードにまったくキャッシュされていないことを示している。ディレクトリ340のすべてのビットは、システム起動時に値0に設定される。
(2)結合網を流れるコマンド
図4ないし図6を用いて、結合網を流れるコマンドを説明する。結合網を流れるコマンドは22種類ある。すなわち、Fコマンド2000、CFコマンド2010、FCコマンド2020、FIコマンド2030、CFIコマンド2040、FICコマンド2050、Iコマンド2060、CIコマンド2070、ICコマンド2080、WBコマンド2090、PFコマンド2100、CPFコマンド2110、PFCコマンド2120、PPコマンド2130、CPPコマンド2140、PPCコマンド2150、ACKコマンド2160、NACKコマンド2170、Dコマンド2180、NDコマンド2190、Mコマンド2200、MDコマンド2210の22種類である。
コマンド種別2001、2011、2021、2031、2041、2051、2061、2071、2081、2091、2101、2111、2121、2131、2141、2151、2161、2171、2181、2191、2201、2211のサイズは、それぞれ4Bである。
ノード番号2002、2032、2062、2102、2132のサイズは、それぞれ4Bである。
アドレス2003、2012、2033、2042、2063、2072、2092、2103、2112、2133、2142、2202のサイズは、それぞれ8Bである。
データ2022、2052、2093、2182、2212のサイズは、それぞれキャッシュブロックサイズの128Bである。
それぞれの機能・動作については後述する。
(3)動作の詳細
(3−1)システム起動時の動作
図7のフローチャートを用いて、システム起動時の動作を説明する。
まずステップ1700で、ノードグループ表370を、ノードグループの設定に従って設定する。続くステップ1701で、ディレクトリ340の全ビットを値0に設定する。続くステップ1702で、busy記憶領域に値0を設定する。続くステップ1703で、direction記憶領域に値0を設定する。続くステップ1704でシステム999中の全キャッシュを無効化し、システム999の起動が完了する。
(3−2)受信フィルタの動作
ディレクトリユニット300が、結合網100で送られたコマンドを線400経由で受信した場合の受信フィルタ310の動作の流れを、図8のフローチャートを用いて説明する。
まずステップ1000で、受信フィルタ310は、線400を経由して送られてきたコマンドを受信する。続くステップ1001で、受信コマンドのコマンド種別を調べる。受信コマンドがF、FI、I、PF、PPの場合は、ステップ1002に移行する。一方、受信コマンドがF、FI、I、PF、PP以外の場合は、ステップ1005に移行する。
ステップ1002でbusy記憶領域350を線403経由で読み出し、続くステップ1003で、読み出したbusy記憶領域350の値が1であるかどうかを判定する。もしbusy記憶領域350の値が1であればステップ1006に移行し、コマンド中のノード番号フィールドに示されるコマンド送信ノードに対して、NACKコマンド2170を送信した後、ステップ1000に戻る。また、もしbusy記憶領域350の値が1でなければステップ1004に移行し、線403経由でbusy記憶領域を1に設定し、コマンド中のノード番号フィールドに示されるコマンド送信ノードに対して、ACKコマンド2160を送信した後、ステップ1005に移行する。
ステップ1005では受信コマンドをCCC装置320に転送し、ステップ1000に戻る。
(3−3)プロセッサがFコマンドを発行した場合の動作
プロセッサ10が実行したデータ読み出し命令がキャッシュミスを起こした場合、当該キャッシュブロックのデータをキャッシュ12に転送し、状態Sとして登録する必要がある。そこでプロセッサ10は、Fコマンド2000のノード番号2002に自身の属するノード番号を、アドレス2003に当該キャッシュブロックのアドレスを設定して、結合網100経由で、ディレクトリユニット300に送信する。その後プロセッサ10はディレクトリユニット300から送られるACKコマンド2160またはNACKコマンド2170を待ち、NACKコマンド2170を受信した場合には、NACKコマンド2170を受信するのではなくACKコマンド2160を受信するようになるまでFコマンド2000を再送する。ACKコマンド2160を受信したプロセッサ10は、FCコマンド2020を受信するまで、後続命令の実行を停止する。
Fコマンド2000を受信したディレクトリユニットでは、受信フィルタ310が図8のフローチャートに従って動作し(前述のため省略)、ステップ2005で、受信したFコマンド2000をCCC装置320に転送する。
続くCCC装置320の動作を、図9および図10のフローチャートを用いて説明する。
まずステップ1100で、受信フィルタ310から転送されたFコマンド2000を受信する。続くステップ1101で、受信したFコマンド2000を、線406経由でreq記憶領域360に記録する。続くステップ1102で、req記憶領域360に記録したFコマンド2000のアドレス2003(reqアドレス)に対応するディレクトリエントリを読み出す。続くステップ1103で、読み出したディレクトリエントリをもとに、ノード集合に変換する。ノード集合とは、ディレクトリエントリで値1が設定されているビット群に対応したノードグループ群に属するノードの集合であり、ノードグループ表370を参照して求めることができる。例えばディレクトリエントリが値1010である場合には、ディレクトリエントリの左から1番目の値1のビットに対応するノードグループ1に属するのはノード1とノード2であり、ディレクトリエントリの左から3番目の値1のビットに対応するノードグループ3に属するのはノード6とノード7であることが、いずれもノードグループ表370から求まり、ノード集合は{ノード1、ノード2、ノード6、ノード7}である。続くステップ1106で、ノード集合から、req記憶領域360に記録したFコマンド2000のノード番号2002(reqノード)を除去する。続くステップ1106でreq記憶領域360に記録したFコマンド2000のコマンド種別2001を判定することにより、ステップ1200に移行する。
ステップ1200では、valid記憶領域380に値0を設定する。続くステップ1201で、ノード集合に要素があるかどうかを判定し、ノード集合に要素があればステップ1202に、ノード集合に要素がなければステップ1207に移行する。
ステップ1202では、ノード集合から1ノードを選択した上、選択したノードをノード集合から除去する。続くステップ1203で、アドレス2012にreqアドレスを設定した上、CFコマンド2010を選択したノードに宛てて送信する。
ここでCFコマンド2010を受信したノードは、アドレス2012が自身のキャッシュに登録されているかどうかをチェックする。もしアドレス2012が自身のキャッシュでM状態であればS状態に遷移させた上、当該キャッシュブロックのデータをデータ2182に設定し、Dコマンド2180をディレクトリユニット300に送信する。また、もしアドレス2012が自身のキャッシュでE状態であればS状態に遷移させた上、当該キャッシュブロックのデータをデータ2182に設定し、Dコマンド2180をディレクトリユニット300に送信する。また、もしアドレス2012が自身のキャッシュでS状態であれば、当該キャッシュブロックのデータをデータ2182に設定し、Dコマンド2180をディレクトリユニット300に送信する。また、もしアドレス2012が自身のキャッシュでI状態であるかキャッシュに登録されていなければ、NDコマンド2190をディレクトリユニット300に送信する。ディレクトリユニット300に送信されたDコマンド2180またはNDコマンド2190は、受信フィルタ310を経由してCCC装置320に転送される。受信フィルタ310の動作は前述したため、省略する。
ここでCCC装置320の動作に戻り、CCC装置320はステップ1204で、Dコマンド2180またはNDコマンド2190を受信する。続くステップ1205で受信したコマンドの種別を判定する。もしDコマンド2180であれば、ステップ1206に移行し、valid記憶領域380に1を設定、data記憶領域390にDコマンド2180のデータ2182を登録した上、ステップ1201に戻る。また、もしNDコマンド2190であれば、ステップ1201に戻る。
ステップ1207では、valid記憶領域380が1かどうかを判定する。もしvalid記憶領域380が1であればステップ1214に移行し、もし1でなければステップ1208に移行する。
ステップ1208では、reqアドレスを主記憶から読み出す。具体的には、reqアドレスをアドレス2202に設定した上、Mコマンド2200を主記憶200に送信する。Mコマンド2200を受信した主記憶200は、アドレス2202に対応した128Bデータをデータ2212に登録した上、MDコマンド2210をディレクトリユニット300に送信する。ディレクトリユニット300に送信されたMDコマンド2210は、受信フィルタ310を経由してCCC装置320に転送される。受信フィルタ310の動作は前述したため、省略する。
続くステップ1209で、MDコマンド2210のデータ2212をdata記憶領域390に登録する。続くステップ1210で縮約装置330に対して「非占有」を通知し、ステップ1211に移行する。
ステップ1214では、縮約装置330に対して「占有」を通知し、ステップ1211に移行する。
ステップ1211では、reqノードの属するノードグループを、ノードグループ表370を参照して求める。続くステップ1212では、reqアドレスに対応するディレクトリエントリのうち、ステップ1211で求めたノードグループに対応するビットを1に設定する。続くステップ1213では、データ2022にdata記憶領域390に登録されているデータを設定した上、reqノードに対してFCコマンド2020を送信し、ステップ1107に移行する。
ステップ1107では、busy記憶領域350に値0を設定し、ステップ1100のコマンド待機状態となる。
(3−4)プロセッサがFIコマンドを発行した場合の動作
プロセッサ10が実行したデータ書き込み命令がキャッシュミスを起こした場合、当該キャッシュブロックをキャッシュ12に転送し、状態Mとして登録する必要がある。そこでプロセッサ10は、FIコマンド2030のノード番号2032に自身の属するノード番号を、アドレス2033に当該キャッシュブロックのアドレスを設定して、結合網100経由で、ディレクトリユニット300に送信する。その後プロセッサ10はディレクトリユニット300から送られるACKコマンド2160またはNACKコマンド2170を待ち、NACKコマンド2170を受信した場合には、NACKコマンド2170を受信するのではなくACKコマンド2160を受信するようになるまでFIコマンド2030を再送する。ACKコマンド2160を受信したプロセッサ10は、FICコマンド2050を受信するまで、後続命令の実行を停止する。
FIコマンド2030を受信したディレクトリユニットでは、受信フィルタ310が図8のフローチャートに従って動作し(前述のため省略)、ステップ2005で、受信したFIコマンド2030をCCC装置320に転送する。
続くCCC装置320の動作を、図9および図11のフローチャートを用いて説明する。
まずステップ1100で、受信フィルタ310から転送されたFIコマンド2030を受信する。続くステップ1101で、受信したFIコマンド2030を、線406経由でreq記憶領域360に記録する。続くステップ1102で、req記憶領域360に記録したFIコマンド2030のアドレス2033(reqアドレス)に対応するディレクトリエントリを読み出す。続くステップ1103で、読み出したディレクトリエントリをもとに、ノード集合に変換する。続くステップ1106で、ノード集合から、req記憶領域360に記録したFIコマンド2030のノード番号2032(reqノード)を除去する。続くステップ1106でreq記憶領域360に記録したFIコマンド2030のコマンド種別2031を判定することにより、ステップ1300に移行する。
ステップ1300では、valid記憶領域380に値0を設定する。続くステップ1301で、ノード集合に要素があるかどうかを判定し、ノード集合に要素があればステップ1302に、ノード集合に要素がなければステップ1307に移行する。
ステップ1302では、ノード集合から1ノードを選択した上、選択したノードをノード集合から除去する。続くステップ1303で、アドレス2042にreqアドレスを設定した上、CFIコマンド2040を選択したノードに宛てて送信する。
ここでCFIコマンド2040を受信したノードは、アドレス2042が自身のキャッシュに登録されているかどうかをチェックする。もしアドレス2042が自身のキャッシュでM状態であればI状態に遷移させた上、当該キャッシュブロックのデータをデータ2182に設定し、Dコマンド2180をディレクトリユニット300に送信する。また、もしアドレス2042が自身のキャッシュでE状態であればI状態に遷移させた上、当該キャッシュブロックのデータをデータ2182に設定し、Dコマンド2180をディレクトリユニット300に送信する。また、もしアドレス2042が自身のキャッシュでS状態であればI状態に遷移させた上、当該キャッシュブロックのデータをデータ2182に設定し、Dコマンド2180をディレクトリユニット300に送信する。また、もしアドレス2042が自身のキャッシュでI状態であるかキャッシュに登録されていなければ、NDコマンド2190をディレクトリユニット300に送信する。ディレクトリユニット300に送信されたDコマンド2180またはNDコマンド2190は、受信フィルタ310を経由してCCC装置320に転送される。受信フィルタ310の動作は前述したため、省略する。
ここでCCC装置320の動作に戻り、CCC装置320はステップ1304で、Dコマンド2180またはNDコマンド2190を受信する。続くステップ1305で受信したコマンドの種別を判定する。もしDコマンド2180であれば、ステップ1306に移行し、valid記憶領域380に1を設定、data記憶領域390にDコマンド2180のデータ2182を登録した上、ステップ1301に戻る。また、もしNDコマンド2190であれば、ステップ1301に戻る。
ステップ1307では、valid記憶領域380が1かどうかを判定する。もしvalid記憶領域380が1であればステップ1310に移行し、もし1でなければステップ1308に移行する。
ステップ1308では、reqアドレスを主記憶から読み出す。具体的には、reqアドレスをアドレス2202に設定した上、Mコマンド2200を主記憶200に送信する。Mコマンド2200を受信した主記憶200は、アドレス2202に対応した128Bデータをデータ2212に登録した上、MDコマンド2210をディレクトリユニット300に送信する。ディレクトリユニット300に送信されたMDコマンド2210は、受信フィルタ310を経由してCCC装置320に転送される。受信フィルタ310の動作は前述したため、省略する。
続くステップ1309で、MDコマンド2210のデータ2212をdata記憶領域390に登録する。
ステップ1310では、縮約装置330に対して「占有」を通知する。続くステップ1311では、reqノードの属するノードグループを、ノードグループ表370を参照して求める。続くステップ1312では、reqアドレスに対応するディレクトリエントリのうち、ステップ1311で求めたノードグループに対応するビットを1に設定する。続くステップ1313では、データ2052にdata記憶領域390に登録されているデータを設定した上、reqノードに対してFICコマンド2050を送信し、ステップ1107に移行する。
ステップ1107では、busy記憶領域350に値0を設定し、ステップ1100のコマンド待機状態となる。
(3−5)プロセッサがIコマンドを発行した場合の動作
プロセッサ10がS状態のキャッシュブロックに対するデータ書き込み命令を実行した場合、当該キャッシュブロックを状態Mとして登録する必要がある。そこでプロセッサ10は、Iコマンド2060のノード番号2062に自身の属するノード番号を、アドレス2063に当該キャッシュブロックのアドレスを設定して、結合網100経由で、ディレクトリユニット300に送信する。その後プロセッサ10はディレクトリユニット300から送られるACKコマンド2160またはNACKコマンド2170を待ち、NACKコマンド2170を受信した場合には、NACKコマンド2170を受信するのではなくACKコマンド2160を受信するようになるまでIコマンド2060を再送する。ACKコマンド2160を受信したプロセッサ10は、ICコマンド2080を受信するまで、後続命令の実行を停止する。
Iコマンド2060を受信したディレクトリユニットでは、受信フィルタ310が図8のフローチャートに従って動作し(前述のため省略)、ステップ2005で、受信したIコマンド2060をCCC装置320に転送する。
続くCCC装置320の動作を、図9および図12のフローチャートを用いて説明する。
まずステップ1100で、受信フィルタ310から転送されたIコマンド2060を受信する。続くステップ1101で、受信したIコマンド2060を、線406経由でreq記憶領域360に記録する。続くステップ1102で、req記憶領域360に記録したIコマンド2060のアドレス2063(reqアドレス)に対応するディレクトリエントリを読み出す。続くステップ1103で、読み出したディレクトリエントリをもとに、ノード集合に変換する。続くステップ1106で、ノード集合から、req記憶領域360に記録したIコマンド2060のノード番号2062(reqノード)を除去する。続くステップ1106でreq記憶領域360に記録したIコマンド2060のコマンド種別2061を判定することにより、ステップ1400に移行する。
ステップ1400では、ノード集合に要素があるかどうかを判定し、ノード集合に要素があればステップ1401に、ノード集合に要素がなければステップ1403に移行する。
ステップ1401では、ノード集合から1ノードを選択した上、選択したノードをノード集合から除去する。続くステップ1402で、アドレス2072にreqアドレスを設定した上、CIコマンド2070を選択したノードに宛てて送信する。
ここでCIコマンド2070を受信したノードは、アドレス2072が自身のキャッシュに登録されているかどうかをチェックする。もしアドレス2072が自身のキャッシュでM状態であれば、I状態に遷移させる。また、もしアドレス2072が自身のキャッシュでE状態であれば、I状態に遷移させる。また、もしアドレス2072が自身のキャッシュでS状態であれば、I状態に遷移させる。また、もしアドレス2072が自身のキャッシュでI状態であるかキャッシュに登録されていなければ、何もしない。
ここでCCC装置320の動作に戻り、ステップ1403では、縮約装置330に対して「占有」を通知する。続くステップ1404では、reqノードの属するノードグループを、ノードグループ表370を参照して求める。続くステップ1405では、reqアドレスに対応するディレクトリエントリのうち、ステップ1404で求めたノードグループに対応するビットを1に設定する。続くステップ1406で、reqノードに対してICコマンド2080を送信し、ステップ1107に移行する。
ステップ1107では、busy記憶領域350に値0を設定し、ステップ1100のコマンド待機状態となる。
(3−6)プロセッサがWBコマンドを発行した場合の動作
プロセッサ10のキャッシュ12に登録されているM状態にあるキャッシュブロックが、S状態またはI状態に遷移する場合、および、リプレースによりキャッシュから追い出される場合、当該キャッシュブロックを主記憶200に書き戻す必要がある。そこでプロセッサ10は、WBコマンド2090のアドレス2092に当該キャッシュブロックのアドレスを、データ2093に当該キャッシュブロックのデータを設定して、結合網100経由で、主記憶200に送信する。
WBコマンド2090を受信した主記憶200は、アドレス2092にデータ2093を書き込む。
(3−7)プロセッサがPageFlush命令を実行した場合の動作
プロセッサ10は、PageFlush命令を備える。PageFlush命令は、オペランドで指定したアドレスの属する4KBページ中のすべてのキャッシュブロックを、システム999中のすべてのキャッシュからフラッシュする命令である。キャッシュブロックのフラッシュとは、そのキャッシュブロックがキャッシュに登録されている場合に、必要に応じてデータを主記憶に書き戻しながら、キャッシュへの登録を抹消する処理である。具体的には、あるアドレスが指定された場合に、そのアドレスに対応するキャッシュブロックがM状態であればデータを主記憶に書き戻すとともにI状態に遷移させ、E状態およびS状態であればI状態に遷移させることで実現される。
PageFlush命令が実行された場合、当該ページがシステム中のどのキャッシュにも登録されていないことが保証されることから、当該ページに対応するディレクトリエントリを値0000に設定する。
PageFlush命令を実行したプロセッサは、自プロセッサによる当該ページのフラッシュが完了するまで、後続命令による当該ページへのアクセスを停止する。本実施例では、PFCコマンド2120を受信するまで、すべての後続命令を停止している。また、他のプロセッサがPageFlush命令を実行した場合には、自プロセッサによる当該ページのフラッシュが完了するまで、後続命令による当該ページへのアクセスを停止する。本実施例では、すべての後続命令を停止している。
図15を用いて、PageFlush命令を実行したプロセッサ10におけるPF機構13の動作を説明する。
まずステップ3000で、PF機構13はPageFlush命令の実行を検知する。続くステップ3001で、PFコマンド2100のノード番号2102に自身の属するノード番号を、アドレス2103にPageFlush命令のオペランドで指定されたアドレスを設定して、結合網100経由で、ディレクトリユニット300に送信する。その後プロセッサ10はディレクトリユニット300から送られるACKコマンド2160またはNACKコマンド2170を待ち、NACKコマンド2170を受信した場合には、NACKコマンド2170を受信するのではなくACKコマンド2160を受信するようになるまでPFコマンド2100を再送する。ACKコマンド2160を受信したプロセッサ10は、PFCコマンド2120を受信するまで、後続命令の実行を停止する。
続くステップ3002で、PageFlush命令のオペランドで指定されたアドレスから、対象ページの先頭アドレスを算出する。オペランドで指定されたアドレスをOAとすると、対象ページの先頭アドレスは、OA−(OA mod 4096)で算出される。ここで(OA mod 4096)とは、OAを4096で割った時の剰余である。
続くステップ3003で、ステップ3002で算出した対象ページの先頭アドレスを変数iに代入する。続くステップ3004で、アドレスiのキャッシュブロックをフラッシュする。続くステップ3005で、値i+128を変数iに代入する。続くステップ3006で値iが先頭アドレス+4096より小さいかどうかを判定し、もし小さければステップ3004に、もし小さくなければステップ3007に移行する。
ステップ3007ではPFCコマンド2120を受信し、終了する。
続いて、PFコマンド2100を受信した場合のCCC装置320の動作を、図9および図13のフローチャートを用いて説明する。
まずステップ1100で、受信フィルタ310から転送されたPFコマンド2100を受信する。続くステップ1101で、受信したPFコマンド2100を、線406経由でreq記憶領域360に記録する。続くステップ1102で、req記憶領域360に記録したPFコマンド2100のアドレス2103(reqアドレス)に対応するディレクトリエントリを読み出す。続くステップ1103で、読み出したディレクトリエントリをもとに、ノード集合に変換する。続くステップ1106で、ノード集合から、req記憶領域360に記録したPPコマンド2100のノード番号2102(reqノード)を除去する。続くステップ1106でreq記憶領域360に記録したPFコマンド2100のコマンド種別2101を判定することにより、ステップ1500に移行する。
ステップ1500では、ノード集合に要素があるかどうかを判定し、ノード集合に要素があればステップ1501に、ノード集合に要素がなければステップ1503に移行する。
ステップ1501では、ノード集合から1ノードを選択した上、選択したノードをノード集合から除去する。続くステップ1502で、アドレス2112にreqアドレスを設定した上、CPFコマンド2110を選択したノードに宛てて送信する。
ステップ1503では、reqアドレスに対応するディレクトリエントリの全ビットを0(0000)に設定する。続くステップ1504で、reqノードに対してPFCコマンド2120を送信し、ステップ1107に移行する。
ステップ1107では、busy記憶領域350に値0を設定し、ステップ1100のコマンド待機状態となる。
CPFコマンド2110を受信したノードは、プロセッサ10のPF機構13にそのCFPコマンド2110を転送する。CPFコマンド2110を受信したPF機構13の動作を、図16のフローチャートを用いて説明する。
まずステップ3100で、PF機構13はCPFコマンド2110を受信する。続くステップ3101で、CPFコマンド2110のアドレス2112から、対象ページの先頭アドレスを算出する。対象ページの先頭アドレスは、アドレス2112−(アドレス2112 mod 4096)で算出される。ここで(アドレス2112 mod 4096)とは、アドレス2112を4096で割った時の剰余である。
続くステップ3102で、ステップ3101で算出した対象ページの先頭アドレスを変数iに代入する。続くステップ3103で、アドレスiのキャッシュブロックをフラッシュする。続くステップ3104で、値i+128を変数iに代入する。続くステップ3105で値iが先頭アドレス+4096より小さいかどうかを判定し、もし小さければステップ3103に、もし小さくなければ終了する。
(3−8)プロセッサがPagePurge命令を実行した場合の動作
プロセッサ10は、PagePurge命令を備える。PagePurge命令は、オペランドで指定したアドレスの属する4KBページ中のすべてのキャッシュブロックを、システム999中のすべてのキャッシュからパージする命令である。キャッシュブロックのパージとは、そのキャッシュブロックがキャッシュに登録されている場合に、データを主記憶に書き戻すことなく、キャッシュへの登録を抹消する処理である。具体的には、あるアドレスが指定された場合に、そのアドレスに対応するキャッシュブロックがM状態、E状態およびS状態であれば、I状態に遷移させることで実現される。フラッシュとは異なり、M状態であってもデータを主記憶に書き戻さない。
PagePurge命令が実行された場合、当該ページがシステム中のどのキャッシュにも登録されていないことが保証されることから、当該ページに対応するディレクトリエントリを値0000に設定する。
PagePurge命令を実行したプロセッサは、自プロセッサによる当該ページのパージが完了するまで、後続命令による当該ページへのアクセスを停止する。本実施例では、PPCコマンド2120を受信するまで、すべての後続命令を停止している。また、他のプロセッサがPagePurge命令を実行した場合には、自プロセッサによる当該ページのパージが完了するまで、後続命令による当該ページへのアクセスを停止する。本実施例では、すべての後続命令を停止している。
図17を用いて、PagePurge命令を実行したプロセッサ10におけるPP機構14の動作を説明する。
まずステップ3200で、PP機構14はPagePurge命令の実行を検知する。続くステップ3201で、PPコマンド2130のノード番号2132に自身の属するノード番号を、アドレス2133にPagePurge命令のオペランドで指定されたアドレスを設定して、結合網100経由で、ディレクトリユニット300に送信する。その後プロセッサ10はディレクトリユニット300から送られるACKコマンド2160またはNACKコマンド2170を待ち、NACKコマンド2170を受信した場合には、NACKコマンド2170を受信するのではなくACKコマンド2160を受信するようになるまでPPコマンド2130を再送する。ACKコマンド2160を受信したプロセッサ10は、PPCコマンド2150を受信するまで、後続命令の実行を停止する。
続くステップ3202で、PagePurge命令のオペランドで指定されたアドレスから、対象ページの先頭アドレスを算出する。オペランドで指定されたアドレスをOAとすると、対象ページの先頭アドレスは、OA−(OA mod 4096)で算出される。ここで(OA mod 4096)とは、OAを4096で割った時の剰余である。
続くステップ3203で、ステップ3202で算出した対象ページの先頭アドレスを変数iに代入する。続くステップ3204で、アドレスiのキャッシュブロックをパージする。続くステップ3205で、値i+128を変数iに代入する。続くステップ3206で値iが先頭アドレス+4096より小さいかどうかを判定し、もし小さければステップ3204に、もし小さくなければステップ3207に移行する。
ステップ3207ではPPCコマンド2150を受信し、終了する。
続いて、PPコマンド2130を受信した場合のCCC装置320の動作を、図9および図14のフローチャートを用いて説明する。
まずステップ1100で、受信フィルタ310から転送されたPPコマンド2130を受信する。続くステップ1101で、受信したPPコマンド2130を、線406経由でreq記憶領域360に記録する。続くステップ1102で、req記憶領域360に記録したPPコマンド2130のアドレス2133(reqアドレス)に対応するディレクトリエントリを読み出す。続くステップ1103で、読み出したディレクトリエントリをもとに、ノード集合に変換する。続くステップ1106で、ノード集合から、req記憶領域360に記録したPFコマンド2130のノード番号2132(reqノード)を除去する。続くステップ1106でreq記憶領域360に記録したPPコマンド2130のコマンド種別2131を判定することにより、ステップ1600に移行する。
ステップ1600では、ノード集合に要素があるかどうかを判定し、ノード集合に要素があればステップ1601に、ノード集合に要素がなければステップ1603に移行する。
ステップ1601では、ノード集合から1ノードを選択した上、選択したノードをノード集合から除去する。続くステップ1602で、アドレス2142にreqアドレスを設定した上、CPPコマンド2140を選択したノードに宛てて送信する。
ステップ1603では、reqアドレスに対応するディレクトリエントリの全ビットを0(0000)に設定する。続くステップ1604で、reqノードに対してPPCコマンド2150を送信し、ステップ1107に移行する。
ステップ1107では、busy記憶領域350に値0を設定し、ステップ1100のコマンド待機状態となる。
CPPコマンド2140を受信したノードは、プロセッサ10のPP機構14にそのCPPコマンド2140を転送する。CPPコマンド2140を受信したPP機構14の動作を、図18のフローチャートを用いて説明する。
まずステップ3300で、PP機構14はCPPコマンド2140を受信する。続くステップ3301で、CPPコマンド2140のアドレス2142から、対象ページの先頭アドレスを算出する。対象ページの先頭アドレスは、アドレス2142−(アドレス2142 mod 4096)で算出される。ここで(アドレス2142 mod 4096)とは、アドレス2142を4096で割った時の剰余である。
続くステップ3302で、ステップ3301で算出した対象ページの先頭アドレスを変数iに代入する。続くステップ3303で、アドレスiのキャッシュブロックをフラッシュする。続くステップ3304で、値i+128を変数iに代入する。続くステップ3305で値iが先頭アドレス+4096より小さいかどうかを判定し、もし小さければステップ3303に、もし小さくなければ終了する。
(3−9)縮約装置の動作
縮約装置330は、あるひとつのノードグループが、あるページに属するすべてのキャッシュブロックに対して自ノードグループにのみキャッシュされており他のノードグループにはキャッシュされていないことを保証できる操作をおこない、かつ、他ノードグループが当該ページに属するキャッシュブロックをキャッシュするための操作をおこなっていないことを検出し、当該ページに対応したディレクトリエントリにおいて、自ノードグループに対応するビットのみ1を設定し、残りの3ビットには0を設定する装置である。圧縮装置330により、PageFlush命令やPagePurge命令を発行せずとも、ディレクトリ中の値1のビットを減らすことが可能となり、キャッシュ一貫性を保持するためのトランザクションを減らすことができる。
図19のフローチャートを用いて、縮約装置330の動作を説明する。
まずステップ3400で、CCC装置320より、「占有」または「非占有」を受信する。「占有」とは、req記憶領域360に記憶されているコマンドにより、コマンド発行対象アドレス(reqアドレス)のキャッシュブロックが、コマンドを発行したノード(reqノード)にのみキャッシュされ、他ノードにはキャッシュされていない状態にあることを意味し、「非占有」とはそうでないことを意味する。
次にステップ3401で、reqアドレスの属するページ番号を算出する。このページ番号は、(reqアドレス−(reqアドレス mod 4096))÷4096で算出される。ここで(reqアドレス mod 4096)とは、reqアドレスを4096で割った時の剰余である。
続くステップ3402で、ノードグループ表370を参照し、reqノードの属するノードグループを算出する。
続くステップ3403で、期待アドレスを算出する。期待アドレスは、direction記憶領域331が0の場合は0とし、また、direciton記憶領域が“+”の場合は(reqアドレス−(reqアドレス mod 4096))+(カウンタ334)×128とし、また、direciton記憶領域が“−”の場合は(reqアドレス−(reqアドレス mod 4096))+3968−(カウンタ334)×128とする。
続くステップ3404で、reqアドレスがページの先頭または末尾のいずれかであるかどうかを算出する。具体的には、(reqアドレス mod 4096)が0以上127以下であればページの先頭であり、3968以上4095以下であればページの末尾である。
続くステップ3405では、ステップ3400で得た「占有」または「非占有」の種別、ステップ3401で得たページ番号がpage記憶領域332の値と一致しているかどうかという情報、ステップ3402で得たノードグループがnode−group記憶領域333の値と一致しているかどうかという情報、ステップ3403で得た期待アドレスがreqアドレスと一致しているかどうかという情報、および、ステップ3404で得たreqアドレスがページの先頭または末尾であるかどうかという情報を用い、図20に示したテーブルに基づいて動作を選択する。すなわち、列3500ないし3504を検索キーとして、列3505の動作を選択する。列3505の動作のうち、N/Aとは、列3500ないし3504の組み合わせとしてあり得ないことを意味している。
続くステップ3406では、ステップ3405で選択した動作を実行する。ステップ3405で選択した動作が「縮約」であれば、page記憶領域332に対応したディレクトリエントリにおいて、node−group記憶領域333に対応するビットのみ1を設定、残りの3ビットには0を設定した上、direction記憶領域に0を設定する。また、ステップ3405で選択した動作が「カウントアップ」であれば、カウンタ334の値を1だけ増やす。また、ステップ3406で選択した動作が「開始」であれば、reqアドレスがページ先頭ならdirection記憶領域331を“+”に、reqアドレスがページ末尾ならdirection記憶領域331を“−”に設定した上、さらに、page記憶領域332にはステップ3401で得たページ番号を、node−group記憶領域333にはステップ3402で得たノードグループを、カウンタ334には値1を、それぞれ設定する。また、ステップ3405で選択した動作が「NOP」であれば、何もしない。
ステップ3406実行後、縮約装置330は動作を終了する。
本発明の実施例による主記憶共有マルチプロセッサの概略構成図である。 ノードグループ表の構成を示す図である。 ディレクトリの構成を示す図である。 結合網を流れるコマンドのフォーマット一覧の一部を示す図である。 結合網を流れるコマンドのフォーマット一覧の一部を示す図である。 結合網を流れるコマンドのフォーマット一覧の一部を示す図である。 システム起動時のシステムの処理の流れを説明するフローチャートである。 受信フィルタの処理の流れを説明するフローチャートである。 CCC装置の処理の流れを説明するフローチャートの一部である。 CCC装置の処理の流れを説明するフローチャートの一部である。 CCC装置の処理の流れを説明するフローチャートの一部である。 CCC装置の処理の流れを説明するフローチャートの一部である。 CCC装置の処理の流れを説明するフローチャートの一部である。 CCC装置の処理の流れを説明するフローチャートの一部である。 PageFlush命令に対するPF機構の処理の流れを説明するフローチャートである。 PFコマンド受信時のPF機構の処理の流れを説明するフローチャートである。 PagePurge命令に対するPP機構の処理の流れを説明するフローチャートである。 PPコマンド受信時のPP機構の処理の流れを説明するフローチャートである。 縮約装置の処理の流れを説明するフローチャートである。 縮約装置における動作を選択するためのテーブルである。
符号の説明
1〜8 ノード
10 プロセッサ
13 PF(Page Flush)機構
14 PP(Page Purge)機構
100 結合網
200 主記憶
300 ディレクトリユニット
310 受信フィルタ
320 CCC(Cache Coherecy Control)装置
330 縮約装置
331 direction記憶領域
332 page記憶領域
333 node−group記憶領域
334 カウンタ
340 ディレクトリ
350 busy記憶領域
360 req記憶領域
370 ノードグループ表
380 valid記憶領域
390 data記憶領域
999 主記憶共有マルチプロセッサ

Claims (10)

  1. 第1のサイズのブロックをひとつまたは複数保持するキャッシュを有するプロセッサにおいて、
    前記第1のサイズの2以上の自然数倍である第2のサイズのブロックを指定し、指定した前記第2のサイズのブロックに属するすべての前記第1のサイズのブロックについて、前記キャッシュへの登録を抹消する操作が可能なことを特徴とするプロセッサ。
  2. 第1のサイズのブロックをひとつまたは複数保持するキャッシュを有するプロセッサにおいて、
    前記第1のサイズの2以上の自然数倍である第2のサイズのブロックを指定し、指定した前記第2のサイズのブロックに属するすべての前記第1のサイズのブロックについて、前記キャッシュへの登録を抹消する操作が、ひとつの命令によって開始されることを特徴とするプロセッサ。
  3. 指定した前記第2のサイズのブロックに属するすべての前記第1のサイズのブロックについて、前記キャッシュへの登録を抹消する前記操作が、前記キャッシュに登録されていた前記第1のサイズのブロックのうち、ひとつまたは複数をプロセッサ外部に出力することを特徴とする請求項1または請求項2記載のプロセッサ。
  4. 指定した前記第2のサイズのブロックに属するすべての前記第1のサイズのブロックについて、前記キャッシュへの登録を抹消する前記操作が、他のプロセッサに対して、前記指定した前記第2のサイズのブロックに属するすべての前記第1のサイズのブロックについて、キャッシュへの登録を抹消する操作を要求することを特徴とする請求項1ないし請求項3記載のいずれかのプロセッサ。
  5. 複数の請求項4記載のプロセッサと主記憶とを有し、
    前記複数のプロセッサが前記主記憶を共有することを特徴とする主記憶共有マルチプロセッサ。
  6. 前記主記憶の前記第2のサイズの各ブロック対応にエントリを有するディレクトリを有し、
    前記複数のプロセッサを、それぞれ0個以上のプロセッサを含む複数のプロセッサグループに分け、
    前記ディレクトリの各エントリは、前記プロセッサグループのそれぞれに対応するビット列を含み、
    前記ビット列は、対応する前記プロセッサグループに属するいずれのプロセッサの有するキャッシュにも、前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないかどうかを示し、
    指定した前記第2のサイズのブロックに属するすべての前記第1のサイズのブロックについて、前記キャッシュへの登録を抹消する前記操作をおこなう際に、
    前記指定した前記第2のサイズのブロックに対応する前記ディレクトリのエントリの前記ビット列を、いずれのプロセッサの有するキャッシュにも前記指定した第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないことを示すよう書き換えることを特徴とする請求項5記載の主記憶共有マルチプロセッサ。
  7. 第1のサイズのブロックをひとつまたは複数保持するキャッシュを有する複数のプロセッサと、主記憶と、
    前記主記憶の、前記第1のサイズの2以上の自然数倍である第2のサイズの各ブロック対応にエントリを有するディレクトリとを有し、
    前記複数のプロセッサを、それぞれ0個以上のプロセッサを含む複数のプロセッサグループに分け、
    前記ディレクトリの各エントリは、前記プロセッサグループのそれぞれに対応するビット列を含み、
    前記ビット列は、対応する前記プロセッサグループに属するいずれのプロセッサの有するキャッシュにも、前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないかどうかを示し、
    前記ディレクトリの、指定した前記第2のサイズのブロックに対応するエントリの前記ビット列を、いずれのプロセッサグループの有するキャッシュにも、前記指定した前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないことを示すよう書き換える操作が、ひとつの命令によって開始されることを特徴とする主記憶共有マルチプロセッサ。
  8. 第1のサイズのブロックをひとつまたは複数保持するキャッシュを有する複数のプロセッサと、主記憶と、
    前記主記憶の、前記第1のサイズの2以上の自然数倍である第2のサイズの各ブロック対応にエントリを有するディレクトリと、
    ディレクトリエントリ縮約装置とを有し、
    前記複数のプロセッサを、それぞれ0個以上のプロセッサを含む複数のプロセッサグループに分け、
    前記ディレクトリの各エントリは、前記プロセッサグループのそれぞれに対応するビット列を含み、
    前記ビット列は、対応する前記プロセッサグループに属するいずれのプロセッサの有するキャッシュにも、前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないかどうかを示し、
    前記ディレクトリエントリ縮約装置は、
    前記プロセッサグループのひとつが、前記第2のサイズのあるブロックに属するすべての前記第1のサイズのブロックに対して、自プロセッサグループのキャッシュにのみ登録されており他プロセッサグループのキャッシュには登録されていないことを保証する操作をおこない、かつ、他プロセッサグループが前記第2のサイズの前記ブロックに属する前記第1のサイズのブロックをキャッシュに登録するための操作をおこなっていないことを検出し、
    前記第2のサイズの前記ブロックに対応した前記ディレクトリのエントリにおける前記ビット列において、
    自ノードグループに対応するビットのみを、対応する前記プロセッサグループに属する少なくともひとつのプロセッサの有するキャッシュに、前記第2のサイズのブロックに属する前記第1のサイズのブロックが少なくともひとつ登録されていることを示すように設定し、
    その他のビットは、対応する前記プロセッサグループに属するいずれのプロセッサの有するキャッシュにも、前記第2のサイズのブロックに属する前記第1のサイズのブロックが登録されていないことを示すように設定することを特徴とする主記憶共有マルチプロセッサ。
  9. 前記ディレクトリエントリ縮約装置はカウンタを有し、
    前記カウンタは、前記プロセッサグループのひとつが、前記第2のサイズのあるブロックに属する、最もアドレスの小さい前記第1のサイズのブロックか、最もアドレスの大きい前記第1のサイズのブロックに対して、自プロセッサグループのキャッシュにのみ登録されており他のプロセッサグループのキャッシュには登録されていないことを保証する操作がおこなわれた際に初期値が設定され、
    前記プロセッサグループのひとつが、前記第2のサイズのあるブロックに属するすべての前記第1のサイズのブロックに対して、自プロセッサグループのキャッシュにのみ登録されており他のプロセッサグループのキャッシュには登録されていないことを保証する操作をおこない、かつ、他プロセッサグループが前記第2のサイズの前記ブロックに属する前記第1のサイズのブロックをキャッシュするための操作をおこなっていないことを、
    前記カウンタを用いた計数によりおこなうことを特徴とする主記憶共有マルチプロセッサ。
  10. 前記プロセッサが、すべて請求項4記載のプロセッサであることを特徴とする、
    請求項8または請求項9記載の主記憶共有マルチプロセッサ。
JP2004060149A 2004-03-04 2004-03-04 プロセッサおよび主記憶共有マルチプロセッサ Pending JP2005250830A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004060149A JP2005250830A (ja) 2004-03-04 2004-03-04 プロセッサおよび主記憶共有マルチプロセッサ
US11/065,259 US20050198438A1 (en) 2004-03-04 2005-02-25 Shared-memory multiprocessor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004060149A JP2005250830A (ja) 2004-03-04 2004-03-04 プロセッサおよび主記憶共有マルチプロセッサ

Publications (1)

Publication Number Publication Date
JP2005250830A true JP2005250830A (ja) 2005-09-15

Family

ID=34909192

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004060149A Pending JP2005250830A (ja) 2004-03-04 2004-03-04 プロセッサおよび主記憶共有マルチプロセッサ

Country Status (2)

Country Link
US (1) US20050198438A1 (ja)
JP (1) JP2005250830A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006202215A (ja) * 2005-01-24 2006-08-03 Fujitsu Ltd メモリ制御装置及び制御方法
JP2017151856A (ja) * 2016-02-26 2017-08-31 富士通株式会社 演算処理装置、情報処理装置および情報処理装置の制御方法

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100375067C (zh) * 2005-10-28 2008-03-12 中国人民解放军国防科学技术大学 异构多核微处理器局部空间共享存储方法
JP2007148709A (ja) * 2005-11-28 2007-06-14 Hitachi Ltd プロセッサシステム
US9529724B2 (en) 2012-07-06 2016-12-27 Seagate Technology Llc Layered architecture for hybrid controller
US9785564B2 (en) * 2013-08-20 2017-10-10 Seagate Technology Llc Hybrid memory with associative cache
CN104753814B (zh) * 2013-12-31 2018-04-06 国家计算机网络与信息安全管理中心 基于网卡的报文分流处理方法

Citations (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56169279A (en) * 1980-05-29 1981-12-25 Nippon Telegr & Teleph Corp <Ntt> Data processing system
JPH01108650A (ja) * 1987-10-02 1989-04-25 Sun Microsyst Inc ワークステーシヨン
JPH03129454A (ja) * 1989-06-22 1991-06-03 Kendall Square Res Corp マルチプロセッサシステム
JPH03214245A (ja) * 1990-01-18 1991-09-19 Matsushita Electric Ind Co Ltd キャッシュ・メモリ装置
JPH04306750A (ja) * 1991-04-03 1992-10-29 Agency Of Ind Science & Technol マルチプロセッサシステム
JPH06259384A (ja) * 1993-03-02 1994-09-16 Toshiba Corp マルチプロセッサ
JPH07160581A (ja) * 1993-12-09 1995-06-23 Nec Corp キャッシュ一致処理制御装置
JPH07200403A (ja) * 1993-12-29 1995-08-04 Toshiba Corp マルチプロセッサシステム
JPH07210526A (ja) * 1994-01-20 1995-08-11 Hitachi Ltd 並列計算機
JPH08263374A (ja) * 1995-03-20 1996-10-11 Hitachi Ltd キャッシュ制御方法およびそれを用いたマルチプロセッサシステム
JPH0962522A (ja) * 1995-08-21 1997-03-07 Canon Inc 情報処理方法及び情報処理システム
JPH09311820A (ja) * 1996-03-19 1997-12-02 Hitachi Ltd マルチプロセッサシステム
JPH10240707A (ja) * 1997-02-27 1998-09-11 Hitachi Ltd 主記憶共有型マルチプロセッサ
JPH10307754A (ja) * 1997-04-14 1998-11-17 Internatl Business Mach Corp <Ibm> システム・バスに対するキャッシュ操作の要求ベースの発行方法及び装置
JPH10333986A (ja) * 1997-04-14 1998-12-18 Internatl Business Mach Corp <Ibm> プロセス・バスに対するキャッシュ操作の要求ベースの発行方法及び装置
JP2000076205A (ja) * 1998-08-28 2000-03-14 Hitachi Ltd マルチプロセッサ
JP2000235558A (ja) * 1999-02-16 2000-08-29 Hitachi Ltd 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
JP2005234854A (ja) * 2004-02-19 2005-09-02 Hitachi Ltd マルチプロセッサシステム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6038644A (en) * 1996-03-19 2000-03-14 Hitachi, Ltd. Multiprocessor system with partial broadcast capability of a cache coherent processing request

Patent Citations (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56169279A (en) * 1980-05-29 1981-12-25 Nippon Telegr & Teleph Corp <Ntt> Data processing system
JPH01108650A (ja) * 1987-10-02 1989-04-25 Sun Microsyst Inc ワークステーシヨン
JPH03129454A (ja) * 1989-06-22 1991-06-03 Kendall Square Res Corp マルチプロセッサシステム
JPH03214245A (ja) * 1990-01-18 1991-09-19 Matsushita Electric Ind Co Ltd キャッシュ・メモリ装置
JPH04306750A (ja) * 1991-04-03 1992-10-29 Agency Of Ind Science & Technol マルチプロセッサシステム
JPH06259384A (ja) * 1993-03-02 1994-09-16 Toshiba Corp マルチプロセッサ
JPH07160581A (ja) * 1993-12-09 1995-06-23 Nec Corp キャッシュ一致処理制御装置
JPH07200403A (ja) * 1993-12-29 1995-08-04 Toshiba Corp マルチプロセッサシステム
JPH07210526A (ja) * 1994-01-20 1995-08-11 Hitachi Ltd 並列計算機
JPH08263374A (ja) * 1995-03-20 1996-10-11 Hitachi Ltd キャッシュ制御方法およびそれを用いたマルチプロセッサシステム
JPH0962522A (ja) * 1995-08-21 1997-03-07 Canon Inc 情報処理方法及び情報処理システム
JPH09311820A (ja) * 1996-03-19 1997-12-02 Hitachi Ltd マルチプロセッサシステム
JPH10240707A (ja) * 1997-02-27 1998-09-11 Hitachi Ltd 主記憶共有型マルチプロセッサ
JPH10307754A (ja) * 1997-04-14 1998-11-17 Internatl Business Mach Corp <Ibm> システム・バスに対するキャッシュ操作の要求ベースの発行方法及び装置
JPH10333986A (ja) * 1997-04-14 1998-12-18 Internatl Business Mach Corp <Ibm> プロセス・バスに対するキャッシュ操作の要求ベースの発行方法及び装置
JP2000076205A (ja) * 1998-08-28 2000-03-14 Hitachi Ltd マルチプロセッサ
JP2000235558A (ja) * 1999-02-16 2000-08-29 Hitachi Ltd 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
JP2005234854A (ja) * 2004-02-19 2005-09-02 Hitachi Ltd マルチプロセッサシステム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006202215A (ja) * 2005-01-24 2006-08-03 Fujitsu Ltd メモリ制御装置及び制御方法
JP2017151856A (ja) * 2016-02-26 2017-08-31 富士通株式会社 演算処理装置、情報処理装置および情報処理装置の制御方法

Also Published As

Publication number Publication date
US20050198438A1 (en) 2005-09-08

Similar Documents

Publication Publication Date Title
KR102661543B1 (ko) 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅
US8103835B2 (en) Low-cost cache coherency for accelerators
US5749095A (en) Multiprocessing system configured to perform efficient write operations
US8423715B2 (en) Memory management among levels of cache in a memory hierarchy
KR100318104B1 (ko) 공유 인터벤션을 지원하는 비균등 메모리접근 데이터처리시스템
JP4119380B2 (ja) マルチプロセッサシステム
JP3281893B2 (ja) キャッシュ・メモリ階層内で利用するキャッシュ・コヒーレンシ機構を実施するための方法およびシステム
US7913048B2 (en) Data subscribe-and-publish mechanisms and methods for producer-consumer pre-fetch communications
US20030126365A1 (en) Transfer of cache lines on-chip between processing cores in a multi-core system
JP3661764B2 (ja) 不均等メモリ・アクセス・コンピュータ・システムにおいてエヴィクション・プロトコルを提供するための方法およびシステム
US20070005899A1 (en) Processing multicore evictions in a CMP multiprocessor
JPH11306081A (ja) キャッシュフラッシュ装置
JPH10154100A (ja) 情報処理システム及び装置及びその制御方法
JP2004054931A (ja) 分散メモリマルチプロセッサシステムにおけるメモリ移行のためのシステムおよび方法
US20050198438A1 (en) Shared-memory multiprocessor
JP2004199677A (ja) キャッシュを動作させるためのシステム及び方法
KR20180109675A (ko) 저장된 교체 정보를 갖는 스누프 필터, 이에 대한 방법 및 희생자 전용 캐시와 스누프 필터 공유 교체 정책을 포함하는 시스템
JPH09179779A (ja) コンピュータシステムおよびデータ転送方法
KR100380674B1 (ko) 멀티프로세서 시스템에서의 기록-통과 기억 동작동안 캐시코히어런스를 유지하는 방법 및 시스템
CN116414563A (zh) 内存控制装置、缓存一致性系统和缓存一致性方法
US6813694B2 (en) Local invalidation buses for a highly scalable shared cache memory hierarchy
US7073004B2 (en) Method and data processing system for microprocessor communication in a cluster-based multi-processor network
US6826654B2 (en) Cache invalidation bus for a highly scalable shared cache memory hierarchy
US20040030950A1 (en) Apparatus for imprecisely tracking cache line inclusivity of a higher level cache
JP4091171B2 (ja) キャッシュフラッシュ方法および装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061204

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20061204

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100309

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100727