(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-20
(45)【発行日】2022-06-28
(54)【発明の名称】ペンディング中のロード及びストアの個別トラッキング
(51)【国際特許分類】
G06F 9/30 20180101AFI20220621BHJP
G06F 9/312 20060101ALI20220621BHJP
G06F 9/52 20060101ALI20220621BHJP
【FI】
G06F9/30 330D
G06F9/30 350A
G06F9/312 L
G06F9/312 W
G06F9/52 150B
(21)【出願番号】P 2019546133
(86)(22)【出願日】2018-02-23
(86)【国際出願番号】 US2018019517
(87)【国際公開番号】W WO2018156951
(87)【国際公開日】2018-08-30
【審査請求日】2021-02-22
(32)【優先日】2017-02-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-03-03
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マーク ファウラー
(72)【発明者】
【氏名】ブライアン ディー. エンバーリング
【審査官】漆原 孝治
(56)【参考文献】
【文献】特表2010-522920(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/312
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
システムであって、
メモリサブシステムと、
1つ以上の実行ユニットであって、前記1つ以上の実行ユニットのうち第1実行ユニットは、第1カウンタと第2カウンタとを備える、1つ以上の実行ユニットと、を備え、
前記システムは、
第1スレッドのロード命令が実行されたことを検出したことに応じて、前記第1カウンタをインクリメントすることと、
前記ロード命令がターゲットとするデータが前記メモリサブシステムから読み出されたと判別したことに応じて、前記第1カウンタをデクリメントすることと、
前記第1スレッドのストア命令が実行されたことを検出したことに応じて、前記第2カウンタをインクリメントすることと、
前記ストア命令が完了したという肯定応答をメモリサブシステムから受信したことに応じて、前記第2カウンタをデクリメントすることと、
を行うように構成されており、
前記第1実行ユニットは、所定のカウンタが所定値に等しくなるまで待機する待機命令を実行するように構成されており、
前記所定値は、前記待機命令において指定される、
システム。
【請求項2】
前記所定のカウンタは、前記第1カウンタである、
請求項1のシステム。
【請求項3】
前記待機命令を実行することは、前記第1カウンタが、前記待機命令に含まれる第1の値に等しくなるまで、1つ以上の命令の実行を抑制する、
請求項2のシステム。
【請求項4】
前記所定値は0である、
請求項2のシステム。
【請求項5】
前記所定値は0以外の値である、
請求項2のシステム。
【請求項6】
前記ストア命令のデータが前記メモリサブシステムに書き込まれた場合及び前記データが他のスレッドで見える場合に、前記ストア命令が完了している、
請求項1のシステム。
【請求項7】
前記システムは、実行スレッド毎にカウンタのペアを含む、
請求項1のシステム。
【請求項8】
第1スレッドのロード命令が実行されたことを検出したことに応じて、第1実行ユニットの第1カウンタをインクリメントすることと、
前記ロード命令がターゲットとするデータがメモリサブシステムから読み出されたと判別したことに応じて、前記第1カウンタをデクリメントすることと、
前記第1スレッドのストア命令が実行されたことを検出したことに応じて、前記第1実行ユニットの第2カウンタをインクリメントすることと、
前記ストア命令が完了したという肯定応答を前記メモリサブシステムから受信したことに応じて、前記第2カウンタをデクリメントすることと、
所定のカウンタが所定値に等しくなるまで待機する待機命令を実行することと、を含み、
前記所定値は、前記待機命令において指定される、
方法。
【請求項9】
前記所定のカウンタは、前記第1カウンタである、
請求項8の方法。
【請求項10】
前記待機命令を実行することは、前記第1カウンタが、前記待機命令に含まれる第1の値に等しくなるまで、1つ以上の命令の実行を抑制する、
請求項9の方法。
【請求項11】
前記所定は0である、
請求項9の方法。
【請求項12】
前記所定値は0以外の値である、
請求項9の方法。
【請求項13】
前記ストア命令のデータが前記メモリサブシステムに書き込まれた場合及び前記データが他のスレッドで見える場合に、前記ストア命令が完了している、
請求項8の方法。
【請求項14】
実行スレッド毎にカウンタのペアを維持することを含む、
請求項8の方法。
【請求項15】
メモリサブシステムと、
第1カウンタと第2カウンタとを備える実行ユニットと、を備え、
前記実行ユニットは、
第1スレッドのロード命令が実行されたことを検出したことに応じて、前記第1カウンタをインクリメントすることと、
前記ロード命令がターゲットとするデータがメモリサブシステムから読み出されたと判別したことに応じて、前記第1カウンタをデクリメントすることと、
前記第1スレッドのストア命令が実行されたことを検出したことに応じて、前記第2カウンタをインクリメントすることと、
前記ストア命令が完了したという肯定応答を前記メモリ
サブシステムから受信したことに応じて、前記第2カウンタをデクリメントすることと、
所定のカウンタが所定値に等しくなるまで待機する待機命令を実行することと、
を行うように構成されており、
前記所定値は、前記待機命令において指定される、
装置。
【請求項16】
前記所定のカウンタは、前記第1カウンタである、
請求項15の装置。
【請求項17】
前記待機命令を実行することは、前記第1カウンタが、前記待機命令に含まれる第1の値に等しくなるまで、1つ以上の命令の実行を抑制する、
請求項16の装置。
【請求項18】
前記所定値は0である、
請求項16の装置。
【請求項19】
前記所定値は0以外の値である、
請求項16の装置。
【請求項20】
前記ストア命令のデータが前記メモリサブシステムに書き込まれた場合及び前記データが他のスレッドで見える場合に、前記ストア命令が完了している、
請求項15の装置。
【発明の詳細な説明】
【背景技術】
【0001】
プロセッサは、ロードメモリ動作及びストアメモリ動作のサポートを含み、プロセッサと、プロセッサに接続されたメモリとの間のデータ転送を容易にする。概して、ロードメモリ動作は、メモリ位置からプロセッサへのデータ転送を指定する動作である。メモリ位置は、メモリ階層内の位置を指し、メモリ階層は、1つ以上のキャッシュレベル及び/又は1つ以上のメモリレベルを含む。ストアメモリ動作は、プロセッサからメモリ階層内の位置へのデータ転送を指定する動作である。
【0002】
本明細書に使用される「命令」という用語は、プロセッサによって行われる1つ以上の動作を示す情報を指す。「動作」は、(例えば、「nop」命令若しくは「no-operation」命令、又は、条件が偽である条件付き命令に基づいて)所定の処理サイクル中に何もしない処理要素を含むことができる。命令は、所定の命令セットアーキテクチャ(ISA)によって定義することができる。命令は、特定のISAに関連付けられるのではなく、マイクロアーキテクチャによって定義することもできる。例えば、ISA命令を、1つ以上のマイクロ命令にデコードすることができる。マイクロ命令は、プロセッサによって行われる動作を指定する場合、「命令」とも呼ばれ得る。したがって、「ストア命令」は、ISAによって定義される場合もあるし、定義されない場合もある。ストア命令は、ストア動作が行われることを示す情報を含み、通常、ストアのターゲットメモリ位置を示す情報を含む。
【0003】
ロードメモリ動作及びストアメモリ動作は、様々な実施態様では、メモリ動作を含む命令の暗黙的な部分であってもよいし、明示的な命令であってもよい。「ロードメモリ動作」は、本明細書では「ロード命令」又は「ロード動作」とも呼ばれる。同様に、「ストアメモリ動作」は、本明細書では「ストア命令」又は「ストア動作」とも呼ばれる。「ロード動作」又は「ストア動作」という用語は、「アトミック動作」とも呼ばれることに留意されたい。アトミック動作は、レジスタ位置からのデータと、メモリ位置からのデータとの算術的組み合わせを実行する。「ロード動作」という用語は、「サンプル動作」を指すように使用され得ることにも留意されたい。サンプル動作は、データ値がメモリ位置から読み出された後に、サンプラ定数(sampler constants)を使用して、フィルタリングをデータ値に適用する。
【0004】
多くのロード動作及びストア動作は、特に、複数のスレッドがデータを共有するマルチスレッドプログラミング環境において、他の動作に依存している。依存関係がいつ解決されたかに基づいて、これらのロード及びストアをいつ実行するかを決定することは困難である。
【0005】
本明細書で説明する方法及びメカニズムの利点は、添付の図面と共に以下の説明を参照することによって、より良く理解することができる。
【図面の簡単な説明】
【0006】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】実行ユニットの一実施形態のブロック図である。
【
図3】ソフトウェア環境の一実施形態のブロック図である。
【
図4】命令間の依存関係を管理するためのソフトウェアベースのアプローチを実施する方法の一実施形態を示す一般化されたフロー図である。
【
図5】ペンディング中のロードカウンタ及びストアカウンタを管理する方法の一実施形態を示す一般化されたフロー図である。
【
図6】ペンディング中のロード動作及びストア動作を個別にトラッキングする方法の一実施形態を示す一般化されたフロー図である。
【
図7】待機命令を実施する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【0007】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、いくつかの特定の詳細を示す。しかしながら、当業者は、様々な実施形態を、これらの特定の詳細なしに実施することができるのを認識すべきである。いくつかの場合、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術は、本明細書で説明するアプローチを曖昧にすることを避けるために、詳細に示していない。説明を簡単且つ明確にするために、図に示された要素は必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、一部の要素の寸法は、他の要素に対して誇張されている場合がある。
【0008】
個別のペンディング中のロードカウンタ及びストアカウンタを維持するためのシステム、装置及び方法が本明細書に開示されている。一実施形態では、システムは、少なくとも1つの実行ユニットと、メモリサブシステムと、実行スレッド毎のカウンタのペアと、を含む。一実施形態では、システムは、命令間の依存関係を管理するためのソフトウェアベースのアプローチを実施する。一実施形態では、システムは、命令間の依存関係を管理するためのソフトウェアベースのアプローチをサポートするカウンタを維持する。システムは、カウンタの値を参照することによって、ランタイム中に依存関係を管理するのに使用される命令を実行するように構成されている。
【0009】
一実施形態では、システムは、第1スレッドのロード命令が実行されたことを検出したことに応じて、第1実行ユニットの第1カウンタをインクリメントするように構成されている。また、システムは、ロード命令のデータがメモリサブシステムから読み出されたことを判別したことに応じて、第1カウンタをデクリメントするように構成されている。さらに、システムは、第1スレッドのストア命令が実行されたことを検出したことに応じて、第1実行ユニットの第2カウンタをインクリメントするように構成されている。また、システムは、ストア命令が完了したという肯定応答をメモリサブシステムから受信したことに応じて、第2カウンタをデクリメントするように構成されている。ストア命令のデータがメモリサブシステムに書き込まれた場合及びデータが他のスレッドで見える場合、ストア命令は完了している。第1実行ユニットは、所定のカウンタが所定値に等しくなるまで待機する待機命令を実行するように構成されており、所与値は、待機命令において指定される。
【0010】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、メモリ150に接続されたシステムオンチップ(SoC)105を含む。SoC105は、集積回路(IC)とも呼ばれ得る。一実施形態では、SoC105は、中央処理装置(CPU)165の処理ユニット175A~175Nと、入出力(I/O)インタフェース155と、キャッシュ160A~160Bと、ファブリック120と、グラフィックス処理ユニット(GPU)130と、ローカルメモリ110と、メモリコントローラ140と、を含む。SoC105は、図を曖昧にすることを避けるために、
図1に示されていない他のコンポーネントを含みことができる。処理ユニット175A~175Nは、任意の数及びタイプの処理ユニットを表している。一実施形態では、処理ユニット175A~175Nは、CPUコアである。別の実施形態では、処理ユニット175A~175Nのうち1つ以上は、他のタイプの処理ユニット(例えば、特定用途集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)等)である。CPU165の処理ユニット175A~175Nは、キャッシュ160A~160B及びファブリック120に接続されている。
【0011】
一実施形態では、処理ユニット175A~175Nは、特定の命令セットアーキテクチャ(ISA)の命令を実行するように構成されている。各処理ユニット175A~175Nは、1つ以上の実行ユニットと、キャッシュメモリと、スケジューラと、分岐予測回路等と、を含む。一実施形態では、処理ユニット175A~175Nは、オペレーティングシステム等のシステム100のメイン制御ソフトウェアを実行するように構成されている。概して、使用中に処理ユニット175A~175Nによって実行されるソフトウェアは、システム100の所望の機能を実現するために、システム100の他のコンポーネントを制御することができる。また、処理ユニット175A~175Nは、アプリケーションプログラム等の他のソフトウェアを実行することができる。
【0012】
GPU130は、カウンタ135と、グラフィックス又は汎用処理に使用される任意の数及びタイプのコンピュートユニットを表すコンピュートユニット145A~145Nと、を少なくとも含む。各コンピュートユニット145A~145Nは、任意の数の実行ユニットを含み、コンピュートユニット毎の実行ユニットの数は、実施形態によって異なる。GPU130は、ローカルメモリ110及びファブリック120に接続されている。一実施形態では、ローカルメモリ110は、高帯域メモリ(HBM)を使用して実装されている。一実施形態では、GPU130は、描画コマンド、ピクセル操作、幾何学的計算、及び、画像をディスプレイにレンダリングするための他の動作等のグラフィックスパイプライン動作を実行するように構成されている。別の実施形態では、GPU130は、グラフィックスに無関係の動作を実行するように構成されている。さらなる実施形態では、GPU130は、グラフィックス動作及び非グラフィックス関連動作の両方を実行するように構成されている。
【0013】
一実施形態では、GPU130は、命令間の依存関係を管理するためのソフトウェアベースのアプローチを実施するカウンタ135を利用する。GPU130のコンピュートユニット145は、ランタイム中に依存関係を管理するのに使用される命令を実行するように構成されている。一実施形態では、GPU130のコンピュートユニット145は、命令シーケンスの実行を継続する前に、所定のカウンタが指定された値に等しくなるまで待機する待機命令を実行する。
【0014】
一実施形態では、GPU130は、第1スレッドのロード命令が実行されたことを検出したことに応じて、カウンタ135の第1カウンタをインクリメントするように構成されている。また、GPU130は、ロード命令のデータがメモリサブシステムから読み出されたことを判別したことに応じて、第1カウンタをデクリメントするように構成されている。さらに、GPU130は、第1スレッドのストア命令が実行されたことを検出したことに応じて、カウンタ135の第2カウンタをインクリメントするように構成されている。また、GPU130は、ストア命令が完了したという肯定応答をキャッシュ又はメモリから受信したことに応じて、第2カウンタをデクリメントするように構成されている。ストア命令のデータがキャッシュ又はメモリに書き込まれた場合及びデータが他のスレッドで見える場合、ストア命令は完了している。GPU130は、所定のカウンタが所定値に等しくなるまで待機する待機命令を実行するように構成されており、所定値は、待機命令において指定される。
【0015】
I/Oインタフェース155は、ファブリック120に接続されており、任意の数及びタイプのインタフェース(例えば、周辺機器相互接続(PCI)バス、PCI-Extended(PCI-X)、PCIE(PCIExpress)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB)等)を表す。様々なタイプの周辺デバイスを、I/Oインタフェース155に接続することができる。このような周辺デバイスは、ディスプレイ,キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶デバイス、ネットワークインタフェースカード等を含むが、これらに限定されない。
【0016】
SoC105は、1つ以上のメモリモジュールを含むメモリ150に接続されている。各メモリモジュールは、その上に搭載された1つ以上のメモリデバイスを含む。いくつかの実施形態では、メモリ150は、SoC105が搭載されたマザーボード又は他のキャリアに搭載された1つ以上のメモリデバイスを含む。一実施形態では、メモリ150は、動作中にSoC105と共に使用されるランダムアクセスメモリ(RAM)を実装するために使用される。実装されるRAMは、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、抵抗RAM(ReRAM)、相変化RAM(PCRAM)、又は、他の任意の揮発性RAM若しくは不揮発性RAMであってもよい。メモリ150を実装するために使用されるDRAMのタイプは、ダブルデータレート(DDR)DRAM、DDR2DRAM、DDR3DRAM等を含むが、これらに限定されない。
図1に明示的に示されていないが、SoC105は、処理ユニット175A~175N及び/又はコンピュートユニット145A~145Nの内部にある1つ以上のキャッシュメモリを含むことができる。いくつかの実施形態では、SoC105は、処理ユニット175A~175Nによって利用されるキャッシュ160A~160Bを含む。一実施形態では、キャッシュ160A~160Bは、キャッシュコントローラを含むキャッシュサブシステムの一部である。
【0017】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、サーバ、又は、他の様々なタイプのコンピューティングシステム若しくはデバイスの何れかであってもよい。コンピューティングシステム100及び/又はSoC105のコンポーネントの数は、実施形態によって異なり得ることに留意されたい。コンポーネント/サブコンポーネントの各々の数は、
図1に示す数より多くてもよいし少なくてもよい。例えば、別の実施形態では、SoC105は、複数のメモリに接続された複数のメモリコントローラを含むことができる。また、コンピューティングシステム100及び/又はSoC105は、
図1に示されていない他のコンポーネントを含むことができることに留意されたい。さらに、他の実施形態では、コンピューティングシステム100及びSoC105は、
図1に示す以外の方法で構成することができる。
【0018】
図2を参照すると、実行ユニット205の一実施形態のブロック図が示されている。一実施形態では、実行ユニット205は、制御ロジック220と、ロードカウンタ225と、ストアカウンタ230と、を少なくとも含む。一実施形態では、複数の実行ユニット205を、(
図1の)コンピュートユニット145A~145Nの各々に実装することができる。「ロードカウンタ」という用語は、「ベクトルメモリロードカウンタ」とも呼ばれ得ることに留意されたい。同様に、「ストアカウンタ」という用語は、「ベクトルメモリストアカウンタ」と呼ぶこともできる。また、実行ユニット205は、実行スレッド毎にロードカウンタ及びストアカウンタの個別のペアを維持することに留意されたい。
【0019】
実行ユニット205は、任意の数及びタイプのキャッシュ及び/又はメモリデバイスを含むメモリサブシステム210に接続されている。例えば、一実施形態では、メモリサブシステム210は、レベル1(L1)キャッシュと、レベル2(L2)キャッシュと、システムメモリと、を含む。他の実施形態では、メモリサブシステム210は、他の数のキャッシュレベル及び/又は他のタイプのメモリを含むことができる。
【0020】
一実施形態では、実行ユニット205がロード命令を実行すると、実行ユニット205は、ロードカウンタ225をインクリメントする。ロード命令のデータがメモリサブシステム210から取り出され、実行ユニット205内で利用可能になると、実行ユニット205は、ロードカウンタ225をデクリメントする。実行ユニット205がストア命令を実行すると、実行ユニット205は、ストアカウンタ230をインクリメントする。実行ユニット205が、ストア命令が完了しているという肯定応答をメモリサブシステム210から受信すると、実行ユニット205は、ストアカウンタ230をデクリメントする。実行ユニット205は、特定のカウンタが所定値に等しくなるまで後続の命令の実行を待機するように指示する待機命令を実行するように構成されている。例えば、一実施形態では、待機命令は、ロードカウンタ225が0に等しくなるまで待機することを指示する。また、待機命令は、特定のカウンタが0以外の値に等しくなるまで実行ユニット205が待機することを指示することができる。
【0021】
図3を参照すると、ソフトウェア環境300の一実施形態のブロック図が示されている。一実施形態では、ソフトウェア環境300は、コンピューティングシステム(例えば、
図1のコンピューティングシステム100)上で実行可能な実行可能コード315を生成するために利用される。コンパイラ310は、ソースコード305を受信し、ソースコード305を実行可能コード315にコンパイルするように構成されている。コンパイラ310がソースコード305の最適化を行う場合、コンパイラ310は、様々な待機命令を実行可能コード315に挿入する柔軟性を有する。
【0022】
一実施形態では、コンパイラ310は、待機命令を実行可能コード315に挿入し、マルチスレッド実行環境における命令間のソフトウェアの依存関係を管理する。コンパイラ310が所定の待機命令を実行可能コード315に挿入すると、所定の待機命令は、所定のスレッドの対応するロード又はストアカウンタを識別する。また、待機命令は、実行の継続が許可されるまで待機するための値を識別する。例えば、一実施形態では、待機命令は、待機するために0以外の値を指定することができ、特定のカウンタが指定された0以外の値に達した場合に、命令シーケンスからの後続の命令を実行することができる。
【0023】
図4を参照すると、命令間の依存関係を管理するためのソフトウェアベースのアプローチを実施する方法400の一実施形態が示されている。説明するために、本実施形態のステップ及び
図5~
図7のステップは、順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素の1つ以上は、同時に行われてもよいし、図示した順序と異なる順序で行われてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加要素を実行することができる。本明細書で説明する様々なシステム又は装置は、方法400を実施するように構成されている。
【0024】
システムは、命令間の依存関係を管理するためのソフトウェアベースのアプローチを実施する(ブロック405)。一実施形態では、システム(例えば、
図1のシステム100)は、少なくとも1つの実行ユニットと、メモリサブシステムと、を含む。また、システムは、実施形態に応じて任意の数の他のコンポーネントを含むことができる。システムは、命令間の依存関係を管理するためのソフトウェアベースのアプローチをサポートする複数のカウンタを維持する(ブロック410)。一実施形態では、システムは、実行スレッド毎にカウンタのペアを維持し、カウンタのペアのうち第1カウンタは、ペンディング中のストア命令の数をトラッキングし、第2カウンタは、ペンディング中のロード命令の数をトラッキングする。システムの実行ユニットは、カウンタ値を参照することによって、ランタイム中に依存関係を管理する命令を実行するように構成されている(ブロック415)。ブロック415の後に、方法400は終了する。
【0025】
図5を参照すると、ペンディング中のロードカウンタ及びストアカウンタを管理する方法500の一実施形態が示されている。システムは、第1スレッドのロード命令が実行されたことを検出したことに応じて、第1実行ユニットの第1カウンタをインクリメントするように構成されている(ブロック505)。また、システムは、ロード命令がターゲットとするデータがメモリサブシステムから読み出されたことを判別したことに応じて、第1カウンタをデクリメントするように構成されている(ブロック510)。さらに、システムは、第1スレッドのストア命令が実行されたことを検出したことに応じて、第1実行ユニットの第2カウンタをインクリメントするように構成されている(ブロック515)。さらにまた、システムは、ストア命令が完了したという肯定応答をメモリサブシステムから受信したことに応じて、第2カウンタをデクリメントするように構成されている(ブロック520)。また、システムは、第1カウンタ又は第2カウンタの何れかが所定値に等しくなるまで、第1実行ユニットをストールする待機命令を実行するように構成されている(ブロック525)。ブロック525の後に、方法500は終了する。
【0026】
図6を参照すると、ペンディング中のロード命令及びストア命令を個別に管理する方法600の一実施形態が示されている。実行ユニットは、命令シーケンスの実行を開始する(ブロック605)。一実施形態では、実行ユニットは、ストア命令及びロード命令をインタリーブするマルチスレッド命令シーケンスを実行する。実行ユニットは、ロード命令が実行されたことを検出した場合に(条件付きブロック610:Yes)、ペンディング中のロードカウンタをインクリメントする(ブロック615)。実行ユニットは、ストアカウンタ命令が実行されたことを検出した場合(条件付きブロック620:Yes)、ペンディング中のストアカウンタをインクリメントする(ブロック625)。また、実行ユニットは、ペンディング中のロード命令のデータがメモリサブシステムから読み出されたという指標を受信した場合(条件付きブロック630:Yes)、ペンディング中のロードカウンタをデクリメントする(ブロック635)。さらに、実行ユニットは、ストア命令が完了したという肯定応答をメモリサブシステムから受信した場合(条件付きブロック640:Yes)、ペンディング中のストアカウンタをデクリメントする(ブロック645)。ブロック645の後に、方法600はブロック610に戻る。
【0027】
図7を参照すると、待機命令を実施する方法700の一実施形態が示されている。プロセッサは、命令シーケンス内の待機命令を検出し、待機命令は、所定のカウンタ(例えば、ロードカウンタ、ストアカウンタ)の所定値を指定する(ブロック705)。次に、プロセッサは、待機命令を実行する(ブロック710)。所定のカウンタが所定値に達した場合に(条件付きブロック715:Yes)、プロセッサは、命令シーケンス内の後続の命令を実行する(ブロック720)。ブロック720の後に、方法700は終了する。所定のカウンタが所定値に達していない場合(条件付きブロック715:No)、プロセッサは、命令シーケンス内の後続の命令を実行することが抑制される(ブロック725)。一実施形態では、プロセッサは、ブロック725において、特定のタイプの命令(例えば、ロード命令、ストア命令)のみを実行することが抑制される。ブロック725の後に、方法700は条件付きブロック715に戻る。
【0028】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、上述した方法及び/又はメカニズムを実施する。プログラム命令は、C言語等の高水準プログラミング言語でハードウェアの動作を記述する。或いは、Verilog等のハードウェア設計言語(HDL)が使用される。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。多くのタイプの記憶媒体を利用することができる。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム命令及び付随するデータを、プログラムの実行のためにコンピューティングシステムに提供する。コンピューティングシステムは、プログラム命令を実行するように構成された少なくとも1つ以上のメモリ及び1つ以上のプロセッサを含む。
【0029】
上述した実施形態は、実施態様の非限定な例に過ぎないことを強調しておきたい。いく上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲はこのような全ての変形及び修正を包含するように解釈されることを意図している。