JP6568575B2 - トランザクション・データ処理実行モードのための呼出しスタック維持 - Google Patents

トランザクション・データ処理実行モードのための呼出しスタック維持 Download PDF

Info

Publication number
JP6568575B2
JP6568575B2 JP2017500877A JP2017500877A JP6568575B2 JP 6568575 B2 JP6568575 B2 JP 6568575B2 JP 2017500877 A JP2017500877 A JP 2017500877A JP 2017500877 A JP2017500877 A JP 2017500877A JP 6568575 B2 JP6568575 B2 JP 6568575B2
Authority
JP
Japan
Prior art keywords
stack
execution mode
processor
data processing
speculative
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017500877A
Other languages
English (en)
Other versions
JP2017520857A5 (ja
JP2017520857A (ja
Inventor
ジェイムズ ホースネル、マシュー
ジェイムズ ホースネル、マシュー
ディーステルホースト、スティーブン
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2017520857A publication Critical patent/JP2017520857A/ja
Publication of JP2017520857A5 publication Critical patent/JP2017520857A5/ja
Application granted granted Critical
Publication of JP6568575B2 publication Critical patent/JP6568575B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1474Saving, restoring, recovering or retrying in transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/451Stack data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Description

本開示は、データ処理に関する。より詳細には、本開示は、トランザクション実行モードでのデータ処理時に使用される呼出しスタック・データ構造体の維持に関する。
データ・プロセッサは、特に、データ・プロセッサが、関数呼出しに遭遇したときに呼出しスタックに復帰アドレスをプッシュする場合、それが実行するデータ処理命令に依存する呼出しスタックを維持するように、及び、その関数が終了するときに呼出しスタックからその復帰アドレスをポップするように構成され得る。現代のデータ処理装置では、これがもたらすパフォーマンス強化により2つ以上のデータ・プロセッサ(たとえば、プロセッサ・コア)が提供されることが一般的である。しかし、これらの複数のプロセッサによって実行されるデータ処理の結果が予測可能で決定的であることを確保するために、これらの複数のプロセッサによって実行されるデータ処理に関するある一定の制約が、その場合、順守される必要がある。これのそのような1つの実例は、データ構造体がシステム内の少なくとも1つの他のデータ・プロセッサと共用される、そのデータ構造体(たとえば、システム・メモリに記憶された)にアクセスするときの、データ・プロセッサによるトランザクション実行に関する。このデータ構造体の共用は、共用されるデータ構造体に同時修正を行う異なるデータ・プロセッサによるデータ・ハザードを回避するために、ある種のプロトコルが準拠される必要があることを意味する。共用データ構造体に関するトランザクション実行が、無事に完了しない場合、データ・プロセッサが、その投機的修正を破棄し、データ処理シーケンス内の最後の知られている非投機的ポイントまで「ロール・バック」することができるように、データ処理装置内の各データ・プロセッサは、その場合、トランザクション実行モードで動作するときに(すなわち、共用データ構造体へのアクセスが試みられるが、まだ無事に完了していない間)、投機的形で呼出しスタックを更新するように構成され得る。
第1の例示的構成によれば、データ処理命令を実行するように構成されたプロセッサ回路であり、それが実行するデータ処理命令に依存する呼出しスタック・データ構造体を維持するように構成されるプロセッサ回路であり、実行されるデータ処理命令がさらなるプロセッサ回路と共用される記憶されたデータ項目にアクセスするときにトランザクション実行モードで動作するように構成されたプロセッサ回路と、呼出しスタック・データ構造体のスタック深さ指示を記憶するように構成されたトランザクション前スタック・ポインタ記憶回路とを備える装置が提供され、プロセッサ回路は、トランザクション実行モードに入る前のスタック深さ指示を記憶するように構成され、プロセッサ回路は、トランザクション実行モードで動作するときに、そのスタック深さ指示に関する呼出しスタック・データ構造体への修正のための相対的スタッキング位置を判定するように構成され、相対的スタッキング位置がスタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合にはその修正が非投機的であるという指示をその修正に関連して記憶するように、及び、相対的スタッキング位置がスタック深さ指示によって指示される位置に関して正のスタック成長方向にない場合にはその修正が投機的であるという指示をその修正に関連して記憶するように構成される。
もう1つの例示的構成によれば、データ処理命令を実行するための手段と、データ処理命令を実行するための手段が、実行されるデータ処理命令がデータ処理命令を実行するためのさらなる手段と共用される記憶されたデータ項目にアクセスするときにトランザクション実行モードで動作するように構成される、実行されるデータ処理命令に依存する呼出しスタック・データ構造体を維持するための手段と、スタック深さ指示が、データ処理命令を実行するための手段がトランザクション実行モードに入る前に記憶される、呼出しスタック・データ構造体のスタック深さ指示を記憶するための手段と、トランザクション実行モードで動作するときにそのスタック深さ指示に関する呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するための手段と、相対的スタッキング位置がスタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、指示はその修正が非投機的であると示し、相対的スタッキング位置がスタック深さ指示によって指示される位置に関して正のスタック成長方向にない場合には、指示はその修正が投機的であると示す、修正に関連して指示を記憶するための手段を備える装置が提供される。
もう1つの例示的構成によれば、データ処理命令を実行するステップと、実行されるデータ処理命令に依存する呼出しスタック・データ構造体を維持するステップと、実行されるデータ処理命令がさらなるプロセッサ・デバイスと共用される記憶されたデータ項目へのアクセスを求めるときにトランザクション実行モードに入るステップと、スタック深さ指示を記憶するステップであり、前記スタック深さ指示が、前記トランザクション実行モードに入る前に記憶される、ステップと、トランザクション実行モードで動作するときに、スタック深さインジケータに関する呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するステップと、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、その修正が非投機的であるという指示をその修正に関連して記憶し、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向にない場合には、その修正が投機的であるという指示をその修正に関連して記憶するステップとを含む、プロセッサ・デバイスにおけるデータ処理の方法が提供される。
本発明は、単に実例として、以下のような添付の図面に示されるようなその実施例を参照して、さらに説明される。
メモリ内の共用データ構造体に各々がアクセスすることができる2つのプロセッサ・コアを示す、1つの実施例におけるデータ処理装置を概略的に示す図である。 Cライクなコード(C-like code)の例示的シーケンスを示す図である。 1つの実施例において呼出しスタックへのプッシュ及び呼出しスタックからのポップに図2Aのコードにおける関数呼出し及び復帰がどのように対応するかを概略的に示す図である。 1つの実施例における図2Aのコードの呼出しスタックの内容及び成長を概略的に示す図である。 図2Aに示されるコードの実行に対応する1つの実施例における呼出しスタックの内容の進化をより詳細に概略的に示す図である。 1つの実施例における記憶ユニットを概略的に示す図である。 図4Aの記憶ユニットの例示的使用を概略的に示す図である。 図4Aの記憶ユニットの例示的使用を概略的に示す図である。 1つの実施例におけるプロセッサ・コア及び関連L1キャッシュを概略的に示す図である。 1つの実施例の方法に従って実行されるステップのシーケンスを概略的に示す図である。 トランザクション中止を監視し、それに反応するために、1つの実施例において実行されるステップのシーケンスを概略的に示す図である。
第1の例示的構成によれば、データ処理命令を実行するように構成されたプロセッサ回路であり、それが実行するデータ処理命令に依存する呼出しスタック・データ構造体を維持するように構成されたプロセッサ回路であり、実行されるデータ処理命令がさらなるプロセッサ回路と共用される記憶されたデータ項目にアクセスするときにトランザクション実行モードで動作するように構成されたプロセッサ回路と、呼出しスタック・データ構造体のスタック深さ指示を記憶するように構成されたトランザクション前スタック・ポインタ記憶回路とを備える装置が提供され、プロセッサ回路は、トランザクション実行モードに入る前にスタック深さ指示を記憶するように構成され、プロセッサ回路は、トランザクション実行モードで動作するときに、そのスタック深さ指示に関する呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するように、及び相対的スタッキング位置がスタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合にはその修正が非投機的であるという指示をその修正に関連して記憶するように、及び、相対的スタッキング位置がスタック深さ指示によって指示される位置に関して正のスタック成長方向にない場合にはその修正が投機的であるという指示をその修正に関連して記憶するように構成される。
本技法の発明者は、プロセッサがトランザクション実行モードで動作している間の呼出しスタックへの修正が投機的として印を付けられる構成は、これが、試行されたトランザクションが無事に完了しない場合にそのプロセッサがトランザクション実行モードに入ったときに有した構成に呼出しスタックの状態をプロセッサが「ロール・バック」することを確実に可能にすることになるという意味で、安全であるが、データ・プロセッサが呼出しスタックへの投機的修正に関して維持しなければならないデータ・セットの結果的なサイズが、不必要に大きくなり得ることに気が付いた。本技法は、この問題に対処し、データ・セットのサイズが低減され得ることを実現する。
それに応じて、呼出しスタックのその管理及び維持においてプロセッサによって使用されるスタック・ポインタによってポイントされるスタック深さの指示を記憶することができる、トランザクション前スタック・ポインタ記憶回路が提供され、このスタック深さ指示は、プロセッサがそのトランザクション実行モードに入る前にトランザクション前スタック・ポインタ記憶回路に記憶される。トランザクション実行モードに入ることは、たとえば、アクセスされようとする記憶されたデータ項目の識別がさらなるプロセッサ回路と共用されるものであることに基づいてそれを行う必要をプロセッサが認識することによって生じることが可能であり、又は、もう1つの実例では、プロセッサをトランザクション実行モードに切り替える明示的な「トランザクション実行モードの開始」命令の実行によって生じ得ることに留意されたい。後者の実例に関連して、「トランザクション実行モードの終了」命令もまた、トランザクション実行モードからプロセッサを切り替えるために後から使用することができる。
さらに、プロセッサは、次いで、それが呼出しスタックにその後に行う(トランザクション実行モードの間に)各修正について、トランザクション前スタック・ポイント・ストレージに記憶された指示に関してその修正がどこで生じることになるかを判定する。修正のこの相対的スタッキング位置は、具体的には、呼出しスタックのスタック成長方向に関して判定され、このスタック成長は、呼出しスタックの個々の構成、呼出しスタックがメモリ・アドレスを増やす方向に成長するか又は減らす方向に成長するかなど、に応じて「上方向」又は「下方向」と記述され得ることが、理解されよう。次いで、呼出しスタックへの修正を行うとき、プロセッサは、修正の相対的スタッキング位置が、トランザクション前スタック・ポインタ・ストレージの内容によって指示される位置に関して正のスタック成長方向にあるかを判定する。修正が、正のスタック成長方向にある相対的スタッキング位置に必要とされることが分かった場合、指示は、この修正が非投機的であることを指示し、呼出しスタックへの修正に関連して記憶される。逆に、修正の相対的スタッキング位置が、トランザクション前スタック・ポインタ・ストレージの内容によって指示される位置に関して正の成長方向にないと判定された場合、呼出しスタックへの修正に関連して記憶される指示は、その修正が投機的であることを指示するようにセットされる。修正に関連して記憶されるこれらの投機的/非投機的指示は、たとえば、ビットがセットされるかセットされないかを単に含み得ることが、理解されよう。
したがって、トランザクション実行モードにあるときに呼出しスタックへのいくつかの修正の投機的特質を正確に管理するために、プロセッサが呼出しスタックに関連してその場合に維持しなければならないデータ・セットのサイズは、低減され得る。その理由は、それらの修正のサブセットは、投機的として実際にはラベル付けされないが、そのような修正が、プロセッサがトランザクション実行モードにない(及び、ある種の投機的実行を他の方法で実行しない)ときに行われることになる形で、非投機的としてラベル付けされるためである。これは、トランザクション実行モードで試みられるトランザクションが無事に完了しない場合、プロセッサが、呼出しスタックの状態をプロセッサがそのトランザクション実行モードに入ったときにそれが有した状態にロール・バックすることによってこれに対処する、具体的にはスタック・ポインタをデータ処理のそのステージでそれが有した値にリセットする場合には、トランザクション実行モード・エントリでのそのスタック深さに関して正のスタック成長方向にある位置でトランザクション実行モードにおいて行われた呼出しスタックへの修正は、それらが、トランザクション実行モードへのエントリのそのポイント以前に書かれた呼出しスタック内容を上書きする可能性を有さなかったので、単純に破棄することができる、という認識に基づいて可能である。
トランザクション前スタック・ポイント記憶回路は、様々な方法で構成することができるが、1つの実施例では、トランザクション前スタック・ポインタ記憶回路は、呼出しスタック・データ構造体のプロセッサ回路によって使用されるスタック・ポインタのコピーを記憶するように構成される。それにより、たとえば、現在のスタック・ポインタが、プロセッサのレジスタ内の装置によって記憶される場合、そのレジスタの内容は、トランザクション前スタック・ポインタ記憶回路にコピーされ得る。実際には、いくつかの実施例では、トランザクション前スタック・ポインタ記憶回路は、それ自体、プロセッサ回路にアクセス可能なレジスタを備える。そのようなレジスタは、さらに、プロセッサ回路によって実行されるデータ処理命令にアクセスできないように構成することができる。言い換えれば、このレジスタは、プログラマに可視であることができ、その内容は外部のエージェントによって修正され得ない。
呼出しスタックへの修正は、プッシュ及びポップを含み得る。いくつかの実施例では、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向になく、修正が、呼出しスタック・データ構造体へのプッシュである場合、プッシュによって呼出しスタック・データ構造体にプッシュされるデータ項目は、投機的に書かれたものとして印を付けられる。したがって、プッシュ動作の結果を反映するために装置によって記憶される1つ又は複数のデータ項目は、投機的に書かれたものとしてそのように印を付けられる。逆に、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向になく、修正が、呼出しスタック・データ構造体からのポップである場合、ポップによって呼出しスタック・データ構造体からポップされるデータ項目は、投機的に読み取られたものとして印を付けられる。したがって、ポップが呼出しスタックから現在取り除こうとしている呼出しスタック内容の追加を反映するために装置によって前に記憶された1つ又は複数のデータ項目は、それ/それらが投機的に読み取られたことを指示するために更新される。呼出しスタックが、それが属するプロセッサ回路にのみアクセス可能である(及び、さらなるプロセッサ回路にはアクセス可能でない)場合、そのとき、このデータ項目又はこれらのデータ項目の投機的読取りは、提供される任意の整合性機構に関してさらなるプロセッサ回路に影響を及ぼし得ないので、投機的に読み取られたというそのような印は、通常は、冗長であるということにさらに留意されたい。
プロセッサ回路は、様々な記憶場所に呼出しスタック・データ構造体を維持するように構成することができる。たとえば、プロセッサ回路は、さらなるプロセッサ回路と共用されるデータ項目が記憶されるメモリに呼出しスタック・データ構造体を維持することができる。しかし、いくつかの実施例では、装置はさらに、データ処理命令を実行するときにメモリ内のプロセッサ回路によってアクセスされるデータ項目のローカル・コピーを記憶するように構成された記憶回路を備え、プロセッサ回路は、記憶回路に呼出しスタック・データ構造体を維持するように構成される。この記憶回路は、メモリ内のプロセッサ回路によってアクセスされるデータ項目のローカル・コピーを記憶するように構成される、すなわち、言い換えれば、通常は、キャッシュであり、大幅に小さい記憶容量を有するように通常は構成されることになる。本技法は、プロセッサ回路及び関連ローカル・キャッシュを備える装置に関連して、そのようなキャッシュが有し得る比較的限定された記憶容量により、特定の適用性を見出し得る。
本装置が、そのような記憶回路を備えるとき、記憶回路は、整合性制御ユニットを備えることができ、整合性制御ユニットは、非投機的として指示された記憶回路の内容が、メモリに取り出されることと、記憶回路の内容が取り出すために選択され、投機的として指示される場合にはエラー状態を生成することとを可能にするように構成される。整合性制御ユニットは、それにより、特に、記憶回路(キャッシュなど)は比較的限定された記憶容量を有し得るという事実を考慮して、どの内容が任意の所与のステージのデータ処理で記憶回路において保持されるべきかの判定を管理する。したがって、整合性制御ユニットは、投機的でないとして指示された記憶回路の内容が、有効な内容が既に記憶された所定の場所に記憶されることを必要とする(記憶回路構成により)メモリに取り出される(通常は、新しい内容が、記憶回路に記憶されることを必要とするとき)ことを可能にし得る。この既存の有効な内容が、非投機的として印を付けられた場合、次いで、整合性制御ユニットは、そのような取り出しを進められるようにし、一方で、それが投機的として印を付けられた場合、整合性制御ユニットは、エラー状態を生成する。トランザクション実行モードで動作するプロセッサに関連して、呼出しスタックへのさらなる投機的修正が記憶回路に記憶され得ることを保証することはできず、生成されたエラー状態は、次いで、トランザクションの試行の中止をもたらし得るので、これは、通常は、試行されたトランザクションをプロセッサ回路が継続するのを防ぐ開発を表すことになる。
しかし、トランザクション実行モードで試行されたトランザクションが、無事に完了した場合、対応する変更は、無事に行われた決定的変更を表すので、記憶回路の投機的内容は、非投機的に更新され得る。したがって、1つの実施例では、整合性制御ユニットは、プロセッサ回路がトランザクション実行モードを終了し、トランザクション実行モードで実行されるデータ処理命令がそれらのデータ処理動作を無事に完了したときに、投機的として指示された記憶回路の内容を非投機的として指示されるように変更するように構成される。
整合性制御ユニットは、投機的として指示された記憶回路の内容をさらなるプロセッサ回路から隠すように構成され得る。これは、装置において提供される任意の整合性機構が、記憶回路の任意の投機的内容が、そのさらなるプロセッサ回路に関して安全に処理されることをさらに確保する必要がないことを実現する。たとえば、整合性制御ユニットは、さらなるプロセッサ回路が、それが対応する内容にアクセスしていると指示する場合、そのような内容が記憶回路に現在記憶されていないという通知で応答するように構成することができる。
いくつかの実施例では、その装置はさらに、中止処理回路を備え、中止処理回路は、プロセッサ回路がトランザクション実行モードで動作しているときに、保留中のトランザクションが失敗したという指示に応答してロール・バック手続きを実行するように構成され、ロール・バック手続きは、投機的として指示された任意の修正を破棄するステップ、及び、記憶されたスタック深さ指示を使用して現在のスタック・ポインタをリセットするステップを含む。したがって、プロセッサ回路が、トランザクション実行モードを無事に終了せず、試行されたトランザクションが、再び試行されなければならない場合、プロセッサ回路によって実行されるデータ処理は、トランザクション実行モードが開始されたポイントまでロール・バック(リセット)することができ、したがって、呼出しスタックを参照するためにプロセッサ回路によって使用される現在のスタック・ポインタは、記憶されたスタック深さ指示の値、すなわち、トランザクション実行モードに入ったときにスタック・ポインタが有した値、にリセットされる。
もう1つの例示的構成によれば、データ処理命令を実行するための手段と、データ処理命令を実行するための手段が、実行されるデータ処理命令がデータ処理命令を実行するためのさらなる手段と共用される記憶されたデータ項目にアクセスするときにトランザクション実行モードで動作するように構成される、実行されるデータ処理命令に依存する呼出しスタック・データ構造体を維持するための手段と、スタック深さ指示が、データ処理命令を実行するための手段がトランザクション実行モードに入る前に記憶される、呼出しスタック・データ構造体のスタック深さ指示を記憶するための手段と、トランザクション実行モードで動作するときにそのスタック深さ指示に関する呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するための手段と、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、指示は、その修正が非投機的であると示し、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向にない場合には、指示は、その修正が投機的であると示す、修正に関連して指示を記憶するための手段を備える装置が提供される。
もう1つの例示的構成によれば、データ処理命令を実行するステップと、実行されるデータ処理命令に依存する呼出しスタック・データ構造体を維持するステップと、実行されるデータ処理命令がさらなるプロセッサ・デバイスと共用される記憶されたデータ項目へのアクセスを求めるときにトランザクション実行モードに入るステップと、スタック深さ指示を記憶するステップであり、前記スタック深さ指示が、前記トランザクション実行モードに入る前に記憶される、ステップと、トランザクション実行モードで動作するときに、スタック深さインジケータに関する呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するステップと、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、その修正が非投機的であるという指示をその修正に関連して記憶し、相対的スタッキング位置が、スタック深さ指示によって指示される位置に関して正のスタック成長方向にない場合には、その修正が投機的であるという指示をその修正に関連して記憶するステップとを含む、プロセッサ・デバイスにおけるデータ処理の方法が、提供される。
図1は、1つの実施例による2つのデータ処理装置12及び14を備えるデータ処理システム10を概略的に示す。各データ処理装置12、14は、プロセッサ・コア16、18をそれぞれ備え、したがって、データ処理システム10はマルチコア・システムであることが認識されよう。各データ処理装置12、14は、それを介して各データ処理装置12、14がメモリ22(数ある目標の中で)にアクセスすることができる同じシステム・バス20にアクセスする。処理装置12及び14の両方は、同じメモリ22にアクセスすることができるが、知られているメモリ割当て及び制御技法に従ってそれらのデータ処理装置のうちの一方のみがアクセスすることができ、他方のデータ処理装置はアクセスを阻止される(又は、少なくとも恐らくは修正を阻止される)メモリ22の領域が存在し得る。しかし、図示するように、メモリ22は、データ処理装置12及び14の両方がアクセスすることができる共用データ構造体24が記憶された少なくとも1つの領域を含む。この共用データ構造体24は、たとえば、データベースでもよいが、本技法はそのような実例に如何なる点でも限定されない。共用データ構造体24は、遥かに単純なデータ構造体、実際には原則として両方のデータ処理装置にアクセス可能な単一のデータ項目のみさえ、も表し得る。
データ処理装置12及び14の両方がメモリ22内の同じ共用データ構造体24にアクセスすることができるという事実は、両方のデータ処理装置、特にそれぞれのプロセッサ・コア、が同じ共用データ構造体24(及び、前述の共用データベース、たとえば、その共用データベース内の同じデータ項目、との関連で)にアクセスしようとするときに競合が生じないことを確保するために、データ処理装置が動作する方式にある種の制約を課す。そのような競合を避けるために、各プロセッサ・コア16、18は、共用データ構造体24へのアクセスが求められるときにトランザクション実行モードに入るように構成される。たとえば各プロセッサ・コアは、アクセスされるデータ項目が、そこへのアクセスがページ・テーブル内の情報を参照することによって、キャッシュ・コヒーレンス・プロトコル及びキャッシュに記憶された追跡構造体を参照することによって、又は他の知られている追跡及び信号伝達構造体を参照することによってもう1つのプロセッサ・コアと共用されるものであることを認識し得る。別法として又は加えて、明示的「トランザクション実行モードの開始」及び「トランザクション実行モードの終了」命令が、トランザクション実行モード及びモード外にプロセッサを切り替えるために使用され得る。そのようなトランザクション実行モードは、当業者には知られているが、本質的に、トランザクション実行モードで動作するときに、プロセッサ・コアは、メモリ22により保守的な方式でアクセスすることを余儀なくされ、その方式によれば、共用データ構造体24(又はその部分)へのアクセスが行われるとき、プロセッサ・コアは、データ構造体又はデータ項目のロックを先ず取得しようとし、次いで無事に取得しなければならず、それが取得された後は、それが一時的に属するプロセッサが、ロックが放棄されるまで、そのデータ構造体又はデータ項目への排他的アクセスを有するように、このロックは設定される。これは、様々なタイプの知られているデータ・ハザードが、次いで、2つ以上のプロセッサが同じデータ構造体又はデータ項目に一斉にアクセスする結果として生じ得ないことを確保し、全体としてのデータ処理システム10の異なる処理結果が、プロセッサ16及び18がその共用データ構造体にアクセスする(及び、特に、修正する)特定の順番の結果として生じ得る。
本明細書に記載の技法は、特に、そのトランザクション実行モードで動作するプロセッサに関連して識別される問題、及び、そのプロセッサが次いで呼出しスタックを維持する方式に関し、これは、関数呼出し及び関数復帰が、プロセッサが実行するデータ・プログラム命令のシーケンスにおいて遭遇されるときに、プロセッサが、正しいメモリ・アドレスへと正しくナビゲートする(及び、対応するプロセッサ状態情報を更新する)ことができるように、復帰アドレス(及び、恐らくは、さらなる関連プロセッサ状態情報)を記憶するためにデータ処理デバイスによって使用される、知られているデータ構造体である。プロセッサ・コア16及び18が本技法を実装するために構築される方式の1つの特徴は、各々が、それが維持している呼出しスタックを参照するためにそれが使用するスタック・ポインタ(SP:stack pointer)の、コピーがその中に記憶され得る追加のレジスタを、それぞれにその方式が行われる内部レジスタ26及び28のセット内に、備えるということである。このスタック・ポインタ・コピーが、これを目的として提供される専用レジスタ30、32に記憶されるときについてさらに詳しくは、以下の図を参照して、より詳細に以下に説明される。各データ処理装置12、14はさらに、それぞれ、レベル1(L1)キャッシュ34及び36を備える。プロセッサ・コアがメモリ22の内容にアクセスしようとするときに、システム・バス20を介する及びメモリ階層(レベル2(L2)キャッシュなど − 図示せず)のさらなるメンバを恐らくは介するメモリ22に記憶されたデータ項目へのアクセスに関連する待機時間が大幅に回避され得るように、これらのL1キャッシュの各々は、その関連プロセッサ・コアの使用のためにメモリ22の内容の小さいサブセットをキャッシュに格納するように構成される。各L1キャッシュ34、36は、キャッシュの全体的制御を維持するそれぞれの制御ユニット38、40を備え、特に、図示された実施例では、本技法をサポートするために以下の図を参照してより詳細に説明される方式で構成される。
図2Aは、図1に示されるデータ処理システム10内のプロセッサ・コア16、18のうちの1つによって実行することができるデータ処理命令のシーケンスの構造を示すいくつかのCライクなコードを示す。図2Aに示されるコードは、関数呼出しの比較的単純なセットであり、その中で関数呼出しのうちのいくつかは、互いの中に組み込まれ、たとえば、関数f2()は関数f1()の中に組み込まれ、一方、関数f4()は関数f3()の中に組み込まれ、関数f3()自体は関数f1()の中に組み込まれる。本技法の特別な意義は、そのポイントでこれらの命令を実行するプロセッサが、メモリ内の記憶されたデータ構造体又は項目へのアクセスを求めるために、そのトランザクション実行モードに入ることになる、動作tbegin()を含む関数f2()の定義である。したがって、トランザクション実行モードに入ること及びそれに続くトランザクション動作は、ライブラリ呼出し内から抽出されることに、特に留意されたい。
図2Aに示される定義されたコードを介して正しく進むために、プロセッサが、プログラマによって定義されたようなプログラムされたシーケンスの命令に正しく従うことができるように、これらの命令を実行するプロセッサは、それがプログラム命令のシーケンスにおいて遭遇する関数呼出しの復帰アドレスがそこにプッシュされ、その後に関数が完了したときにそこからポップされる、呼出しスタックを維持する。
図2Bは、プロセッサが図2Aに示されるデータ処理命令を実行するときの呼出しスタックへのプッシュ及び呼出しスタックからのポップを説明する。したがって、プロセッサが、関数f1()内の関数f2()に遭遇するとき、復帰アドレスret_f2が、呼出しスタックにプッシュされ、関数f2()の最後に、このアドレス(及び、恐らくは、いくつかの追加の構成データ)が、スタックからポップされる。関数f2()の最後のこのポップは、以下でさらに詳しく説明されるように、プロセッサがトランザクション実行モードにある間にこのポップが生じるという事実を示すtx_popとして図2Bにおいて示されることに留意されたい。同様に、プロセッサが、関数f1()内のさらに後に関数f3()に遭遇するとき、復帰アドレスret_f3が、呼出しスタックにプッシュされる(tx_push)。しかし、関数f3()内のこれに続いて、関数f4()に遭遇するとき、復帰アドレスret_f4はまた呼出しスタックにプッシュされるが、以下でさらに詳しく説明されるように、これは、図2Bにおいてnon_tx_pushとしてラベル付され、この復帰アドレスret_f4が処理される特定の方式は、復帰アドレスret_f3が処理される方式とは異なることに留意されたい。
図2Cは、図2Aに示される命令を実行するプロセッサが、それがそれらの命令を介して進むときに維持する、呼出しスタックの内容及び発展を概略的に示す。図2Cに示すように、呼出しスタックは、ページの下方への正のスタック成長方向を有するが、これは、プロセッサが呼出しスタック・データ構造体を維持するために使用するメモリ・アドレスの特定の順番付けとして解釈されるべきではない − これらは、個々の実装形態に応じて、正のスタック成長とともに増加するメモリ・アドレスに又は減少するメモリ・アドレスに同様に十分に進み得る、ことに留意されたい。本論考の特別な意義は、図2Cの右に示され、図2Aに示されるようなコード内の特定のポイントに対応する、ラベリング(1)(2)、(3)及び(4)である。これらのポイントは、コードのその特定のステージが到達される時点で呼出しスタックが有するスタック深さを示す。
プロセッサは、専用レジスタがそのために提供される、スタック・ポインタ(SP)を用いて現在のスタック深さの知識を維持する。加えて、プロセッサは、それがトランザクション実行モードに入るポイントで、すなわち、図2A及び2Bに示される図解される実例では、それがtbegin()関数に遭遇するときに、SPのコピーを記憶するように構成される。図1に示される実施例では、スタック・ポインタのこのコピーは、図2Aに示される命令を実行しているそれぞれのプロセッサ・コア16、18によって専用レジスタ30、32に記憶される。その後、プロセッサが、まだそのトランザクション実行モードにある間に、プロセッサは、それが呼出しスタックを修正するときに、スタック・ポインタのこの記憶されたコピーを参照し、呼出しスタックへの修正が、記憶されたコピーによって指示されるスタック深さ位置に関して正のスタック成長方向にあるかどうかを判定する。それに応じて、図2Cによって示される図解を参照すると、SP@tbeginとして指示される深さによって指示される深さを下回るスタック深さでの呼出しスタックへの修正は、記憶されたSP値に対して正のスタック成長方向にあると判定されることになり、一方、このポイントを上回るスタック深さ位置での呼出しスタックへの修正は、正のスタック成長方向にない。図2Aに示される命令を実行するプロセッサは、関連L1キャッシュを提供され、その制御ユニットは、呼出しスタック・データ構造体の部分を形成する、及び、その呼出しスタックへの修正(プロセッサがそのトランザクション実行モードにある間)がSPコピー・レジスタに記憶されたスタック・ポインタ値SP@tbeginに関して正のスタック成長方向にあるスタック深さで生じたかどうかに応じて非投機的又は投機的のいずれかとしてL1キャッシュに記憶される、データ項目にラベルを付けるように構成される。修正が、そのSPコピー値に対して正のスタック成長方向で行われた場合、キャッシュ制御ユニットは、L1キャッシュ内の対応するエントリに非投機的としてラベルを付け、一方、修正が、そのSPコピー値に対して正のスタック成長方向にない場合、対応するデータ項目は、投機的としてラベル付けされる。
これは、図2Bにおいて、「tx_zone」及び「non_tx_zone」にプロセッサのトランザクション実行モードに対応する図の部分を分ける破線による図の垂直の分割によって示される。そのように、「tx_zone」で行われる呼出しスタックへの修正は、投機的としてラベル付けされ、一方、「non_tx_zone」における呼出しスタックへの修正は、非投機的としてラベル付けされる。これは、図2Cを参照してさらに理解することができ、そこで、関数f2()の復帰アドレスret_f2は、関数f3()の復帰アドレスret_f3によって原則として上書きされることになることが理解されよう。しかし、プロセッサがそのトランザクション実行モードで動作するときに実行しようとするトランザクション実行は、無事に完了しないことがあるので、もう1度そのトランザクション実行を試行するために、プロセッサは、それがtbegin()命令に遭遇したときにそれが有したその実行状態にロール・バックする必要があり得ることを、本技法は認識する。プロセッサがそのトランザクション実行モードにある間に試行するトランザクションは、いくつかの理由で、たとえば、動的にトリガされる、たとえば別のプロセッサが所望のデータ項目に現在アクセスしているため、又は手動で、たとえば、図2Aにおいて関数f1()内に示されるtabort()呼出しにより、無事に完了しないことがあることに留意されたい。f3()復帰アドレスの追加を含んだ呼出しスタックの修正が、L1キャッシュ内の対応するエントリを決定的に修正することを可能にされた場合、そのとき、この修正は、永続的であったことになり、対応するデータ項目はまた、その間にメモリに取り出された可能性があり、プロセッサは、新しい試行(トランザクション実行モードで)をトリガして必要とされるトランザクションを実行するためのtbegin()関数を再実行するために正しいステータスに呼出しスタックの状態をロール・バックする方法を有さないことになる。これは、関数f2()の復帰アドレスは関数f3()の復帰アドレスによって書き換えられるので、図2Cの図解におけるポイントSP@tbegin(1)より上の呼出しスタックの内容は、その場合、関数f3()の復帰アドレスを含むが、関数f2()の復帰アドレスを含まないことになるためである。したがって、プロセッサは関数f2()から後で正しく復帰することが不可能となり、これは必要な復帰アドレスがもはや使用可能でなくなっているからである。
本技法は、プロセッサがトランザクション実行モードにあるときに行われる呼出しスタック・データ構造体への修正が、それらが投機的としてラベル付けされるべきか又は非投機的としてラベル付けされるべきかを判定するために、記憶された値SP@tbeginと比較されることを実現することによって、この問題に対処する。しかし、これは、「tx_zone」における呼出しスタックへの修正の投機的特質、すなわち図2Cに示されるハッチングを掛けた上部の領域、が正しく処理されるが、非txゾーン内の呼出しスタック修正の処理、すなわち図2Cの下部に示される明るい網掛けの領域、にも関連することを確保するための唯一の技法ではないことを理解されたい。この後者の態様は、これはまた、トランザクション実行モードの完了の不成功の場合に、すなわち試行されたトランザクションが無事に完了しないときに、プロセッサがtbegin()呼出しのポイントで必要とされる状態に正しくロール・バックすることも可能であることを確保することになるので、プロセッサがそのトランザクション実行モードにある間に呼出しスタックへのすべての修正を投機的として単にラベル付けさせることが可能であることになる(そして、実際にこれは先行技術で取られる手法である)ため、特別な意義をここで有する。しかし、データ処理命令の比較的単純なセットのみが図2Aの実例では示され、図2Cに示される対応する呼出しスタックの比較的単純な及び限定された進化を結果としてもたらすが、プロセッサがそのトランザクション実行モードにある間に実行することができるデータ処理命令及び行われる実際のさらなる関数呼出しの数の制限は原則として存在しない。呼出しスタックへのこれらの対応する修正のすべてが、投機的として単純にラベル付けされる場合、そのとき、呼出しスタックへの投機的(トランザクション実行モードにある)修正及び非投機的(トランザクション実行モードにはない)修正の両方のコピーは、維持される必要があることになり、トランザクション実行モードに関連するかなり大きいライトセットサイズを潜在的にもたらすので、呼出しスタックの管理は、かなり手間のかかるものになり得る。これは、データ記憶容量が限定される場合、任意のデータ処理システムにおいて重大であり得るが、記憶容量が通常は、もちろん、メイン・メモリにおいて使用可能なものよりも遥かに限定される、その関連L1キャッシュ内で第1のインスタンスにおいて呼出しスタック・データ構造体がプロセッサによって維持される図1に示されるものなどの実施例において特別な意義を有し得る。したがって、本技法によれば、プロセッサがそのトランザクション実行モードにあるにもかかわらず、プロセッサ回路が維持する呼出しスタック・データ構造体への修正のいくつかは、非投機的としてラベル付けされる。これは、キャッシュにおけるこれらのエントリが、試行されたトランザクションが無事に完了しないときにその実行状態を正しくロール・バックするためのプロセッサの能力に影響を及ぼすことなくメイン・メモリに無事に取り戻され得るという結果を有する。さらに、図1に示される実施例における一方のプロセッサ・コアは、メモリ22に記憶されたコミットされたデータ項目によって表されるように他方のプロセッサ・コアの呼出しスタックを見ることを許され得るが、そのプロセッサ・コアに関連するL1キャッシュの投機的ラベル付けされた内容を見ることが許されない場合、そのとき、データ処理システム10内で実行されるトランザクションの正しい原子性(atomicity)が維持される。トランザクション実行が無事完了したとき、呼出しスタック全体は、非投機的(非トランザクション)としてラベル付けされるように構成され、これらのキャッシュされたデータ項目は、次いで、メモリ22に自由に取り出され得ることに留意されたい。しかし、前述のように、動的に又は手動でトリガされる、たとえば、f4()内のtabort()呼出しによる、中止の場合、トランザクションにおいて投機的に修正されたすべてのアーキテクチャの状態及びメモリ(それが進行した範囲で)は、tbegin()への呼出しで存在した状態にロール・バックされ、そのようなシナリオでは、スタックを指し示すレジスタ26、28のセット内の任意のレジスタは、それらの以前の値にロール・バックすることになり、スタック・ポインタは、図2A及び2Cに示されるポイント(1)で取られるスナップショットの値にリセットされることになる。
図3は、図2Aに示されるデータ処理命令のシーケンスを実行するプロセッサ回路によって維持される呼出しスタックの進化のより明示的な表現を示す。ステージAは、関数f1()に遭遇するポイントでの呼出しスタックを表し、スタック・ポインタSPは、そのとき、復帰アドレスret_f1が現在のスタック深さを表すことを指示する。その後、ステージBで、f2()関数に遭遇するとき、復帰アドレスret_f2は、スタックにプッシュされ、そして、スタック・ポインタは、現在のスタック深さがこの復帰アドレスの位置に対応することを指示する。ステージCでtbegin()呼出しに遭遇するとき、スタック・ポインタは、いくらかの追加の構成情報が、tbegin()命令自体に遭遇する前に、呼出しスタックに追加されたことにより、正のスタック成長方向にわずかに移動していることに留意されたい。これは、その場合、トランザクション実行モードに入ることに対応するそのSPコピー・レジスタ(30又は32)に装置が記憶するスタック深さ(SP値)である。その後、プロセッサは(主に、そのL1キャッシュの制御ユニットへのこのタスクの委任によって)、これらが投機的としてラベル付けされるべきか非投機的としてラベル付けされるべきかを判定するために、それが呼出しスタックに行うさらなる修正をそのSPコピー・レジスタに記憶されたスタック・ポインタの値と比較する。したがって、図3のステージDで、ret_f2命令に遭遇するとき、関数f1()の復帰アドレスret_f1を指示するために現在のスタック・ポインタを返すための呼出しスタック内容のポップは、投機的としてラベル付けされる。しかし、図4A〜4Cを参照して以下でさらに詳しく論じるように、これは、プロセッサについての投機的読取りを表すのみなので、呼出しスタックへのポップ修正を投機的としてラベル付けする必要はないことがあり、そして、別のプロセッサが、図示された命令を実行するプロセッサ・コアに関連するキャッシュの内容にアクセスすることができないこともまた確保される限り、キャッシュ内のこのエントリが投機的に読み取られたもの(及びまた投機的に書かれたものではない)として単にラベル付けされる限り、それは、必要とされるトランザクションの原子性を脅かすことなくメイン・メモリに実際に安全に取り出され得る。投機的書込みは、tbegin()で取られる記憶されたSPスナップショットに関して正のスタック成長方向にない呼出しスタック内の相対的スタッキング位置において行われるので、投機的書込みは、実際には、f3()関数に遭遇する図3のステージEで行われる。したがって、復帰アドレスret_f3を保持するキャッシュにおいて行われるエントリは、投機的としてラベル付けされる。これに反して、ステージFでは、f4()への呼出しに遭遇するとき、f4()復帰アドレスret_f4を呼出しスタックにプッシュするために必要とされる修正は、SPスナップショットに関して正のスタック成長方向にあるものとして識別され、それに応じて、この復帰アドレス値を保持するキャッシュにおいて行われるエントリは、非投機的としてラベル付けされる。その後、ステージGで、tabort()呼出しに遭遇するとき、キャッシュの任意の投機的ラベル付けされた内容が、破棄され、非投機的にラベル付けされた内容のみが、保持され(すなわち、実際には、キャッシュ内の任意の投機的にラベル付けされたキャッシュ・ラインは、無効なものとして印を付けられる)、それにより、呼出しスタック・データ構造体は、潜在的にはL1キャッシュに記憶された内容の組合せから、そしてさらに、何らかのキャッシュ内容がその間に取り出され得る先の、メイン・メモリ22などからの、メモリ階層に、tbegin()呼出しに遭遇したときのステージCでのそれの状態に再構築される。
図4は、1つの実施例におけるキャッシュ50を概略的に示し、図1に示されるL1キャッシュ34又は36はそれに従って構成することができる。L1キャッシュ50は、制御ユニット52と、そこにデータが記憶され得るいくつかのキャッシュ・ライン54とを備える。制御ユニット52は、キャッシュ50の全体的制御を維持し、キャッシュ・ライン54への更新を管理する。それはさらに、キャッシュ50が属するデータ処理システム内にある残りのメモリ・システムに関して正しい整合性制御をさらに維持する。したがって、キャッシュ50は、プロセッサと残りのメモリ階層との間に位置付けられ、このメモリ階層は、潜在的に、図1に示されるものなどのメイン・メモリ22のみを備えるが、さらなるキャッシュ・レベルもまた備え得る。キャッシュ・ライン54は、このデータ・ラインの内容において「修正済み」(MO:modified)としてラベル付けされた復帰アドレスret_f2の記憶に対応する例示的エントリとともに示され、このデータがプロセッサによって修正済みであり、残りのメモリ階層において、特にこのデータ・ラインが取り出される場合にはメイン・メモリ22において、最終的に更新されるべきであることを指示する。ret_f2のこのデータ・ラインは、これはプロセッサがそのトランザクション実行モードに入る前に起こった呼出しスタックへの修正を表すため、投機的に読み取られた(SR:speculatively read)又は投機的に書かれた(SW:speculatively written)としてラベル付けされないことに留意されたい。
図4Bは、復帰アドレスret_f2によって投入された後に、プロセッサが関数呼出しf3()に遭遇し、それにより、復帰アドレスret_f3を呼出しスタックにプッシュする、図4Aに示される例示的キャッシュ・ライン・エントリのその後の進化を示す。偶然に、この図示された実例では、復帰アドレスret_f2及びret_f3のメモリ・アドレスは、それらが両方とも同じキャッシュ・ライン内のキャッシュ50によって記憶されるのに十分な程類似している。したがって、ret_f3が、プロセッサによって呼出しスタックにプッシュされるとき、キャッシュ50のキャッシュ制御ユニット52は、この復帰アドレスret_f3にそのキャッシュ・ラインの現在の内容(すなわち、復帰アドレスret_f2)を取り出させる。内容ret_f2を有する、このキャッシュ・ラインは、内容ret_f2とともに、投機的に書かれた(SW)ものとしてラベル付けされないので、それは、メモリ階層に、たとえば、先ずL2キャッシュに、そして潜在的には次いでさらにメイン・メモリ22に、取り出され得る。プロセッサは現在トランザクション実行モードにあり、この修正は、プロセッサがtbegin()呼出しに遭遇した時点で取られたスタック・ポインタSPのスナップショットに関して正のスタック成長方向で起こらなかったので、復帰アドレスret_f3は、次いで、このキャッシュ・ラインを投入し、「MO」ステータス「修正済み」で同様に印を付けられるが、さらに投機的に書かれた(SW)としてラベル付けされる。その後、トランザクションが中止する(命令tabort()に遭遇するプロセッサによって)とき、このキャッシュ・ラインは、投機的に書かれたとしてラベル付けされるので、その内容は無効にされる(ステータス「I」)。
図4Bに示されるキャッシュ・ライン内容の進化を図4Cに示されるそれと比較すると、図4Cは、ステージDが図3において到達されるキャッシュ動作を示し、そこでは、関数f2()の復帰アドレスret_f2が呼出しスタックからポップされ、さらに、呼出しスタックへのこの修正は、tbegin()でのSPのスナップショットに関して正のスタック成長方向において起こらず、したがって(プロセッサはトランザクション実行モードにあるので)、これは、投機的修正として処理される。したがって、このキャッシュ・ラインの内容がプロセッサに返されるとき、キャッシュ・ラインは、次いで、投機的に読み取られた(SR)としてラベル付けされる。しかし、前述のように、投機的に読み取られたとしてのキャッシュ内のキャッシュ・ラインのラベル付けは、キャッシュ50の制御ユニット52が、キャッシュの内容(又は少なくとも修正済み内容)がデータ処理システム内の別のプロセッサによって読み取ることができないことを確保する限り、原則として必要とされない。これは、たとえば、制御ユニット52が、必要とされるシステム全体のメモリ整合性を強化する際に、そのような内容がキャッシュ50内の任意の有効な状態において現在存在することを否定することによって、このメモリ・アドレスに関連する整合性プロトコルの部分として受信される任意の問合せに単純に応答する、構成によって強化され得る。
図5は、プロセッサ・コア60と、図1において示される対応する構成要素がそれに従って構成され得る構成を示すL1キャッシュ62とを概略的に示す。L1キャッシュ62のキャッシュ制御64は、プロセッサ・コア60から様々な情報を受信するように及びプロセッサ・コアに何らかの情報を返すように構成される。具体的には、プロセッサ・コアが現在そのトランザクション実行モード(TEM:transactional execution mode)にあるかどうかに応じて、キャッシュ制御64がL1キャッシュ62の内容の更新を適切に管理することができるように、キャッシュ制御64は、それが現在動作している処理モードのプロセッサ・コアから指示を受信する。これは、連続的信号である必要はないが、プロセッサ・コア60は、それが実行モードを変更するときにキャッシュ制御ユニット64に単純に指示することができる。プロセッサ・コア60はまた、キャッシュ・コントローラ60にトランザクション中止を指示すること(たとえば、tabort()呼出しがプロセッサ・コアによって遭遇されるときに)、及び、たとえば、投機的に書かれた(SW)として印を付けられたL1キャッシュ62の内容が、取り出すために選択されるときに(それの対応するメモリ・アドレスに基づいて)、キャッシュ制御ユニット64から中止指示を受信することの両方を行うように構成された、中止処理ユニット66を備える。残りのメモリ階層へのこの内容の取り出しは、データ処理システムの別の部分によって読み取られるようにそれを公開する可能性があり、これは、試行されたトランザクションの原子性を潜在的に脅かし得るので、これは、試行されたトランザクションが中止されるべき状況である。別法として、この問題はまた、投機的に書かれたものとしてのこのキャッシュ・エントリのラベル付けが、それがメモリ階層の別の部分に取り出されるときに維持されることを確保することによって、対処され得るが、これは、投機的に書かれたものとして印を付けられたキャッシュ・エントリの取り出しが試行されるときにトランザクションを中止する比較的単純な機構によって回避することができる構成のさらなる複雑さを招き得る。トランザクション中止の原因が何であれ、中止処理ユニット(ここでは専用回路として具体化されるが、プロセッサ・コア60が実行するデータ処理命令内にプログラムされた専用中止処理ルーチンでもよい)は、次いで、図3のステージCでの、すなわちtbegin()呼出しに遭遇したときの、それらの状態へのレジスタ68の内容のロール・バックをもたらす。具体的には、本技法に関連して、これは、tbegin()が最初に遭遇され、SPコピー・レジスタ72に記憶されたときに取られたスタック・ポインタのスナップショットで現在のスタック・ポインタ・レジスタ70の内容を置き換える中止処理ユニット66を含む。
図6は、1つの実施例の方法において取られるステップのシーケンスを概略的に示す。その流れは、ステップ100で開始すると考えることができ、そこで、プロセッサは、それの命令シーケンスを実行する。ステップ102で、トランザクション開始命令(たとえば、tbegin())に遭遇するかが、判定される。遭遇しない場合、流れは、単純に、ステップ100に折り返して戻る。そのようなトランザクション開始命令に遭遇した後は、次いで、流れは、ステップ104に進み、そこで、スタック・ポインタの現在の値が、専用スタック・ポインタ・コピー・レジスタに記憶され、その後、ステップ106で、プロセッサは、そのトランザクション実行モードに入る。ステップ108に続いて、プロセッサは、メモリ内の共用データ項目又は構造体へのそれが求めるトランザクション・アクセスの開始を含めて、その命令シーケンス実行を継続する。ステップ110で、データ処理命令のシーケンスの継続の部分として呼出しスタックへの修正が必要とされるかが判定される。必要とされない場合、次いで、流れは、単純に、ステップ108に折り返して戻る。しかし、そのような修正が必要とされるとき、次いで、ステップ112で、呼出しスタックへのこの修正が、専用SPコピー・レジスタに記憶されたスタック・ポインタ・コピーによって指示されるスタック深さに対して正の成長方向で行われるべきかが判定される。この修正が、この正の成長方向にある場合、流れは、ステップ114に進み、そこで、呼出しスタック・データ構造体への修正が行われ、キャッシュ内の1つ又は複数の任意の対応するエントリを非投機的とする。別法として、呼出しスタック・データ構造体に必要とされる修正が、ステップ112で、スタック・ポインタ・コピーによって指示されるスタック深さに対して正の成長方向にないと判定された場合、流れはステップ116に進み、そこで、呼出しスタック・データ構造体への修正が行われ、そして、キャッシュ内の1つ又は複数の任意の対応するエントリが、投機的として印を付けられる。ステップ114又はステップ116のいずれかの後、流れはステップ118に進み、そこで、試行されたトランザクションが無事に完了したかが判定される。無事完了しなかった限り、次いで、流れは、トランザクション実行モードでの継続する実行を進めるためにステップ108に戻る。しかし、試行されたトランザクションが、無事に完了した後は、次いで、流れはステップ120に進み、そこで、プロセッサは、そのトランザクション実行モードを終了し、そして、ステップ112で、任意の投機的にラベル付けされたキャッシュ内容が、更新されて、非投機的として印を付けられる。次いで、流れは、ステップ100に戻る。
図6に示されるステップのシーケンスは、試行されたトランザクションが中止されるときに取られるステップを含まず、そのようなステップが、図7に示され、そこでは、プロセッサがそのトランザクション実行モードにある間に、これらのステップは、図6に示されるそれらに並行して実行すると考えられ得ることに留意されたい。そのトランザクション実行モードにあるプロセッサによる命令の実行は、ステップ130によって表される。ステップ132で、トランザクション中止が生じたかが継続的にチェックされる。それが生じない限り、流れは、単純に、ステップ130に折り返して戻る。しかし、トランザクションが中止したとき、次いで、流れはステップ134に進み、そこで、投機的として印を付けられた任意のキャッシュ・コンタクトは、無効にされる。さらに、ステップ136で、現在のスタック・ポインタが、プロセッサがそのトランザクション実行モードに入った時点で取られたスタックされたポインタの記憶されたコピーから更新され(すなたち、それにロール・バックされ)、そして、ステップ138で、プロセッサの状態をそれがそのトランザクション実行モードに入ったときにそれが有したものに戻すために必要とされるレジスタの任意の他の内容(現在のスタック・ポインタ・レジスタ以外)もまた、復元される。流れは、次いで、プロセッサがトランザクション実行モードに留まり、トランザクションをもう1度試行するためのステップ130に戻る。
特定の実施例が、本明細書において説明されたが、本発明は、それに限定されず、それへの多数の修正及び追加が、本発明の範囲内で行われ得ることが、理解されよう。たとえば、以下の従属請求項の特徴の様々な組合せが、本発明の範囲を逸脱することなしに独立請求項の特徴とともに行われ得る。

Claims (13)

  1. データ処理命令を実行するように構成されたプロセッサ回路であり、前記プロセッサ回路が、前記プロセッサ回路が実行する前記データ処理命令に依存する呼出しスタック・データ構造体を維持するように構成され、前記プロセッサ回路が、実行される前記データ処理命令がさらなるプロセッサ回路と共用される記憶されたデータ項目にアクセスするときにトランザクション実行モードで動作するように構成される、プロセッサ回路と、
    前記呼出しスタック・データ構造体のスタック深さ指示を記憶するように構成されたトランザクション前スタック・ポインタ記憶回路であり、前記プロセッサ回路が、前記トランザクション実行モードに入る前の前記スタック深さ指示を記憶するように構成される、トランザクション前スタック・ポインタ記憶回路と
    を備え、
    前記プロセッサ回路が、前記トランザクション実行モードで動作するときに、前記スタック深さ指示に関する前記呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するように、そして、
    前記相対的スタッキング位置が、前記スタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、前記修正が非投機的であるという指示を前記修正に関連して記憶するように、そして、
    前記相対的スタッキング位置が、前記スタック深さ指示によって指示される前記位置に関して正のスタック成長方向にない場合には、前記修正が投機的であるという指示を前記修正に関連して記憶するように構成される、装置。
  2. 前記トランザクション前スタック・ポインタ記憶回路が、前記呼出しスタック・データ構造体の前記プロセッサ回路によって使用されるスタック・ポインタのコピーを記憶するように構成された、請求項1に記載の装置。
  3. 前記トランザクション前スタック・ポインタ記憶回路が、前記プロセッサ回路にアクセス可能なレジスタを備える、請求項1又は2に記載の装置。
  4. 前記レジスタが、前記プロセッサ回路によって実行されるデータ処理命令にアクセス不能に構成される、請求項3に記載の装置。
  5. 前記相対的スタッキング位置が、前記スタック深さ指示によって指示される前記位置に対して前記正のスタック成長方向になく、前記修正が、前記呼出しスタック・データ構造体へのプッシュである場合に、前記プッシュによって前記呼出しスタック・データ構造体にプッシュされるデータ項目が、投機的に書かれたものとして印を付けられる、請求項1から4までのいずれか一項に記載の装置。
  6. 前記相対的スタッキング位置が、前記スタック深さ指示によって指示される前記位置に関して正のスタック成長方向になく、前記修正が、前記呼出しスタック・データ構造体からのポップである場合に、前記ポップによって前記呼出しスタック・データ構造体からポップされるデータ項目が、投機的に読み取られたものとして印を付けられる、請求項1から4までのいずれか一項に記載の装置。
  7. 前記データ処理命令を実行するときにメモリ内の前記プロセッサ回路によってアクセスされるデータ項目のローカル・コピーを記憶するように構成された記憶回路をさらに備え、前記プロセッサ回路が、前記記憶回路に前記呼出しスタック・データ構造体を維持するように構成された、請求項1から6までのいずれか一項に記載の装置。
  8. 前記記憶回路が、整合性制御ユニットを備え、前記整合性制御ユニットが、非投機的として指示された前記記憶回路の内容が前記メモリに取り出されることを可能にするように、及び、前記記憶回路の内容が取り出すために選択され、投機的として指示される場合に、エラー状態を生成するように構成された、請求項7に記載の装置。
  9. 前記整合性制御ユニットが、前記プロセッサ回路が、前記トランザクション実行モードを終了し、前記トランザクション実行モードで実行される前記データ処理命令がそれらのデータ処理動作を無事に完了したときに、投機的として指示された前記記憶回路の内容を非投機的として指示されるように変更するように構成された、請求項8に記載の装置。
  10. 前記整合性制御ユニットが、投機的として指示された前記記憶回路の内容を前記さらなるプロセッサ回路から隠すように構成された、請求項から9までのいずれか一項に記載の装置。
  11. 中止処理回路をさらに備え、前記中止処理回路が、前記プロセッサ回路が前記トランザクション実行モードで動作しているときに、保留中のトランザクションが失敗したという指示に応答してロール・バック手続きを実行するように構成され、
    前記ロール・バック手続きが、投機的として指示された任意の修正を破棄するステップ、及び、前記記憶されたスタック深さ指示を使用して現在のスタック・ポインタをリセットするステップを含む、請求項1から10までのいずれか一項に記載の装置。
  12. データ処理命令を実行するための手段と、
    実行される前記データ処理命令に依存する呼出しスタック・データ構造体を維持するための手段であり、前記データ処理命令を実行するための手段が、実行される前記データ処理命令がデータ処理命令を実行するためのさらなる手段と共用される記憶されたデータ項目にアクセスするときにトランザクション実行モードで動作するように構成された、手段と、
    前記呼出しスタック・データ構造体のスタック深さ指示を記憶するための手段であり、前記スタック深さ指示が、前記データ処理命令を実行するための手段が前記トランザクション実行モードに入る前に記憶される、手段と、
    前記トランザクション実行モードで動作するときに前記スタック深さ指示に関する前記呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するための手段と、
    前記修正に関連して指示を記憶するための手段であり、前記相対的スタッキング位置が前記スタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、前記指示は、前記修正が非投機的であると示し、
    前記相対的スタッキング位置が前記スタック深さ指示によって指示される前記位置に関して正のスタック成長方向にない場合には、前記指示は、前記修正が投機的であると示す、手段と
    を備える、装置。
  13. プロセッサ・デバイスにおけるデータ処理の方法であって、
    データ処理命令を実行するステップと、
    実行される前記データ処理命令に依存する呼出しスタック・データ構造体を維持するステップと、
    実行される前記データ処理命令がさらなるプロセッサ・デバイスと共用される記憶されたデータ項目へのアクセスを求めるときにトランザクション実行モードに入るステップと、
    スタック深さ指示を記憶するステップであり、前記スタック深さ指示が、前記トランザクション実行モードに入る前に記憶される、ステップと、
    前記トランザクション実行モードで動作するときに、前記スタック深さインジケータに関する前記呼出しスタック・データ構造体への修正の相対的スタッキング位置を判定するステップと、
    前記相対的スタッキング位置が前記スタック深さ指示によって指示される位置に関して正のスタック成長方向にある場合には、前記修正が非投機的であるという指示を前記修正に関連して記憶するステップと、
    前記相対的スタッキング位置が前記スタック深さ指示によって指示される前記位置に関して正のスタック成長方向にない場合には、前記修正が投機的であるという指示を前記修正に関連して記憶するステップと
    を含む、方法。
JP2017500877A 2014-07-15 2015-06-09 トランザクション・データ処理実行モードのための呼出しスタック維持 Active JP6568575B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1412534.8A GB2528270A (en) 2014-07-15 2014-07-15 Call stack maintenance for a transactional data processing execution mode
GB1412534.8 2014-07-15
PCT/GB2015/051675 WO2016009168A1 (en) 2014-07-15 2015-06-09 Call stack maintenance for a transactional data processing execution mode

Publications (3)

Publication Number Publication Date
JP2017520857A JP2017520857A (ja) 2017-07-27
JP2017520857A5 JP2017520857A5 (ja) 2018-07-12
JP6568575B2 true JP6568575B2 (ja) 2019-08-28

Family

ID=51454144

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017500877A Active JP6568575B2 (ja) 2014-07-15 2015-06-09 トランザクション・データ処理実行モードのための呼出しスタック維持

Country Status (8)

Country Link
US (1) US10002020B2 (ja)
EP (1) EP3170075B1 (ja)
JP (1) JP6568575B2 (ja)
KR (1) KR102284957B1 (ja)
CN (1) CN106663026B (ja)
GB (1) GB2528270A (ja)
IL (1) IL249697B (ja)
WO (1) WO2016009168A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
CN107291480B (zh) * 2017-08-15 2020-12-15 中国农业银行股份有限公司 一种函数调用方法及装置
US10572259B2 (en) * 2018-01-22 2020-02-25 Arm Limited Hints in a data processing apparatus
US10698724B2 (en) * 2018-04-10 2020-06-30 Osisoft, Llc Managing shared resources in a distributed computing system
US11231932B2 (en) * 2019-03-05 2022-01-25 Arm Limited Transactional recovery storage for branch history and return addresses to partially or fully restore the return stack and branch history register on transaction aborts
US11334495B2 (en) * 2019-08-23 2022-05-17 Arm Limited Cache eviction
US11687519B2 (en) 2021-08-11 2023-06-27 T-Mobile Usa, Inc. Ensuring availability and integrity of a database across geographical regions

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7840785B1 (en) * 2004-09-14 2010-11-23 Azul Systems, Inc. Transparent concurrent atomic execution
US7472261B2 (en) * 2005-11-08 2008-12-30 International Business Machines Corporation Method for performing externally assisted calls in a heterogeneous processing complex
US20080016325A1 (en) * 2006-07-12 2008-01-17 Laudon James P Using windowed register file to checkpoint register state
US7860930B2 (en) * 2006-12-19 2010-12-28 International Business Machines Corporation Communication between host systems using a transaction protocol and shared memories
US9009452B2 (en) * 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US8621183B2 (en) * 2008-07-28 2013-12-31 Advanced Micro Devices, Inc. Processor with support for nested speculative sections with different transactional modes
US9880848B2 (en) * 2010-06-11 2018-01-30 Advanced Micro Devices, Inc. Processor support for hardware transactional memory
US9274919B2 (en) * 2011-04-29 2016-03-01 Dynatrace Software Gmbh Transaction tracing mechanism of distributed heterogenous transactions having instrumented byte code with constant memory consumption and independent of instrumented method call depth
US9152509B2 (en) * 2011-12-13 2015-10-06 Advanced Micro Devices, Inc. Transactional memory conflict management

Also Published As

Publication number Publication date
US20170161095A1 (en) 2017-06-08
EP3170075B1 (en) 2021-01-13
IL249697A0 (en) 2017-02-28
GB2528270A (en) 2016-01-20
CN106663026B (zh) 2021-01-12
KR20170031708A (ko) 2017-03-21
IL249697B (en) 2020-01-30
GB201412534D0 (en) 2014-08-27
CN106663026A (zh) 2017-05-10
EP3170075A1 (en) 2017-05-24
JP2017520857A (ja) 2017-07-27
US10002020B2 (en) 2018-06-19
WO2016009168A1 (en) 2016-01-21
KR102284957B1 (ko) 2021-08-04

Similar Documents

Publication Publication Date Title
JP6568575B2 (ja) トランザクション・データ処理実行モードのための呼出しスタック維持
JP2017520857A5 (ja)
EP1966697B1 (en) Software assisted nested hardware transactions
US20180011748A1 (en) Post-retire scheme for tracking tentative accesses during transactional execution
US8190859B2 (en) Critical section detection and prediction mechanism for hardware lock elision
US8200909B2 (en) Hardware acceleration of a write-buffering software transactional memory
US10445238B1 (en) Robust transactional memory
EP3516502B1 (en) Handling of inter-element address hazards for vector instructions
US8601240B2 (en) Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
CN113505088A (zh) 在使用带锁定和未锁定的非易失存储器的共享存储器中的硬件事务存储的一致性协议
TWI801603B (zh) 處理獨佔式載入指令的資料處理設備、方法及電腦程式
EP3177993B1 (en) Write operations to non-volatile memory
US20100205609A1 (en) Using time stamps to facilitate load reordering
EP2104891A2 (en) Facilitating efficient transactional memory and atomic operations via cache line marking
US9400655B2 (en) Technique for freeing renamed registers
US20190213009A1 (en) Checkpointing of architectural state for in order processing circuitry
US20150205721A1 (en) Handling Reads Following Transactional Writes during Transactions in a Computing Device
CN112005222B (zh) 鲁棒的事务性存储器

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180601

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180601

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190308

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190527

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190709

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190802

R150 Certificate of patent or registration of utility model

Ref document number: 6568575

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250