(57)【特許請求の範囲】
【請求項１】
マルチコアシステムに適用される、前記マルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法であり、前記マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含み、前記共有データキャッシュ内のデータブロックは、前記複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされ、前記マルチコアシステムは、前記データ訪問者ディレクトリを更に含み、前記データ訪問者ディレクトリは、前記共有データキャッシュ内の前記データブロックの訪問者についての情報を記録するために使用され、前記データブロックの前記訪問者は、前記データブロックのコピーが記憶されている前記プロセッサコアであり、
前記データ訪問者ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、前記単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは前記単一ポインタエントリと前記共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、前記共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用される方法であって、
第１のプロセッサコアにより送信された第１のアクセス要求を受信するステップであり、前記第１のアクセス要求は、前記データ訪問者ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用されるステップと、
前記第１のアクセス要求に従って、前記単一ポインタエントリ配列が前記第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するステップと、
前記第１の単一ポインタエントリに従って、前記共有エントリ配列が前記第１の単一ポインタエントリに関連付けられた第１の共有エントリを有すると決定した場合、前記第１の共有エントリに従って、前記第１のデータブロックの複数の訪問者を決定するステップと
を含む方法。
【請求項２】
前記単一ポインタエントリ配列内の前記単一ポインタエントリは、前記データブロックが前記マルチコアシステム内の全てのプロセッサコアにより共有されることを示すために更に使用され、前記方法は、
前記第１の単一ポインタエントリに従って、前記共有エントリ配列が前記第１の単一ポインタエントリに関連付けられた第１の共有エントリを有さないと決定した場合、前記第１の単一ポインタエントリに従って、前記第１のデータブロックの単一の訪問者、又は前記第１のデータブロックが前記マルチコアシステム内の全ての前記プロセッサコアにより共有されることを決定するステップ
を更に含む、請求項１に記載の方法。
【請求項３】
第２のプロセッサコアにより送信された第２のアクセス要求を受信するステップであり、前記第２のアクセス要求は、前記データ訪問者ディレクトリ内の前記第１のデータブロックに対応する前記エントリにアクセスするために使用されるステップと、
前記第２のアクセス要求に従って、前記単一ポインタエントリ配列が前記第１のデータブロックに対応する前記第１の単一ポインタエントリを有すると決定するステップと、
前記第１の単一ポインタエントリに従って、前記共有エントリ配列が前記第１の単一ポインタエントリに関連付けられた共有エントリを有さないと決定した場合、前記第１の単一ポインタエントリに従って、前記第１のデータブロックの前記単一の訪問者が前記第１のプロセッサコアであると決定するステップと、
前記共有エントリ配列内の前記第１の共有エントリを割り当て、前記第１の単一ポインタエントリと前記第１の共有エントリとの間に関連付け関係を確立し、前記第１のプロセッサコアについての前記情報及び前記第２のプロセッサコアについての情報を前記第１の共有エントリに記録するステップと
を更に含む、請求項１又は２に記載の方法。
【請求項４】
前記共有エントリ配列内の前記第１の共有エントリを割り当てるステップは、
前記共有エントリ配列が未使用の共有エントリを有する場合、前記第１の共有エントリとして、前記未使用の共有エントリから共有エントリを選択するステップ、又は
前記共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリを有する場合、前記第１の共有エントリとして、前記１つのみの訪問者についての前記情報を記録する前記共有エントリを選択するステップ、又は
前記共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリも有さない場合、前記第１の共有エントリとして、最長時間未使用の原理に従って、共有エントリを選択するステップ
を含む、請求項３に記載の方法。
【請求項５】
前記単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含み、前記タグは、前記データブロックに対応させるために使用され、前記共有エントリ関連付けビットは、前記単一ポインタエントリが前記共有エントリに関連付けられているか否かを示すために使用され、前記単一ポインタは、前記データブロックが前記単一の訪問者を有する場合、前記データブロックの前記単一の訪問者についての前記情報を記録し、前記単一ポインタエントリが前記共有エントリに関連付けられている場合、前記単一ポインタエントリと前記共有エントリとの間の前記関連付けについての前記情報を記録するために使用され、
前記共有エントリは、共有者記録構造と関連付け構造とを含み、前記共有者記録構造は、前記データブロックの前記複数の訪問者についての前記情報を記録するために使用され、前記関連付け構造は、前記単一ポインタエントリを関連付けるために使用される、請求項１乃至４のうちいずれか１項に記載の方法。
【請求項６】
前記単一ポインタエントリは、全共有ビットを更に含み、
前記全共有ビットは、前記単一ポインタエントリが前記共有エントリに関連付けられていない場合、前記データブロックが前記単一の訪問者を有することを示すため、或いは前記データブロックが前記マルチコアシステム内の全ての前記プロセッサコアにより共有されることを示すために使用される、請求項５に記載の方法。
【請求項７】
マルチコアシステム内にあるデータ訪問者ディレクトリを記憶するように構成されたディレクトリ記憶ユニットであり、前記マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含み、前記共有データキャッシュ内のデータブロックは、前記複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされ、前記データ訪問者ディレクトリは、前記共有データキャッシュ内の前記データブロックの訪問者についての情報を記録するために使用され、前記データブロックの前記訪問者は、前記データブロックのコピーが記憶されている前記プロセッサコアであり、前記データ訪問者ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、前記単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは前記単一ポインタエントリと前記共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、前記共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用されるディレクトリ記憶ユニットと、
第１のプロセッサコアにより送信された第１のアクセス要求を受信するように構成され、前記第１のアクセス要求は、前記データ訪問者ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用され、
前記第１のアクセス要求に従って、前記単一ポインタエントリ配列が前記第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するように構成され、
前記第１の単一ポインタエントリに従って、前記共有エントリ配列が前記第１の単一ポインタエントリに関連付けられた第１の共有エントリを有すると決定した場合、前記第１の共有エントリに従って、前記第１のデータブロックの複数の訪問者を決定するように構成された実行ユニットと
を含むディレクトリキャッシュデバイス。
【請求項８】
前記単一ポインタエントリ配列内の前記単一ポインタエントリは、前記データブロックが前記マルチコアシステム内の全てのプロセッサコアにより共有されることを示すために更に使用され、前記実行ユニットは、
前記第１の単一ポインタエントリに従って、前記共有エントリ配列が前記第１の単一ポインタエントリに関連付けられた第１の共有エントリを有さないと決定した場合、前記第１の単一ポインタエントリに従って、前記第１のデータブロックの単一の訪問者、又は前記第１のデータブロックが前記マルチコアシステム内の全ての前記プロセッサコアにより共有されることを決定するように更に構成される、請求項７に記載のディレクトリキャッシュデバイス。
【請求項９】
前記実行ユニットは、
第２のプロセッサコアにより送信された第２のアクセス要求を受信するように更に構成され、前記第２のアクセス要求は、前記データ訪問者ディレクトリ内の前記第１のデータブロックに対応する前記エントリにアクセスするために使用され、
前記第２のアクセス要求に従って、前記単一ポインタエントリ配列が前記第１のデータブロックに対応する前記第１の単一ポインタエントリを有すると決定するように更に構成され、
前記第１の単一ポインタエントリに従って、前記共有エントリ配列が前記第１の単一ポインタエントリに関連付けられた共有エントリを有さないと決定した場合、前記第１の単一ポインタエントリに従って、前記第１のデータブロックの前記単一の訪問者が前記第１のプロセッサコアであると決定するように更に構成され、
前記共有エントリ配列内の前記第１の共有エントリを割り当て、前記第１の単一ポインタエントリと前記第１の共有エントリとの間に関連付け関係を確立し、前記第１のプロセッサコアについての前記情報及び前記第２のプロセッサコアについての情報を前記第１の共有エントリに記録するように更に構成される、請求項７又は８に記載のディレクトリキャッシュデバイス。
【請求項１０】
前記実行ユニットは、
前記共有エントリ配列が未使用の共有エントリを有する場合、前記第１の共有エントリとして、前記未使用の共有エントリから共有エントリを選択するように構成され、或いは
前記共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリを有する場合、前記第１の共有エントリとして、前記１つのみの訪問者についての前記情報を記録する前記共有エントリを選択するように構成され、或いは
前記共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリも有さない場合、前記第１の共有エントリとして、最長時間未使用の原理に従って、共有エントリを選択するように構成される、請求項９に記載のディレクトリキャッシュデバイス。
【請求項１１】
前記単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含み、前記タグは、前記データブロックに対応させるために使用され、前記共有エントリ関連付けビットは、前記単一ポインタエントリが前記共有エントリに関連付けられているか否かを示すために使用され、前記単一ポインタは、前記データブロックが前記単一の訪問者を有する場合、前記データブロックの前記単一の訪問者についての前記情報を記録し、前記単一ポインタエントリが前記共有エントリに関連付けられている場合、前記単一ポインタエントリと前記共有エントリとの間の前記関連付けについての前記情報を記録するために使用され、
前記共有エントリは、共有者記録構造と関連付け構造とを含み、前記共有者記録構造は、前記データブロックの前記複数の訪問者についての前記情報を記録するために使用され、前記関連付け構造は、前記単一ポインタエントリを関連付けるために使用される、請求項７乃至１０のうちいずれか１項に記載のディレクトリキャッシュデバイス。
【請求項１２】
前記単一ポインタエントリは、全共有ビットを更に含み、
前記全共有ビットは、前記単一ポインタエントリが前記共有エントリに関連付けられていない場合、前記データブロックが前記単一の訪問者を有することを示すため、或いは前記データブロックが前記マルチコアシステム内の全ての前記プロセッサコアにより共有されることを示すために使用される、請求項１１に記載のディレクトリキャッシュデバイス。
【請求項１３】
複数のプロセッサコアと、共有データキャッシュと、請求項７乃至１２のうちいずれか１項に記載のディレクトリキャッシュデバイスとを含むマルチコアシステム。
【請求項１４】
マルチコアシステム内にあるデータ訪問者ディレクトリを記憶するように構成されたディレクトリ記憶ユニットであり、前記マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含み、前記共有データキャッシュ内のデータブロックは、前記複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされ、前記データ訪問者ディレクトリは、前記共有データキャッシュ内の前記データブロックの訪問者についての情報を記録するために使用され、前記データブロックの前記訪問者は、前記データブロックのコピーが記憶されている前記プロセッサコアであるディレクトリ記憶ユニットであって、
前記データ訪問者ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、
前記単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは前記単一ポインタエントリと前記共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、
前記共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用されるディレクトリ記憶ユニット。
【請求項１５】
前記単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含み、前記タグは、前記データブロックに対応させるために使用され、前記共有エントリ関連付けビットは、前記単一ポインタエントリが前記共有エントリに関連付けられているか否かを示すために使用され、前記単一ポインタは、前記データブロックが前記単一の訪問者を有する場合、前記データブロックの前記単一の訪問者についての前記情報を記録し、前記単一ポインタエントリが前記共有エントリに関連付けられている場合、前記単一ポインタエントリと前記共有エントリとの間の前記関連付けについての前記情報を記録するために使用され、
前記共有エントリは、共有者記録構造と関連付け構造とを含み、前記共有者記録構造は、前記データブロックの前記複数の訪問者についての前記情報を記録するために使用され、前記関連付け構造は、前記単一ポインタエントリを関連付けるために使用される、請求項１４に記載のディレクトリ記憶ユニット。
【請求項１６】
前記単一ポインタエントリは、全共有ビットを含み、
前記全共有ビットは、前記単一ポインタエントリが前記共有エントリに関連付けられていない場合、前記データブロックが前記単一の訪問者を有することを示すため、或いは前記データブロックが前記マルチコアシステム内の全てのプロセッサコアにより共有されることを示すために使用される、請求項１５に記載のディレクトリ記憶ユニット。
【請求項１７】
前記共有者記録構造はベクトルである、請求項１５又は１６に記載のディレクトリ記憶ユニット。
【請求項１８】
コンピュータに、請求項１乃至６のうちいずれか１項に記載のマルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法を実行させるように構成されたコンピュータプログラム。
【請求項１９】
請求項１８に記載のコンピュータプログラムを記憶したコンピュータ読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報技術の分野に関し、より具体的には、マルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法、ディレクトリキャッシュデバイス、マルチコアシステム及びディレクトリ記憶ユニットに関する。
【背景技術】
【０００２】
マルチコア（Multi-Core）プロセッサ又は多コア（Many  Core）プロセッサの用途には、データブロックがプロセッサ内の１つ以上のプロセッサコアによりアクセスされるいくつかのシナリオが存在する。このシナリオでは、データブロックは、通常では、１つ以上のプロセッサコアによりアクセスされるように、共有記憶空間に記憶される。データブロックへのアクセスを速めるために、データブロックのコピーが、データブロックにアクセスした１つ以上のプロセッサコア内のプライベートキャッシュ内に生成される（すなわち、データブロックは、プロセッサコア内の１つ以上のプライベートキャッシュに記憶される）。このように、データブロックにアクセスしたコアが再びデータブロックにアクセスする必要がある場合、コアは、コアのプライベートキャッシュ内のデータブロックを読み取りさえすればよい。データブロックのコピーは、１つ以上のプロセッサコア内にあり、アクセスされたプライベートキャッシュに記憶されているため、キャッシュ一貫性（Cache  Coherence）問題と呼ばれるコピーの一貫性の問題を解決するように、複数のコア内のプライベートキャッシュ内にあるデータブロックのコピーの一貫性が維持される必要がある。キャッシュ一貫性問題を解決する基本的な原理は、コア内のデータブロックのコピーが変更された場合、他のコア内のデータブロックのコピーが更新される必要があること、或いはデータブロックが無効にされる必要があること（すなわち、データブロックが削除される）である。したがって、データブロックのコピーを記憶するマルチコアプロセッサ内のコアが決定される必要がある（すなわち、データブロックの訪問者が決定される）。
【０００３】
一般的に使用されるキャッシュ一貫性の解決策は、スヌーピング（snooping）に基づく一貫性の解決策と、ディレクトリに基づく一貫性の解決策とを含む。前者に関して、コア内のデータブロックのコピーが変更された場合、データブロックが変更されたことを示すブロードキャストメッセージが、データブロックのコピーが記憶されている他のコアに送信される必要があり、これにより、これらのコアに対してデータブロックのコピーを更新するように、或いはデータブロックを無効にするように命令する。後者に関して、データブロックのアクセスディレクトリが、データブロックの訪問者（すなわち、マルチコアプロセッサ内でデータブロックが記憶されているコア）リストを記録するために使用される。コア内のデータブロックのコピーが変更された場合、データブロックが変更されたことを示す通知メッセージが他の訪問者のみに送信される。プロセッサコアの数量は絶えず増加しているため、スヌーピングに基づく一貫性の解決策は、性能及び帯域幅のボトルネックに直面するが（メッセージのブロードキャストは、大量の処理リソース及び大量の帯域幅を占有する必要がある）、ディレクトリに基づく一貫性のプロトコルは、そのより良いスケーラビリティの理由で広く適用される。
【０００４】
従来のディレクトリに基づく一貫性の解決策では、データブロックの訪問者リストは、ベクトルの形式でディレクトリに記録される。N個のコアを含むマルチコアプロセッサシステムについては、ディレクトリ内の各ディレクトリエントリは、１つのNビットのベクトルを含み、ベクトル内の各ビットが1であるか否かは、N個のコア内にデータブロックのコピーが存在するか否かを示す。この機構では、ディレクトリエントリの数量は、コアの数量の増加と共に線形的に増加するが、データブロックのコピーを記憶するために使用されるキャッシュのサイズは、コアの数量の増加と共に増加しない。その結果、データブロックにより占有されるビットの数量に対してディレクトリにより占有されるビットの数量の比は、コアの数量の増加と共に増加する。したがって、ディレクトリを記憶するために使用される記憶空間がより大きくなり、これは、チップ上マルチコアプロセッサにおけるキャッシュ空間への課題をもたらす。
【発明の概要】
【０００５】
本発明の実施例は、データ訪問者ディレクトリにより占有される記憶リソースを低減することができる、マルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法、ディレクトリキャッシュデバイス、マルチコアシステム及びディレクトリ記憶ユニットを提供する。
【０００６】
第１の態様によれば、マルチコアシステムに適用される、マルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法が提供され、マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含み、共有データキャッシュ内のデータブロックは、複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされ、マルチコアシステムは、データ訪問者ディレクトリを更に含み、データ訪問者ディレクトリは、共有データキャッシュ内のデータブロックの訪問者についての情報を記録するために使用され、データブロックの訪問者は、データブロックのコピーが記憶されているプロセッサコアであり、
ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは単一ポインタエントリと共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用され、
この方法は、
第１のプロセッサコアにより送信された第１のアクセス要求を受信するステップであり、第１のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用されるステップと、
第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するステップと、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有すると決定した場合、第１の共有エントリに従って、第１のデータブロックの複数の訪問者を決定するステップと
を含む。
【０００７】
第１の態様を参照して、第１の可能な実現方式では、単一ポインタエントリ配列内の単一ポインタエントリは、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために更に使用され、この方法は、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有さないと決定した場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者、又は第１のデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを決定するステップ
を更に含む。
【０００８】
第１の態様又は第１の態様の第１の可能な実現方式を参照して、第２の可能な実現方式では、第１のプロセッサコアにより送信された第１のアクセス要求を受信した後に、この方法は、
第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する単一ポインタエントリを有さないと決定するステップと、
単一ポインタエントリ配列において、第１のデータブロックに対応する第１の単一ポインタエントリを第１のデータブロックに割り当て、第１のプロセッサコアについての情報を第１の単一ポインタエントリに記録するステップと
を更に含む。
【０００９】
第１の態様の第２の可能な実現方式を参照して、第３の可能な実現方式では、単一ポインタエントリ配列において、第１のデータブロックに対応する第１の単一ポインタエントリを第１のデータブロックに割り当て、第１のプロセッサコアについての情報を第１の単一ポインタエントリに記録するステップは、
単一ポインタエントリ配列が未使用の単一ポインタエントリを有する場合、第１の単一ポインタエントリとして、未使用の単一ポインタエントリから単一ポインタエントリを選択し、第１のプロセッサコアについての情報を記録するステップ、又は
単一ポインタエントリ配列が未使用の単一ポインタエントリを有さない場合、最長時間未使用の原理に従って、単一ポインタエントリを選択し、選択された単一ポインタエントリが共有エントリに関連付けられておらず、単一の訪問者についての情報を記録する場合、無効メッセージを記録された単一の訪問者に送信し、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するステップ、又は
選択された単一ポインタエントリが共有エントリに関連付けられておらず、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示す場合、無効メッセージを全てのプロセッサコアにブロードキャストし、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するステップ、又は
選択された単一ポインタエントリが共有エントリに関連付けられている場合、選択された単一ポインタエントリに関連付けられた共有エントリに従って、関連付けられた共有エントリに記録された複数の訪問者を決定し、無効メッセージを記録された複数の訪問者に送信し、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するステップ
を含む。
【００１０】
第１の態様の第２又は第３の可能な実現方式を参照して、第４の可能な実現方式では、この方法は、
第２のプロセッサコアにより送信された第２のアクセス要求を受信するステップであり、第２のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用されるステップと、
第２のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するステップと、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた共有エントリを有さないと決定した場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者が第１のプロセッサコアであると決定するステップと、
共有エントリ配列内の第１の共有エントリを割り当て、第１の単一ポインタエントリと第１の共有エントリとの間に関連付け関係を確立し、第１のプロセッサコアについての情報及び第２のプロセッサコアについての情報を第１の共有エントリに記録するステップと
を更に含む。
【００１１】
第１の態様の第４の可能な実現方式を参照して、第５の可能な実現方式では、共有エントリ配列内の第１の共有エントリを割り当てるステップは、
共有エントリ配列が未使用の共有エントリを有する場合、第１の共有エントリとして、未使用の共有エントリから共有エントリを選択するステップ、又は
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリを有する場合、１つのみの訪問者についての情報を記録する共有エントリを選択し、訪問者についての記録された情報を、選択された共有エントリに関連付けられた単一ポインタエントリに書き込むステップ、又は
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリも有さない場合、最長時間未使用の原理に従って、共有エントリを選択し、選択された共有エントリに記録された訪問者の数量が所定の閾値より大きい場合、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すように、選択された共有エントリに関連付けられた単一ポインタエントリを設定し、或いは選択された共有エントリに記録された訪問者の数量が所定の閾値より大きくない場合、記録された訪問者のうち１つの訪問者についての情報を、選択された共有エントリに関連付けられた単一ポインタエントリに書き込み、無効メッセージを記録された訪問者のうち他の訪問者に送信するステップ
を含む。
【００１２】
第１の態様又は第１の態様の前述の可能な実現方式のいずれか１つを参照して、第６の可能な実現方式では、単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含み、タグは、データブロックに対応させるために使用され、共有エントリ関連付けビットは、単一ポインタエントリが共有エントリに関連付けられているか否かを示すために使用され、単一ポインタは、データブロックが単一の訪問者を有する場合、データブロックの単一の訪問者についての情報を記録し、単一ポインタエントリが共有エントリに関連付けられている場合、単一ポインタエントリと共有エントリとの間の関連付けについての情報を記録するために使用され、
共有エントリは、共有者記録構造と関連付け構造とを含み、共有者記録構造は、データブロックの複数の訪問者についての情報を記録するために使用され、関連付け構造は、単一ポインタエントリを関連付けるために使用される。
【００１３】
第１の態様の第６の可能な実現方式を参照して、第７の可能な実現方式では、単一ポインタエントリは、全共有ビットを更に含み、全共有ビットは、単一ポインタエントリが共有エントリに関連付けられていない場合、データブロックが単一の訪問者を有することを示すため、或いはデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために使用される。
【００１４】
第２の態様によれば、ディレクトリキャッシュデバイスが提供され、
マルチコアシステム内にあるデータ訪問者ディレクトリを記憶するように構成されたディレクトリ記憶ユニットであり、マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含み、共有データキャッシュ内のデータブロックは、複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされ、ディレクトリは、共有データキャッシュ内のデータブロックの訪問者についての情報を記録するために使用され、データブロックの訪問者は、データブロックのコピーが記憶されているプロセッサコアであり、ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは単一ポインタエントリと共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用されるディレクトリ記憶ユニットと、
第１のプロセッサコアにより送信された第１のアクセス要求を受信するように構成され、第１のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用され、
第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するように構成され、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有すると決定した場合、第１の共有エントリに従って、第１のデータブロックの複数の訪問者を決定するように構成された実行ユニットと
を含む。
【００１５】
第２の態様を参照して、第１の可能な実現方式では、単一ポインタエントリ配列内の単一ポインタエントリは、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために更に使用され、実行ユニットは、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有さないと決定した場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者、又は第１のデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを決定するように更に構成される。
【００１６】
第２の態様又は第２の態様の第１の可能な実現方式を参照して、第２の可能な実現方式では、実行ユニットが第１のプロセッサコアにより送信された第１のアクセス要求を受信した後に、実行ユニットは、
第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する単一ポインタエントリを有さないと決定し、
単一ポインタエントリ配列において、第１のデータブロックに対応する第１の単一ポインタエントリを第１のデータブロックに割り当て、第１のプロセッサコアについての情報を第１の単一ポインタエントリに記録するように更に構成される。
【００１７】
第２の態様の第２の可能な実現方式を参照して、第３の可能な実現方式では、実行ユニットは、
単一ポインタエントリ配列が未使用の単一ポインタエントリを有する場合、第１の単一ポインタエントリとして、未使用の単一ポインタエントリから単一ポインタエントリを選択し、第１のプロセッサコアについての情報を記録するように更に構成され、或いは
単一ポインタエントリ配列が未使用の単一ポインタエントリを有さない場合、最長時間未使用の原理に従って、単一ポインタエントリを選択し、選択された単一ポインタエントリが共有エントリに関連付けられておらず、単一の訪問者についての情報を記録する場合、無効メッセージを記録された単一の訪問者に送信し、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するように更に構成され、或いは
選択された単一ポインタエントリが共有エントリに関連付けられておらず、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示す場合、無効メッセージを全てのプロセッサコアにブロードキャストし、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するように更に構成され、或いは
選択された単一ポインタエントリが共有エントリに関連付けられている場合、選択された単一ポインタエントリに関連付けられた共有エントリに従って、関連付けられた共有エントリに記録された複数の訪問者を決定し、無効メッセージを記録された複数の訪問者に送信し、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するように更に構成される。
【００１８】
第２の態様の第２又は第３の可能な実現方式を参照して、第４の可能な実現方式では、実行ユニットは、
第２のプロセッサコアにより送信された第２のアクセス要求を受信するように更に構成され、第２のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用され、
第２のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するように更に構成され、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた共有エントリを有さないと決定した場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者が第１のプロセッサコアであると決定するように更に構成され、
共有エントリ配列内の第１の共有エントリを割り当て、第１の単一ポインタエントリと第１の共有エントリとの間に関連付け関係を確立し、第１のプロセッサコアについての情報及び第２のプロセッサコアについての情報を第１の共有エントリに記録するように更に構成される。
【００１９】
第２の態様の第４の可能な実現方式を参照して、第５の可能な実現方式では、実行ユニットは、
共有エントリ配列が未使用の共有エントリを有する場合、第１の共有エントリとして、未使用の共有エントリから共有エントリを選択するように構成され、或いは
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリを有する場合、１つのみの訪問者についての情報を記録する共有エントリを選択し、訪問者についての記録された情報を、選択された共有エントリに関連付けられた単一ポインタエントリに書き込むように構成され、或いは
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者を記録する共有エントリも有さない場合、最長時間未使用の原理に従って、共有エントリを選択し、選択された共有エントリに記録された訪問者の数量が所定の閾値より大きい場合、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すように、選択された共有エントリに関連付けられた単一ポインタエントリを設定し、或いは選択された共有エントリに記録された訪問者の数量が所定の閾値より大きくない場合、記録された訪問者のうち１つの訪問者についての情報を、選択された共有エントリに関連付けられた単一ポインタエントリに書き込み、無効メッセージを記録された訪問者のうち他の訪問者に送信するように構成される。
【００２０】
第２の態様又は第２の態様の前述の可能な実現方式のいずれか１つを参照して、第６の可能な実現方式では、単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含み、タグは、データブロックに対応させるために使用され、共有エントリ関連付けビットは、単一ポインタエントリが共有エントリに関連付けられているか否かを示すために使用され、単一ポインタは、データブロックが単一の訪問者を有する場合、データブロックの単一の訪問者についての情報を記録し、単一ポインタエントリが共有エントリに関連付けられている場合、単一ポインタエントリと共有エントリとの間の関連付けについての情報を記録するために使用され、
共有エントリは、共有者記録構造と関連付け構造とを含み、共有者記録構造は、データブロックの複数の訪問者についての情報を記録するために使用され、関連付け構造は、単一ポインタエントリを関連付けるために使用される。
【００２１】
第２の態様の第６の可能な実現方式を参照して、第７の可能な実現方式では、単一ポインタエントリは、全共有ビットを更に含み、
全共有ビットは、単一ポインタエントリが共有エントリに関連付けられていない場合、データブロックが単一の訪問者を有することを示すため、或いはデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために使用される。
【００２２】
第３の態様によれば、複数のプロセッサコアと、共有データキャッシュと、第２の態様又は第２の態様のいずれかの可能な実現方式によるディレクトリキャッシュデバイスとを含むマルチコアシステムが提供される。
【００２３】
第４の態様によれば、マルチコアシステム内にあるディレクトリを記憶するように構成されたディレクトリ記憶ユニットが提供され、マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含み、共有データキャッシュ内のデータブロックは、複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされ、ディレクトリは、共有データキャッシュ内のデータブロックの訪問者についての情報を記録するために使用され、データブロックの訪問者は、データブロックのコピーが記憶されているプロセッサコアであり、
ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、
単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは単一ポインタエントリと共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、
共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用される。
【００２４】
第４の態様を参照して、第１の可能な実現方式では、単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含み、タグは、データブロックに対応させるために使用され、共有エントリ関連付けビットは、単一ポインタエントリが共有エントリに関連付けられているか否かを示すために使用され、単一ポインタは、データブロックが単一の訪問者を有する場合、データブロックの単一の訪問者についての情報を記録し、単一ポインタエントリが共有エントリに関連付けられている場合、単一ポインタエントリと共有エントリとの間の関連付けについての情報を記録するために使用され、
共有エントリは、共有者記録構造と関連付け構造とを含み、共有者記録構造は、データブロックの複数の訪問者についての情報を記録するために使用され、関連付け構造は、単一ポインタエントリを関連付けるために使用される。
【００２５】
第４の態様の第１の可能な実現方式を参照して、第２の可能な実現方式では、単一ポインタエントリは、全共有ビットを含み、
全共有ビットは、単一ポインタエントリが共有エントリに関連付けられていない場合、データブロックが単一の訪問者を有することを示すため、或いはデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために使用される。
【００２６】
第４の態様の第１又は第２の可能な実現方式を参照して、第３の可能な実現方式では、共有者記録構造はベクトルである。
【００２７】
前述の技術的解決策に基づいて、本発明の実施例では、単一ポインタエントリ配列と共有エントリ配列とを含むディレクトリ構造が使用される。データブロックが単一の訪問者のみを有する場合、単一ポインタエントリのみが、訪問者についての情報を記録するために使用される。データブロックが複数の訪問者を有する場合、訪問者についての情報は、単一ポインタエントリを共有エントリに関連付ける方式で記録される。前述の方式では、ディレクトリ内のディレクトリエントリの平均サイズが比較的大きく圧縮されることが可能になり、性能ロスが比較的小さい。したがって、ディレクトリにより占有される記憶リソースは、低減されることが可能になり、システムのスケーラビリティが改善されることが可能になる。
【図面の簡単な説明】
【００２８】
本発明の実施例における技術的解決策をより明確に説明するために、以下に、本発明の実施例を説明するために必要な添付図面について簡単に説明する。明らかに、以下の説明における添付図面は、単に本発明のいくつかの実施例を示しているに過ぎず、当業者は、創造的取り組みを行うことなく、依然としてこれらの添付図面から他の図面を導き得る。
【図１】本発明の実施例における技術的解決策が適用され得るマルチコアシステムの概略図である。
【図２】本発明の実施例によるディレクトリの概略図である。
【図３】本発明の実施例による単一ポインタエントリの概略図である。
【図４】本発明の実施例による共有エントリの概略図である。
【図５】本発明の他の実施例によるディレクトリの概略図である。
【図６】本発明の実施例によるディレクトリアクセス方法の概略フローチャートである。
【図７ａ】本発明の他の実施例によるディレクトリアクセス方法の概略フローチャートである。
【図７ｂ】本発明の更に他の実施例によるディレクトリアクセス方法の概略フローチャートである。
【図８】本発明の更に他の実施例によるディレクトリアクセス方法の概略フローチャートである。
【図９ａ】本発明の更に他の実施例によるディレクトリアクセス方法の概略フローチャートである。
【図９ｂ】本発明の実施例に従って共有エントリを圧縮する概略図である。
【図１０】本発明の実施例によるディレクトリキャッシュデバイスの概略ブロック図である。
【図１１】本発明の実施例によるマルチコアシステムの概略図である。
【発明を実施するための形態】
【００２９】
以下に、本発明の実施例における添付図面を参照して本発明の実施例における技術的解決策を明確且つ完全に説明する。明らかに、説明する実施例は、本発明の実施例の全てではなく、一部である。創造的取り組みを行うことなく本発明の実施例に基づいて当業者により得られる全ての他の実施例は、本発明の保護範囲内に入るものとする。
【００３０】
この明細書を通じて、「マルチコアプロセッサシステム」又は「マルチコアシステム」という用語は、複数のプロセッサコア（Core）を含む処理システムを示す。システムは、チップ上マルチコアプロセッサ又は基板上マルチコア処理システムとして提示されてもよい。チップ上マルチコアプロセッサは、複数のプロセッサコア（Core）が１つのチップ（Chip）上に一体化されたプロセッサ（Processor）である。基板上マルチコア処理システムは、複数のプロセッサコアの各コアをプロセッサに別々にパッケージ化し、プロセッサを回路基板上に一体化することにより形成された処理システムを示す。
【００３１】
コア（Core）はまた、カーネルとも呼ばれてもよく、CPU（Central  Processing  Unit）の最も重要なコンポーネントである。コアは、特定の生産プロセスを使用することにより、単結晶シリコンでできている。CPU内の計算、コマンド受信／記憶及びデータ処理の全ては、プロセッサコアにより実行される。「複数のプロセッサコア」という用語は、少なくとも２つのプロセッサコアが含まれることを意味する。「複数のプロセッサコア」は、従来技術におけるマルチコア（Multi-Core）及び他コア（Many  Core）の用途の範囲をカバーする。
【００３２】
この明細書を通じて、「ディレクトリキャッシュデバイス」とも呼ばれる「ディレクトリキャッシュ」という用語は、マルチコアシステムにおいてデータ訪問者ディレクトリを記憶するために使用される記憶デバイスを示す。ディレクトリアクセス率を増加させるために、記憶デバイスは、通常では、キャッシュ（Cache）の形式で実現される。ディレクトリキャッシュは、少なくとも２つの実現方式で実現される。１つの方式では、ディレクトリキャッシュは、プロセッサコアと独立して実現され、すなわち、ディレクトリ記憶のためのキャッシュとして使用されるように、チップ上マルチコア処理チップ上のキャッシュ（Cache）内の１つの記憶空間が割り当てられる。他の方式では、ディレクトリキャッシュは、分散方式で実現され、すなわち、ディレクトリは複数のブロックに分割され、ディレクトリブロックは、チップ上マルチコア処理チップ上の各プロセッサコアの内部のキャッシュに別々に記憶される。
【００３３】
この明細書を通じて、「共有データキャッシュ」という用語は、複数のコアにより共有されるデータブロックを記憶するために使用される記憶デバイスを示す。データブロックアクセス率を増加させるために、記憶デバイスは、通常では、キャッシュ（Cache）の形式で実現される。具体的な実現処理では、共有データキャッシュは、一般的に、マルチコアプロセッサシステムにおけるレベル２（L2）キャッシュ又はレベル３（L3）キャッシュを示す。
【００３４】
この明細書を通じて、「プライベートデータキャッシュ」という用語は、プロセッサコアのプライベートデータを記憶するために使用される、プロセッサコアの内部の記憶デバイスを示す。具体的な実現処理では、プライベートデータキャッシュは、一般的に、マルチコアプロセッサにおけるレベル１（L1）キャッシュを示す。マルチコアプロセッサの実現では、プロセッサコアがデータブロックにアクセスする効率を改善するために、プロセッサコアは、共有データの一部分を取得し、共有データのこの一部分をプライベートデータキャッシュに記憶してもよい。
【００３５】
この明細書を通じて、「データブロック」という用語は、マルチコアプロセッサシステムにおいて各プロセッサコアがデータにアクセスする粒度を示す。具体的な実現では、データブロックは、マルチコアプロセッサシステムにおいて共有データキャッシュに記憶される。したがって、一般的な場合、データブロックの粒度はcache  line（すなわち、キャッシュライン）である。具体的な実現では、データブロックの粒度は、cache  lineの一部分又は複数のcache  lineのような他の形式で提示されてもよい。この明細書では、詳細は限定されない。
【００３６】
この明細書を通じて、「ディレクトリ構造」又は「データ訪問者ディレクトリ」とも呼ばれる「ディレクトリ」という用語は、データブロックの訪問者についての情報が記録されるデータ構造を示す。具体的な実現では、データ訪問者ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含む。単一ポインタエントリ配列は、複数の単一ポインタエントリを含む。共有エントリ配列は、複数の共有エントリを含む。各単一ポインタエントリに記録される内容は、データブロックの訪問者の数量に従って変化する。データブロックが単一の訪問者を有する場合、データブロックの単一の訪問者についての情報が単一ポインタエントリに記録される。データブロックが複数の訪問者を有する場合、単一ポインタエントリはまた、単一ポインタエントリと単一ポインタエントリに対応する共有エントリとの間の関連付けについての情報を記録するために使用される。データブロックが複数（２つ以上）の訪問者を有する場合、共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用される。「データ訪問者ディレクトリ」という用語は、１つ以上のデータ訪問者ディレクトリエントリを含む。
【００３７】
この明細書を通じて、「データ訪問者ディレクトリエントリ」という用語は、「データ訪問者ディレクトリ」の構成単位を示す。ディレクトリ内の各エントリは、共有データキャッシュ内の各データブロックに対応する。具体的な実現では、データ訪問者ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含む。したがって、データブロックが１つのみのデータ訪問者を有する場合、データブロックに対応するデータ訪問者ディレクトリエントリは、データブロックの単一の訪問者についての情報が記録される単一ポインタエントリを示す。データブロックが複数（２つ以上）の訪問者を有する場合、データブロックに対応するデータ訪問者ディレクトリエントリは、単一ポインタエントリと単一ポインタエントリに対応する共有エントリとの間の関連付けについての情報が記録される単一ポインタエントリと、データブロックの複数の訪問者についての情報が記録される共有エントリとを示す。
【００３８】
この明細書を通じて、「訪問者」という用語は、データブロックにアクセスするプロセッサコアを示す。例えば、データブロックが３つのプロセッサコアによりアクセスされた場合、３つのプロセッサコアは、データブロックの訪問者と呼ばれる。
【００３９】
この明細書を通じて、「アクセス要求」という用語は、プロセッサコアにより送信され、データブロックの訪問者についての情報を問い合わせるために使用される要求であるディレクトリアクセス要求を示す。
【００４０】
この明細書を通じて、「関連付けについての情報」という用語は、データブロックが少なくとも２つの訪問者を有する場合、データブロックに対応する単一ポインタエントリにおいて、単一ポインタエントリに対応する共有エントリのアクセスインデックスが記録されることを示す。アクセスインデックスは、データブロックの単一ポインタエントリと単一ポインタエントリに対応する共有エントリとの間の関連付けについての情報として示される。関連付けについての情報は、データブロックの単一ポインタエントリと単一ポインタエントリに対応する共有エントリとの間に関連付け関係が存在することを示す。
【００４１】
この明細書を通じて、「最長時間未使用（Least  Recently  Used、LRU）の原理」という用語は、エントリ（単一ポインタエントリ又は共有エントリ）がデータブロックに割り当てられる場合、その原理が、単一ポインタエントリ配列又は共有エントリ配列から、最近の期間に最も少なくアクセスされたエントリを選択するために使用され、これにより、データブロックのエントリとして使用されることを示す。
【００４２】
この明細書を通じて、「無効メッセージ」という用語は、エントリ再割り当て中に、無効メッセージがエントリに元々記録されている訪問者に送信され、これにより、元のデータブロックを無効にすることを示す。
【００４３】
図１は、本発明の実施例における技術的解決策が適用され得るマルチコアシステムの概略図である。
【００４４】
図１に示すように、マルチコアシステム100は、複数のプロセッサコア110と、共有データキャッシュ120と、ディレクトリキャッシュ130とを含む。複数のプロセッサコア110は、共有データキャッシュ120内のデータブロック121にアクセスしてもよい。データブロック121のコピーは、データブロック121にアクセスしたプロセッサコア110内のプライベートキャッシュ111内に生成される。ディレクトリキャッシュ130では、対応するディレクトリエントリ131は、データブロック121について、データブロック121の訪問者リストを記録するために使用される。
【００４５】
言い換えると、共有データキャッシュ120内のデータブロック121は、複数のプロセッサコア110のうち少なくとも１つのプロセッサコアにコピーされてもよい。データブロック121の訪問者は、データブロック121のコピーが記憶されているプロセッサコアである。
【００４６】
ディレクトリは、訪問者リストが記録される構造である。これに基づいて、ディレクトリは、ディレクトリ構造として表現されてもよい。
【００４７】
ディレクトリは、ディレクトリキャッシュ130に記憶され、具体的には、ディレクトリキャッシュ130内のディレクトリ記憶ユニットに記憶されてもよい。
【００４８】
ディレクトリキャッシュは、集中式でもよく、或いは分散式でもよい。対応して、ディレクトリは、集中式ディレクトリでもよく、すなわち、キャッシュエリアは、ディレクトリを記憶するためにマルチコアシステム（例えば、マルチコアプロセッサチップ）内に設定される。ディレクトリはまた、分散式ディレクトリでもよく、すなわち、ディレクトリは、ブロックに分割され、ブロック分割後に取得された各ディレクトリ部分が、各プロセッサコアに記憶される。例えば、マルチコアシステムが128個のプロセッサコアを含むことを仮定すると、ディレクトリは、それぞれ128個のプロセッサコアに記憶される128個の部分に分割されてもよい。
【００４９】
図２は、本発明の実施例によるディレクトリ200の概略図である。
【００５０】
図２に示すように、ディレクトリ200は、単一ポインタエントリ配列210と共有エントリ配列220とを含む。
【００５１】
単一ポインタエントリ配列210は、複数の単一ポインタエントリを含み、共有エントリ配列220は、複数の共有エントリを含む。
【００５２】
単一ポインタエントリ配列210内の単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは単一ポインタエントリと共有エントリ配列220内の共有エントリとの間の関連付けについての情報を記録するために使用される。すなわち、単一ポインタエントリは、データブロックが単一の訪問者を有する場合、データブロックの単一の訪問者についての情報を記録してもよく、或いはデータブロックが複数の訪問者を有する場合、単一ポインタエントリと共有エントリ配列220内の共有エントリとの間の関連付けについての情報を記録してもよい。共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用される。
【００５３】
scale-out（スケールアウト）の用途では、ほとんどのデータは、１つのみの訪問者を有する。データは、プライベートデータでもよく、或いはある期間内にプライベート特性を示してもよい。これに基づいて、ほとんどのディレクトリエントリは、単一ポインタを使用することにより、プロセッサコアについての情報、例えば、プロセッサコアの番号を記録しさえすればよく、本発明では、ディレクトリエントリは、単一ポインタエントリと呼ばれる。さらに、複数の訪問者を有するデータをトラッキングするために、いくつかのディレクトリエントリは、複数の訪問者をトラッキングするために使用され得るハードウェア構造（例えば、ベクトル、有限ポインタ（limited  pointer）又は他の形式）を依然として使用し、本発明では、ディレクトリエントリは、共有エントリと呼ばれる。全ての単一ポインタエントリは、単一ポインタエントリ配列を構成し、全ての共有エントリは、共有エントリ配列を構成する。単一ポインタエントリ配列には比較的大量のエントリが存在してもよく、共有エントリ配列には比較的少量のエントリが存在してもよい。
【００５４】
単一ポインタエントリは、訪問者を記録するために比較的少ないビット（bit）を使用してもよい。共有エントリは、複数の訪問者を記録するために比較的多くのビットを使用してもよい。データブロックが単一の訪問者を有する場合、単一ポインタエントリのみが、データブロックの単一の訪問者を記録するために使用される。この場合、単一ポインタエントリは、共有エントリに関連付けられていない。データブロックが複数の訪問者を有する場合、データブロックに対応する単一ポインタエントリは、共有エントリに関連付けられ、関連付けられた共有エントリは、データブロックの複数の訪問者を記録するために使用される。
【００５５】
任意選択で、共有エントリにより占有される記憶空間を低減するために、全共有ビットが単一ポインタエントリ内に更に設定されてもよい。共有ビットが1に設定された場合、データブロックは、マルチコアシステム内の全てのプロセッサコアにより共有される。この場合、単一ポインタエントリは、共有エントリに関連付けられていない。すなわち、データブロックが全てのプロセッサコアにより共有される場合、単一ポインタエントリのみがまた使用される必要があり、共有エントリは関連付けられる必要はない。
【００５６】
本発明のこの実施例によるディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含む構造を使用する。単一の訪問者が存在する場合、単一ポインタエントリのみが訪問者についての情報を記録するために使用され、複数の訪問者が存在する場合、訪問者についての情報は、単一ポインタエントリを共有エントリに関連付ける方式で記録される。前述の方式では、ディレクトリ内のディレクトリエントリの平均サイズが大きく圧縮されることが可能になり、性能ロスが非常に小さい。したがって、ディレクトリにより占有される記憶リソースは、低減されることが可能になり、システムのスケーラビリティが改善されることが可能になる。
【００５７】
図３は、本発明の実施例による単一ポインタエントリの概略図である。図３に示すように、単一ポインタエントリは、タグ301と共有エントリ関連付けビット302と全共有ビット303と単一ポインタ304とを含んでもよい。
【００５８】
タグ301は、データブロックに対応させるために使用される。例えば、タグは、データブロックのアドレスに対応してもよく、具体的には、データブロックのいくつかのアドレスビットに対応してもよい。したがって、データブロックに対応する単一ポインタエントリは、データブロックのアドレスとタグとの間の対応に従って検索されてもよい。
【００５９】
共有エントリ関連付けビット302は、単一ポインタエントリが共有エントリに関連付けられているか否かを示すために使用される。例えば、共有エントリ関連付けビットの値が1であることは、単一ポインタエントリに関連付けられた共有エントリが存在することを示し、値が0であることは、単一ポインタエントリに関連付けられた共有エントリが存在しないことを示す。
【００６０】
全共有ビット303は、データブロックが全てのプロセッサコアにより共有されることを示すため、或いはデータブロックが単一の訪問者を有することを示すために使用される。例えば、全共有ビット303の値が1である場合、データブロックは、全てのプロセッサコアにより共有され、共有エントリ関連付けビットが0であり、すなわち、共有エントリが関連付けられておらず、全共有ビットもまた0である場合、データブロックは、単一の訪問者を有する。
【００６１】
単一ポインタ304は、データブロックが単一の訪問者を有する場合、データブロックの単一の訪問者についての情報を記録するために使用される。複数の訪問者が存在する場合、単一ポインタ304は、共有エントリを指すために、単一ポインタエントリと共有エントリとの間の関連付けについての情報を記録するために使用される。単一の訪問者についての情報は、訪問者の識別子として表されてもよく、例では、訪問者（プロセッサコア）の番号又は他の識別子情報が使用されてもよい。単一ポインタエントリと共有エントリとの間の関連付けについての情報は、ポインタ又はインデックス情報として表されてもよい。本発明のこの実施例では、その詳細は限定されない。
【００６２】
例えば、共有エントリ関連付けビットが0であり、すなわち、共有エントリが関連付けられておらず、全共有ビットが0であり、すなわち、単一の訪問者が存在する場合、データブロックの単一の訪問者は、単一ポインタに記録され、共有エントリ関連付けビットが1であり、すなわち、共有エントリが関連付けられている場合、共有エントリとの関連付けについての情報は、単一ポインタ304に記録される。関連付けについての情報は、単一ポインタエントリに関連付けられた共有エントリを指すために使用される。
【００６３】
図４は、本発明の実施例による共有エントリの概略図である。図４に示すように、共有エントリは、共有者記録構造401と上位アドレス402とウェイ選択ビット403とを含んでもよい。上位アドレス402及びウェイ選択ビット403は、関連付けについての情報を示す関連付け構造である。
【００６４】
共有者記録構造401は、データブロックの複数の訪問者についての情報を記録するために使用される。共有者記録構造は、ベクトル又は複数の訪問者が記録されることができる他の構造でもよい。
【００６５】
関連付け構造（上位アドレス402及びウェイ選択ビット403）は、単一ポインタエントリを指すために使用される。
【００６６】
データブロックが単一の訪問者を有する比較的多くの場合が存在し、データブロックが複数の訪問者を有する比較的少ない場合が存在する。したがって、本発明のこの実施例では、単一ポインタエントリ配列が主な配列として使用され、共有エントリ配列が二次的な配列として使用される。図５に示すように、単一ポインタエントリ配列510及び共有エントリ配列520は、キャッシュのものと同様のセットアソシエイティブ構造をそれぞれ使用する。セット（配列の各行がセットである）の数量は、深度（depth）と呼ばれる。ウェイ（配列の各列がウェイである）の数量は、相関度（correlation）と呼ばれる。単一ポインタエントリ配列は、比較的大きい深度を有するが、中程度の相関度を有し、これにより、アクセス電力消費を低減する。共有エントリ配列は、比較的小さい深度を有するが、比較的大きい相関度を有し、これにより、共有エントリの利用を改善する。ディレクトリアクセスの間に、単一ポインタエントリ配列は、アクセス要求内のアドレス情報に従って検索され、例えば、単一ポインタエントリのタグは、単一ポインタエントリが存在するか否かを決定するために検索される。その後、単一ポインタエントリに従って共有エントリにアクセスし、共有エントリに従って単一ポインタエントリにアクセスすることは、「セットの番号＋ウェイの番号」の方式で実現されてもよく、具体的な実現では、まずセットの番号を決定し、次にウェイの番号を決定することにより実現されてもよい。
【００６７】
前述の単一ポインタエントリの全てのフィールドにおいて、全共有ビット303は任意選択のフィールドである点に留意すべきである。データブロックがマルチコアシステム内の全てのプロセッサコアにより共有される場合、共有エントリ内の共有者記録構造401は、データブロックが全てのプロセッサコアにより共有されることを示すために使用されてもよい。共有エントリの記憶空間を低減するために、全共有ビット303は、単一ポインタエントリに追加される。「データブロックがマルチコアシステム内の全てのプロセッサコアにより共有される」共有シナリオを示すために、全共有ビット303が1に設定される。
【００６８】
図６は、本発明の実施例によるマルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法600の概略フローチャートである。ディレクトリは、本発明の前述の実施例におけるディレクトリである。この方法600は、ディレクトリキャッシュにより実行されてもよい。
【００６９】
S610.第１のプロセッサコアにより送信された第１のアクセス要求を受信し、第１のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用される。
【００７０】
第１のアクセス要求は、データブロックのアドレス情報を搬送してもよい。ディレクトリは、アクセス要求内のアドレス情報に従ってアクセスされてもよく、データブロックに対応するエントリがディレクトリ内で検索される。
【００７１】
S620.第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定する。
【００７２】
第１のアクセス要求が受信された場合、データブロックに対応する単一ポインタエントリが存在するか否かを決定するために、まず単一ポインタエントリ配列がアクセスされる。具体的には、データブロックに対応する単一ポインタエントリが存在するか否かを決定するために、単一ポインタエントリ配列は、アクセス要求内のアドレス情報に従って検索されてもよい。例えば、図３に示す単一ポインタエントリの構造を例として使用して、データブロックに対応する単一ポインタエントリが存在するか否かを決定するために、アクセス要求内で搬送されたアドレス情報は、単一ポインタエントリ内のタグと比較されてもよい。この実施例では、単一ポインタエントリ配列は、第１のデータブロックに対応する第１の単一ポインタエントリを有する。
【００７３】
S630.第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有すると決定された場合、第１の共有エントリに従って、第１のデータブロックの複数の訪問者を決定する。
【００７４】
データブロック（第１のデータブロックとして表される）が対応する単一ポインタエントリ（第１の単一ポインタエントリとして表される）を有する場合、共有エントリ配列が第１の単一ポインタエントリに関連付けられた共有エントリを有するか否かは、第１の単一ポインタエントリに従って決定される。例えば、図３に示す単一ポインタエントリの構造を例として使用して、単一ポインタエントリに関連付けられた共有エントリが存在するか否かは、単一ポインタエントリ内の共有エントリ関連付けビットに従って決定されてもよい。第１の単一ポインタエントリに関連付けられた共有エントリが存在し、すなわち、第１の単一ポインタエントリが共有エントリ（第１の共有エントリとして表される）に関連付けられている場合、第１のデータブロックの複数の訪問者は、第１の共有エントリに従って決定される。具体的には、関連付けられた共有エントリは、単一ポインタエントリに記録された関連付けについての情報、例えば、図３に示す構造における単一ポインタに記録された関連付けについての情報に従って決定されてもよく、共有エントリは、共有エントリからデータブロックの複数の訪問者を取得するためにアクセスされる。
【００７５】
図５に示すディレクトリの構造を例として使用して、共有エントリは、以下の方式で単一ポインタエントリに従ってアクセスされてもよい。
【００７６】
1.共有エントリのセット番号を取得するために、単一ポインタエントリが属するセットの番号から下位ビットが抽出される。
【００７７】
単一ポインタエントリ配列には比較的大量のセットが存在し、共有エントリ配列には比較的少量のセットが存在する。したがって、共有エントリのセット番号は、単一ポインタエントリのセット番号の下位ビットに従って決定されてもよい。
【００７８】
単一ポインタエントリ配列が4個のウェイと64個のセットとを含み、共有エントリ配列が8個のウェイと16個のセットとを含むことが仮定される。
【００７９】
現在アクセスされている単一ポインタエントリの共有エントリ関連付けビットが1である場合、共有エントリが関連付けられており、共有エントリ配列がアクセスされる必要がある。64セットの単一ポインタエントリ配列内のセットの番号は、6ビット（bit）を含み、単一ポインタエントリは、第55セットに属し、セットの番号は、b_110111（b_は２進数を表す）として表される。共有エントリ配列は、合計16セットを含み、4ビットを有するセット番号がインデックス化のために必要である。対応する共有エントリが共有エントリ配列内の第7セットに属することを取得するために、下位の4ビットb_0111がb_110111から抽出される。
【００８０】
2.１つのセット内にある共有エントリの複数のウェイを読み取るために、共有エントリ配列がアクセスされる。
【００８１】
セット内の8個の共有エントリ（8個のウェイ）を取得するために、共有エントリ配列内の第7セットが、前のステップにおいて取得されたセット番号に従ってアクセスされる。
【００８２】
3.単一ポインタエントリ内の単一ポインタに従って共有エントリの複数のウェイに対してウェイ選択が実行される。
【００８３】
8個のウェイからの選択は3ビットを必要とする。単一ポインタの値がb_1100であると仮定すると、関連付けられた共有エントリを取得するために、単一ポインタの値の下位の3ビットb_100、すなわち、第4ウェイが使用されてもよい。
【００８４】
本発明のこの実施例では、任意選択で、図７ａに示すように、この方法600は以下を更に含んでもよい。
【００８５】
S640.第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有さないと決定された場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者、又は第１のデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを決定する。
【００８６】
すなわち、第１の単一ポインタエントリが第１の共有エントリに関連付けられていない場合、第１のデータブロックの訪問者は、第１の単一ポインタエントリのみに従って決定される。具体的には、第１の単一ポインタエントリは、第１のデータブロックの単一の訪問者を記録するため、或いは第１のデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために使用されてもよい。２つの場合の双方において、共有エントリが関連付けられる必要はなく、比較的少ないビットが表現のために使用されてもよい。具体的な例については、前述の実施例を参照し、詳細はここでは再び説明しない。
【００８７】
本発明のこの実施例によるディレクトリアクセス方法では、単一ポインタエントリがまずアクセスされ、単一ポインタエントリが共有エントリに関連付けられている場合、関連付けられた共有エントリが次にアクセスされ、データブロックが単一の訪問者を有する場合、単一の訪問者は、単一ポインタエントリから取得されてもよく、データブロックが複数の訪問者を有する場合、複数の訪問者は、単一ポインタエントリに関連付けられた共有エントリから取得されてもよい。このように、ディレクトリ内のディレクトリエントリの平均サイズが大きく圧縮されることが可能になり、性能ロスが比較的非常に小さい。したがって、ディレクトリにより占有される記憶リソースは、低減されることが可能になり、システムのスケーラビリティが改善されることが可能になる。
【００８８】
本発明のこの実施例では、単一ポインタエントリ配列がデータブロックに対応する単一ポインタエントリを有さない場合、対応する単一ポインタエントリは、データブロックに更に割り当てられてもよい。
【００８９】
したがって、任意選択で、第１のプロセッサコアにより送信された第１のアクセス要求が受信された後に、図７ｂに示すように、この方法600は以下を更に含んでもよい。
【００９０】
S662.第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する単一ポインタエントリを有さないと決定する。
【００９１】
S663.単一ポインタエントリ配列において、第１のデータブロックに対応する第１の単一ポインタエントリを第１のデータブロックに割り当て、第１のプロセッサコアについての情報を第１の単一ポインタエントリに記録する。
【００９２】
すなわち、データブロックが対応する単一ポインタエントリを有さない場合、単一ポインタエントリは、データブロックに割り当てられてもよく、単一の訪問者（すなわち、第１のプロセッサコア）についての情報が、割り当てられた単一ポインタエントリに記録される。
【００９３】
具体的には、単一ポインタエントリ配列が未使用の単一ポインタエントリを有する場合、単一ポインタエントリは、第１の単一ポインタエントリとして、未使用の単一ポインタエントリから選択され、第１のプロセッサコアについての情報が記録される。
【００９４】
単一ポインタエントリ配列が未使用の単一ポインタエントリを有さない場合、単一ポインタエントリは、最長時間未使用の原理に従って選択される。
【００９５】
選択された単一ポインタエントリが共有エントリに関連付けられておらず、単一の訪問者についての情報を記録する場合、無効メッセージが、記録された単一の訪問者に送信され、第１のプロセッサコアについての情報が、選択された単一ポインタエントリに記録される。
【００９６】
選択された単一ポインタエントリが共有エントリに関連付けられておらず、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示す場合、無効メッセージが、全てのプロセッサコアにブロードキャストされ、第１のプロセッサコアについての情報が、選択された単一ポインタエントリに記録される。
【００９７】
選択された単一ポインタエントリが共有エントリに関連付けられている場合、関連付けられた共有エントリに記録された複数の訪問者が、選択された単一ポインタエントリに関連付けられた共有エントリに従って決定され、無効メッセージが、記録された複数の訪問者に送信され、第１のプロセッサコアについての情報が、選択された単一ポインタエントリに記録される。
【００９８】
以下に、例を使用することにより、本発明のこの実施例によるディレクトリアクセス方法について詳細に説明する。
【００９９】
図８は、本発明の他の実施例によるディレクトリアクセス方法の概略フローチャートである。
【０１００】
801.単一ポインタエントリ配列にアクセスし、単一ポインタエントリにヒットした場合、ステップ802が実行され、或いは単一ポインタエントリにヒットしなかった場合、ステップ807が実行される。
【０１０１】
例えば、単一ポインタエントリ及び共有エントリがそれぞれ図３及び図４に示す構造を使用する場合、データブロックに対応する単一ポインタエントリが存在するか否かを決定するために、アクセス要求内で搬送されたアドレス情報は、単一ポインタエントリ内のタグと比較されてもよい。
【０１０２】
802.単一ポインタエントリが共有エントリに関連付けられているか否かを決定し、そうである場合、803が実行され、或いはそうでない場合、804が実行される。
【０１０３】
例えば、単一ポインタエントリが共有エントリに関連付けられているか否かは、ヒットした単一ポインタエントリ内の共有エントリ関連付けビットに従って決定されてもよい。共有エントリ関連付けビットが1である場合、共有エントリが関連付けられており、共有エントリ関連付けビットが0である場合、共有エントリが関連付けられていない。
【０１０４】
803.訪問者リストを取得するために、関連付けられた共有エントリにアクセスする。
【０１０５】
例えば、関連付けられた共有エントリは、単一ポインタエントリ内の単一ポインタに従って見つけられてもよく、これにより、関連付けられた共有エントリ内の共有者記録構造から訪問者リストを取得する。
【０１０６】
804.全共有が実現されているか否かを決定し、そうである場合、805が実行され、或いはそうでない場合、806が実行される。
【０１０７】
共有エントリが関連付けられていない場合、データブロックが全てのプロセッサコアにより共有されるか否かが決定される。例えば、全共有が実現されているか否かは、単一ポインタエントリ内の全共有ビットに従って決定されてもよい。全共有ビットが0である場合、データブロックは、単一の訪問者を有し、すなわち、全共有が実現されていない。全共有ビットが1である場合、データブロックは、全てのプロセッサコアにより共有され、すなわち、全共有が実現されている。
【０１０８】
805.データブロックが全てのプロセッサコアにより共有されることを決定する。
【０１０９】
806.単一の訪問者を取得する。
【０１１０】
例えば、単一の訪問者は、単一ポインタエントリ内の単一ポインタから取得されてもよい。
【０１１１】
807.未使用の単一ポインタエントリが存在するか否かを決定し、そうである場合、808が実行され、或いはそうでない場合、809が実行される。
【０１１２】
808.未使用の単一ポインタエントリを選択し、アクセスするプロセッサコアについての情報を記録する。
【０１１３】
例えば、プロセッサコアの識別子が記録されてもよい。64個のコアを例として使用して、6ビットの識別子が使用されてもよい。
【０１１４】
809.最長時間未使用である単一ポインタエントリを選択し、選択された単一ポインタエントリが共有エントリに関連付けられているか否かを決定し、そうである場合、810が実行され、或いはそうでない場合、811が実行される。
【０１１５】
810.複数の訪問者を無効にし、アクセスするプロセッサコアについての情報を記録する。
【０１１６】
関連付けられた共有エントリに記録された複数の訪問者は、関連付けられた共有エントリに従って決定される。無効メッセージが、複数の訪問者に送信され、アクセスするプロセッサコアについての情報が、選択された単一ポインタエントリに記録される。
【０１１７】
811.選択された単一ポインタエントリが全共有を示すか否かを決定し、そうである場合、812が実行され、或いはそうでない場合、813が実行される。
【０１１８】
812.無効メッセージをブロードキャストし、アクセスするプロセッサコアについての情報を選択された単一ポインタエントリに記録する。
【０１１９】
813.単一の訪問者を無効にし、アクセスするプロセッサコアについての情報を記録する。
【０１２０】
選択された単一ポインタエントリに記録された単一の訪問者が決定され、無効メッセージが単一の訪問者に送信され、アクセスするプロセッサコアについての情報が、選択された単一ポインタエントリに記録される。
【０１２１】
本発明のこの実施例では、単一ポインタエントリ（すなわち、第１の単一ポインタエントリ）がデータブロック（前述の第１のデータブロック）に割り当てられた後に、第１のデータブロックの単一の訪問者（すなわち、第１のプロセッサコア）が第１の単一ポインタエントリに記録される。この場合、第１のデータブロックは、第１のプロセッサコアによりプライベートに所有される。第１のデータブロックが他のプロセッサコア（第２のプロセッサコアとして表される）によりアクセスされた場合、共有エントリが共有エントリ配列において割り当てられる必要があり、複数の訪問者（第１のプロセッサコア及び第２のプロセッサコア）についての情報が、共有エントリを使用することにより記録される。
【０１２２】
したがって、任意選択で、図９ａに示すように、この方法600は以下を更に含んでもよい。
【０１２３】
S671.第２のプロセッサコアにより送信された第２のアクセス要求を受信し、第２のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用される。
【０１２４】
S672.第２のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定する。
【０１２５】
S673.第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた共有エントリを有さないと決定された場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者が第１のプロセッサコアであると決定する。
【０１２６】
S674.共有エントリ配列内の第１の共有エントリを割り当て、第１の単一ポインタエントリと第１の共有エントリとの間に関連付け関係を確立し、第１のプロセッサコアについての情報及び第２のプロセッサコアについての情報を第１の共有エントリに記録する。
【０１２７】
具体的には、第１の共有エントリが割り当てられるときに、共有エントリ配列が未使用の共有エントリを有する場合、共有エントリは、第１の共有エントリとして、未使用の共有エントリから選択される。
【０１２８】
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリを有する場合、１つのみの訪問者についての情報を記録する共有エントリが選択され、訪問者についての記録された情報が、選択された共有エントリに関連付けられた単一ポインタエントリに書き込まれる。
【０１２９】
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリも有さない場合、共有エントリは、最長時間未使用の原理に従って選択される。選択された共有エントリに記録された訪問者の数量が所定の閾値より大きい場合、選択された共有エントリに関連付けられた単一ポインタエントリが、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すように設定される。選択された共有エントリに記録された訪問者の数量が所定の閾値より大きくない場合、記録された訪問者のうち１つの訪問者についての情報が、選択された共有エントリに関連付けられた単一ポインタエントリに書き込まれ、無効メッセージが、記録された訪問者のうち他の訪問者に送信される。
【０１３０】
すなわち、共有エントリが割り当てられるときに、未使用の共有エントリが優先的に使用される。未使用の共有エントリが存在しない場合、使用されている共有エントリが取り消される必要があり、１つのみの訪問者を記録する共有エントリが優先的に選択される。１つのみの訪問者を記録する共有エントリが存在しない場合、最長時間未使用である共有エントリが選択される。１つのみの訪問者を記録する共有エントリが取り消される場合、単一の訪問者は、関連付けられた単一ポインタエントリに書き込まれる必要があり、これは、訪問者の情報の喪失を回避する。複数の訪問者を記録する共有エントリが取り消される場合、訪問者リストは、訪問者の数量に従って異なる方式で圧縮されてもよく、関連付けられた単一ポインタエントリに記憶されてもよい。具体的には、訪問者の数量が所定の閾値より大きい場合、関連付けられた単一ポインタエントリが、データブロックが全てのプロセッサコアにより共有されることを示すように設定され、これは、アップコンバージョンと呼ばれてもよい。訪問者の数量が所定の閾値より大きくない場合、訪問者のうち１つの訪問者が、関連付けられた単一ポインタエントリに書き込まれ、無効メッセージが、他の訪問者に送信され、すなわち、１つのみの訪問者が保持され、これは、ダウンコンバージョンと呼ばれてもよい。
【０１３１】
例えば、図９ｂに示すように、アップコンバージョンが実行される場合、関連付けられた単一ポインタエントリ内の全共有ビットは1に設定され、データブロックが全てのプロセッサコアにより共有されることを示す。ダウンコンバージョンが実行される場合、１つのみの訪問者（図９ｂに示す番号3の訪問者）が保持され、訪問者が関連付けられた単一ポインタエントリに記録される。
【０１３２】
取り消された共有エントリは、他のデータブロックに割り当てられてもよい。すなわち、本発明の実施例では、共有エントリは、データ共有における変化に従って動的に割り当てられてもよい。このように、ディレクトリリソースがより柔軟に利用され、ディレクトリリソースの利用が改善されることができる。
【０１３３】
共有エントリが取り消される場合、単一ポインタエントリは、共有エントリに従ってアクセスされる必要がある。この場合、関連付けられた単一ポインタエントリは、共有エントリに従って決定されてもよい。具体的には、関連付けられた単一ポインタエントリは、共有エントリ内の関連付け構造に従って決定されてもよい。
【０１３４】
図５に示すディレクトリ構造を例として使用して、単一ポインタエントリは、以下の方式で共有エントリに従ってアクセスされてもよい。
【０１３５】
1.単一ポインタエントリ配列内のセットの番号を取得するために、共有エントリが属するセットの番号及び上位アドレスが一緒に接合される。
【０１３６】
単一ポインタエントリ配列には比較的大量のセットが存在し、共有エントリ配列には比較的少量のセットが存在する。したがって、単一ポインタエントリのセット番号は、上位アドレスと共有エントリのセット番号とを結合することにより取得される必要がある。
【０１３７】
単一ポインタエントリ配列が4個のウェイと64個のセットとを含み、共有エントリ配列が8個のウェイと16個のセットとを含むことが仮定される。
【０１３８】
共有エントリが第5セット（b_0101）に属し、上位アドレスがb_10であり、ウェイ選択ビットがb_01であることを仮定すると、対応する単一ポインタエントリのセット番号は、共有エントリのセット番号と上位アドレスとを接合することにより取得され、b_100101、すなわち、37である。
【０１３９】
2.１つのセット内の単一ポインタエントリの複数のウェイを読み取るために、単一ポインタエントリ配列がアクセスされる。
【０１４０】
セット内の4個の単一ポインタエントリ（4個のウェイ）を取得するために、単一ポインタエントリ配列内の第37セットが、前述のステップにおいて取得されたセット番号に従ってアクセスされる。
【０１４１】
3.ウェイ選択が、共有エントリ内のウェイ選択ビットに従って単一ポインタエントリの複数のウェイに対して実行される。
【０１４２】
共有エントリ内のウェイ選択ビットがウェイ選択のために使用され、ウェイ選択ビットがb_01、すなわち、第１のウェイであり、これにより、関連付けられた単一ポインタエントリを取得する。
【０１４３】
本発明の様々な実施例において、前述の処理のシーケンス番号は実行順序を意味しないことが理解されるべきである。処理の実行順序は処理の機能及び固有の論理により決定されるべきであり、本発明の実施例の実現処理における限定として解釈されるべきではない。
【０１４４】
図１０は、本発明の実施例によるディレクトリキャッシュデバイス1000の概略ブロック図である。図１０に示すように、ディレクトリキャッシュデバイス1000は、ディレクトリ記憶ユニット1010と実行ユニット1020とを含む。
【０１４５】
ディレクトリ記憶ユニット1010は、マルチコアシステム内にあるディレクトリを記憶するように構成される。マルチコアシステムは、共有データキャッシュと複数のプロセッサコアとを含む。共有データキャッシュ内のデータブロックは、複数のプロセッサコアのうち少なくとも１つのプロセッサコアにコピーされる。ディレクトリは、共有データキャッシュ内のデータブロックの訪問者についての情報を記録するために使用される。データブロックの訪問者は、データブロックのコピーが記憶されているプロセッサコアである。ディレクトリは、単一ポインタエントリ配列と共有エントリ配列とを含み、単一ポインタエントリ配列内の各単一ポインタエントリは、データブロックの単一の訪問者についての情報を記録するため、或いは単一ポインタエントリと共有エントリ配列内の共有エントリとの間の関連付けについての情報を記録するために使用され、共有エントリ配列内の各共有エントリは、データブロックの複数の訪問者についての情報を記録するために使用される。
【０１４６】
実行ユニット1020は、
第１のプロセッサコアにより送信された第１のアクセス要求を受信するように構成され、第１のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用され、
第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するように構成され、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有すると決定した場合、第１の共有エントリに従って、第１のデータブロックの複数の訪問者を決定するように構成される。
【０１４７】
本発明のこの実施例によるディレクトリキャッシュデバイスでは、単一ポインタエントリ配列と共有エントリ配列とを含むディレクトリ構造が使用される。複数の訪問者が記録される必要がない場合、単一ポインタエントリは、共有エントリに関連付けられない。複数の訪問者が記録される必要がある場合、単一ポインタエントリは、共有エントリに関連付けられる。このように、ディレクトリ内のディレクトリエントリの平均サイズが大きく圧縮されることが可能になり、性能ロスが比較的非常に小さい。したがって、ディレクトリにより占有される記憶リソースは、低減されることが可能になり、システムのスケーラビリティが改善されることが可能になる。
【０１４８】
本発明のこの実施例では、任意選択で、単一ポインタエントリは、タグと共有エントリ関連付けビットと単一ポインタとを含む。タグは、データブロックに対応させるために使用される。共有エントリ関連付けビットは、単一ポインタエントリが共有エントリに関連付けられているか否かを示すために使用される。単一ポインタは、データブロックが単一の訪問者を有する場合、単一の訪問者についての情報を記録し、単一ポインタエントリが共有エントリに関連付けられている場合、単一ポインタエントリと共有エントリとの間の関連付けについての情報を記録するために使用される。
【０１４９】
共有エントリは、共有者記録構造と関連付け構造とを含む。共有者記録構造は、データブロックの複数の訪問者についての情報を記録するために使用され、関連付け構造は、単一ポインタエントリを関連付けるために使用される。
【０１５０】
本発明のこの実施例では、任意選択で、単一ポインタエントリは、全共有ビットを更に含む。
【０１５１】
全共有ビットは、単一ポインタエントリが共有エントリに関連付けられていない場合、データブロックが単一の訪問者を有することを示すため、或いはデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために使用される。
【０１５２】
本発明のこの実施例では、任意選択で、単一ポインタエントリ配列内の単一ポインタエントリは、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すために更に使用され、実行ユニット1020は、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた第１の共有エントリを有さないと決定した場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者、又は第１のデータブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを決定するように更に構成される。
【０１５３】
本発明のこの実施例では、任意選択で、実行ユニット1020が第１のプロセッサコアにより送信された第１のアクセス要求を受信した後に、実行ユニット1020は、
第１のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する単一ポインタエントリを有さないと決定し、
単一ポインタエントリ配列において、第１のデータブロックに対応する第１の単一ポインタエントリを第１のデータブロックに割り当て、第１のプロセッサコアについての情報を第１の単一ポインタエントリに記録するように更に構成される。
【０１５４】
本発明のこの実施例では、任意選択で、実行ユニット1020は、
単一ポインタエントリ配列が未使用の単一ポインタエントリを有する場合、第１の単一ポインタエントリとして、未使用の単一ポインタエントリから単一ポインタエントリを選択し、第１のプロセッサコアについての情報を記録するように構成され、或いは
単一ポインタエントリ配列が未使用の単一ポインタエントリを有さない場合、最長時間未使用の原理に従って、単一ポインタエントリを選択し、選択された単一ポインタエントリが共有エントリに関連付けられておらず、単一の訪問者についての情報を記録する場合、無効メッセージを記録された単一の訪問者に送信し、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するように構成され、或いは
選択された単一ポインタエントリが共有エントリに関連付けられておらず、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示す場合、無効メッセージを全てのプロセッサコアにブロードキャストし、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するように構成され、或いは
選択された単一ポインタエントリが共有エントリに関連付けられている場合、選択された単一ポインタエントリに関連付けられた共有エントリに従って、関連付けられた共有エントリに記録された複数の訪問者を決定し、無効メッセージを記録された複数の訪問者に送信し、第１のプロセッサコアについての情報を選択された単一ポインタエントリに記録するように構成される。
【０１５５】
本発明のこの実施例では、任意選択で、実行ユニット1020は、
第２のプロセッサコアにより送信された第２のアクセス要求を受信するように更に構成され、第２のアクセス要求は、ディレクトリ内の第１のデータブロックに対応するエントリにアクセスするために使用され、
第２のアクセス要求に従って、単一ポインタエントリ配列が第１のデータブロックに対応する第１の単一ポインタエントリを有すると決定するように更に構成され、
第１の単一ポインタエントリに従って、共有エントリ配列が第１の単一ポインタエントリに関連付けられた共有エントリを有さないと決定した場合、第１の単一ポインタエントリに従って、第１のデータブロックの単一の訪問者が第１のプロセッサコアであると決定するように更に構成され、
共有エントリ配列内の第１の共有エントリを割り当て、第１の単一ポインタエントリと第１の共有エントリとの間に関連付け関係を確立し、第１のプロセッサコアについての情報及び第２のプロセッサコアについての情報を第１の共有エントリに記録するように更に構成される。
【０１５６】
本発明のこの実施例では、任意選択で、実行ユニット1020は、
共有エントリ配列が未使用の共有エントリを有する場合、第１の共有エントリとして、未使用の共有エントリから共有エントリを選択するように構成され、或いは
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者についての情報を記録する共有エントリを有する場合、１つのみの訪問者についての情報を記録する共有エントリを選択し、訪問者についての記録された情報を、選択された共有エントリに関連付けられた単一ポインタエントリに書き込むように構成され、或いは
共有エントリ配列が未使用の共有エントリを有さず、１つのみの訪問者を記録する共有エントリも有さない場合、最長時間未使用の原理に従って、共有エントリを選択し、選択された共有エントリに記録された訪問者の数量が所定の閾値より大きい場合、データブロックがマルチコアシステム内の全てのプロセッサコアにより共有されることを示すように、選択された共有エントリに関連付けられた単一ポインタエントリを設定し、或いは選択された共有エントリに記録された訪問者の数量が所定の閾値より大きくない場合、記録された訪問者のうち１つの訪問者についての情報を、選択された共有エントリに関連付けられた単一ポインタエントリに書き込み、無効メッセージを記録された訪問者のうち他の訪問者に送信するように構成される。
【０１５７】
本発明のこの実施例では、ディレクトリキャッシュデバイス1000内のディレクトリ記憶ユニット1010に記憶されたディレクトリは、本発明の前述の実施例によるディレクトリでもよい。実行ユニット1020は、前述の方法の実施例における各処理を実行してもよい。対応する具体的な説明については、前述の実施例を参照する。簡潔にするために、詳細はここでは再び説明しない。
【０１５８】
本発明の実施例は、マルチコアシステムを更に提供する。図１１に示すように、マルチコアシステム1100は、複数のプロセッサコア1110と、共有データキャッシュ1120と、本発明の前述の実施例におけるディレクトリキャッシュデバイス1000とを含む。
【０１５９】
具体的には、マルチコアシステム100と比べて、本発明のこの実施例におけるマルチコアシステム1100は、新たなディレクトリキャッシュデバイス1000を使用する。ディレクトリキャッシュデバイス1000は、本発明のこの実施例において提供される新たなディレクトリ構造を含む。
【０１６０】
当業者は、この明細書に開示された実施例に記載の例と組み合わせて、ユニット及びアルゴリズムのステップが、電子ハードウェア、コンピュータソフトウェア又はこれらの組み合わせにより実現され得ることを認識し得る。ハードウェアとソフトウェアとの間の互換性を明確に記載するために、前述では、機能に従って各例の構成及びステップを一般的に説明している。機能がハードウェアにより実行されるかソフトウェアにより実行されるかは、技術的解決策の特定の用途及び設計上の制約条件に依存する。当業者は、特定の用途毎に記載の機能を実現するために異なる方法を使用してもよいが、この実現が本発明の範囲を超えると考えられるべきではない。
【０１６１】
便宜上且つ簡潔な説明の目的で、前述のシステム、装置及びユニットの詳細な動作処理について、前述の方法の実施例における対応する処理に参照が行われてもよく、詳細はここでは再び説明しないことが当業者により明らかに理解され得る。
【０１６２】
この出願において提供されるいくつかの実施例において、開示のシステム、装置及び方法は、他の方式で実現されてもよいことが理解されるべきである。例えば、記載の装置の実施例は、単なる例である。例えば、ユニットの分割は、単に論理的な機能分割であり、実際の実現では他の分割でもよい。例えば、複数のユニット又はコンポーネントは結合されてもよく、或いは他のシステムに統合されてもよく、或いはいくつかの特徴が無視されてもよく或いは実行されなくてもよい。さらに、表示又は説明した相互結合若しくは直接結合又は通信接続は、いくつかのインタフェースを通じて実現されてもよい。装置又はユニットの間の間接結合又は通信接続は、電子的、機械的或いは他の形式で実現されてもよい。
【０１６３】
別々の部分として記載したユニットは、物理的に別々でもよく或いは別々でなくてもよく、ユニットとして表示された部分は、物理的なユニットでもよく或いは物理的なユニットでなくてもよく、１つの場所に位置してもよく、或いは複数のネットワークユニットに分散されてもよい。ユニットの一部又は全部は、本発明の実施例の解決策の目的を達成するために、実際のニーズに従って選択されてもよい。
【０１６４】
さらに、本発明の実施例における機能ユニットは、１つの処理ユニットに統合されてもよく、或いはユニットのそれぞれが物理的に単独で存在してもよく、或いは２つ以上のユニットが１つのユニットに統合されてもよい。統合されたユニットは、ハードウェアの形式で実現されてもよく、或いはソフトウェア機能ユニットの形式で実現されてもよい。
【０１６５】
統合されたユニットがソフトウェア機能ユニットの形式で実現され、独立したプロダクトとして販売又は使用される場合、統合されたユニットは、コンピュータ読み取り可能記憶媒体に記憶されてもよい。このような理解に基づいて、本発明の技術的解決策は、本質的に、或いは、従来技術に寄与する部分又は技術的解決策の全部若しくは一部は、ソフトウェアプロダクトの形式で実現されてもよい。ソフトウェアプロダクトは、記憶媒体に記憶され、コンピュータデバイス（パーソナルコンピュータ、サーバ又はネットワークデバイスでもよい）に対して本発明の実施例に記載の方法のステップの全部又は一部を実行するように命令するためのいくつかの命令を含む。前述の記憶媒体は、USBフラッシュドライブ、取り外し可能ハードディスク、読み取り専用メモリ（ROM、Read-Only  Memory）、ランダムアクセスメモリ（RAM、Random  Access  Memory）、磁気ディスク又は光ディスクのようなプログラムコードを記憶することができるいずれかの媒体を含む。
【０１６６】
前述の説明は、本発明の単に具体的な実施例に過ぎず、本発明の保護範囲を限定することを意図するものではない。本発明に開示された技術範囲内で当業者により容易に理解される如何なる変更又は置換も本発明の保護範囲内に入るものとする。したがって、本発明の保護範囲は、特許請求の範囲の保護範囲に従うものとする。
【図１】
0006343722.tif 000002
【図２】
0006343722.tif 000003
【図３】
0006343722.tif 000004
【図４】
0006343722.tif 000005
【図５】
0006343722.tif 000006
【図６】
0006343722.tif 000007
【図７ａ】
0006343722.tif 000008
【図７ｂ】
0006343722.tif 000009
【図８】
0006343722.tif 000010
【図９ａ】
0006343722.tif 000011
【図９ｂ】
0006343722.tif 000012
【図１０】
0006343722.tif 000013
【図１１】
0006343722.tif 000014