IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧 ▶ ザ レジェンツ オブ ザ ユニバーシティ オブ ミシガンの特許一覧

<>
  • 特許-命令順序付け 図1
  • 特許-命令順序付け 図2
  • 特許-命令順序付け 図3
  • 特許-命令順序付け 図4
  • 特許-命令順序付け 図5
  • 特許-命令順序付け 図6
  • 特許-命令順序付け 図7
  • 特許-命令順序付け 図8
  • 特許-命令順序付け 図9
  • 特許-命令順序付け 図10
  • 特許-命令順序付け 図11
  • 特許-命令順序付け 図12
  • 特許-命令順序付け 図13
  • 特許-命令順序付け 図14
  • 特許-命令順序付け 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-17
(45)【発行日】2024-04-25
(54)【発明の名称】命令順序付け
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240418BHJP
   G06F 9/30 20180101ALI20240418BHJP
   G06F 9/34 20180101ALI20240418BHJP
   G06F 9/52 20060101ALI20240418BHJP
【FI】
G06F9/38 350A
G06F9/30 350A
G06F9/34 350A
G06F9/38 370X
G06F9/52 150A
【請求項の数】 27
(21)【出願番号】P 2021553333
(86)(22)【出願日】2019-11-26
(65)【公表番号】
(43)【公表日】2022-04-27
(86)【国際出願番号】 GB2019053330
(87)【国際公開番号】W WO2020183119
(87)【国際公開日】2020-09-17
【審査請求日】2022-11-18
(31)【優先権主張番号】16/296,507
(32)【優先日】2019-03-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(73)【特許権者】
【識別番号】513283512
【氏名又は名称】ザ レジェンツ オブ ザ ユニバーシティ オブ ミシガン
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ゴグテ、ヴァイバフ
(72)【発明者】
【氏名】ワン、ウェイ
(72)【発明者】
【氏名】ディーステルホルスト、ステファン
(72)【発明者】
【氏名】チェン、ピーター エム
(72)【発明者】
【氏名】ナラヤナサミー、サティシュ
(72)【発明者】
【氏名】ウェニッシュ、トーマス フリードリヒ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特表2015-500541(JP,A)
【文献】米国特許出願公開第2017/0123723(US,A1)
【文献】特表2012-521589(JP,A)
【文献】特開2014-182795(JP,A)
【文献】特表2017-510878(JP,A)
【文献】大津金光、松本 尚、平木 敬,エラスティックメモリコンシステンシモデルのシミュレーション評価,情報処理学会研究報告,日本,社団法人情報処理学会,1996年08月27日,Vol.96, No.80,pp.125-130(96-ARC-119-22),ISSN 0919-6072
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/30
G06F 9/34
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
データ処理装置であって、
バリア生成命令及びバリア抑止命令を含む命令ストリームを取得するための取得回路と、
1つ以上の依存関係に基づいて、前記命令ストリーム内の各命令の処理回路への送信を順序付けるための追跡回路と
を備え、
前記追跡回路は、前記バリア生成命令に応答して前記1つ以上の依存関係が1つ以上のバリア依存関係を含むようにし、前記1つ以上のバリア依存関係において、前記ストリーム内の前記バリア生成命令前に発生したバリア前命令は、前記ストリーム内の前記バリア生成命令後に発生したバリア後命令が送信される前に送信され、
前記追跡回路は、前記バリア抑止命令に応答して前記バリア依存関係を緩和して、前記ストリーム内の前記バリア抑止命令後に発生した抑止後命令が、前記バリア前命令の前に送信されることを可能にする、データ処理装置。
【請求項2】
前記バリア前命令、前記バリア後命令、及び前記抑止後命令は、メモリアクセス命令を含む、請求項1に記載のデータ処理装置。
【請求項3】
前記メモリアクセス命令は、永続メモリに対してなされる、請求項2に記載のデータ処理装置。
【請求項4】
前記1つ以上の依存関係は、前記命令間の1つ以上のデータ依存関係を含む、請求項1~3のいずれか一項に記載のデータ処理装置。
【請求項5】
前記追跡回路は、1つ以上のエントリを含む待ち行列回路を含み、前記エントリのそれぞれは前記命令のうちの1つに対応し、
前記追跡回路は、前記1つ以上の依存関係を表すために依存関係行列を記憶するための記憶回路を含む、請求項1~4のいずれか一項に記載のデータ処理装置。
【請求項6】
前記追跡回路は、新しい命令を受信したことに応答して、前のバリア生成命令及び前のバリア抑止命令を見つけるために前記待ち行列回路を探索するように適合されており、
前記前のバリア生成命令が見つかって前記前のバリア抑止命令が見つからない場合、前記バリア依存関係は、前記バリア前命令が送信されるまで、前記新しい命令の送信を抑止するために追加され、
前記前のバリア生成命令が見つかって前記前のバリア抑止命令が見つかった場合、前記追跡回路は、前記バリア依存関係の追加を抑止する、請求項に記載のデータ処理装置。
【請求項7】
前記追跡回路は、ロードストア待ち行列である、請求項1~6のいずれか一項に記載のデータ処理装置。
【請求項8】
前記命令のうちの少なくとも一部のトランザクションを記憶するためのトランザクション回路と、
前記トランザクションに基づいて、前記命令の実行前に対応する前記処理回路の以前の状態を復元するためのロールバック回路と、
を備える、請求項1~7のいずれか一項に記載のデータ処理装置。
【請求項9】
前記追跡回路は、前記バリア生成命令と前記バリア抑止命令との間の前記命令のうちの少なくとも一部を、順序不同で前記処理回路に送信するように適合されている、請求項7に記載のデータ処理装置。
【請求項10】
前記処理回路は複数の処理回路を含み、
前記追跡回路は、前記バリア生成命令と前記バリア抑止命令との間の前記命令のうちの少なくとも一部を、前記処理回路のうちの異なる処理回路に送信するように適合されている、請求項7又は9に記載のデータ処理装置。
【請求項11】
前記1つ以上のバリア依存関係は、所定のタイプの命令の依存関係である、請求項1~10のいずれか一項に記載のデータ処理装置。
【請求項12】
前記所定のタイプは、永続メモリに対してなされるメモリアクセス命令を含む、請求項11に記載のデータ処理装置。
【請求項13】
前記データ処理装置は、前記命令ストリーム内の前記命令のうちの少なくとも一部の投機的実行を行うように適合されており、
前記追跡回路は、投機的実行される命令の前記1つ以上のバリア依存関係にかかわらず、前記投機的実行される命令を前記処理回路に送信するように適合されている、請求項1~12のいずれか一項に記載のデータ処理装置。
【請求項14】
前記命令ストリームはまた、境界生成命令を含み、
前記追跡回路は、前記境界生成命令に応答して前記1つ以上の依存関係が1つ以上の境界依存関係を含むようにし、前記1つ以上の境界依存関係において、前記ストリーム内の前記境界生成命令前に発生した境界前命令は、前記ストリーム内の前記境界生成命令後に発生した境界後命令が送信される前に送信される、請求項1~13のいずれか一項に記載のデータ処理装置。
【請求項15】
前記境界前命令及び前記境界後命令は、メモリアクセス命令を含む、請求項14に記載のデータ処理装置。
【請求項16】
前記メモリアクセス命令は、永続メモリに対してなされる、請求項15に記載のデータ処理装置。
【請求項17】
前記1つ以上の境界依存関係は、前記境界前命令のサブセットが前記境界後命令の前に送信されることを必要とする、請求項14に記載のデータ処理装置。
【請求項18】
前記命令ストリームは、複数のバリア抑止命令を含み、前記複数のバリア抑止命令のそれぞれは、前記命令のサブセットを含むストランドを画定し、
前記ストランドのそれぞれは、関連付けられた識別子を有し、
前記境界生成命令は、関連付けられた識別子を有し、
前記境界依存関係が関連する前記境界前命令は、前記ストランドの関連付けられた識別子が前記境界生成命令の前記関連付けられた識別子と一致する前記ストランド内にある、請求項14又は17に記載のデータ処理装置。
【請求項19】
データ処理方法であって、
バリア生成命令及びバリア抑止命令を含む命令ストリームを取得することと、
1つ以上の依存関係に基づいて、前記命令ストリーム内の各命令を順に処理回路に送信することと
を含み、
前記バリア生成命令に応答して前記1つ以上の依存関係は1つ以上のバリア依存関係を含むように修正され、前記1つ以上のバリア依存関係において、前記ストリーム内の前記バリア生成命令前に発生したバリア前命令は、前記ストリーム内の前記バリア生成命令後に発生したバリア後命令が送信される前に送信され、
前記バリア抑止命令に応答して前記バリア依存関係は緩和されて、前記ストリーム内の前記バリア抑止命令後に発生した抑止後命令が、前記バリア前命令の前に送信されることを可能にする、データ処理方法。
【請求項20】
ホストデータ処理装置を制御して、命令を実行するための命令実行環境を提供するためのコンピュータプログラムであって、
前記コンピュータプログラムは、バリア生成命令及びバリア抑止命令を含む命令ストリームを取得するための取得論理と、
1つ以上の依存関係に基づいて、前記命令ストリーム内の各命令を順に処理回路に送信するための送信論理と
を含み、
前記バリア生成命令に応答して前記1つ以上の依存関係は1つ以上のバリア依存関係を含むように修正され、前記1つ以上のバリア依存関係において、前記ストリーム内の前記バリア生成命令前に発生したバリア前命令は、前記ストリーム内の前記バリア生成命令後に発生したバリア後命令が送信される前に送信され、
前記バリア抑止命令に応答して前記バリア依存関係は緩和されて、前記ストリーム内の前記バリア抑止命令後に発生した抑止後命令が、前記バリア前命令の前に送信されることを可能にする、コンピュータプログラム。
【請求項21】
データ処理装置であって、
アトミック範囲を含む複数の入力命令を受信するための入力回路と、
前記入力命令に対応する出力命令を提供するための出力回路と、
前記入力命令を前記出力命令に変換するための変換回路と
を備え、
前記アトミック範囲は、前記入力命令のサブセットを画定し、その中において、実行中に、前記サブセット内の前記命令のうちの1つが実行できない場合、前記入力命令の前記サブセットはリワインドされ、
前記変換回路は、前記アトミック範囲内のアトミック命令について、
前記アトミック命令によって引き起こされた状態変更のログを記録するためのログ命令と、
バリア生成命令と、
前記アトミック命令に一致する、対応する命令と、
バリア抑止命令と
を生成する、データ処理装置。
【請求項22】
前記変換回路はまた、前記アトミック命令について、
境界生成命令と、
1つ以上のクリーンアップ命令と
を生成する、請求項21に記載のデータ処理装置。
【請求項23】
前記1つ以上のクリーンアップ命令は、前記アトミック命令の完了のログを記録するための更なるログ命令を含む、請求項22に記載のデータ処理装置。
【請求項24】
前記アトミック命令は、前記データ処理装置の一部の以前の状態を新しい状態に変更し、
前記ログ命令は、前記データ処理装置の前記一部の前記以前の状態を記憶する取消ログ命令である、請求項21~23のいずれか一項に記載のデータ処理装置。
【請求項25】
前記アトミック命令はメモリアクセス命令である、請求項24に記載のデータ処理装置。
【請求項26】
前記メモリアクセス命令は、永続メモリに対してなされる、請求項25に記載のデータ処理装置。
【請求項27】
データ処理方法であって、
アトミック範囲を含む複数の入力命令を受信するステップと、
前記入力命令に対応する出力命令を提供するステップと、
前記入力命令を前記出力命令に変換するステップ
を含み、
前記アトミック範囲は、前記入力命令のサブセットを画定し、その中において、実行中に、前記サブセット内の前記命令のうちの1つが実行できない場合、前記入力命令の前記サブセットはリワインドされ、
前記変換するステップは、前記アトミック範囲内のアトミック命令について、
前記アトミック命令に一致するログ命令と、
バリア生成命令と、
前記アトミック命令に一致する、対応する命令と、
バリア抑止命令と
を生成する、データ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理に関する。例えば、本技術は、命令の順序付け及び依存関係の分野に関連する。
【発明の概要】
【発明が解決しようとする課題】
【0002】
データ処理装置において、いくつかの命令が他の命令が実行された後にのみ実行できるように順序付けを実施することが望ましい場合がある。これは、おそらく、前の命令が実行されるまで後の命令の実行を禁止する一種の「バリア」によって達成され得る。しかしながら、実際には、これは、命令順序付けに大きな制約を課す。
【0003】
第1の例示的構成から見ると、データ処理装置であって、バリア生成命令及びバリア抑止命令を含む命令ストリームを取得するための取得回路と、1つ以上の依存関係に基づいて、命令ストリーム内の各命令の処理回路への送信を順序付けるための追跡回路とを備え、追跡回路は、バリア生成命令に応答して1つ以上の依存関係が1つ以上のバリア依存関係を含むようにし、1つ以上のバリア依存関係において、ストリーム内のバリア生成命令前に発生したバリア前命令は、ストリーム内のバリア生成命令後に発生したバリア後命令が送信される前に送信され、追跡回路は、バリア抑止命令に応答してバリア依存関係を緩和して、ストリーム内のバリア抑止命令後に発生した抑止後命令が、バリア前命令の前に送信されることを可能にする、データ処理装置が提供される。
【0004】
第2の例示的構成から見ると、データ処理方法であって、バリア生成命令及びバリア抑止命令を含む命令ストリームを取得することと、1つ以上の依存関係に基づいて、命令ストリーム内の各命令を順に処理回路に送信することとを含み、バリア生成命令に応答して1つ以上の依存関係は1つ以上のバリア依存関係を含むように修正され、1つ以上のバリア依存関係において、ストリーム内のバリア生成命令前に発生したバリア前命令は、ストリーム内のバリア生成命令後に発生したバリア後命令が送信される前に送信され、バリア抑止命令に応答してバリア依存関係は緩和されて、ストリーム内のバリア抑止命令後に発生した抑止後命令が、バリア前命令の前に送信されることを可能にする、データ処理方法が提供される。
【0005】
第3の例示的構成から見ると、ホストデータ処理装置を制御して、命令を実行するための命令実行環境を提供するためのコンピュータプログラムであって、コンピュータプログラムは、バリア生成命令及びバリア抑止命令を含む命令ストリームを取得するための取得論理と、1つ以上の依存関係に基づいて、命令ストリーム内の各命令を順に処理回路に送信するための送信論理とを含み、バリア生成命令に応答して1つ以上の依存関係は1つ以上のバリア依存関係を含むように修正され、1つ以上のバリア依存関係において、ストリーム内のバリア生成命令前に発生したバリア前命令は、ストリーム内のバリア生成命令後に発生したバリア後命令が送信される前に送信され、バリア抑止命令に応答してバリア依存関係が緩和されて、ストリーム内のバリア抑止命令後に発生した抑止後命令が、バリア前命令の前に送信されることを可能にする、コンピュータプログラムが提供される。
【0006】
第4の例示的な構成から見ると、データ処理装置であって、アトミック範囲を含む複数の入力命令を受信するための入力回路と、入力命令に対応する出力命令を提供するための出力回路と、入力命令を出力命令に変換するための変換回路とを備え、アトミック範囲は、入力命令のサブセットを画定し、その中において、実行中に、サブセット内の命令のうちの1つが実行できない場合、入力命令のサブセットはリワインドされ、変換回路は、アトミック範囲内のアトミック命令について、アトミック命令によって引き起こされた状態変更のログを記録するためのログ命令と、バリア生成命令と、アトミック命令に一致する、対応する命令と、バリア抑止命令とを生成する、データ処理装置が提供される。
【0007】
第5の例示的な構成から見ると、データ処理方法であって、アトミック範囲を含む複数の入力命令を受信することと、入力命令に対応する出力命令を提供することと、入力命令を出力命令に変換することとを含み、アトミック範囲は、入力命令のサブセットを画定し、その中において、実行中に、サブセット内の命令のうちの1つが実行できない場合、入力命令のサブセットはリワインドされ、変換ステップは、アトミック範囲内のアトミック命令について、アトミック命令に一致するログ命令と、バリア生成命令と、アトミック命令に一致する、対応する命令と、バリア抑止命令とを生成する、データ処理方法が提供される。
【図面の簡単な説明】
【0008】
添付の図面に示されている本発明の実施形態を参照して、あくまで一例として本発明を更に説明する。
図1図1は、いくつかの実施形態に係るデータ処理装置を概略的に示す。
図2図2は、いくつかの実施形態に係る更なるデータ処理装置を概略的に示す。
図3a図3aは、いくつかの実施形態に係る、代表的な依存関係の例を示す。
図3b図3bは、いくつかの実施形態に係る、代表的な依存関係の例を示す。
図4a図4aは、バリア生成命令及びバリア抑止命令の使用が、命令実行のより柔軟な順序付けを可能にする方法を示す。
図4b図4bは、バリア生成命令及びバリア抑止命令の使用が、命令実行のより柔軟な順序付けを可能にする方法を示す。
図4c図4cは、バリア生成命令及びバリア抑止命令の使用が、命令実行のより柔軟な順序付けを可能にする方法を示す。
図5図5は、バリア生成及び抑止命令を使用して、アトミックセクションを有する入力コードを出力コードに変換するための変換可能なデータ処理装置を概略的に示す。
図6図6は、図5に示されている出力コードを実行するためのデータ処理装置を概略的に示す。
図7図7は、いくつかの実施形態に係る、バリア命令を他の命令と一緒に処理するプロセスを示すフローチャートを示す。
図8図8は、推測を伴う命令発行を処理するためのプロセスを示すフローチャートを示す。
図9a図9aは、いくつかの実施形態に係る、4つの命令の実行におけるバリアに加えた境界の使用を示す。
図9b図9bは、いくつかの実施形態に係る、4つの命令の実行におけるバリアに加えた境界の使用を示す。
図9c図9cは、いくつかの実施形態に係る、4つの命令の実行におけるバリアに加えた境界の使用を示す。
図10図10は、図9の4つの命令が、命令間依存関係を考慮してどのようにスケジュールされ得るかを示す。
図11図11は、バリア及び境界命令の実行のための装置を概略的に示す。
図12図12は、アトミックセクションを有する入力コードがバリア及び境界命令を有する出力コードにどのように変換され得るかを示す。
図13図13は、バリア生成命令、バリア抑止命令、境界生成命令、及びメモリアクセス命令などの他の命令を処理するプロセスを示すフローチャートを示す。
図14図14は、いくつかの実施形態に係る、境界命令の効果が制限された変形例を示す。
図15図15は、いくつかの実施形態に係るデータ処理の方法を示す。
【発明を実施するための形態】
【0009】
添付の図面を参照して実施形態を検討する前に、以下の実施形態の説明を行う。
【0010】
いくつかの実施形態によれば、データ処理装置であって、バリア生成命令及びバリア抑止命令を含む命令ストリームを取得するための取得回路と、1つ以上の依存関係に基づいて、命令ストリーム内の各命令の処理回路への送信を順序付けるための追跡回路とを備え、追跡回路は、バリア生成命令に応答して1つ以上の依存関係が1つ以上のバリア依存関係を含むようにし、1つ以上のバリア依存関係において、ストリーム内のバリア生成命令前に発生したバリア前命令は、ストリーム内のバリア生成命令後に発生したバリア後命令が送信される前に送信され、追跡回路は、バリア抑止命令に応答してバリア依存関係を緩和して、ストリーム内のバリア抑止命令後に発生した抑止後命令が、バリア前命令の前に送信されることを可能にする、データ処理装置が提供される。
【0011】
上記の実施形態では、命令ストリーム内のバリア生成命令が、命令内にバリアを生成するために使用される。バリアの前に発生した命令は、バリアの後に現れる命令のうちのいずれかが実行のために送信され得るよりも前に実行(又は、いくつかの実施形態では、完全な実行)のために送信されなければならない。これは、命令に対して特定の順序付けを実施するために使用することができる。これに加えて、命令ストリームにおけるバリア抑止命令を使用して、バリアの効果を制限することができる。特に、バリア抑止命令の後に発生した命令ストリーム内の任意の命令は、バリアによって制限されない。すなわち、たとえ、バリア生成命令の前に発生した命令が実行(又は完全な実行)のために送信される前であっても、バリア生成命令の後に発生した命令が実行(又は完全な実行)のために送信されることを可能にする。この結果、命令の順序付けの柔軟性を、より柔軟にすることができる。バリア抑止命令の後に現れる命令は、バリアの後に発生した命令の前、後、又は更にはそれと並行して実行することができる。これにより、スケジューリングプロセスをより柔軟にすることを可能にし、また、並行した処理が行われ得る程度を増大させる。
【0012】
いくつかの実施形態では、バリア前命令、バリア後命令、及び抑止後命令は、メモリアクセス命令を含む。メモリアクセス命令は、データが記憶されるメモリシステムへのロード命令及びストア命令を含むことができる。
【0013】
いくつかの実施形態では、メモリアクセス命令は永続メモリに対してなされる。永続メモリは、DRAMのバイトアドレス能力をハードディスク及びSSDなどの記憶装置の永続性と組み合わせる。特に、永続メモリは、バイトアドレス指定可能なロード/ストアインターフェースを使用してアクセスすることができ、記憶装置(典型的には、ブロックアドレス指定可能である)内のストレージにアクセスするために必要なソフトウェア層を回避する。しかしながら、DRAMとは異なり、電力の非存在下でも、データを持続させることができる。
【0014】
いくつかの実施形態では、1つ以上の依存関係は、命令間の1つ以上のデータ依存関係を含む。命令は、命令間に依存関係を有し得る。特に、1つの命令がデータを修正し、別の命令がその後、そのデータを読み出す場合、第2の命令は、第1の命令に依存する。すなわち、第2の命令は、第1の命令が行われるまで実行することができない。実際には、これは、第1の命令の前に第2の命令が実行されることを禁止する。
【0015】
いくつかの実施形態では、追跡回路は、1つ以上のエントリを含む待ち行列回路を含み、エントリのそれぞれは命令のうちの1つに対応し、追跡回路は、1つ以上の依存関係を表すために依存関係行列を記憶するための記憶回路を含む。依存関係行列は、命令又はデータ間の関係を表すことができる1つの方法である。例えば、行列内の各列は、命令の待ち行列内の命令のうちの1つを表すことができ、行列内の各列もまたそれらの命令のうちの1つを表す。i行j列の‘1’は、待ち行列内の命令番号iが、待ち行列内の命令番号jに依存することを示す。一方、‘0’はこのような依存関係がないことを示す。行列は、命令が実行されるたびに更新され得る。このようにして、残りの依存関係を有さず、したがって即座に実行することができる命令を特定することが可能である。このような実施形態では、バリア生成命令を待ち行列の一部とすることができる。バリア生成命令は、バリア生成命令が保護する先行する命令に依存させることができ、バリアを受ける後続の命令は、バリア命令に依存させることができる。
【0016】
いくつかの実施形態では、追跡回路は、新しい命令を受信したことに応答して、前のバリア生成命令及び前のバリア抑止命令を見つけるために待ち行列回路を探索するように適合されており、前のバリア生成命令が見つかって前のバリア抑止命令が見つからない場合、バリア依存関係は、バリア前命令が送信されるまで、新しい命令の送信を抑止するために追加され、前のバリア生成命令が見つかって前のバリア抑止命令が見つかった場合、追跡回路は、バリア依存関係の追加を抑止する。バリア及び抑止命令の記録は保持される。この結果、新しい命令に遭遇したとき、バリア命令が適用されるか(バリア命令が見つかって抑止命令が見つからない場合)否か(バリア命令及び抑止命令が両方とも見つかった場合)を判定することが可能である。命令が見つからない場合は明らかに、適用されるバリアは存在しない。一方、バリア命令が見つからないときに見つかった抑止命令は、一般に効果を有さない。
【0017】
いくつかの実施形態では、追跡回路は、ロードストア待ち行列である。ロードストア待ち行列は、メモリ階層にアクセスするために使用されるメモリフェッチユニットの一部であり得る。他の実施形態では、追跡回路は、異なるタイプの命令を処理する発行回路であってもよい。
【0018】
いくつかの実施形態では、データ処理装置は、命令のうちの少なくとも一部のトランザクションを記憶するためのトランザクション回路と、トランザクションに基づいて、命令の実行前に対応する処理回路の以前の状態を復元するためのロールバック回路とを備える。このような実施形態では、命令のグループが、トランザクションを形成するために組み合わされ得る。トランザクションでは、全ての命令が成功裏に完了するか、又はどれも完了しないかのいずれかである。このようなプロセスは、単一の命令の失敗がデータ処理装置をトランザクション開始前に「ロールバック」させる状態で命令の実行を試みることによって行うことができる。これは、トランザクション回路が、トランザクションを形成する命令によってデータ処理装置の状態がどのように変更されるかを追跡するログ(例えば、取消ログ)を維持することによって達成され得る。トランザクションが失敗したと見なされる場合、ロールバック回路はデータ処理装置の状態を復元するためにログを使用する。トランザクションが成功したと見なされる場合、ログは削除することができる。
【0019】
いくつかの実施形態では、追跡回路は、バリア生成命令とバリア抑止命令との間の命令のうちの少なくとも一部を、順序不同で処理回路に送信するように適合されている。ここで、「順序」とは、命令が命令ストリームに列挙される順序を指す。したがって、命令ストリームは命令をA、B、C、Dの順序にリストし得るが、データ処理装置は、命令をA、C、D、Bの順序で実行することができる。命令が実行され得る順序は、それらの命令間の依存関係に依存する。バリア生成及び抑止命令の使用により、特定の依存関係を過度に拡張することなくそれらの依存関係を実施することが可能である。したがって、バリア生成命令のみが存在する状況と比較して、命令の順序付け変更が行われ得る程度について、より大きい柔軟性を有することが可能である。
【0020】
いくつかの実施形態では、処理回路は複数の処理回路を含み、追跡回路は、バリア生成命令とバリア抑止命令との間の命令のうちの少なくとも一部を、処理回路のうちの異なる処理回路に送信するように適合されている。したがって、バリア抑止命令によって生成された依存関係の制限は、命令のグループが並行して実行され得るようになされてもよい。比較すると、バリア生成命令のみが存在する場合、依存関係は行われ得るが、並列化はより制限され得る。例えば、バリア抑止命令によって抑止後命令がバリア前命令から「解放」されることが可能である場合、抑止後命令は、例えば、バリア前命令と並行して実行され得る。
【0021】
いくつかの実施形態では、1つ以上のバリア依存関係は、所定のタイプの命令の依存関係である。このようにして、バリア生成命令によって生成されたバリアは所定のタイプの命令にのみ適用することができ、一方、他の命令はバリア生成命令又はバリア抑止命令に対する位置関係にかかわらず、実行されることを可能にし得る(又は実行のために送信され得る)。
【0022】
いくつかの実施形態では、所定のタイプは、永続的メモリに対してなされるメモリアクセス命令を含む。したがって、他のタイプの命令(例えば、メモリアクセス命令)は、バリアを自由に無視することができる。いくつかの実施形態では、他のタイプの命令は、データ依存関係などの他の依存関係によって依然として制限され得る。
【0023】
いくつかの実施形態では、データ処理装置は、命令ストリーム内の命令のうちの少なくとも一部の投機的実行を行うように適合されており、追跡回路は、投機的実行される命令の1つ以上のバリア依存関係にかかわらず、投機的実行される命令を処理回路に送信するように適合されている。投機的実行は、いくつかの命令が実行されるべきかどうかを知る前にそれらの命令が実行される技術である。例えば、分岐予測は、分岐命令において、実行されたときに分岐が進む方向に関する予測がなされる機構である。その時点で、分岐の予測された経路における命令は、分岐が解決される時などまで実行が継続される。予測が正しかった場合には、データ処理装置のストールが行われることを必要とせずに分岐の解決がなされる。一方、予測が誤っていた場合、推測の命令の実行は、「ロールバック」を介して取り消すことができ、この場合、データ処理装置は、継続前に分岐が実行されるのを待たなければならない場合の位置と同じ位置にある。このような実施形態では、命令が投機的実行されるとき、命令がバリアを無視することを可能にし得る。
【0024】
いくつかの実施形態では、命令ストリームはまた、境界生成命令を含み、追跡回路は、境界生成命令に応答して1つ以上の依存関係が1つ以上の境界依存関係を含むようにし、1つ以上の境界依存関係において、ストリーム内の境界生成命令前に発生した境界前命令は、ストリーム内の境界生成命令後に発生した境界後命令が送信される前に送信される。バリア抑止命令によって抑止され得るバリアとは対照的に、境界は、このような対応する抑止命令を有さない。結果として、境界の前の命令のうちの少なくとも一部(いくつかの実施形態では、全ての命令)は、境界に後続するいずれの命令の前に発行又は実行される。
【0025】
いくつかの実施形態では、境界前命令及び境界後命令は、メモリアクセス命令を含む。メモリアクセス命令は、データが記憶されるメモリシステムへのロード命令及びストア命令を含むことができる。
【0026】
いくつかの実施形態では、メモリアクセス命令は、永続メモリに対してなされる。永続メモリは、DRAMのバイトアドレス能力をハードディスク及びSSDなどの記憶装置の永続性と組み合わせる。特に、永続メモリは、バイトアドレス指定可能なロード/ストアインターフェースを使用してアクセスすることができ、記憶装置(典型的には、ブロックアドレス指定可能である)内のストレージにアクセスするために必要なソフトウェア層を回避する。しかしながら、DRAMとは異なり、電力の非存在下でも、データを持続させることができる。
【0027】
いくつかの実施形態では、1つ以上の境界依存関係は、境界前命令のサブセットが境界後命令の前に送信されることを必要とする。したがって、境界命令は、境界前の全ての命令が、境界に後続するいずれの命令が実行(又は発行)され得る前に、実行(又は発行)されることを必ずしも必要としない。
【0028】
いくつかの実施形態では、命令ストリームは、複数のバリア抑止命令を含み、複数のバリア抑止命令のそれぞれは、命令のサブセットを含むストランドを画定し、ストランドのそれぞれは、関連付けられた識別子を有し、境界生成命令は、関連付けられた識別子を有し、境界依存関係が関連する境界前命令は、ストランドの関連付けられた識別子が境界生成命令の関連付けられた識別子と一致するストランド内にある。したがって、バリア抑止命令は、ストランド、つまり、特定の順序付けが課され得るがいくつかの他のストランドに対しては独立して実行され得る一連の命令を画定することができる。各ストランドは、関連付けられた識別子(例えば、バリア抑止命令において識別される)を有することができる。これは、例えば、色であってもよい。また、境界生成命令はまた、識別子を有することができる。識別子が一致するこれらストランドは、境界に後続する命令が発行/実行される前に発行/実行される。他の実施形態では、識別子は排他的であってもよく、それによって、指定された識別子を欠くスレッドは、境界に後続する命令の前に発行/実行されることが必要とされる。
【0029】
いくつかの実施形態によれば、データ処理装置であって、アトミック範囲を含む複数の入力命令を受信するための入力回路と、入力命令に対応する出力命令を提供するための出力回路と、入力命令を出力命令に変換するための変換回路とを備え、アトミック範囲は、入力命令のサブセットを画定し、その中において、実行中に、サブセット内の命令のうちの1つが実行できない場合、入力命令のサブセットはリワインドされ、変換回路は、アトミック範囲内のアトミック命令について、アトミック命令によって引き起こされた状態変更のログを記録するためのログ命令と、バリア生成命令と、アトミック命令に一致する、対応する命令と、バリア抑止命令とを生成する、データ処理装置が提供される。
【0030】
プログラム内で、アトミックセクションは、全ての命令が成功裏に完了するか、又はどれも完了しないかのいずれかであるコードのセクションであると考えることができる。実際には、このような命令は、命令が「ロールバック」され得るような方法で実行されることが一般的である。したがって、命令のうちの1つが失敗した場合には、全ての命令が元に戻される。上記の実施形態では、コードのアトミックセクションは、上述のバリア生成命令及びバリア抑止命令の使用によって実装される。特に、アトミックセクション内の各命令について、ログ命令が出力される。ログ命令は、その命令が「リワインド」されるために必要な情報を提供する。バリア生成命令が後続し、アトミック命令に一致する命令がこれに後続する。この結果、ログ命令が実行されてから、命令が実行されることを可能にする。換言すれば、命令を元に戻すために必要なデータが記憶されてから、命令は実行される。次いで、後の命令が同様に制限されないように、バリア抑止命令が後続する。このシーケンスがアトミック範囲内の複数の命令について繰り返される場合、各命令を取り消すのに必要なデータが記憶されてから、その命令は実行される。しかしながら、アトミックブロック内の命令の順序付けは、バリアによって実施されない。
【0031】
いくつかの実施形態では、変換回路はまた、アトミック命令について、境界生成命令と、1つ以上のクリーンアップ命令とを生成する。すなわち、各アトミックセクション命令について、境界生成命令及び1つ以上のクリーンアップ命令が生成される。このようにして、クリーンアップ命令は、先行する命令が、例えば、アトミック動作が処理された後に処理された結果として、発行又は実行される。例えば、データを消去し得る又は情報をリセットし得るクリーンアップ命令は、実行される前に以前の命令が処理されることを必要とする。
【0032】
いくつかの実施形態では、1つ以上のクリーンアップ命令は、アトミック命令の完了のログを記録するための更なるログ命令を含む。クリーンアップ命令の多くの例が存在する。しかしながら、これらの実施形態では、クリーンアップ命令は、アトミック動作が完了したことを示すためのメッセージを含む。
【0033】
いくつかの実施形態では、アトミック命令は、データ処理装置の一部の以前の状態を新しい状態に変更し、ログ命令は、データ処理装置の一部の以前の状態を記憶する取消ログ命令である。取消ログはその状態が変更される前の状態を記憶する。例えば、レジスタの値は、そのレジスタの値が変更される前に、取消ログに保存される。したがって、ログ命令は、状態の古いバージョンのログを記録(又は保存)することにより、必要に応じてその古い状態を復元することができる。他の実施形態では、再実行(redo)ログなどの他の技術を使用することができる。
【0034】
いくつかの実施形態では、アトミック命令はメモリアクセス命令である。
【0035】
いくつかの実施形態では、メモリアクセス命令は、永続メモリに対してなされる。前述のように、永続メモリは、電力の非存在下でもコンテンツを維持することができる(DRAMと同様に)バイトアドレス指定可能なメモリであると考えることができる。
【0036】
ここで、図を参照して特定の実施形態を説明する。
【0037】
図1は、いくつかの実施形態に係るデータ処理装置100を示す。フェッチャ110は、複数の命令を含む命令ストリームの取得を担う。ストリーム内の命令のうちの1つ以上は、メモリからロード又は記憶するメモリアクセス命令であってもよい。フェッチャ110によってフェッチされる命令は、それらの命令に一致する1つ以上の制御信号を生成するために、復号器120に渡される。そこから、復号された命令は、スケジューリングを担う発行者130に渡される。この例では、発行者130は、メモリ階層に送信されるメモリアクセス命令の処理を担うロード/ストアユニット140に(復号された)命令を発行することが示されている。しかしながら、発行者130は、演算論理ユニット(Arithmetic Logic Unit:ALU)、及びフローティングポイントユニット(Floating Point Unit:FPU)などの他の実行ユニットに(復号された)命令のうちの一部を発行することができる。
【0038】
この例では、ロード/ストアユニット140は、発行者130によって送信され復号された命令を追跡する待ち行列160を含む。この例では、待ち行列160は、ロード命令(LD)、後続のストア命令(ST)、後続のバリア生成命令(PB)、後続のストア命令(ST)、後続のバリア抑止命令(SB)、後続の最終ストア命令(ST)を含むように示されている。矢印は、依存関係を示すために、待ち行列160のエントリ間に示されている。この例では、第4の命令は、バリア生成命令に対する依存関係を有することが示されている。同様に、最終の命令は、バリア生成命令に対する依存関係を有することが示されている。バリア生成命令(PB)は、待ち行列160内の将来の命令をバリア生成命令(PB)に依存させる。これは、バリア抑止命令(SB)に遭遇する前に、後の命令に適用される。バリア抑止命令の後に(かつ、いずれの更なるバリア生成命令の前に)遭遇する命令は、このような依存関係を有さない。これらの命令がバリア生成命令に対する依存関係を既に有する場合、依存関係は(図1に示されているように)除去される。最終的に、バリア生成命令がもはやそれに対するいかなる依存関係も有さず、バリア抑止命令が行われた場合、バリア生成命令は、(また図1に示されているように)待ち行列から除去される。
【0039】
命令間の依存関係は複雑であり得、記憶回路150は、依存関係を記憶するために提供される。この例では、命令に関する依存関係が示されている。しかしながら、命令自体だけでなく、命令によって使用されるデータ項目にも依存関係が存在し得る。
【0040】
バリア生成命令及びバリア抑止命令の両方を使用する技術は、不要である場合には命令の特定の順序付けの実施を拡張することなく、その順序付けを実施することが可能である。更に、順序付けの実施は、他の命令が柔軟に実行され得るようになされる。これは、図4に関してより詳細に示されている。
【0041】
図2は、データ処理装置100の変形例200を示す。この装置では、永続メモリに発行されるメモリアクセス命令に関して、第2のロード/ストアユニット210が設けられている。永続メモリは、(DRAMと同様の)バイトアドレス指定可能メモリであるが、(ハードディスク又はSSDの形態での記憶と同様に)メモリから電力が除去されたときにコンテンツが失われないように動作する。ロード/ストアユニット210には、それ自体の待ち行列230内に記憶された命令に対する依存関係を記憶するためのそれ自体の記憶回路220が設けられている。二重のロード/ストアユニット140、210を使用する結果として、ロード/ストアユニット140、210のうちの一方におけるバリア命令又はバリア抑止命令は、ロード/ストアユニット140、210のうちの他方のメモリアクセス命令に効果を及ぼさない。例えば、メモリのためのロード/ストアユニット140内のバリア生成命令は、第2のロード/ストアユニット210によって処理され永続メモリに送信されるメモリアクセス命令がそれに依存する必要がない。
【0042】
同様の技術が、また、別個のフィールドが使用されて各メモリアクセス命令の宛先(例えば、永続メモリ又は他のメモリへ)を示す単一のロード/ストアユニット140を使用して実装され得ることが理解されよう。このようにして、また、バリア生成命令及びバリア抑止命令を、特定のタイプのメモリに送信されるメモリアクセス命令に制限し得る。
【0043】
図3は、依存関係を表すことができる方法を示す。図3aは、それぞれが対応する依存関係を有する8つの命令のシーケンスを示す。特に、依存関係は、データ依存関係によって生成される。すなわち、例えば、第3の命令は、値とレジスタR1及びR2との間で加算を行い、R3内に値を記憶する。しかしながら、この命令は、メモリ位置xからの値が命令1におけるレジスタR1にロードされ、かつメモリ位置yの値が命令2におけるレジスタR2内に記憶されるまで、完了できない。この結果、命令3は、命令1及び2の実行が行われることに依存する。
【0044】
図3bは、これらの依存関係を依存関係行列の形態で表すことができる方法を示す。依存関係行列は、実行される命令の数に等しいサイズの正方形行列である。いずれの特定の行も、命令の依存関係を表し、列は、依存関係が該当し得る命令を表す。例えば、列i、行jの値は、命令jに対する命令iの依存関係の存在を表す。「1」は、このような依存関係が存在することを示し、「0」は依存関係の欠如を示す。例えば、先に説明したように、命令3は、命令1及び命令2に依存する。この結果、「1」が行3の列1及び列2に存在する。同様に、命令番号7は、命令番号6に依存する。この結果、「1」が行7列6に見つかる。
【0045】
バリア生成及びバリア抑止命令によって生成された依存関係を追跡する目的上、バリア抑止命令(SB)は、後方に追跡されるそれらの依存関係を断つことに留意されたい。この結果、依存関係行列は、バリアに関する依存関係を追跡するときは、行列の左下半分についてのみ完了させる必要がある。
【0046】
説明されたアーキテクチャを用いて、図4は、命令のうちの一部間の順序付けを維持しながら、スケジューリングの柔軟性を増大させるために、バリア生成命令及びバリア抑止命令をどのように使用することができるかを示す。
【0047】
図4aは、連続的に順序付けられた4つの命令A、B、C、Dを示す。
【0048】
図4bは、バリア生成命令(PB)及びバリア抑止命令(SB)が挿入された、同じ4つの命令A、B、C、Dを示す。命令Aと命令Bとの間のバリアの挿入は、命令Bが発行され得る(又は実行され得る)前に命令Aが発行される(又は実行される)まで命令Bが待つことを必要とする。しかしながら、後続のバリア抑止命令は、バリアがバリア抑止命令後の命令へ拡張されないことを意味する。この結果、命令C及び命令Dは、継続前に命令A又はBの完了を待つ必要はない。同様に、命令Cと命令Dとの間のバリアの挿入は、命令Dが命令Cを待たなければならないことを意味する。また、バリア抑止命令の存在は、この同じ要件が後の命令へ拡張されないことを意味する。したがって、これにより、命令Aが命令Bの前に発生しなければならず、命令Cが命令Dの前に発生しなければならないという時間的順序付けが提供される。
【0049】
これは、図4cに示されているスケジューリングをもたらす。特に、AとBとの間に、かつCとDとの間に順序付けの実施が存在するが、このような順序付けは、CとA若しくはBの間、又はDとA若しくはBとの間に実施されない。この結果、命令C及び命令Dは、命令A及び命令Bに対して任意の時間で発生することができる。
【0050】
バリア抑止命令が提供されない状況とは対照的に、これにより、より大きい柔軟性がもたらされる。例えば、バリア抑止命令が存在しなかった場合、命令B、C、及びDのそれぞれは、命令Aが完了するまで待たなければならない。したがって、命令のスケジューリングが可能である程度は、バリア生成命令及びバリア抑止命令によって拡張される。命令Dと命令Cとの間のバリア生成命令は、命令Cが完了するまで命令Dが待たなければならないことを意味することに留意されたい。しかしながら、バリア抑止が命令Cの直前に発生するため、バリアは、命令Cよりも早くには拡張されない。すなわち、命令Dは、命令A、B、及びCが完了するまで待つ必要がない。
【0051】
図5は、この技術が、アトミックセクションを有する入力コード510を出力コード550に変換するためにどのように適用され得るかを示す。例えば、入力コードはソースコードであってもよく、出力コード550はアセンブリであってもよい。入力コード510は、入力回路520によって受信され、入力回路520はコードを変換回路530に渡す。変換回路530は、入力コード510を出力コード550に変換し、次いで出力コード550を出力回路540に渡し、出力回路540は出力コード550を出力する。入力コード510は、アトミックセクションを含む。コードのアトミックセクションは、その中に含まれる命令のそれぞれが全て実行されるか、又は全く実行されないコードのセクションである。すなわち、アトミックセクションの一部のみが実行されてアトミックセクションが終了することは可能でない。これは、アトミックセクション内の命令のうちの1つが失敗した場合にアトミックセクション内の命令を元に戻すことができるように、アトミックセクション内の命令のそれぞれを追跡することによって達成することができる。
【0052】
この例では、アトミックセクションは、位置A内に値5を記憶し、位置(例えば、メモリアドレス)B内に値7を記憶し、これはキャッシュ内に記憶される可能性が高い。変換回路530は、これを以下のように変換する:最初に、位置Aの現在値のログが位置Gに記録される。次いで、命令dc.cvapによって位置Gが(例えば、永続メモリへ)フラッシュされる。次いで、命令PBを介してバリアが行われる。これは、(バリア抑止命令に遭遇するまで)遭遇する更なる命令は、ログ命令及びフラッシュ命令が実行されてからのみ実行され得ることを意味する。次の命令は、位置A内に値5を記憶し、それによって位置Aに以前の値を上書きするストア命令である。これはアトミック命令のうちの最初のアトミック命令であることに留意されたい。バリアにより、この命令は、Aの古い値が位置G内に記憶され、次いで永続メモリにフラッシュされてからのみ行われ得る。換言すれば、値5は、位置Aの古い値が記憶され、それによってそれが必要に応じて復元されることを可能としてから、位置A内に記憶され得る。次いで、バリア抑止命令が行われる。これは、更なる命令が、進行前に、初期ログ及びフラッシュ命令が実行されることを必要としないことを意味する。次いで、位置Bの現在値を位置H内に記憶するために更なるログ命令が提供される。更なるフラッシュ命令は、位置Hの値を(例えば、また、永続メモリへ)フラッシュし、更なるバリア生成命令が提供される。位置B内に値7を記憶するストア命令がこれに後続し、バリア抑止命令がこれに後続する。この結果、位置B内の値7の記憶は、位置Bの以前の値が位置H内に記憶され永続メモリにフラッシュされたときにのみ行われ得る。換言すれば、位置B内の値7の記憶は、位置Bの以前の値が記憶されてからのみ、参画するようにコミットされ、それによって、それが必要に応じて復元されることを可能にする。バリア生成命令の存在は、両方の場合において、アトミック命令の両方が必要に応じて取り消され得るように、十分な情報が記憶されることを意味する。しかしながら、バリア抑止命令は、順序付けが実施される程度が制限されることを意味する。換言すれば、値7を位置B内に記憶させる命令は、場所Bの古い値が記憶されフラッシュされることに依存するが、この命令が値5の位置A内の記憶前に行われなければならないことは実施されない。この結果、それらの命令の順序を変更することを可能にしつつ、アトミックセクションの機能が提供される。したがって、値7の位置Bへの第2の記憶命令は、第1の命令が位置A内に値5を記憶する前に行われ得る。実際に、両方の命令が、例えば複数の処理回路上で同時に行われることも可能である。
【0053】
図6は、図5に示されている出力コード550が実行され得るデータ処理装置600を示す。装置600は、中央処理装置(CPU)610を含む。CPU610は、レベル1キャッシュ630、レベル2キャッシュ640、メインメモリ(例えば、DRAMによるバックアップ)、及び永続メモリ660を含むメモリ階層を使用する。出力コード550内のdc.cvap命令によって行われるデータのフラッシュは、例えば永続メモリ660にデータを書き込ませる。コードのアトミックセクションが中止されロールバックされなければならないと判定すると、CPU610の一部としてロールバック回路620が設けられる。ロールバック回路620は、永続メモリ660にフラッシュされたデータを取得し、データをレベル1キャッシュ630に戻す。このようにして、レベル1キャッシュ630で記憶されたデータの古い値が復元される。
【0054】
図7は、バリア生成命令、バリア抑止命令、メモリアクセス命令などの他の命令、及びそれらの間の様々な依存関係を処理するプロセスを示すフローチャート700を示す。
【0055】
ステップ710で、新しい命令が受信される。ステップ720において、受信した命令のタイプが判定される。ステップ720で、命令がバリア生成命令であると見なされる場合、ステップ730で、バリアが待ち行列160内に記憶される。次いで、プロセスは、次の命令が受信される710に戻る。720において、命令がバリア抑止命令であると判定された場合、ステップ740において、抑止命令が待ち行列160内に記憶される。ステップ750において、既に追加された(すなわち、命令ストリームでバリア抑止命令の後に現れる)後の命令に対するいずれの依存関係も、前のバリアに対するそれらの依存関係が削除されている。次いで、プロセスは、次の命令が受信されるステップ710に戻る。ステップ720で、命令が別のタイプ(例えば、メモリアクセス命令)であると見なされる場合、ステップ760で、命令は待ち行列160内に記憶される。ステップ770で、待ち行列160が後方にスキャンされる。ステップ780では、遭遇した命令のタイプが考察される。命令が待ち行列160の先頭にある場合、又は遭遇した命令が抑止命令である場合、プロセスは、新しい命令が受信される710に戻る。命令のタイプがバリア命令である場合、ステップ790で、依存関係が、新たに追加された命令からバリアへ追加される。次いで、プロセスはまたステップ710に戻る。そうでなければ、命令が別のタイプである場合、スキャンプロセスがステップ770で繰り返され、次の最前の命令がステップ780で考察される。
【0056】
この結果、バリア及びバリア抑止命令は、両方とも待ち行列内に記憶される。他の命令が追加される場合、遭遇した直近の命令のタイプがバリアであるかどうかが判定され、バリアである場合、バリアに対する依存関係が追加され、又は、抑止命令である場合、依存関係は追加されない。同様に、待ち行列の先頭に到達し、バリア又は抑止命令のいずれも見つからない場合には、依存関係は追加されない。バリア及び抑止命令の両方を待ち行列から除去することができるいくつかの方法が存在する。特に、バリアは抑止命令に遭遇する時まで除去できない。これは、任意の将来の命令が、その追加されたバリアに対する依存関係を有し得るためである。抑止命令が加えられてから、更なる命令がバリアに依存がない場合、バリアを除去することができる。そのとき、バリアを抑止した抑止命令も除去することができる。
【0057】
このプロセスは、命令が待ち行列(例えば、図1の待ち行列160)内に記憶される順序で各命令が発行されると仮定することに留意されたい。そうではない場合、待ち行列の先頭に遭遇するまで、又は以前のバリア抑止命令に遭遇するまで、依存関係をバリア命令から全ての先行する命令へ追加することが必要である。このようにして、バリアは、更なる命令が発行(又は実行)され得る前に、以前の命令を(バリア抑止命令又は待ち行列の先頭に遭遇するまで)発行(又は実行)させる)。
【0058】
図8は、フローチャートの形態で、推測を伴い得る命令の発行を処理するためのプロセスを示す。ステップ810において、どの命令が次に発行されるかが判定される。ステップ820は、保留中のバリア、特に、この命令が実行されることを妨げる、抑止されていないバリアが存在するかどうかを判定する。存在しない場合は、ステップ830で命令が発行され、プロセスはステップ810に戻る。存在する場合、ステップ840において、命令がメモリアクセス命令であるか否かを判定する。命令がメモリアクセス命令ではない場合、ステップ860において、プロセスは、バリアに対する依存関係が解消されるまで、すなわち、依存関係が除去されるまで、又はバリアが除去されるまで待つ。次いで、プロセスは、命令が発行されるステップ830に進む。命令がメモリアクセス命令である場合、ステップ850において、推測が使用されているかどうかが判定される。推測は、命令が実行されるべきかどうかを知る前に命令を実行することができる技術である。このような状況は、分岐命令において分岐がどちらの方向に(又はどこに)進むか(分岐が評価されるまで)明確でない場合に生じ得る。分岐が解決されるのを待つのではなく、その位置で予測がなされ、命令は実行を開始する。予測が誤りであったことが判明した場合、誤って実行された命令は、リワインドすることができ、パフォーマンスへの影響はない又は僅かである。したがって、本ケースでは、推測の目的上、バリアに対する依存関係を無視することが可能であり得る。したがって、ステップ870において推測が発生した場合、命令は、必要に応じて命令がリワインド及び/又は再生され得るように追跡される。次いで、プロセスは、実行のために命令が発行されるステップ830に進む。このようにして、命令の順序付けは、アーキテクチャレベルでのみ維持される必要がある。
【0059】
図9aは、連続的に順序付けられた4つの命令A、B、C、Dを示す。
【0060】
図9bは、バリア生成命令(PB)、バリア抑止命令(SB)、及び境界生成命令(QB)が挿入された、同じ4つの命令A、B、C、Dを示す。前述のように、命令Aと命令Bとの間のバリアの挿入は、命令Bが発行され得る(又は実行され得る)前に、命令Aが発行される(又は実行される)まで命令Bが待つことを必要とする。しかしながら、命令Cは、同じ制限を受けておらず、命令A及び命令Bのいずれかに対して任意の時間で実行することができる。この例では、境界の存在は、命令Dが発行又は実行され得る前に、これらの命令(A、B、及びC)の全てが発行(又は実行)されるまで、命令Dが待つことを必要とすることを意味する。換言すれば、「ストランド」(ボックスとして示されている)が互いに対してどのようにスケジュールされ得るかについて柔軟性を可能とする通常のバリア生成命令とは対照的に、境界生成命令は、以前のストランドが発行(又は実行)される前に、境界の後のストランドが発行(又は実行)されることを禁止する。
【0061】
これは、図9cに示されているスケジューリングをもたらす。特に、AとBとの間に順序付けが実施され、一方、命令Cは、これらの命令に対して自由に実行することができる。しかしながら、命令A、B、及びCのそれぞれは、命令Dが発行される(又は実行される)前に、発行(又は実行)されるように順序付けられている。したがって、境界生成命令は、複数の「ストランド」の以前の命令が、プログラムが更に進む前に、発行される(又は実行される)ことを必要とすることによって、スケジューリングにおける更なる柔軟性を提供する。
【0062】
上記の例は単一の境界のみを示すが、当然のことながら、複数の境界を使用することが可能である。各ケースにおいて、1つの境界の前の命令は、その境界に後続する命令の前に実行される。
【0063】
図10は、図9a、図9b、及び図9cの4つの命令A、B、C、Dがどのようにスケジュールされるかを示す。図10のアーキテクチャは、永続メモリ(例えば、永続ストア、及びバリア)に影響を及ぼす命令の待ち行列を記憶する持続性待ち行列を使用する。持続性待ち行列は、例えば、ロード/ストアユニットに沿って位置してもよく、又は、例えば、ロード/ストアユニットの一部を形成することができる。加えて、いくつかのストランドバッファが設けられている。各ストランドバッファは、特定のストランドについての命令を管理する。この実施形態では、同時に実行できるストランドの数は、利用可能なストランドバッファの数によって制限される。ステップ1では、dc.cvap(A)が持続性待ち行列内のエントリに付加され、前の持続性依存関係がないため、ストランドバッファユニットに直線的に発行される。現在のバッファインデックス(例えば、現在のアクティブなストランド0の数は0であるため、dc.cvap(A)はストランドバッファ0へ追加される。ステップ2において、dc.cvap(A)が発行される。ステップ3では、持続的バリア(PB)及びdc.cvap(B)がストランドバッファ0に付加され、dc.cvap(B)は、ストールし、先行する持続的バリア(及びdc.cvap(A))が完了するのを待つ。ステップ4において、バリア抑止命令SBは、現在のバッファインデックスを1に更新することによって、新しいストランドを生成する。この結果、後続の命令dc.cvap(C)はストランドバッファ1に付加される。ステップ5では、dc.cvap(C)は、ストランドバッファ1内で持続的バリアからの依存関係を有さないため、dc.cvap(C)はdc.cvap(A)と同時に発行される。ステップ6において、ストランドバッファユニットは、dc.cvap(A)の完了を受信し、動作は完了する。ステップ7では、dc.cvap(A)及び持続的バリアが完了すると、dc.cvap(B)の順序付け依存関係が解決され、発行される。ステップ8において、境界生成命令QBは、dc.cvapsの完了前までdc.cvap(D)の発行をストールする。ステップ9で、持続性待ち行列がdc.cvap(A)、dc.cvap(B)、及びdc.cvap(C)の完了確認応答を受信すると、境界生成命令が完了し、dc.cvap(D)がストランドバッファユニットに発行される。
【0064】
バリア生成命令及びバリア抑止命令と同様に、上記の順序制約を実施するために、境界生成命令に対して依存関係を生成することができるいくつかの方法が存在する。
【0065】
図11は、バリア生成命令(PB)、バリア抑止命令(SB)、及び境界生成命令(QB)を含む命令を実行するのに好適な装置1100を示す。装置1100は、図1の装置100、フェッチャ110、復号器120、発行者130、ロード/ストアユニット140、及び記憶回路150に類似する、フェッチャ1110、復号器1120、発行者1130、ロード/ストアユニット1140、及び記憶回路1150を備える。待ち行列1160は、バリア生成命令(PB)、バリア抑止命令(SB)、及び境界生成命令(QB)を含むが、同じ装置1100を使用してこれら3つの命令のサブセットを実行することができることが理解されよう。待ち行列1160では、これらの3つの命令のインスタンスは、ロード(LD)及びストア(ST)命令などのメモリアクセス命令で散在される。この例では、境界生成命令(QB)後のストア命令(ST)は、境界生成命令(QB)に依存してなされる。境界生成命令(QB)自体は、以前の命令のそれぞれに対する依存関係を有し得、したがって、それらの命令が送信されたときに待ち行列から除去され得る。代替的に、ロード/ストアユニット1140の管理プロセスは、待ち行列1160内に以前の要素が存在しなくなってから、(前の命令が待ち行列内で再順序付けできないならば)境界生成命令(QB)が除去されるようになされてもよい。いずれの場合も、この結果は、境界生成命令(QB)が除去されるまで境界生成命令(QB)の後の命令が実行できないが、次にこれは、以前の命令が除去されるまでは発生しない。これは、境界生成命令(QB)前の命令が送信(例えば、発行又は実行される)まで、境界生成命令(QB)後の命令が遅延するという効果を有する。
【0066】
図12は、この技術が、アトミックセクションを有する入力コード1210を出力コード1250内に変換するためにどのように適用され得るかを示す。図は、図5に関して示された例と類似し、同じ入力コード1210及び入力回路1220を使用する。特に、図12に示されている例は、境界生成命令の使用を示す。変換回路1230によって生成され、出力回路1240によって出力される出力コード1250の最終部分は、境界生成命令を含み、場所I内にテキスト「done」を記憶するための命令が後続する。境界生成命令の存在は、この記憶命令が、以前の命令が発行/実行されるまで発行/実行されないことを意味する。この結果、アトミック動作が発行/実行されるまで、テキスト「done」の記憶は実施されない。
【0067】
図13は、バリア生成命令、バリア抑止命令、境界生成命令、及びメモリアクセス命令などの他の命令、並びにそれらの間の様々な依存関係を処理するプロセスを示すフローチャート1300を示す。
【0068】
ステップ1310において、新しい命令が受信され、抑止命令フラグ(待ち行列1160を介してスキャンしている間にバリア抑止命令に遭遇したかどうかのインジケータ)が偽に設定される。ステップ1320において、受信した命令のタイプを判定する。ステップ1320で、命令がバリア生成命令又は境界生成命令であると見なされる場合、ステップ1330において、(適切であるように)バリア又は境界が待ち行列1160内に記憶される。次いで、プロセスは、次の命令が受信される1310に戻る。1320において、命令がバリア抑止命令であると判定された場合、ステップ1340において、抑止命令は待ち行列1160内に記憶される。ステップ1350では、既に追加された命令(すなわち、命令ストリームにおけるバリア抑止命令の後に現れる)に対するいずれの依存関係も、前のバリアに対するそれらの依存関係を削除している。次いで、プロセスは、次の命令が受信されるステップ1310に戻る。ステップ1320で、命令が別のタイプ(例えば、メモリアクセス命令)であると見なされる場合、ステップ1360で、命令は待ち行列1160内に記憶される。ステップ1370で、待ち行列1160が後方にスキャンされる。ステップ1380では、遭遇した命令のタイプが考察される。命令が待ち行列1160の先頭にある場合、プロセスは、新しい命令が受信される1310に戻る。次いで、ステップ1386において、命令のタイプがバリア又は境界命令である場合、ステップ1386では、抑止命令フラグが真であると判定される。そうでない場合、ステップ1390で境界/バリアに対する依存関係が追加され、プロセスはステップ1310に戻り、新しい命令を処理する。ステップ1386において、抑止命令フラグが真に設定された場合、ステップ1388において、命令のタイプがバリア命令であるかどうかが判定される。そうでない場合(例えば、命令は境界命令である)場合、プロセスは、前述のようにステップ1390に進む。さもなければ、プロセスは単にステップ1310に戻る。ステップ1386、1388、及び1390の効果は、抑止命令が発見されていない場合、又は境界(バリア抑止命令によって影響を受けない)に遭遇した場合に依存関係が生成されることである。ステップ1380において、別のタイプの命令に遭遇した場合、ステップ1382で、その命令が抑止命令であるかどうかが判定される。そうである場合、ステップ1384で、抑止命令フラグが真に設定される。いずれの場合でも、プロセスは次いで、ステップ1370に戻り、待ち行列1160を介して後方スキャンを継続する。
【0069】
この結果、バリア、バリア抑止命令、及び境界は全て、待ち行列内に記憶される。他の命令が追加される場合、遭遇した直近の命令のタイプが、バリア又は境界であるかどうかを判定し、その場合、依存関係が追加されるか、又は抑止命令。抑止命令の場合、依存関係が追加される前の境界が存在するかどうかが判定される。各シナリオでは、単一の依存関係のみが追加される。バリアが後続する境界を伴う状況では、前の命令(境界に依存)が解決されるまでバリアが除去され得ないため、依存関係は後のバリアに注意を向ければ十分である。
【0070】
バリア、抑止命令、及び境界を待ち行列から除去することができるいくつかの方法が存在する。前述のように、バリアは、抑止命令に遭遇する時間まで除去することができない。これは、任意の将来の命令が、その追加されたバリアに対する依存関係を有し得るためである。抑止命令が加えられてから、更なる命令がバリアに依存しない場合、バリアを除去することができる。そのとき、バリアを抑止する抑止命令も除去することができる。先行する命令が処理されるまで境界を除去することはできない。また、このプロセスは、命令が待ち行列1160内に記憶される順序で命令が発行されると仮定する。そうではない場合、依存関係は、バリア命令から全ての先行する命令へ追加される必要がある。
【0071】
境界命令の場合、境界は、前述の命令の全てに影響を及ぼすと仮定される。しかしながら、実際には、境界をより正確に画定することができる。
【0072】
図14は、ストランドのそれぞれが色の形態の識別子を有する例を示す。色は、新しいストランドを効果的に生成するバリア抑止命令(SB)によって指定することができる。このようにして、命令ストリームは、命令A及び命令Bから構成され命令Bが命令Aを待つことが必要である第1のストランド(青色着色)と、命令C及び命令Dから構成され命令Dが命令Cを待つことが必要である第2のストランド(青色着色)と、命令E及び命令Fから構成され命令Fが命令Eを待つことが必要である第3のストランド(赤色着色)と、命令G及び命令Fから構成され命令Fが命令Gを待つことが必要である第4のストランドとから構成されている。第1、第2、及び第3のストランドは、既に説明した技術を使用して互いに対して自由に実行することができる。しかしながら、この例では、境界生成命令(QB)は、それ自体の識別子(青色)に関連付けられており、したがって、任意の後続の命令発行/実行前に他の青色ストランドを発行/実行する必要がある。したがって、第4のストランドは、発行/実行前に第1及び第2のストランド(青色の両方)を発行/実行するのを待たなければならない。しかしながら、赤色に着色された第3のストランドに対する依存関係は存在しない。したがって、これら2つのストランドは、互いに対して自由に実行することができる。
【0073】
初期ストランドが、バリア抑止命令によって生成されないことに留意されたい。したがって、このストランドは、「全ての着色」に一致すると考えることができ、これはまた、新しいストランドを生成する際にデフォルトとして提供され得る。換言すれば、境界生成命令は、一致する色のストランドを待つか、又は(最初のストランドのような)特別に割り当てられていない色を待つ。
【0074】
このシナリオの依存関係処理は、同様に着色されたストランド内の命令のそれぞれに依存する境界命令(QB)をなすことによって達成することができる。別の実装は、発行/実行されなければならない各色に関連付けられた先行する命令の数をカウントするために、1つの色につきカウンタを有することであり得る。待ち行列の順序に従った復号及び挿入が発生する場合、QB命令が、それが依存すべき以前の命令を見ることができ、それらのストランドバッファが完成するのを待つことができることに留意されたい。
【0075】
図15は、使用できるシミュレータの実装形態を示す。先に説明した実施形態は、当該技術をサポートする特定の処理ハードウェアを動作するための装置及び方法の観点から本発明を実装するが、コンピュータプログラムを使用して実装される本明細書に記載の実施形態に従った命令実行環境を提供することも可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、シミュレータと呼ばれることが多い。シミュレータコンピュータプログラムの種類には、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータが含まれる。典型的には、シミュレータの実装形態は、シミュレータプログラム1510をサポートするホストオペレーティングシステム1520を任意選択で実行するホストプロセッサ1530上で実行されてもよい。いくつかの構成では、ハードウェアと提供される命令実行環境との間に複数のシミュレーション層が存在してもよく、及び/又は、同じホストプロセッサ上で提供される複数の異なる命令実行環境が存在してもよい。歴史的に、合理的な速度で実行するシミュレータの実装形態を提供するためには、強力なプロセッサが必要とされてきたが、互換性又は再利用の理由から別のプロセッサにネイティブなコードを実行したい場合などの特定の状況では、このようなアプローチが正当化される場合がある。例えば、シミュレータの実装形態は、ホストプロセッサのハードウェアではサポートされていない追加機能を有する命令実行環境を提供してもよく、又は異なるハードウェアアーキテクチャに典型的に関連する命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬USENIX Conference、53~63頁に記載されている。
【0076】
特定のハードウェア構築又は機能を参照して実施形態を先に説明してきたが、シミュレーションされた実施形態では、同等の機能は適切なソフトウェア構築又は機能によって提供されてもよい。例えば、特定の回路は、シミュレーションされた実施形態において、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、ソフトウェアのデータ構造としてシミュレーションされた実施形態で実装されてもよい。先に説明した実施形態で参照されているハードウェア要素のうちの1つ又は複数がホストハードウェア(例えば、ホストプロセッサ1530)上に存在する構成では、いくつかのシミュレートされた実施形態は、適切な場合にはホストハードウェアを利用してもよい。
【0077】
シミュレータプログラム1510は、コンピュータ読み取り可能な記憶媒体(非一時的媒体であってもよい)上に記憶されてもよく、シミュレータプログラム1510によってモデル化されているハードウェアアーキテクチャのアプリケーションプログラムインタフェースと同じであるプログラムインタフェース(命令実行環境)をターゲットコード1500(アプリケーション、オペレーティングシステム、ハイパーバイザを含んでもよい)に提供する。したがって、上記のバリア生成及び抑止命令に基づいて、依存関係の生成及び除去を提供する、フェッチャ110、発行者130、及びロード/ストアユニット140(又は、例えば、図11に示されているこれらの他の変形例)の機能を含む、ターゲットコードのプログラム命令は、上述の装置100又は装置1100のハードウェア機能を実際に有していないホストコンピュータ1330がこれらの機能をエミュレートできるように、シミュレータプログラム1310を使用して命令実行環境内から実行されてもよい。
【0078】
上記の説明では、バリア生成命令などの命令間の依存関係を記憶し、このような依存関係を緩和するためにバリア抑止命令に応答するロード/ストアユニットの例が与えられている。しかしながら、このような機能が、キャッシュ内などのメモリ階層内の他の場所に、又はメモリコントローラ内部の読み取り/書き込み待ち行列内でなされることも可能である。このように、用語「命令」は、命令の代わりに生成された動作を表すものとして広く解釈され得る。同様に、このような追跡は、メモリ階層にアクセスするために使用されるものではなく、全ての命令のスケジューリングを処理する発行者の一部とすることができる。
【0079】
本出願において、「ように構成される(configured to)」という用語は、装置の要素が、定義された動作を実施することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは、機能を行うようにプログラムされてもよい。「ように構成される」は、定義された動作を提供するために、装置要素を任意の方法で変更する必要があることを意味しない。
【0080】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義された本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができることを理解されたい。例えば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴によってなされ得る。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15