(57)【要約】第１のトランザクションが第１のデータへの書き込み動作を行う必要がある時、第１のデータの読み出し動作を行った、または第１のデータの読み出し動作を行う予定の、第２のトランザクションが存在するという判断があった後、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録が生成される。第２のトランザクションの処理が実行される。処理が完了した後、第２のトランザクションがサブミットされ、第１のトランザクションが、記録に従って通知される。第１のトランザクションの処理が実行される。処理が完了し、第２のトランザクションの通知が受信された後、第１のトランザクションがサブミットされる。本手法は、マルチコアシステムにおいてトランザクションメモリに同時にアクセスすることを改善し、競合によって発生するロールバックを回避し、全体的なシステム性能を向上させる。
2016537708.tif 000002
【特許請求の範囲】
【請求項１】
第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を、前記第１のトランザクションが第１のデータへの書き込み動作を行う必要がある時に、前記第２のトランザクションが、前記第１のデータの読み出し動作を行った、または前記第１のデータの前記読み出し動作を行う予定である、と判断した後に、生成することと、
前記第２のトランザクションの処理を実行し、前記第２のトランザクションの前記処理が完了した後、前記第２のトランザクションをサブミットし、前記第１のトランザクションを前記記録に従って通知することと、
前記第１のトランザクションの処理を実行し、前記第１のトランザクションの前記処理が完了し、前記第２のトランザクションの通知が受信された後、前記第１のトランザクションをサブミットすることと、
を備える、方法。
【請求項２】
前記第１のトランザクションの前記書き込み動作と前記第２のトランザクションの前記読み出し動作との間の前記競合を示す前記記録を前記生成することが、
前記第２のトランザクションを起こす第２のプロセッサに対応するプロセッサフラグビットを設定し、前記第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットを、前記書き込み動作競合の発生を示す値として、前記第１のトランザクションを起こす第１のプロセッサの第１の読み出し及び書き込み競合検出レジスタにおいて設定することと、
前記第１のプロセッサに対応するプロセッサフラグビットを設定し、前記第２の読み出し及び書き込み競合検出レジスタの動作競合フラグビットを、前記第２のプロセッサの第２の読み出し及び書き込み競合検出レジスタにおける前記読み出し動作競合の発生を示す値に設定することと、
を備える、請求項１に記載の方法。
【請求項３】
前記第１のトランザクションを前記記録に従って前記通知することが、
設定された前記プロセッサフラグビットを、前記第２の読み出し及び書き込み競合検出レジスタにおいて検索することと、
設定された前記プロセッサフラグビットが、前記第１のプロセッサに対応すると判断することと、
前記第１のプロセッサで起こされる前記第１のトランザクションを通知することと、
を備える、請求項２に記載の方法。
【請求項４】
前記第１のトランザクションの前記処理を前記実行し、前記第１のトランザクションの前記処理が完了し、前記第２のトランザクションの前記通知が受信された後、前記第１のトランザクションをサブミットすることが、
ステップＡにおいて、前記第１のトランザクションの前記処理を実行し、前記第１のトランザクションの前記処理が完了した後、ステップＢを実行することと、
前記ステップＢにおいて、前記第１の読み出し及び書き込み競合検出レジスタの前記動作競合フラグビットが、前記書き込み動作競合の前記発生を示す前記値として設定されているかどうかを判断し、
判断結果が肯定的である場合、ステップＣを実行し、または
前記動作競合フラグビットが、前記読み出し動作競合の前記発生を示す前記値として設定されている場合、ステップＥを実行することと、
前記ステップＣにおいて、前記第１の読み出し及び書き込み競合検出レジスタの前記プロセッサフラグビットのうちのどれも設定されていないかどうかを判断し、
前記プロセッサフラグビットの少なくとも１つが設定されている場合、待機状態になり、または
前記プロセッサフラグビットのうちのどれも設定されていない場合、前記ステップＥを実行することと、
ステップＤにおいて、前記第２のトランザクションの前記通知が受信された後、前記第１の読み出し及び書き込み競合検出レジスタにおいて、前記第２のプロセッサに対応する前記プロセッサフラグビットをリセットし、前記ステップＣに戻ることと、
前記ステップＥにおいて、前記第１のトランザクションをサブミットすることと、
を備える、請求項２に記載の方法。
【請求項５】
前記方法が、前記第１のデータの読み出し動作を行った、または前記第１のデータの前記読み出し動作を行う予定の、第２のトランザクションが存在すると判断した後、
前記第２のトランザクションが、前記第１のデータの前記読み出し動作を行った場合、前記第１のトランザクションの前記処理の前に、前記第２のトランザクションに対応する前記第１のデータのキャッシュラインを、前記第１のトランザクションに対応するプライベートな見えないキャッシュにコピーすること、または
前記第２のトランザクションが、前記第１のデータの前記読み出し動作を行う予定の場合、前記第２のトランザクションの前記処理の前に、前記第１のトランザクションに対応するキャッシュラインから、前記書き込み動作が行われていない前記第１のデータを、前記第２のトランザクションに対応するキャッシュにコピーすること、
を備える、請求項１に記載の方法。
【請求項６】
第１のトランザクションが第１のデータへの書き込み動作を行う必要がある時に、前記第１のデータの読み出し動作を行った、または前記第１のデータの前記読み出し動作を行う予定の、第２のトランザクションが存在する時、前記第１のトランザクションの前記書き込み動作と前記第２のトランザクションの前記読み出し動作との間の競合を示す記録を生成する、キャッシュ管理部と、
前記第１のトランザクションの処理を実行し、前記第１のトランザクションの前記処理が完了し、前記第２のトランザクションの通知が受信された後、前記第１のトランザクションをサブミットする、第１の処理装置と、
前記第２のトランザクションの処理を実行し、前記第２のトランザクションの前記処理が終了した後、前記第２のトランザクションをサブミットし、前記第１のトランザクションを前記記録に従って通知する、第２の処理装置と、
を備える、デバイス。
【請求項７】
前記第１の処理装置に対応する第１の読み出し及び書き込み競合検出レジスタと、
前記第２の処理装置に対応する第２の読み出し及び書き込み競合検出レジスタと、
をさらに備える、請求項６に記載のデバイス。
【請求項８】
前記キャッシュ管理部が、さらに、
前記第１の読み出し及び書き込み競合検出レジスタにおいて、前記第２の処理装置に対応するプロセッサフラグビットを設定し、前記第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットを、前記書き込み動作競合の発生を示す値として設定する、
請求項７に記載のデバイス。
【請求項９】
前記キャッシュ管理部が、さらに、
前記第２の読み出し及び書き込み競合検出レジスタにおいて、前記第１の処理装置に対応するプロセッサフラグビットを設定し、前記第２の読み出し及び書き込み競合検出レジスタの動作競合フラグビットを、前記読み出し動作競合の発生を示す値として設定する、
請求項７に記載のデバイス。
【請求項１０】
前記第２の処理装置が、さらに、
前記第２の読み出し及び書き込み競合検出レジスタにおいて、設定された前記プロセッサフラグビットを検索し、
設定された前記プロセッサフラグビットが、前記第１の処理装置に対応すると判断し、
前記第１の処理装置で起こされる前記第１のトランザクションを通知する、
請求項７に記載のデバイス。
【請求項１１】
前記第１の処理装置が、
第１の判断モジュールと、
第２の判断モジュールと、
前記第１のトランザクションの前記処理を実行し、前記第１のトランザクションの前記処理が完了した後、前記第１の判断モジュールに判断を行うように指示する、実行モジュールと、
前記第２のトランザクションの前記通知が受信された後、前記第１の読み出し及び書き込み競合検出レジスタにおいて、前記第２の処理装置に対応する前記プロセッサフラグビットをリセットし、前記第２の判断モジュールに判断を行うように指示する、クリアリングモジュールと、
を備え、
前記第１の判断モジュールが、前記第１の読み出し及び書き込み競合検出レジスタの前記動作競合フラグビットが、前記書き込み動作競合の前記発生を示す前記値として設定されているかどうかを判断し、
判断結果が肯定的である場合、前記第２の判断モジュールに判断を行うように指示し、または
前記動作競合フラグビットが前記読み出し動作競合の前記発生を示す前記値として設定されている場合、サブミットモジュールに、前記第１のトランザクションをサブミットするように指示し、
前記第２の判断モジュールが、前記第１の読み出し及び書き込み競合検出レジスタの前記プロセッサフラグビットのうちのどれも設定されていないかどうかを判断し、前記プロセッサフラグビットのうちのどれも設定されていないという判断に応答して、前記サブミットモジュールに前記第１のトランザクションをサブミットするように指示する、
請求項７に記載のデバイス。
【請求項１２】
前記キャッシュ管理部が、さらに、前記第２のトランザクションが前記第１のデータの前記読み出し動作を行った時、前記第１のトランザクションの前記処理の前に、前記第２のトランザクションに対応する前記第１のデータのキャッシュラインを、前記第１のトランザクションに対応するプライベートな見えないキャッシュにコピーする、請求項６に記載のデバイス。
【請求項１３】
前記キャッシュ管理部が、さらに、前記第２のトランザクションが前記第１のデータの前記読み出し動作を行う予定の時、前記第２のトランザクションの前記処理の前に、前記第１のトランザクションに対応するキャッシュラインから、前記書き込み動作が行われていない前記第１のデータを、前記第２のトランザクションに対応するキャッシュにコピーする、請求項６に記載のデバイス。
【請求項１４】
第１のトランザクションが第１のデータへの書き込み動作を行う必要がある時に、前記第１のデータの読み出し動作を行った、または前記第１のデータの前記読み出し動作を行う予定の、第２のトランザクションが存在すると判断した後、前記第１のトランザクションの前記書き込み動作と前記第２のトランザクションの前記読み出し動作との間の競合を示す記録を生成することと、
前記第２のトランザクションの処理を実行し、前記第２のトランザクションの前記処理が完了した後、前記第２のトランザクションをサブミットし、前記第１のトランザクションを前記記録に従って通知することと、
前記第１のトランザクションの処理を実行し、前記第１のトランザクションの前記処理が完了し、前記第２のトランザクションの通知が受信された後、前記第１のトランザクションをサブミットすることと、
を備える動作を実行する、１つまたは複数のプロセッサによって実行可能なコンピュータ実行可能命令をその上に記憶した、１つまたは複数のメモリ。
【請求項１５】
前記第１のトランザクションの前記書き込み動作と前記第２のトランザクションの前記読み出し動作との間の前記競合を示す前記記録を前記生成することが、
前記第１のトランザクションを起こす第１のプロセッサの第１の読み出し及び書き込み競合検出レジスタにおいて、前記第２のトランザクションを起こす第２のプロセッサに対応するプロセッサフラグビットを設定することと、前記第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットを、前記書き込み動作競合の発生を示す値として設定することと、
を備える、請求項１４に記載の１つまたは複数のメモリ。
【請求項１６】
前記第１のトランザクションの前記書き込み動作と前記第２のトランザクションの前記読み出し動作との間の前記競合を示す前記記録を前記生成することが、
前記第２のプロセッサの第２の読み出し及び書き込み競合検出レジスタにおいて、前記第１のプロセッサに対応するプロセッサフラグビットを設定し、前記第２の読み出し及び書き込み競合検出レジスタの動作競合フラグビットを、前記読み出し動作競合の発生を示す値として設定すること、
を備える、請求項１４に記載の１つまたは複数のメモリ。
【請求項１７】
前記第１のトランザクションを前記記録に従って前記通知することが、
前記第２の読み出し及び書き込み競合検出レジスタにおいて、設定された前記プロセッサフラグビットを検索することと、
設定された前記プロセッサフラグビットが、前記第１のプロセッサに対応すると判断することと、
前記第１のプロセッサで起こされる前記第１のトランザクションを通知することと、
を備える、請求項１６に記載の１つまたは複数のメモリ。
【請求項１８】
前記第１のトランザクションの前記処理を前記実行し、前記第１のトランザクションの前記処理が完了し、前記第２のトランザクションの前記通知が受信された後、前記第１のトランザクションをサブミットすることが、
ステップＡにおいて、前記第１のトランザクションの前記処理を実行し、前記第１のトランザクションの前記処理が完了した後、ステップＢを実行することと、
前記ステップＢにおいて、前記第１の読み出し及び書き込み競合検出レジスタの前記動作競合フラグビットが、前記書き込み動作競合の前記発生を示す前記値として設定されているかどうかを判断し、
判断結果が肯定的である場合、ステップＣを実行し、または
前記動作競合フラグビットが、前記読み出し動作競合の前記発生を示す前記値として設定されている場合、ステップＥを実行することと、
前記ステップＣにおいて、前記第１の読み出し及び書き込み競合検出レジスタの前記プロセッサフラグビットのうちのどれも設定されていないかどうかを判断し、
前記プロセッサフラグビットのうちの少なくとも１つが設定されている場合、待機状態になり、または
前記プロセッサフラグビットのうちのどれも設定されていない場合、前記ステップＥを実行することと、
ステップＤにおいて、前記第２のトランザクションの前記通知が受信された後、前記第１の読み出し及び書き込み競合検出レジスタにおいて、前記第２のプロセッサに対応する前記プロセッサフラグビットをリセットし、前記ステップＣに戻ることと、
前記ステップＥにおいて、前記第１のトランザクションをサブミットすることと、
を備える、請求項１５に記載の１つまたは複数のメモリ。
【請求項１９】
前記動作が、前記第１のデータの読み出し動作を行った、または前記第１のデータの前記読み出し動作を行う予定の、第２のトランザクションが存在すると判断した後、
前記第２のトランザクションが前記第１のデータの前記読み出し動作を行った場合、前記第１のトランザクションの前記処理の前に、前記第２のトランザクションに対応する前記第１のデータのキャッシュラインを、前記第１のトランザクションに対応するプライベートな見えないキャッシュにコピーすること、
をさらに備える、請求項１４に記載の１つまたは複数のメモリ。
【請求項２０】
前記動作が、前記第１のデータの読み出し動作を行った、または前記第１のデータの前記読み出し動作を行う予定の、第２のトランザクションが存在すると判断した後、
前記第２のトランザクションが、前記第１のデータの前記読み出し動作を行う予定の場合、前記第２のトランザクションの前記処理の前に、前記第１のトランザクションに対応するキャッシュラインから、前記書き込み動作が行われていない前記第１のデータを、前記第２のトランザクションに対応するキャッシュにコピーすること、
をさらに備える、請求項１４に記載の１つまたは複数のメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
関連特許出願の相互参照
本出願は、２０１３年１０月１８日に出願された、「Ｍｅｔｈｏｄ  ａｎｄ  Ｄｅｖｉｃｅ  ｆｏｒ  Ｃｏｎｃｕｒｒｅｎｔｌｙ  Ａｃｃｅｓｓｉｎｇ  Ｍｅｍｏｒｙ」という題名の、Ｃｈｉｎｅｓｅ  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  Ｎｏ．２０１３１０４９２４０２．３に対する外国優先権を主張し、その全体が、参照により本明細書に組み込まれる。
【０００２】
本開示は、コンピュータ技術に関し、より具体的には、メモリに同時にアクセスするための方法とデバイスとに関する。
【背景技術】
【０００３】
近年、コンピュータは、マルチコアアーキテクチャを用いて開発されており、それは、プロセッサの製造者が、電力消費と温度とによって制約を受ける場合においても、高性能計算を発達させ続けようとしているからである。マルチコアアーキテクチャを完全に活用するために、アプリケーションプログラムは、複数のスレッドに分割され、その各々は、１つの中央処理装置（ＣＰＵ）において独立して実行され得る。したがって、アプリケーションプログラムは、動作効率全体を高めるために、並列で実行され得る。そのような手順スキームに基づくシステムは、特定の種類の並行性機構が、スレッド間の共有エリアに連続的にアクセスすることに対して必要とされるように、データ処理において、データ並行性とデータ整合性とを保証する必要がある。
【０００４】
トランザクションメモリは、スレッドの並列動作の度合いを向上させるために導入される。トランザクションメモリは、共有データにアクセスする時に、マルチコアのスレッド間で、書き込み−読み出し、読み出し−書き込み、及び書き込み−書き込みの競合がほとんどないと仮定し、したがって、複数のスレッドが、暫定的に並列で実行されることを可能にする。競合が見つかった時には、ロールバック動作を実行して、アプリケーションプログラムを、競合前の状態に戻す。したがって、システムの性能及び拡張性は、向上するが、データ整合性は、影響を受けない。
【０００５】
トランザクションメモリのスキームは、システムアーキテクチャの拡張性を高めるために、並列システムで広く使用されている。トランザクションメモリ技術は、ＩＢＭ（商標）のＢｌｕｅ  Ｇｅｎｅ／ＱやＩｎｔｅｌ（商標）のＨａｓｗｅｌｌを含む、ＣＰＵのアーキテクチャに組み込まれている。
【０００６】
トランザクションメモリのスキームは、スレッドの並列動作の度合いを向上させるが、並列動作の度合いの向上により、競合の可能性も増加する。競合があり、ロールバック動作が実行された場合、プログラムの性能は、著しく損なわれる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の概要は、以下の発明を実施するための形態においてさらに説明される概念の集合を、簡略化された形態で紹介するために提供される。本発明の概要は、特許請求される主題の、すべての、重要な特徴または必須の特徴を特定することを意図してはおらず、特許請求される主題の範囲を決定する際の助けとして、単独で使用されることも意図しない。たとえば、「手法」という用語は、上記の文脈によって、また本開示を通して認められる、装置、システム、方法、及び／またはコンピュータ可読命令を指すことができる。
【０００８】
本開示によって解決される技術的問題は、マルチコアのシステムにおいて、トランザクションメモリにアクセスするための並行性を向上させること、及び競合に対するロールバック動作を減少させることであり、それによって、全体的なシステム性能を向上させる。
【課題を解決するための手段】
【０００９】
本開示は、メモリに同時にアクセスするための例示的な方法を提供する。
【００１０】
第１のトランザクションが、第１のデータに対する書き込み動作を行う必要がある時、第１のデータの読み出し動作を行った（または読み出した）、または第１のデータの読み出し動作を行う予定の、第２のトランザクションが存在するという判断があった後、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録が生成される。
【００１１】
第２のトランザクションの処理が実行される。処理が完了した後、第２のトランザクションがサブミットされ、第１のトランザクションが、記録に従って通知される。第１のトランザクションの処理が実行される。処理が完了し、第２のトランザクションの通知が受信された後、第１のトランザクションがサブミットされる。
【００１２】
たとえば、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を生成するステップは、以下の動作を含むことができる。
【００１３】
第１のトランザクションを起こす第１のプロセッサの第１の読み出し及び書き込み競合検出レジスタにおいて、第２のトランザクションを起こす第２のプロセッサに対応するプロセッサフラグビットが設定され、動作競合フラグビットが、書き込み動作競合の発生を示す値として設定される。
【００１４】
第２のプロセッサの第２の読み出し及び書き込み競合検出レジスタにおいて、第１のプロセッサに対応するプロセッサフラグビットが設定され、動作競合フラグビットが、読み出し動作競合の発生を示す値として設定される。
【００１５】
たとえば、第１のトランザクションを、記録にしたがって通知するステップは、以下の動作を含むことができる。
【００１６】
第２の読み出し及び書き込み競合検出レジスタにおいて、設定されたプロセッサフラグビットが検索される。設定されたプロセッサフラグビットは、第１のプロセッサに対応するとして判断される。第１のプロセッサにおいて起こされる第１のトランザクションが、通知される。
【００１７】
たとえば、第１のトランザクションの処理を実行し、前記処理が完了し、第２のトランザクションの通知が受信された後、第１のトランザクションをサブミットするステップは、以下の動作を含むことができる。
【００１８】
ステップＡにおいて、第１のトランザクションの処理が実行される。処理が完了した後、ステップＢの動作が実行される。
【００１９】
ステップＢにおいて、第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットは、書き込み動作競合の発生を示す値によって表されているかどうかを判断される。結果が肯定的であった場合、ステップＣの動作が実行される。動作競合フラグビットが、読み出し動作競合の発生を示す値によって表されていた場合、ステップＥの動作が実行される。
【００２０】
ステップＣにおいて、第１の読み出し及び書き込み競合検出レジスタのプロセッサフラグビットのうちのどれも設定されていないかどうかが判断される。動作は、プロセッサフラグビットの少なくとも１つが設定されている時に、待機状態になる。ステップＥの動作は、プロセッサフラグビットのうちのどれも設定されていない時に、実行される。
【００２１】
ステップＤにおいて、第２のトランザクションの通知が受信された後、第１の読み出し及び書き込み競合検出レジスタにおいて、第２のプロセッサに対応するプロセッサフラグビットが、リセットされる。動作は、ステップＣに戻る。
【００２２】
ステップＥにおいて、第１のトランザクションがサブミットされる。
【００２３】
たとえば、第１のデータを読み出した、または第１のデータを読み出す予定の、第２のトランザクションが存在するかどうかを判断するステップの後に、例示的な方法は、以下の動作をさらに含むことができる。
【００２４】
第２のトランザクションが第１のデータの読み出し動作を行った場合、第１のトランザクションの処理の前に、第２のトランザクションに対応する第１のデータのキャッシュラインが、第１のトランザクションに対応するプライベートな見えないキャッシュにコピーされる。
【００２５】
第２のトランザクションが第１のデータの読み出し動作を行う予定の場合、第２のトランザクションの処理の前に、第１のトランザクションに対応するキャッシュラインから、書き込み動作が行われていない第１のデータが、第２のトランザクションに対応するキャッシュにコピーされる。
【００２６】
本開示は、また、メモリに同時にアクセスするための例示的なデバイスも提供する。デバイスは、キャッシュ管理部と、第１の処理装置と、第２の処理装置とを含むことができる。
【００２７】
キャッシュ管理部は、第１のトランザクションが第１のデータに対する書き込み動作を行う必要がある時、第１のデータの読み出し動作を行う、または第１のデータの読み出し動作を行う予定の、第２のトランザクションが存在する場合、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を生成する。
【００２８】
第１の処理装置は、第１のトランザクションの処理を実行し、処理が完了し、第２のトランザクションの通知が受信された後、第１のトランザクションをサブミットする。
【００２９】
第２の処理装置は、第２のトランザクションの処理を実行し、処理が完了した後、第２のトランザクションをサブミットし、第１のトランザクションを記録に従って通知する。
【００３０】
代替的に、デバイスは、また、第１の処理装置に対応する第１の読み出し及び書き込み競合検出レジスタと、第２の処理装置に対応する第２の読み出し及び書き込み競合検出レジスタとを含むことができる。
【００３１】
代替的に、キャッシュ管理部が第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を生成する処理は、以下の動作を含むことができる。キャッシュ管理部は、第１の読み出し及び書き込み競合検出レジスタにおいて、第２の処理装置に対応するプロセッサフラグビットを設定し、動作競合フラグビットを、書き込み動作競合の発生を示す値として設定する。キャッシュ管理部は、第２の読み出し及び書き込み競合検出レジスタにおいて、第１の処理装置に対応するプロセッサフラグビットを設定し、動作競合フラグビットを、読み出し動作競合の発生を示す値として設定する。
【００３２】
代替的に、第１のトランザクションを記録にしたがって通知する第２の処理装置の処理は、以下の動作を含むことができる。第２の処理装置は、第２の読み出し及び書き込み競合検出レジスタにおいて、設定されたプロセッサフラグビットを検索し、設定されたプロセッサフラグビットが第１の処理装置に対応すると判断し、第１の処理装置で起こされる第１のトランザクションを通知する。
【００３３】
代替的に、第１の処理装置は、第１の判断モジュールと、第２の判断モジュールと、実行モジュールと、クリーニングモジュールとを含むことができる。実行モジュールは、第１のトランザクションの処理を実行し、処理が完了した後、第１の判断モジュールに判断動作を実行するように指示する。
【００３４】
クリアリングモジュールは、第２のトランザクションの通知が受信された後、第１の読み出し及び書き込み競合検出レジスタにおいて、第２の処理装置に対応するプロセッサフラグビットをリセットし、第２の判断モジュールに、判断動作を実行するように指示する。
【００３５】
第１の判断モジュールは、第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットが、書き込み動作競合の発生を示す値かどうかを判断する。判断結果が肯定的である場合、第１の判断モジュールは、第２の判断モジュールに判断を指示する。値が読み出し動作競合の発生を示す場合、第１の判断モジュールは、サブミットモジュールに、第１のトランザクションをサブミットするように指示する。
【００３６】
第２の判断モジュールは、第１の読み出し及び書き込み競合検出レジスタのプロセッサフラグビットのうちのどれも設定されていないかどうかを判断する。判断結果が肯定的である場合、第２の判断モジュールは、サブミットモジュールに、第１のトランザクションをサブミットするように指示する。
【００３７】
代替的に、キャッシュ管理部は、第１のデータの読み出し動作が第２のトランザクションで発生したと判断された時、第１の処理装置が第１のトランザクションを実行する前に、第２のトランザクションに対応する第１のデータのキャッシュラインを、第１のトランザクションに対応するプライベートな見えないキャッシュにコピーする。
【００３８】
第１のデータの読み出し動作が第２のトランザクションで発生する予定であると、キャッシュ管理部が判断した場合、第２の処理装置が第２のトランザクションの処理を実行する前に、第１のトランザクションに対応するキャッシュラインから、書き込み動作が行われていない第１のデータを、第２のトランザクションに対応するキャッシュにコピーする。
【００３９】
本手法は、１つのスレッドがデータを書き込んでいる間に、他のコアが、同じデータを同時に読み出すことを可能にする。本手法は、マルチコアの並列読み出し動作を改善し、読み出し−書き込み動作競合と書き込み−読み出し動作競合とによるトランザクションメモリをロールバックするための時間を、データ整合性を維持するという前提条件に基づいて回避する。最終的に、本手法は、システムの並行性とスループットとを改善し、それによって、マルチコアシステムの全体的な性能と拡張性とを改善する。本開示の別の例示的な実施形態では、トランザクション競合レジスタが、オブジェクトと競合の種類とを効果的に記録するために提供され、トランザクションのサブミットシーケンスが、トランザクション競合レジスタによって保証される。しかしながら、本開示によって実装される製品が、上記で説明したすべての利点を有する必要がない、ということに留意する。
【図面の簡単な説明】
【００４０】
【図１】本開示の第１の例示的な実施形態による、メモリに同時にアクセスするための例示的な方法を示したフローチャートである。
【図２】本開示の第１の例示的な実施形態による、例示的な読み出し及び書き込み動作競合レジスタを示した概略図である。
【図３】本開示の第１の例示的な実施形態による、図１の例示的なステップ１０６を示したフローチャートである。
【図４】本開示の第１の実施形態における、第１の実施例を示した概略的なフローチャートである。
【図５】本開示の第１の実施形態における、第２の実施例を示した概略的なフローチャートである。
【図６】本開示の例示的なデバイスを示した図である。
【発明を実施するための形態】
【００４１】
本開示の詳細を、添付の図と例示的な実施形態とを参照して、詳細に説明する。
【００４２】
本開示の実施形態とその特徴とを組み合わせることができ、そのような組み合わせが、なおも、本開示の範囲に含まれる、ということに留意する。さらに、論理シーケンスをフローチャートまたは図に示したが、いくつかの場合では、示したものとは異なるいくつかのシーケンスを実行することができる。
【００４３】
典型的な構成では、マルチコアシステムは、複数の中央処理装置（ＣＰＵ）と、１つまたは複数の入力／出力インターフェースと、ネットワークインターフェースと、メモリとを含むことができる。
【００４４】
メモリは、１つまたは複数の形態におけるコンピュータ可読媒体であってよく、それには、揮発性メモリ、ランダムアクセスメモリ（ＲＡＭ）、及び／またはリードオンリメモリ（ＲＯＭ）またはフラッシュメモリ（フラッシュＲＡＭ）などの非揮発性メモリが含まれる。メモリは、コンピュータ可読媒体の例示的な実施例である。
【００４５】
コンピュータ可読媒体は、任意の方法またはスキームによる情報蓄積の目的を達成し得る、永久的、非永久的、可動、及び不動の媒体を含む。情報は、コンピュータ可読命令、データ構造、処理モジュール、または他のデータであってよい。コンピュータ可読媒体の実施例は、相変化ランダムアクセスメモリ（ＰＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、他の種類のランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、電気的消去可能プログラム可能リードオンリメモリ（ＥＥＰＲＯＭ）、フラッシュメモリまたは他の技術を用いたメモリ、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）または他の光学式ストレージ、磁気カセット、磁気ディスクストレージまたは他の磁気テープ磁気ストレージデバイス、またはコンピューティングデバイスによってアクセス可能な情報を記憶するために使用され得る他の非一時的な媒体を含むことができるが、これらに限定されない。本開示の定義によると、コンピュータ可読媒体は、変調データ信号やキャリアなどの一時的な媒体を含まない。
【００４６】
ほぼ２０年にわたる開発の後、トランザクションメモリは、ソフトウェアまたはハードウェアのいずれかによって実装され得る。トランザクションメモリのソフトウェア実装形態は、非常に低い効率を有し、トランザクションメモリのハードウェア実装形態は、その活用性を大幅に向上させる。したがって、本開示は、主に、ハードウェアベースのトランザクションメモリに焦点を合わせる。
【００４７】
はじめに、ハードウェアベースのトランザクションメモリの動作原理を以下に説明する。トランザクションメモリは、「トランザクション開始」や「トランザクション終了」などのコードを使用して、ＣＰＵに、トランザクションメモリエリアの始まりと終わりとについて通知する。トランザクションを実行するエリアは、「トランザクション開始」と「トランザクション終了」とのコードの間の中間セクションである。実行が終了すると、「トランザクション終了」の命令は、ＣＰＵに、すべての変更データをモジュール形式でサブミットするように要求する（言い換えると、サブミット処理は、中断またはアクセスされ得ない）。
【００４８】
トランザクション処理中、読み出されまたは書き込まれたメモリエリアは監視され、書き込み−読み出し動作競合と、読み出し及び書き込み動作競合と、書き込み−書き込み動作競合とを防止する。たとえば、各キャッシュラインは、書き込み動作と読み出し動作との発生を個別に表す書き込みビットと読み出しビットとを含む、２つのビットを提供される。たとえば、データＡの読み出し動作が第１のトランザクション、つまり、トランザクション0で発生した時、データＡに対応するキャッシュラインの読み出しビットは、読み出し動作の発生を示すための１に設定される。（読み出し動作の発生とは、読み出し動作が、トランザクション0に対応するキャッシュで発生したが、トランザクション0は、まだサブミットされておらず、トランザクション0がサブミットされた後、読み出しビットがリセットされる、つまり、０に設定される、ということを意味する。）その後、トランザクション0がデータＡを再び書き込む場合、データＡに対応するキャッシュラインのデータが、更新動作を実行するために、第１レベルキャッシュなどのプライベートな見えないキャッシュエリアにコピーされる。同時に、元のデータＡに対応するキャッシュラインの書き込みビット及び読み出しビットは、「１」と「０」とにそれぞれ設定される。
【００４９】
第１のスレッドＰ0が、（６４バイトなどの）キャッシュラインのデータを書き込むまたは読み出すために、ＣＰＵ0を使用して、第１のトランザクションであるトランザクション0のエリアに入ると、キャッシュラインの対応する書き込みビットまたは読み出しビットが設定される。一方で、第２のスレッドＰ1が、以前に書き込まれた、または読み出されたものと同じキャッシュラインを読み出すまたは書き込む準備をするために、ＣＰＵ1を使用して、第１のトランザクションであるトランザクション0または他のトランザクションのエリアに入ると、そのような動作イベントは、第１のプロセッサＣＰＵ0によってキャプチャされる。したがって、第１のスレッドＰ0または第２のスレッドＰ1のロールバック動作が、結果として実行される。さらに、ロールバック動作は、また、ＣＰＵの性能を低下させる書き込み−書き込み動作競合において発生し、特に、共有メモリ（１つまたは複数のキャッシュライン）を読み出し、または書き込む動作が頻繁にある時に発生する。言い換えると、並列動作を実行することができず、冗長ロールバック動作が発生し、それによって、性能を著しく低下させる。
【００５０】
データ競合では、トランザクションエリアに入る初期状態にロールバックするために、元のデータは、書き込み動作の前に、現在のトランザクションメモリ内の任意のメモリにコピーされる。たとえば、書き込み動作が行われる予定のキャッシュラインでは、書き込み動作は、プライベートな見えないキャッシュ、たとえば、第１レベルのキャッシュにコピーされ得る。書き込み動作は、プライベートな見えないキャッシュのキャッシュラインへの書き込みと更新とを実行する。結果として、競合が発生すると、プライベートな見えないキャッシュ、たとえば、第１レベルのキャッシュ内の（キャッシュラインの単位で）更新されたデータは、廃棄され、手順は、トランザクションの入り口点から再動作される。トランザクションが上手く完了した場合、プライベートな見えないキャッシュ、たとえば、第１レベルのキャッシュ内の最後に更新された書き込みデータは、元のデータを置き換える。
【００５１】
第１の例示的な実施形態を以下に説明する。本開示は、メモリに同時にアクセスするための例示的な方法を提供する。
【００５２】
図１に示す通り、１０２では、第１のトランザクションが第１のデータへの書き込み動作を行う必要がある時、第１のデータの読み出し動作を行った、または第１のデータの読み出し動作を行う予定の第２のトランザクションが存在する場合、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録が生成される。
【００５３】
１０４では、第２のトランザクションの処理が実行される。処理が完了した後、第２のトランザクションがサブミットされ、第１のトランザクションが、記録に従って通知される。
【００５４】
１０６では、第１のトランザクションの処理が実行される。処理が完了し、第２のトランザクションの通知が受信された後、第１のトランザクションがサブミットされる。
【００５５】
第１のトランザクションと第２のトランザクションとの処理を実行するためのステップは、特定のシーケンスなしに発生し、並列に発生することができる。「第２のトランザクションが読み出し動作を行った」という表現は、データが第２のトランザクションに対応するキャッシュ内で読み出されたが、サブミットされていないことを指す。
【００５６】
本手法は、競合が発生した時の、サブミッションシーケンスを実装し、サブミッションシーケンスの完了を保証する。本手法は、トランザクションが、読み出し動作と書き込み動作とのシーケンスに従ってサブミットされることを保証して、読み出し動作が適用される予定のデータの読み出し及び書き込み動作競合の場合と、書き込み動作が適用される予定のデータが読み出される予定である書き込み−読み出し動作競合の場合とにおいて、ロールバック動作を回避する。したがって、本手法は、読み出し動作の並行性を向上させ、ロールバック動作の発生を減少させ、それによって、マルチコアシステムの全体的な性能を向上させる。
【００５７】
本開示の例示的な実施形態では、マルチコアシステムの各プロセッサは、その形式が図２に示されている、読み出し及び書き込み競合検出レジスタ（以降、Ｔ−ＣＣＲと呼ぶ）を追加的に提供され得る。図２の例示的な形式は、マルチコアシステムの各プロセッサにそれぞれ対応するプロセッサフラグビットであるＣ0、Ｃ1．．．Ｃnと、プロセッサ上で動いている現在のトランザクションにおける読み出し動作競合または書き込み動作競合の発生を示す動作競合フラグビットであるリーダ／ライタとを含む。１つのトランザクションでは、読み出し動作競合と書き込み動作競合とを同時に発生させることは許可されていない。それらが同時に発生した場合、ロールバック動作が必要になる。
【００５８】
例示的な実施形態では、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を生成するステップは、以下の動作を含むことができる。
【００５９】
第１のトランザクションを起こす第１のプロセッサの第１の読み出し及び書き込み競合検出レジスタにおいて、第２のトランザクションを起こす第２のプロセッサに対応するプロセッサフラグビットが設定され、動作競合フラグビットが、書き込み動作競合の発生を示す値として設定される。
【００６０】
第２のプロセッサの第２の読み出し及び書き込み競合検出レジスタにおいて、第１のプロセッサに対応するプロセッサフラグビットが設定され、動作競合フラグビットが、読み出し動作競合の発生を示す値として設定される。
【００６１】
たとえば、第１のトランザクションを記録に従って通知するステップは、以下の動作を含むことができる。
【００６２】
第２の読み出し及び書き込み競合検出レジスタにおいて、設定されたプロセッサフラグビットが検索される。設定されたプロセッサフラグビットは、第１のプロセッサに対応すると判断される。第１のプロセッサで起こされる第１のトランザクションが通知される。
【００６３】
たとえば、（第１のプロセッサＣＰＵ0で起こされるトランザクション0が書き込む予定のキャッシュラインと、第２のＣＰＵ1で起こされるトランザクション1によって読み出されたキャッシュラインとの間の競合などの）読み出し及び書き込み競合が発生した時、第１のプロセッサＣＰＵ0のＴ−ＣＣＲ0において、第２のプロセッサＣＰＵ1に対応するプロセッサフラグビットＣ1が設定される。同時に、対応するリーダ／ライタが、第１のプロセッサＣＰＵ0上で現在動いているトランザクション0について書き込み動作競合の発生を示す「１」に設定される。さらに、第２のプロセッサＣＰＵ1のＴ−ＣＣＲ1において、第１のプロセッサＣＰＵ0に対応するプロセッサフラグビットＣ0が、リセットされる。同時に、対応するリーダ／ライタが、第２のプロセッサＣＰＵ1上で現在動いているトランザクション1について読み出し動作競合の発生を示す「０」に設定される。読み出し／書き込み動作競合を示す値は、交換可能である。
【００６４】
読み出し動作（第２のトランザクションを実行する第２のプロセッサのリーダ／ライタＴ−ＣＣＲ1が、「０」に設定され、他のプロセッサに対応する、Ｃ0〜Ｃnのプロセッサフラグビットのうちのどれも、設定されていない）を実行する第２のトランザクションに関して、特定の状況のためにロールバックが発生した場合であっても、第２のプロセッサのＴ−ＣＣＲ1における対応する競合ビットに従って（つまり、別のプロセッサに対応する、Ｃ0〜Ｃnのうちのプロセッサフラグビット、本実施例ではＣ0、を設定する）、競合ビットに対応するプロセッサのＴ−ＣＣＲにおいて、第２のプロセッサに対応するプロセッサフラグビット（つまり、本実施例では、Ｔ−ＣＣＲ0のプロセッサフラグビットＣ1）が、クリアされる。
【００６５】
たとえば、１０６のステップは、以下の動作を含むことができる。
【００６６】
３０２では、第１のトランザクションの処理が実行される。処理が完了した後、３０４の動作が実行される。
【００６７】
３０４では、第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットは、書き込み動作競合の発生を示す値によって表されているかどうかを判断される。３０６の動作は、結果が肯定的である場合に実行される。３１０の動作は、動作競合フラグビットが、読み出し動作競合の発生を示す値によって表されている場合に実行される。
【００６８】
３０６では、第１の読み出し及び書き込み競合検出レジスタのプロセッサフラグビットのうちのどれも設定されていないかどうかが判断される。動作は、プロセッサフラグビットのうちの少なくとも１つが設定されている時は、待機状態になる。３１０の動作は、プロセッサフラグビットのうちのどれも設定されていない時に実行される。
【００６９】
３０８では、第２のトランザクションの通知が受信された後、第１の読み出し及び書き込み競合検出レジスタにおいて、第２のプロセッサに対応するプロセッサフラグビットがリセットされる。動作は、３０６に戻る。
【００７０】
３１０では、第１のトランザクションがサブミットされる。
【００７１】
たとえば、１つまたは複数の第２のトランザクションがあり得る。たとえば、第１のデータの読み出し動作を行った（または読み出した）、または第１のデータの読み出し動作を行う予定の、２つの第２のトランザクションがある。代替的に、１つのトランザクションが、第１のデータの読み出し動作を行い、別のトランザクションが、第１のデータの読み出し動作を行う予定である。この状況では、第１の読み出し及び書き込み動作競合レジスタの対応するプロセッサフラグビットが設定される。リーダ／ライタは、書き込み動作競合を示す値として設定される。第１のデータを読み出した、または第１のデータを読み出す予定の、すべてのトランザクションがサブミットされた（第１の読み出し及び書き込み動作競合検出レジスタのプロセッサフラグビットがすべてリセットされた）後、第１のトランザクションがサブミットされる。
【００７２】
たとえば、第１のデータを読み出した、または第１のデータを読み出す予定の、第２のトランザクションが存在するかどうかを判断するステップの後、例示的な方法は、以下の動作をさらに含むことができる。
【００７３】
第２のトランザクションが、第１のデータの読み出し動作を行った場合、第１のトランザクションの処理の前に、第２のトランザクションに対応する第１のデータのキャッシュラインが、第１のトランザクションに対応するプライベートな見えないキャッシュにコピーされる。
【００７４】
第２のトランザクションが、第１のデータの読み出し動作を行う予定の場合、第２のトランザクションの処理の前に、第１のトランザクションに対応するキャッシュラインから、書き込み動作が行われていない第１のデータが、第２のトランザクションに対応するキャッシュにコピーされる。
【００７５】
データを、ロールバックが発生した時に復元するために、トランザクションは、書き込み動作の前にコピーされる。例示的な実施形態では、書き込み前にコピーを行うこのような特徴を活用して、コピーされた内容を同時に読み出し、全体的な並行度合いを向上させ、競合の発生を減少させ、性能を向上させる。
【００７６】
以下は、例示的な実施形態を示すための２つの実施例である。
【００７７】
第１の実施例では、サブミッションは、４０２から４１４までの動作を含む図４に示す通り、読み出し及び書き込み動作競合（書き込まれる予定のデータが、他のトランザクションによって読み出されている）を減少させるために、延期される。
【００７８】
４０２では、第１のトランザクションであるトランザクション0は、第１のプロセッサＣＰＵ0を介して動き、第１のプロセッサＣＰＵ0のＴ−ＣＣＲ0は、データＡを書き込む準備のためにクリアされる。
【００７９】
４０４では、本手法は、データＡが別のトランザクションによって読み出されているかどうか（データＡに対応するキャッシュラインの読み出しビットが設定されているかどうか）を調べる。動作は、読み出し動作が発生していない時は４０８に進み、または、データＡが読み出されている時は４０６に進む。
【００８０】
４０６では、データＡが第２のトランザクションであるトランザクション1によって読み出されている（データＡに対応するキャッシュラインの読み出しビットが設定されている）場合、本手法は、Ｔ−ＣＣＲ0とＴ−ＣＣＲ1とを設定する。第２のトランザクションであるトランザクション1を起こす第２のプロセッサＣＰＵ1のＴ−ＣＣＲ1において、第１のプロセッサＣＰＵ0に対応するプロセッサフラグビットＣ0が、「１」に設定され、動作フラグビットであるリーダ／ライタが、読み出し動作競合の発生を示す値「０」に設定される。キャッシュラインは、更新のために、第１のトランザクションであるトランザクション0に対応するプライベートな見えないキャッシュにコピーされる。第１のトランザクションであるトランザクション0を起こす第１のプロセッサＣＰＵ0のＴ−ＣＣＲ0において、第２のプロセッサＣＰＵ1に対応するプロセッサフラグビットＣ1が、「１」に設定され、動作フラグビットであるリーダ／ライタは、書き込み動作競合の発生を示す値「１」に設定される。
【００８１】
４０８では、第１のトランザクションであるトランザクション0は、トランザクション処理を、それが完了するまで実行する。
【００８２】
４１０では、本手法は、他のトランザクションのサブミッションを待つ必要があるかどうかを判断する。
【００８３】
たとえば、本手法は、第１のトランザクションであるトランザクション0のＴ−ＣＣＲ0のプロセッサフラグビット（Ｃ1〜Ｃn）のうちのどれも設定されていないかどうかを判断することができる。プロセッサフラグビットのうちのどれも設定されていない場合、それは、待つことなく通常のサブミッションを実行することを示し、４１４の動作が実行される。
【００８４】
プロセッサフラグビットのうちの少なくとも１つが、（「０」でない値に）設定され、Ｔ−ＣＣＲ0のリーダ／ライタが「１」である場合、それは、第２のトランザクションであるトランザクション1が、データＡを使用しており、したがって、第２のトランザクションであるトランザクション1のサブミッションを待つ必要があることを示す。４１２の動作が実行される。
【００８５】
４１２では、第２のトランザクションであるトランザクション1がサブミットされると、Ｔ−ＣＣＲ1で「１」の値を有するプロセッサフラグビットに対応するプロセッサ上で起こされるトランザクションが、通知される（本実施例では、本手法は、プロセッサフラグビットＣ0が「１」のために、第１のトランザクションであるトランザクション0を通知する）。第２のトランザクションであるトランザクション1がサブミットされた時の通知に従って、Ｔ−ＣＣＲ0の第２のプロセッサに対応するプロセッサフラグビットＣ1がクリアされる。動作は、４１０に進む。
【００８６】
４１２の動作は、第１のトランザクションであるトランザクション0によって行われる処理の完了前に実行され得、したがって、第１のトランザクションであるトランザクション0は、待つことなく直接サブミットされ得る。
【００８７】
４１４では、第１のトランザクションであるトランザクション0がサブミットされる。
【００８８】
第２の実施例では、サブミッションは、５０２から５１４までの動作を含む図５に示す通り、書き込み及び読み出し動作競合（書き込まれる予定のデータが、他のトランザクションによって読み出される予定である）を減少させるために延期される。
【００８９】
５０２では、第１のトランザクションであるトランザクション0が、第１のプロセッサＣＰＵ0を介して実行され、第１のプロセッサＣＰＵ0のＴ−ＣＣＲ0がクリアされて、データＡの書き込みに備える。
【００９０】
５０４では、本手法は、データＡを読み出す必要がある他のトランザクションがあるかどうかを判断する。データＡを読み出す必要があるトランザクションがない場合、動作は、５０８に進む。データＡを読み出す必要がある第２のトランザクションであるトランザクション1がある場合、動作は、５０６に進む。
【００９１】
５０６では、Ｔ−ＣＣＲ0で第２のプロセッサＣＰＵ1に対応するプロセッサフラグビットＣ1が、「１」にセットされ、リーダ／ライタは、「１」に設定される。元のデータＡ（書き込まれていないデータＡ）に対応する第１のトランザクションであるトランザクション0のキャッシュラインは、第２のトランザクションであるトランザクション1内のキャッシュ（またはプライベートキャッシュ）にコピーされる。Ｔ−ＣＣＲ1で第２のプロセッサＣＰＵ1に対応するプロセッサフラグビットＣ1は、「１」に設定され、リーダ／ライタは、「０」に設定される。
【００９２】
５０８では、第１のトランザクションであるトランザクション0は、トランザクション処理を、それが完了するまで実行する。
【００９３】
５１０では、本手法は、他のトランザクションのサブミッションを待つ必要があるかどうかを判断する。
【００９４】
たとえば、本手法は、第１のトランザクションであるトランザクション0のＴ−ＣＣＲ0のプロセッサフラグビット（Ｃ1〜Ｃn）のうちのどれも設定されていないかどうかを判断することができる。プロセッサフラグビットのうちのどれも設定されていない場合、それは、待つことなく通常のサブミッションを実行することを示し、５１４の動作が実行される。
【００９５】
プロセッサフラグビットのうちの少なくとも１つが（「０」ではない値に）設定され、Ｔ−ＣＣＲ0のリーダ／ライタが「１」である場合、それは、第２のトランザクションであるトランザクション1が、データＡを使用しており、したがって、第２のトランザクションであるトランザクション1のサブミッションを待つ必要があることを示す。５１２の動作が実行される。
【００９６】
５１２では、第２のトランザクションであるトランザクション1がサブミットされると、Ｔ−ＣＣＲ1で「１」の値を有するプロセッサフラグビットに対応するプロセッサ上で起こされるトランザクションが、通知される（本実施例では、本手法は、プロセッサフラグビットＣ0が「１」であるために、第１のトランザクションであるトランザクション0を通知する）。第２のトランザクションであるトランザクション1がサブミットされた時の通知に従って、Ｔ−ＣＣＲ0の第２のプロセッサに対応するプロセッサフラグビットＣ1が、クリアされる。動作は、５１０に進む。
【００９７】
５１２の動作は、第１のトランザクションであるトランザクション0によって行われる処理の完了前に実行され得、したがって、第１のトランザクションであるトランザクション0は、待つことなく直接サブミットされ得る。
【００９８】
５１４では、第１のトランザクションであるトランザクション0がサブミットされる。
【００９９】
例示的な実施形態では、第１のトランザクションであるトランザクション0が、別のトランザクションによって書き込まれるデータを読み出す必要がある時に、Ｔ−ＣＣＲ0のリーダ／ライタが、第１のトランザクションであるトランザクション0の書き込み動作と他のトランザクションの読み出し動作との間の競合があることを示す「１」であるために、トランザクション0または別のトランザクションは、デッドロックを防ぐためにロールバックされるべきである。（たとえば、別のトランザクションが、第２のトランザクションであるトランザクション1である時、データを書き込むトランザクションが、データを読み出すトランザクションのサブミッションを待つべきであるため、第１のトランザクションと第２のトランザクションとの両方は、互いに、サブミッションを待たなければならない。第１のトランザクションと第２のトランザクションとの両方は、互いのサブミッションを待つ必要があり、したがって、トランザクションのうちのどれも、サブミットされ得ない。）対応するＴ−ＣＣＲのプロセッサフラグビットは、ロールバック動作でクリアされる。
【０１００】
本開示は、また、メモリに同時にアクセスするための、例示的なデバイス６００を提供する。デバイス６００は、キャッシュ管理部６０２と、第１の処理装置６０４と、第２の処理装置６０６とを含むことができる。
【０１０１】
キャッシュ管理部６０２は、第１のトランザクションが第１のデータへの書き込み動作を行う必要がある時に、第１のデータの読み出し動作を行った（または読み出した）、または第１のデータの読み出し動作を行う予定の、第２のトランザクションが存在する場合、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を生成する。
【０１０２】
第１の処理装置６０４は、第１のトランザクションの処理を実行し、処理が完了し、第２のトランザクションの通知が受信された後、第１のトランザクションをサブミットする。
【０１０３】
第２の処理装置６０６は、第２のトランザクションの処理を実行し、処理が完了した後、第２のトランザクションをサブミットし、第１のトランザクションを記録に従って通知する。
【０１０４】
たとえば、例示的なデバイスは、また、第１の処理装置に対応する（図６に図示しない）第１の読み出し及び書き込み競合検出レジスタと、第２の処理装置に対応する（図６に図示しない）第２の読み出し及び書き込み競合検出レジスタとを含むことができる。
【０１０５】
たとえば、キャッシュ管理部６０２が、第１のトランザクションの書き込み動作と第２のトランザクションの読み出し動作との間の競合を示す記録を生成する処理は、以下の動作を含むことができる。キャッシュ管理部６０２は、第１の読み出し及び書き込み競合検出レジスタにおいて、第２の処理装置に対応するプロセッサフラグビットを設定し、動作競合フラグビットを、書き込み動作競合の発生を示す値として設定する。キャッシュ管理部６０２は、第２の読み出し及び書き込み競合検出レジスタにおいて、第１の処理装置に対応するプロセッサフラグビットを設定し、動作競合フラグビットを、読み出し動作競合の発生を示す値として設定する。
【０１０６】
たとえば、第１のトランザクションを記録に従って通知する第２の処理装置６０６の処理は、以下の動作を含むことができる。第２の処理装置６０６は、第２の読み出し及び書き込み競合検出レジスタにおいて、設定されたプロセッサフラグビットを検索し、設定されたプロセッサフラグビットが、第１の処理装置に対応すると判断し、第１の処理装置で起こされる第１のトランザクションを通知する。
【０１０７】
たとえば、第１の処理装置６０４は、第１の判断モジュールと、第２の判断モジュールと、実行モジュールと、クリーニングモジュールとを含むことができる（これらのすべては図６に図示されていない）。実行モジュールは、第１のトランザクションの処理を実行し、処理が完了した後、第１の判断モジュールに判断を実行するように指示する。
【０１０８】
クリアリングモジュールは、第２のトランザクションの通知が受信された後、第１の読み出し及び書き込み競合検出レジスタにおいて、第２の処理装置に対応するプロセッサフラグビットをリセットし、第２の判断モジュールに判断を実行するように指示する。
【０１０９】
第１の判断モジュールは、第１の読み出し及び書き込み競合検出レジスタの動作競合フラグビットが、書き込み動作競合の発生を示す値であるかどうかを判断する。判断結果が肯定的である場合、第１の判断モジュールは、第２の判断モジュールに判断することを指示する。値が読み出し動作競合の発生を示す場合、第１の判断モジュールは、サブミットモジュールに、第１のトランザクションをサブミットするように指示する。
【０１１０】
第２の判断モジュールは、第１の読み出し及び書き込み競合検出レジスタのプロセッサフラグビットのうちのどれも設定されていないかどうかを判断する。判断結果が肯定的である場合、第２の判断モジュールは、サブミットモジュールに、第１のトランザクションをサブミットするように指示する。
【０１１１】
たとえば、キャッシュ管理部６０２は、第２のトランザクションが第１のデータを読み出したと判断されると、第１の処理装置が第１のトランザクションを実行する前に、第２のトランザクションに対応する第１のデータのキャッシュラインを、第１のトランザクションに対応するプライベートな見えないキャッシュにコピーする。
【０１１２】
キャッシュ管理部６０２が、第２のトランザクションが第１のデータを読み出す予定であると判断した場合、第２の処理装置が第２のトランザクションの処理を実行する前に、第１のトランザクションに対応するキャッシュラインから、書き込み動作が行われていない第１のデータを、第２のトランザクションに対応するキャッシュにコピーする。
【０１１３】
当業者は、本開示の方法におけるステップまたは動作の全部または一部を、プログラム命令またはコンピュータ実行可能命令によって指示される、関連ハードウェアによって実装する、ということを理解する。プログラム命令を、リードオンリメモリ、磁気ディスクまたは光ディスク、などの、コンピュータ可読記憶媒体に記憶することができる。代替的に、本開示の実施形態におけるステップまたは動作の全部または一部を、１つまたは複数の集積回路によって実装することができる。したがって、本開示の実施形態におけるモジュール／ユニットの全部を、ハードウェアまたはソフトウェアの機能モジュールの形態で実装することができる。本開示は、ハードウェアとソフトウェアとの具体的な組み合わせに限定されない。
【０１１４】
本開示が、さまざまな実施形態を有することができる、ということに留意する。当業者は、本開示の精神と本質とから逸脱することなく、本開示によるさまざまな変更と変形とを行うことができる。そのような変更及び変形は、本開示とその特許請求の範囲との保護範囲に含まれるものである。
【図１】
2016537708.tif 000003
【図２】
2016537708.tif 000004
【図３】
2016537708.tif 000005
【図４】
2016537708.tif 000006
【図５】
2016537708.tif 000007
【図６】
2016537708.tif 000008
【国際調査報告】
2016537708.tif 000009
2016537708.tif 000010
2016537708.tif 000011