(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-07
(45)【発行日】2024-11-15
(54)【発明の名称】メモリ帯域幅利用を抑制するメモリ要求スロットル
(51)【国際特許分類】
G06F 12/0806 20160101AFI20241108BHJP
G06F 12/00 20060101ALI20241108BHJP
G06F 12/0813 20160101ALI20241108BHJP
G06F 12/0862 20160101ALI20241108BHJP
【FI】
G06F12/0806 100
G06F12/00 571A
G06F12/0813
G06F12/0862
(21)【出願番号】P 2020531612
(86)(22)【出願日】2018-08-28
(86)【国際出願番号】 US2018048350
(87)【国際公開番号】W WO2019118016
(87)【国際公開日】2019-06-20
【審査請求日】2021-08-06
【審判番号】
【審判請求日】2023-05-23
(32)【優先日】2017-12-12
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ウィリアム エル. ウォーカー
(72)【発明者】
【氏名】ウィリアム イー. ジョーンズ
【合議体】
【審判長】林 毅
【審判官】須田 勝巳
【審判官】大塚 俊範
(56)【参考文献】
【文献】米国特許出願公開第2007/0094453(US,A1)
【文献】米国特許出願公開第2014/0108740(US,A1)
【文献】特表2006-521640(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/00-12/128
G06F 3/06- 3/08
(57)【特許請求の範囲】
【請求項1】
処理システムのメモリ要求スロットルの方法であって、
前記処理システムのプロセッサコアのメモリ要求の平均アクセスレイテンシを表すアクセスレイテンシメトリックを決定することと、
前記プロセッサコアに関連するキャッシュのプリフェッチャの精度を表すプリフェッチ精度メトリックを決定することと、
前記アクセスレイテンシメトリックと前記プリフェッチ精度メトリックとのうち少なくとも1つに基づいて
スロットルレベルを設定することで、前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルすること
と、を含み、
前記スロットルレベルを設定することは、前記プロセッサコアで利用可能な保留メモリ要求の最大数を設定することを含
む、
方法。
【請求項2】
前記プロセッサコアにおいてソフトウェアアプリケーションを実行することであって、前記ソフトウェアアプリケーションは、前記ソフトウェアアプリケーションのスレッドのターゲットメモリ利用帯域幅制限を設定するように前記プロセッサコアを構成するための少なくとも1つの命令を含む、ことと、
前記プロセッサコアを含むコンピュータ複合体において前記スレッドの実際のメモリ利用帯域幅をモニタすることと、
前記モニタされた実際のメモリ利用帯域幅が前記ターゲットメモリ利用帯域幅制限を満たすまで、前記スレッドに設定されたスロットルレベルをインクリメントするように変更することと、を含み、
前記スロットルレベルをインクリメントするように変更することは、前記スレッドに関連する前記キャッシュのプリフェッチャ積極度と、前記スレッドが利用可能な保留メモリ要求の最大数と、のうち少なくとも1つを構成することを含む、
請求項1の方法。
【請求項3】
前記スロットルレベルを設定することは、
プリフェッチャ積極度を
設定することを含む、
請求項1の方法。
【請求項4】
前記プリフェッチャ積極度を
設定することは、
前記プリフェッチャの最大プリフェッチ距離を
設定することと、
前記プリフェッチャ
の有効又は無効を設定することと、
のうち少なくとも1つを含む、
請求項3の方法。
【請求項5】
前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルすることは、
前記プロセッサコアが利用可能な保留メモリ要求の最大数を
設定することを含む、
請求項1の方法。
【請求項6】
前記プリフェッチ精度メトリックを決定することは、前記プロセッサコアで実行されるスレッドの前記プリフェッチ精度メトリックを決定することを含み、
前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルすることは、前記スレッドに関する前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルすることを含む、
請求項1の方法。
【請求項7】
前記アクセスレイテンシメトリックを決定することは、
前記プロセッサコアに関連するローカルメモリに発行された複数のメモリ要求をサンプリングして、メモリ要求のサンプルセットを生成することと、
前記サンプルセットのメモリ要求毎に、前記メモリ要求を満たすための対応するアクセスレイテンシを測定することと、
前記メモリ要求のサンプルセットについて測定されたアクセスレイテンシの平均に基づいて、前記アクセスレイテンシメトリックを決定することと、を含む、
請求項1の方法。
【請求項8】
前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルすることは、
複数のスロットルレベルを表すデータ構造にアクセスすることであって、各スロットルレベルは、利用可能な保留メモリ要求の最大数と、プリフェッチャ積極度のレベルとのうち少なくとも1つ
を含み、各スロットルレベルは、対応するレイテンシ閾値及び対応するプリフェッチ精度閾値のうち少なくとも1つに関連付けられている、ことと、
前記アクセスレイテンシメトリックと前記複数のスロットルレベルの各々のレイテンシ閾値、及び、前記プリフェッチ精度メトリックと前記複数のスロットルレベルの各々のプリフェッチ精度閾値のうち少なくとも1つの比較に基づいて、前記プロセッサコアに対して実施するスロットルレベルを選択することと、を含む、
請求項1の方法。
【請求項9】
ローカルメモリに接続可能なインターコネクトファブリックと、
前記インターコネクトファブリックに接続された少なくとも1つのコンピュータ複合体と、を備える処理システムであって、
前記コンピュータ複合体は、
プロセッサコアと、
キャッシュ階層と、を備え、
前記キャッシュ階層は、
複数のキャッシュと、
アクセスレイテンシメトリックとプリフェッチ精度メトリックとのうち少なくとも1つに基づいて
スロットルレベルを設定することで、前記プロセッサコアで利用可能な保留メモリ要求の最大数を設定することによって、前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルするように構成されたスロットルコントローラと、を備え、
前記アクセスレイテンシメトリックは、前記プロセッサコアのメモリ要求に対する平均アクセスレイテンシを表し、
前記プリフェッチ精度メトリックは、前記キャッシュ階層のキャッシュのプリフェッチャの精度を表す、
処理システム。
【請求項10】
前記スロットルレベルを設定することは、
プリフェッチャ積極度を設定することを含む、、
請求項9の処理システム。
【請求項11】
前記スロットルコントローラは、
前記プリフェッチャの最大プリフェッチ距離を
設定することと、
前記プリフェッチャ
の有効又は無効を設定することと、
のうち少なくとも1つによって、前記プリフェッチャ積極度を
設定するように構成されている、
請求項10の処理システム。
【請求項12】
前記保留メモリ要求の最大数は、前記プロセッサコアが利用可能なミス情報バッファ(MIB)エントリの最大数である、
請求項10の処理システム。
【請求項13】
前記スロットルコントローラは、
前記プロセッサコアが利用可能な保留メモリ要求の最大数を変更することによって、
前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルするように構成されている、
請求項9の処理システム。
【請求項14】
前記キャッシュ階層は、
前記プロセッサコアで実行されるスレッドの前記プリフェッチ精度メトリックを決定するように構成されたプリフェッチ精度トラッカをさらに備え、
前記スロットルコントローラは、前記スレッドに関する前記プロセッサコアによって発行可能なメモリ要求の速度をスロットルするように構成されている、
請求項9の処理システム。
【請求項15】
前記キャッシュ階層は、
前記プロセッサコアに関連するローカルメモリに発行された複数のメモリ要求をサンプリングして、メモリ要求のサンプルセットを生成することと、
前記サンプルセットのメモリ要求毎に、前記メモリ要求を満たすための対応するアクセスレイテンシを測定することと、
メモリ要求のサンプルセットについて測定されたアクセスレイテンシの平均に基づいて、前記アクセスレイテンシメトリックを決定することと、
によって、前記アクセスレイテンシメトリックを決定するレイテンシトラッカをさらに備える、
請求項9の処理システム。
【発明の詳細な説明】
【背景技術】
【0001】
多くの処理システムは、複数のプロセッサコアが同じメモリを共有するように、多くのリソースをプールする。これは、プロセッサコアのセットと対応するメモリとの間のリンクがメモリ要求で飽和し、全体的なメモリアクセスレイテンシが増加することにつながることが多い。さらに、オーバーサブスクライブされたメモリリンクは、完全に飽和していないリンクと比較して、全体的なシステムパフォーマンスを低下させる可能性がある。
【0002】
添付の図面を参照することにより、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面で同じ符号を使用している場合、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、メモリ要求スロットルを使用する処理システムを示すブロック図である。
【
図2】いくつかの実施形態による、
図1の処理システムのプロセッサコア及び対応するキャッシュ階層をより詳細に示すブロック図である。
【
図3】いくつかの実施形態による、動的メモリ要求スロットルの方法を示すフロー図である。
【
図4】いくつかの実施形態による、ソフトウェアで構成されたメモリ要求スロットルの方法を示すフロー図である。
【発明を実施するための形態】
【0004】
コンピュータ複合体とローカルメモリとの間のリンクのオーバーサブスクリプションや飽和は、システム全体のパフォーマンスに悪影響を及ぼす。本明細書に記載の技術は、メモリリンクを介してアクセスされるメモリへのメモリ要求のメモリリソースコンシューマによって発行可能な速度をスロットルすることによって、コンピュータ複合体のメモリリソースコンシューマが使用するメモリ帯域を抑制して、処理システムのメモリリンク効率を向上させる。このようにして抑制されたメモリリソースコンシューマは、コンピュータ複合体の個々のプロセッサコア、又は、コンピュータ複合体のプロセッサコアによって実行される特定のスレッドを含むことができる。いくつかの実施形態では、メモリリソースコンシューマのアクセスレイテンシメトリック及びプリフェッチ精度メトリックをモニタし、メモリリソースコンシューマに対して実施される特定のメモリ要求スロットルは、これらのメトリックの一方又は両方に基づいている。メモリ要求スロットルは、例えば、メモリリソースコンシューマに代わってプリフェッチャ積極度(prefetcher aggressiveness)を変更することによって、メモリリソースコンシューマが利用可能な保留メモリトランザクションの最大数を変更することによって、又は、プリフェッチャ積極度と、利用可能な保留メモリトランザクションの最大数との変更を組み合わせることによって、実現される。従って、このアプローチは、不正確なプリフェッチ推測を低減し、メモリリソースコンシューマが所定の時点で発行し得るメモリ要求の数を制限し、これにより、メモリリソースコンシューマが消費し得るメモリリンク帯域幅を制限しながら、メモリリソースコンシューマが発行するメモリ要求の有効性を改善しようとする。
【0005】
図1は、いくつかの実施形態による、メモリ利用効率を向上させるためにメモリ要求スロットルを利用する処理システム100を示す図である。処理システム100は、処理ノード101等の1つ以上の処理ノードを含む。処理ノード101は、コンピュータ複合体102,104,106,108等の1つ以上のコンピュータ複合体と、インターコネクトファブリック110と、ローカルメモリ112と、を含む。各コンピュータ複合体は、4つのプロセッサコア114,115,116,117等の1つ以上のプロセッサコアを含む。プロセッサコアは、例えば、中央処理装置(CPU)コア、グラフィックス処理装置(GPU)コア、デジタル信号プロセッサ(DSP)コア、又は、これらの組み合わせを含む。コンピュータ複合体のプロセッサコアの数は、4つより少なくてもよいし、4つより多くてもよいことが理解されよう。
【0006】
各コンピュータ複合体は、第1レベル(L1)、第2レベル(L2)及び第3レベル(L3)のキャッシュ等のように、1つ以上のレベルのキャッシュを有するキャッシュ階層118をさらに含む。図示した例では3つのレベルを含むが、他の実施形態では、キャッシュ階層118は、3つより少ないレベル又は3つより多いレベルを含む。各キャッシュレベルは、そのレベルに1つ以上のキャッシュを含む。例示すると、コンピュータ複合体102は、L1において、プロセッサコア毎に、小さいプライベートキャッシュ(L1キャッシュ121,122,123,124として示されており、各L1キャッシュは、プロセッサコア114~117のうち対応するものに関連付けられている)を実装する。さらに、いくつかの実施形態では、コンピュータ複合体は、L2において、プロセッサコア毎に、より大きいプライベートキャッシュ(L2キャッシュ125,126,127,128として図示され、各L2キャッシュは、プロセッサコア114~117に対応する)も実装する。L2キャッシュ125~128の各々は、対応するプロセッサコアに対してプライベートであるが、キャッシュ階層118は、L2キャッシュ125~128間のコヒーレンシを維持するように動作する。他の実施形態では、2つ以上のL1キャッシュが1つのL2キャッシュを共有してもよい。L3キャッシュレベルの場合、キャッシュ階層118は、コンピュータ複合体102のプロセッサコアによって共有され、従って、少なくともL2キャッシュ125~128によって共有されるL3キャッシュ130を実装する。他の実施形態では、L3キャッシュレベルは、L2キャッシュ125~128によって共有される複数のL3キャッシュを様々な組み合わせで含んでもよい。
【0007】
インターコネクトファブリック110は、各コンピュータ複合体のキャッシュ階層118とローカルメモリ112との間のインタフェースとして、コンピュータ複合体102,104,106,108間のインタフェースとして、及び、処理システム100の処理ノード101と任意の他の処理ノード132との間のインタフェースとして動作する。インターコネクトファブリック110は、例えば、HyperTransportファブリック、Infinityファブリック等として実装されてもよい。ローカルメモリ112は、1つ以上の個別のランダムアクセスメモリ(RAM)コンポーネントを含み、いくつかの実施形態では、RAMコンポーネントとインターコネクトファブリック110との間の複数のリンクを含み、各リンクは、別々のコンピュータ複合体に割り当てられてもよい(又は、コンピュータ複合体のサブセットは、インターコネクトファブリック110とローカルメモリ112との間の所定のリンクを共有してもよい)。
【0008】
動作において、オペレーティングシステム(OS)、ハイパーバイザ又はソフトウェアアプリケーションは、或るプロセスを表す命令セットを、実行のためにコンピュータ複合体102~108のプロセッサコアに割り当てる。ここで、特定のプロセッサコアによる命令セットの実行は、「スレッド」と呼ばれる。実行の過程で、これらのスレッドは、プロセッサコアを操作して、ローカルメモリ112(又は、他の処理ノードのローカルメモリ)からデータをロードするように機能するメモリ要求を発行する。このようなデータは、実行命令、又は、命令の実行中に操作されるオペランドデータを含むことができる。当技術分野で周知のように、このデータは、典型的に、キャッシュ階層118の1つ以上のレベルに一時的にキャッシュされて、データアクセス効率を促進する。従って、キャッシュ階層118が、スレッドに代わって、キャッシュ階層118に有効な状態で記憶されているデータに対するメモリ要求を発行すると、そのメモリ要求は、キャッシュ階層118によって効率的に対応される。しかしながら、メモリ要求が、キャッシュ階層118によって満たされない(すなわち、キャッシュ階層118全体に対して「キャッシュミス」がある)場合、スレッドを実行するコンピュータ複合体のL3キャッシュ130は、メモリ要求を満たすために、インターコネクトファブリック110を介してローカルメモリ112にメモリ要求を転送しなければならない。キャッシュ階層118が提供するキャッシュ能力を考慮すると、メモリ要求は、典型的に、2つの形態のうち何れかをとる。すなわち、プロセッサコアが、プロセッサコアのレジスタに現在存在しない特定のデータブロックを必要とする命令を実行した需要型メモリ要求と、キャッシュのプリフェッチャが、近い将来にプロセッサコアが必要とするデータを予測し、プロセッサコアがデータに対する需要型メモリ要求を発行した場合にこの予測したデータがキャッシュされるように、この予測したデータを取得するように投機的メモリ要求を発行するプリフェッチ型メモリ要求と、がある。
【0009】
コンピュータ複合体の各プロセッサコアが典型的に複数のスレッドを同時に実行し、これらのスレッドの各々が、キャッシュ階層118によって満たされない需要型メモリ要求及びプリフェッチ型メモリ要求の両方を頻繁に発行し、よって、ローカルメモリ112によって満たされる必要がある場合、コンピュータ複合体とローカルメモリ112との間のリンクが、輻輳又はオーバーサブスクリプションになる場合があり、コンピュータ複合体とメモリとのリンクのオーバーサブスクリプションは、通常、処理システム100の全体的なパフォーマンスに影響する。従って、少なくとも一実施形態では、処理ノード101は、メモリリンクのオーバーサブスクリプションのリスクを低減するために、処理ノード101のメモリリソースコンシューマが発行可能なメモリ要求の速度を選択的にスロットルするように構成されたメモリ帯域幅制限サブシステム134をさらに含む。いくつかの実施形態では、このようにスロットルされるメモリリソースコンシューマは、各プロセッサコアの個々のスレッドであり、他の実施形態では、メモリリソースコンシューマは、全体として個々のプロセッサコアである。さらに他の実施形態では、メモリ帯域幅制限サブシステム134によってスロットルされるメモリリソースコンシューマは、個々のスレッド及びプロセッサコアをまとめた組み合わせを含む。
【0010】
以下に詳細に説明するように、いくつかの実施形態では、メモリ帯域幅制限サブシステム134は、各コンピュータ複合体102~108のキャッシュ階層118のキャッシュ内の個別のコンポーネントとして実装され、一部のコンポーネントは、ローカルメモリ112に対して発行されたメモリ要求の平均アクセスレイテンシを表すレイテンシメトリックを確認するように、ローカルメモリ112に対して発行されたメモリ要求をモニタするように構成されており、他のコンポーネントは、1つ以上のキャッシュレベルのプリフェッチャをモニタして、各メモリリソースコンシューマのキャッシュのプリフェッチャの精度を表すプリフェッチ精度メトリックを確認するように構成されている。次に、メモリ帯域幅制限サブシステム134の他のコンポーネントは、メモリリソースコンシューマのアクセスレイテンシメトリック及びプリフェッチ精度メトリックの両方を用いて、メモリリソースコンシューマに適用するスロットルレベルを決定する。このスロットルレベルは、メモリリソースコンシューマに代わってプリフェッチ型メモリ要求を発行する1つ以上のプリフェッチャのプリフェッチャ積極度と、所定の時点でリソースコンシューマが利用可能又は発行可能な保留メモリ要求の最大数と、の一方又は両方を設定するように動作する。そうすることで、メモリ帯域幅制限サブシステム134は、任意の所定のメモリリソースコンシューマが消費するメモリ帯域幅を適切に抑制するように動作し、これにより、コンピュータ複合体とローカルメモリ112との間のリンクのより効率的な利用を促進する。
【0011】
いくつかの実施形態では、メモリ帯域幅制限サブシステム134は、全体的なシステムパフォーマンスを向上させるようにスロットル制限を動的に設定するように動作するが、他の実施形態では、メモリ帯域幅制限サブシステム134は、例えば、分離又は区別のために、ソフトウェアアプリケーション136によって課される固定のターゲット帯域幅制限に従ってスロットル制限を設定するように動作する。さらに、他の実施形態では、メモリ帯域幅制限サブシステム134は、ソフトウェアによって課されたターゲット帯域幅制限を確実に満たし、ソフトウェアによって課された帯域幅制限に加えて、スロットルレベルを動的に調整するように動作する。これらのアプローチは、
図3及び
図4を参照して、本明細書でさらに詳細に説明する。
【0012】
図2は、いくつかの実施形態による、コンピュータ複合体の対応するプロセッサコア200のキャッシュ階層118の一部を示す図である。プロセッサコア200は、コンピュータ複合体102のプロセッサコア114~117のうち何れか等のように、処理システム100のコンピュータ複合体の1つのプロセッサコアを表す。プロセッサコア200をサポートするキャッシュ階層118の図示した部分は、L1キャッシュ202(例えば、L1キャッシュ121~124のうち何れかを表す)と、L2キャッシュ204(例えば、L2キャッシュ125~128のうち何れかを表す)と、L3キャッシュ206(例えば、L3キャッシュ130を表す)と、を含む。L1キャッシュ202、L2キャッシュ204及びL3キャッシュ206の各々は、キャッシュラインアレイ(それぞれ、キャッシュラインアレイ208,210,212)と、キャッシュラインアレイへのアクセスを制御するキャッシュコントローラ(それぞれ、キャッシュコントローラ214,216,218)と、を含む。キャッシュラインアレイ208,210,212の各々は、データの対応するキャッシュラインを、対応するアドレス、ステータスビット等を含むキャッシュラインのタグライン情報と共に記憶する複数のエントリを含む。さらに、この例では、L1キャッシュ202はプリフェッチャ220を含み、L2キャッシュ204はプリフェッチャ222を含み、プリフェッチャ220,222は、各キャッシュのキャッシュラインを投機的にプリフェッチするように構成されている。L2キャッシュ204は、L3キャッシュ206又はローカルメモリ112に向けられるL2読み出しミスに対するバッファとして機能するミス情報バッファ(MIB)224を含む。MIB224は、複数のMIBエントリ226を有し、各MIBエントリ226は、キャッシュコントローラ216がL3キャッシュ206又は直接ローカルメモリ112に発行するメモリ要求を処理する前に、L2読み出しミスであった対応する当該メモリ要求に関する情報を記憶するように構成されている。
【0013】
プロセッサコア200及びプロセッサコア200に関連するキャッシュ階層118の図示した部分に関して、メモリ帯域幅制限サブシステム134は、スロットルコントローラ228と、レイテンシトラッカ230と、プリフェッチ精度トラッカ232と、を含む。一実施形態では、これらのコンポーネントは、
図2に示すようにL2キャッシュ204で実装されるが、他の実施形態では、これらのコンポーネントの一部又は全てが、他のキャッシュレベルで実装されてもよい。レイテンシトラッカ230は、プロセッサコア200に関連するメモリリソースコンシューマによって発行され、ローカルメモリ112によって満たされるメモリ要求のアクセスレイテンシをモニタするように構成されており、これらのレイテンシから、メモリ要求を満たす際の現在のレイテンシを表すアクセスレイテンシメトリックをローカルメモリ112に提供するように構成されている。例示すると、いくつかの実施形態では、レイテンシトラッカ230は、メモリ要求のサンプリングされたサブセットの各々に対して、ローカルメモリ112に対して発行されたメモリ要求を満たすのに必要な時間を追跡するトラッカテーブル234を維持する。従って、テーブル234は、複数のエントリ236を含み、各エントリ236は、サンプリングされたメモリ要求に関連するアドレス又はアドレス部分を記憶するアドレス(ADDR)フィールド238と、対応するサンプリングされたメモリ要求を満たすのに必要な時間又はレイテンシを表す値を記憶するレイテンシ(LTCY)フィールド240と、を含む。レイテンシトラッカ230は、エントリ236のレイテンシフィールド240の値によって表されるレイテンシから、平均又は公称のアクセスレイテンシを決定し、この平均アクセスレイテンシ又はこの平均アクセスレイテンシから決定された他の値を、メモリ要求スロットルにおいてスロットルコントローラ228が使用するアクセスレイテンシメトリックとして、スロットルコントローラ228に提供する。平均アクセスレイテンシは、プロセッサコア200に関連するメモリリソースコンシューマ毎に別々に決定されてもよい。これらのメモリリソースコンシューマは、メモリへの同じリンクを共有するので、プロセッサコア200のメモリ要求に対して決定された平均アクセスレイテンシは、(何れのメモリリソースコンシューマがメモリ要求を発行したかに関わらず)プロセッサコア200の任意の所定のメモリリソースコンシューマの平均アクセスレイテンシを十分に表す。
【0014】
プリフェッチ精度トラッカ232は、L1キャッシュ202のプリフェッチャ220と、L2キャッシュ204のプリフェッチャ222と、を含む、プロセッサコア200に代わって動作するプリフェッチャのプリフェッチ精度をモニタするように構成されている。この目的のために、プリフェッチ精度トラッカ232は、プロセッサコア200に代わって動作する各プリフェッチャの精度テーブル242を維持する。一実施形態では、各精度テーブル242を使用して、対応するプリフェッチャが発行した最近のプリフェッチ型メモリ要求をスレッド毎に追跡し、追跡された各プリフェッチ型メモリ要求が「正確な」プリフェッチであったか否か、すなわち、追跡されたプリフェッチ型メモリ要求に関連するプリフェッチされたキャッシュラインが、最終的にスレッド需要型メモリ要求のターゲットであったか否かを追跡する。従って、いくつかの実施形態では、精度テーブル242は、エントリ244の行列を有するデータ構造として実施されており、エントリ244の各列は、プロセッサコア200で現在実行されているN個のスレッドのうち対応するスレッドに関連付けられており、その列内の各エントリ244は、対応するプリフェッチ型メモリ要求のアドレス又は他の識別子を記憶するアドレス(ADDR)フィールド246と、対応するキャッシュラインが、最終的にスレッド需要型メモリ要求のターゲットであったかどうかを示す値(例えば、「0」は、プリフェッチされたキャッシュラインが、正確な投機プリフェッチではなかったことを示し、「1」は、プリフェッチされたキャッシュラインが、正確な投機プリフェッチであったことを示す1つのビット値)を記憶する精度(ACCY)フィールド248と、を有する。このようにして、プリフェッチ精度トラッカ232は、プリフェッチャ220,222が発行したプリフェッチをモニタし、それに応じて、対応する精度テーブル242をポピュレートする。次に、プリフェッチ精度トラッカ232は、精度テーブル242のエントリ244のフィールド248に示されたプリフェッチ精度を定期的又は連続的に評価し、この情報から、対応するプリフェッチャのプリフェッチ精度を表すプリフェッチ精度メトリックを決定して、更新する。異なるスレッドは、他のスレッドよりも正確なプリフェッチ推測の影響を受けやすいので、一実施形態では、プリフェッチ精度トラッカ232は、スレッド毎に別々のプリフェッチ精度メトリックを決定して、維持する。他の実施形態では、対応するプリフェッチャの全てのスレッド(又は、2つ以上のスレッドのサブセット)について、1つプリフェッチ精度メトリックが決定される。
【0015】
スロットルコントローラ228は、レイテンシトラッカ230からの現在のアクセスレイテンシメトリックと、プリフェッチ精度トラッカ232からの1つ以上の現在のプリフェッチ精度メトリックと、の一方又は両方を使用して、プロセッサコア200に関連する対応するメモリリソースコンシューマが、ローカルメモリ112によって満たされるメモリ要求の発行を許可される速度を設定又はスロットルするように構成されており、これにより、メモリリソースコンシューマに起因する現在のメモリ帯域幅利用を変更するように構成されている。以下により詳細に説明するように、少なくとも一実施形態では、レイテンシトラッカ230は、レイテンシメトリック及び対応するプリフェッチ精度メトリックの一方又は両方に基づいて、所定のスロットルレベルのセットからメモリリソースコンシューマの特定のスロットルレベルを選択することによって、メモリリソースコンシューマをスロットルする。この各スロットルレベルのセットは、メモリリソースコンシューマが発行可能なメモリ要求の数に影響を与える異なるパラメータを構成し、これには、プリフェッチャ積極度のパラメータを設定して、所定のプリフェッチャがメモリリソースコンシューマに代わってプリフェッチ型メモリ要求を発行する速度を制御すること、(メモリリソースコンシューマがメモリリソースコンシューマに代わって発行したメモリへの直接メモリ要求の総数を制御する)メモリリソースコンシューマが利用可能な保留メモリ要求の最大数のパラメータを設定すること、又は、これらの組み合わせが含まれる。少なくとも一実施形態では、このスロットルレベルのセットは、スロットルレベルテーブル250として実装され、スロットルレベルテーブル250は、ハードコードされ、実装時にヒューズ又は他のワンタイムプログラム可能要素を介してプログラムされ、インテグレータ又はユーザによってソフトウェア可視レジスタ等を介してプログラムされた等のデータ構造を含む。このスロットル設定プロセスについては、
図3を参照して以下により詳細に説明する。
【0016】
プリフェッチ精度及びメモリ要求レイテンシをモニタすることに基づいて、メモリ要求スロットルレベルを動的に調整することに加えて、又はその代わりに、いくつかの実施形態では、ソフトウェアアプリケーション(例えば、
図1のソフトウェアアプリケーション136)は、ソフトウェアアプリケーションの1つ以上のスレッドの最大メモリ帯域幅利用メトリックを指定し、スロットルコントローラ228は、スロットルレベルを切り替えて、1つ以上のスレッド毎に、指定した最大帯域幅利用メトリックを満たすスロットルレベルを見つけるように構成されている。従って、少なくとも一実施形態では、プロセッサコア200は、ストレージ要素252(例えば、レジスタ)を含むか、ストレージ要素252へのアクセスを有し、ソフトウェアアプリケーションは、対応するスレッドの最大メモリ帯域幅利用についてソフトウェアが指定した制限を表す値をストレージ要素252に記憶させる少なくとも1つの命令を実行し、この値は、そのスレッドを実施するためにスロットルコントローラ228に通信される。このソフトウェアが定義したスロットルプロセスは、
図4を参照して以下により詳細に説明する。
【0017】
図3は、いくつかの実施形態による、処理システム100のコンピュータ複合体の特定のスレッド、特定のプロセッサコア、又は、他の特定のメモリリソースコンシューマのメモリ要求スロットルレベルを動的に調整する例示的な方法300を示す図である。説明を容易にするために、方法300は、
図1の処理システム100の例示的な実施形態と、
図2のキャッシュ階層118及びメモリ帯域幅制限サブシステム134の例示的な実施形態とに関連して説明する。
【0018】
方法300は、アクセスレイテンシモニタリングプロセス301、プリフェッチ精度モニタリングプロセス302及びスロットルレベル設定プロセス303という、並列に動作する3つのプロセスを含む。レイテンシモニタリングプロセス301は、ブロック304で開始し、L2キャッシュ204は、プロセッサコア200からのメモリ要求をフィルタリングして、ローカルメモリ112に対して発行するメモリへの直接メモリ要求を識別する。すなわち、プロセッサコア200を実装するコンピュータ複合体のキャッシュ階層118のキャッシュによって満たすことができず、メモリ要求を満たすためにローカルメモリ112に送信されるメモリ要求を識別する。説明すると、メモリ要求がプロセッサコア200からキャッシュ階層118に発行されると、1つ以上のプローブがキャッシュ階層118の各キャッシュに送信され、要求されたデータを有するキャッシュラインが少なくとも1つのキャッシュに存在して有効であるか否かを判別することができる。プローブが、このような有効なキャッシュラインがキャッシュ階層118にキャッシュされていないことを明らかにした場合、L3キャッシュ206は、ローカルメモリ112によって対応する(fulfillment)ために、メモリ要求をインターコネクトファブリック110に転送する。同時に、レイテンシトラッカ230は、メモリへの直接要求に対してトラッカテーブル234にエントリ236を割り当てる。
【0019】
ブロック306において、レイテンシトラッカ230は、メモリ要求が満たされるのにかかる時間を追跡し、このレイテンシを表す値を、メモリ要求に対して割り当てられたエントリ236に記憶する。一実施形態では、レイテンシトラッカ230は、メモリ要求がコンピュータ複合体から発行されると、ローカルクロックソースから得られたスタートタイムスタンプをレイテンシフィールド240に記憶し、メモリ要求からのデータがコンピュータ複合体のローカルメモリ112から受信されると、ローカルクロックソース(例えば、システムタイムクロック)から得られたストップタイムスタンプを記憶し、これらの2つのタイムスタンプの間の差としてレイテンシを計算し、この差を表す値をレイテンシフィールド240に記憶する。
【0020】
ブロック304及び306のプロセスは、複数のエントリ236にメモリへの直接メモリ要求のレイテンシ値をポピュレートするように、プロセッサコア200に対して発行されたメモリへの直接メモリ要求の一部又は全てについて繰り返される。いくつかの実施形態では、メモリへの直接メモリ要求の各々は、モニタされ、トラッカテーブル234に記録されるが、他の実施形態では、メモリへの直接要求は、追跡するメモリへの直接メモリ要求のサンプルセットを決定するために、或る固定又は動的に調整可能な割合(例えば、メモリへの直接アクセス要求の5回に1回がモニタされる、又は、特定のアドレス範囲へのメモリへの直接メモリ要求のみがモニタされる等)でサンプリングされ、このサンプルセットは、トラッカテーブル234内で維持され、更新される。トラッカテーブル234は、限られた数のエントリ236を有し、従って、スライドウィンドウ分析を実施するために、レイテンシトラッカ230は、トラッカテーブル234が一杯の場合に、最長時間未使用(LRU)プロセスを実施して、古いエントリ236を、新たに識別されたメモリへの直接メモリ要求で上書きする。
【0021】
ブロック308において、周期的に、又は、何らかのトリガに応じて、レイテンシトラッカ230は、トラッカテーブル234の占有エントリ236(又は、そのサブセット)のレイテンシフィールド240のレイテンシの値を評価して、プロセッサコア200によってローカルメモリ112に発行された最近のメモリ要求のレイテンシを表す更新されたアクセスレイテンシメトリックを決定する。いくつかの実施形態では、レイテンシトラッカ230は、考慮されたアクセスレイテンシ値から現在の平均又は公称のレイテンシ値を決定し、この現在の平均レイテンシの表現を、更新されたアクセスレイテンシメトリックとして提供する。他の実施形態では、レイテンシトラッカ230は、中央値アクセスレイテンシに基づいて、最大アクセスレイテンシに基づいて、最小アクセスレイテンシに基づいて、トリミングされた平均アクセスレイテンシ等に基づいて、更新されたアクセスレイテンシメトリックを決定する。次に、更新されたアクセスレイテンシメトリックは、スロットルコントローラ228に利用可能となり、次の更新の反復のためにブロック308が繰り返される。
【0022】
プリフェッチ精度モニタリングプロセス302に戻ると、このプロセスは、プリフェッチ精度トラッカ232によってモニタされる各プリフェッチャ(例えば、L1キャッシュ202のプリフェッチャ220及びL2キャッシュ204のプリフェッチャ222)について並列に行われる。さらに、上述したように、プリフェッチ精度は、構成に応じて、スレッド毎に又はコア毎にモニタされてもよい。説明のために、プロセス302は、スレッド毎に説明されるが、この同じアプローチは、本明細書に記載のガイドラインを用いて、コア毎のアプローチに容易に適合される。プロセス302は、ブロック310で開始し、対象のプリフェッチャが、プリフェッチアルゴリズムを実施して、キャッシュラインのデータが最終的に対応するスレッドによって要求されると予測して、投機的にプリフェッチする次のキャッシュラインを識別し、ローカルメモリ112からそのキャッシュラインにアクセスするプリフェッチ型メモリ要求を発行する。このプリフェッチ型メモリ要求を発行することに応じて、プリフェッチ精度トラッカ232は、対応するスレッドに関連して、プリフェッチ型メモリ要求に対して精度テーブル242のエントリ244を割り当てる。
【0023】
ブロック312において、プリフェッチ精度トラッカ232は、精度テーブル242に示されたプリフェッチ型メモリ要求のプリフェッチ精度を決定する。このため、プリフェッチ精度トラッカ232は、スレッドに代わって発行された需要型メモリ要求をモニタし、精度テーブル242に示されたプリフェッチ型メモリ要求のターゲットであったキャッシュラインに対して需要型メモリ要求が発行されると、プリフェッチ精度トラッカ232は、そのキャッシュラインのプリフェッチが正確なプリフェッチであったことを反映するように、そのプリフェッチ型メモリ要求に割り当てられたエントリ244の精度フィールド248を更新する(例えば、フィールド248に「1」を書き込む)。そうではなく、プリフェッチされたキャッシュラインが、一定期間内に、後続の需要型メモリ要求のターゲットではない(すなわち、スレッドが、プリフェッチされたデータを「使用」しない)場合、プリフェッチ精度トラッカ232は、そのキャッシュラインのプリフェッチが不正確又は誤っていることを反映するように(例えば、フィールド248に「0」を書き込む又は維持することによって)、精度フィールド248を更新する。
【0024】
ブロック314において、周期的に、又は、トリガに応じて、プリフェッチ精度トラッカ232は、精度テーブル242に基づいて、スレッドのプリフェッチ精度メトリックを更新し、これにより、プリフェッチ精度メトリックは、スレッドのキャッシュラインをプリフェッチするプリフェッチャの精度を表す。プリフェッチ精度は、スレッドのプリフェッチの総数に対する、スレッドの正確なプリフェッチの総数の割合として表すことができるので、いくつかの実施形態では、プリフェッチ精度トラッカ232は、正確なプリフェッチを示す(例えば、対応するエントリ244の精度フィールド248に「1」を有する)精度テーブル242のスレッドのエントリ244の総数を決定し、精度テーブル242のスレッドのエントリ244の総数を決定し、これらの2つの数の比に基づいて、プリフェッチ精度メトリックの現在の値を決定する。ブロック314のプロセスは、プリフェッチ精度トラッカ232によってモニタされるスレッドの一部又は全てに対して繰り返される。
【0025】
プロセス301,302と同時に、スロットルレベル設定プロセス303の反復は、周期的に、又は、他のトリガイベントに応じて、スロットルコントローラ228によって行われる。プロセス303の反復は、ブロック316によって表され、ブロック316において、スロットルコントローラ228は、プロセス301及びプロセス302の各々の最近の反復におけるメモリリソースコンシューマの現在のアクセスレイテンシメトリック及びプリフェッチ精度メトリックの一方又は両方に基づいて、スレッド、プロセッサコア、又は、他のメモリリソースコンシューマのスロットルレベルを設定する。説明を容易にするために、以下では、メモリリソースコンシューマがプロセッサコア200のスレッドであると仮定するが、本明細書に記載した技術は、本明細書で提供するガイドラインを使用して、メモリリソースコンシューマがプロセッサコア又は他のメモリリソースコンシューマである実施形態でも使用されるように容易に適合される。
【0026】
スレッドに設定された所定のスロットルレベルは、スレッドに代わってメモリ要求がローカルメモリ112に発行される速度を制限するように動作し、従って、プロセッサコアを使用するコンピュータ複合体とローカルメモリ112との間の帯域幅をスレッドが使用する量を制限する。この制限は、様々な方法の何れか、又は、これらの組み合わせで実現されてもよい。ブロック318に示すように、スロットルレベルは、任意の所定の時点でスレッドに利用可能な保留メモリ要求の数を設定又は変更してもよく、これにより、スレッドに代わって発行可能なメモリ要求の速度が制限される。上述したように、MIB224(
図2)は、キャッシュ階層118でミスしたメモリ要求を記憶するL2キャッシュ204のバッファとして機能し、メモリ要求を満たすためにローカルメモリ112への発行を待つ。従って、一実施形態では、L2キャッシュ204のキャッシュコントローラ216は、スレッドに設定されたスロットルレベルに基づいて、そのスレッドが使用可能なMIBエントリ226の数を変更してもよい。スレッドが、そのスレッドに利用可能な全てのMIBエントリ226を使用すると、スレッドは、それ以上のメモリ要求をローカルメモリ112に発行することができず、従って、スレッドが利用可能なMIBエントリ226の数を制限することは、スレッドがローカルメモリ112に発行可能なメモリ要求の最大数を制御するように動作する。
【0027】
ブロック320,322,324によって表されるように、所定のスレッドに対して設定されたスロットルレベルは、当該スレッドのプリフェッチを発行する際のプリフェッチャ積極度を変更することもできる。プリフェッチャによって実施されるプリフェッチアルゴリズムは、プリフェッチ信頼度及びプリフェッチ距離等を含む幾つかの要因によって制御される。プリフェッチ信頼度は、プリフェッチされたデータがその後にスレッドによって使用されるという信頼性の尺度を意味し、プリフェッチャアルゴリズムは、通常、或る閾値未満のプリフェッチ信頼度を有する可能性のあるプリフェッチが、投機的プリフェッチ型メモリ要求として発行することを許可されないように構成されている。プリフェッチ距離は、プリフェッチャがプリフェッチを許可したスレッドの投機的メモリ要求ストリームがどのくらい先行しているかを反映しており、従って、スレッドに代わってプリフェッチメモリ要求が発行される速度を、プリフェッチ信頼度との組み合わせによって有効に制限する。従って、プリフェッチャの「積極度」は、プリフェッチャが使用するプリフェッチ信頼度閾値又はプリフェッチ距離の一方又は両方によって反映される。このように、いくつかの実施形態では、プリフェッチャ積極度は、ブロック320でプリフェッチャ距離を調整すること、プリフェッチャの最小信頼度閾値を調整すること(ブロック322)、及び、プリフェッチを全体的に有効又は無効にすること、のうち1つ以上によって抑制される。これらの1つ以上の方法でプリフェッチャ積極度を変更することによって、スロットルコントローラ228は、プリフェッチャがスレッドに代わってプリフェッチ型メモリ要求を発行する速度を有効に変更し、これにより、結果として、スレッドに起因するメモリ帯域幅利用を有効に変更する。
【0028】
上述したように、いくつかの実施形態では、L1キャッシュ202のプリフェッチャ220及びL2キャッシュ204のプリフェッチャ222等のように、スレッドに代わって動作して、スレッドのためにデータのプリフェッチを試みる複数のプリフェッチャが存在する。しかしながら、これらのプリフェッチャは、様々な理由により、スレッドに対して異なるプリフェッチャ精度を有し得る。従って、いくつかの実施形態では、スロットルコントローラ228は、各プリフェッチャ精度に基づいて、同じスレッドについて、異なるプリフェッチャに対して異なるスロットルレベルを設定する。他の実施形態では、スロットルコントローラ228は、例えば、最良のプリフェッチ精度又は最悪のプリフェッチ精度に基づいて、単一のスロットルレベルを選択し、この同じスロットルレベルをスレッドの各プリフェッチャに適用する。
【0029】
スロットルコントローラ228は、様々な技術のうち何れかを用いてスロットルレベルを選択してもよい。いくつかの実施形態では、スロットルコントローラ228は、対応するアクセスレイテンシ範囲及びプリフェッチ精度範囲のペアについて対応するスロットルレベルを指定するスロットルレベルテーブル250を使用する。従って、スレッドに対して設定するスロットルレベルを決定するために、スロットルコントローラ228は、そのスレッドの現在のアクセスレイテンシメトリックと現在のプリフェッチ精度メトリックとに基づいて、スロットルレベルテーブル250のルックアップを行い、そのスレッドに対して設定する対応するスロットルレベルを決定する。以下の表1は、スロットルレベルテーブル250の例示的な実施形態を示す。
【表1】
【0030】
スロットルレベル0は、スレッドに対して、スロットルを行わないこと、又は、デフォルトのスロットルであることに留意されたい。
【0031】
他の実施形態では、所定のメトリックのセットに対して特定のスロットルレベルを使用するのではなく、スロットルコントローラ228は、スレッドのメトリックが特定の閾値を満たすまで、そのスレッドのスロットルの重要度(severity)を繰り返し増加させる。例えば、一実施形態では、スロットルコントローラ228は、追跡している全てのスレッドのプリフェッチャの平均プリフェッチ精度を決定し、所定のスレッドのプリフェッチ精度メトリックがこの平均プリフェッチ精度をある程度(例えば、平均プリフェッチ精度の150%)超えると、スロットルコントローラ228は、スレッドの更新されたプリフェッチ精度メトリックがこの閾値未満になるまで、スレッドのメモリ要求スロットルの重要度を繰り返し増加させてもよい。
【0032】
図4は、いくつかの実施形態による、ソフトウェアによって定義されたメモリ帯域幅制限をスレッドに提供する方法400を示す図である。上述したように、いくつかの実施形態では、ソフトウェアアプリケーション(例えば、
図1のソフトウェアアプリケーション136)は、コンピュータ複合体のプロセッサコア200によって実行されるソフトウェアアプリケーションのスレッドに対して、ターゲットメモリ帯域幅利用制限を設定する。従って、方法400は、ブロック402で開始し、ソフトウェアアプリケーションは、例えば、プロセッサコア200に、制限を表す値をストレージ要素252(
図2)に記憶させる1つ以上の命令を実行することによって、このターゲット制限を設定する。いくつかの実施形態では、この値は、スレッドの特定の最大メモリ要求発行速度(例えば、1マイクロ秒毎にX個のメモリへの直接メモリ要求)を表す。これに応じて、スロットルコントローラ228は、ソフトウェアによって定義されたターゲット制限値に基づいて、スレッドの初期スロットルレベルを設定して、実施する。いくつかの実施形態では、初期スロットルレベルは、デフォルトのスロットルレベル(例えば、スロットルレベル0又はスロットル無し)に設定されるが、他の実施形態では、スロットルコントローラ228は、コンピュータ複合体又はプロセッサコア200の現在のアクセスレイテンシメトリックに基づいて、ターゲット帯域幅制限値に適した対応するスロットルレベルを推定する。
【0033】
ブロック406において、レイテンシトラッカ230は、例えば、スレッドに代わって発行されたメモリへの直接メモリ要求の現在の速度を追跡することによって、スレッドによる現在の実際のメモリ帯域幅利用をモニタする。ブロック408において、スロットルコントローラ228は、モニタされた実際のメモリ帯域幅利用を、ソフトウェアが設定したターゲットメモリ利用帯域幅制限と比較する。ソフトウェアによって定義されたターゲットメモリ帯域幅利用制限を満たす場合、ブロック410において、スロットルコントローラ228は、スレッドのスロットルレベルをより制限の少ないスロットルレベルに調整し、ブロック406において、より制限の少ないスロットルレベルでのスレッドのモニタリングに戻る。そうではなく、ソフトウェアによって定義されたターゲット制限が、モニタされた実際のメモリ帯域幅利用によって満たされない場合、ブロック412において、スロットルコントローラ228は、スレッドのスロットルレベルをより制限の多いスロットルレベルに調整し、ブロック406に戻って、より制限の多いスロットルレベルでスレッドをモニタする。このようにして、スロットルコントローラ228は、ソフトウェアによって定義されたターゲット制限に適したスロットルレベルにダイヤルインする。上記の表1を用いた例として、ブロック404において、スロットルコントローラ228が、スレッドの初期スロットルレベルとしてスロットルレベル5を設定したと仮定する。スロットルレベル5において、スレッドが、ソフトウェアによって定義された制限によって表される最大値よりも低い速度でメモリへの直接要求を発行する場合、スロットルコントローラ228は、ブロック410において、スロットルレベルをスロットルレベル4にデクリメントしてもよい。そうではなく、メモリ要求発行の速度が最大値を超える場合、スロットルコントローラ228は、ブロック412においてスロットルレベルをスロットルレベル5にインクリメントし、これにより、ソフトウェアによって定義された制限を満たすように、メモリ要求発行の速度をさらに抑制してもよい。
【0034】
いくつかの実施形態では、メモリ帯域幅制限サブシステム134は、方法300によって表される動的ハードウェア制御メモリ要求スロットルと、方法400によって表されるソフトウェアによって定義されたメモリ要求スロットルと、の両方を実施してもよい。このような場合、ソフトウェアによって定義されたターゲットメモリ帯域幅利用制限は、方法400に従って、スロットルコントローラ228によって使用され得る最も制限の少ないメモリスロットルレベルを制御し、スロットルコントローラ228は、動的スロットルレベル設定方法300に従って、より制限の多いスロットルレベルを実施することができる。
【0035】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0036】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0037】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。