(57)【要約】マルチプロセッシングコアシステム内のプロセッシングコアは、命令シーケンスを、単一のアトミックメモリトランザクションとして実行するように構成されている。プロセッシングコアは、命令シーケンスが、シーケンスにおけるどの命令も、共有メモリにアクセスするようにプロセッシングコアに命令しないことを含む１つ以上のアトミック基準の組を満たすことを検証する。プロセッシングコアは、シーケンスを検証した後に共有メモリデータを記憶するソースキャッシュラインをロックすること、検証された命令シーケンスを実行すること、シーケンスの結果をソースキャッシュラインに記憶することおよびソースキャッシュラインをロック解除すること等により、シーケンスを単一のアトミックメモリトランザクションとして実行する。【選択図】図２
2013546088.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッシングコアシステム内のプロセッシングコアを備える装置であって、前記プロセッシングコアは、
指定された命令シーケンスが、前記シーケンスにおけるどの命令も、共有メモリにアクセスするように前記プロセッシングコアに命令しないことを含む１つ以上のアトミック性基準の組を満たすことを検証するように構成されており、
前記検証されたシーケンスは、アトミックメモリトランザクションとして前記マルチプロセッシングコアシステムによって実行可能である、装置。
【請求項２】
前記検証されたシーケンスをアトミックメモリトランザクションとして実行することは、
ソースキャッシュラインからのメモリデータを、ターゲットレジスタに記憶することと、
前記命令シーケンスを実行して、前記ターゲットレジスタに記憶された前記メモリデータを変更することと、
前記ターゲットレジスタからの値を、前記ソースキャッシュラインに記憶することと、を含む、請求項１に記載の装置。
【請求項３】
前記アトミックメモリトランザクションを実行することは、
前記ソースキャッシュラインからのメモリデータを前記ターゲットレジスタに記憶する前に、前記ソースキャッシュラインをロックすることと、
前記ターゲットレジスタからの前記値を前記ソースキャッシュラインに記憶した後に、前記ソースキャッシュラインのロックを解除することと、をさらに含み、
前記プロセッシングコアは、前記ソースキャッシュラインをロックすることによって前記ソースキャッシュラインがロックされている間、前記ソースキャッシュラインに記憶された共有データを、１つ以上の他のプロセッシングコアに読み取りまたは変更させないようにする、請求項２に記載の装置。
【請求項４】
前記シーケンスがアトミックメモリトランザクションとして実行されることを示す特殊用途開始命令が、前記命令シーケンスに先立ってなされ、前記命令は前記ソースキャッシュラインを示す、請求項２に記載の装置。
【請求項５】
前記プロセッシングコアは、マイクロコード検証エージェントを使用して、前記検証を行うように構成されている、請求項１に記載の装置。
【請求項６】
前記マイクロコード検証エージェントは、
前記シーケンスの指標をユーザプログラムから受信し、
前記シーケンスの前記指標の受信に応じて、前記検証を行い、
前記検証に応じて、前記シーケンスのコピーを記憶するように構成されている、請求項５に記載の装置。
【請求項７】
前記検証エージェントは、前記シーケンスの前記記憶されたコピーの識別子を、前記ユーザプログラムに戻すようにさらに構成されており、
前記アトミックメモリトランザクションを実行することは、前記ユーザプログラムが、前記識別子を使用して前記検証されたシーケンスを起動することに応じて行われる、請求項６に記載の装置。
【請求項８】
前記検証エージェントは、前記シーケンスの前記記憶されたコピーの開始の際に、特殊用途のアトミック開始命令を記憶するようにさらに構成されている、請求項６に記載の装置。
【請求項９】
前記プロセッシングコアは、順方向の進行を保証した前記アトミックメモリトランザクションを実行する、請求項１に記載の装置。
【請求項１０】
前記１つ以上のアトミック性基準の組は、
前記シーケンス内のどの命令も、前記シーケンス外の命令において実行を継続するように前記プロセッシングコアに命令しないという基準と、
前記シーケンス内のどの命令も、汎用レジスタ以外の前記プロセッシングコアのレジスタにアクセスするように前記プロセッシングコアに命令しないという基準と、
前記シーケンスの各命令が事前に指定された制限長形式で表現されているという基準と、
前記命令シーケンスの命令の数が、所与の最大制限値を超えないという基準と、
のうち１つ以上の基準を含む、請求項１に記載の装置。
【請求項１１】
命令シーケンスが、前記シーケンス内のどの命令も、共有メモリにアクセスするようにプロセッシングコアに命令しないことを含む１つ以上のアトミック性基準の組を満たすことを、マルチプロセッシングコアシステム内の前記プロセッシングコアが検証するステップと、
前記検証されたシーケンスを、アトミックメモリトランザクションとして実行するステップと、を含む、方法。
【請求項１２】
前記アトミックメモリトランザクションを実行するステップは、
ソースキャッシュラインからのメモリデータを、ターゲットレジスタに記憶するステップと、
前記命令シーケンスを実行して、前記ターゲットレジスタに記憶された前記メモリデータを変更するステップと、
前記ターゲットレジスタからの値を、前記ソースキャッシュラインに記憶するステップと、を含む、請求項１１に記載の方法。
【請求項１３】
前記アトミックメモリトランザクションを実行するステップは、
前記ソースキャッシュラインからのメモリデータを前記ターゲットレジスタに記憶する前に、前記ソースキャッシュラインをロックするステップと、
前記ターゲットレジスタからの前記値を前記ソースキャッシュラインに記憶した後に、前記ソースキャッシュラインのロックを解除するステップと、をさらに含み、
前記プロセッシングコアは、前記ソースキャッシュラインをロックすることによって前記ソースキャッシュラインがロックされている間、前記ソースキャッシュラインに記憶された共有データを、１つ以上の他のプロセッシングコアに読み取りまたは変更させないようにする、請求項１２に記載の方法。
【請求項１４】
前記プロセッシングコアは、
前記シーケンスの指標をユーザプログラムから受信し、
前記シーケンスの前記指標の受信に応じて、前記検証を行い、
前記検証に応じて、前記シーケンスのコピーを記憶する、
ように構成されたマイクロコード検証エージェントを使用して、前記検証を行うように構成されている、請求項１１に記載の方法。
【請求項１５】
前記検証エージェントは、前記シーケンスの前記記憶されたコピーの識別子を、前記ユーザプログラムに戻すようにさらに構成されており、
前記アトミックメモリトランザクションの実行は、前記ユーザプログラムが前記識別子を使用して前記検証されたシーケンスを起動することに応じて行われる、請求項１４に記載の方法。
【請求項１６】
前記プロセッシングコアは、順方向の進行を保証した前記アトミックメモリトランザクションを実行する、請求項１１に記載の方法。
【請求項１７】
前記１つ以上のアトミック性基準の組は、
前記シーケンス内のどの命令も、前記シーケンス外の命令において実行を継続するように前記プロセッシングコアに命令しないという基準と、
前記シーケンス内のどの命令も、汎用レジスタ以外の前記プロセッシングコアのレジスタにアクセスするように前記プロセッシングコアに命令しないという基準と、
前記シーケンスの各命令が事前に指定された制限長形式で表現されているという基準と、
前記命令シーケンスの命令の数が、所与の最大制限値を超えないという基準と、
のうち１つ以上の基準を含む、請求項１１に記載の方法。
【請求項１８】
コンピュータシステムで実行可能なプログラムにより操作されるデータ構造を備えるコンピュータ可読記憶媒体であって、前記プログラムは、プロセスの一部を実行するように前記データ構造上で動作して、前記データ構造により記述される回路を含む集積回路を製造し、前記データ構造に記述される前記回路は、
マルチプロセッシングコアシステム内にプロセッシングコアを含み、前記プロセッシングコアは、
指定された命令シーケンスが、前記シーケンスにおけるどの命令も、共有メモリにアクセスするように前記プロセッシングコアに命令しないことを含む１つ以上のアトミック性基準の組を満たすことを検証するように構成されており、
前記マルチプロセッシングコアシステムは、前記検証されたシーケンスを、アトミックメモリトランザクションとして実行するように構成されている、コンピュータ可読記憶媒体。
【請求項１９】
前記検証されたシーケンスをアトミックメモリトランザクションとして実行することは、
ソースキャッシュラインからのメモリデータを、ターゲットレジスタに記憶することと、
前記命令シーケンスを実行して、前記ターゲットレジスタに記憶された前記メモリデータを変更することと、
前記ターゲットレジスタからの値を、前記ソースキャッシュラインに記憶することと、を含む、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記記憶媒体は、ＨＤＬ、ＶｅｒｉｌｏｇまたはＧＤＳＩＩデータのうち少なくとも１つを記憶する、請求項１８に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータアーキテクチャにおける現代の傾向では、単一のシステムおよび／またはプロセッサがメモリを共有し、それぞれが独立して同時実行できる複数のプロセッシングコアを含む、マルチプロセッシングに向かう動きが見られる。現在、単一チップ上に２、４若しくは８個のプロセッシングコアを有するチップマルチプロセッサ（ＣＭＰ）、または多数のさらなるプロセッシングコアを有する汎用グラフィクスプロセッシングユニット（ＧＰＧＰＵ）が、比較的一般に見られる。加えて、各チップおよび／またはシステム上のプロセッシングコアの数は、今後さらに増加する可能性がある。
【０００２】
現代のプロセッサの高い並列プロセッシング能力を利用するために、ソフトウェアプログラマは、様々な同期設備、例えば、命令セットアーキテクチャ（ＩＳＡ）に支持されるアトミック命令を利用する。プロセッシングコアは、命令自体が複数のマイクロ命令を含むが、システム内の他のプロセッシングコアに対して上記命令をアトミック（不可分）に実行することができる。例えば、ｘ８６アーキテクチャにおけるアトミック命令ＣＭＰＸＣＨＧ（比較および交換）は、所与のメモリ位置のコンテンツを所与の値とアトミックに比較し、２つの値が同一である場合にのみ、当該メモリ位置のコンテンツを所与の新しい値に変更するように、プロセッシングコアに命令する汎用アトミック命令である。
【０００３】
ＩＳＡは、制限された数の特殊用途のアトミック命令、例えばアトミックＸＡＤＤ、ＢＴＳなどを提供する場合がある。プログラマの所望の特定機能に対する特殊用途の命令が存在しない場合には、プログラマは、ＣＭＰＸＣＨＧなどの汎用命令を使用して、そのような論理の構成を試みる場合がある。しかしながら、そのような構成は複雑で実装困難であり、かつ実行速度が遅い可能性がある。
【発明の概要】
【０００４】
マルチプロセッシングコアシステム内のプロセッシングコアは、命令シーケンスを、単一のアトミックメモリトランザクションとして実行するように構成されている。プロセッシングコアは、アトミックシーケンスの命令が、共有メモリにアクセスするようにプロセッシングコアに対して命令しないことを含む、１つ以上のアトミック性基準の組を、命令シーケンスが満たすことを検証する。命令シーケンスを検証した後、プロセッシングコアは、命令シーケンスを、単一のアトミックメモリトランザクションとして実行する。この実行は、共有メモリデータを記憶するソースキャッシュラインをロックすることと、検証された命令シーケンスを実行することと、アトミックシーケンスの結果をソースキャッシュラインに記憶することと、ソースキャッシュラインのロックを解除することと、を含んでよい。いくつかの実施形態では、プロセッシングコアは、順方向の進行を保証したシーケンスを実行する。
【０００５】
いくつかの実施形態では、マイクロコード検証エージェントが検証を行い、検証されたシーケンスのコピーを、保護されたメモリ領域に記憶してよい。このような実施形態では、検証エージェントは、識別子をユーザコードに戻してよく、後にその識別子を使用してアトミックシーケンスを起動することができる。
【図面の簡単な説明】
【０００６】
【図１】いくつかの実施形態に従って、順方向の進行を保証したアトミック命令シーケンスを検証および実行するように構成されたコンピュータシステムを示すブロック図である。
【図２】いくつかの実施形態に従って、命令シーケンスが、所与のアトミック性基準に適合するマイクロ命令のカスタムシーケンスをアトミックに実行するための方法を示すフロー図である。
【図３】いくつかの実施形態に従って、命令実行パイプライン内のランタイム検証ユニットを使用して、プロセッシングコアが命令のアトミックシーケンスを検証および実行する方法を示すフロー図である。
【図４】いくつかの実施形態に従って、実行前検証（例えば、マイクロコード化された検証エージェント）を使用して、プロセッシングコアが命令のアトミックシーケンスを検証および実行する方法を示すフロー図である。
【図５】いくつかの実施形態に従って、マイクロコード化された検証エージェントを使用して、ランタイム前にアトミックシーケンスを検証および実行するためのさらに詳細な方法を示すフロー図である。
【図６】いくつかの実施形態に従って、１つ以上のプロセッシングコアおよび／またはデバイスの代わりに、命令のアトミックシーケンスを実行するように構成された特殊用途のプロセッサを含むシステムを示すブロック図である。
【図７】いくつかの実施形態に従って、アトミックプログラム実行ユニットを使用してアトミックシーケンスを実行するための方法を示すフロー図である。
【図８】いくつかの実施形態に従って、本明細書に記載されるように、コード検証エージェントを使用して命令のアトミックシーケンスを単一のアトミックトランザクションとして実行するように構成されたコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【０００７】
本明細書は、「一実施形態」に関する言及を含む。「一実施形態では」というフレーズの出現は、必ずしも同一の実施形態を指すとは限らない。特定の機能、構造または特徴は、この開示と一致する任意の適切な方法で組み合わされてよい。
【０００８】
用語について。以降の段落は、この開示（添付の請求項を含む）において見られる用語の定義および／または文脈を提供する。
【０００９】
「備える」という用語について。この用語は非制限的である。添付の請求項において使用される場合、この用語は、追加の構造またはステップを除外しない。「１つ以上のプロセッシングユニットを備える装置」を列挙する請求項を考慮されたい。このような請求項は、装置が追加のコンポーネント（例えば、ネットワークインターフェースユニット、グラフィクス回路など）を含むことを除外しない。
【００１０】
「〜するように構成されている」との記載について。様々なユニット、回路または他のコンポーネントは、１つまたは複数のタスクを行う「ように構成されている」と記載または請求されてもよい。このような文脈において、「〜するように構成されている」との表記は、ユニット／回路／コンポーネントが、動作中に１つ以上のタスクを行う構造（例えば、回路）を含むことを示すことによって、構造を暗示するように使用されている。そのようにして、前記ユニット／回路／コンポーネントは、特定のユニット／回路／コンポーネントが現在動作していない（例えば、オンでない）場合であっても、タスクを行うように構成されていると言うことができる。「〜するように構成されている」との表記とともに使用されるユニット／回路／コンポーネントは、ハードウェア、例えば、回路や、動作を実装するように実行可能なプログラム命令を記憶するメモリなどを含む。ユニット／回路／コンポーネントが１つ以上のタスクを行う「ように構成されている」という表記は、当該ユニット／回路／コンポーネントについて、米国特許法第１１２条６項を引き合いに出さないことが明示的に意図される。加えて、「〜するように構成されている」との表記は、ソフトウェアおよび／またはファームウェア（例えば、ＦＰＧＡまたはソフトウェアを実行する汎用プロセッサ）により操作され、問題のタスクを行うことができる方法で動作する包括的構造（例えば、包括的回路）を含み得る。「〜するように構成されている」との表記は、１つ以上のタスクを実装または実行するように適合されたデバイス（例えば、集積回路）を製造するように、製造プロセス（例えば、半導体製造設備）を適合することを含んでもよい。
【００１１】
「第１の」、「第２の」などの用語について。本明細書で使用されるこれらの用語は、これらの用語に先行される名詞のラベルとして使用されるものであって、任意の種類の順序（例えば、空間的、時間的、論理的など）を暗示するものではない。例えば、８つのプロセッシング要素またはコアを有するプロセッサにおいて、「第１の」プロセッシング要素および「第２の」プロセッシング要素という用語は、８つのプロセッシング要素のうち任意の２つのプロセッシング要素を指すように使用され得る。つまり、「第１の」および「第２の」プロセッシング要素は、論理的なプロセッシング要素０および１に限定されない。
【００１２】
「〜に基づいて」との用語について。本明細書において使用されるこの用語は、決定に影響する１つ以上の要因を説明するように使用される。この用語は、決定に影響し得る追加の要因を除外しない。つまり、決定は、それらの要因のみに基づき得るし、あるいはそれらの要因の少なくとも一部に基づき得る。「Ｂに基づいてＡを決定する」というフレーズを考慮されたい。ＢはＡの決定に影響する要因であり得るが、このようなフレーズは、Ａの決定がＣにも基づくことを除外しない。他の例では、ＡはＢのみに基づいて決定されてよい。
【００１３】
汎用アトミック命令、例えば、ＣＭＰＸＣＨＧを使用して、単一のメモリ位置（例えば、単一のキャッシュライン）にアトミックにアクセスするための任意論理を構成することができる。本明細書において使用される「アトミックに」という用語は、その中間結果が、プログラム実行の他のスレッドにより観察可能でない実行を指す。したがって、アトミックに実行されるシーケンス（すなわち、アトミックシーケンス）内の命令は、すべての他のスレッドに対して、単一のアトミック動作として実行されたように見える。
【００１４】
汎用アトミック命令を使用してアトミック論理を構成するアプローチにはいくつかの短所がある。第一に、これらの汎用命令を使用して様々な機能を実装することは、多くの場合、より複雑なロックフリーアルゴリズムまたはソフトウェアセマフォを必要とする。さらに、競合の存在下でＣＭＰＸＣＨＧ動作が中断され得るため、これらの動作を利用するアルゴリズムは、順方向の進行を保証することができず、実行の同時スレッド間の問題を解決するソフトウェア競合管理機構を必要とする。このことは、ＣＭＰＸＣＨＧを利用するユーザプログラムまたはゲストＯＳが、割り込みまたはページフォールトの可能性なしに、アルゴリズムを通して進行することが保証され得ないことから、性能の損失をもたらす。さらに、ＣＭＰＸＣＨＧ動作は、それ自体が実行するのにいくらか不十分であり、１つの動作のターゲットキャッシュラインに対して少なくとも２つのアクセスを要する。
【００１５】
プログラマは、制限された一連の固定機能アトミック動作では容易に行えない単一ラインのアトミックトランザクションを必要とする場合が多く、および／またはこれらのアトミック命令を使用して構築される場合には、性能の低下を被る。例えば、いくつかのマルチコアタスク管理技術は、同一のキャッシュライン内に存在し得る２つ以上のデータ値に対するアトミックトランザクションを必要とする。
【００１６】
近年では、ハードウェアトランザクションメモリシステム（ＨＴＭ）は、プログラマが、命令のカスタムシーケンスをアトミックに実行するのを可能にするための手段として提案されている。しかしながら、このようなシステムは、複雑なハードウェアサポートを必要とし、依然として、トランザクション試行の中断などのライブロック状況に供される。したがって、このようなシステムは、依然として、競合の存在下で性能の低下を被ることから、デッドロックおよび／またはライブロックを回避するためのコンテンション管理機構を必要とする。
【００１７】
本明細書で使用される「デッドロック」という用語は、所与のスレッドの実行が、別のスレッドとの競合に起因して無制限に行き詰まる状況を指す（例えば、２つのスレッドの各々が、他方のスレッドがロックを解除するのを同時に待っている等）。本明細書において使用される「ライブロック」という用語は、スレッドの実行が、別のスレッドとの競合に起因して、同一の命令シーケンスの実行を繰り返し試行し、失敗する（少なくとも１回）という状況を指す（例えば、ＨＴＭシステムが、メモリ競合に起因して、トランザクション領域の実行を繰り返し試行および中断する）。所与のスレッドがデッドロックまたはライブロック状態である間には、当該スレッドを順方向に進行させる（すなわち、命令シーケンスを超えて実行および移動する）ことができない。
【００１８】
様々な実施形態に従って、コンピュータシステムは、順方向の進行が保証された単一のアトミックトランザクションとしてシステムが実行可能なアトミックシーケンスとして、命令のカスタムシーケンスをプログラマが設計することを可能にする設備を提供するように、構成され得る。本明細書に使用される順方向の進行の保証とは、上記において定義されるように、アトミック命令シーケンスの実行がデッドロックまたはライブロックに供されないことを意味する。
【００１９】
いくつかの実施形態では、システムは、アトミックとして指定されたシーケンスが特定のアトミック性基準に適合するか否かを検証するように構成された検証エージェントを含んでよい。このような実施形態では、アトミック性基準を満たすことは、順方向の進行を保証したシーケンスをアトミックに実行できることを保証する。以下でより詳細に論じられる様々な実施形態では、検証エージェントは、プロセッサ内、メモリサブシステム内またはシステムの他の場所に配置されてよい。
【００２０】
図１は、いくつかの実施形態に従って、順方向の進行を保証したアトミック命令シーケンスを検証および実行するように構成されたコンピュータシステムを示すブロック図である。
【００２１】
例示の実施形態に従って、システム１９０は、チップマルチプロセッサ（ＣＭＰ）１００を備えている。ＣＭＰ１００は、相互接続１６０を経由して、様々な他のＣＭＰ１５０および共有メモリ１５５に接続されている。いくつかの実施形態では、共有メモリ１５５は、例えば、Ｌ３キャッシュおよびメインメモリを備えるメモリ階層に配列されてよい。
【００２２】
複数の相互接続されたＣＭＰを有する実施形態を図１に示すが、本明細書に記載されるシステムおよび技術は、それらがシステム内でどのように分配されるかに関係なく、複数のプロセッシングコアを有する他のシステムに一般に適用されてよい。例えば、いくつかの実施形態では、ＣＭＰ１００および／または他のＣＭＰ１５０のいずれかは、通常の単一コアプロセッサと置き換えられてよい。他の実施形態では、ＣＭＰ１００は、複数のコアを備えてよく、システムは、他のＣＭＰ（例えば、１５０）、プロセッサまたはプロセッシングコアを備えていなくてもよい。
【００２３】
例示の実施形態では、ＣＭＰ１００は、オンチップネットワーク１４５により接続されており、当該ネットワーク上の通信のために構成された複数のプロセッシングコア（すなわち、１０５、１３５）を備えている。オンチップネットワーク１４５は、異なるネットワークトポロジー（例えば、２Ｄ若しくは３Ｄグリッド、トーラス、線形、リングなど）に従って配列された、様々な型のポイントツーポイントネットワークのいずれかに対応してよい。他の実施形態では、コア１０５および１３５は、バスおよび／または別の型の相互接続を介して接続されてもよい。
【００２４】
いくつかの実施形態では、オンチップ相互接続（例えば、オンチップネットワーク１４５）は、ＣＭＰ（例えば、ＣＭＰ１００上のコア１０５および１３５）上のコアを１つ以上の共有データキャッシュ、例えば、データキャッシュ１４０（例えば、Ｌ２キャッシュ）に接続し得る。いくつかの実施形態では、コアは、１つ以上のプライベートデータキャッシュ、例えば、コア１０５のキャッシュ１１５を含んでもよく、このコアを使用して、共有メモリ１５５からキャッシュされたデータを記憶し得る。
【００２５】
キャッシュされたデータのコヒーレンスを維持するために、各コアは、様々なキャッシュコヒーレンス機構、例えば、１２０を含んでもよい。キャッシュコヒーレンス機構１２０は、キャッシュコヒーレンスメッセージ（例えば、ＭＥＳＩプロトコルメッセージ）を他のプロセッシングコアと交換し、および／または同期機能（例えば、キャッシュ１１５内のキャッシュラインを、他のプロセッシングコアから独占的に所有し、拒否し、許容し、および／または回答するキャッシュコヒーレンスプローブとしてマークすること）を実行するための設備を含んでよい。
【００２６】
例示の実施形態に従って、コア１０５は、例えば、命令若しくはスタックポインタ、中間結果または他のデータなどのデータを一時的に記憶するのに使用可能な様々なレジスタ１１０を含んでもよい。レジスタ１１０は、様々な特殊用途および／または汎用レジスタを含んでよい。
【００２７】
例示の実施形態では、コア１０５は、例えばマイクロコード１３２などのプライベートデータを記憶するための、保護された高速メモリ領域を備えるプライベートメモリ領域１３０を含んでもよい。マイクロコード１３２は、異なるプログラム命令（例えば、ＣＭＰＸＣＨＧ）および／または任意のマイクロプログラムを実装するために、プロセッシングコア１０５により実行可能なマイクロ命令を含んでよい。いくつかの実施形態では、マイクロコード１３２は、以下に記載されるように、あるアトミック性基準を満たすことが検証エージェント（例えば、１３４）によって検証されたマイクロプログラムおよび／またはアトミック性マイクロプログラムを含んでよい。
【００２８】
図１の特定の実施形態では、プライベートメモリ領域１３０は、マイクロコードを含み、マイクロコード化された検証エージェント１３４を実装する。検証エージェント１３４は、命令シーケンスの指標を受信し、命令シーケンスが所与のアトミック性基準を満たすアトミックシーケンスであるか否かを検証し、当該シーケンスのコピーをプライベートメモリ領域１３０に記憶し、および／または記憶したシーケンスのコピーを識別するハンドルを他のプログラムコードに返送するように構成されている。この方法は、図３の説明においてさらに詳述される。
【００２９】
他の実施形態では、検証エージェント１３４は、必ずしもメモリ領域１３０内にマイクロコード化および記憶される必要はない。例えば、いくつかの実施形態では、検証エージェント１３４は、例えば命令デコーダ１６５などのように、コア１０５のハードウェアユニットに組み込まれているハードウェア論理によって実装されてよい。さらに他の実施形態では、検証エージェント１３４は、以下に説明されるように、例えば記憶サブシステム内の特殊用途プロセッサなどによって、コア１０５から完全に分離して実装されてよい。
【００３０】
図２は、マイクロ命令のカスタムシーケンスをアトミックに実行するための方法を示すフロー図である。この命令シーケンスは、いくつかの実施形態に従って、所与のアトミック性基準に適合する。方法２００は、順方向の進行を保証したアトミック命令シーケンスを実行することの一部として、図１のプロセッシングコア１０５などのプロセッシングコアにより実行されてよい。
【００３１】
図２に示されるように、方法２００は、３つの段階、具体的にはプロローグ段階２１０（トランザクションで使用される任意のデータが読み取られ得る段階）、主要な実行段階２２０（命令が実行される段階）およびエピローグ段階２３０（任意の結果がメモリに書き戻される段階）を含む。プロローグ段階の間、プロセッシングコアは、２１２にあるように、所与のソースキャッシュラインをロックする。本明細書に使用される、キャッシュラインをロックするプロセッシングコアは、他のプロセッシングコアが、キャッシュラインコンテンツを読み取らないように、またはロックを保持するコアによってロックが解除されるまでキャッシュラインコンテンツを修正することがないように、キャッシュラインに対する排他的読み取り／書き込み権限を有する。この特性を保証するために必要な特定のステップは、実装間で異なり、用いられる特定のキャッシュコヒーレンス機構およびプロトコルなどの他のシステム詳細に依存する。例えば、いくつかの実施形態では、所与のキャッシュラインをロックするコアは、プローブまたは別のプロセッサから受信する他のキャッシュコヒーレンスメッセージを、当該メッセージがロックされたキャッシュラインに関するものである場合に再利用してよい。いくつかの実施形態では、コアは、アトミックシーケンスの実行後およびキャッシュラインのロック解除後までコアが受信する様々なハードウェア割り込みおよび／またはソフトウェアシグナルのプロセッシングを、遅延させる場合もある。そのようなステップを行うことにより、コアは、割り込みなしにキャッシュラインの内容を読み取り、および／または修正してよい。
【００３２】
２１２にあるように、キャッシュラインをロックした後、プロセッサは、２１４にあるように、ソースキャッシュラインからデータを読み取り得る。２１４におけるソースキャッシュラインの読み取りは、シーケンスの１つ以上の命令による後次アクセスのための１つ以上のターゲットレジスタに、キャッシュラインからのデータを記憶することを含んでよい。場合によっては、プロセッサは、全体ではないが、ソースキャッシュラインをターゲットレジスタに読み込み得る。例えば、プロセッサは、ソースキャッシュラインのほんの一部分（例えば、６４バイト）を単一のターゲットレジスタに読み込んでもよいし、ソースキャッシュラインの多数の（もしくはすべての）部分をそれぞれのターゲットレジスタに読み込んでもよい。
【００３３】
図２に示されるように、プロローグ段階が完了すると、実行は主要な実行段階２２０に進行してよく、例えば２２２において、コアは命令のアトミックシーケンスを単一のアトミックトランザクションとして実行する。これらの様々な命令は、ターゲットレジスタからデータを読み取り、および／またはターゲットレジスタにデータを書き込み得る。
【００３４】
２２２に示されるように、命令のアトミックシーケンスは、コアがシーケンスを単一のアトミックトランザクションとして実行できるようにする特定のアトミック性基準に適合する。いくつかの実施形態では、アトミック性基準は、シーケンスが迅速かつ単純に実行できることを保証するように選択されてよく、実行コアにより順方向の進行が保証され得る。そのような基準は、シーケンスにおけるどの命令もメモリにアクセスしない、またはアトミックシーケンスの外部のコード部分にジャンプしないという条件を含んでよい。いくつかの実施形態では、アトミック性基準は、シーケンスを実行することに関する命令カウント制限または時間制限などの全体シーケンスに関する条件を含んでもよい。アトミック性基準は、以下でさらに詳述される。
【００３５】
アトミックシーケンスにおけるすべての命令が実行されたとき、プロセスはエピローグ段階２３０に入る。エピローグ段階２３０では、プロセッシングコアは、実行の結果を、ロックされたキャッシュライン２３２に書き戻してよい。例えば、コアは、ターゲットレジスタにおけるデータを、ソースキャッシュラインに書き込んでよい。これが行われると、実行コアは、２３４にあるように、ソースキャッシュラインを解放し得る。
【００３６】
命令シーケンスを実行する前に、システムは、まずそのシーケンスが実際に、特定のアトミック性基準に適合するアトミックシーケンスであるかを決定し得る。異なる実施形態では、この決定は、異なる時間および／または異なるコンポーネントにより行われてよい。例えば、いくつかの実施形態では、シーケンスは、例えば命令実行パイプライン内（例えば、デコーダ１６５内）のハードウェアにより実装される検証エージェントによって、検証が行われてもよい。他の実施形態では、シーケンスは、実行される前に、例えば、命令シーケンスが実行される前に起動されるマイクロコード化された検証エージェントによって、統計的に検証されてよい。さらに他の実施形態では、シーケンスは、他のプロセッシングコアの代わりにアトミック命令シーケンスを実行するように構成された特殊用途のオフチッププロセッサによって、検証および／または実行されてよい。他の可能性も存在するが、これら３つの構成は、さらに以下で詳述される。
【００３７】
図３は、いくつかの実施形態に従って、プロセッシングコアが、命令実行パイプライン内（例えば、デコーダ内）のランタイム検証ユニットを使用して、命令のアトミックシーケンスを検証および実行する方法を示すフロー図である。いくつかのそのような実施形態では、デコーダ（例えば、図１の１６５）は、デコード段階の間に、シーケンス内の各命令を検証するように構成された検証ユニットを含んでよい。このような検証エージェントは、シーケンス（および／またはシーケンス内の任意の命令）がアトミック性基準に適合しないことを発見すると、実行を停止し、例外を送出し、および／またはエラーを表示してソースキャッシュラインをロック解除し得る。
【００３８】
図３は、そのような実施形態において検証エージェントが動作し得る一方法の例を示す。異なる実施形態では、図３の方法３００は、デコーダによって、当該デコーダの一部として実装される検証ユニットによって、および／またはプロセッサ若しくはプロセッシングコアの別のハードウェアコンポーネントによって実行されてよい。
【００３９】
３０５に示されるように、方法３００は、アトミック実行のために指定されたプログラム命令のシーケンスの開始を検出するシステムに応じて、開始される。例えば、いくつかの実施形態では、シーケンスは、それぞれシーケンスの開始および終了を示す「ＳＴＡＲＴ」および「ＳＴＯＰ」プログラム命令を使用して、プログラムコードにおいて区分され得る。
【００４０】
コアは、３０５において、ＳＴＡＲＴ命令の読み取りに応じて、図２のプロローグに対応する１つ以上のステップを行ってよい。これらのステップは、ソースキャッシュラインを読み取ること（２１２を参照）と、キャッシュラインをロックすること（２１４を参照）とを含んでよい。
【００４１】
いくつかの実施形態では、ソースキャッシュラインおよび／またはターゲットレジスタは、（例えば、１つ以上のフィールドまたはパラメータにおける）ＳＴＡＲＴ命令によって指標されてよい。例えば、ｘ８６互換性アーキテクチャを利用する実施形態では、ＳＴＡＲＴ命令は、ＳＴＡＲＴ命令の１つのフィールド（例えば、ｍｏｄｒｍ．ｒ／ｍフィールド）におけるソースキャッシュラインのメモリアドレスと、別のフィールド（例えば、ｍｏｄｒｍ．ｒｅｇフィールド）におけるターゲットレジスタの指標とを含んでよい。コアは、これらの値の読み取りに応じて、識別されたソースキャッシュラインをロックし（３１０を参照）、シーケンス内の１つ以上の命令による後次アクセスのために、その指標されたソースキャッシュラインからのデータを、識別されたターゲットレジスタにロードしてよい（３１５を参照）。
【００４２】
いくつかの実施形態では、ＳＴＡＲＴ命令を実行することは、ソースキャッシュラインにおけるデータのメモリアドレスを記録すること（３２０を参照）および／またはアトミックシーケンス内の命令数（３２５を参照）を記録することをさらに含んでよい。いくつかの実施形態では、アトミック領域における命令の数は、例えばｘｏｐ．ｖｖｖｖフィールドなどのＳＴＡＲＴ命令の別のフィールドに記憶された値によって指標され得る。
【００４３】
ステップ３０５〜３２５を完了した後（実行のプロローグ段階に対応し得る）、コアは、ステップ３３０〜３４５により例示されるように、一連のトランザクションを実行し得る。この段階の間に、コアはコードシーケンスを通して進行し、シーケンスにおける次の命令がアトミック性基準を満たす場合（３３０：はい）、当該次の命令を実行する（３４０を参照）。次の命令がアトミック性基準を満たさない場合（３３０：いいえ）、システムは、３３５に見られるように、例外を送出し、シーケンスの実行を停止して、エラーハンドリングコードにジャンプし、および／またはシーケンスがアトミック性基準を満たさないことを示す。
【００４４】
いくつかの実施形態では、アトミック性基準は、迅速かつ単純に実行され、実行コアにより順方向の進行が保証され得る。例えば、いくつかの実施形態では、基準は、シーケンス内のどの命令もメモリにアクセスしないという基準を含んでよい。いくつかの実施形態では、基準は、シーケンス内のどの命令も、汎用レジスタ（ＧＰＲ）ではないレジスタにアクセス（読み取りおよび／または書き込み）しないという基準を含んでもよい。これらの基準を満たす命令は、それ自体がデータを別の実行スレッドと対立させることができないため、そのような動作のみで構成される命令シーケンスは、デッドロックまたはライブロックに供されない場合がある。したがって、命令シーケンスは、実行されると順方向の進行を保証し得る。様々な実施形態では、アトミック性基準は、様々な他の条件または付加的条件（例えば、ジャンプ命令なし、即時形態の命令なしなど）を含んでよい。アトミックシーケンスが含み得る命令の種類に関連する基準に加えて、強化されたアトミック性基準は、シーケンス内の命令数に対する制限を含んでよい。
【００４５】
アトミック性基準を満たす命令は、共有メモリに直接アクセスすることはできないが、当該命令は、ターゲットレジスタを介してソースキャッシュライン内のデータに間接的にアクセスし得る。したがって、ソースキャッシュライン内のデータに正常にアクセスする命令は、代わりにそのデータをターゲットレジスタから読み取り、および／または他のデータをターゲットレジスタに書き込んでよい。コアがアトミックシーケンスの実行を完了すると（例えば、ＳＴＯＰ命令に遭遇すると）（３４５：いいえ）、コアは、３５０に見られるように、ターゲットレジスタに記憶された計算結果を、ソースキャッシュラインに書き戻し、３５５に見られるように、ソースキャッシュラインを解放する。したがって、コアは、アトミックシーケンス内の命令を単一のアトミック操作として効果的に実行することができる。
【００４６】
いくつかの実施形態では、命令がアトミック性基準を満たすか否かを決定する（ステップ３３０）デコーダは、アトミック性基準を満たすことが知られている命令を示すオペコードであるか否かを決定するために、命令のオペコードを審査することを含んでよい。例えば、いくつかの実施形態では、ｘ８６システム内のデコーダは、命令のオペコードがＡＤＤ、ＡＤＣ、ＡＮＤ、ＸＯＲ、ＯＲ、ＳＢＢ、ＳＵＢ、ＣＭＰ、ＣＭＯＶｃｃ、ＢＴ、ＢＴＳ、ＢＴＣ、ＢＴＲ、ＴＥＳＴおよびＸＣＨＧのセットから選択された任意の命令を示す場合に、当該命令がアトミック性基準を満たすことを決定し得る。この例では、列挙された命令は、何もメモリまたは非汎用レジスタにアクセスしないこと、および何もアトミックシーケンス外の地点までプログラム制御を移行するようにプロセッサに命令することができないこと（すなわち、ジャンプ命令なし）というアトミック性基準を満たす。
【００４７】
ステップ３３０〜３４５は、命令の線形実行を示すが、当業者は、複数の命令が３４０において同時に実行し得る一方で、後次の命令が３３０においてデコードされる、および／またはアトミック性基準と比較されるように、様々なコアが命令パイプラインを利用し得ることを認識するであろう。加えて、条件の存在は、シーケンス内の異なる命令を複数回実行させ得る場合があるし、全く実行させない場合がある。
【００４８】
いくつかの実施形態では、３５５においてソースキャッシュラインを解放することは、例えば、キャッシュラインに関する後次プローブを許容し、割り込みを再度有効にし、および／または他の実装に固有のステップによって、３１０にて行われるロック手順を取り消すことを含んでよい。
【００４９】
いくつかの実施形態では、検証エージェントは、ランタイムではなく実行前に命令シーケンスを検証するように構成されてよい（図３を参照）。例えば、そのような検証エージェントは、マイクロコード（例えば、マイクロコード１３２）に実装されてよい。
【００５０】
図４は、いくつかの実施形態に従って、プロセッシングコアが実行前検証（例えば、マイクロコード化された検証エージェント）を使用して、命令のアトミックシーケンスを検証および実行する方法を示すフロー図である。そのような実施形態では、プライベートメモリ領域（例えば、図１の１３０）は、命令シーケンスが、１つ以上のアトミック性基準に適合するアトミックシーケンスであるか否かを検証するように構成された検証エージェント（例えば、１３４）を実装するプログラム命令を記憶してよい。
【００５１】
例示の実施形態に従って、ユーザコードが、プログラム命令のシーケンスを、検証エージェントを用いてアトミックシーケンスとして登録した場合、方法４００は、４０５において開始する。いくつかの実施形態では、ユーザコードは、特殊用途の命令（例えば、ＡＴＯＭＩＣＤＥＦ）を使用してシーケンスを登録してよい。そのような命令は、命令シーケンスを示すパラメータおよび／またはフィールドを含んでよい。
【００５２】
マイクロコード検証エージェントは、４０５において命令シーケンスを登録する試みに応じて、４１０に見られるように、命令シーケンスがアトミックシーケンスであることを検証しようとする。４１０に示されるように、シーケンスがアトミック性であることを検証することは、シーケンス内の各命令を審査することと、シーケンスが１つ以上のアトミック性基準を満たすことを決定することと、を含んでよい。
【００５３】
マイクロコード検証エージェントは、ランタイム検証エージェントと同様に、シーケンス内の各命令が検証基準を満たすことをチェックしてよい。これらの基準は、ランタイム検証エージェントにより強化されたもの（例えば、シーケンス内のどの命令もＧＰＲ以外のメモリまたはレジスタにアクセスし得ない）を含んでよい。加えて、マイクロコード検証エージェントは、各命令が迅速かつ容易にデコードされることを保証し得る（例えば、各命令は、４バイトなどの制限された長さであり、即時形態の命令を含まない）。マイクロコード検証エージェントは、ハードウェアベースのランタイム検証エージェントと同様に、命令が、アトミック性基準を満たす所与の許容可能な命令群の１つを示すことが知られるオペコードを含むことの検出に応じて、当該命令がアトミック性基準を満たすことを決定し得る。
【００５４】
シーケンスがアトミックシーケンスである（すなわち、アトミック性基準を満たす）場合、検証エージェントは、４１５に見られるように、保護されたプライベートのメモリ領域にアトミックシーケンスを記憶してよい。いくつかの実施形態では、コアは、アトミックシーケンスが記憶され得るプライベートメモリ領域（例えば、１３０）を含んでよい。プライベートメモリ領域１３０は、様々な保護領域（例えば、ｃ６保存領域またはｃ６保存領域のサブセット）を含んでよく、マイクロコード検証エージェントは、当該保護領域が別のプロセッサにより上書きされる可能性なしに命令シーケンスを記憶し得る。保護されたメモリ領域という用語は、マイクロコードにアクセス可能であるが、ソフトウェアまたは他のプロセッサにはアクセス可能ではないメモリ領域を指し得る。
【００５５】
４２０では、検証エージェントは、ハンドルを起動ユーザコードに戻す。ハンドルは、記憶されたアトミックシーケンスに固有の識別子を備えてよい。ユーザコードがアトミックシーケンスを実行する必要がある場合、４２５に見られるように、このハンドルを使用して記憶されたアトミックシーケンスを起動してよい。例えば、システムは、以下に記載されるように、アトミックシーケンスを起動するための特別命令を認識してよい。
【００５６】
プロセッシングコアは、識別ハンドルを使用して記憶されたシーケンスを起動するユーザコードに応じて（４２５を参照）、４３０に見られるように、検証前アトミックシーケンスをアトミックに実行し得る。いくつかの実施形態では、４３０においてアトミックシーケンスを実行することは、ソースキャッシュラインをターゲットレジスタに読み込むこと、アトミックシーケンスを実行すること、ターゲットレジスタにおける結果をソースキャッシュラインにライトバックすること、およびソースキャッシュラインをロック解除することを含んでよい。シーケンスは既に検証されているため、４３０においてアトミックシーケンスを実行することは、シーケンスを再度検証することを含まなくてよい。
【００５７】
図５は、いくつかの実施形態に従って、マイクロコード化された検証エージェントを使用して、ランタイム前にアトミックシーケンスを検証および実行するためのより詳細な方法を示すフロー図である。図５に示される方法５００は、ｘ８６アーキテクチャについて、図４の方法４００の特定の実装に対応し得る。しかしながら、異なる実施形態では、特定の命令名、データ通信に使用される命令フィールド、使用される特定のレジスタなどを含む実装は、いくらか異なり得る。この開示は、そのような実施形態をすべて包含することが意図される。
【００５８】
例示の実施形態に従って、ユーザコードは、命令シーケンスをマイクロコード検証エージェントによって登録するために、５０５に見られるように、例えば、ＡＴＯＭＩＣＤＥＦ命令を最初に実行する。例示の実施形態では、ＡＴＯＭＩＣＤＥＦ命令はｍｏｄｒｍ．ｒ／ｍフィールドを含み、ｍｏｄｒｍ．ｒ／ｍフィールドには、シーケンス内の第１の命令の相対命令ポインタアドレスが記憶されている。加えて、この実施形態におけるＡＴＯＭＩＣＤＥＦ命令は、シーケンス内の命令のカウント（すなわち、数）を記憶するｘｏｐ．ｖｖｖｖフィールドを含む。
【００５９】
ＡＴＯＭＩＣＤＥＦ命令を実行する一部として（またはそれに応じて）、マイクロコード検証エージェントは、（例えば、ｍｏｄｒｍ．ｒ／ｍフィールド内の）ＡＴＯＭＩＣＤＥＦにより識別された命令シーケンスがアトミック性基準を満たすという検証を試みる。上述されるように、この検証は、シーケンス内の命令のそれぞれが、アトミック性基準を満たす既知の許容可能な命令群の１つであることを決定することを含んでよい。いくつかの実施形態では、このアトミック性基準は、（ａ）シーケンス内のどの命令もメモリにアクセスし得ない、（ｂ）シーケンス内のどの命令もＧＰＲでないレジスタにアクセスし得ない、（ｃ）各命令は、特定の制限された長さの形態を使用して特定される、（ｄ）シーケンス内のどの命令も即時形態を使用しない（即時命令形態は、レジスタ識別子としてではなく、番号として特定されるパラメータを含む）という要件、および／またはコアがアトミックシーケンスを順方向の進行の保証した単一のアトミックトランザクションとして実行できるようにする他の要件を含んでよい。
【００６０】
シーケンス内の１つ以上の命令がアトミック性基準を満たさない場合、検証は失敗する（５１５：いいえ）。いくつかの実施形態では、マイクロコード検証エージェントは、シーケンスの記憶されたバージョンにハンドルを戻すのではなく、５２０に見られるように、失敗の指標をユーザコードに戻すことによりアトミック性基準を満たすように、シーケンスの失敗をシグナル送信し得る。例えば、検証が失敗した場合、検証エージェントは、記憶されたアトミックシーケンスに対するハンドルよりもむしろ、起動するユーザコードに値０を戻し得る。
【００６１】
検証が成功した場合（５１５：はい）、次にＡＴＯＭＩＣＤＥＦ命令により示されるシーケンスは、アトミック性基準を満たすアトミックシーケンスである。この場合、マイクロコードエージェントは、命令シーケンスを、保護されたメモリ領域、例えば、５２５におけるｃ６保存領域にコピーしてもよいし、ＡＴＯＭＩＣＤＥＦ命令が実行された後に、ソフトウェアがデッドロックの可能性を生じる命令をリライトしないことを保証する別の実装特定領域にコピーしてもよい。
【００６２】
いくつかの実施形態では、エージェントは、命令のアトミックシーケンスのプロローグ段階を行うために実行可能な１つ以上の命令を用いて、命令シーケンスの保存されたバージョンを始めてよい。例えば、５３０において、エージェントは、ＳＴＡＲＴ命令を用いて、保存された命令シーケンスを始める。上述されるように、ＳＴＡＲＴ命令は、シーケンスの所与のアトミック実行のためのソースキャッシュラインおよびターゲットレジスタを示すために使用可能な個別のフィールドを含んでよい。そのような実施形態では、ＳＴＡＲＴ命令は、ソースキャッシュラインをロックし、ソースキャッシュラインからターゲットレジスタまでデータをロードするように実行可能であり得る。
【００６３】
５３５では、マイクロコード検証エージェントは、記憶されたアトミックシーケンスを一意的に識別するハンドルを（起動ユーザコードに）戻す。次に、ユーザコードは、固有のハンドルを使用して、前検証されたアトミックシーケンスを起動し、それにより当該アトミックシーケンスをアトミックに実行してよい。例えば、５４０では、ユーザコードは、ＡＴＯＭＩＣＳＴＡＲＴ命令を実行することにより記憶されたアトミックシーケンスを起動する。ＡＴＯＭＩＣＳＴＡＲＴ命令は、シーケンス用の固有のハンドルおよびメモリ位置／入力を特定するパラメータおよび／またはフィールドを含む（例えば、ソースキャッシュラインおよびターゲットレジスタ）。
【００６４】
プロセッシングコアは、５４０の起動に応じて、５４５に見られるように、記憶されたアトミックシーケンスをアトミックに実行する。５４５においてシーケンスをアトミックに実行することは、図２の方法２００と同様のプロローグ段階、主要な段階およびエピローグ段階を実行することを含んでよい。
【００６５】
いくつかの実施形態では、上述される基本的なＳＴＡＲＴ機能性は拡張され、アトミックシーケンスが複数のキャッシュライン上で動作するのを許可し得る。例えば、ＳＴＡＲＴ２命令は、アトミックシーケンスのプロローグ段階が第２のソースキャッシュラインをロックおよびロードするのを可能にするように定義されてよい。したがって、アトミック命令シーケンスは、複数のキャッシュラインからのデータ上で動作し得る。
【００６６】
いくつかの実施形態では、（例えば、ＳＴＡＲＴおよびＳＴＡＲＴ２を使用して）複数のキャッシュラインにアクセスするアトミックシーケンスのプロローグは、デッドロック条件を回避する方法で実装され得る。例えば、いくつかの実施形態では、ＳＴＡＲＴ２は、先行するＳＴＡＲＴ命令によりロックされたキャッシュラインの直後にあるキャッシュラインのみを読み取り、かつロックするように実行可能であり得る。これを行うことにより、システムは、２つのスレッドが同一の２つのキャッシュラインを反対順序でロックしようとし、それぞれ第１のキャッシュラインのロックに成功したが、他のスレッドが他のキャッシュラインを解放するのを無制限に待機するというデッドロック状況を回避する。
【００６７】
いくつかの実施形態では、ＳＴＡＲＴ２は、先行するＳＴＡＲＴ命令により特定されるソースキャッシュラインの直後のものであるという必要のない任意のソースキャッシュラインを特定するために使用され得る。しかしながら、デッドロックを回避するために、システムはロックに関する順序を強化し得る。例えば、ＳＴＡＲＴおよびＳＴＡＲＴ２を実行するコアが、それらのソースキャッシュラインのそれぞれの物理メモリアドレスにより決定される順序（例えば、昇順または降順）でソースキャッシュラインのそれぞれをロックすることを保証するために、マイクロコードを用いることができる。この順序をすべてのスレッドに課すことにより、システムは、複数のキャッシュラインをロックすることに関連するデッドロック状況を回避することができる。
【００６８】
いくつかのアトミックシーケンスは、ジャンプ命令の実行を必要とし得る。しかしながら、ジャンプ命令は、プログラムフローをアトミックシーケンスの外側にジャンプさせる場合に問題となり得る。このことは、ランタイム検証エージェントが、アトミック性基準を満たさない任意の命令を、当該命令の実行前に検出するため、（例えば、デコーダにおける）ランタイム検証スキームを伴う実施形態に逆効果をもたらすとは必ずしも限らない。しかしながら、ランタイム前検証エージェント（例えば、マイクロコード化された検証エージェント）は、アトミックシーケンスを事前にチェックするため、ランタイムにおけるシーケンスの外側へのジャンプは、アトミック性基準を満たさない命令が実行されるのを許可し得る。
【００６９】
いくつかの実施形態では、検証前アトミック命令シーケンスの外側へのジャンプを回避するために、アトミック性基準は、ジャンプ命令を許可しない既定を含んでよい。他の実施形態では、基準は、ジャンプ命令を許可し得るが、当該命令がアトミックシーケンスを超えて実行をジャンプさせないように保証するようチェックする。
【００７０】
マイクロコード化された検証エージェントは、本明細書に記載されるように、異なるシステムにおいて、様々な実装に固有のアトミック性基準を許可してもよい。例えば、いくつかの実施形態では、マイクロコード化された検証エージェントは、命令ポインタ相対アドレス指定モードを利用する命令を却下し得る。保存されたアトミックシーケンスを起動することは、命令ポインタを変更し得ることから、ＩＰ相対パラメータを含む命令は、予想外のプログラム動作をもたらし得る。
【００７１】
いくつかの実施形態では、アトミックシーケンス検証および／または実行は、コア以外の全体で行われてよい。例えば、いくつかの実施形態では、システムは、複数のプロセッシングコアおよび／または他のシステムデバイスにより使用するために構成された、別個のオフチップアトミックプログラム実行ユニットを含んでよい。オフチップユニットは、アトミックシーケンスを単一のアトミックメモリトランザクションとして実行することに応じて、アトミックシーケンスの指標を、プロセッシングコアおよび／または別のシステムデバイスから受信するように構成されてよい。そのような実施形態では、アトミック実行ユニットは、指標された命令シーケンスが、アトミック性基準の組の明示性または暗示性を満たすことを検証し得る。例えば、アトミック実行ユニットは、アトミック性基準の組を満たすシーケンスのみを解釈することができるか否かについて、シーケンスを暗示的に検証し得る。そのような実施形態は、以下でさらに詳述される。
【００７２】
図６は、いくつかの実施形態に従って、１つ以上のプロセッシングコアおよび／またはデバイスの代わりに、命令のアトミックシーケンスを実行するように構成された特殊用途のプロセッサを含むシステムを示すブロック図である。例示の実施形態では、システム６００は、プロセッシングコア６１０および６３０を含むチップマルチプロセッサ６０５を含む。各プロセッシングコアは、オンチップネットワーク６４０によって、互いに接続されており、かつ、共有キャッシュ６３５にも接続されている。各コア自体は、１つ以上のプライベートキャッシュ（例えば、６１５）およびレジスタ（例えば、６２０）を含む。図１に関して上述されるように、様々な実施形態では、システム６００内の各プロセッシングコアは、１つ以上の別個のチップを含む、異なる配置で分配されてよい。例えば、システム６００は、６５０などの１つ以上の他のＣＭＰおよび／またはプロセッサを含んでよい。
【００７３】
例示の実施形態に従って、相互接続６４５は、ＣＭＰ６０５を、他のプロセッサ／ＣＭＰ６５０および共有メモリサブシステム６５５に接続する。共有メモリサブシステム６５５は、共有データ（すなわち、システム内で複数のプロセッシングコアにより共有されるデータ）を記憶する、および／または当該共有データに対するアクセスを提供するための設備を含んでよい。例えば、例示の実施形態では、共有メモリサブシステム６５５は、システムのプロセッシングコアによる共有データへのアクセスを容易にするために、データおよびメモリコントローラ６６０を記憶するための１つ以上の共有キャッシュ６６５を含む。
【００７４】
図６の例示の実施形態では、システム６００は、アトミックプログラムを実行するための特殊用途プロセッサとして実装され得るアトミックプログラム実行ユニット６７０を含む。様々な実施形態では、アトミックプログラム実行ユニット６７０は、共有メモリサブシステム６５５の一部として実装されてよく、並びに／または共有メモリサブシステム内のメモリコントローラ（例えば、６６０）、共有キャッシュ（例えば、６６５）、並びに／若しくは他のコンポーネントおよび／若しくは機能性への高速アクセスを容易にするように、システムの異なる部分に配置されてよい。
【００７５】
いくつかの実施形態では、プロセッシングコア（例えば、６１０）または周辺デバイス（例えば、６８０）は、特殊用途命令セット（ＩＳＡ）を利用して、アトミックプログラムをエンコードしてもよく、実行のために当該アトミックプログラム（またはその指標）をアトミック実行ユニット（例えば、６７０）に送信してもよい。いくつかの実施形態では、ＩＳＡの表現力は、ＩＳＡを使用してエンコードされた任意の有効プログラムが必ずアトミック性基準の組を満たすように制限されてよい。アトミックプログラムまたはその指標の受信に応じて、アトミック実行ユニットは、単一のアトミックメモリトランザクションとしてアトミックプログラムを解釈および実行してよい。
【００７６】
様々な実施形態では、アトミックプログラム実行ユニットは、１つ以上のプロセッシングコア、または例えばデバイス６８０などの周辺デバイスによって使用されるために構成されてよい。様々な実施形態では、デバイス６８０は、グラフィクスアダプター、オーディオアダプター、例えばディスクまたは光学ドライブなどのＩ／Ｏデバイス、および／または他のデバイスを含んでよい。
【００７７】
図７は、いくつかの実施形態に従って、アトミックプログラム実行ユニット（例えば、６７０）を使用してアトミックシーケンスを実行するための方法を示すフロー図である。例示の実施形態では、方法７００は、７０５に見られるように、特殊用途のアトミックプログラミング言語を用いた命令のアトミックシーケンスを特定するプロセッシングコアを用いて開始する。プロセッシングコアは、命令のアトミックシーケンスを、プロセッシングコアの単一キャッシュライン（すなわち、ソースキャッシュライン）におけるアトミックプログラムとして特定し得る。
【００７８】
いくつかの実施形態では、特殊用途のプログラミング言語は、順方向の進行を保証したシーケンスをアトミック実行ユニットが実行するのを許可する様々なアトミック性基準を、暗示的に強化するように設計され得る。例えば、いくつかの実施形態では、これらの基準は、アトミックシーケンス内のどの命令も、共有メモリにアクセスするようにおよび／またはアトミックシーケンス外の命令にジャンプするように、アトミック実行ユニットに命令しないという基準を含んでよい。アトミックプログラミング言語の表現性を制限して上記命令を除外することにより、システムは、ステップ７００において構成された任意の有効プログラムがこれらのアトミック性基準を満たすことを保証することができる。他のアトミック性基準は、同様に強化されてよい（例えば、汎用レジスタ以外のレジスタにアクセスしないなど）。
【００７９】
いくつかの実施形態では、言語は、キャッシュライン内の所定位置（インプレース）で実行され得るスタックベース言語であってよい。インプレース実行は、プログラムが特定されるメモリスペースだけを使用してプログラムを実行する技術を指す。例えば、単一キャッシュラインに記憶されたスタックベースのプログラムは、命令および／またはオペランドをスタックからポップし、それらの命令およびオペランドの結果をスタックに押し戻すことによってインプレースで実行され得、スタックが決して単一キャッシュラインより大きくならないようにする。以下の命令は、１つ以上のアトミック性基準を満たすアトミックプログラムをエンコードするための例示のスタックベースの言語を定義し、アトミック実行ユニットは、アトミックプログラムを単一のアトミックメモリトランザクションとして実行してよい。
ＬＯＡＤ  ＡＤＤＲ０：アドレス０から１ワード（例えば、８バイト）をロードし、結果をプッシュする
ＬＯＡＤ  ＡＤＤＲ１：アドレス１から１ワードをロードし、結果をプッシュする
ＳＴＯＲＥ  ＡＤＤＲ０：スタックのトップをポップし、ワードをアドレス０に記憶する（記憶はＥＮＤまで保留）
ＳＴＯＲＥ  ＡＤＤＲ１：スタックのトップをポップし、ワードをアドレス１に記憶する（記憶はＥＮＤまで保留）
ＡＤＤ，ＳＵＢ：２つの値をポップし、これらの値を付加／控除して結果をプッシュする
ＤＵＰ：スタックのトップのコピーをプッシュする
ＤＵＰ２：トップ２つのスタック要素のコピーをプッシュする
ＳＷＡＰ：トップおよび２番目のスタック要素をスワップする
ＥＮＤ：プログラムを終了し、記憶を書き出す
ＢＴｎ：ポップ、ポップされた値のＮビット値をプッシュする
ＰＵＳＨｉｍｍ：即時＃Ｎをプッシュする
ＣＭＰＳＩＧＮＥＤ：ポップされた符号付きの値の差異の符号に従って、２つの値をポップし、−１、０、１をプッシュする
ＣＭＰＵＮＳＩＧＮＥＤ：ポップされた符号なしの値の差異の符号に従って、２つの値をポップし、−１、０、１をプッシュする
ＤＵＰ２ＣＭＰ：ポップされた符号付きの値の差異の符号に従って、２つの値をポップし、ポップされた値をスタックにプッシュバックして、−１、０、１をプッシュする
ＪＥ、ＪＧ、ＪＬ：スタックをポップし、順方向のＮ命令を条件的にジャンプさせる（新しい命令アドレスが、キャッシュラインの外側にある場合はトランザクションを中断する）
Ｊ：順方向のＮ命令を無条件にジャンプさせる（新しい命令アドレスがキャッシュラインにある場合はトランザクションを中断する）
ＣＭＯＶＥ、ＣＭＯＶＧ、ＣＭＯＶＬ：スタックから３つのアイテムをポップする。スタックのトップは、条件コードとして使用される。条件がＴＲＵＥである場合は、次にスタック上の２番目のアイテムをプッシュし、そうでなければ３番目のアイテムをプッシュする
ＥＮＤＲＥＴＵＲＮ：ＥＮＤと同様であるが、スタックのトップに値を戻す
ｃｃ：条件付き「ＴＲＵＥの場合」
Ｅ：スタックのトップ（ＴＯＳ）が０である場合、ＴＲＵＥ
Ｌ：スタックの最後が１である場合、ＴＲＵＥ
Ｇ：スタックのトップおよび最後の両方が０である場合、ＴＲＵＥ
【００８０】
上記の例示的命令セットは、プログラムがエンコードされるキャッシュラインの外側にある共有メモリにアクセスする命令を含まない。さらに、命令セットは、プログラムの外側の位置に実行を移行させ得るジャンプ命令を含まない。したがって、例示の命令セットを使用してエンコードされた任意の有効プログラムは、共有メモリへのアクセスを禁止するアトミック性基準を少なくとも満たし、アトミックシーケンス外の位置にジャンプする。
【００８１】
上記のスタックベースの言語は、アトミックプログラムを表現するための可能な命令セットの一例に過ぎない。他の変型例も可能であり、この開示の利益を考慮して、当業者に明らかとなり得る。例えば、いくつかの実施形態では、命令セットは、スタックベースの言語ではなく、レジスタ間言語を実装してよい。アトミック性および順方向の進行を保証するアトミック性基準の組を満たすアトミックシーケンスをエンコードするための他の言語およびスキームが可能である。
【００８２】
７０５に見られるように、コアがアトミックプログラムを構成すると、コアは、７１０に見られるように、プログラムを実行するようにアトミック実行エージェントに要求を送信してよい。いくつかの実施形態では、コアは、エンコードされたアトミックプログラムを、実行ユニットに送信してよい。次いで、実行ユニットは、ローカルキャッシュのラインにプログラムを記憶してよい。他の実施形態では、コアは、実行ユニットが使用可能なアドレスまたは他の指標を送信して、アトミックプログラムを検索してよい。
【００８３】
いくつかの実施形態では、プロセッシングコアは、メモリマッピング（例えば、ＭＭＩＯを参照）またはポートマッピング（例えば、ＰＭＩＯを参照）を経由して、アトミックプログラムをアトミック実行ユニットに通信してよい。例えば、プロセッシングコアは、メモリマッピングを使用して、メモリおよびアトミック実行ユニットの両方をアドレス指定するために同一のアドレスバスを使用してもよい。そのような実施形態では、コアのアドレス指定可能なメモリスペースの領域は、メモリマップされたアトミックユニットに対して一時的または永久的に保存されてよい。次に、コアは、マップされたメモリ領域内でアトミックプログラムを構成し、続いて、そのようなプログラムの実行準備ができた場合、アトミック実行ユニットに通知し得る。そのような指標に応じて、実行ユニットは、７１５に見られるように、プログラムを単一のアトミックメモリトランザクションとして読み取り、実行し得る。いくつかの実施形態では、メモリマップされた実行ユニットは、割り当てられたアドレス空間に対する変更について、プロセッサのアドレスバスを監視（モニタ）し、したがって、新しいアトミックプログラムが明示的な通知なしに実行準備ができた場合に検出するように構成され得る。
【００８４】
例示の実施形態に示されるように、アトミックプログラムを受信した後、アトミックプログラム実行ユニットは、７１５に見られるように、プログラムを単一のアトミックトランザクションとして解釈および実行してよい。いくつかの実施形態では、例えばスタックベースのプログラムエンコードを使用するものなどのアトミックプログラムを実行することは、アトミックプログラムが記憶されるローカルキャッシュラインをロックすることと、プログラムをインプレースで実行することと、キャッシュラインをロック解除することと、を含んでよい。したがって、プログラム実行ユニットは、７１５においてエンコードされたプログラムをアトミックに実行し得る。この例では、アトミックプログラム実行ユニットは、プログラムを、単一のロックされたキャッシュライン内ですべて実行するため、ユニットは、デッドロック状況を回避し得る。
【００８５】
様々な実施形態では、プロセッシングコア以外のデバイス（例えば、オーディオ／ビデオカード、他の周辺デバイスなど）は、アトミックプログラム実行ユニットを方法７００と同様に利用してよい。例えば、そのようなデバイスは、アトミックプログラムを構成し（７０５を参照）、そのプログラムの実行を要求する（７１０を参照）。
【００８６】
いくつかの実施形態では、いくつかのコード（例えば、オペレーティングシステム）は、保護されたメモリ（７０５）において１つ以上のアトミックプログラムを構成および記憶した後、識別ハンドルを使用してアトミック実行ユニット（７１０）を起動させて、対応するプログラム（７１５）を実行してよい。したがって、オペレーティングシステムは、カーネルによる後の起動のために、１つ以上の信頼できるアトミックプログラムのセットを作成してよい。
【００８７】
図８は、本明細書に記載されるように、いくつかの実施形態に従って、コード検証エージェントを使用して、命令のアトミックシーケンスを単一のアトミックトランザクションとして実行するように構成されたコンピュータシステムを示すブロック図である。いくつかの実施形態では、コンピュータシステム８００は、図１のコンピュータシステム１９０に対応し得る。
【００８８】
コンピュータシステム８００は、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、携帯型コンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマーデバイス、アプリケーションサーバー、記憶デバイス、例えばスイッチ、モデム、ルーターなどの周辺デバイス、または一般に任意の種類のコンピューティングデバイスを含むが、これらに限定されない様々な種類のデバイスのいずれかに対応し得る。
【００８９】
コンピュータシステム８００は、１つ以上のプロセッサ８６０を含んでよく、それらのいずれかは、複数の物理コアおよび／または論理コアを含んでよい。プロセッサ８６０は、例えば検証エージェント８７０などのように、カスタムアトミックシーケンスが、本明細書に記載されるように或るアトミック性基準を満たすことを検証するための機構を含んでよい。異なる実施形態では、検証エージェント８７０は、本明細書に記載されるように、ハードウェア実装されるランタイム検証エージェント（例えば、デコーダ内）、またはマイクロコードされたランタイム前検証エージェントに対応し得る。
【００９０】
コンピュータシステム８００は、永続的にデータを記憶し得る１つ以上の永続記憶デバイス８５０（例えば、光学記憶、磁気記憶、ハードドライブ、テープドライブ、固体メモリなど）を含んでもよい。
【００９１】
いくつかの実施形態では、システム８００は、例えばアトミックプログラム実行ユニット８２４などの命令のアトミックシーケンスを実行するための特殊用途プロセッサを含んでよい。図８は、コア外のアトミックプログラム実行ユニット８２４および検証エージェント８７０の両方を示すが、他の実施形態は、これらのコンポーネントの１つのみ、またはその他を含んでよい。
【００９２】
例示の実施形態に従って、コンピュータシステム８００は、１つ以上の共有メモリ８１０（例えば、１つ以上のキャッシュ、ＳＲＡＭ、ＤＲＡＭ、ＲＤＲＡＭ、ＥＤＯ  ＲＡＭ、ＤＤＲ１０ＲＡＭ、ＳＤＲＡＭ、Ｒａｍｂｕｓ  ＲＡＭ、ＥＥＰＲＯＭなど）を含んでよく、共有メモリ８１０は、複数のプロセッシングコアの間、例えば、プロセッサ８６０の１つ以上で共有され得る。１つ以上のプロセッサ８６０、記憶デバイス（複数可）８５０、アトミックプログラム実行ユニット８２４および共有メモリ８１０は、相互接続８４０を介して接続され得る。様々な実施形態では、システムは、図８に示されない、より少数または追加のコンポーネント（例えば、ビデオカード、オーディオカード、追加のネットワークインターフェース、周辺デバイス、ネットワークインターフェース、例えば、ＡＴＭインターフェース、イーサネット（登録商標）インターフェース、フレームリレーインターフェース、モニタ、キーボード、スピーカーなど）を含んでよい。加えて、図８に示される異なるコンポーネントは、追加のコンポーネントにさらに組み込まれ、または分離されてよい。
【００９３】
いくつかの実施形態では、共有メモリ８１０は、プログラム命令８２０を記憶してよく、プログラム命令８２０は、プラットホームネイティブバイナリ、例えばＪａｖａ（登録商標）バイトコードなどの任意のインタープリタ型言語、若しくは例えば、Ｃ／Ｃ＋＋、Ｊａｖａ（登録商標）などの任意の他の言語、または任意のそれらの組み合わせでエンコードされてよい。プログラム命令８２０は、同期構造を必要とする１つ以上のマルチスレッドアプリケーション８２２を実装するプログラム命令を含んでよく、本明細書に記載されるように、アトミック命令シーケンスを含んでもよい。いくつかの実施形態では、プログラム命令８２０は、アプリケーション８２２（例えば、スケジューリング、ソフトウェアシグナルハンドリングなど）を実行するためのソフトウェアサポートを提供する、オペレーティングシステム８２４を実装するために実行可能な命令を含んでもよい。
【００９４】
例示の実施形態に従って、共有メモリ８１０は、共有データ８３０を含んでよく、複数のプロセッサ８６０および／またはそのプロセッシングコアによりアクセスされ得る。複数のプロセッサ８６０の一つは、本明細書に記載されるように、ローカルキャッシュ内の共有データ８３０の様々なコンポーネントをキャッシュし、キャッシュコヒーレンスプロトコルに従ってメッセージを交換することにより、これらのキャッシュ内のデータを調整する。
【００９５】
プログラム命令８２０、例えば、マルチスレッドされたアプリケーション８２２および／またはオペレーティングシステム８２４を実装するために使用されるプログラム命令は、コンピュータ可読記憶媒体に記憶されてよい。コンピュータ可読記憶媒体は、マシン（例えば、コンピュータ）により読み取り可能な形態（例えば、ソフトウェア、プロセッシングアプリケーション）で情報を記憶するための任意の機構を含んでよい。コンピュータ可読記憶媒体は、これらに限定されないが、磁気記憶媒体（例えば、フロッピー（登録商標）ディスク）、光学記憶媒体（例えば、ＣＤ−ＲＯＭ）、磁気光学記憶媒体、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能なプログラム可能メモリ（例えば、ＥＰＲＯＭおよびＥＥＰＲＯＭ）、フラッシュメモリ、プログラム命令を記憶するために適した電子媒体または他の種類の媒体を含んでよい。
【００９６】
上述されたコンピュータ可読記憶媒体は、いくつかの実施形態において、プログラムにより読み取られた命令を記憶するために、および１つ以上のプロセッサ８６０を備えるハードウェアを製造するために、直接的または間接的に使用されてよい。例えば、命令は、ハードウェア機能性の動作レベルまたはレジスタ転送レベル（ＲＴＬ）の説明を例えばＶｅｒｉｌｏｇまたはＶＨＤＬなどの高レベルの設計言語（ＨＤＬ）で記述する、１つ以上のデータ構造を説明し得る。この説明は、ネットリストを生成するための記述を合成し得る合成ツールにより読み取られてよい。ネットリストは、プロセッサ５００の機能性を表す一連のゲート（例えば、合成ライブラリ内で定義される）を備えてよい。次に、ネットリストは、マスクに適用される幾何学形状を記述するデータセットを生成するように配置およびルーティングされ得る。次に、マスクは、プロセッサ１００、６０５および／または８６０に対応する半導体回路（複数可）を製造するために、様々な半導体製造ステップにおいて使用され得る。あるいは、データベースは、必要に応じて、ネットリスト（合成ライブラリの有無にかかわらず）またはデータセットであってよい。
【００９７】
本開示の範囲は、本明細書において対処される問題のいずれかまたはすべてを軽減するか否かにかかわらず、本明細書に開示される任意の特徴もしくは特徴の組み合わせ（明示的または暗示的のいずれか）、またはその任意の一般化を含む。したがって、新しい請求項は、この出願（またはそれに対する優先権を主張する出願）を実行する間に、そのような特徴の任意の組み合わせに対して定式化されてよい。特に、添付の請求項を参照して、従属請求項からの特徴は、独立請求項の特徴と組み合わされてよく、それぞれの独立請求項からの特徴は、単に添付の請求項において列挙される特定の組み合わせだけでなく、任意の適切な方法で組み合わされてよい。
【図１】
2013546088.tif 000003
【図２】
2013546088.tif 000004
【図３】
2013546088.tif 000005
【図４】
2013546088.tif 000006
【図５】
2013546088.tif 000007
【図６】
2013546088.tif 000008
【図７】
2013546088.tif 000009
【図８】
2013546088.tif 000010
【手続補正書】
【提出日】平成25年8月8日(2013.8.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マルチプロセッシングコアシステム内のプロセッシングコアを備える装置であって、前記プロセッシングコアは、
指定された命令シーケンスが、前記シーケンスにおけるどの命令も、共有メモリにアクセスするように前記プロセッシングコアに命令しないことを含む１つ以上のアトミック性基準の組を満たすことを検証するように構成されており、
前記検証されたシーケンスは、アトミックメモリトランザクションとして前記マルチプロセッシングコアシステムによって実行可能である、装置。
【請求項２】
前記検証されたシーケンスをアトミックメモリトランザクションとして実行することは、
ソースキャッシュラインからのメモリデータを、ターゲットレジスタに記憶することと、
前記命令シーケンスを実行して、前記ターゲットレジスタに記憶された前記メモリデータを変更することと、
前記ターゲットレジスタからの値を、前記ソースキャッシュラインに記憶することと、を含む、請求項１に記載の装置。
【請求項３】
前記アトミックメモリトランザクションを実行することは、
前記ソースキャッシュラインからのメモリデータを前記ターゲットレジスタに記憶する前に、前記ソースキャッシュラインをロックすることと、
前記ターゲットレジスタからの前記値を前記ソースキャッシュラインに記憶した後に、前記ソースキャッシュラインのロックを解除することと、をさらに含み、
前記プロセッシングコアは、前記ソースキャッシュラインをロックすることによって前記ソースキャッシュラインがロックされている間、前記ソースキャッシュラインに記憶された共有データを、１つ以上の他のプロセッシングコアに読み取りまたは変更させないようにする、請求項２に記載の装置。
【請求項４】
前記シーケンスがアトミックメモリトランザクションとして実行されることを示す特殊用途開始命令が、前記命令シーケンスに先立ってなされ、前記命令は前記ソースキャッシュラインを示す、請求項２に記載の装置。
【請求項５】
前記プロセッシングコアは、マイクロコード検証エージェントを使用して、前記検証を行うように構成されている、請求項１に記載の装置。
【請求項６】
前記マイクロコード検証エージェントは、
前記シーケンスの指標をユーザプログラムから受信し、
前記シーケンスの前記指標の受信に応じて、前記検証を行い、
前記検証に応じて、前記シーケンスのコピーを記憶するように構成されている、請求項５に記載の装置。
【請求項７】
前記検証エージェントは、前記シーケンスの前記記憶されたコピーの識別子を、前記ユーザプログラムに戻すようにさらに構成されており、
前記アトミックメモリトランザクションを実行することは、前記ユーザプログラムが、前記識別子を使用して前記検証されたシーケンスを起動することに応じて行われる、請求項６に記載の装置。
【請求項８】
前記検証エージェントは、前記シーケンスの前記記憶されたコピーの開始の際に、特殊用途のアトミック開始命令を記憶するようにさらに構成されている、請求項６に記載の装置。
【請求項９】
前記プロセッシングコアは、順方向の進行を保証した前記アトミックメモリトランザクションを実行する、請求項１に記載の装置。
【請求項１０】
前記１つ以上のアトミック性基準の組は、
前記シーケンス内のどの命令も、前記シーケンス外の命令において実行を継続するように前記プロセッシングコアに命令しないという基準と、
前記シーケンス内のどの命令も、汎用レジスタ以外の前記プロセッシングコアのレジスタにアクセスするように前記プロセッシングコアに命令しないという基準と、
前記シーケンスの各命令が事前に指定された制限長形式で表現されているという基準と、
前記命令シーケンスの命令の数が、所与の最大制限値を超えないという基準と、
のうち１つ以上の基準を含む、請求項１に記載の装置。
【請求項１１】
命令シーケンスが、前記シーケンス内のどの命令も、共有メモリにアクセスするようにプロセッシングコアに命令しないことを含む１つ以上のアトミック性基準の組を満たすことを、マルチプロセッシングコアシステム内の前記プロセッシングコアが検証するステップと、
前記検証されたシーケンスを、アトミックメモリトランザクションとして実行するステップと、を含む、方法。
【請求項１２】
前記アトミックメモリトランザクションを実行するステップは、
ソースキャッシュラインからのメモリデータを、ターゲットレジスタに記憶するステップと、
前記命令シーケンスを実行して、前記ターゲットレジスタに記憶された前記メモリデータを変更するステップと、
前記ターゲットレジスタからの値を、前記ソースキャッシュラインに記憶するステップと、を含む、請求項１１に記載の方法。
【請求項１３】
前記アトミックメモリトランザクションを実行するステップは、
前記ソースキャッシュラインからのメモリデータを前記ターゲットレジスタに記憶する前に、前記ソースキャッシュラインをロックするステップと、
前記ターゲットレジスタからの前記値を前記ソースキャッシュラインに記憶した後に、前記ソースキャッシュラインのロックを解除するステップと、をさらに含み、
前記プロセッシングコアは、前記ソースキャッシュラインをロックすることによって前記ソースキャッシュラインがロックされている間、前記ソースキャッシュラインに記憶された共有データを、１つ以上の他のプロセッシングコアに読み取りまたは変更させないようにする、請求項１２に記載の方法。
【請求項１４】
前記プロセッシングコアは、
前記シーケンスの指標をユーザプログラムから受信し、
前記シーケンスの前記指標の受信に応じて、前記検証を行い、
前記検証に応じて、前記シーケンスのコピーを記憶する、
ように構成されたマイクロコード検証エージェントを使用して、前記検証を行うように構成されている、請求項１１に記載の方法。
【請求項１５】
前記１つ以上のアトミック性基準の組は、
前記シーケンス内のどの命令も、前記シーケンス外の命令において実行を継続するように前記プロセッシングコアに命令しないという基準と、
前記シーケンス内のどの命令も、汎用レジスタ以外の前記プロセッシングコアのレジスタにアクセスするように前記プロセッシングコアに命令しないという基準と、
前記シーケンスの各命令が事前に指定された制限長形式で表現されているという基準と、
前記命令シーケンスの命令の数が、所与の最大制限値を超えないという基準と、
のうち１つ以上の基準を含む、請求項１１に記載の方法。
【国際調査報告】
2013546088.tif 000011
2013546088.tif 000012
2013546088.tif 000013