(57)【特許請求の範囲】
【請求項１】
それぞれがデータを記憶するように構成される複数のデータ・ストレージ要素と、
マスクを記憶するように構成されるマスク・ストレージ回路と、
１つ又は複数の命令を実行するように構成される処理回路と、
トランザクション開始命令に応答して、前記データ・ストレージ要素のサブセットを選択して前記データ・ストレージ要素の前記サブセットのバックアップをセーブするように構成されるデータ・セーブ手段と、
前記データ・セーブ手段によって選択された前記データ・ストレージ要素の前記サブセットを示すように、前記マスクをアップデートするように構成されるマスク制御回路と、
前記マスクによって示されなかった前記データ・ストレージ要素のうちの１つへの書き込みを検出するように構成されるモニタと、を備える、
データ処理装置。
【請求項２】
前記マスクによって示されなかった前記データ・ストレージ要素のうちの前記１つへの前記書き込みを阻害するように構成される阻害回路を備える、
請求項１に記載のデータ処理装置。
【請求項３】
前記バックアップから前記マスクによって示された前記データ・ストレージ要素を復元するように構成される復元手段を備える、
請求項２に記載のデータ処理装置。
【請求項４】
前記トランザクション開始命令又はエラー処理手段を示すプログラム・カウンタをアップデートするように構成されるアップデート回路を備える、
請求項３に記載のデータ処理装置。
【請求項５】
前記モニタがさらに、前記マスクによって示されなかった前記データ・ストレージ要素のうちの前記１つへの前記書き込みの検出に応答して、エラーを発信するように構成される、
請求項１から４までのいずれか一項に記載のデータ処理装置。
【請求項６】
前記データ・ストレージ要素が、前記データ処理装置によって実行されるヒューリスティックな分析に基づいて前記データ・セーブ手段によって選択される、
請求項１から５までのいずれか一項に記載のデータ処理装置。
【請求項７】
前記ヒューリスティックな分析が、コンパイラによって注釈されたデータに依存する、
請求項６に記載のデータ処理装置。
【請求項８】
前記ヒューリスティックな分析が、１つ又は複数の命令に関連した呼び出し規約に依存する、
請求項６又は７に記載のデータ処理装置。
【請求項９】
前記ヒューリスティックな分析が、前記マスクによって示されない前記データ・ストレージ要素のうちの１つへの書き込みを前記モニタが検出した回数に依存する、
請求項６から８までのいずれか一項に記載のデータ処理装置。
【請求項１０】
選択された前記データ・ストレージ要素の前記サブセットが、前記マスクによって示されない前記データ・ストレージ要素のうちの前記１つへの前記書き込みを検出する前記モニタに応答して増加する、
請求項１から９までのいずれか一項に記載のデータ処理装置。
【請求項１１】
データ・ストレージ要素の前記サブセットが、サブセット定義命令に応答して前記データ・セーブ手段によって選択される、
請求項１から１０までのいずれか一項に記載のデータ処理装置。
【請求項１２】
前記複数のデータ・ストレージ要素が複数のレジスタである、
請求項１から１１までのいずれか一項に記載のデータ処理装置。
【請求項１３】
前記モニタがモニタリング回路を備える、
請求項１から１２までのいずれか一項に記載のデータ処理装置。
【請求項１４】
前記モニタがモニタリング・ソフトウェアによって実装される、
請求項１から１２までのいずれか一項に記載のデータ処理装置。
【請求項１５】
前記データ・セーブ手段がデータ・セーブ回路を備える、
請求項１から１４までのいずれか一項に記載のデータ処理装置。
【請求項１６】
前記データ・セーブ手段がデータ・セーブ・ソフトウェアによって実装される、
請求項１から１４までのいずれか一項に記載のデータ処理装置。
【請求項１７】
前記データ・セーブ手段が、ローカル・キャッシュに前記データ・ストレージ要素の前記サブセットのバックアップをセーブするように構成される、
請求項１から１６までのいずれか一項に記載のデータ処理装置。
【請求項１８】
前記マスクが、セーブされるべきレジスタのセットとセーブされるべきでないレジスタのセットの両方を示し、
前記データ・ストレージ要素が、前記セーブされるべきレジスタのセットにおいて識別されたストレージ要素を含み、前記セーブされるべきでないレジスタのセットにおいて識別されたストレージ要素を排除することによって、前記データ・セーブ手段によって選択される、
請求項１から１７までのいずれか一項に記載のデータ処理装置。
【請求項１９】
データを記憶する複数の手段と、
マスクを記憶するマスク・ストレージ手段と、
１つ又は複数の命令を実行する処理手段と、
トランザクション開始命令に応答して、前記データを記憶する複数の手段のサブセットを選択して、前記データを記憶する複数の手段の前記サブセットによって記憶された前記データのバックアップをセーブする、データ・セーブ手段と、
前記データ・セーブ手段によって選択された前記データを記憶する複数の手段の前記サブセットを示すように前記マスクをアップデートするマスク制御手段と、
前記マスクによって示されなかった前記データを記憶する複数の手段のうちの１つへの書き込みを検出するモニタリング手段と、を備える、
データ処理装置。
【請求項２０】
データを記憶する複数のデータ・ストレージ要素を含むデータ処理装置においてデータを処理する方法であって、
トランザクション開始命令に応答して前記データ・ストレージ要素のサブセットを選択するステップと、
前記データ・ストレージ要素の前記サブセットによって記憶されたデータのバックアップをセーブするステップと、
前記データ・ストレージ要素の前記サブセットを示すようにマスクをアップデートするステップと、
前記マスクによって示されなかった前記データ・ストレージ要素のうちの１つへの書き込みを検出するステップと、を備える、
データを処理する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理の分野に関し、特にデータ処理装置におけるトランザクションの使用に関する。
【背景技術】
【０００２】
マルチ・プロセッサ・システムにおいて、様々な処理装置間の調整（coordination）を保証することがしばしば必要になる。例えば、プロセッサＡとプロセッサＢが共に共有リソース（例えばある人物の預金残高の値）を１０ずつ減少させようとする状況を考える。ある人物の預金残高の値がはじめ１００であった場合、正しく処理されるとして、共有値は８０まで減少する（１００−１０−１０）。しかしながら、プロセッサＡ及びＢはそれぞれ同時に現在の値を取得する場合、プロセッサのそれぞれは計算を実施して新しい値（９０）を共有メモリに同時に書き込んで戻すことがある。したがって、調整を欠いているために、２つのトランザクションの一方は他方のトランザクションによってマスキングされ、又は上書きされる。
【０００３】
単一の実行エージェント（プロセッサ又はスレッド）のみが一度に共有リソースにアクセス可能となることを保証するために、ロックが使用されてもよい。上記の実例を考慮すると、ユーザの預金残高は共有リソースであり、したがってロックは、１つのみのプロセッサが読み取り可能であることを保証し、その値をすぐに変更するように、そのデータ値に適用されてもよい。正しく書き込まれた場合、そのようなロックはトランザクションを互いに上書きすることを阻止し、共有リソースへのアクセスがすべてのエージェントにわたって調整されることを保証するように、用いられてもよい。言い換えれば、このことはあるエージェントが古い版の共有リソースで動作を行う状況を阻止することに役立つ。ロックを使用することの不利な点は、保護される粒度のレベルにある。例えば、リンク・リストを考える。リンク・リストにおいて、各要素はデータ値及びリスト内の次の要素へのポインタを提供する。要素のうちの１つがもはやリスト内の次の要素を指さなくなる、すなわちリストが破壊される状況を阻止するために、リストへのアクセスをロックすることは、複数のエージェントがそのようなリンク・リストに変更アクセスを試みることが可能な場合に、望ましい。１つの選択肢はリスト全体にロックを提供することである。しかしながら、あるエージェントがリストの筆頭を変更することを望み、別のエージェントがリストの末尾を変更することを望む場合のように、２つのエージェントによる編集が互いに干渉する可能性は低いのに、このロックは不必要に制約的である。別の選択肢は、リストの各個の要素にロックを提供することである。しかしながら、このためには、大きなリストの場合に多数のロックが必要となり得、各ロックはそれ自身のストレージをメモリ内に必要とする。ロックにはまた、デッドロックを引き起こし得る不利な点がある。例えば、２つのエージェントがそれぞれ２つの、ロックによって保護されている共有データ・リソースへのアクセスを要求し、且つその２つのエージェントがそれぞれ、それら２つの共有データ・リソースの一方にロックをかける場合、システムはデッドロックに陥る。言い換えれば、いずれのエージェントも先に進むことができず、他のエージェントが必要なロック解除を行うのを永遠に待つこととなる。
【０００４】
１つの解決方法はロックではなくトランザクションを用いることである。トランザクションが開始すると、プロセッサは特別な実施モードに入る。このモードの間は、システムは読み込み及び書き込みを追跡する。（例えば、複数のエージェントの間での）コンフリクトと判定されるべき場合、エージェントの一方はキルオフ（kill off）されてロールバックされ、例えば、キルオフされたエージェントによる変更が取り消される。コンフリクトが発生しなかった場合は、エージェントは完了するまで続行し、行われた変更がそのときコミット（commit）される。したがって、トランザクションがコミットされる（単一の操作）まで、トランザクション全体が他のエージェントから不可視であり、その１つのエージェントによってロールバックされることによって取り消されるか巻き戻される可能性があるため、トランザクションは、一連の単一のアトミックな操作として扱われる操作であると考えてもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
いくつかのシステムにおいて、トランザクションを実行することは、ロールバックの場合にすべてのアーキテクチャのレジスタをそれらのオリジナルの値に復元するように、それらのレジスタのセーブを必要とすることがある。いくつかのアーキテクチャは、かなりの数のレジスタを含むことがあり、したがって、そのようなシステムでは、それらのレジスタのすべての値のセーブを必要とすることがある。しかしながら、そのような手法は無駄が多いことがある。というのは、決してトランザクションの中で変更されることがないデータをセーブすることを含む可能性があるからである。この場合、データは不要に記憶され、それによって、値を記憶するためのストレージ空間と、データ値を物理的にコピーするために時間の両方を消費する。さらに、ロールバックが発生した場合、そのデータ値が変更されなかった場合でさえ、すべてのセーブされたレジスタはその復元された値を持たなければならない。したがって、ロールバックが発生した場合、記憶されたデータ値のすべてを復元する際にさらなる時間が浪費される。加えて、ロールバック発生の場合の、すべてのそれらの記憶されたデータ値の復元に関連する電力消費もまた、回避されることが好ましい。
【０００６】
代替として、ユーザ及び／又はコンパイラが、トランザクションの最中に変更されるレジスタを特定することが可能である。この場合には、特定されたレジスタのみがセーブされ、それらのレジスタのみがロールバック発生の場合に復元される。しかしながら、特定のレジスタがトランザクションにおいて用いられるか否かを予測することは、常に可能とは限らない場合がある。例えば、トランザクションはライブラリ関数の１つ又は複数の呼び出し（call）を含む場合がある。ユーザ又はプログラマは、そのようなライブラリ関数の制御がほとんど又は全くできず、ライブラリ関数がどのように作用するのかを知ることさえできないことがある。そのような場合には、トランザクションが開始した場合にユーザにはどのレジスタがセーブされるべきかを知る手段がない。それ故に、ユーザはすべてのレジスタをセーブするか、又はセーブされていないレジスタが変更された結果としてロールバックが失敗する可能性と共に進行しなければならない。
【課題を解決するための手段】
【０００７】
第１の実例の構成によれば、データ処理装置が提供され、データ処理装置は、それぞれがデータを記憶するように構成される複数のデータ・ストレージ要素、マスクを記憶するように構成されるマスク・ストレージ回路、１つ又は複数の命令を実行するように構成される処理回路、トランザクション開始命令に応答して、データ・ストレージ要素のサブセットを選択してデータ・ストレージ要素のサブセットのバックアップをセーブするように構成されるデータ・セーブ手段、データ・セーブ手段によって選択されたデータ・ストレージ要素のサブセットを示すように、マスクをアップデートするように構成されるマスク制御回路、及び、マスクによって示されなかったデータ・ストレージ要素のうちの１つへの書き込みを検出するように構成されるモニタ、を備える。
【０００８】
第２の実例の構成によれば、データ処理装置が提供され、データ処理装置は、データを記憶する複数の手段、マスクを記憶するマスク・ストレージ手段、１つ又は複数の命令を実行する処理手段、トランザクション開始命令に応答して、データを記憶する複数の手段のサブセットを選択して、データを記憶する複数の手段のサブセットによって記憶されたデータのバックアップをセーブする、データ・セーブ手段、データ・セーブ手段によって選択されたデータを記憶する複数の手段のサブセットを示すようにマスクをアップデートするマスク制御手段、及び、マスクによって示されなかったデータを記憶する複数の手段のうちの１つへの書き込みを検出するモニタリング手段、を備える。
【０００９】
第３の実例の構成によれば、データを記憶する複数のデータ・ストレージ要素を含むデータ処理装置においてデータを処理する方法が提供され、この方法は、トランザクション開始命令に応答してデータ・ストレージ要素のサブセットを選択するステップと、データ・ストレージ要素のサブセットによって記憶されたデータのバックアップをセーブするステップと、データ・ストレージ要素のサブセットを示すようにマスクをアップデートするステップと、マスクによって示されなかったデータ・ストレージ要素のうちの１つへの書き込みを検出するステップと、を備える。
【００１０】
本技術は例示のみの目的で、添付の図面に記載されたその実施例に関連して、さらに記載される。
【図面の簡単な説明】
【００１１】
【図１】一実施例におけるデータ処理装置を備えるシステムの概観図である。
【図２】一実施例におけるデータ処理装置を構成する構成要素を示す回路図である。
【図３】一実施例におけるデータ処理装置を構成する構成要素を示す回路図である。
【図４】一実施例に従ってデータ処理装置を用いる方法を、流れ図形式で示した図である。
【図５】トランザクションの開始においてセーブされるレジスタのセットを選択するために、ヒューリスティック（heuristics:発見的研究）がどのように使用可能であるかを示す流れ図である。
【発明を実施するための形態】
【００１２】
第１の実例の構成によれば、データ処理装置が提供され、データ処理装置は、それぞれがデータを記憶するように構成される複数のデータ・ストレージ要素、マスクを記憶するように構成されるマスク・ストレージ回路、１つ又は複数の命令を実行するように構成される処理回路、トランザクション開始命令に応答して、データ・ストレージ要素のサブセットを選択してデータ・ストレージ要素のサブセットのバックアップをセーブするように構成されるデータ・セーブ手段、データ・セーブ手段によって選択されたデータ・ストレージ要素のサブセットを示すようにマスクをアップデートするように構成されるマスク制御回路、及び、マスクによって示されなかったデータ・ストレージ要素のうちの１つへの書き込みを検出するように構成されるモニタ、を備える。
【００１３】
トランザクションが開始すべきであることを示す、トランザクション開始命令に応答して、マスク・ストレージ回路はデータ・ストレージ要素のサブセットをセーブ（バックアップ）する。これらのデータ・ストレージ要素は、例えばデータ処理装置内のレジスタであってもよい。そのようなデータ・ストレージ要素は、レジスタ・ファイル、シャドー・レジスタ・ファイル、及び、例えばキャッシュ及び内部スクラッチ・パッド・メモリを含む、様々な型のメモリ構造の形態をとってもよいことが理解されるであろう。次に、どのデータ・ストレージ要素がセーブされたかを示すマスクが記憶される。語句「サブセット」は、ここでは、データ・ストレージ要素のフルセットの「すべてよりも小さい」ことを意味するように用いられることを理解すべきである。トランザクションの最中に、プロセッサは１つ又は複数の命令を実行する。モニタはマスクによって示されなかったデータ・ストレージ要素への書き込み試行（即ち、セーブ又はバックアップされなかったデータ・ストレージ要素への書き込み試行）を検出する。例えば、モニタはデータ・ストレージ要素への書き込みを行わせるそれらの命令を検査するか、又は処理回路によってデータ・ストレージ要素に送られる信号をインターセプト（横取り）してもよい。本明細書を通じて、用語「書き込み」は、データ・ストレージ要素への現実の書き込みと、プロセッサからそれらのデータ・ストレージ要素への書き込み要求の両方への言及を意図することに留意されたい。そのような書き込み又は書き込み試行が進行することが許可された場合、トランザクション機構自体は失敗する。それは、ロールバックが可能でないためである（復元不可能なデータ・ストレージ要素への書き込みがつくられるため）。したがって、データ処理装置は（モニタのおかげで）、そのような書き込みを検出可能であり、適宜であれば適切な動作をとることができる。したがって、トランザクションが開始すべきときはいつでも、ユーザがすべての単独のレジスタをセーブ又はバックアップする必要がなくなり、セーブ又はバックアップされなかったデータ・ストレージ要素に行われた書き込み試行の結果としてトランザクション機構が失敗する可能性を、ユーザが気にかける必要がなくなる。
【００１４】
マスクによって示されなかったデータ・ストレージ要素に対する書き込み試行の検出に応答して、データ処理装置によって行われる動作は多くの異なる形をとることができる。それらの実例は以下に記載され、それらは単独又は組み合わせのいずれかで存在してもよい。
【００１５】
例えば、データ処理装置は、マスクによって示されなかった１つのデータ・ストレージ要素への書き込みを阻害するように構成される阻害回路を備えてもよい。そのような実施例において、バックアップされなかったデータ・ストレージ要素への書き込み試行が行われた場合、書き込みを実行しようとする試行はブロックされるのみであることがある。このことは、プロセッサによって生成された書き込み要求がデータ・ストレージ要素に到達することを妨げるモニタによって遂行され得る。そのような実施例において、モニタは書き込み試行が失敗したプロセッサへの信号であってもよく、それはプロセッサが、例えば例外処理ルーチンを実行することによって、プロセッサ自身の訂正動作をとることを可能にする。
【００１６】
別の実例として、データ処理装置は、マスクによって示されたデータ・ストレージ要素をバックアップから復元するように構成される復元手段を備えてもよい。その結果、バックアップされなかったデータ・ストレージ要素への書き込み試行が行われた場合、データ・ストレージ要素のすべてはそれらの以前の値に復元されてもよい。いくつかの場合では、アップデータ（例えばアップデート回路として実施される）もまた、トランザクション開始命令又はエラー処理手段を示すプログラム・カウンタをアップデートしてもよい。プログラム・カウンタに戻ってデータ・ストレージ要素を復元した結果、トランザクションの完全なロールバックが行われる。したがって、トランザクションが再開されてもよい。エラー処理手段を示すようにプログラム・カウンタを変更することによって、特別なエラー処理コードを実行することができる。これは診断情報を出力するように用いてもよい。
【００１７】
さらなる実例として、マスクによって示されないデータ・ストレージ要素のうちの１つへの書き込みの検出に応答して、モニタはエラーを発信するように構成されてもよい。例えば、信号はプロセッサに送信されてもよい。プロセッサはそのような状況を処理することに特化したサブルーチンを有してもよい。代替として、プロセッサは例外信号を発してもよく、ソフトウェア自体がその状況を取り扱う例外処理ルーチンを備えてもよい。これは、トランザクションをどのように進行するかに関する柔軟性を完全なものとすることができる。例えば、トランザクションがすでに多数回失敗している場合、トランザクションは単にロールバックされて放棄されることがある。トランザクションの失敗が重要でない（例えば、データ値自体が決定的でない）場合、ソフトウェアはロールバックすることさえなく継続することを許されてもよい。他の場合には、トランザクションはロールバックされて再開されてもよく、この場合は追加のレジスタがセーブされる。
【００１８】
このデータ・ストレージ要素は、データ処理装置によって実行されるヒューリスティックな（例えば、経験に基づく）分析に基づいてデータ・セーブ手段によって選択されてもよい。特に、ヒューリスティック又は統計を用いることによって、データ・セーブ手段はセーブ（バックアップ）すべきデータ・ストレージ要素を選択してもよい。そのような場合、バックアップすべきデータ・ストレージ要素をプログラマが明白に言葉にする必要はなくてよく、プログラマの負担を低減し、ライブラリがプログラマによって呼ばれている場合、及びどのデータ・ストレージ要素をバックアップすべきかプログラマには不明である場合の使用に適するものとなることができる。
【００１９】
ヒューリスティックな分析はコンパイラによって注釈されたデータに依存してもよい。例えば、コンパイルの最中に、コンパイラは、データ・セーブ手段によってどのデータ・ストレージ要素をセーブすべきか決定するように用いられることが可能なヒント（即ち、指示）を提供してもよい。
【００２０】
ヒューリスティックな分析は１つ又は複数の命令に関連した呼び出し規約に依存してもよい。呼び出し規約は、特定のアーキテクチャによって指示され、関数呼び出しにおいて呼び出し元と呼び出し先の間でどのようにデータが交換されるべきかを特定してもよい。特に、呼び出し規約は、パラメータがどのように送られるべきか（例えば、個別のデータ・ストレージ要素又はスタックを用いて）、及びどのように結果が戻されるべきかを示してもよい。この情報は、トランザクションの開始前にセーブすべき、又はセーブする必要がありそうなデータ・ストレージ要素を予見することに役立ち得る。
【００２１】
ヒューリスティックな分析は、マスクによって示されないデータ・ストレージ要素のうちの１つへの書き込みをモニタが検出した回数に依存してもよい。例えば、セーブされなかったレジスタへの書き込みの結果としてトランザクションが繰り返しロールバックされた場合、将来のトランザクションがロールバックする機会を減少させようとするために、セーブのためにデータ・セーブ手段によって選択されるデータ・ストレージ要素が変更されてもよい。例えば、選択されたデータ・ストレージ要素のサブセットは、マスクによって示されないデータ・ストレージ要素のうちの１つへの書き込みを検出するモニタに応答して増加させてもよい。例えば、セーブされなかったデータ・ストレージ要素への書き込み試行をモニタが毎回検出するたびに、ロールバックが発生して、以前の反復と比較して追加のレジスタがセーブされてもよい。別の実施例では、セーブされるレジスタの数が、発生するロールバックの数を制限するためにより早くインクリメントしてもよい。しかしながら、これは、不要なレジスタをセーブするリスクの増加と釣り合わなければならない。
【００２２】
セーブすべきデータ・ストレージ要素のサブセットは、サブセット定義命令に応答してデータ・セーブ手段によって選択されてもよい。例えば、ユーザはどのデータ・ストレージ要素がセーブされるべきかに関する「最良の推測」を提供してもよい。そのような手法は、どのデータ・ストレージ要素がバックアップされるべきか判定する初期開始点として役立つことができる。呼ばれているライブラリの機能に関する知識をユーザが得ている場合、そのような手法は特に有用であろう。
【００２３】
データ・ストレージ要素は複数のレジスタであってもよい。
【００２４】
モニタはモニタリング回路を備えてもよい。モニタリング回路はプロセッサにより生成されるデータ・ストレージ要素への信号をインターセプトしてもよい。他の実施例では、モニタはモニタリング・ソフトウェアによって実装されてもよく、ある命令が、プロセッサがその命令を実行する前にセーブされていない（すなわち、マスクの一部ではない）データ・ストレージ要素への書き込みを発生させるかを決定するために、実行される命令をモニタリングすることができる。
【００２５】
データ・セーブ手段はデータ・セーブ回路、すなわち、記載されたデータ・セーブ機能を実行するように構成される特定の回路を備えてもよい。しかしながら、データ・セーブ手段は、データ・ストレージ要素を特定の位置に明示的にバックアップ又はセーブするデータ・セーブ・ソフトウェアによって実装されてもよい。
【００２６】
データ・セーブ手段はローカル・キャッシュにデータ・ストレージ要素のサブセットのバックアップをセーブするように構成されてもよい。ローカル・キャッシュを使用することによって、変更が記憶される時間まで、他のエージェントによって行われた変更を分離することが可能である。このことは、変更が記憶されるまで変更は他のエージェントには見えてはならないため、重要である。この分離はローカル・キャッシュを用いて、他のプロセッサによって読み出されることを許可すべきではない旨を示す適切なタグを関連するキャッシュ・ライン・エントリに提供することによって、遂行され得る。
【００２７】
いくつかの実施例では、マスクは、セーブされるべきレジスタのセットとセーブされるべきでないレジスタのセットの両方を示す。そして、セーブされるべきレジスタのセットにおいて識別されたストレージ要素を含み、セーブされるべきでないレジスタのセットにおいて識別されたストレージ要素を排除することによって、データ・ストレージ要素はデータ・セーブ手段によって選択される。したがって、その値がセーブされないレジスタのセットを示すことが可能である。しかしながら、それらのレジスタはまだマスクによって示されているため、それらのレジスタに書き込むことは、何ら特別な振る舞いを生じさせることがない。したがって、そのようなレジスタは、例えば外部世界への通信目的で用いることが可能である。
【００２８】
図１は、それぞれプロセッサ・コア１００、１３０を備え、それぞれそのプロセッサ・コアにローカルなレジスタの関連するセットを有する、２つのデータ処理装置１０２、１０４を備えるシステムを示す。プロセッサ・コア１００、１３０はまた、それぞれ関連するローカル・キャッシュ１１０、１４０を有する。言い換えれば、１つのプロセッサ・コアは他のプロセッサ・コアに関連するキャッシュにアクセスすることができない。キャッシュ１１０、１４０はそれぞれ、互いに通信し（コヒーレンシーの目的で）、メモリ・バス１５０を介して共有メモリ１２０と通信することができる。共有メモリ、すなわちメイン・メモリ１２０は、プロセッサ・コア１００、１３０によってアクセス可能な１つ又は複数の共有データ構造体（共有リソース）を備える。プロセッサ・コア１００、１３０のそれぞれが、メイン・メモリ１２０内にある同一の共有データ構造体にアクセス可能であるため、プロセッサ・コア間の調整をもたらし、一方のプロセッサ・コアによる変更が別のプロセッサ・コアによって行われる変更によって「上書きされる」ことの阻止に役立つように、システムはトランザクションを用いる。
【００２９】
図２は、プロセッサ・コア１００の実施例を示す。処理回路１６０はデータ処理命令を実行する。それらの命令のうちの１つはトランザクションが開始する旨を示すように用いられることができる。そのような命令の受信に応答して、処理回路１６０は、レジスタ・ファイル１８０内のレジスタのサブセット１９０をセーブするように、データ・セーブ回路１７０に信号を送る。マスク２００はまた、レジスタのサブセット１９０を表わすように、マスク制御回路２１０によってアップデートされる。この実例において、サブセット１９０はレジスタｒ０、ｒ１及びｒ２を含む。したがって、マスクは値１１１０００００をとることができ、それによって、サブセットはレジスタ・ファイル１８０内の８つのレジスタのうち最初の３つのレジスタを含むことを示す。もちろん、大きい、又は異なる数のレジスタを含むレジスタ・ファイル内においては、どのレジスタがデータ・セーブ回路１７０によってセーブされたレジスタのサブセットを含むかを反映するために、マスクのサイズが適切なものとされることが理解されるであろう。プロセッサ・コア１００はまた、処理回路１６０及びレジスタ・ファイル１８０の（機能的な）間にあるモニタリング回路２２０を備える。モニタリング回路２２０は処理回路１６０によって生成されたレジスタ・ファイル１８０への書き込み要求をインターセプトする。言い換えれば、処理回路１６０がレジスタ・ファイル１８０内のレジスタに書き込みの信号を送信した場合、この信号はまずモニタリング回路２２０によって受信される。次いで、モニタリング回路２２０は、インバータ２３０によってマスク２００を反転することによって、データ・セーブ回路によってセーブされなかったレジスタのセットとの比較を行う。処理回路１６０によって生成されモニタリング回路２２０によって受信された書き込み要求が、データ・セーブ回路１７０によってセーブされたレジスタのうちの１つにはない場合、モニタリング回路は反応を示す。例えば、この実施例において、モニタリング回路は処理回路１６０に警告の信号を発する。しかしながら、処理回路１６０によって生成された書き込み要求（信号）が、データ・セーブ回路１７０によってセーブされたレジスタのうちの１つにある場合、書き込みが完了するように、要求はモニタリング回路２２０によって、レジスタ・ファイル１８０に進むことを許可されてよい。
【００３０】
いくつかの他の実施例では、マスクは追加的に、セーブされるべきでない（すなわち、セーブされない）レジスタのセットを識別することができる。そのようなレジスタはデータ・セーブ回路１７０によってセーブされず、しかしながら、これらのレジスタはマスクによってすでに識別されているため、モニタリング回路２２０はこれらのレジスタが書き込まれたかどうかに反応を示さない。これらのレジスタはバックアップされず、しかしながらモニタリング回路１７０がある特別な振る舞い（エラーを発する、停止する、又は再起動する）を行うことなく、書き込まれることができる。そのようなレジスタは、したがって、例えば外部世界などとの通信に用いてもよい。例えば、停止トランザクションは、トランザクションが停止している理由を伝えるようにそのようなレジスタを用いてもよい。
【００３１】
それらの実施例において、したがって、レジスタは３つの異なる場合のうちの１つに分類される。第１の場合には、レジスタはセーブされるレジスタとしてマスクによって示されてもよい。そのようなレジスタはバックアップされ、必要であればロールバック可能である。第２の場合には、レジスタはマスクによって全く示されないものであってよい。トランザクションの最中にそのようなレジスタへの書き込みがある場合、ある種類の特別な振る舞いがモニタリング回路１７０によって開始されてもよい。例えば、トランザクションが停止してもよく、システムが再起動してもよく、エラーが発せられてもよいなどである。第３の場合には、レジスタはセーブされないレジスタとしてマスクによって示されてもよい。そのようなレジスタはバックアップされず、ロールバックされることができない。しかしながら、そのようなレジスタに書き込みがある場合、モニタリング回路１７０は特別な動作を行わない。
【００３２】
図３はプロセッサ・コア１００及びローカル・キャッシュ１１０を備えるデータ処理装置１０２の実施例である。すでに記載されている機能を示すには同一の参照符号が用いられる。
【００３３】
記載された実施例において、データ・セーブ回路１７０はヒューリスティック分析手段２４０を備える。ヒューリスティック分析手段は、ローカル・キャッシュ１１０にセーブ又はバックアップされるべきレジスタ１９０のサブセットの選択において、データ・セーブ回路の連続する成功又は失敗をモニタリングする。サブセット１９０を決定する場合、ヒューリスティック分析手段２４０によって考慮されてもよい異なるヒューリスティック又は統計が多数ある。例えば、この実施例は、サブセット１９０の一部でないレジスタ・ファイル１８０内のレジスタへの書き込みの処理回路１６０による試行をモニタリング回路がインターセプトした回数に基づくヒューリスティックを考慮する。特に、キャッシュにセーブされていないレジスタ・ファイル１８０内のレジスタ（すなわち、サブセット１９０の一部でないレジスタ）への処理回路１６０による書き込み試行があるたびに、カウンタ２５０がインクリメントする。データ・セーブ回路１７０がセーブすべきレジスタを決定する場合、カウンタ２５０の値が考慮に入れられる。このようにして、セーブされていないレジスタ・ファイル１８０内のレジスタへの、処理回路１６０によって行われた書き込みの要求がより多くなるため、データ・セーブ回路１７０はレジスタのより大きいサブセットをセーブすることによって応答する。
【００３４】
ヒューリスティック分析手段２４０は、処理回路１６０によって実行される命令に関連する呼び出し規約などのヒューリスティックを考慮することもできる。呼び出し規約は、関数呼び出しの最中に呼び出し元と呼び出し先の間でどのようにデータが送られるかの方法と様式を指示する。例えば、呼び出し規約はレジスタの特定の組み合わせを用いて、又はスタックを用いてパラメータが送られることを指示してもよい。同様に、呼び出し規約は関数呼び出しの結果がどのように戻されるべきかを示してもよい。この情報は、処理回路１６０によって書き込まれる可能性が高いレジスタをよりよく予見するために用いられることができる。例えば、呼び出し規約が、第１のパラメータが常にレジスタｒ０を用いて送られることを示す場合、レジスタｒ０は処理回路１６０によっていくつかの点で書き込まれる可能性がある、といえる可能性が高い。したがって、ヒューリスティック分析手段２４０は、レジスタｒ０は選択されたサブセットの一部を常に構成すると決定してもよい。
【００３５】
ヒューリスティック分析手段によって考慮されるヒューリスティックのさらなる実例は、ソース・コードを処理回路１６０に対する命令にコンパイルする最中にコンパイラによって提供されるヒントであってもよい。コンパイラはソース・コードの可視性を有するため、コンパイラはデータ・セーブ回路１７０によってセーブされなければならないレジスタの良好な表示を提供する立場にあることができる。しかしながら、これは常に可能であるとは限らず、なぜならソース・コードがコンパイラに可視ではないライブラリ又は外部コード・ソースを参照している可能性のためであることに留意されたい。したがって、コンパイラによって提供されるヒントは常に完全であるとは限らない。
【００３６】
同様に、コンパイルされたアプリケーションが、データ・セーブ回路１７０によってセーブされるべきでないレジスタの表示を与えてもよい。これがヒューリスティック分析手段２４０によって集められたヒューリスティック又は統計に優先するように用いられるか、又はコンパイルされたアプリケーションによって示されるものを除くすべてのレジスタをセーブするようにデータ・セーブ回路１７０が構成されるかのいずれかであってもよい。
【００３７】
ここでは明示的には述べないが当業者には知られているさらなる実例を含む、様々な異なるヒューリスティックが、任意の組み合わせで、ヒューリスティック分析手段２４０によって考慮されてもよいことを理解すべきである。ヒューリスティック分析手段２４０は、セーブされるべきレジスタのサブセット１９０に関する最終結論を生成するために、様々な方法で異なるヒューリスティックを組み合わせてもよい。
【００３８】
モニタリング及び阻害回路３２０が、処理回路１６０のレジスタ・ファイル１８０への書き込み試行をモニタリングするように提供される。モニタリング及び阻害回路３２０は処理回路１６０からレジスタ・ファイル１８０への書き込み要求をモニタリングするだけでなく、データ・セーブ回路１７０によってセーブされて（バックアップされて）いないレジスタに関するレジスタ・ファイル１８０に処理回路１６０によって送信される信号を阻止するように構成される。言い換えれば、その信号は無視され、レジスタ・ファイル１８０に転送されない。
【００３９】
さらに、データ・セーブ回路１７０によってセーブされていないレジスタ・ファイル１８０内のレジスタへの書き込み要求の検出に応答して、レジスタ・ファイル１８０内にあるプログラム・カウンタ２７０がアップデータ２６０によってアップデートされる。プログラム・カウンタ２７０は、処理回路１６０によって次に実行される命令を示すように使用される。したがって、アップデータ２６０を用いてプログラム・カウンタ２７０をアップデートすることによって、処理回路１６０がサブセット１９０の一部ではないレジスタへの書き込みを試行している旨をモニタリング及び阻害回路３２０が検出した場合、トランザクションを再開するか、又はトランザクション全体をスキップすることが可能である。この実施例において、サブセット１９０の一部ではないレジスタへの書き込み試行が行われた場合、セーブされたレジスタがキャッシュから復元されるように、データ復元回路２８０もまた提供される。言い換えれば、バックアップされたレジスタはオリジナルの値にリセットされる。データ復元回路２８０及びアップデータ２６０によって、このようにロールバックを行うことが可能である。すなわち、サブセット１９０の一部ではない（すなわち、セーブされていない）レジスタへの書き込み試行を処理回路１６０が行っている旨を検出するモニタリング及び阻害回路３２０に応答して、書き込み要求はモニタリング及び阻害回路３２０によって阻害され、プログラム・カウンタ２７０はアップデータ２６０によって、トランザクションが開始した際の命令の値にリセットされ、データ復元回路２８０はレジスタのサブセット１９０の値を、トランザクションが開始したときにレジスタが有していた値に復元する。言い換えれば、データ処理装置の状態はトランザクションが開始した際の点にリセットされる。他の実施例において、サブセット１９０の一部ではないレジスタへの書き込み試行を処理回路１６０が行っている旨を検出するモニタリング及び阻害回路３２０に応答して、プログラム・カウンタはエラー処理ルーチンを参照してアップデートされ得る。そのようなエラー処理ルーチンは、サブセット１９０の一部ではないレジスタへの書き込み試行が行われる際に実行されるべき特別な振る舞いを定義してもよい。
【００４０】
図４は、一実施例に従ってトランザクションを実行する方法を流れ図形式で示す。ステップＳ２００においてトランザクションが開始する。これは処理回路１６０がトランザクション開始命令を受信する結果として生じてもよい。しかしながら、トランザクションは特定の状況が満たされた場合にハードウェアによって開始されてもよい。ステップＳ２１０において、データ・ストレージ要素のサブセットが選択される。データ・ストレージ要素は、例えば、レジスタ・ファイル１８０内のレジスタであってもよい。データ・ストレージ要素のセットが選択され得る方法は多い。これらを選択する方法の１つはヒューリスティックを利用することによるものであり、それは図５に関連して以下に説明される。しかしながら、データ・ストレージ要素が選択され、ステップＳ２２０においてバックアップが行われる。いくつかの実例において、バックアップはキャッシュ１１０にそれらのデータ・ストレージ要素の値を書き込むことによって遂行されてもよい。しかしながら、他の形態のデータ・ストレージが同様に受け入れ可能であることを理解すべきである。次いで、マスク２００はステップＳ２３０でセーブされたデータ・ストレージ要素のサブセットを反映するためにアップデートされる。次いで、トランザクションは１つ又は複数の命令を実施するプロセッサ回路によって進行する。一連の命令の最中の任意の段階において、マスクによって示されないデータ・ストレージ要素に対する書き込み又は書き込み試行が行われた場合、これはステップＳ２４０において検出され、流れは、何らかの動作が行われるステップＳ２５０へと進む。この実施例では、エラー信号が発せられる。しかしながら、他の実施例では他の応答が適切であるか又は利用されることが、理解されるであろう。例えば、ロールバックが、プログラム・カウンタ２７０を変更すること、及び／又は、以前に論じたようにデータ・ストレージ要素のサブセットの値を復元することを含んで、実行されてもよい。様々な他の変更又は是正動作が行われてもよく、それは当業者には明らかである。代替として、トランザクションの最中にデータ処理装置がマスクによって示されていないレジスタ（すなわち、セーブ又はバックアップされていないレジスタ）への書き込みを検出しない場合、トランザクションはステップＳ２６０で成功して終了する。
【００４１】
図５は、データ・ストレージ要素のサブセットの選択におけるヒューリスティックの使用を流れ図形式で示す。この実例において、データ・ストレージ要素はレジスタ・ファイル１８０の一部を形成するレジスタであると考える。プロセスはステップＳ１００において、トランザクション開始命令がプロセッサによって実行された場合に開始する。これによってｘの初期値が初期化されるか設定される。この実例において、ｘの初期値はヒューリスティックに基づく。特に、ｘは、セーブ又はバックアップされていないレジスタ・ファイル１８０においてレジスタへの書き込み要求が処理回路１６０によって発せられた結果としてエラーが返されるたびにインクリメントするカウンタに関する。ｘの値が決定されると、ｘ個のレジスタのセットがステップＳ１１０においてセーブされる。例えば、ｘ個のレジスタのセット１９０がローカル・キャッシュ１１０にセーブされてもよい。ｘ個のレジスタのセット１９０はある程度は、処理回路１６０によって実行される命令の呼び出し規約の知識を用いることによって決定される。特に、呼び出し規約が、パラメータ及び戻り結果が常にｒ０からｒ８まで昇順にレジスタを用いて送られる旨を示す場合、ヒューリスティックは、ｘ個のレジスタのセットがレジスタｒ０から始まり、追加のレジスタはｘ個のレジスタが追加されるまで連続して追加される旨を決定してもよい。他の実施例では、レジスタのセットがどのように拡張されるかを決定するように他のヒューリスティックが用いられてもよい。レジスタがセーブされる前又は後のいずれかに、バックアップされたレジスタのセットを反映するためにマスク２００がアップデートされる。ステップＳ１２０においてトランザクションが開始する。このステップの最中に、処理回路１６０によって一連の命令が実行されてもよい。しかしながら、トランザクションが記憶される（すなわち、完了する）までの任意の時間に、ステップＳ１１０においてセーブされたレジスタの値はロールバックによって復元することができる。ステップＳ１３０において、エラーが発生したか否かが決定される。特に、ステップＳ１３０は、トランザクションの最中の任意の段階に、ステップＳ１１０においてセーブされたレジスタのサブセット１９０の一部ではないレジスタ・ファイル１８０におけるレジスタのうちの１つへの書き込みの試行が、処理回路１６０によって行われるかどうかを連続的に検査する。そのようなエラーはモニタリング回路２２０又はモニタリング及び阻害回路３２０によって生成される。そのような試行がトランザクションの最中に行われない場合、トランザクションはステップＳ１６０において終了する。トランザクションの終了はコードのブロックの終わりに到達した結果として暗黙のうちに発生してもよく、又は終了トランザクション命令と共に明白に発生してもよい。トランザクションが終了する場合、新しくアップデートされた値に他のプロセッサ・コアがアクセスできるように、レジスタの値はメイン・メモリにセーブされて戻る。代替として、ステップＳ１３０においてエラーが返された場合、プロセスはステップＳ１４０に進む。ステップＳ１４０においてｘの値は１だけインクリメントされ、それによって、セーブされていなかった次に最も高いレジスタがセーブされる。
【００４２】
他の実施例においては、ｘは１より大きくインクリメントしてもよいことを理解されたい。このことは、行われるループの反復をより少なくすることができる。しかしながらそれは、現実に必要なセーブされるレジスタが多くなるというコストが生じることがある。
【００４３】
いくつかの他の実施例においては、誤ってアクセスされたレジスタの識別（identity）が記録され、次にトランザクションが開始するときにそれらのレジスタが特別にセーブされるようにしてもよい。これは、例えばステップＳ１４０でマスクを直接変更することによって遂行されてもよい。
【００４４】
いずれにしても、ステップＳ１５０において、トランザクションは停止される。この実施例において、プログラム・カウンタ２７０はアップデータ２６０によって、処理回路１６０によってトランザクション開始命令が実行された時点のプログラム・カウンタの値に、アップデートされる。さらに、レジスタのセット１９０の値は、ステップＳ１１０の以前の実行においてセーブされた値に復元される。言い換えれば、トランザクションはロールバックされ、トランザクションはその始まりから再開し、レジスタのサブセット１９０の値は、トランザクション開始命令が受信された時点のそれらレジスタによって持たれた値に復元される。次に流れはステップＳ１１０に進み、トランザクションは再び開始し、ｘ個のレジスタのセットはもう一度セーブされる。
【００４５】
したがって、全体のまとめにおいて、ｘ個のレジスタのセットの初期の見積もりが行われることが示される。次いでトランザクションは進む。しかしながら、レジスタのサブセット１９０の一部ではないレジスタ・ファイル１８０において処理回路１６０によってレジスタへの書き込み試行が行われた結果として、トランザクションが失敗した場合（すなわち、トランザクションの開始時にセーブされていないレジスタに書き込み試行が行われた場合）、エラーが返され、トランザクションはロールバックされ、ｘ個のレジスタのセットは拡張される。次いで、トランザクションは新しいレジスタのセットで再開される。この処理はステップＳ１６０においてトランザクションが成功して終了するまで進むことができる。このようにして、未知かもしれない、セーブされなければならないレジスタのセットを明白に述べる必要もなく、アーキテクチャのレジスタのセット全体をセーブする必要もない。
【００４６】
付属の図面を参照して、本発明の実例となる実施例を本明細書に詳細に記載したが、本発明はそれらの詳細な実施例に限定されるものではなく、添付の特許請求の範囲によって定義された本発明の範囲と精神から逸脱することなく、当業者によって様々な変更、追加及び変形が行われることが可能であることを理解すべきである。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴の様々な組み合わせが独立請求項の特徴に対して行われることが可能である。
【図１】
0006637450.tif 000002
【図２】
0006637450.tif 000003
【図３】
0006637450.tif 000004
【図４】
0006637450.tif 000005
【図５】
0006637450.tif 000006