説明

アクセラレータ用低コストのキャッシュ一貫性を維持するシステム

【課題】アクセラレータとCPUとの一貫性を維持しながら通信によるノード間の帯域幅の消費を低減する。
【解決手段】CPU210およびアクセラレータ220はマルチプロセッシング環境において個別のノードにクラスターできる。共有メモリ・デバイス212、222を収容する各ノード0、1は、他のノードでキャッシュされたかもしれない共有メモリのブロックを追跡するディレクトリを維持できる。そのため、コマンドとアドレスは、メモリ位置があるノード以外でキャッシュされたときに限り、他のノードのプロセッサおよびアクセラレータに送信できる。加えて、アクセラレータは一般的にCPUと同じデータにはアクセスしないため、最初の読み出し、書き込み、および同期の操作のみを他のノードに送信できる。データへの中間アクセスは一貫性を保たないで行える。その結果、一貫性を維持するために消費するチップ間の帯域幅を低減できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般的にマルチプロセッサに関係する。さらに具体的には、本発明は、同じチップもしくは異なるチップ上にあるアクセラレータとCPU間の一貫性(coherence)を維持しながら通信による帯域幅の消費を低減することに関係する。
【背景技術】
【0002】
初期のコンピュータ・システムは、単一の中央処理装置(CPU)と、CPUの関連メモリ、入出力(I/O)デバイス、およびディスク・ドライブ、光学ストレージ、磁気テープ・ドライブ、およびその種の他のものなどの大容量ストレージ・システムを有していた。
【0003】
しかし、単一のプロセッサの容量を超える処理能力に対する要求が高まり、プロセッサに対する要求から増え続ける負担を緩和する多数のソリューションがでてきている。当該ソリューションの1つが、CPUに連結してアクセラレータを使用することである。アクセラレータはプログラム可能である、または特定の機能を行う独立型である。このような機能の実行の要求をCPUが受けると、機能の実行はアクセラレータに委譲することができる。アクセラレータは割り当てられるタスクを処理する一方で、CPUは別のタスクを処理できるので、CPUに対する負担が減り、効率が高まる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
図1は、インターコネクト・バス120でアクセラレータ110に連結された例示的なCPU100を表す。CPU100はメモリ・デバイス102に接続できる。メモリ・デバイス102は、例えば、ダイナミック・ランダム・アクセス・メモリ(DRAM)デバイスである。加えて、CPU100は処理するデータに高速アクセスしやすくするローカル・キャッシュ・メモリ101を含んでもよい。アクセラレータ110はインターコネクト・バス120でCPUに接続して、特定の機能を行うことができる。例えば、アクセラレータ110は、特殊な座標演算および変換を行うグラフィックス・アクセラレータである。アクセラレータは独自のメモリ112およびキャッシュ111をもつこともある。
【0005】
画像を処理する要求をCPU100が受け取ると、アクセラレータ110に画像データを処理するタスクを委譲できる。例えば、メモリ102に収容されるブロック1には処理の必要な画像データを入れることができる。処理要求がCPUに送られると、ブロック1はアクセラレータによる処理のためにキャッシュ111(またはアクセラレータのメモリ112)に転送できる。ブロック1の処理が完了すると、アクセラレータによってメモリ102にライトバックできる。
【0006】
先行技術に伴う問題の1つに、アクセラレータとCPUがメモリの一貫性なく接続されることがある。プロセッサとアクセラレータはメモリ102および112に入れられたデータを共有できるため、共有データで作業するときにはアクセラレータとCPU間での協調が必要である。アクセラレータとCPUが同じメモリ位置でアドレス割り当てされる異なるデータに絶対にアクセスしないように一貫性が求められる。例えば、図1では、CPUは、ブロック1が処理のためにアクセラレータ110に送られた後で、ブロック1を処理する要求を受け取ることができる。新たな要求が画像処理の要求ではない場合、CPUは処理のためにブロック1をキャッシュできる。CPUがブロックを処理する前にアクセラレータがそのブロックの処理を完了すると、CPUがキャッシュしたデータは古いものになる。そのため、CPUは正しくないデータを処理することになる。メモリ一貫性は、最も最近に変更されたデータのコピーをすべての処理デバイスに使えるようにすることを要求する。
【0007】
この問題の1つのソリューションが、キャッシュの古いデータを更新するスヌープ・プロトコルを実装することである。各プロセッサに発行されるアドレスとコマンドは、他のすべてのプロセッサおよびアクセラレータもしくは他のすべてのプロセッサまたはアクセラレータに送信できる。バス・モニタを使用して、メモリ・アクセスのためのアドレスラインを監視できる。キャッシュにバスでアドレス割り当てされるメモリ・ブロックのコピーが収容される場合、キャッシュはそのメモリ・ブロックのコピーを更新できる。例えば、図1では、バス・モニタはバス120を監視できる。キャッシュ101にブロック1のコピーが収容されるときに、アクセラレータ110により書き込み操作をキャッシュ101が検出した場合、キャッシュ101は独自のブロック1のコピーを更新して、CPUによる処理のために最新かつ正確なブロック1のコピーを収容できる。
【0008】
他の実施例では、キャッシュ101はメモリ102でのブロック1へのメモリ書き込みの検出に応答して、そのブロック1のコピーを無効にできる。そのため、CPUがキャッシュからブロック1へのアクセスを試みると、ブロック1の最新のコピーをメモリから検索できる。
【0009】
しかし、複数のアクセラレータ、CPU、共有メモリをもつマルチプロセッシング環境では、キャッシュ一貫性を守らせることは、すべてのメモリ・アクセスを一貫性ユニットのすべてに伝播しなければならないことを意味する。各一貫性ユニットはさらにメモリ・アクセスをスヌープし、アクセスのイニシエータに応答して更新が必要かどうかを示すことができる。共有メモリへのアクセスのたびに、この種のデバイス間の通信は多大なノード間の帯域幅を消費し、システムの効率を大幅に下げることがある。ノードは、CPUおよびアクセラレータが一貫的なメモリ・アクセスを行う共通の物理的なバスを共有するCPUまたはアクセラレータのグループからなる。必ずしもそうではないが、多くの場合、ノードは異なるチップ上にある。
【0010】
そのため、複数のCPUおよびアクセラレータ間のキャッシュ一貫性を効率的に維持する方法およびシステムが必要である。
【課題を解決するための手段】
【0011】
本発明の実施例は、一般的にアクセラレータとCPU間の一貫性を維持しながら、通信によるチップ間の帯域幅の消費を低減する方法およびシステムを提供する。
【0012】
発明のある実施例は、マルチプロセッシング・システムにおいて、少なくとも1つの第1ノードと少なくとも1つの第2ノードの間のメモリ一貫性を維持する方法を提供する。第1ノードは一般的に、一又は複数の中央処理装置(CPU)と、一又は複数のCPUの各々に対応するキャッシュ・メモリと、共有メモリと、他のノードの共有メモリ位置を特定するディレクトリとを有する。第2ノードは一般的に、一又は複数のアクセラレータと、一又は複数のアクセラレータの各々に対応するキャッシュ・メモリと、一又は複数のアクセラレータの各々に対応するローカル・ストアとを有する。方法は一般的に、共有メモリのブロックを第1ノードから第2ノードのローカル・ストアまたはキャッシュ・メモリの1つに一貫性を保って転送するステップと、ローカル・ストアの転送されたブロックで一又は複数の操作を一貫性を保たないで行うステップと、一又は複数の操作を行った後、メモリのブロックを共有メモリ・デバイスに一貫性を保ってライトバックするステップとを含む。
【0013】
発明の別の実施例は、マルチプロセッシング・システムにおいて、少なくとも1つの第1ノードと第2ノードとの間のメモリ一貫性を維持する方法を提供する。第1ノードは一般的に、一又は複数の中央処理装置(CPU)と、一又は複数のCPUの各々に対応するキャッシュ・メモリと、共有メモリと、他のノードでキャッシュされる共有メモリ位置を特定するノード・ディレクトリから構成される。第2ノードは一般的に、一又は複数のアクセラレータと、一又は複数のアクセラレータの各々に対応するキャッシュ・メモリと、一又は複数のアクセラレータの各々に対応するローカル・ストアから構成される。方法は一般的に、一又は複数の中央処理装置の1つで共有メモリのブロックへのアクセス要求を受け取るステップと、要求の受取に応答して、ブロックが別の位置でキャッシュされているかどうか、およびブロックが変更されているかどうかを判定するステップと、ブロックが第2ノードでキャッシュされ変更されている場合には、ブロックのアドレスを第2ノードに送信するステップとを有する。
【0014】
さらに別の実施例は、マルチプロセッシング環境で少なくとも1つの第1ノードと少なくとも1つの第2ノードとのメモリ一貫性を維持するシステムを提供する。システムは、少なくとも1つの第1ノードと少なくとも1つの第2ノードを有する。第1ノードは一般的に、一又は複数の中央処理装置(CPU)と、一又は複数のCPUの各々に対応するキャッシュ・メモリと、他のノードの共有メモリ位置を特定するディレクトリとを有する。第2ノードは一般的に、一又は複数のアクセラレータと、一又は複数のアクセラレータの各々に対応するキャッシュ・メモリと、一又は複数のアクセラレータの各々に対応するローカル・ストアとを有する。第1ノードは一般的に、共有メモリのブロックへのアクセス要求を受け取って、要求の受け取りに応答して、ブロックが第1ノードまたは別のノードでキャッシュされているか、およびブロックが変更されているかどうかを判定するように構成される。アクセスが読み出しアクセスの場合、第1ノードは最も最近に変更された共有メモリのブロックを提供し、アクセスが書き込みアクセスの場合、メモリのブロックがキャッシュされる位置を更新もしくは無効にするように構成される。第2ノードは一般的に、第1ノードで共有メモリのブロックへのアクセス要求を一貫性を保って発行し、ブロックがローカル・ストアに転送されている場合、そのブロックで操作を一貫性を保たないで行うように構成される。
【発明を実施するための形態】
【0015】
上記あげた本発明の特徴、利点、および目的が達成され、詳細に理解できるように、上記簡単にまとめた発明を、添付の図面に図示するその実施例を参照してより具体的に説明する。
【0016】
ただし、添付の図面は本発明の代表的な実施例のみを図示しており、そのため発明は同様に効果的な他の実施例にも適用できるため、その範囲を制限すると見なしてはならないことに留意するべきである。
【0017】
本発明は、一般的にアクセラレータとCPUの一貫性を維持しながら通信によるチップ間の帯域幅の消費を低減することに関係する。CPUおよびアクセラレータはマイクロプロセッシング環境で個々のノードにクラスターしてもよい。共有メモリ・デバイスを収容する各ノードは、他のノードでキャッシュされた共有メモリのブロックを追跡するノード・ディレクトリを維持できる。そのため、コマンドおよびアドレスは、メモリ位置がノード以外でキャッシュされた場合に限り、他のノードのプロセッサおよびアクセラレータに送信できる。加えて、アクセラレータは一般的にCPUと同じデータにはアクセスできないため、最初の読み出し、書き込み、および同期の操作だけが他のノードに送信できる。データへの中間アクセスは一貫性を保つことなく行える。その結果、一貫性を維持するために消費されるチップ間の帯域幅を低減できる。
【0018】
以下に、発明の実施例を参照する。ただし、発明は具体的に記載される実施例に制限されないことは理解されるべきである。
システムの例
【0019】
図2は、発明のある実施例によるCPU210とアクセラレータ220を収容する例示的なマイクロプロセッサシステム200を表す。システム200のCPU210とアクセラレータ220は、2つ以上のノードに編成できる。各ノードはプロセッサまたはアクセラレータおよび共有メモリ・デバイスのあらゆる組み合わせを収容することができる。共有メモリは、ノード内のプロセッサおよびアクセラレータもしくはプロセッサまたはアクセラレータでアクセス可能であり、またリモート・ノードのプロセッサおよびアクセラレータもしくはプロセッサまたはアクセラレータでアクセス可能である。メモリのアクセス時間は、要求するデバイスに対するメモリの位置によって変わる。当該メモリ・アクセスはノンユニフォーム・メモリ・アクセス(NUMA)と呼ばれる。例えば、プロセッサによるそのホーム・ノード内のメモリへのアクセスは、リモート・ノードのメモリへのアクセスよりも速いであろう。
【0020】
効率を高めるために、プロセッサと共有メモリは各ノードに選択的にクラスターして、メモリのアクセス時間を短縮できる。例えば、あるメモリ・デバイスのデータに頻繁にアクセスするプロセッサとアクセラレータを同じノードのメモリ・デバイスと一緒にクラスターできる。また、オペレーティング・システムのサポートは、プロセッサをプロセッサが実行するたびに同じノードで実行するようスケジューリングすることによって、ノード間のアクセス頻度を減少できる。
【0021】
アクセラレータはCPUの要求により専門のタスクのみを行うため、アクセラレータはCPUを収容するノードとは別のノードにクラスターできる。したがって、システム200では、CPU210はノード0にクラスターし、アクセラレータ220はノード1にクラスターしている。2つのノードを図示しているが、当業者には、システムにあらゆる数のノードを実装できることは認識されるであろう。複数のノードの各々をリンク230で相互接続できる。
【0022】
図示するように、ノード0は1組のCPU210(図2では4つ示される)を収容する。各CPUはローカライズしたキャッシュ・メモリ211をもつことができる。図では専用のローカライズしたキャッシュを図示しているが、当業者には、複数のレベルのキャッシュ・メモリも実装できることは認識されるであろう。また、一又は複数のレベルのキャッシュをCPU間で共有してもよい。
【0023】
ノード0は各CPUに通信可能に接続される非ローカル・メモリ212も収容できる。メモリ212はダイナミック・ランダム・アクセス・メモリ(DRAM)などのランダム・アクセス・メモリであることが好ましい。メモリ212はCPUにより処理が必要なデータを収容するのに十分な大きさであろう。キャッシュ・メモリ211のようなローカライズしたキャッシュ・メモリへのCPUのアクセスは、メモリ212のような非ローカル・メモリへのアクセスよりも速いため、各CPUで処理するデータのブロックは処理のためにメモリ212からローカル・キャッシュ・メモリ211にコピーできる。メモリ212は、リンク230を介して他のノードのCPUおよびアクセラレータもしくはCPUまたはアクセラレータからアクセスできる共有メモリでもよい。
【0024】
メモリ212は他のノードからアクセス可能な共有メモリであるため、ノード0はノード・ディレクトリ213を収容して、他のノードでキャッシュされるメモリ212からブロックのコピーを追跡することもできる。ノード・ディレクトリ213を使用する利点は、システムがある操作についてあるアドレスの使用で能動的な役割を現在果たしているプロセッサだけをそのアドレスに通知できることである。例えば、ノード・ディレクトリは、他のノードでキャッシュされる共有メモリのアドレス、そのノードの位置、およびそのデータのステータスに関する情報を収容できる。そのため、メモリ・アクセスは、ある特定のアドレスが別のノードでキャッシュされ、データが変更されている場合に限り、他のノードに送信できる。そのため、ノード・ディレクトリを使用することにより、すべてのアドレスおよびコマンドをすべてのノードに送信する必要がなく、それによってシステムのオーバーヘッド、レイテンシ、およびリンク全体の帯域幅消費を低減する。
【0025】
ノード1は一又は複数のアクセラレータ220を含むことができる。CPUと同様、各アクセラレータ220は対応する専用のキャッシュ・メモリ221をもつことができる。図面には図示していないが、それでも当業者には複数のキャッシュ・レベルを実装することもできることは認識されるであろう。また、一又は複数のキャッシュ・レベルはノードのアクセラレータ間で共有してもよい。ノード内のアクセスはリンク230で他のノードにアクセスするよりも速いため、アクセラレータで処理するデータは処理のために各キャッシュ・メモリ221にコピーできる。
【0026】
ノード1は非ローカル・メモリ222を収容できる。メモリ222は他のノードでアクセス可能な共有メモリでもよい。メモリ212と同様、メモリ222はDRAMデバイスなどのランダム・アクセス・メモリ・デバイスでもよい。共有メモリ222がノード1に含まれる場合、ディレクトリ223も含めて、他のノードでキャッシュされるメモリ222からブロックのコピーを追跡してもよい。
【0027】
各アクセラレータは対応するオプションのローカル・ストア224ももつことができる。ローカル・ストア224は主にそれに付加されるアクセラレータからアクセスされる一貫的でないメモリでよい。ローカル・ストア224はその各アクセラレータからしかアクセスできないため、ローカル・ストアは一貫性を保たなくてもよい。そのため、アクセラレータと対応するローカル・ストアとのトランザクションは、他のノードに伝播して一貫性を確保したり、または同じノード内でキャッシュする必要はない。
【0028】
アクセラレータで処理するデータはローカル・ストア224に収容できる。そのため、初期データおよび中間結果のために各アクセラレータによるそのローカル・ストアへのアクセスは、リンク230の帯域幅の要求に追加されない。最終結果は、CPU210からアクセスされる前に、ソフトウェアでローカル・ストアからメモリ212または222にコピーできる。ソフトウェアはアクセラレータとCPUのこの種の共有データへのアクセスを協調および同期することもできる。
【0029】
実施例には、メモリ222、キャッシュ221、およびローカル・ストア224をオプションにでき、そのためノード1から省けるものもある。上記デバイスの一又は複数のを含めることには、いくつかの要因が影響するであろう。例えば、前述したように、ノード全体のメモリ・アクセスはローカル・メモリへのアクセスよりも遅くなるので、キャッシュ221およびローカル・ストア224を含めることは有利になるであろう。そのため、キャッシュとローカル・ストアを含めることで、レイテンシとチップ間の帯域幅消費を低減できる。アクセラレータが大量のデータを処理する場合、他のノードの共有メモリへのアクセスはノード内の共有メモリへのアクセスよりも遅くなるため、メモリ222を含めるのが有利であろう。キャッシュと同様、メモリを含めることはレイテンシおよびチップ間の帯域幅を低減できる。さらに別の要因は、メモリが含まれる場合に必要となるかもしれないディレクトリのサイズと複雑さであろう。大容量のメモリはより大きく、より複雑なディレクトリを必要とし、それが性能を低下させる障害となりうる。
【0030】
図3は、共有メモリ222を省いた発明の代替実施例である。したがって、追跡すべき共有位置がないため、ノード・ディレクトリ223も省かれている。実施例には、図3のキャッシュ221はごく少量のデータだけをキャッシュできるものもある。例えば、各キャッシュ221は6つのキャッシュラインしか収容できない。その結果、ノード・ディレクトリ213は、4つのキャッシュ221の各々の6つのアドレスに対応する24アドレスしか追跡できない。そのため、CPUのメモリ212へのアクセスは、アドレスがノード1の24つの位置の1つでキャッシュされない限り、ノード1に送信する必要はなく、それによってノード全体の一貫性を維持するための帯域幅の消費を低減できる。
【0031】
ローカル・キャッシュ・メモリ211および221は、別のノードの共有メモリ・デバイス(メモリ212および222など)からのデータのコピーを収容できるため、一貫性がとれる。そのため、キャッシュ211および221のブロックの変更状態を追跡して、一貫性を確保できる。例えば、アクセラレータがすでにそのキャッシュにあるブロックに書き込み、そのブロックが変更されない場合、ブロックを収容するすべてのノードの少なくとも1つのキャッシュの状態は移行する必要があろう。この場合、ブロックのアドレスは当該キャッシュのすべてに送信する必要がある。アドレス割り当てされるブロックは他のキャッシュで無効な状態に移行でき、アクセラレータのキャッシュだけが変更された状態に移行されるであろう。同時に、ブロックのメモリ位置がアクセラレータとは別のノードにある場合、そのノードのノード・ディレクトリを更新して、ブロックがアクセラレータのリモート・ノードで変更されたことを示すこともできる。
【0032】
同様に、メモリ・ブロックが共有メモリで更新される場合、ブロックをキャッシュしたすべての位置も更新または無効にしなければならない。ただし、本発明の利点は、アクセラレータによる最初の読み出し操作、書き込み操作、および同期だけを送信すればよいことである。
読み出し操作
【0033】
最初の読み出し操作とは、アクセラレータによる処理が必要なデータをノード0の共有メモリ位置からノード1に転送する操作である。このアクセスを一貫性を維持するように行って、確実にアクセラレータがシステムで利用できる最新版のデータをもつようにできる。読み出し操作は各アクセラレータのDMAコントローラでリンク230にわたるダイナミック・メモリ・アクセス(DMA)で行える。ノード1のアクセラレータによるメモリ212のような共有メモリ位置へのDMAアクセスは、データが一貫的でないローカル・ストアに転送される、または一貫的なキャッシュもしくはメモリに転送されるかを示すことができる。データが一貫性ユニットに転送される場合、データの位置、アドレス、およびステータスを示すエントリをノード・ディレクトリ213に行う。しかし、データがローカル・ストアに転送される場合、ノード・ディレクトリにエントリしない。
【0034】
一般に、リモート共有メモリから読み出されるデータは、アクセラレータに対応するローカル・ストアに格納できる。ローカル・ストアは一貫性を維持しないため、アクセラレータは操作を行って、ローカル・ストアのデータを変更できる。ローカル・ストアへのアクセスは他のノードには送信されず、それにより帯域幅の消費を低減する。また、ノード0のノード・ディレクトリにエントリしないため、ローカル・ストアに転送されるメモリ位置へのCPUアクセスはノード1に送信する必要がない。
【0035】
しかし、読み出し操作の中にはデータをローカル・ストア以外の一貫性ユニットに転送させるものもある。例えば、仮想アドレスのハードウェア翻訳に使うアトミック操作およびページ・テーブル・エントリをキャッシュすることがある。これらキャッシュのデータでのアクセラレータによる操作は一貫的(coherent)であり、他のノードにアドレスを送信する必要がある。同様に、この同じデータに関して他のノードのCPUまたはアクセラレータによる操作は一貫的であり、他のノードからアドレスを送信する必要がある。
【0036】
図5は、共有メモリを収容するノードのノード・ディレクトリにエントリを行うかどうかを判定するために行う操作のフロー図である。操作はステップ401でアクセラレータを収容するノードから読み出し要求を受け取ることによって開始する。ステップ402で、読み出し要求が、データ読み出しがローカル・ストアに転送されることを示す場合、ステップ403でノード・ディレクトリへのエントリは行わない。他方、読み出し要求が、データをキャッシュまたはメモリ・ユニットなどの一貫性ユニットに転送することを示す場合には、ステップ404で転送されるアドレス、転送の位置、およびデータのステータスを示すエントリをノード・ディレクトリに行える。
【0037】
図4は、ノード0のCPU210とノード1のアクセラレータ220が一貫性を保ってアクセスする共有メモリ212のメモリ(ブロック1)のブロックを表す。例えば、ブロック1はノード0のCPU210aで処理するためにキャッシュ・メモリ211にキャッシュできる。その後、ブロック1のコピーをノード1に送ることを要求するとともに、ブロック1に関わるタスクはノード1のアクセラレータ220aに委譲できる。ブロック1はCPU210aで変更されているかもしれないため、ブロックをノード1に送る前に、キャッシュ211aはブロック1のコピーが更新されているかを点検しなければならない。ノード・ディレクトリ213も、ブロック1がある他のノードでキャッシュされて、変更されているかどうかを判定するために点検する。実施例には、ノード・ディレクトリはキャッシュ211aのスヌープと同時に点検するものもある。ノード・ディレクトリ213が、ブロック1がノード2でキャッシュされて変更されていることを示す場合、ブロック1のアドレスをノード2に送る。ブロックの宛先ノード番号0もノード2に送る。ノード2のキャッシュはアドレスをスヌープして、キャッシュ231にブロック1を見つける。これでブロック1をノード0に転送できる。当業者には、ノード0によりノード1の宛先ノード番号をノード2に提供できることも認識されるであろう。そのため、ノード2で変更されたブロックはノード1に直接転送できる。
【0038】
図6は、第1リモート・ノードの共有メモリ(メモリ212など)でアクセラレータが読み出し操作中に、メモリ・ブロックの最新のコピーが確実に提供されるために行う例示的な操作のフロー図である。操作はステップ501で、要求されるメモリのブロックが第1リモート・ノード内でキャッシュされるかどうかを判定することによって開始する。ブロックが第1リモート・ノード内でキャッシュされる場合、ステップ502でブロックはデータに変更が行われているかを点検する。ブロックが変更されている場合、ブロックは変更されたブロックを収容するキャッシュから直接読み出される。
【0039】
要求されるブロックが第1リモート・ノードでキャッシュされていない場合、またはブロックはキャッシュされたが変更されていない場合、ステップ504で、ブロックが第2リモート・ノードでキャッシュされたかどうか、およびブロックが変更されているかどうかを判定する。これは、例えば、ブロックがキャッシュされ変更される位置を示すことのできるノード・ディレクトリを調べることによって行える。ブロックが第2リモート・ノードでキャッシュされ、変更されている場合、ステップ508でブロックのアドレスを第2リモート・ノードに送ってスヌープできる。ステップ506で、変更されたブロックは第2リモート・ノードの変更ブロックを収容するキャッシュから読み出すことができる。
【0040】
メモリ・ブロックが第2リモート・ノードでキャッシュされていない場合、または第2リモート・ノードでキャッシュされたブロックが変更されていない場合、ステップ507で、ブロックは第1リモート・ノードの共有メモリ・デバイスから読み出せる。当業者には、メモリのブロックが第1リモート・ノードのキャッシュと第2リモート・ノードのキャッシュの両方でキャッシュされる場合、最も最近に変更されたブロックを読み出せることも認識されるであろう。
【0041】
アクセラレータとは対照的に、CPUによるほとんどの読み出し操作はリモート・ノードでキャッシュされない位置および、CPUのノードのメモリに行うであろう。このような場合、読み出されるブロックのアドレスはリモート・ノードに送信する必要はない。また、ブロックがリモート・ノードでキャッシュされているが変更されていない場合でも、アドレスを送信する必要はない。これらすべての場合において、CPUのノードのノード・ディレクトリを使用して、他のノードのブロックの状態を判定できる。このように、ノード・ディレクトリを使って、他のノードへのほとんどのアドレスの送信を避けることができる。
【0042】
CPUが独自のノードの共有メモリのある位置で読み出しを行う場合、アドレスはそのノードの他のキャッシュでスヌープする。当該キャッシュが変更ブロックを収容する場合、ブロックは変更ブロックを収容するキャッシュから直接読み出せる。要求されるブロックがそのノードでキャッシュされていない場合、またはブロックはキャッシュされているが変更されていない場合、ノード・ディレクトリを点検する。ブロックがリモート・ノードでキャッシュされ、かつ変更されている場合、アドレスがリモート・ノードに送信され、そこでスヌープされる。変更データは、さらにリモート・ノードの変更ブロックを収容するキャッシュから読み出しされる。実施例には、リモート・キャッシュとノード・ディレクトリのステータスを、キャッシュラインが変更されていないことを示すように変えるものもある。変更データはメモリにも書き込める。当業者によく知られる代替キャッシュ・プロトコルを使えば、メモリの書き込みを避けることができるであろうし、他のキャッシュの状態が起こりうる。
書き込み操作
【0043】
書き込み操作とは、アクセラレータによる処理の後、ノード1のアクセラレータからノード0の共有メモリにデータを戻す操作といえる。読み出し操作と同様に、書き込み操作もリモート・ノードの共有メモリへのDMAアクセスにより行える。このデータの古くなったコピーをシステムの他のキャッシュで使用しているかもしれないので、この操作も一貫性を保つように行って、古くなったデータを収容するキャッシュを更新できる。
【0044】
図4に戻ると、ブロック1はまずノード1のアクセラレータ220aで処理するために、キャッシュ221aでキャッシュされているかもしれない。また、CPU210aで処理するためにキャッシュ211aで、またはノード2のアクセラレータ230で処理するためにキャッシュ231でキャッシュされるかもしれない。CPU210aがブロックを処理する前に、ブロック1はアクセラレータ220aで変更されて、共有メモリ212にライトバックすることができる。実施例には、アクセラレータ220aがブロック1に書き込むとき、ブロック1をキャッシュ211aおよびキャッシュ231で無効にできるものもある。無効化は、CPU210aが古いデータにアクセスしないように行える。他の実施例では、アクセラレータ220aがブロック1に書き込むとき、ブロック1はキャッシュ211aおよびキャッシュ231で最新データに更新できる。いずれにしても、CPU210aとアクセラレータ230は、アクセラレータ220aがブロック1に書き込んだ後は、古いデータへのアクセスを防止される。そのため、アクセラレータによる書き込み操作を一貫的に行える。
【0045】
図7は、アクセラレータがデータ処理を完了した後、すべてのキャッシュが確実に更新されるように行える例示的な操作を表す。操作はステップ606で、アクセラレータが第1リモート・ノードの共有メモリ(メモリ212など)位置にDMA書き込み操作を行って開始する。ステップ601で、第1リモート・ノードのキャッシュは書き込み操作のアドレスをスヌープして、アドレスがローカルにキャッシュされているかどうかを判定できる。アドレスがキャッシュされている場合、ステップ602でそのキャッシュはメモリ・ブロックのその各コピーを新たな書き込みデータに更新できる。前述したように、実施例には、キャッシュがそのコピーを更新する代わりに、メモリ・ブロックのその各コピーを無効にできるものもある。
【0046】
ステップ603で、書き込みのアドレスが第2リモート・ノードでキャッシュされているかどうかを判定する。これは、アドレス割り当てされるメモリ・ブロックがキャッシュされている他のノードの位置を見つけるノード・ディレクトリを調べることによって行える。メモリ・ブロックが第2リモート・ノードでキャッシュされている場合、ステップ607でそのアドレスを第2リモート・ノードに送信できる。ステップ604で、アドレスは第2リモート・ノードのキャッシュによりスヌープでき、アドレス割り当てされるメモリ・ブロックを収容するキャッシュを新たな書き込みデータに更新できる。他の実施例では、アドレス・ブロックを第2リモート・ノードのキャッシュで無効にしてもよい。ステップ605で、データは第1リモート・ノードの共有メモリに書き込める。
【0047】
CPUによる書き込み操作は、主にCPUのノードの共有メモリの位置に行われる。このような場合、書き込みされるブロックのアドレスはリモート・ノードに送信する必要はない。CPUのノードのノード・ディレクトリを使って、他のノードのブロックの状態を判定できる。このため、ノード・ディレクトリを使って、ほとんどのアドレスを他のノードに送信することを回避できる。
【0048】
CPUが独自のノードのメモリの位置に書き込みを行う場合、考慮すべきいくつかのケースがある。1つには、アドレス割り当てされるブロックがCPUに付加するキャッシュにすでにあり、ブロックがすでに変更されていることがある。この場合、キャッシュは単に新たなデータに更新すればよい。
【0049】
2番目のケースでは、アドレス割り当てされるブロックがCPUに付加するキャッシュにすでにあるが、ブロックが変更されていない場合である。この場合、アドレスはそのノードの他のキャッシュでスヌープできる。当該キャッシュが変更ブロックを収容する場合、ブロックを無効化できる。ノード・ディレクトリも点検できる。ブロックがリモート・ノードでキャッシュされる場合、アドレスはリモート・ノードに送信されて、そこでスヌープできる。ブロックはリモート・キャッシュで無効化してもよい。さらにCPUのキャッシュは書き込みデータに更新できる。
【0050】
3番目のケースでは、アドレス割り当てされるブロックがCPUに付加されるキャッシュにない。この場合、アドレスはノードの他のキャッシュでスヌープできる。いずれかの当該キャッシュがブロックを収容し、それが変更されている場合、データはこのキャッシュから読み出せる。ノード・ディレクトリも点検できる。ブロックがリモート・ノードでキャッシュされる場合、アドレスをリモート・ノードに送信して、そこでスヌープできる。いずれかのリモート・キャッシュがブロックを収容し、それが変更されている場合、データはそのキャッシュから読み出せる。どのキャッシュもブロックの変更コピーをもたない場合、ブロックはメモリから読み出せる。ブロックはCPUのキャッシュを除くすべてのキャッシュで無効にできる。またCPUのキャッシュは書き込みデータで更新できる。
【0051】
始めに一貫的にアクセスしたデータで一貫的でないアクセスを行うことにより、システムの他のノードへのアドレスおよびコマンドの送信は一貫的でないアクセスのためになくすことができる。データ処理が完了した後、アクセラレータはデータを一貫的にライトバックできる。そのため、マルチプロセッシング・システムのノード全体のメモリ一貫性を維持するための帯域幅の消費を低減しながら、データの一貫性を維持できる。
【0052】
上記述べたことは本発明の実施例に関係するが、発明の他の実施例および別の実施例もその基本的な範囲を逸脱することなく考えられ、その範囲は請求項によって判断される。
【図面の簡単な説明】
【0053】
【図1】中央処理装置(CPU)に連結したアクセラレータを表す先行技術の図である。
【図2】発明のある実施例による例示的なマルチプロセッシング・システムの図である。
【図3】発明のある実施例による例示的なマルチプロセッシング・システムの別の図である。
【図4】あるノード内のCPUと別のノード内のアクセラレータによりアクセスされる共有メモリのブロックの図である。
【図5】共有メモリを収容するノードのディレクトリにエントリを行わなければならないかどうかを判定するために行う例示的な操作のフロー図である。
【図6】要求されるメモリ・ブロックの最も最近に変更されたコピーをアクセラレータに提供するために行う例示的な操作のフロー図である。
【図7】アクセラレータが共有メモリにライトバックするメモリのキャッシュしたコピーのすべてを更新するために行う例示的な操作のフロー図である。

【特許請求の範囲】
【請求項1】
一又は複数の中央処理装置(CPU)、
一又は複数のCPUの各々に対応するキャッシュ・メモリ、
共有メモリ、および
第1ノードの共有メモリに存在し、他のノードでキャッシュされる位置特定するノード・ディレクトリとを有する少なくとも1つの第1ノードと、
一又は複数のアクセラレータ、
一又は複数のアクセラレータの各々に対応するキャッシュ・メモリ、および
一又は複数のアクセラレータの各々に対応するローカル・ストアとを有する少なくとも1つの第2ノードとを有するシステムであって、
前記第1ノードが、
前記共有メモリの前記ブロックへのアクセス要求を受け取り、
前記要求の受け取りに応答して、前記ブロックが第1ノード内でキャッシュされる、または別のノードでキャッシュされるかどうか、および前記ブロックが変更されるかどうかを判定し、
アクセスが読み出しアクセスの場合、前記共有メモリの最も最近変更したブロックを提供し、および
アクセスが書き込みアクセスの場合、前記メモリ・ブロックがキャッシュされる位置を更新または無効にするように構成され、
前記第2ノードが、
前記第1ノードの共有メモリのブロックへのアクセス要求を一貫性を保って発行し、および
前記ブロックがローカル・ストアに転送される場合、ブロックで一貫性を保たないで操作を行うように構成される、
システム。
【請求項2】
前記共有メモリの前記ブロックにアクセスするために、前記第2ノードがさらに、前記ブロックがキャッシュ・メモリに転送される、またはローカル・ストアに転送されるかどうかを示す信号を生成するように構成され、前記第1ノードがさらに信号に基づいてブロックを転送するように構成される、請求項1のシステム。
【請求項3】
前記ブロックが前記第2ノードのキャッシュ・メモリに転送される場合、第1ノードがさらに、前記ノード・ディレクトリに、前記ブロックのアドレスとキャッシュ・メモリの位置を入力するように構成される、請求項2のシステム。
【請求項4】
前記メモリ・ブロックの最も最近変更したコピーを提供するために、前記第1ノードが、
前記ブロックの変更コピーが前記第1ノードでキャッシュされるかどうかを判定し、
前記メモリ・ブロックの変更コピーがシステムの他のいずれかのノードでキャッシュされるかどうかを判定し、
変更コピーが存在する場合、前記ブロックの最も最近変更したコピーを第2ノードに転送するように構成される、請求項1のシステム。
【請求項5】
前記ブロックの変更コピーが第1ノードでキャッシュされるかどうかを判定するために、第1ノードのキャッシュが、
要求に対応する前記ブロックのアドレスをスヌープして、前記ブロックが第1ノードでキャッシュされるかどうかを判定し、
前記ブロックがキャッシュされる場合、前記ブロックが変更されているかどうかを判定するように構成される、請求項4のシステム。
【請求項6】
前記ブロックの変更コピーがシステムの他のいずれかのノードでキャッシュされるかどうかを判定するために、第1ノードが、
前記ノード・ディレクトリを調べて、前記ブロックが他のいずれかのノードでキャッシュされるかどうかを判定し、
前記ブロックが他のいずれかのノードでキャッシュされる場合、前記ブロックが他のノードで変更されていれば、他のノードから前記ブロックを検索するように構成される、請求項4のシステム。
【請求項7】
書き込みアクセスに応答してメモリ・ブロックを無効または更新するために、前記第1ノードが、
前記ブロックが前記第1ノードでキャッシュされるかどうかを判定し、
前記ブロックがシステムの他のいずれかのノードでキャッシュされるかどうかを判定する、請求項1のシステム。
【請求項8】
前記ブロックが前記第1ノードでキャッシュされるかどうかを判定するために、前記第1ノードのキャッシュを書き込みアクセスをスヌープするように構成される、請求項7のシステム。
【請求項9】
前記ブロックがシステムの他のいずれかのノードでキャッシュされるかどうかを判定するために、前記第1ノードがノード・ディレクトリを調べるように構成される、請求項7のシステム。
【請求項10】
前記第1ノードがさらに、
前記ブロックが第3ノードでキャッシュされて変更されたという判定に応答して、前記ブロックのアドレスと前記第2ノードに関連する数を前記第3ノードに送信するように構成され、
前記第3ノードがブロックを前記第2ノードに送信するように構成される、
請求項1のシステム。
【請求項11】
前記第1ノードが、前記ノード・ディレクトリを調べて、前記ブロックが前記第3ノードでキャッシュされるかどうか、および前記ブロックが変更されるかどうかを判定するように構成される、
請求項10のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2012−181860(P2012−181860A)
【公開日】平成24年9月20日(2012.9.20)
【国際特許分類】
【出願番号】特願2012−106285(P2012−106285)
【出願日】平成24年5月7日(2012.5.7)
【分割の表示】特願2007−71882(P2007−71882)の分割
【原出願日】平成19年3月20日(2007.3.20)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】