(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-27
(45)【発行日】2023-10-05
(54)【発明の名称】サービスダーティライン追跡の品質
(51)【国際特許分類】
G06F 12/0804 20160101AFI20230928BHJP
【FI】
G06F12/0804 100
(21)【出願番号】P 2022512734
(86)(22)【出願日】2020-09-03
(86)【国際出願番号】 US2020049215
(87)【国際公開番号】W WO2021046229
(87)【国際公開日】2021-03-11
【審査請求日】2023-08-21
(32)【優先日】2019-09-05
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ポール ジェームズ モイヤー
(72)【発明者】
【氏名】ダグラス ベンソン ハント
【審査官】後藤 彰
(56)【参考文献】
【文献】特開2018-32058(JP,A)
【文献】特開平6-214888(JP,A)
【文献】米国特許出願公開第2019/0095330(US,A1)
【文献】米国特許出願公開第2014/0189252(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/0804
(57)【特許請求の範囲】
【請求項1】
回路を備えるキャッシュ制御ユニットであって、
前記回路は、
キャッシュに記憶されたキャッシュラインに対する1つ以上の書き込みを検出することと、
1つ以上の書き込みが未修正のキャッシュラインに対するものであると判別したことに少なくとも部分的に基づいて、メモリ帯域幅の測定値を生成することと、
を行うように構成されている、
キャッシュ制御ユニット。
【請求項2】
前記回路は、
前記キャッシュに記憶された未修正のキャッシュラインへの書き込みを追跡するカウンタを維持することと、
前記カウンタに少なくとも部分的に基づいて、メモリ帯域幅の測定値を生成することと、
を行うように構成されている、
請求項1のキャッシュ制御ユニット。
【請求項3】
前記回路は、
第1の時点における前記カウンタの値と第2の時点における前記カウンタの値との差を決定することと、
前記差に少なくとも部分的に基づいて、メモリ帯域幅の測定値を決定することと、
を行うように構成されている、
請求項2のキャッシュ制御ユニット。
【請求項4】
前記回路は、
第1のキャッシュラインに対する所定の書き込み操作が、前記第1のキャッシュラインが前記キャッシュに入力されてから前記第1のキャッシュラインの最初の修正であると判別したことに応じて、前記カウンタをインクリメントするように構成されている、
請求項2のキャッシュ制御ユニット。
【請求項5】
前記回路は、
前記第1のキャッシュラインに対する所定の書き込み操作が、前記第1のキャッシュラインが前記キャッシュに入力されてから前記第1のキャッシュラインの最初の修正ではないと判別したことに応じて、前記カウンタの値を維持するように構成されている、
請求項4のキャッシュ制御ユニット。
【請求項6】
前記回路は、
前記第1の時点と前記第2の時点との間に経過したクロックサイクルの数を決定するように構成されている、
請求項3のキャッシュ制御ユニット。
【請求項7】
前記回路は、
前記メモリ帯域幅の測定値を読み込みメモリ帯域幅の測定値に加算して、総メモリ帯域幅を決定するように構成されている、
請求項1のキャッシュ制御ユニット。
【請求項8】
キャッシュに記憶されたキャッシュラインに対する1つ以上の書き込みを検出することと、
1つ以上の書き込みが未修正のキャッシュラインに対するものであると判別したことに少なくとも部分的に基づいて、メモリ帯域幅の測定値を生成することと、を含む、
方法。
【請求項9】
前記キャッシュに記憶された未修正のキャッシュラインへの書き込みを追跡するカウンタを維持することと、
前記カウンタに少なくとも部分的に基づいて、メモリ帯域幅の測定値を生成することと、を含む、
請求項8の方法。
【請求項10】
第1の時点における前記カウンタの値と第2の時点における前記カウンタの値との差を決定することと、
前記差に少なくとも部分的に基づいて、メモリ帯域幅の測定値を決定することと、を含む、
請求項9の方法。
【請求項11】
第1のキャッシュラインに対する所定の書き込み操作が、前記第1のキャッシュラインが前記キャッシュに入力されてから前記第1のキャッシュラインの最初の修正であると判別したことに応じて、前記カウンタをインクリメントすることを含む、
請求項9の方法。
【請求項12】
前記第1のキャッシュラインに対する所定の書き込み操作が、前記第1のキャッシュラインが前記キャッシュに入力されてから前記第1のキャッシュラインの最初の修正ではないと判別したことに応じて、前記カウンタの値を維持することを含む、
請求項11の方法。
【請求項13】
前記第1の時点と前記第2の時点との間に経過したクロックサイクルの数を決定することを含む、
請求項10の方法。
【請求項14】
システムであって、
メモリサブシステムと、
前記メモリサブシステムに接続されたプロセッサと、を備え、
前記プロセッサは、
キャッシュに記憶されたキャッシュラインに対する1つ以上の書き込みを検出することと、
1つ以上の書き込みが未修正のキャッシュラインに対するものであると判別したことに少なくとも部分的に基づいて、メモリ帯域幅の測定値を生成することと、
を行うように構成されている、
システム。
【請求項15】
前記プロセッサは、
前記キャッシュに記憶された未修正のキャッシュラインへの書き込みを追跡するカウンタを維持することと、
前記カウンタに少なくとも部分的に基づいて、メモリ帯域幅の測定値を生成することと、
を行うように構成されている、
請求項14のシステム。
【請求項16】
前記プロセッサは、
第1の時点における前記カウンタの値と第2の時点における前記カウンタの値との差を決定することと、
前記差に少なくとも部分的に基づいて、メモリ帯域幅の測定値を決定することと、
を行うように構成されている、
請求項15のシステム。
【請求項17】
前記プロセッサは、
第1のキャッシュラインに対する所定の書き込み操作が、前記第1のキャッシュラインが前記キャッシュに入力されてから前記第1のキャッシュラインの最初の修正であると判別したことに応じて、前記カウンタをインクリメントするように構成されている、
請求項15のシステム。
【請求項18】
前記プロセッサは、
前記第1のキャッシュラインに対する所定の書き込み操作が、前記第1のキャッシュラインが前記キャッシュに入力されてから前記第1のキャッシュラインの最初の修正ではないと判別したことに応じて、前記カウンタの値を維持するように構成されている、
請求項17のシステム。
【請求項19】
前記プロセッサは、
前記第1の時点と前記第2の時点との間に経過したクロックサイクルの数を決定するように構成されている、
請求項16のシステム。
【請求項20】
前記プロセッサは、
前記メモリ帯域幅の測定値を読み込みメモリ帯域幅の測定値に加算して、総メモリ帯域幅を決定するように構成されている、
請求項14のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術の説明)
最近の殆どのコンピューティングデバイスは、コンピューティングデバイス内のメインメモリに加えて、少なくとも1つのレベルのキャッシュメモリ(又は、キャッシュ)を設けている。概して、キャッシュは、様々な操作を実行するために使用されるデータ及び命令の制限された数のコピーを、操作を実行するコンピューティングデバイス内の機能ブロックの近くに記憶するために使用される、小容量で高速なアクセスメモリである。キャッシュは、通常、スタティックランダムアクセスメモリ(SRAM)集積回路又は他のタイプのメモリ回路等のように、より高速なメモリ回路を使用して実装される。プロセッサがメモリに記憶されたデータへのアクセスを要求する場合、プロセッサは、先ず、データのコピーがキャッシュに記憶されているかどうかを判別する。記憶されている場合、プロセッサは、キャッシュにアクセスし、データへのアクセスをより効率的に行うことができる。
【0002】
一部のキャッシュでは、キャッシュラインに関連するクラス又はスレッドがキャッシュに記憶される。これは、より大量の領域を消費する可能性がある追加の情報がキャッシュに記憶されることにつながる。さらに、スレッドクラスのインジケーションがキャッシュに記憶されるスキームでは、ソフトウェアは、スレッドのクラスを定期的に変更することがある。このような場合、潜在的に大きなレベル3(L3)キャッシュのキャッシュライン内のスレッドクラス情報が古くなる可能性がある。
【0003】
添付図面と共に以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【0004】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】プロセッサの一実施形態のブロック図である。
【
図3】キャッシュ階層の書き込みメモリ帯域幅を計算する一実施形態のブロック図である。
【
図4】書き込みメモリ帯域幅の測定値を生成する方法の一実施形態を示す一般化されたフローチャートである。
【
図5】キャッシュへの書き込みを監視する方法の一実施形態を示す一般化されたフローチャートである。
【
図6】書き込みメモリ帯域幅の測定値を生成する方法の一実施形態を示す一般化されたフローチャートである。
【
図7】スレッドクラス毎に書き込みメモリ帯域幅を追跡する方法の一実施形態を示す一般化されたフローチャートである。
【発明を実施するための形態】
【0005】
以下の説明では、本明細書で提示する方法及びメカニズムの十分な理解をもたらすために、多くの特定の詳細が示されている。しかしながら、当業者は、これらの特定の詳細無しに様々な実施形態が実施され得ることを認識すべきである。例えば、本明細書で説明するアプローチを曖昧にするのを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令、及び、技術が詳細に示されていない。説明を簡潔及び明瞭にするために、図面に示す要素が必ずしも縮尺通りに描かれていないことを理解されたい。例えば、いくつかの要素の寸法は、他の要素と比べて誇張され得る。
【0006】
書き込みメモリ帯域幅を測定する様々なシステム、装置、方法及びコンピュータ可読記憶媒体が本明細書で開示される。一実施形態では、システムは、プロセッサと、キャッシュ階層と、メモリサブシステムと、を含む。キャッシュ階層は、1つ以上のキャッシュレベル及び1つ以上のキャッシュコントローラ(すなわち、制御ユニット)を含む。一実施形態では、所定の制御ユニットは、キャッシュ階層への書き込みを監視する。キャッシュラインへの書き込みが、キャッシュ階層に入力してからキャッシュラインが初めて修正されるものである場合に、制御ユニットは、書き込みメモリ帯域幅カウンタをインクリメント(増分)する。そうでなければ、書き込みが、キャッシュ階層に入力してから既に修正されたキャッシュラインに対するものである場合に、制御ユニットは、書き込みメモリ帯域幅カウンタをインクリメントしない。キャッシュラインへの最初の書き込みは、最終的にメモリへの書き込みを引き起こすので、書き込みメモリ帯域幅のプロキシ(proxy)となる。制御ユニットは、書き込みメモリ帯域幅カウンタの値を使用して、書き込みメモリ帯域幅の測定値を生成する。また、制御ユニットは、スレッドクラス毎の書き込みメモリ帯域幅を計算するために、異なるスレッドクラス毎に複数のカウンタを維持することができる。
【0007】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ105A~105Nと、入力/出力(I/O)インタフェース120と、バス125と、メモリコントローラ(複数可)130A~130Nと、ネットワークインタフェース135と、メモリデバイス(複数可)140A~140Nと、を含む。他の実施形態では、コンピューティングシステム100は、他の構成要素(例えば、ディスプレイコントローラ)を含み、及び/又は、コンピューティングシステム100は、異なるように構成されている。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0008】
一実施形態では、プロセッサ105Aは、中央処理装置(CPU)等の汎用プロセッサである。一実施形態では、プロセッサ105Nは、高度に並列なアーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックプロセシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等を含む。一実施形態では、プロセッサ105Aは、少なくとも実行コア(複数可)110Aと、キャッシュサブシステム115Aと、メモリコントローラ(複数可)130Aと、を含む。同様に、プロセッサ105Nは、少なくとも実行コア(複数可)110Nと、キャッシュサブシステム115Nと、メモリコントローラ(複数可)130Nと、を含む。実行コア(複数可)110A~110Nは、本明細書において実行ユニットと呼ばれることに留意されたい。また、プロセッサ105A~105Nは、図を曖昧にすることを回避するために図示されていない他の構成要素を含み得ることに留意されたい。
【0009】
システム100では、所定の処理若しくはクラスの処理のために、ソフトウェアへの情報提供のために、サービス品質(QOS)スキームを介した帯域幅強制のために、又は、メモリ帯域幅がどの程度使用されるかに関心のある他のハードウェアのために、メモリ帯域幅を測定することが望まれる場合がある。既存のソリューションは、キャッシュミス要求が、グローバルリクエスタID、又は、要求に付随するクラスの他のインジケーションを有することが多いので、比較的簡単な方法で読み込みメモリ帯域幅を測定する。書き込みがキャッシュエビクションの結果である場合があり、キャッシュラインが属するクラスのインジケーションをキャッシュが記憶しないことがあるので、書き込みメモリ帯域幅を測定することは、あまり簡単ではない。したがって、様々な実施形態では、システム100は、効率的な方法でメモリデバイス140A~140Nへの書き込みメモリ帯域幅を測定するための様々な技術を使用する。
【0010】
一実施形態では、キャッシュサブシステム115A~115Nは、キャッシュラインが、キャッシュサブシステム115A~115Nに至った後に、実行コア(複数可)110A~110Nの各々によって初めて書き込まれることを監視するための制御ロジックを含む。一実施形態では、制御ロジックは、対応するキャッシュサブシステム115A~115N内の任意のレベルにキャッシュされてからキャッシュラインが初めて修正される場合にはいつでもカウンタをインクリメントする。キャッシュラインが2回目以降に修正される場合、制御ロジックは、カウンタをインクリメントしない。制御ロジックは、カウンタの値に基づいて、書き込みメモリ帯域幅の測定値を生成する。一実施形態では、制御ロジックは、スレッドクラス毎に、キャッシュラインへの最初の書き込みを監視する。この実施形態では、制御ロジックは、書き込みメモリ帯域幅のスレッドクラス毎の測定値を生成する。
【0011】
メモリコントローラ(複数可)130A~130Nは、任意の数及びタイプのメモリデバイス(複数可)140A~140Nの各々に結合された任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130A~130Nは、プロセッサ105A~105Nの各々に位置するように示されているが、これは、単に一実施形態を示すに過ぎない。別の実施形態では、メモリコントローラ(複数可)130A~130Nは、プロセッサ105A~105Nの各々の外部にある。また、キャッシュサブシステム115A~115Nの一部は、実行コア(複数可)110A~110Nの各々に位置してもよく、キャッシュサブシステム115A~115Nの別の部分は、実行コア(複数可)110A~110Nの外部に位置してもよいことに留意されたい。例えば、一実施形態では、レベル1(L1)キャッシュ及びレベル2(L2)キャッシュが実行コア(複数可)110A~110N内に位置し、最終レベルキャッシュ(LLC)が実行コア(複数可)110A~110Nの外部に位置する。
【0012】
メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140のメモリのタイプは、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)等を含む。I/Oインタフェース120は、任意の数及びタイプのI/Oインタフェース(例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス、PCI-Extended(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々なタイプの周辺デバイス(図示省略)がI/Oインタフェース120に結合される。このような周辺デバイスは、限定されないが、ディスプレイ、ネットワークインタフェースカード、キーボード、マウス、プリンタ、スキャナ、ジョイスティックや他のタイプのゲームコントローラ、メディアレコーディングデバイス、外部記憶装置等を含む。ネットワークインタフェース135は、ネットワークを介してメッセージを送受信するために使用される。
【0013】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、他の様々なタイプのコンピューティングシステム若しくはデバイスである。コンピューティングシステム100の構成要素の数は、実施形態毎に変化することに留意されたい。例えば、各構成要素は、
図1に示す数より多くてもよいし、少なくてもよい。また、コンピューティングシステム100が、
図1に示されていない他の構成要素を含んでもよいことに留意されたい。さらに、他の実施形態では、コンピューティングシステム100は、
図1に示す以外の方法で構成されてもよい。
【0014】
図2を参照すると、プロセッサ200の一実施形態のブロック図が示されている。一実施形態では、プロセッサ200は、少なくとも実行コア205と、キャッシュサブシステム210と、制御ユニット215と、メモリサブシステム220と、を含む。プロセッサ200は、図を曖昧にすることを回避するために図示されていない他の構成要素を含んでもよいことに留意されたい。コア205は、1つ以上のプログラム及び/又はオペレーティングシステムの命令を実行するための任意の数のプロセッサコアを表す。一実施形態では、プロセッサ200の回路は、プロセッサ105A及び/又はプロセッサ105N(
図1)に含まれる。
【0015】
一実施形態では、コア205は、キャッシュサブシステム210に読み込み要求及び書き込み要求を送信する。制御ユニット215は、キャッシュサブシステム210のキャッシュラインに対して実行された書き込みを監視し、プロセッサ200の異なるスレッドクラスに対してキャッシュラインが最初に書き込まれたことを追跡するカウンタを維持する。キャッシュサブシステム210に運ばれてからキャッシュラインが初めて書き込まれる毎に、制御ユニット215は、キャッシュラインの対応するスレッドクラスのカウンタをインクリメントする。各カウンタは、対応するスレッドキャッシュの書き込みメモリ帯域幅の推定値を生成するために使用される。
【0016】
図3を参照すると、キャッシュ階層300の書き込みメモリ帯域幅を計算する一実施形態のブロック図が示されている。キャッシュ階層300は、任意の数のキャッシュレベルを含み、レベルの数は、実施形態によって変化する。一実施形態では、キャッシュ階層300は、
図2のキャッシュサブシステム210を表す。制御ユニット310は、キャッシュ階層300のキャッシュラインに対して実行される書き込みを監視する。一実施形態では、制御ユニット310は、ホストコンピューティングシステムの個別のスレッドクラス毎に個別のカウンタ325A~325Nを含む。所定のキャッシュラインがキャッシュ階層300に入力されてから当該所定のキャッシュラインに対して初めて書き込みが実行される場合、制御ユニット310は、書き込み操作のスレッドクラスを判別する。一実施形態では、制御ユニット310は、実行ユニットからスレッドクラスのインジケーションを受信する。別の実施形態では、制御ユニット310は、所定のキャッシュラインのアドレスでテーブル330へのルックアップを実行して、アドレスに対応するスレッドクラスを見つける。更なる実施形態では、制御ユニット310は、実行ユニットのロード/ストアユニット(図示省略)にクエリして、書き込み操作のスレッドクラスを判別する。他の実施形態では、制御ユニット310は、書き込み操作のスレッドクラスを判別するための他の技術を使用する。
【0017】
各カウンタ325A~325Nは、対応するスレッドクラスの書き込みメモリ帯域幅を示す。一実施形態では、所定のカウンタ325A~325Nの値がプログラム可能な閾値よりも大きい場合、所定のカウンタ325A~325Nの値がプログラム可能な閾値を下回るまで、対応するスレッドクラスのメモリトラフィックが減少する。様々な実施形態では、メモリコントローラにおいて書き込み要求をクエリし、対応するスレッドクラスの書き込み要求の優先度を下げる又は他の技術を使用することによって、対応するスレッドクラスのメモリトラフィックが減少する。例えば、対応するスレッドクラスのメモリトラフィックを減少させるための他のメカニズムは、実行コアにおいてそのスレッドクラスからの未処理の許容可能なメモリ要求の数を減少させること、所望のメモリトラフィックレートに到達するレベルまでそれらのスレッドクラスの実行レートを軽減すること等を含む。
【0018】
図4を参照すると、書き込みメモリ帯域幅の測定値を生成する方法400の一実施形態が示されている。説明のために、この実施形態におけるステップ及び
図5~
図7のステップを、連続した順序で示す。しかしながら、説明する方法の様々な実施形態では、説明する要素の1つ以上が、同時に実行されてもよいし、図示した順序と異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れかは、方法400を実施するように構成されている。
【0019】
制御ユニットは、キャッシュ階層に入力してからキャッシュラインが初めて修正される場合にはいつでもカウンタをインクリメントする(ブロック405)。制御ユニットは、カウンタの値に基づいて、書き込みメモリ帯域幅の測定値を生成する(ブロック410)。書き込みメモリ帯域幅の測定値を生成する一例は、方法600(
図6)において説明する。書き込みメモリ帯域幅の測定値が所定の閾値よりも大きい場合(条件付きブロック415:「はい」)、制御ユニットは、メモリサブシステムに送信される書き込み操作の数を減少させる(ブロック420)。そうではなく、書き込みメモリ帯域幅の測定値が所定の閾値以下である場合(条件付きブロック415:「いいえ」)、制御ユニットは、メモリサブシステムに送信される書き込み操作を干渉しない(ブロック425)。ブロック420,425の後に、方法400はブロック405に戻る。別の実施形態では、制御ユニットは、ブロック410で生成された書き込みメモリ帯域幅の測定値を読み込みメモリ帯域幅の測定値に追加することによって、総メモリ帯域幅の測定値を生成する。次に、この実施形態では、制御ユニットは、条件付きブロック415において、総メモリ帯域幅が所定の閾値よりも大きいかどうかを判別する。
【0020】
図5を参照すると、キャッシュへの書き込みを監視する方法500の一実施形態が示されている。所定のキャッシュラインへの書き込み操作が検出される(ブロック505)。書き込み操作を検出したことに応じて、制御ユニットは、所定のキャッシュラインの書き込みが、キャッシュ階層に入力してから所定のキャッシュラインが初めて修正される場合であるかどうかを判別する(ブロック510)。一実施形態では、キャッシュ階層に入力してから所定のキャッシュラインが依然に書き込まれたかどうかを判別するために、所定のキャッシュラインのダーティステータス(dirty status)がチェックされる。
【0021】
所定のキャッシュラインへの書き込みが、所定のキャッシュラインがキャッシュ階層に入力されてから初めて修正される場合(条件付きブロック515:「はい」)、制御ユニットは、対応するカウンタをインクリメントする(ブロック520)。そうではなく、キャッシュ階層に入力してから所定のキャッシュラインが依然に修正されている場合(条件付きブロック515:「いいえ」分岐)、制御ユニットは、対応するカウンタを変更しないままにする(ブロック525)。ブロック520,525の後に、方法500は終了する。
【0022】
図6を参照すると、書き込みメモリ帯域幅の測定値を生成する方法600の一実施形態が示されている。制御ユニットは、キャッシュ階層に記憶された未修正のキャッシュラインに対して実行される書き込みを追跡するために、カウンタを維持する(ブロック605)。修正されたキャッシュラインに対して実行される書き込みは、カウンタによって追跡されないことに留意されたい。制御ユニットは、第1の時点においてカウンタ値の第1のスナップショットを取得する(ブロック610)。代わりに、別の実施形態では、制御ユニットは、方法600の開始時にカウンタをリセットし、この場合、カウンタが第1の時点においてゼロの値を有するので、ブロック610がスキップされてもよい。
【0023】
後に、或る期間が経過した後、制御ユニットは、第2の時点においてカウンタ値の第2のスナップショットを取得する(ブロック615)。第1の時点と第2の時点との間で経過することが許容される時間の長さは、プログラム可能であってもよいし、何等かの所定の時間の長さであってもよい。次に、制御ユニットは、カウンタ値の第2のスナップショットと第1のスナップショットとの間の差を、第1の時点と第2の時点との間で経過したクロックサイクルの数によって除算した値に等しい、書き込みメモリ帯域幅の測定値を生成する(ブロック620)。ブロック620の後に、方法600は終了する。ブロック620において生成された書き込みメモリ帯域幅の測定値が、ソフトウェア及び/又はハードウェアによって様々な方法で使用されてもよいことに留意されたい。また、方法600は、定期的に実行されてもよいことに留意されたい。いくつかのケースでは、制御ユニットは、方法600の各反復の後に、カウンタをリセットする。
【0024】
図7を参照すると、スレッドクラス毎に書き込みメモリ帯域幅を追跡する方法700の一実施形態が示されている。制御ユニットは、複数の異なるスレッドクラスについて複数のカウンタを維持し、各カウンタは、個別のスレッドクラスについて書き込みメモリ帯域幅を追跡する(ブロック705)。キャッシュラインへの書き込みが検出される毎に、制御ユニットは、この書き込みが、キャッシュラインがキャッシュ階層に入力されてから初めての修正であるかどうかを判別する(ブロック710)。例えば、一実施形態では、対応するダーティビットセットを有していないキャッシュラインへの書き込みは、キャッシュラインの最初の修正と見なされる。
【0025】
書き込みが、キャッシュラインがキャッシュ階層に入力されてから初めての修正である場合(条件付きブロック715:「はい」)、制御ユニットは、キャッシュラインが何れのスレッドクラスに属するかを判別する(ブロック720)。一実施形態では、制御ユニットは、キャッシュラインへの書き込みを引き起こした命令に対応するロード/ストアユニットエントリからスレッドクラスを取得する。別の実施形態では、制御ユニットは、キャッシュラインへの書き込みを引き起こした命令に対応する再順序付けバッファエントリ(reorder buffer entry)からスレッドクラスを取得する。更なる実施形態では、制御ユニットは、キャッシュラインのアドレスを用いてスレッドクラスのルックアップを実行して、アドレスに対応するスレッドクラスを判別する。書き込みが、キャッシュラインがキャッシュ階層に入力されてから初めての修正ではない場合(条件付きブロック715:「いいえ」)、方法700はブロック710に戻る。キャッシュラインが属するスレッドクラスを判別した後に、制御ユニットは、このスレッドクラスに対応するカウンタをインクリメントする(ブロック725)。ブロック725の後に、方法700はブロック710に戻る。
【0026】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書で説明する方法及び/又はメカニズムを実施する。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、そのようなプログラム命令は、高水準プログラミング言語によって表される。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ形式、中間形式又は他の形式にコンパイルされる。或いは、プログラム命令は、ハードウェアの動作又は設計を記述するように書き込まれる。そのようなプログラム命令は、C言語等の高水準プログラミング言語によって表される。或いは、Verilog等のハードウェア設計言語(HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に、そのようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0027】
上述した実施形態は、実施形態の非限定的な例示に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになる。以下の特許請求の範囲は、このような変形及び修正の全てを包含すると解釈されることが意図されている。