(57)【要約】【課題】複数のプロセッサ間のデータトラフィックを低減する方法を提供する。【解決手段】第１のプロセッサを使用して、第１のプロセッサのプライベートキャッシュに第１のデータを読み込む。第１のデータに対する最近の修正の予め設定された条件が満たされたことを検出すると、第１のデータに対する書き込み操作を実行し、キャッシュラインの状態インデックスストリングを設定して、書き込まれた第１のデータの特別な状態を示す、特別な状態は、トランザクションがコミットされたとき、第１のデータが修正され、ラストレベルキャッシュ（ＬＬＣ）に排他的に書き込まれることをシグナリングする。第１のデータを複数のプロセッサによってアクセス可能なＬＬＣに書き込む。第１のデータを無効化することによって、トランザクションをコミットする。ＬＬＣ内の第１のデータのコピーを修正することによって、第１のデータを修正する。【選択図】図１Ｂ
2019083045.tif 000002
【特許請求の範囲】
【請求項１】
データを処理するためのトランザクショナルメモリを備える複数のプロセッサ間のデータトラフィックを低減する方法であって、
第１のプロセッサを使用してトランザクションを処理することであって、前記トランザクションは、
前記第１のプロセッサのプライベートキャッシュに第１のデータを読み込むことと、
前記第１のデータに対する最近の修正の予め設定された条件が満たされたことを検出すると、
前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータに対する書き込み操作を実行することと、
キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサの前記プライベートキャッシュに書き込まれた前記第１のデータの特別な状態を示し、前記特別な状態は、前記トランザクションがコミットされたとき、前記第１のデータが修正され、ラストレベルキャッシュ（ＬＬＣ）に排他的に書き込まれることをシグナリングすることと
を含む、処理することと、
前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータを前記複数のプロセッサによってアクセス可能な前記ＬＬＣに書き込むこと、および前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータを無効化することによって、前記トランザクションをトランザクショナルメモリシステムにコミットすることと、
前記ＬＬＣ内の前記第１のデータのコピーを修正することによって、前記第１のデータを修正することと
を含む方法。
【請求項２】
最近の修正の前記予め設定された条件は、前記書き込み操作前に、前記第１のデータが前記第１のプロセッサと異なる第２のプロセッサによって最後に修正されたことを含む、請求項１に記載の方法。
【請求項３】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータが前記第１のプロセッサによって最後に修正されたことを示すこと
をさらに含む、請求項１に記載の方法。
【請求項４】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータの特別な状態を示し、前記特別な状態は、前記ＬＬＣに書き込まれた前記第１のデータが修正済及び排他的であり、前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータが無効化されたことをシグナリングすること
をさらに含む、請求項１に記載の方法。
【請求項５】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータの状態を示し、前記状態は前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータと合致すること
をさらに含む、請求項１に記載の方法。
【請求項６】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣのディレクトリから前記第１のデータの状態を取得することと、
前記状態が「修正済」である場合、前記第１のデータの最新のコピーを有するプロセッサを識別することと、
前記識別されたプロセッサが、前記第１のプロセッサとは異なる第２のプロセッサである場合、前記第２のプロセッサのプライベートキャッシュから前記ＬＬＣに前記第１のデータを読み込み、前記第１のデータの状態を「共有」に設定し、前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込み、前記キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサが前記第１のデータの最新のコピーを有すると示すことを含む、請求項１に記載の方法。
【請求項７】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣのディレクトリから前記第１のデータの状態を判定し、前記特別な状態である前記状態は、前記第１のデータが前記ＬＬＣにおける排他的な第２のプロセッサによって最後に修正されたことと、前記第２のプロセッサの前記プライベートキャッシュ内の前記第１のデータが無効化されたことをシグナリングすることと、
前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことと、
前記キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサが前記第１のデータの最新のコピーを有すると示すこと
を含む、請求項１に記載の方法。
【請求項８】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込んだ後、前記キャッシュラインの状態インデックスストリングを設定して、前記第１のデータがここで「共有及び修正済」の状態にあることを示すこと
をさらに含む、請求項７に記載の方法。
【請求項９】
データを処理するためのトランザクショナルメモリを備える複数のプロセッサ間のデータトラフィックを低減する方法であって、
第１のプロセッサを使用してトランザクションを処理することであって、前記トランザクションは、前記第１のプロセッサのプライベートキャッシュに第１のデータを読み込むことと、前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータに対する書き込み操作を実行することを含む、ことと、
前記書き込み操作の前に、前記第１のデータが、前記第１のプロセッサとは異なる第２のプロセッサによって最後に修正されたことを検出すると、
前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータを、前記複数のプロセッサによりアクセス可能なラストレベルキャッシュ（ＬＬＣ）に書き込むことによって、トランザクショナルメモリシステムに前記トランザクションをコミットし、キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータが前記第１のプロセッサによって最後に修正されたことを示し、前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータを無効化することと、
前記ＬＬＣ内の前記第１のデータのコピーを修正することによって、前記第１のデータを修正することと
を含む、方法。
【請求項１０】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータの特別な状態を示し、前記特別な状態は、前記ＬＬＣに書き込まれた前記第１のデータが修正済及び排他的であることと、前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータが無効化されたことをシグナリングすること
をさらに含む、請求項９に記載の方法。
【請求項１１】
前記トランザクションを前記処理することは、
前記第１のデータに対する前記書き込み操作を実行するとき、前記書き込み操作の前に、前記第１のデータが、前記第１のプロセッサとは異なる第２のプロセッサによって最後に修正されたことを検出すると、前記キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサの前記プライベートキャッシュに書き込まれた前記第１のデータの特別な状態を示し、前記特別な状態は、前記トランザクションがコミットされたとき、前記第１のデータが修正され、前記ＬＬＣに排他的に書き込まれることをシグナリングすること
をさらに含む、請求項９に記載の方法。
【請求項１２】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータの状態を示し、前記状態は前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータの状態と合致すること
をさらに含む、請求項９に記載の方法。
【請求項１３】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣのディレクトリから前記第１のデータの状態を取得することであって、前記状態は、前記第１のデータが前記ＬＬＣにおける排他的な前記第２のプロセッサによって最後に修正されたこと、および前記第２のプロセッサの前記プライベートキャッシュ内の前記第１のデータが無効化されたことをシグナリングする、ことと、
前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことと、
前記キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサが前記第１のデータの最新のコピーを有すると示すことと
を含む、請求項９に記載の方法。
【請求項１４】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込んだ後、前記キャッシュラインの状態インデックスストリングを設定して、前記第１のデータがここで「共有及び修正済」の状態にあることを示すこと
をさらに含む、請求項１３に記載の方法。
【請求項１５】
データを処理するためのトランザクショナルメモリを備える複数のプロセッサ間のデータトラフィックを低減するためのコンピューティングシステムであって、
少なくとも第１のプロセッサおよび第２のプロセッサを含む複数のプロセッサと、
前記複数のプロセッサのうちのそれぞれの１つによって各々アクセス可能な複数のプライベートキャッシュと、
複数のプロセス間で共有されるラストレベルキャッシュ（ＬＬＣ）と
を備え、
前記複数のプロセッサ、前記複数のプライベートキャッシュ、および前記ラストレベルキャッシュは、
前記第１のプロセッサを使用してトランザクションを処理することであって、前記トランザクションは、
前記第１のプロセッサのプライベートキャッシュに第１のデータを読み込むことと、
前記第１のデータに対する最近の修正の予め設定された条件が満たされたことを検出すると、
前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータに対する書き込み操作を実行することと、
キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサの前記プライベートキャッシュに書き込まれた前記第１のデータの特別な状態を示し、前記特別な状態は、前記トランザクションがコミットされたとき、前記第１のデータが修正され、ラストレベルキャッシュ（ＬＬＣ）に排他的に書き込まれることをシグナリングすることと
を含む、処理することと、
前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータを前記ＬＬＣに書き込むこと、および前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータを無効化することによって、前記トランザクションをトランザクショナルメモリシステムにコミットすることと、
前記ＬＬＣ内の前記第１のデータのコピーを修正することによって、前記第１のデータを修正することと
を含む機能を実行するようにプログラムされた、コンピューティングシステム。
【請求項１６】
最近の修正の前記予め設定された条件は、前記書き込み操作前に、前記第１のデータが前記第１のプロセッサと異なる第２のプロセッサによって最後に修正されたことを含む、請求項１５に記載のコンピューティングシステム。
【請求項１７】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータが前記第１のプロセッサによって最後に修正されたことを示すこと
をさらに含む、請求項１５に記載のコンピューティングシステム。
【請求項１８】
前記トランザクションを前記コミットすることは、
前記キャッシュラインの状態インデックスストリングを設定して、前記ＬＬＣに書き込まれた前記第１のデータの特別な状態を示し、前記特別な状態は、前記ＬＬＣに書き込まれた前記第１のデータが修正済及び排他的であることと、前記第１のプロセッサの前記プライベートキャッシュ内の前記第１のデータは無効化されたことをシグナリングすること
をさらに含む、請求項１５に記載のコンピューティングシステム。
【請求項１９】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣのディレクトリから前記第１のデータの状態を判定し、前記特別な状態である前記状態は、前記第１のデータが前記ＬＬＣにおける排他的な第２のプロセッサによって最後に修正されたことと、前記第２のプロセッサの前記プライベートキャッシュ内の前記第１のデータが無効化されたことをシグナリングすることと、
前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことと、
前記キャッシュラインの状態インデックスストリングを設定して、前記第１のプロセッサが前記第１のデータの最新のコピーを有すると示すこと
を含む、請求項１５に記載のコンピューティングシステム。
【請求項２０】
前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込むことは、
前記ＬＬＣから前記第１のプロセッサの前記プライベートキャッシュに前記第１のデータを読み込んだ後、前記キャッシュラインの状態インデックスストリングを設定して、前記第１のデータがここで「共有及び修正済」の状態にあることを示すこと
をさらに含む、請求項１９に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連特許出願
本願は、２０１４年３月２６日に出願された中国特許出願第２０１４１０１１７５５６．９号名称「データ処理のための方法及びプロセッサ」に対する優先権を主張し、これにより、この中国特許出願の内容全体を参照によってその全体が本明細書に組み込まれる。
【０００２】
本願は、コンピュータ技術に関し、特にデータ処理のための方法及びプロセッサに関する。
【背景技術】
【０００３】
コンピュータ技術は、マルチコアコンピューティングの方向に開発され続けており、消費電力と熱性能への懸念のため、この高性能コンピューティングの傾向は続く必要性がある。マルチコアアーキテクチャの使用を最適化するために、アプリケーションプログラムは多くの場合、シングルコア（プロセッサ）上でそれぞれ別個に動作するマルチスレッドに分けられ、より高い計算効率を有する並列コンピューティングを実現する。
【０００４】
図１Ａ及び図１Ｂは、従来のマルチコアアーキテクチャの概略図を示す。図１Ａは、コア間を相互にコアを訪れることを可能にするために、（太線にて表示された）ルーティングシステムを使用して相互接続された１６のＣＰＵコアＰ１、Ｐ２、・・・Ｐ１６を有する。図１Ｂは、キャッシュ*Ｌｎ及びＬＬＣを備えたそれぞれのＣＰＵコアの概略構造を示し、*Ｌｎは、第１レベルのキャッシュ（Ｌ１）及び／または第２レベルのキャッシュ（Ｌ２）を表し、一方、ＬＬＣはラストレベルキャッシュを意味する。*Ｌｎ及びＬＬＣはルーティングシステムを通じて接続され、ＬＬＣはルーティングシステムも通じて接続されたディレクトリを有する。プロセッサはメモリ（図示せず）からデータを読み取り、このデータはマルチコア（プロセッサ）のキャッシュ間に分配され得る。
【０００５】
データの同期を維持するため、異なるスレッドは同期機構により管理され、共有領域にアクセスする必要があり得、これは従来、マルチスレッドによるシリアルアクセスを必要とした。トランザクショナルメモリの設計は、並列処理のレベルを上げるために導入されてきた。トランザクショナルメモリは、プログラムを多くのトランザクションに分け、それぞれのトランザクションを別々に処理することにより、コンピューティングに対処する。それぞれのトランザクションの処理の間、トランザクションの状態は、隠され、その他のプロセッサによる影響を受けない。トランザクションの処理後、結果が次にグローバルシステムにコミットされる。異なるスレッドが衝突し、そのためロックが必要であると「悲観的に」仮定する代わりに、トランザクショナルメモリは、衝突が検出されない限り、異なるスレッドが略衝突しないと仮定して、より「楽観的」手法を取る。衝突が検出された場合、プログラムの状態は衝突前の状態にロールバックされ、データの整合性を維持する。トランザクショナルメモリは現在、ＩＢＭ社のＢｌｕｅ  Ｇｅｎ及びＩｎｔｅｌ社のＨａｓｗｅｌｌを含む、ＣＰＵのアーキテクチャにおいて使用されている。
【０００６】
トランザクショナルメモリは、ソフトウェアまたはハードウェアの何れかを使用する、２つの異なる方法で実現され得る。ソフトウェアトランザクショナルメモリは、低効率で低速度であり、一方ハードウェアトランザクショナルメモリは、技術の有用性を著しく上げた。本開示は、ハードウェアトランザクショナルメモリに関する。
【０００７】
トランザクショナルメモリは、マルチコアスレッドのうち、共有データの訪問は、書き込み−読み取り、読み取り−書き込み、及び書き込み−書き込みの衝突の発生がめったになく、したがってマルチスレッドは並行して操作可能であると仮定する。トランザクション中のデータの修正済の状態を隠し、衝突でロールバックすることによって、本システムの性能及びスケーラビリティはデータの整合性を損なうことなく上昇される。
【０００８】
トランザクショナルメモリはマルチコアシステムの並行性を上昇させるが、衝突率は、プログラムの性能に悪影響を大きく与え得るロールバックの量が過剰になるために並行性のレベルが上昇するにつれ上がる。
【０００９】
理論上は、事前無効化の技術は、共有データの修正時に衝突を著しく減少することにより、クリティカル領域の実行を改善し得る。しかしながら、事前無効化の技術は、グローバルデータの状態を変化させる必要がある。事前無効化が直接従来のトランザクショナルメモリの設計に適用される場合には、直接トランザクショナルメモリの設計と矛盾し、修正の間、隠された状態であることを必要とする。したがって、事前有効化及びトランザクショナルメモリは、単純に組み合わされることはできない。
【発明の概要】
【００１０】
本概要は、発明を実施するための形態において以下にさらに記載された、簡略化した形態における概念の選択を導入するために提供される。本概要は、請求する主題のすべての鍵となる特徴または本質的な特徴を同定することを意図するものではなく、請求する主題の範囲を決定する上での手助けとして、単独で使用されることを目的としていない。
【００１１】
本開示の一態様は、マルチプロセッサシステムにおけるトランザクショナルメモリを提供する方法である。本方法は、トランザクションを開始するための第１のプロセッサを使用し、第１のデータを第１のプロセッサのプライベートキャッシュに読み込むことと、第１のプロセッサのプライベートキャッシュ中の第１のデータに書き込み操作を実行することを含み得る。書き込み操作前に、第１のデータの最近の修正から予め設定された条件の検出に反応して、第１のプロセッサは修正済の第１のデータを、多数のプロセッサによってアクセス可能な、ラストレベルキャッシュ（ＬＬＣ）に書き込む。本システムはキャッシュラインの状態インデックスストリングを設定し、ＬＬＣに書き込まれた第１のデータは第１のプロセッサによって最後に修正されたことを示す。本システムはさらに、第１のプロセッサのプライベートキャッシュ中の第１のデータを無効化し、トランザクションをトランザクショナルメモリシステムにコミットする。
【００１２】
最近の修正の予め設定された条件は、書き込み操作前に、第１のデータは第１のプロセッサと異なる第２のプロセッサによって最後に修正された可能性がある。
【００１３】
本方法はさらに、キャッシュラインの状態インデックスストリングを設定し、ＬＬＣに書き込まれた第１のデータは第１のプロセッサによって最後に修正されたことを示し得る。本方法はまた、キャッシュラインの状態インデックスストリングを設定し、ＬＬＣに書き込まれた第１のデータの特別な状態を示し、特別な状態はＬＬＣに書き込まれた第１のデータが修正され（したがって、アップデートされ）、第１のプロセッサのプライベートキャッシュ中の第１のデータは無効化されたことを通知し得る。
【００１４】
本開示の別の態様は、トランザクショナルメモリを提供するための計算システムである。計算システムは、少なくとも第１のプロセッサと第２のプロセッサを含む複数のプロセッサと、複数のプロセッサのうちそれぞれ１つによって各々アクセス可能な複数のプライベートキャッシュと、複数のプロセス間で共有されるラストレベルキャッシュ（ＬＬＣ）とを含む。計算システムは開示された方法の機能を実行するようプログラムされている。
【００１５】
本開示による改善されたトランザクショナルメモリの設計は、予測機構を使用してトランザクショナルメモリ中のデータをプライベートキャッシュラインの代わりにＬＬＣ内に条件付きで配置し、また、対応するプライベートキャッシュラインを事前に無効化するのを可能にする。これは多数のプロセッサによってこのようなデータにより効率的にアクセスする結果となる。開示された設計は、従来のトランザクショナルメモリシステムに適用してそれらを改善することができる。単純な予測機構は、事前に無効化及びハードウェアのトランザクショナルメモリのシームレスな組み合わせを可能にし、結果的に、より精度の高い予測及びトランザクショナルメモリによってクリティカル領域の実行を効率化する。トランザクショナルメモリの実行中にデータの衝突によって生じたロールバックは減少され、マルチコアシステムの性能及びスケーラビリティが上昇される。
【００１６】
本開示のその他の特徴及び利点は、以下の説明に記載され、この記載からある程度明らかになり、または本願の実施によって理解されるであろう。本願の目的及びその他の利点は、具体的に実現、達成を言及された、記載された説明、特許請求の範囲及び構造の図面によって得ることが出来る。
【図面の簡単な説明】
【００１７】
【図１Ａ】マルチコア並列計算システムの多数のプロセッサの概略図である。
【図１Ｂ】それぞれのコア（プロセッサ）の構造の概略図である。
【図２】ラストレベルキャッシュ（ＬＬＣ）のディレクトリ中のデータ状態インデックスストリングの概略図である。
【図３】データ処理のための開示された方法における例示的実施形態のブロックフロー図である。
【図４】例示的実施形態の第１のプロセスの始めの、ＬＬＣのディレクトリ中のキャッシュラインのデータ状態インデックスストリングの概略図である。
【図５】例示的実施形態の第１のプロセスを示すブロックフロー図である。
【図６】例示的実施形態の第１のプロセスにおけるブロック１０４でのＬＬＣのディレクトリ中のキャッシュラインのデータ状態インデックスストリングのブロックフロー図である。
【図７】例示的実施形態の第１のプロセスにおけるブロック１１０でのＬＬＣのディレクトリ中のキャッシュラインのデータ状態インデックスストリングのブロックフロー図である。
【図８】例示的実施形態の第２のプロセスを示すブロックフロー図である。
【図９】例示的実施形態の第２のプロセスにおけるブロック２１０でのＬＬＣのディレクトリ中のキャッシュラインのデータ状態インデックスストリングのブロックフロー図である。
【図１０】例示的実施形態の第３のプロセスを示すブロックフロー図である。
【図１１】例示的実施形態の第３のプロセスにおけるブロック３０４でのＬＬＣのディレクトリ中のキャッシュラインのデータ状態インデックスストリングのブロックフロー図である。
【図１２】例示的実施形態の第３のプロセスにおけるブロック３１０でのＬＬＣのディレクトリ中のキャッシュラインのデータ状態インデックスストリングのブロックフロー図である。
【図１３】トランザクショナルメモリを提供する計算システムの構造図である。
【発明を実施するための形態】
【００１８】
本開示は、添付の図及び例示的実施形態とともにさらに詳細に記載されている。記載においては、例えば、「技術（単数または複数）」という用語は、上述の文脈及び本開示を通して許可された、方法、機器装置、システム及び／またはコンピュータ可読命令を意味し得る。
【００１９】
この記載においては、プロセスが記載されている順序は、限定するものと解釈されることを意図せず、任意の数の記載されたプロセスのブロックは、本方法または代替的な方法を実行するために任意の順序で組み合わされ得る。実施形態は説明の利便性のためのみに、連続した工程で記載されている。矛盾が生じない限り、本開示に記載された実施例及び実施形態並びにその特徴及び特色は自由に組み合わせられ得る。さらに、本開示の技術を実行するために、実施形態に記載されているすべての工程が必要とされるわけではない。
【００２０】
典型的な構成においては、マルチコアシステムは、多数のプロセッサ（ＣＰＵ）、１つ以上のＩ／Ｏインタフェース、ネットワークインタフェース及びメモリを含む。メモリは、揮発性メモリ、ランダムアクセスメモリ（ＲＡＭ）、及び／または読み出し専用メモリ（ＲＯＭ）若しくはフラッシュメモリ（フラッシュＲＡＭ）のような他の形態の不揮発性メモリのような、コンピュータ可読媒体を含み得る。計算装置の内部メモリは、コンピュータ可読メモリ媒体の一種である。プロセッサは内蔵のキャッシュメモリを有する。
【００２１】
コンピュータ可読媒体は、永続的及び非永続的、取り外し可能及び取り外し不可能な媒体を含み、情報の記憶のために任意の方法や技術で形成され得る。記憶された情報は、コンピュータ可読命令、データ構造、プログラムモジュールまたはその他のデータのセットであり得る。コンピュータ記憶媒体の実施例は、相変化メモリ（ＰＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、その他の種類のランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的に消去可能なプログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ若しくはその他のメモリ技術、ＣＤ−ＲＯＭ読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタルヴァーサタイルディスク（ＤＶＤ）若しくはその他の光記憶装置、磁気カセット、磁気テープディスクストレージ若しくはその他の磁気記憶装置または計算装置によってアクセス可能な情報を記憶するために使用され得る任意のその他の非伝達媒体を含むが、これらに限定されない。本開示の定義によると、コンピュータ可読媒体は、変調されたデータ信号及び搬送波のような、一時的なコンピュータ可読媒体（一過性の媒体）を含まない。
【００２２】
以下、従来のハードウェアのトランザクショナルメモリの動作原理が始めに記載されている。
【００２３】
従来のハードウェアのトランザクショナルメモリにおいては、プログラムコードはＣＰＵに、Ｔｒａｎｓａｃｔｉｏｎ＿ｓｔａｒｔ及びＴｒａｎｓａｃｔｉｏｎ＿ｅｎｄのような命令を使用して、トランザクション領域のスタートとエンドがどこであるかを知らせる。スタートとエンドとの間は、実行するためのトランザクション領域である。トランザクション領域の実行が一旦行われると、Ｔｒａｎｓａｃｔｉｏｎ＿ｅｎｄの命令がＣＰＵに修正済のデータを最小単位でコミットするよう依頼し、これはコミットのプロセスが割り込まれたり訪れられたりしないことを意味する。トランザクションの実行中、読み込み操作または書き込み操作を行ったすべてのメモリ領域は、書き込み−読み取り、読み取り−書き込み及び書き込み−書き込み衝突を避けるために監視され、トランザクショナルメモリのプロセスを実行中、すべての書き込み操作前の元データのコピーが保持されることを確保する。例えば、キャッシュラインは、対応する不可視のプライベートキャッシュ（例えば、第１レベルキャッシュＬ１）にコピーされ、キャッシュラインの任意の次に書き込まれたデータは不可視のプライベートキャッシュ中に保持され得る。衝突の場合においては、不可視のプライベートキャッシュ（例えば、Ｌ１）中の修正済のデータは破棄される。トランザクションが成功すると、不可視のプライベートキャッシュ（例えば、Ｌ１）中の修正済のデータは、元のデータを置き換える。
【００２４】
通常、キャッシュデータの整合性と一貫性を維持する２つの方法、つまり、ブロードキャスト及びディレクトリがある。ブロードキャストの方法は、比較的少数のコアのアーキテクチャには、より好適である。一方、ディレクトリの方法は強力なスケーラビリティを有し、より大きなマルチコアシステムにより好適である。本開示は、開示された技術もまた原理においてはブロードキャストの方法に好適であるが、説明のための基礎として、主としてディレクトリの方法を使用する。
【００２５】
図２にて示されているように、すべてのキャッシュラインはＬＬＣディレクトリにおける多数のビット位置のデータ状態インデックスストリングを有する。図２においては、ビット位置である「タグ」は、ディレクトリ中のキャッシュラインのインデックスマーカであり、通常、キャッシュラインデータの上位ビットに配置されている。「状態」とは、データ状態のインジケータであり、排他的、修正済、共有、及び無効の状態の任意のうちの一つであり得る。共有された状態では、データは１つ以上のプロセッサのプライベートキャッシュに分配される。データインジケータのビットＰ０、Ｐ１、…Ｐｎ−１のそれぞれは、ｎプロセッサＣＰＵ１、ＣＰＵ２、…ＣＰＵｎ−１に対応する。ＣＰＵがキャッシュラインの分配されたデータを有する場合、それぞれのデータインジケータのビットは値「１」を有し、ＣＰＵがキャッシュラインの分配されたデータを有しない場合、それぞれのデータインジケータのビットは値「０」を有する。キャッシュラインが「修正済」の状態にあるとき、１つのＣＰＵ（プロセッサ）のみが最新のデータを有するであろう。すなわち、データ状態インデックスストリングのうち、１つのデータインジケータのビットのみが値「１」を有し、すべてのその他のデータインジケータのビットは値「０」を有するだろう。
【００２６】
それぞれの書き込み操作は、キャッシュラインの状態（上に列挙した４つの状態のいずれかであり得る）は、「修正済」の状態に変更されることを要するであろう。「修正済」状態への変化においては、本システムは、データを無効化するために、元のデータのコピーを有するすべてのＣＰＵに要求を送信する。すなわち、それぞれの対応するＣＰＵのプライベートキャッシュのデータは無効化するよう命令され、ＣＰＵに対応するキャッシュライン中のデータインジケータのビットは「０」に設定され、ＣＰＵのプライベートキャッシュ中の新しく修正されたものを唯一の有効なデータにする。本プロセス後、その他のＣＰＵはみな、修正済のデータを読み込む必要がある場合には、新しい修正済のデータを有するＣＰＵのみからデータを読み込む必要があるだろう。ＣＰＵの数が増えるにしたがい、修正済のデータを読み込む時間も迅速に上昇する。トランザクショナルメモリのクリティカル領域中の修正済のデータのすべての読み込み、及び修正済のデータのすべての送信は、この速度を落とすプロセスを含む。本明細書にて開示されている本方法の目的は、このプロセスをより速く、かつ並列計算の時間を増加し、衝突率を下げることである。
【００２７】
図３は、データ処理のための開示された方法における例示的実施形態のブロックフロー図である。
【００２８】
Ｓ１ブロックでは、第１のプロセッサ（例えば、Ｐ１）はトランザクションの処理を開始する。トランザクションはプログラム中のマークされた領域によって定義され、通常、少なくとも第１のデータをシステムのメモリからプロセッサのプライベートキャッシュへと読み込むことを含む。トランザクションは多くの場合、データへの書き込み操作も含み得る。簡潔にするために、書き込み操作を行うのは、プロセッサのプライベートキャッシュにたった今読み込まれた第１のデータに対して行われる。
【００２９】
ブロックＳ２では、トランザクションの処理の一部として、第１のプロセッサはプライベートキャッシュ中の第１のデータの書き込み操作を行う。書き込み操作が行われた後、第１のプロセッサは、次で説明されている通り、トランザクショナルメモリシステムにトランザクションの結果をコミットし始め得る。
【００３０】
ブロックＳ３では、システムはトランザクションをコミットし始める。書き込み操作の前に、第１のデータが、第１のプロセッサとは異なる第２のプロセッサによって最後に修正されたという検出に対応して、本システムは第１のプロセッサのプライベートキャッシュ中の第１のデータを、多数のプロセッサによりアクセス可能なラストレベルキャッシュ（ＬＬＣ）へと書き込む。本システムはさらに、キャッシュラインの状態インデックスストリングを設定し、ＬＬＣに書き込まれた第１のデータは第１のプロセッサによって最後に修正されたことを示し、第１のプロセッサのプライベートキャッシュ中の第１のデータを無効化する。
【００３１】
本開示の一つの重要な態様は、第１のデータに書き込み操作を行う前に、第１のデータに行われた最近の修正の状態に応じて、システムはプロセッサのキャッシュメモリ中の修正済のデータを別々に処理する。システムが、データへの最後の修正に基いて、修正済のデータがその他のプロセッサによって読み込まれる可能性が高くなったと予測した場合には、データにたった今修正が行われた現在のプロセッサのプライベートキャッシュの代わりに、システムは修正済のデータをプロセッサのＬＬＣにコミットする。上述のブロックＳ３で説明された実施例においては、予測は単に、書き込み操作の前に、第１のデータが、第１のプロセッサとは異なる第２のプロセッサによって最後に修正されたという検出に基づく。しかしながら、修正済のデータをＬＬＣに移動することは、トランザクショナルメモリの効率化には全面的に有益である結果となり得るという、有意性のある予測に基づいた任意の条件は、使用され得ると理解されている。
【００３２】
各データはトランザクショナルメモリ中のキャッシュラインに対応している。ＬＬＣディレクトリ中の対応するキャッシュラインのデータ状態インデックスストリングは、どのプロセッサがデータに最後に修正を行ったかを見分ける。それが現在のプロセッサ（本実施例の第１のプロセッサ）である場合には、従来のトランザクショナルメモリスキームが使用され得る。具体的には、修正済のデータは、現在のプロセッサのプライベートキャッシュ中に保持され得る。しかし、図３に図示したように、現在のデータ（本実施例の第１のデータ）に修正を行ったのが別のプロセッサである場合には、現在のプロセッサによる書き込み操作の後、修正済のデータはＬＬＣへと書き込まれる。その間、現在のプロセッサのプライベートキャッシュ中のデータが無効化され、より高い効率をもたらす事前無効化の影響を有するが、同時に、やみくもに使用されて事前無効化がトランザクショナルメモリの利点が失われないように、予測条件に基づいて選択的に行われる。
【００３３】
換言すれば、予測条件に合致するキャッシュラインの場合、対応する修正済のデータは、現在のプロセッサの代わりにＬＬＣに保存されるため、及び、さらに修正済のデータがコミットされると現在のプロセッサ中のデータは無効化されるため、この特定のデータへの任意のその後の修正は、ＬＬＣに保持されるコピーに対して行われ、これにより、プロセッサ間のデータトラフィックを避け、トランザクショナルメモリシステムの性能を上げる。さらに、開示された方法を使用すると、ＬＬＣに保存された修正済のデータの読み取り時間がプロセッサの数とともに迅速に増加しないため、本システムのスケーラビリティが改善される。
【００３４】
本明細書において記載されている方法は、プロセッサの操作において自動的に実行されるようにプロセッサのロジックに直接事前に実装されるか、プロセッサによって実行されるべきアプリケーションソフトウェアの追加のコーディングを使用して実装されるかの何れかであり得る。後者の場合には、本明細書において記載されている方法は、プロセッサに追加のコーディングを使用して必要な機能を実行するよう命令することにより行われる。
【００３５】
いくつかの実施形態では、第１のデータに書き込み操作を行うとき、本方法は、異なるプロセッサが書き込み操作の前に第１のデータに最後の修正を行ったという検出に対応して、キャッシュラインの状態インデックスストリングを設定し、第１のプロセッサのプライベートキャッシュに書き込まれた第１のデータの特別な状態を示す。特別な状態になると、第１のデータが修正され、トランザクションがコミットされるときにＬＬＣに排他的に書き込まれるべきであると信号を送る。特別な状態の指定は、トランザクショナルメモリを調節するための効率的な信号として機能する。特別な状態は、修正済、排他的、共有または無効のような任意の一般に使用される状態とは異なるべきである。特別な状態の一例は、「修正済及び排他的」であり、これはデータが修正され、その他の修正されたものと比較して排他的または独特な特徴も有することを表している。同一のプロセッサ（本実施例の第１のプロセッサ）が書き込み操作の前に第１のデータに最後の修正を行ったということが検出された場合には、本方法は、キャッシュラインの状態インデックスストリングを設定し、第１のプロセッサのプライベートキャッシュに書き込まれた第１のデータの「修正済」の状態であることを示す。これは一般的なトランザクショナルメモリの設計と一致している。
【００３６】
したがって、トランザクションの修正済のデータをコミットするときには、本方法はまた、第１のプロセッサのプライベートキャッシュ中の第１のデータが特別な状態であるとの認識に対応して、ＬＬＣディレクトリ中の修正済の第１のデータの状態も特別な状態に設定する。例えば、ＬＬＣディレクトリ中の修正済の第１のデータの状態は、ＬＬＣ中の第１のデータが修正済の状態にあり、また、その他の修正済のデータと比較して排他的または独特な特徴を有することを示すために、「修正済及び排他的」と設定され得る。
【００３７】
ブロックＳ４では、トランザクションの送信は完了する。
【００３８】
要約すれば、システムが、第１のデータは現在書き込み操作を行っている同一のプロセスによって最後に修正されたと認識した場合には、共有のトランザクショナルメモリの方法を使用して修正済の第１のデータを扱う。しかし、システムが予測した条件に合致した（例えば、第１のデータが異なるプロセッサによって最後に修正された）と認識した場合には、本システムは、修正済のデータの状態を特別な状態（例えば、「修正済及び排他的」）に設定し、修正済のデータをＬＬＣに移動することによって特別な処理を示す。この設計により、任意の次のトランザクションは、データがＬＬＣに書き込まれたことを明瞭に通知され、（第１のデータに最後に書き込み操作が行われた）第１のプロセッサ中の対応するデータはすでに無効化されている。
【００３９】
上記のようなトランザクション処理（ブロックＳ１を含む）は、２つの異なる場合で下記に記載されたサブブロックをさらに含み得る。
【００４０】
第１の場合は、現在の第１のデータが通常の「修正された」状態、つまり特別な処理を必要としない場合である。
【００４１】
サブブロックＳ１１（図示せず）では、第１のプロセッサはトランザクションの処理を開始する。第１のデータがプライベートキャッシュに見られない場合には、システムはＬＬＣディレクトリを訪れ、アドレスマッピングにより必要な第１のデータを見つける。
【００４２】
サブブロックＳ１２（図示せず）では、システムは、第１のデータのキャッシュラインに対応するＬＬＣディレクトリ中の第１の状態インデックスストリングによる第１のデータの状態を得る。「修正済」の状態であれば、プロセスはサブブロックＳ１３に進む。
【００４３】
サブブロックＳ１３（図示せず）では、第１のデータのインジケータストリングのデータインジケータビットに基づいて、システムは第１のデータを最後に修正したプロセッサの識別子を特定する。第２のプロセッサである場合には、システムは第２のプロセッサのプライベートキャッシュからＬＬＣへ第１のデータを読み込み、ＬＬＣ中の第１のデータの状態を「共有」に変更する。第１のプロセッサの場合には、プロセスは図３のブロックＳ２に直接進み、以下のサブブロックＳ１４を省き、第１のプロセッサのプライベートキャッシュ中の第１のデータに書き込み操作を行う。この場合、第１のデータの状態が特別な「修正済及び排他的」な状態ではなく、通常の「修正済」の状態のため、修正された第１のデータは第１のプロセッサのプライベートキャッシュ中に保持される。
【００４４】
第２のプロセッサのプライベートキャッシュ中の修正された第１のデータがＬＬＣに読み込まれたサブブロックＳ１３から続くサブブロックＳ１４（図示せず）では、システムは、次に、ＬＬＣからの第１のデータを第１のプロセッサのプライベートキャッシュへと読み込み、第１のプロセッサに対応する、第１の状態インデックスストリング中のデータインジケータのビットの値を「１」に設定する。
【００４５】
上記のサブブロックＳ１３は、第１のデータの状態が「修正済及び排他的」のような特別な状態ではなく、通常の「修正済」であるトランザクショナルメモリプロセスを表す。第１のデータが以前に、本明細書で開示された、特別に改善されたトランザクショナルメモリの方法を使用して処理されていないときに、この場合が起こる。サブブロックＳ１３が行われる前では、最新の第１のデータが第２のプロセッサに保持される場合には、次に第１のプロセッサが第１のデータを読み込むために、システムは、はじめに第２のプロセッサから第１のデータをＬＬＣに読み込む必要がある。この場合には、第１のプロセッサが第１のデータに書き込み操作を行った後、第２のプロセッサ中の第１のデータは無効化されるべきである。
【００４６】
本明細書で記載された多くのその他の工程またはブロックのように、サブブロックＳ１４及び第１のデータの状態を「共有」に変更する工程は、実行されるときに任意の特定の順序を必要とせず、同時に実施してよいということに注意する。
【００４７】
第２の場合は、異なる処理を受ける、現在の第１のデータが「修正済及び排他的」な特別の状態にある場合である。
【００４８】
サブブロックＳ１１’（図示せず）では、第１のプロセッサはトランザクションを処理し始める。第１のデータがプライベートキャッシュ中に見つからない場合には、システムはアドレスマッピングにしたがいＬＬＣディレクトリを訪れ、必要な第１のデータを見つける。
【００４９】
サブブロックＳ１２’（図示せず）では、システムは、第１のデータのキャッシュラインに対応するＬＬＣディレクトリ中の第１の状態インデックスストリングによる第１のデータの状態を得る。状態が「修正済及び排他的」であれば、プロセスはサブブロックＳ１３’に進む。
【００５０】
サブブロックＳ１３’（図示せず）では、システムはＬＬＣディレクトリ中の第１のデータの状態を「修正済及び排他的」な状態に変更し、「修正済及び排他的」という特別な状態にあった第１のデータがここで第１のプロセッサで共有されることを示す。
【００５１】
サブブロックＳ１４’（図示せず）では、第１のデータの「修正済及び排他的」な特別な状態に基づくため、システムは修正された第１のデータがすでにＬＬＣにあることを認識する。よって、システムは、ＬＬＣからの第１のデータを第１のプロセッサのプライベートキャッシュへと読み込み、第１のプロセッサに対応する、第１の状態インデックスストリング中のデータインジケータのビットの値を「１」に設定する。
【００５２】
本明細書で記載された多くのその他の工程またはブロックのように、サブブロックＳ１３’及びサブブロックＳ１４’は、実行されるときに任意の特定の順序を必要とせず、同時に実行してよいということに注意する。
【００５３】
上記のサブブロック１３’は、第１のデータの状態が「修正済及び排他的」という特別な状態である、トランザクショナルメモリプロセスを表す。第１のデータが以前に、本明細書で開示された、特別に改善されたトランザクショナルメモリの方法を使用して既に処理されたときに、この場合が起こる。サブブロック１３’が行われる前の時点で、最新の第１のデータはＬＬＣに保持される。第１のプロセッサが第１のデータを読み込むためには、システムはＬＬＣから第１のデータを第１のプロセッサに読み込まねばならない。この場合、第１のプロセッサがＬＬＣから第１のデータを読み込んだ後、第１のデータが多数のプロセッサ間で共有され得る通常の「共有された」状態と区別するため、第１のデータの状態を「修正済及び共有された」状態に変更するべきである。「修正済及び共有された」特別な状態においては、その他のプロセッサは、第１のデータの有効なコピーを有さなくて良い。第１のデータは、現在の状態でＬＬＣと第１のプロセッサの両方にあるという意味において「共有され」ており、第１のデータは依然として最新であるという意味において「修正され」ている。この区別が、その他のプロセッサ中に保持された第１のデータを無効化する必要があるか否かを決定する、次のプロセスに役立つ。
【００５４】
前述したようにトランザクションをコミットするプロセス（ブロックＳ３を含む）は、さらに以下に記載するプロセスを含み得る。
【００５５】
トランザクションをコミットするプロセスの間、トランザクションの間、第１のプロセッサが第１のデータへの書き込み操作を実行したと仮定すると、システムはＬＬＣディレクトリ中の第１のデータのデータインジケータのビットのそれぞれを調べ、第１のプロセッサのデータインジケータのビット（Ｐ１）に加えて、対応するデータインジケータのビットが値「１」を有する任意のその他のプロセッサがあるかどうかを判定し得る。ある場合には、システムは、（現在の第１のプロセッサ以外の）これらのプロセッサ中の第１のデータの無効化へ進み、対応するデータインジケータのビットを再設定する（すなわち、値を「０」の設定に戻す）。
【００５６】
このようにして、開示されて改善された方法が第１のデータにはじめて適用されるか否かにかかわらず、トランザクションをコミットした後、（第１のデータに対応する）第１の状態インデックスストリング中の状態インジケータは、常に「修正済及び排他的」であると言われる。さらに、すべてのデータインジケータのビットのうち、第１のプロセッサに対応するビットのみが、第１のプロセッサが第１のデータを最後に修正したことを示す値「１」を有する。
【００５７】
以下に、従来の方法と比較して、開示されたデータ処理方法を示す３つの具体例が記載されている。
【００５８】
第１の実施例では、データ処理は後述のように従来の方法に見られるような通常の手段で行われる。
【００５９】
データが修正済であるとみなし、かつすべてのその他のＣＰＵ中のデータを無効化した後、ＣＰＵ１のプライベートキャッシュのみが最新のデータを有する。ＬＬＣディレクトリは、ＣＰＵ１が最新のデータを有し、データの現在の状態が「修正済」であるというステータスを反映する。図４は、状態インジケータが「修正済」である、ＬＬＣディレクトリ中の状態インデックスストリングの初期ステータスを示し、ＣＰＵ１に対応するデータインジケータのビットＰ１のみが値「１」を有し、すべてのその他のデータインジケータのビットは値「０」を有する。
【００６０】
図５は、ブロック１０１〜ブロック１１１を含む、トランザクション中の読み取り−書き込み操作を実行するＣＰＵ０を示す。
【００６１】
ブロック１０１では、ＣＰＵ０はトランザクションを処理し始める。
【００６２】
ブロック１０２では、ＣＰＵ０は、最初に自身のプライベートキャッシュ中のデータを読み取ろうとする。
【００６３】
ブロック１０３では、ＣＰＵ０のプライベートキャッシュがデータを有しないと検出すると、ＣＰＵ０は、データのアドレスマッピングにしたがいＬＬＣディレクトリを訪問する。
【００６４】
ブロック１０４では、ＬＬＣディレクトリにより、システムはＣＰＵ１が最新のデータを有すると判断し、ＣＰＵ１にデータを主メモリに書き込むよう命令する。同時に、システムはまた、ＣＰＵ１のプライベートキャッシュからデータをＬＬＣに読み込み、データに対応するキャッシュラインのＬＬＣディレクトリの状態インジケータを「共有」に設定し、データインジケータのビットＰ０を、（すでに「１」であるべきデータインジケータのビットＰ１とともに）「１」に設定し、データをＬＬＣからＣＰＵ０へと送信する。図６はＬＬＣディレクトリ中の状態インデックスストリングの現在のステータスを示す。
【００６５】
ブロック１０５では、ＣＰＵ０はデータを自身のプライベートキャッシュに保存する。対応するキャッシュラインはここで、「共有された」状態を有する。データの読み取りが終了する。
【００６６】
ブロック１０６では、ＣＰＵ０は自身のプライベートキャッシュ中のデータを操作する。トランザクションがコミットされる前に、任意の書き込み操作の結果はグローバルな状態に影響を与えるためにＬＬＣに返信されない。
【００６７】
ブロック１０７では、ＣＰＵ０はトランザクションの結果をトランザクションメモリシステムにコミットし始める。
【００６８】
ブロック１０８では、この時点でキャッシュラインの状態が「共有」であるため、任意の書き込み操作は、その他のＣＰＵのプライベートキャッシュ中の同一のデータが無効化されていることを要するであろう。これをするためには、ＣＰＵ０はＬＬＣディレクトリをデータのアドレスマッピングにしたがい点検する。
【００６９】
ブロック１０９では、ＬＬＣディレクトリに基づき、ＣＰＵ１がデータのコピーを有すると判定される。よって、ＣＰＵ１のプライベートキャッシュ中のデータは、無効化されており、対応するデータインジケータのビットＰ１は値「０」に再設定される。
【００７０】
ブロック１１０では、システムはＬＬＣディレクトリの対応するキャッシュラインの状態インデックスストリングを設定する。図７に示すように、状態インジケータが「修正済」に設定され、データインジケータのビットＰ０は「１」である。一方、すべてのその他のデータインジケータのビットは「０」であり。データはＣＰＵ０のみで見られることを示している。
【００７１】
ブロック１１１では、トランザクションをトランザクショナルメモリに送信することが完了する。
【００７２】
衝突を避けるために、ブロック１０７〜ブロック１１０はコミットするときにアトミック処理に組み合わされる。
【００７３】
ＣＰＵ０のプライベートキャッシュ中のキャッシュラインの状態は、本トランザクションの最後で「修正済」であることが理解できる。次にＣＰＵ１が同一のデータを操作する場合、ＣＰＵ０とＣＰＵ１の置き換えのみを行い、上述のプロセスを繰り返す必要があろう。このプロセスが別のＣＰＵのプライベートキャッシュを訪問する１つのＣＰＵを含むため（例えば、他方のＣＰＵからデータを読み取り、次にその他方のＣＰＵのデータを無効化することを含む）、ＣＰＵコアの数の増加にしたがって遅延が増加するであろう。この上述した第１の実施例は、従来のトランザクショナルメモリの方法による例示的なプロセスを示す。
【００７４】
第２の実施例では、データ処理は、本開示による異なる方法にて行われる。本方法は、事前無効化の技術にトランザクショナルメモリをシームレスに組み合わせ、トランザクションメモリの処理を加速する。
【００７５】
最初にデータは、「修正済」の状態でＣＰＵ１のプライベートキャッシュ内にあることを依然として仮定する。ＬＬＣディレクトリ中のデータの初期の状態インデックスストリングは、図４に示されたものと同一である。
【００７６】
図８は、ブロック２０１〜ブロック２１１を含む、第２の実施例のデータ処理のブロックフロー図を示す。
【００７７】
ブロック２０１〜ブロック２０５は、ブロック１０１〜ブロック１０５と同一である。例えば、ブロック２０４では、ＬＬＣディレクトリ中のキャッシュラインの状態インデックスストリングは図６に示されている。すなわち、データインジケータのビットＰ０及びＰ１は両方共「１」であるが、状態インジケータは「共有」に設定される。
【００７８】
ブロック２０６では、ＣＰＵ０は自身のプライベートキャッシュ中のデータを操作する。トランザクションがコミットされる前に、任意の書き込み操作の結果はグローバルな状態に影響を与えるためにＬＬＣに返信されない。ＣＰＵ０が読み取り操作のみ行う場合には、ＣＰＵ０のプライベートキャッシュ中のデータは、「共有」の状態に設定される。ＣＰＵ０が書き込み操作を行う場合には、ＣＰＵ０は、データが別のＣＰＵ（本実施例ではＣＰＵ１）によって最後に修正されたと認識するため、ＣＰＵ０のプライベートキャッシュ中のデータは、ここで特別な状態、例えば「修正済及び排他的」に設定される。
【００７９】
しかしながら、データが同一のＣＰＵにより最後に修正された場合には（本実施例ではＣＰＵ０、図示されていない）、ＣＰＵ０のプライベートキャッシュ中のデータは、通常の状態の「修正済」に設定されるであろう。
【００８０】
ブロック２０７では、ＣＰＵ０はトランザクションの結果をトランザクションメモリシステムにコミットし始める。
【００８１】
ブロック２０８では、システムはデータのアドレスマッピングにしたがいＬＬＣディレクトリを点検し、無効化を行う。この時点でのキャッシュラインの状態は、修正履歴及びトランザクションにおける操作により、いくつかの可能性を有する。トランザクションが読み取り操作のみ行った場合には、キャッシュラインの状態は「共有」になるであろう。最後の修正を行った前のプロセッサ（本実施例ではＣＰＵ１）に保持されたデータは最新のままであるため、システムは、ＣＰＵ０のプライベートキャッシュ中のデータを無効化し得る。トランザクションが書き込み操作をした場合には、この時点でのキャッシュラインの状態は、書き込み操作の前の修正履歴に応じて、「修正済及び排他的」または「修正済」の何れかであろう。いずれの場合においても、その他のプロセッサのプライベートキャッシュにおけるデータは、無効化される必要があり得る。
【００８２】
ブロック２０９では、ＬＬＣディレクトリに基づき、ＣＰＵ１がデータのコピーを有すると決定する。よって、ＣＰＵ１のプライベートキャッシュ中のデータは、無効化され、対応するデータインジケータのビットＰ１は値「０」に再設定される。
【００８３】
この時点でのキャッシュラインの状態が「修正済及び排他的」である場合には、修正履歴の予測条件が合致することを示し、システムは（「修正済及び排他的」な状態を有する）ＣＰＵ０のプライベートキャッシュ中のデータをＬＬＣに書き込み、ＣＰＵ０のプライベートキャッシュ中のデータを無効化する。この時点でのキャッシュラインの状態が「修正済」である場合には、データはＣＰＵ０のプライベートキャッシュ中に保持される。
【００８４】
ブロック２１０では、システムは、ＬＬＣディレクトリにおいて、ＣＰＵ０が書き込み操作を実行したデータの状態インデックスストリングを設定する。図９に示すように、ＣＰＵ０のプライベートキャッシュ中におけるデータの状態が「修正済及び排他的」である場合には、ＬＬＣディレクトリ中の状態インデックスストリングの状態インジケータも「修正済及び排他的」に設定され、ＣＰＵ０のプライベートキャッシュにおけるデータの状態が「修正済」である場合には、ＬＬＣディレクトリにおける状態インデックスストリングの状態インジケータもまた「修正済」に設定される。いずれの場合においても、データインジケータのビットＰ０は「１」であり、データが最後にＣＰＵ０によって修正されたことを示す。
【００８５】
ブロック２１１では、トランザクションをトランザクショナルメモリにコミットするプロセスが完成される。
【００８６】
衝突を避けるために、ブロック２０７〜ブロック２１１はコミットされるときにアトミック処理に組み合わされる。
【００８７】
書き込み操作が行われたばかりのデータがＬＬＣにあり、その状態は本トランザクションの最後で「修正済及び排他的」であることが理解できる。データインジケータのビット値によると、データを最後に修正したプロセッサはＣＰＵ０である。しかしながら、ＣＰＵ０はデータを有しないため、次のＣＰＵの操作において、システムはデータＣＰＵ０を無効化する必要はない。その上、別のＣＰＵがデータを読み取る必要がある場合には、最初にＣＰＵ０にデータをＬＬＣに最初に書き込むよう要求してから次にその他のＣＰＵによって読み取られるのではなく、ＬＬＣディレクトリから直接読み取ることができる。
【００８８】
３番目の実施例においては、本開示によると、追加のデータ処理は、上述した第２の実施例におけるプロセスにしたがって行われる。
【００８９】
図１０は、ブロック３０１〜ブロック３０８を含む、第３の実施例のデータ処理のブロックフロー図を示す。
【００９０】
ブロック３０１では、ＣＰＵ１はトランザクションの処理を開始する。
【００９１】
ブロック３０２では、ＣＰＵ１は、最初に自身のプライベートキャッシュ中のデータを読み取ろうとする。
【００９２】
ブロック３０３では、ＣＰＵ１のプライベートキャッシュがデータを有しないと検出すると、ＣＰＵ１は、データのアドレスマッピングにしたがいＬＬＣディレクトリを訪問する。読み取られる必要があるデータに対応するキャッシュラインの状態インジケータによると、データの状態は、ＣＰＵ０によって最後に修正された「修正済及び排他的」である。図１１にて示すように、ＣＰＵ１はデータを読み取る必要が有るため、システムは、データのキャッシュラインの状態インジケータを「修正済及び共有」に変更し、Ｐ１を「１」に設定し、Ｐ０を「０」に再設定する。
【００９３】
ブロック３０４では、データはＣＰＵ１のプライベートキャッシュ中に記憶される。データの読み取りが終了する。
【００９４】
ブロック３０５では、ＣＰＵ１はプライベートキャッシュ中のデータを操作する。トランザクションがコミットされる前に、データへのすべての操作はＣＰＵ１のプライベートキャッシュ中に起こり、任意の書き込み操作の結果はグローバルな状態に影響を与えるためＬＬＣに送信されない。ＣＰＵ１が読み取り操作のみ行う場合には、ＣＰＵ１のプライベートキャッシュ中のデータは、「共有」の状態に設定される。ＣＰＵ１が書き込み操作を行う場合には、ＣＰＵ１は、データが別のＣＰＵ（本実施例のＣＰＵ０）によって最後に修正されたと認識するため、ＣＰＵ１のプライベートキャッシュ中のデータは、ここで特別な状態、例えば「修正済及び排他的」に設定される。
【００９５】
しかしながら、データが同一のＣＰＵにより最後に修正された場合には（本実施例ではＣＰＵ１、図示されていない）、ＣＰＵ１のプライベートキャッシュ中のデータは、通常の状態の「修正済」に設定されるであろう。
【００９６】
ブロック３０６では、ＣＰＵ１はトランザクションメモリシステムにトランザクションの結果をコミットし始める。
【００９７】
ブロック３０７では、システムはＬＬＣにＣＰＵ１中のデータを書き込み、ＣＰＵ１中のデータを無効化し、それに応じてデータの状態インデックスストリングを設定する。
【００９８】
この段階では、システムはデータのアドレスマッピングにしたがいＬＬＣディレクトリを点検し、無効化を行ってよい。この時点でのキャッシュラインの状態は、修正履歴及びトランザクションにおける操作に応じて、いくつかの可能性を有する。トランザクションが読み取り操作のみをした場合には、システムは、最後に修正した前のプロセッサ（本実施例ではＣＰＵ０）に保持されたデータは、最新のままであるため、ＣＰＵ１のプライベートキャッシュ中のデータを無効化し得る。トランザクションが書き込み操作をした場合には、この時点でのキャッシュラインの状態は、書き込み操作の前の修正履歴に応じて、「修正済及び排他的」または「修正済」の何れかであろう。いずれの場合においても、その他のプロセッサのプライベートキャッシュにおけるデータは、無効化される必要があり得る。ＬＬＣ中のデータの状態インデックスストリングが、Ｐ１以外、すべてのその他のデータインジケータのビットは値「０」であることを示す場合には、他のＣＰＵはデータを有さず、そのためその他のＣＰＵ中のデータを無効化する必要が無いことを意味する。
【００９９】
ＣＰＵ１のプライベートキャッシュ中のデータの状態が「修正済及び排他的」である場合には、システムはＣＰＵ１のプライベートキャッシュ中のデータをＬＬＣに書き込むように決定し、ＣＰＵ１中のデータを無効化する。ＣＰＵ１のプライベートキャッシュ中のデータの状態が「修正済」である場合には、データは、ＣＰＵ１のプライベートキャッシュに保持される。何れの場合においても、システムはＬＬＣ中のキャッシュラインの状態インデックスストリングの状態インジケータをそれに応じて設定する。第１の場合においては、状態インジケータは、（図１２に示されているように）「修正済及び排他的」に設定され、第２の場合においては、状態インジケータは「修正済」に設定されている。両方の場合において、Ｐ１は「１」であり、ＣＰＵ１は最後にこのデータを修正したプロセッサであることを示す。
【０１００】
ブロック３０８では、トランザクションをトランザクショナルメモリにコミットするプロセスが完了する。
【０１０１】
衝突を避けるために、ブロック３０６〜ブロック３０８はコミットされるときにアトミック処理を組み合わされる。
【０１０２】
データに書き込み操作が行われた場合には、修正されたデータはＬＬＣにここで保持され、その状態は本トランザクションの最後で「修正済及び排他的」であることが理解できる。データインジケータのビット値によると、データを最後に修正したプロセッサはＣＰＵ１である。しかしながら、ＣＰＵ１はデータを有しないため、次のＣＰＵの操作で、システムはデータＣＰＵ１を無効化する必要はない。その上、別のＣＰＵがデータを読み取る必要がある場合には、最初にＣＰＵ１にデータをＬＬＣに最初に書き込むよう要求してから次にその他のＣＰＵによって読み取られるのではなく、ＬＬＣディレクトリから直接読み取ることができる。
【０１０３】
本明細書にて開示された方法に関連し、本開示はまた、本明細書において記載されている方法を実行するための計算システムを提供する。
【０１０４】
図１３に示されているように、本開示の一態様は、トランザクショナルメモリを提供するための計算システム１３００である。計算システム１３００は、少なくとも第１のプロセッサと第２のプロセッサを含む複数のプロセッサ１３０２と、複数のプロセッサ１３０２のうちそれぞれ１つによって各々アクセス可能な複数のプライベートキャッシュ１３０４と、複数のプロセッサ１３０２間で共有されるラストレベルキャッシュ（ＬＬＣ）１３０６とを有する。計算システム１３００は、トランザクショナルメモリのための方法の文脈中に本明細書で記載された機能を実行するようプログラムされている。
【０１０５】
例えば、計算システム１３００は以下の機能を実行するようプログラムされている。
【０１０６】
第１のプロセッサを使用してトランザクションを処理すること、このときトランザクションは、第１のデータを第１のプロセッサのプライベートキャッシュに読み込むことと、第１のプロセッサのプライベートキャッシュ中の第１のデータに書き込み操作を実行することを含む、および
【０１０７】
トランザクショナルメモリへのトランザクションをコミットすること、このときコミットすることは、書き込み操作前に、第１のデータの最近の修正から予め設定された条件の検出に反応して、第１のプロセッサのプライベートキャッシュ中の第１のデータをＬＬＣに書き込むことと、第１のプロセッサのプライベートキャッシュ中の第１のデータを無効化することを含む。
【０１０８】
最近の修正の予め設定された条件の実施例は、書き込み操作前に、第１のデータは第１のプロセッサと異なる第２のプロセッサによって最後に修正された。
【０１０９】
さらにトランザクションをコミットする機能は、キャッシュラインの状態インデックスストリングを設定し、ＬＬＣに書き込まれた第１のデータは第１のプロセッサによって最後に修正されたことを示すことをさらに含み得る。
【０１１０】
別の実施形態では、トランザクションをコミットする機能は、キャッシュラインの状態インデックスストリングを設定し、ＬＬＣに書き込まれた第１のデータの特別な状態を示すことをさらに含み得る。特別な状態は、ＬＬＣに書き込まれた第１のデータは修正済であり排他的であり、第１のプロセッサのプライベートキャッシュ中の第１のデータは無効化されたことを通知する。
【０１１１】
機能の詳細はトランザクショナルメモリを使用してデータを処理する方法に関連して本明細書で記載されてきたため、再度説明しない。
【０１１２】
機能はプログラムモジュールまたは装置を使用して実現されてよく、機械で実行可能な命令及び符号に基づいてコンピュータプログラムを使用して実行され得る。一般には、コンピュータプログラムは特定のタスクを実行してよく、または、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等の特定の抽象データの種類を実行してよい。本開示に記載されている技術もまた、分散コンピューティング環境のような、分散されたコンピューティング環境にて実行され、通信網を通して接続された遠隔処理装置によってタスクを実行することができる。分散コンピューティング環境において、プログラムされたモジュールまたは装置は、メモリ装置を含むローカルまたは遠隔コンピュータ保存媒体の何れにおいても配置され得る。
【０１１３】
本明細書の様々な実施形態が、実施例及び環境とともに漸進的により詳細を記載している。各実施形態は、本開示のある態様に焦点をあわせており、そのため異なる実施形態は互いに異なるが、類似の部分も共有し得る。
【０１１４】
例示的な実施形態が、本開示における本発明の概念及び実施を説明するために採用されている。例示的な実施形態は、本開示の方法及び中心となる概念をよりよく理解するためのみに使用されている。本開示の概念に基づき、当業者は例示的な実施形態及び適用となる分野を修正し得る。
【図１Ａ】
2019083045.tif 000003
【図１Ｂ】
2019083045.tif 000004
【図２】
2019083045.tif 000005
【図３】
2019083045.tif 000006
【図４】
2019083045.tif 000007
【図５】
2019083045.tif 000008
【図６】
2019083045.tif 000009
【図７】
2019083045.tif 000010
【図８】
2019083045.tif 000011
【図９】
2019083045.tif 000012
【図１０】
2019083045.tif 000013
【図１１】
2019083045.tif 000014
【図１２】
2019083045.tif 000015
【図１３】
2019083045.tif 000016