(57)【特許請求の範囲】
【請求項１】
一又は複数の中央処理装置（ＣＰＵ）、
一又は複数のＣＰＵの各々に対応するキャッシュ・メモリ、
共有メモリ、および
第１ノードの共有メモリに存在し、他のノードでキャッシュされる位置を特定するノード・ディレクトリとを有する少なくとも１つの第１ノードと、
一又は複数のアクセラレータ、
一又は複数のアクセラレータの各々に対応するキャッシュ・メモリ、および
一又は複数のアクセラレータの各々に対応するローカル・ストアとを有する少なくとも１つの第２ノードとを有するシステムであって、
前記第１ノードが、
前記共有メモリの前記ブロックへのアクセス要求を受け取り、
前記要求の受け取りに応答して、前記ブロックが第１ノード内でキャッシュされる、または別のノードでキャッシュされるかどうか、および前記ブロックが変更されるかどうかを判定し、
アクセスが読み出しアクセスの場合、前記共有メモリの最も最近変更したブロックを提供し、および
アクセスが書き込みアクセスの場合、前記メモリ・ブロックがキャッシュされる位置を更新または無効にするように構成され、
前記第２ノードが、前記第１ノードの共有メモリのブロックへのアクセス要求を発行し、
前記メモリ・ブロックの最も最近変更したコピーを提供するために、前記第１ノードが、
前記ブロックの変更コピーが前記第１ノードでキャッシュされるかどうかを判定し、
前記メモリ・ブロックの変更コピーがシステムの他のいずれかのノードでキャッシュされるかどうかを判定し、
変更コピーが存在する場合、前記ブロックの最も最近変更したコピーを第２ノードに転送するように構成され、
前記ブロックの変更コピーが前記第１ノードでキャッシュされるかどうかを判定するために、前記第１ノードのキャッシュが、
要求に対応する前記ブロックのアドレスをスヌープして、前記ブロックが前記第１ノードでキャッシュされるかどうかを判定し、
前記ブロックがキャッシュされる場合、前記ブロックが変更されているかどうかを判定するように構成され、
前記共有メモリの前記ブロックにアクセスするために、前記第２ノードがさらに、前記ブロックがキャッシュ・メモリに転送される、またはローカル・ストアに転送されるかどうかを示す信号を生成するように構成され、前記第１ノードがさらに信号に基づいてブロックを転送するように構成され、
前記ブロックが前記第２ノードのキャッシュ・メモリに転送される場合、第１ノードがさらに、前記ノード・ディレクトリに、前記ブロックのアドレスとキャッシュ・メモリの位置を入力するように構成され、
前記ブロックの変更コピーがシステムの他のいずれかのノードでキャッシュされるかどうかを判定するために、第１ノードが、
前記ノード・ディレクトリを調べて、前記ブロックが他のいずれかのノードでキャッシュされるかどうかを判定し、
前記ブロックが他のいずれかのノードでキャッシュされる場合、前記ブロックが他のノードで変更されていれば、他のノードから前記ブロックを検索するように構成される、
システム。
【請求項２】
書き込みアクセスに応答してメモリ・ブロックを無効または更新するために、前記第１ノードが、
前記ブロックが前記第１ノードでキャッシュされるかどうかを判定し、
前記ブロックがシステムの他のいずれかのノードでキャッシュされるかどうかを判定する、請求項１のシステム。
【請求項３】
前記ブロックが前記第１ノードでキャッシュされるかどうかを判定するために、前記第１ノードのキャッシュを書き込みアクセスをスヌープするように構成される、請求項２のシステム。
【請求項４】
前記ブロックがシステムの他のいずれかのノードでキャッシュされるかどうかを判定するために、前記第１ノードがノード・ディレクトリを調べるように構成される、請求項２のシステム。
【請求項５】
前記第１ノードがさらに、
前記ブロックが第３ノードでキャッシュされて変更されたという判定に応答して、前記ブロックのアドレスと前記第２ノードに関連する数を前記第３ノードに送信するように構成され、
前記第３ノードがブロックを前記第２ノードに送信するように構成される、
請求項１のシステム。
【請求項６】
前記第１ノードが、前記ノード・ディレクトリを調べて、前記ブロックが前記第３ノードでキャッシュされるかどうか、および前記ブロックが変更されるかどうかを判定するように構成される、
請求項５のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的にマルチプロセッサに関係する。さらに具体的には、本発明は、同じチップもしくは異なるチップ上にあるアクセラレータとＣＰＵ間の一貫性(coherence)を維持しながら通信による帯域幅の消費を低減することに関係する。
【背景技術】
【０００２】
初期のコンピュータ・システムは、単一の中央処理装置（ＣＰＵ）と、ＣＰＵの関連メモリ、入出力（Ｉ／Ｏ）デバイス、およびディスク・ドライブ、光学ストレージ、磁気テープ・ドライブ、およびその種の他のものなどの大容量ストレージ・システムを有していた。
【０００３】
しかし、単一のプロセッサの容量を超える処理能力に対する要求が高まり、プロセッサに対する要求から増え続ける負担を緩和する多数のソリューションがでてきている。当該ソリューションの１つが、ＣＰＵに連結してアクセラレータを使用することである。アクセラレータはプログラム可能である、または特定の機能を行う独立型である。このような機能の実行の要求をＣＰＵが受けると、機能の実行はアクセラレータに委譲することができる。アクセラレータは割り当てられるタスクを処理する一方で、ＣＰＵは別のタスクを処理できるので、ＣＰＵに対する負担が減り、効率が高まる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
図１は、インターコネクト・バス１２０でアクセラレータ１１０に連結された例示的なＣＰＵ１００を表す。ＣＰＵ１００はメモリ・デバイス１０２に接続できる。メモリ・デバイス１０２は、例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）デバイスである。加えて、ＣＰＵ１００は処理するデータに高速アクセスしやすくするローカル・キャッシュ・メモリ１０１を含んでもよい。アクセラレータ１１０はインターコネクト・バス１２０でＣＰＵに接続して、特定の機能を行うことができる。例えば、アクセラレータ１１０は、特殊な座標演算および変換を行うグラフィックス・アクセラレータである。アクセラレータは独自のメモリ１１２およびキャッシュ１１１をもつこともある。
【０００５】
画像を処理する要求をＣＰＵ１００が受け取ると、アクセラレータ１１０に画像データを処理するタスクを委譲できる。例えば、メモリ１０２に収容されるブロック１には処理の必要な画像データを入れることができる。処理要求がＣＰＵに送られると、ブロック１はアクセラレータによる処理のためにキャッシュ１１１（またはアクセラレータのメモリ１１２）に転送できる。ブロック１の処理が完了すると、アクセラレータによってメモリ１０２にライトバックできる。
【０００６】
先行技術に伴う問題の１つに、アクセラレータとＣＰＵがメモリの一貫性なく接続されることがある。プロセッサとアクセラレータはメモリ１０２および１１２に入れられたデータを共有できるため、共有データで作業するときにはアクセラレータとＣＰＵ間での協調が必要である。アクセラレータとＣＰＵが同じメモリ位置でアドレス割り当てされる異なるデータに絶対にアクセスしないように一貫性が求められる。例えば、図１では、ＣＰＵは、ブロック１が処理のためにアクセラレータ１１０に送られた後で、ブロック１を処理する要求を受け取ることができる。新たな要求が画像処理の要求ではない場合、ＣＰＵは処理のためにブロック１をキャッシュできる。ＣＰＵがブロックを処理する前にアクセラレータがそのブロックの処理を完了すると、ＣＰＵがキャッシュしたデータは古いものになる。そのため、ＣＰＵは正しくないデータを処理することになる。メモリ一貫性は、最も最近に変更されたデータのコピーをすべての処理デバイスに使えるようにすることを要求する。
【０００７】
この問題の１つのソリューションが、キャッシュの古いデータを更新するスヌープ・プロトコルを実装することである。各プロセッサに発行されるアドレスとコマンドは、他のすべてのプロセッサおよびアクセラレータもしくは他のすべてのプロセッサまたはアクセラレータに送信できる。バス・モニタを使用して、メモリ・アクセスのためのアドレスラインを監視できる。キャッシュにバスでアドレス割り当てされるメモリ・ブロックのコピーが収容される場合、キャッシュはそのメモリ・ブロックのコピーを更新できる。例えば、図１では、バス・モニタはバス１２０を監視できる。キャッシュ１０１にブロック１のコピーが収容されるときに、アクセラレータ１１０により書き込み操作をキャッシュ１０１が検出した場合、キャッシュ１０１は独自のブロック１のコピーを更新して、ＣＰＵによる処理のために最新かつ正確なブロック１のコピーを収容できる。
【０００８】
他の実施例では、キャッシュ１０１はメモリ１０２でのブロック１へのメモリ書き込みの検出に応答して、そのブロック１のコピーを無効にできる。そのため、ＣＰＵがキャッシュからブロック１へのアクセスを試みると、ブロック１の最新のコピーをメモリから検索できる。
【０００９】
しかし、複数のアクセラレータ、ＣＰＵ、共有メモリをもつマルチプロセッシング環境では、キャッシュ一貫性を守らせることは、すべてのメモリ・アクセスを一貫性ユニットのすべてに伝播しなければならないことを意味する。各一貫性ユニットはさらにメモリ・アクセスをスヌープし、アクセスのイニシエータに応答して更新が必要かどうかを示すことができる。共有メモリへのアクセスのたびに、この種のデバイス間の通信は多大なノード間の帯域幅を消費し、システムの効率を大幅に下げることがある。ノードは、ＣＰＵおよびアクセラレータが一貫的なメモリ・アクセスを行う共通の物理的なバスを共有するＣＰＵまたはアクセラレータのグループからなる。必ずしもそうではないが、多くの場合、ノードは異なるチップ上にある。
【００１０】
そのため、複数のＣＰＵおよびアクセラレータ間のキャッシュ一貫性を効率的に維持する方法およびシステムが必要である。
【課題を解決するための手段】
【００１１】
本発明の実施例は、一般的にアクセラレータとＣＰＵ間の一貫性を維持しながら、通信によるチップ間の帯域幅の消費を低減する方法およびシステムを提供する。
【００１２】
発明のある実施例は、マルチプロセッシング・システムにおいて、少なくとも１つの第１ノードと少なくとも１つの第２ノードの間のメモリ一貫性を維持する方法を提供する。第１ノードは一般的に、一又は複数の中央処理装置（ＣＰＵ）と、一又は複数のＣＰＵの各々に対応するキャッシュ・メモリと、共有メモリと、他のノードの共有メモリ位置を特定するディレクトリとを有する。第２ノードは一般的に、一又は複数のアクセラレータと、一又は複数のアクセラレータの各々に対応するキャッシュ・メモリと、一又は複数のアクセラレータの各々に対応するローカル・ストアとを有する。方法は一般的に、共有メモリのブロックを第１ノードから第２ノードのローカル・ストアまたはキャッシュ・メモリの１つに一貫性を保って転送するステップと、ローカル・ストアの転送されたブロックで一又は複数の操作を一貫性を保たないで行うステップと、一又は複数の操作を行った後、メモリのブロックを共有メモリ・デバイスに一貫性を保ってライトバックするステップとを含む。
【００１３】
発明の別の実施例は、マルチプロセッシング・システムにおいて、少なくとも１つの第１ノードと第２ノードとの間のメモリ一貫性を維持する方法を提供する。第１ノードは一般的に、一又は複数の中央処理装置（ＣＰＵ）と、一又は複数のＣＰＵの各々に対応するキャッシュ・メモリと、共有メモリと、他のノードでキャッシュされる共有メモリ位置を特定するノード・ディレクトリから構成される。第２ノードは一般的に、一又は複数のアクセラレータと、一又は複数のアクセラレータの各々に対応するキャッシュ・メモリと、一又は複数のアクセラレータの各々に対応するローカル・ストアから構成される。方法は一般的に、一又は複数の中央処理装置の１つで共有メモリのブロックへのアクセス要求を受け取るステップと、要求の受取に応答して、ブロックが別の位置でキャッシュされているかどうか、およびブロックが変更されているかどうかを判定するステップと、ブロックが第２ノードでキャッシュされ変更されている場合には、ブロックのアドレスを第２ノードに送信するステップとを有する。
【００１４】
さらに別の実施例は、マルチプロセッシング環境で少なくとも１つの第１ノードと少なくとも１つの第２ノードとのメモリ一貫性を維持するシステムを提供する。システムは、少なくとも１つの第１ノードと少なくとも１つの第２ノードを有する。第１ノードは一般的に、一又は複数の中央処理装置（ＣＰＵ）と、一又は複数のＣＰＵの各々に対応するキャッシュ・メモリと、他のノードの共有メモリ位置を特定するディレクトリとを有する。第２ノードは一般的に、一又は複数のアクセラレータと、一又は複数のアクセラレータの各々に対応するキャッシュ・メモリと、一又は複数のアクセラレータの各々に対応するローカル・ストアとを有する。第１ノードは一般的に、共有メモリのブロックへのアクセス要求を受け取って、要求の受け取りに応答して、ブロックが第１ノードまたは別のノードでキャッシュされているか、およびブロックが変更されているかどうかを判定するように構成される。アクセスが読み出しアクセスの場合、第１ノードは最も最近に変更された共有メモリのブロックを提供し、アクセスが書き込みアクセスの場合、メモリのブロックがキャッシュされる位置を更新もしくは無効にするように構成される。第２ノードは一般的に、第１ノードで共有メモリのブロックへのアクセス要求を一貫性を保って発行し、ブロックがローカル・ストアに転送されている場合、そのブロックで操作を一貫性を保たないで行うように構成される。
【発明を実施するための形態】
【００１５】
上記あげた本発明の特徴、利点、および目的が達成され、詳細に理解できるように、上記簡単にまとめた発明を、添付の図面に図示するその実施例を参照してより具体的に説明する。
【００１６】
ただし、添付の図面は本発明の代表的な実施例のみを図示しており、そのため発明は同様に効果的な他の実施例にも適用できるため、その範囲を制限すると見なしてはならないことに留意するべきである。
【００１７】
本発明は、一般的にアクセラレータとＣＰＵの一貫性を維持しながら通信によるチップ間の帯域幅の消費を低減することに関係する。ＣＰＵおよびアクセラレータはマイクロプロセッシング環境で個々のノードにクラスターしてもよい。共有メモリ・デバイスを収容する各ノードは、他のノードでキャッシュされた共有メモリのブロックを追跡するノード・ディレクトリを維持できる。そのため、コマンドおよびアドレスは、メモリ位置がノード以外でキャッシュされた場合に限り、他のノードのプロセッサおよびアクセラレータに送信できる。加えて、アクセラレータは一般的にＣＰＵと同じデータにはアクセスできないため、最初の読み出し、書き込み、および同期の操作だけが他のノードに送信できる。データへの中間アクセスは一貫性を保つことなく行える。その結果、一貫性を維持するために消費されるチップ間の帯域幅を低減できる。
【００１８】
以下に、発明の実施例を参照する。ただし、発明は具体的に記載される実施例に制限されないことは理解されるべきである。
システムの例
【００１９】
図２は、発明のある実施例によるＣＰＵ２１０とアクセラレータ２２０を収容する例示的なマイクロプロセッサシステム２００を表す。システム２００のＣＰＵ２１０とアクセラレータ２２０は、２つ以上のノードに編成できる。各ノードはプロセッサまたはアクセラレータおよび共有メモリ・デバイスのあらゆる組み合わせを収容することができる。共有メモリは、ノード内のプロセッサおよびアクセラレータもしくはプロセッサまたはアクセラレータでアクセス可能であり、またリモート・ノードのプロセッサおよびアクセラレータもしくはプロセッサまたはアクセラレータでアクセス可能である。メモリのアクセス時間は、要求するデバイスに対するメモリの位置によって変わる。当該メモリ・アクセスはノンユニフォーム・メモリ・アクセス（ＮＵＭＡ）と呼ばれる。例えば、プロセッサによるそのホーム・ノード内のメモリへのアクセスは、リモート・ノードのメモリへのアクセスよりも速いであろう。
【００２０】
効率を高めるために、プロセッサと共有メモリは各ノードに選択的にクラスターして、メモリのアクセス時間を短縮できる。例えば、あるメモリ・デバイスのデータに頻繁にアクセスするプロセッサとアクセラレータを同じノードのメモリ・デバイスと一緒にクラスターできる。また、オペレーティング・システムのサポートは、プロセッサをプロセッサが実行するたびに同じノードで実行するようスケジューリングすることによって、ノード間のアクセス頻度を減少できる。
【００２１】
アクセラレータはＣＰＵの要求により専門のタスクのみを行うため、アクセラレータはＣＰＵを収容するノードとは別のノードにクラスターできる。したがって、システム２００では、ＣＰＵ２１０はノード０にクラスターし、アクセラレータ２２０はノード１にクラスターしている。２つのノードを図示しているが、当業者には、システムにあらゆる数のノードを実装できることは認識されるであろう。複数のノードの各々をリンク２３０で相互接続できる。
【００２２】
図示するように、ノード０は１組のＣＰＵ２１０（図２では４つ示される）を収容する。各ＣＰＵはローカライズしたキャッシュ・メモリ２１１をもつことができる。図では専用のローカライズしたキャッシュを図示しているが、当業者には、複数のレベルのキャッシュ・メモリも実装できることは認識されるであろう。また、一又は複数のレベルのキャッシュをＣＰＵ間で共有してもよい。
【００２３】
ノード０は各ＣＰＵに通信可能に接続される非ローカル・メモリ２１２も収容できる。メモリ２１２はダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）などのランダム・アクセス・メモリであることが好ましい。メモリ２１２はＣＰＵにより処理が必要なデータを収容するのに十分な大きさであろう。キャッシュ・メモリ２１１のようなローカライズしたキャッシュ・メモリへのＣＰＵのアクセスは、メモリ２１２のような非ローカル・メモリへのアクセスよりも速いため、各ＣＰＵで処理するデータのブロックは処理のためにメモリ２１２からローカル・キャッシュ・メモリ２１１にコピーできる。メモリ２１２は、リンク２３０を介して他のノードのＣＰＵおよびアクセラレータもしくはＣＰＵまたはアクセラレータからアクセスできる共有メモリでもよい。
【００２４】
メモリ２１２は他のノードからアクセス可能な共有メモリであるため、ノード０はノード・ディレクトリ２１３を収容して、他のノードでキャッシュされるメモリ２１２からブロックのコピーを追跡することもできる。ノード・ディレクトリ２１３を使用する利点は、システムがある操作についてあるアドレスの使用で能動的な役割を現在果たしているプロセッサだけをそのアドレスに通知できることである。例えば、ノード・ディレクトリは、他のノードでキャッシュされる共有メモリのアドレス、そのノードの位置、およびそのデータのステータスに関する情報を収容できる。そのため、メモリ・アクセスは、ある特定のアドレスが別のノードでキャッシュされ、データが変更されている場合に限り、他のノードに送信できる。そのため、ノード・ディレクトリを使用することにより、すべてのアドレスおよびコマンドをすべてのノードに送信する必要がなく、それによってシステムのオーバーヘッド、レイテンシ、およびリンク全体の帯域幅消費を低減する。
【００２５】
ノード１は一又は複数のアクセラレータ２２０を含むことができる。ＣＰＵと同様、各アクセラレータ２２０は対応する専用のキャッシュ・メモリ２２１をもつことができる。図面には図示していないが、それでも当業者には複数のキャッシュ・レベルを実装することもできることは認識されるであろう。また、一又は複数のキャッシュ・レベルはノードのアクセラレータ間で共有してもよい。ノード内のアクセスはリンク２３０で他のノードにアクセスするよりも速いため、アクセラレータで処理するデータは処理のために各キャッシュ・メモリ２２１にコピーできる。
【００２６】
ノード１は非ローカル・メモリ２２２を収容できる。メモリ２２２は他のノードでアクセス可能な共有メモリでもよい。メモリ２１２と同様、メモリ２２２はＤＲＡＭデバイスなどのランダム・アクセス・メモリ・デバイスでもよい。共有メモリ２２２がノード１に含まれる場合、ディレクトリ２２３も含めて、他のノードでキャッシュされるメモリ２２２からブロックのコピーを追跡してもよい。
【００２７】
各アクセラレータは対応するオプションのローカル・ストア２２４ももつことができる。ローカル・ストア２２４は主にそれに付加されるアクセラレータからアクセスされる一貫的でないメモリでよい。ローカル・ストア２２４はその各アクセラレータからしかアクセスできないため、ローカル・ストアは一貫性を保たなくてもよい。そのため、アクセラレータと対応するローカル・ストアとのトランザクションは、他のノードに伝播して一貫性を確保したり、または同じノード内でキャッシュする必要はない。
【００２８】
アクセラレータで処理するデータはローカル・ストア２２４に収容できる。そのため、初期データおよび中間結果のために各アクセラレータによるそのローカル・ストアへのアクセスは、リンク２３０の帯域幅の要求に追加されない。最終結果は、ＣＰＵ２１０からアクセスされる前に、ソフトウェアでローカル・ストアからメモリ２１２または２２２にコピーできる。ソフトウェアはアクセラレータとＣＰＵのこの種の共有データへのアクセスを協調および同期することもできる。
【００２９】
実施例には、メモリ２２２、キャッシュ２２１、およびローカル・ストア２２４をオプションにでき、そのためノード１から省けるものもある。上記デバイスの一又は複数のを含めることには、いくつかの要因が影響するであろう。例えば、前述したように、ノード全体のメモリ・アクセスはローカル・メモリへのアクセスよりも遅くなるので、キャッシュ２２１およびローカル・ストア２２４を含めることは有利になるであろう。そのため、キャッシュとローカル・ストアを含めることで、レイテンシとチップ間の帯域幅消費を低減できる。アクセラレータが大量のデータを処理する場合、他のノードの共有メモリへのアクセスはノード内の共有メモリへのアクセスよりも遅くなるため、メモリ２２２を含めるのが有利であろう。キャッシュと同様、メモリを含めることはレイテンシおよびチップ間の帯域幅を低減できる。さらに別の要因は、メモリが含まれる場合に必要となるかもしれないディレクトリのサイズと複雑さであろう。大容量のメモリはより大きく、より複雑なディレクトリを必要とし、それが性能を低下させる障害となりうる。
【００３０】
図３は、共有メモリ２２２を省いた発明の代替実施例である。したがって、追跡すべき共有位置がないため、ノード・ディレクトリ２２３も省かれている。実施例には、図３のキャッシュ２２１はごく少量のデータだけをキャッシュできるものもある。例えば、各キャッシュ２２１は６つのキャッシュラインしか収容できない。その結果、ノード・ディレクトリ２１３は、４つのキャッシュ２２１の各々の６つのアドレスに対応する２４アドレスしか追跡できない。そのため、ＣＰＵのメモリ２１２へのアクセスは、アドレスがノード１の２４つの位置の１つでキャッシュされない限り、ノード１に送信する必要はなく、それによってノード全体の一貫性を維持するための帯域幅の消費を低減できる。
【００３１】
ローカル・キャッシュ・メモリ２１１および２２１は、別のノードの共有メモリ・デバイス（メモリ２１２および２２２など）からのデータのコピーを収容できるため、一貫性がとれる。そのため、キャッシュ２１１および２２１のブロックの変更状態を追跡して、一貫性を確保できる。例えば、アクセラレータがすでにそのキャッシュにあるブロックに書き込み、そのブロックが変更されない場合、ブロックを収容するすべてのノードの少なくとも１つのキャッシュの状態は移行する必要があろう。この場合、ブロックのアドレスは当該キャッシュのすべてに送信する必要がある。アドレス割り当てされるブロックは他のキャッシュで無効な状態に移行でき、アクセラレータのキャッシュだけが変更された状態に移行されるであろう。同時に、ブロックのメモリ位置がアクセラレータとは別のノードにある場合、そのノードのノード・ディレクトリを更新して、ブロックがアクセラレータのリモート・ノードで変更されたことを示すこともできる。
【００３２】
同様に、メモリ・ブロックが共有メモリで更新される場合、ブロックをキャッシュしたすべての位置も更新または無効にしなければならない。ただし、本発明の利点は、アクセラレータによる最初の読み出し操作、書き込み操作、および同期だけを送信すればよいことである。
読み出し操作
【００３３】
最初の読み出し操作とは、アクセラレータによる処理が必要なデータをノード０の共有メモリ位置からノード１に転送する操作である。このアクセスを一貫性を維持するように行って、確実にアクセラレータがシステムで利用できる最新版のデータをもつようにできる。読み出し操作は各アクセラレータのＤＭＡコントローラでリンク２３０にわたるダイナミック・メモリ・アクセス（ＤＭＡ）で行える。ノード１のアクセラレータによるメモリ２１２のような共有メモリ位置へのＤＭＡアクセスは、データが一貫的でないローカル・ストアに転送される、または一貫的なキャッシュもしくはメモリに転送されるかを示すことができる。データが一貫性ユニットに転送される場合、データの位置、アドレス、およびステータスを示すエントリをノード・ディレクトリ２１３に行う。しかし、データがローカル・ストアに転送される場合、ノード・ディレクトリにエントリしない。
【００３４】
一般に、リモート共有メモリから読み出されるデータは、アクセラレータに対応するローカル・ストアに格納できる。ローカル・ストアは一貫性を維持しないため、アクセラレータは操作を行って、ローカル・ストアのデータを変更できる。ローカル・ストアへのアクセスは他のノードには送信されず、それにより帯域幅の消費を低減する。また、ノード０のノード・ディレクトリにエントリしないため、ローカル・ストアに転送されるメモリ位置へのＣＰＵアクセスはノード１に送信する必要がない。
【００３５】
しかし、読み出し操作の中にはデータをローカル・ストア以外の一貫性ユニットに転送させるものもある。例えば、仮想アドレスのハードウェア翻訳に使うアトミック操作およびページ・テーブル・エントリをキャッシュすることがある。これらキャッシュのデータでのアクセラレータによる操作は一貫的(coherent)であり、他のノードにアドレスを送信する必要がある。同様に、この同じデータに関して他のノードのＣＰＵまたはアクセラレータによる操作は一貫的であり、他のノードからアドレスを送信する必要がある。
【００３６】
図５は、共有メモリを収容するノードのノード・ディレクトリにエントリを行うかどうかを判定するために行う操作のフロー図である。操作はステップ４０１でアクセラレータを収容するノードから読み出し要求を受け取ることによって開始する。ステップ４０２で、読み出し要求が、データ読み出しがローカル・ストアに転送されることを示す場合、ステップ４０３でノード・ディレクトリへのエントリは行わない。他方、読み出し要求が、データをキャッシュまたはメモリ・ユニットなどの一貫性ユニットに転送することを示す場合には、ステップ４０４で転送されるアドレス、転送の位置、およびデータのステータスを示すエントリをノード・ディレクトリに行える。
【００３７】
図４は、ノード０のＣＰＵ２１０とノード１のアクセラレータ２２０が一貫性を保ってアクセスする共有メモリ２１２のメモリ（ブロック１）のブロックを表す。例えば、ブロック１はノード０のＣＰＵ２１０ａで処理するためにキャッシュ・メモリ２１１にキャッシュできる。その後、ブロック１のコピーをノード１に送ることを要求するとともに、ブロック１に関わるタスクはノード１のアクセラレータ２２０ａに委譲できる。ブロック１はＣＰＵ２１０ａで変更されているかもしれないため、ブロックをノード１に送る前に、キャッシュ２１１ａはブロック１のコピーが更新されているかを点検しなければならない。ノード・ディレクトリ２１３も、ブロック１がある他のノードでキャッシュされて、変更されているかどうかを判定するために点検する。実施例には、ノード・ディレクトリはキャッシュ２１１ａのスヌープと同時に点検するものもある。ノード・ディレクトリ２１３が、ブロック１がノード２でキャッシュされて変更されていることを示す場合、ブロック１のアドレスをノード２に送る。ブロックの宛先ノード番号０もノード２に送る。ノード２のキャッシュはアドレスをスヌープして、キャッシュ２３１にブロック１を見つける。これでブロック１をノード０に転送できる。当業者には、ノード０によりノード１の宛先ノード番号をノード２に提供できることも認識されるであろう。そのため、ノード２で変更されたブロックはノード１に直接転送できる。
【００３８】
図６は、第１リモート・ノードの共有メモリ（メモリ２１２など）でアクセラレータが読み出し操作中に、メモリ・ブロックの最新のコピーが確実に提供されるために行う例示的な操作のフロー図である。操作はステップ５０１で、要求されるメモリのブロックが第１リモート・ノード内でキャッシュされるかどうかを判定することによって開始する。ブロックが第１リモート・ノード内でキャッシュされる場合、ステップ５０２でブロックはデータに変更が行われているかを点検する。ブロックが変更されている場合、ブロックは変更されたブロックを収容するキャッシュから直接読み出される。
【００３９】
要求されるブロックが第１リモート・ノードでキャッシュされていない場合、またはブロックはキャッシュされたが変更されていない場合、ステップ５０４で、ブロックが第２リモート・ノードでキャッシュされたかどうか、およびブロックが変更されているかどうかを判定する。これは、例えば、ブロックがキャッシュされ変更される位置を示すことのできるノード・ディレクトリを調べることによって行える。ブロックが第２リモート・ノードでキャッシュされ、変更されている場合、ステップ５０８でブロックのアドレスを第２リモート・ノードに送ってスヌープできる。ステップ５０６で、変更されたブロックは第２リモート・ノードの変更ブロックを収容するキャッシュから読み出すことができる。
【００４０】
メモリ・ブロックが第２リモート・ノードでキャッシュされていない場合、または第２リモート・ノードでキャッシュされたブロックが変更されていない場合、ステップ５０７で、ブロックは第１リモート・ノードの共有メモリ・デバイスから読み出せる。当業者には、メモリのブロックが第１リモート・ノードのキャッシュと第２リモート・ノードのキャッシュの両方でキャッシュされる場合、最も最近に変更されたブロックを読み出せることも認識されるであろう。
【００４１】
アクセラレータとは対照的に、ＣＰＵによるほとんどの読み出し操作はリモート・ノードでキャッシュされない位置および、ＣＰＵのノードのメモリに行うであろう。このような場合、読み出されるブロックのアドレスはリモート・ノードに送信する必要はない。また、ブロックがリモート・ノードでキャッシュされているが変更されていない場合でも、アドレスを送信する必要はない。これらすべての場合において、ＣＰＵのノードのノード・ディレクトリを使用して、他のノードのブロックの状態を判定できる。このように、ノード・ディレクトリを使って、他のノードへのほとんどのアドレスの送信を避けることができる。
【００４２】
ＣＰＵが独自のノードの共有メモリのある位置で読み出しを行う場合、アドレスはそのノードの他のキャッシュでスヌープする。当該キャッシュが変更ブロックを収容する場合、ブロックは変更ブロックを収容するキャッシュから直接読み出せる。要求されるブロックがそのノードでキャッシュされていない場合、またはブロックはキャッシュされているが変更されていない場合、ノード・ディレクトリを点検する。ブロックがリモート・ノードでキャッシュされ、かつ変更されている場合、アドレスがリモート・ノードに送信され、そこでスヌープされる。変更データは、さらにリモート・ノードの変更ブロックを収容するキャッシュから読み出しされる。実施例には、リモート・キャッシュとノード・ディレクトリのステータスを、キャッシュラインが変更されていないことを示すように変えるものもある。変更データはメモリにも書き込める。当業者によく知られる代替キャッシュ・プロトコルを使えば、メモリの書き込みを避けることができるであろうし、他のキャッシュの状態が起こりうる。
書き込み操作
【００４３】
書き込み操作とは、アクセラレータによる処理の後、ノード１のアクセラレータからノード０の共有メモリにデータを戻す操作といえる。読み出し操作と同様に、書き込み操作もリモート・ノードの共有メモリへのＤＭＡアクセスにより行える。このデータの古くなったコピーをシステムの他のキャッシュで使用しているかもしれないので、この操作も一貫性を保つように行って、古くなったデータを収容するキャッシュを更新できる。
【００４４】
図４に戻ると、ブロック１はまずノード１のアクセラレータ２２０ａで処理するために、キャッシュ２２１ａでキャッシュされているかもしれない。また、ＣＰＵ２１０ａで処理するためにキャッシュ２１１ａで、またはノード２のアクセラレータ２３０で処理するためにキャッシュ２３１でキャッシュされるかもしれない。ＣＰＵ２１０ａがブロックを処理する前に、ブロック１はアクセラレータ２２０ａで変更されて、共有メモリ２１２にライトバックすることができる。実施例には、アクセラレータ２２０ａがブロック１に書き込むとき、ブロック１をキャッシュ２１１ａおよびキャッシュ２３１で無効にできるものもある。無効化は、ＣＰＵ２１０ａが古いデータにアクセスしないように行える。他の実施例では、アクセラレータ２２０ａがブロック１に書き込むとき、ブロック１はキャッシュ２１１ａおよびキャッシュ２３１で最新データに更新できる。いずれにしても、ＣＰＵ２１０ａとアクセラレータ２３０は、アクセラレータ２２０ａがブロック１に書き込んだ後は、古いデータへのアクセスを防止される。そのため、アクセラレータによる書き込み操作を一貫的に行える。
【００４５】
図７は、アクセラレータがデータ処理を完了した後、すべてのキャッシュが確実に更新されるように行える例示的な操作を表す。操作はステップ６０６で、アクセラレータが第１リモート・ノードの共有メモリ（メモリ２１２など）位置にＤＭＡ書き込み操作を行って開始する。ステップ６０１で、第１リモート・ノードのキャッシュは書き込み操作のアドレスをスヌープして、アドレスがローカルにキャッシュされているかどうかを判定できる。アドレスがキャッシュされている場合、ステップ６０２でそのキャッシュはメモリ・ブロックのその各コピーを新たな書き込みデータに更新できる。前述したように、実施例には、キャッシュがそのコピーを更新する代わりに、メモリ・ブロックのその各コピーを無効にできるものもある。
【００４６】
ステップ６０３で、書き込みのアドレスが第２リモート・ノードでキャッシュされているかどうかを判定する。これは、アドレス割り当てされるメモリ・ブロックがキャッシュされている他のノードの位置を見つけるノード・ディレクトリを調べることによって行える。メモリ・ブロックが第２リモート・ノードでキャッシュされている場合、ステップ６０７でそのアドレスを第２リモート・ノードに送信できる。ステップ６０４で、アドレスは第２リモート・ノードのキャッシュによりスヌープでき、アドレス割り当てされるメモリ・ブロックを収容するキャッシュを新たな書き込みデータに更新できる。他の実施例では、アドレス・ブロックを第２リモート・ノードのキャッシュで無効にしてもよい。ステップ６０５で、データは第１リモート・ノードの共有メモリに書き込める。
【００４７】
ＣＰＵによる書き込み操作は、主にＣＰＵのノードの共有メモリの位置に行われる。このような場合、書き込みされるブロックのアドレスはリモート・ノードに送信する必要はない。ＣＰＵのノードのノード・ディレクトリを使って、他のノードのブロックの状態を判定できる。このため、ノード・ディレクトリを使って、ほとんどのアドレスを他のノードに送信することを回避できる。
【００４８】
ＣＰＵが独自のノードのメモリの位置に書き込みを行う場合、考慮すべきいくつかのケースがある。１つには、アドレス割り当てされるブロックがＣＰＵに付加するキャッシュにすでにあり、ブロックがすでに変更されていることがある。この場合、キャッシュは単に新たなデータに更新すればよい。
【００４９】
２番目のケースでは、アドレス割り当てされるブロックがＣＰＵに付加するキャッシュにすでにあるが、ブロックが変更されていない場合である。この場合、アドレスはそのノードの他のキャッシュでスヌープできる。当該キャッシュが変更ブロックを収容する場合、ブロックを無効化できる。ノード・ディレクトリも点検できる。ブロックがリモート・ノードでキャッシュされる場合、アドレスはリモート・ノードに送信されて、そこでスヌープできる。ブロックはリモート・キャッシュで無効化してもよい。さらにＣＰＵのキャッシュは書き込みデータに更新できる。
【００５０】
３番目のケースでは、アドレス割り当てされるブロックがＣＰＵに付加されるキャッシュにない。この場合、アドレスはノードの他のキャッシュでスヌープできる。いずれかの当該キャッシュがブロックを収容し、それが変更されている場合、データはこのキャッシュから読み出せる。ノード・ディレクトリも点検できる。ブロックがリモート・ノードでキャッシュされる場合、アドレスをリモート・ノードに送信して、そこでスヌープできる。いずれかのリモート・キャッシュがブロックを収容し、それが変更されている場合、データはそのキャッシュから読み出せる。どのキャッシュもブロックの変更コピーをもたない場合、ブロックはメモリから読み出せる。ブロックはＣＰＵのキャッシュを除くすべてのキャッシュで無効にできる。またＣＰＵのキャッシュは書き込みデータで更新できる。
【００５１】
始めに一貫的にアクセスしたデータで一貫的でないアクセスを行うことにより、システムの他のノードへのアドレスおよびコマンドの送信は一貫的でないアクセスのためになくすことができる。データ処理が完了した後、アクセラレータはデータを一貫的にライトバックできる。そのため、マルチプロセッシング・システムのノード全体のメモリ一貫性を維持するための帯域幅の消費を低減しながら、データの一貫性を維持できる。
【００５２】
上記述べたことは本発明の実施例に関係するが、発明の他の実施例および別の実施例もその基本的な範囲を逸脱することなく考えられ、その範囲は請求項によって判断される。
【図面の簡単な説明】
【００５３】
【図１】中央処理装置（ＣＰＵ）に連結したアクセラレータを表す先行技術の図である。
【図２】発明のある実施例による例示的なマルチプロセッシング・システムの図である。
【図３】発明のある実施例による例示的なマルチプロセッシング・システムの別の図である。
【図４】あるノード内のＣＰＵと別のノード内のアクセラレータによりアクセスされる共有メモリのブロックの図である。
【図５】共有メモリを収容するノードのディレクトリにエントリを行わなければならないかどうかを判定するために行う例示的な操作のフロー図である。
【図６】要求されるメモリ・ブロックの最も最近に変更されたコピーをアクセラレータに提供するために行う例示的な操作のフロー図である。
【図７】アクセラレータが共有メモリにライトバックするメモリのキャッシュしたコピーのすべてを更新するために行う例示的な操作のフロー図である。
【図１】
0005431525.tif 000002
【図２】
0005431525.tif 000003
【図３】
0005431525.tif 000004
【図４】
0005431525.tif 000005
【図５】
0005431525.tif 000006
【図６】
0005431525.tif 000007
【図７】
0005431525.tif 000008