(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-03
(45)【発行日】2024-04-11
(54)【発明の名称】非同期パイプラインのステージの動作速度の制御
(51)【国際特許分類】
G06F 9/38 20180101AFI20240404BHJP
G06F 1/3206 20190101ALI20240404BHJP
G06F 1/3296 20190101ALI20240404BHJP
【FI】
G06F9/38 310J
G06F1/3206
G06F1/3296
(21)【出願番号】P 2021092900
(22)【出願日】2021-06-02
(62)【分割の表示】P 2019503302の分割
【原出願日】2017-07-20
【審査請求日】2021-06-03
【審判番号】
【審判請求日】2023-05-24
(32)【優先日】2016-07-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】グレッグ サドウスキー
(72)【発明者】
【氏名】ジョン カラマティアノス
(72)【発明者】
【氏名】ショーミ エヌ. ダス
【合議体】
【審判長】林 毅
【審判官】山崎 慎一
【審判官】吉田 美彦
(56)【参考文献】
【文献】特開2006-039754(JP,A)
【文献】米国特許出願公開第2015/0341032(US,A1)
【文献】特表2006-500813(JP,A)
【文献】米国特許第06369614(US,B1)
【文献】特開2006-099676(JP,A)
【文献】V. Gupta,Energy conservation in asynchronous systems using self-adaptive fine-grain voltage scaling, 2013 International Green Computing Conference Proceedings ,米国,IEEE,2013年06月27日,https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6604491
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/38
G06F1/3206
G06F1/3296
(57)【特許請求の範囲】
【請求項1】
第1ステージと
、第2ステージと、
第3ステージと、前記第1ステージの少なくとも一部に駆動電流を供給するための少なくとも1つのバッファと、を備える非同期パイプラインと、
前記第1ステージの動作速度の変更を示す制御信号を前記第1ステージに提供するコントローラであって、前記
動作速度は、前記第1ステージの少なくとも一部に供給される前記駆動電流の強さを変更すること
によって変更され、前記変更は、前記第1ステージの完了ステータスと、前
記第2ステージ
及び前記第3ステージの完了ステータスと、の比較に基づいて決定される、コントローラと、を備える、
装置。
【請求項2】
前
記第2ステージは、前記第1ステージに対する入力データを生成する左側ステージ
であり、
前記第3ステージは、前記第1ステージによって生成された出力データを受信する右側ステージ
である、
請求項1の装置。
【請求項3】
前記コントローラは、前記第1ステージに印加される動作電圧の変更を示す制御信号を前記第1ステージに提供するように構成されており、前記動作電圧の変更は、前記第1ステージの完了ステータスと前
記第2ステージ
及び前記第3ステージの完了ステータスとの比較に基づいて決定される、
請求項1の装置。
【請求項4】
前記少なくとも1つのバッファは、
可変ドライブ強度で動作可能である、
請求項1の装置。
【請求項5】
前記第1ステージの完了ステータス及び前
記第2ステージの完了ステータスを決定する複数のモジュールをさらに備える、
請求項1の装置。
【請求項6】
前記複数のモジュールは、前記第1ステージ及び前
記第2ステージによるタスクの実行の開始に応じて、前記第1ステージ及び前
記第2ステージによって生成された出力信号を監視することによって、前記第1ステージ及び前
記第2ステージの完了ステータスを決定する、
請求項5の装置。
【請求項7】
前記第1ステージのクリティカルパスに対応する第1レプリカクリティカルパスと、
前
記第2ステージに関連す
る第2レプリカクリティカルパスであって、前記複数のモジュールは、前記第1ステージ及び前
記第2ステージによるタスクの実行の開始と同時に前記第1レプリカクリティカルパス及び前
記第2レプリカクリティカルパスに提供された入力信号に応じて、前記第1レプリカクリティカルパス及び前
記第2レプリカクリティカルパスによって生成された出力信号に基づいて、前記第1ステージ及び前
記第2ステージの完了ステータスを決定する
、第2レプリカクリティカルパスと、をさらに備える、
請求項5の装置。
【請求項8】
異なる命令のタイプ、命令オペコード又は入力データの特性に関する推定完了時間を示す少なくとも1つのルックアップテーブルであって、前記第1ステージの完了ステータス及び前
記第2ステージの完了ステータスは、前記第1ステージ及び前
記第2ステージによって実行されたタスクに関連する命令のタイプ、命令オペコード又は入力データの特性のうち少なくとも1つによって示される推定完了時間に基づいて決定される、少なくとも1つのルックアップテーブルをさらに備える、
請求項1の装置。
【請求項9】
前記変更は、前記第1ステージ及び前
記第2ステージ内の所定の位置で決定された部分的な完了ステータスに基づいて決定される、
請求項1の装置。
【請求項10】
非同期パイプラインの第1ステージの完了ステータスと、前記非同期パイプライン
の第2ステージ
及び前記非同期パイプラインの第3ステージの完了ステータスと、を比較することと、
前記第1ステージの動作速度の変更を示す制御信号を前記第1ステージに提供することであって、前記
動作速度は、前記非同期パイプラインの少なくとも1つのバッファによって前記第1ステージの少なくとも一部に供給される駆動電流の強さを変更すること
によって変更され、前記変更は前記比較に基づいて決定される、ことと、を含む、
方法。
【請求項11】
前
記第2ステージは、前記第1ステージに対する入力データを生成する左側ステージ
であり、
前記第3ステージは、前記第1ステージによって生成された出力データを受信する右側ステージ
である、
請求項10の方法。
【請求項12】
前記比較に基づいて、前記第1ステージに印加される動作電圧の変更を決定することをさらに含み、
前記制御信号を提供することは、前記第1ステージに印加される動作電圧の変更を示す制御信号を前記第1ステージに提供することを含む、
請求項10の方法。
【請求項13】
前記少なくとも1つのバッファ
は、可変ドライブ強度で動作可能である、
請求項10の方法。
【請求項14】
前記第1ステージ及び前
記第2ステージに関連する複数のモジュールを使用して、前記第
1ステージの完了ステータス及び前
記第2ステージの完了ステータスを決定することをさらに含む、
請求項10の方法。
【請求項15】
前記
第1ステージの完了ステータス及び前記第2ステージの完了ステータスを決定することは、前記第1ステージ及び前
記第2ステージによるタスクの実行の開始に応じて、前記第1ステージ及び前
記第2ステージによって生成された出力信号を監視することを含む、
請求項14の方法。
【請求項16】
前記
第1ステージの完了ステータス及び前記第2ステージの完了ステータスを決定することは、前記第1ステージに関連する第1レプリカクリティカルパスと、前記第2ステージに関連す
る第2レプリカクリティカルパスと、によって生成された出力信号を決定することであって、前記出力信号は、前記第1ステージ及び前記第2ステージによるタスクの実行の開始と同時に入力信号が前記第1レプリカクリティカルパス及び前
記第2レプリカクリティカルパスに提供されたことに応じて、前記第1レプリカクリティカルパス及び前
記第2レプリカクリティカルパスによって生成される、ことを含む、
請求項14の方法。
【請求項17】
前記第1のステージの完了ステータス及び前
記第2ステージの完了ステータスは、異なる命令のタイプ、命令オペコード又は入力データの特性に関する推定完了時間を示す少なくとも1つのルックアップテーブルに記憶された推定完了時間に基づいている、
請求項14の方法。
【請求項18】
前記変更は、前記第1ステージ及び前記第2ステージ内の所定の位置で決定された部分的な完了ステータスに基づいて決定される、
請求項10の方法。
【請求項19】
複数のステージを備える非同期パイプラインと、
対応するステージに制御信号を提供する複数のコントローラであって、前記制御信号は、対応するステージの動作速度の変更を示し、少なくとも1つの前記変更は、前記非同期パイプラインの少なくとも1つのバッファによって前記複数のステージのうち少なくとも1つのステージの少なくとも一部に供給される駆動電流の強さを変更することを含み、前記変更は、対応するステージの完了ステータスと、
少なくとも2つの他のステージ
の完了ステータスと、の比較に基づいて決定される、複数のコントローラと、を備える、
装置。
【請求項20】
前記複数のコントローラは、対応するステージに印加される動作電圧、及び、対応するステージのバッファのドライブ強度のうち少なくとも1つの変更を示す制御信号を提供する、
請求項19の装置。
【発明の詳細な説明】
【技術分野】
【0001】
(政府のライセンス権)
本発明は、エネルギー省(DOE)により発注された主契約番号DE-AC52-07NA27344、外注番号B609201の下で政府の支援を受けてなされた。政府は本発明において一定の権利を有する。
【背景技術】
【0002】
処理システムは、通常、命令を処理する一連のステージを含むパイプラインアーキテクチャを実装する。各ステージは、入力データを演算して出力データを生成するタスクを実行する。データは、フリップフロップ又はラッチとして実装することができるレジスタによってステージ間で通信される。ステージは、入力レジスタからの入力データにアクセスし、出力データを出力レジスタに提供する。パイプラインのステージの入力レジスタは、パイプラインの前段のステージによって対応する出力レジスタに提供された出力データを、入力データとして受信することができ、当該ステージの出力レジスタは、後段のステージの入力データとすることができる。パイプライン内のステージは、場合によっては複数の入力データのセットを同時に演算する。例えば、単一命令複数データ(SIMD)演算を実施するパイプラインアーキテクチャは、「ウェーブ」又は「計算ウェーブ」と呼ばれる同一の命令複数入力データのセットを同時に実行することができる。ウェーブは、異なる入力データのセットに対応する複数のワークアイテムで構成されている。ワークアイテムの実行時間は、通常、入力データによって異なるため、各ウェーブのワークアイテムは、異なる時間に完了することがある。
【0003】
添付図面を参照することによって、本開示は当業者により良く理解され、その多数の特徴及び利点が明らかになるであろう。異なる図面での同じ参照記号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0004】
【
図1】いくつかの実施形態による、非同期パイプラインを含む処理システムのブロック図である。
【
図2】いくつかの実施形態による、非同期パイプラインの一部のブロック図である。
【
図3】いくつかの実施形態による、レプリカクリティカルパスを含む非同期パイプラインの一部のブロック図である。
【
図4】いくつかの実施形態による、非同期パイプラインの一部のブロック図である。
【
図5】いくつかの実施形態による、レプリカクリティカルパスにおいて中間完了ステータス検出を実施する非同期パイプラインの一部のブロック図である。
【
図6】いくつかの実施形態による、中間完了ステータス検出を実施する非同期パイプラインの一部のブロック図である。
【
図7】いくつかの実施形態による、並列処理を実施する非同期パイプラインの一部のブロック図である。
【
図8】いくつかの実施形態による、非同期パイプライン内のステージの動作速度を変更する方法のフロー図である。
【発明を実施するための形態】
【0005】
実行パイプラインのステージが同期的である場合であって、ステージ間のレジスタが同じクロック信号を使用してクロックされるか非同期である場合には、パイプラインの各ステージはセルフタイム式であり、これにより、異なるステージが、他のステージから独立して、入力データを読み出し、命令を実行し、出力データを書き込むことができる。何れの場合も、ステージは、当該ステージによって実行される演算のタイプ、当該ステージによって演算されるデータ、及び、当該ステージによって演算される一連のデータ値に応じた様々なレイテンシでタスクを完了する。他のステージよりも早くタスクを完了したステージは、他のステージの完了を待つ間アイドル状態に留まるため、パイプラインの全体的なスループットが低下し、アイドル状態のステージで消費される静的電力を浪費する。同期パイプラインのタイミングは、通常、同期パイプラインの動作周波数を最大限に高めようとするために、論理合成中の同期パイプラインの全ステージに亘るクリティカルパスのレイテンシ、及び、同期パイプラインのハードウェアの物理レイアウトに基づいて調整される。しかしながら、同期パイプラインは、通常、同期パイプラインの設計中に使用されるクリティカルパスのレイテンシとは異なるレイテンシを有する様々な異なる演算を実行する。その結果、同期パイプラインのパフォーマンスは、常に最適であるとは限らず、期待される程エネルギー効率が良いとは限らない。
【0006】
非同期パイプラインのパフォーマンス及びエネルギー効率は、非同期パイプライン内の第1ステージの完了ステータスと、少なくとも1つの他の(第2)ステージの完了ステータスと、の比較に基づいて、非同期パイプラインの(第1)ステージの動作速度を変更することによって向上することができる。いくつかの実施形態では、非同期パイプラインの第1ステージの動作速度を変更することは、第1ステージ(若しくは、その一部)に印加される動作電圧を変更すること、又は、第1ステージ内の1つ以上のドライブバッファに印加されるバッファドライブ強度を変更することを含む。例えば、第1ステージの完了ステータスが「完了」に設定された場合には、第1ステージが入力データに対する演算を完了して、その出力データを生成したことを示す。同時に、第1ステージに入力データを提供する隣接ステージと、第1ステージからの出力データを受信する別の隣接ステージと、の完了ステータスが両方とも「処理中」に設定された場合には、両ステージが入力データに対する演算を完了していないことを示す。この場合、第1ステージに対するバッファドライブ強度又は電圧供給は、隣接ステージが処理を完了する間の第1ステージのエネルギーを節約するために減らすことができる。別の例では、第1ステージの完了ステータスが「処理中」である一方で、第1ステージに入力データを提供する隣接ステージと、第1ステージからの出力データを受信する別の隣接ステージと、の完了ステータスが両方とも「完了」である場合には、第1ステージによる処理を加速させてそのレイテンシを短縮し、第2ステージにおけるアイドル時間を短縮するために、第1ステージに対するバッファドライブ強度又は電圧供給を増大することができる。
【0007】
第1ステージ及び第2ステージによる計算ウェーブの実行開始に応じて第1ステージ及び第2ステージによって生成される出力信号を監視することにより、第1ステージ及び第2ステージの完了ステータスを決定することができる。いくつかの変形例では、第1ステージ及び第2ステージの完了ステータスは、第1ステージ及び第2ステージにおける計算ウェーブの実行開始と同時に入力信号を第1ステージ及び第2ステージのレプリカクリティカルパスに適用し、次いで、レプリカクリティカルパスの出力において出力信号を検出したことに応じて第1ステージ及び第2ステージが完了したことを判別することによって、決定される。レプリカクリティカルパスは、ステージの回路シミュレーションに基づいて定義される。いくつかの実施形態では、ステージの完了ステータスは、ステージ又はステージの一部についての推定完了時間を示す。例えば、命令のタイプ(命令のオペコードによって示される)及び入力データの特性に基づいて完了時間の推定値を提供するルックアップテーブルを使用して、第1ステージ及び第2ステージの完了ステータスを決定することができる。他の実施形態では、ステージの完了ステータスは、ステージの論理クラウド内の監視信号、又は、アクティビティの出力信号に基づいて決定される。例えば、ステージからの全ての出力信号が暫く変わらない場合、当該ステージがタスクを完了した可能性がある。別の例では、ステージの論理クラウド内の所定の位置における1つ以上の信号が変わらない場合、ステージが特定の割合の演算(例えば、50%の演算等)を完了した可能性がある。
【0008】
図1は、いくつかの実施形態による、非同期パイプライン105を含む処理システム100のブロック図である。本明細書で使用される「非同期パイプライン」という用語は、非同期パイプラインのステージが、処理システム100内の非同期パイプラインの外部のエンティティによって使用されるグローバルクロック又はタイミング基準と同期しないクロック又はタイミング基準に従って動作することを示す。さらに、非同期パイプライン内の個々のステージは、必ずしも互いに同期しているとは限らず、場合によっては各々の内部クロックに従って動作することができる。非同期パイプライン内のステージは、「セルフタイム式」ステージと呼ばれることもある。よって、本明細書で説明するように、非同期パイプライン内のステージの動作速度は、非同期パイプライン内の他のステージの動作速度とは無関係に変動することができる。
【0009】
非同期パイプライン105は、本明細書ではまとめて「ステージ110~114」と呼ばれる複数のステージ110,111,112,113,114を含む。データは、フリップフロップ、ラッチ又は他の記憶装置を用いて実装することができるパイプラインレジスタ120,121,122,123,124,125(本明細書ではまとめて「レジスタ120~125」と呼ばれる)を使用して、非同期パイプライン105内の様々な箇所に記憶される。図示した実施形態では、ステージ110は、フリップフロップとして実施することができるレジスタ120に記憶された入力データに対して論理演算を実行する。ステージ110は、ラッチとして実施することができるレジスタ121に記憶される出力データを生成する。ステージ111は、レジスタ121に記憶された入力データに対して乗算演算を実行し、ラッチとして実施することができるレジスタ122に記憶される出力データを生成する。ステージ112は、レジスタ122に記憶された入力データに対して加算演算を実行し、ラッチとして実施することができるレジスタ123に記憶される出力データを生成する。ステージ113は、レジスタ123に記憶された入力データに対して正規化演算を実行し、ラッチとして実施することができるレジスタ124に記憶される出力データを生成する。ステージ114は、レジスタ124に記憶された入力データに対して丸め演算を実行し、フリップフロップとして実施することができるレジスタ125に記憶される出力データを生成する。非同期パイプライン105には、5つのステージ及び対応する数のパイプラインレジスタが示されているが、非同期パイプライン105のいくつかの実施形態は、同じ又は異なる演算を実行するより多い又はより少ないステージとともに、より多い又はより少ないパイプラインレジスタを含む。
【0010】
入力コントローラ130は、クロック信号131及び有効信号132を、レジスタ120及びモジュール135に提供する。クロック信号131は、データをレジスタ120に提供する同期ドメインで使用される外部クロック信号と同期している。よって、モジュール135は、例えば、同期ドメインからの信号をパイプライン105の非同期ドメインに変換することによって、同期ドメインと非同期パイプライン105との間の境界として機能する。モジュール135は、非同期パイプライン105が追加データを処理する準備ができているか否かを示すフィードバック133を提供する。例えば、フィードバック133は、論理110が追加データを処理する準備ができていることを示すことができ、次いで、入力コントローラ130によってレジスタ120にクロックされる。モジュール140は、非同期パイプライン105から出力される信号を制御するために使用される。モジュール140のいくつかの実施形態は、非同期パイプライン105の非同期ドメインと、処理システム100内の同期ドメインと、の間の境界として機能する。例えば、モジュール140は、有効データがレジスタ125にクロックされる準備ができていることを示す有効信号141を提供することができる。また、モジュール140及びレジスタ125は、同期ドメインで使用される外部クロック信号に同期しているクロック信号145を受信することができる。
【0011】
モジュール150,151,152(本明細書ではまとめて「モジュール150~152」と呼ばれる)は、モジュール135,140と共に動作して、ステージ110~114の動作を調整する。例えば、モジュール150は、ステージ111の完了ステータスを示す完了ステータス信号155をステージ111から受信し、レジスタ121に記憶された入力データに対するタスクの実行がステージ111によって開始されたことを示す開始信号156をモジュール135から受信する。モジュール150は、次のステージ112が次のデータセットに対するタスクの実行を開始する準備ができていることを示すフィードバック157と、ステージ111によって提供されるデータのレジスタ122へのラッチを制御するラッチ制御信号158と、レジスタ122からのデータへのステージ112によるアクセスと、を提供する。また、モジュール150は、レジスタ122に記憶されたデータを演算するタスクの実行を開始し、実行が開始されたことを後続のモジュール151に示す開始信号159を提供する。説明を明確にするために、モジュール135,140,151,152は、対応する信号(対応する参照番号によって示されていない)を提供し受信する。
【0012】
ステージコントローラ161,162,163,164(本明細書ではまとめて「ステージコントローラ161~164」と呼ばれる)は、非同期パイプライン105内のステージ111~114の動作を制御するために使用される。ステージコントローラ162のいくつかの実施形態は、ステージ111の完了ステータス情報を示すためにモジュール150によって提供されることを示す信号165と、ステージ113の完了ステータス情報を示すためにモジュール151によって提供される信号166と、に基づいて、ステージ112を制御するように構成されている。ステージコントローラ162は、ステージ112の動作速度を設定又は変更するために使用される制御信号167を提供する。ステージコントローラ162は、ステージ111の完了ステータス、ステージ112の完了ステータス、ステージ113の完了ステータス、又は、これらの組み合わせに基づいて、ステージ112の動作速度(又は、その変更)を決定する。本明細書で説明するように、ステージコントローラ161,163,164は、1つ以上の他のステージの完了ステータスに基づいて、対応するステージ111,113,114の動作速度を制御することができる。説明を明確にするために、ステージ111,113,114によって提供又は受信される全ての対応する信号伝達を示す参照番号は、提供されていない。
【0013】
いくつかの実施形態では、ステージ111~114の動作速度は、ステージ111~114に実装される1つ以上のバッファのドライブ強度、ステージ111~114の動作電圧、又は、これらの組み合わせによって決定される。例えば、ステージコントローラ162は、表1に従って、ステージ111~113の完了ステータスに基づいて、ステージ112の動作速度に対する変更を決定することができる。
【表1】
【0014】
表1の完了ステータスは、対応するステージが現在のタスクを実行中(処理中)であること、又は、対応ステージが現在のタスクの実行を完了しており(完了)、これにより新たなタスクの実行を受け付ける準備ができていることを示す。動作速度は、エネルギーを節約するため又はステージ112による処理を加速するために変更することができる。例えば、ステージ111の完了ステータスが処理中であり、ステージ112の完了ステータスが完了であり、ステージ113の完了ステータスが処理中である場合、ステージコントローラ162は、ステージ112によるエネルギー消費を低減するために、ステージ112に提供されるバッファドライブ強度及び電圧供給を減少させる。別の例では、ステージ111の完了ステータスが完了であり、ステージ112の完了ステータスが処理中であり、ステージ113の完了ステータスが完了である場合、ステージコントローラ162は、ステージ112による処理を加速させるために、ステージ112に提供されるバッファドライブ強度及び電圧供給を増大させる。本明細書で説明するように、表1のいくつかの実施形態は、ルックアップテーブルに記憶することができる。
【0015】
ステージ111~114への電圧供給を変更することは、ステージ111~114内の全てのロジックの動作速度に影響を与える。しかしながら、本明細書で説明するように、いくつかの実施形態では、ステージ111~114の一部又は領域に供給される電圧は、別々の一部又は領域の動作速度を制御するために、ステージ111~114の他の一部又は領域とは別に変更される。ステージ111~114内のバッファのドライブ強度を変更することは、バッファの上流にあるステージ111~114の一部又は領域に影響を与える。例えば、各ステージ111~114の始め、中間、終わりにおけるバッファのドライブ強度を変更することは、ステージ111~114の対応する部分におけるパスの動作速度を変更するために使用することができる。ルーティング遅延を制御するために、構成可能な駆動バッファを、ステージ111~114のロジック内の長い配線上に配置することもできる。バッファのドライブ強度を増大させることは、通常、ステージ111~114内のパスに沿った信号の伝播時間を短縮させ、これにより、パスに沿った計算時間を短縮させることができる。いくつかの実施形態では、相互接続ロジックを供給するために、別個の電圧源を使用して信号伝播速度が制御される。別個の電圧源は、ステージ111~114内のロジックの他の部分に供給するのに使用される他の電圧源とは無関係に制御される。いくつかの変形例では、きめ細かい電圧制御(例えば、1ナノ秒程度の短い電圧状態間遷移時間で10ミリボルト(mV)ステップ)で電圧を変更することができる。ステージ111~114のロジックの一部の電力ゲーティング又は電圧制御のために、フットトランジスタを使用することができる。
【0016】
処理システム100のいくつかの実施形態は、入力コントローラ130又はステージコントローラ161~164に接続されたパイプラインコントローラ170を含む。パイプラインコントローラ170は、パイプラインステージ110~114の完了時間を決定する。ステージコントローラ161~164は、非同期パイプライン105の全体の完了時間に基づいて、対応するステージ110~114の完了時間を調整しようと試みることができる。本明細書で説明するように、調整には、ステージ110~114のロジックコーンにおける供給電圧の変更及びバッファのドライブ強度の変更が含まれる。例えば、パイプラインコントローラ170は、コンピュータユニットによって実施される非同期の単一命令複数データ(SIMD)パイプラインのレーンにおける命令の非同期実行を制御することができる。コンピュータユニット内の他の回路又はパイプラインは、同期的に動作し、専用バッファを介して非同期SIMDパイプラインと通信することができる。パイプラインコントローラ170は、非同期SIMDパイプラインの複数のレーンに亘る単一命令の実行の進行を監視して、タスク完了の速度を(複雑さを最小限に抑えるためにおそらく最後のパイプラインステージ114において)再調整することによって、レーンの相違(すなわち、ウェーブ内の全てのSIMDレーンに亘る命令の完了時間の差異)を排除するのをサポートすることができ、これにより、全てのレーンが同じ命令に対するタスクをほぼ同時に完了する。パイプラインコントローラ170を使用してレーンの相違を制御することによって、(a)SIMDパイプライン内を進むコンシューマ命令にデータをバイパスするロジック、及び、(B)同期ドメイン内のVRFに結果を書き戻すロジックを単純化することができる。いくつかの変形例では、個々のステージコントローラ161~164は、より短い全体時間で命令の実行を完了することによって、タイミングを改善し、エネルギー消費を減らすことを試みる。
【0017】
図2は、いくつかの実施形態による、非同期パイプラインの一部200のブロック図である。一部200は、入力レジスタ210からの入力データにアクセスし、出力データを出力レジスタ215に提供するステージ205を含む。一部200は、
図1に示す非同期パイプライン105のいくつかの実施形態において使用される。いくつかの変形例では、入力レジスタ210及び出力レジスタ215は、
図1に示すレジスタ121~124のうち1つ以上のレジスタを実装するために使用され、ステージ205は、
図1に示すステージ110~114のうち対応するステージを実装するために使用される。ステージ205は、ステージ205に割り当てられたタスクの一部を実行するためのロジックを実装するロジック領域220,221,222(本明細書ではまとめて「ロジック領域220~222」と呼ばれる)を含む。ロジック領域220~222は、一部200内のロジックの上流領域に駆動電流を提供するバッファ225,226,227(本明細書ではまとめて「バッファ225~227」と呼ばれる)を含む相互接続ネットワークによって接続されている。バッファ225~227は、バッファ225~227によって受信された制御信号に基づいて決定された可変ドライブ強度で動作することができる構成可能なバッファである。
【0018】
また、一部200は、非同期パイプライン内の他のステージ(図示省略)の完了ステータスに基づいてステージ205(又は、その一部)の動作速度を設定又は変更することができるステージコントローラ230を含む。いくつかの変形例では、ステージコントローラ230は、
図1に示すステージコントローラ161~164の何れかに対応する。ステージコントローラ230のいくつかの実施形態は、ステージ205の動作電圧を変更して、ステージ205の動作速度を変更する。ステージ205全体に印加される動作電圧を変更して、ロジック領域220~222の動作速度を変更することができ、又は、ロジック領域220~222に印加される動作電圧を個別に変更して、ロジック領域220~222のうち1つ以上のロジック領域の1つ以上の動作速度を変更することができる。ステージコントローラ230のいくつかの実施形態は、バッファ225~227のうち1つ以上のバッファのドライブ強度を変更して、対応するバッファ225~227の下流にあるロジックの動作速度を変更する。例えば、ステージコントローラ230は、バッファ225のドライブ強度を変更して、ロジック領域222及びロジック領域221等の下流ロジックの動作速度を変更することができる。
【0019】
一部200のいくつかの実施形態は、ステージコントローラ230に組み込まれるか、ステージコントローラ230がアクセス可能なメモリに記憶されるルックアップテーブル(LUT)235を含む。ルックアップテーブル235は、ステージ205によって実行可能な異なるタイプの命令の完了時間の推定値を含むエントリを含む。例えば、ルックアップテーブル235内の各エントリは、命令オペコード、命令タイプ、入力データ値等によってインデックスされる完了時間の推定値を含む。いくつかの変形例では、完了時間の推定値は、ステージ205の対象となる回路シミュレーション又はランダムな回路シミュレーションを使用して決定される。次に、ステージコントローラ230は、ステージ205によって実行されている命令のオペコード若しくはタイプ、又は、命令によって演算されているデータの値(例えば、入力レジスタ210に記憶されたデータの値)に基づいて、ステージ205の完了ステータスを推定することができる。例えば、ステージコントローラ230は、ステージ205が命令を含むタスクを実行開始する開始時間を示す信号を、モジュール(例えば、
図1に示すモジュール135,140,150~152の何れか等)から受信することができる。ステージコントローラ230は、現在の時間と、ルックアップテーブル235内のエントリに基づいて決定された推定完了時間を開始時間に加えた時間と、を比較することによって、ステージ205の完了ステータスを推定する。ステージコントローラ230のいくつかの実施形態は、ルックアップテーブル235に記憶された情報に基づいて、他のステージ(入力データを入力レジスタ210に提供するステージ、又は、出力レジスタ215からの出力データにアクセスするステージ等)の完了時間を推定する。
【0020】
図3は、いくつかの実施形態による、レプリカクリティカルパスを含む非同期パイプラインの一部300のブロック図である。一部300は、入力レジスタ310からの入力データにアクセスし、出力データを出力レジスタ315に提供するステージ305を含む。一部300は、
図1に示す非同期パイプライン105のいくつかの実施形態において使用される。いくつかの変形形態では、入力レジスタ310及び出力レジスタ315は、
図1に示すレジスタ121~124のうち1つ以上のレジスタを実装するために使用され、ステージ305は、
図1に示すステージ110~114のうち対応するステージを実装するために使用される。
【0021】
ステージ305は、ステージ305内の1つ以上のクリティカルパスのタイミングを複製するように構成されたロジックを含むレプリカクリティカルパス320に関連しており、これにより、ステージ305内のクリティカルパスが入力データの処理を完了するのに必要な時間に対応する時間間隔の後に、レプリカクリティカルパス320が入力データの処理を完了する。例えば、レプリカクリティカルパス320は、ステージ305のクリティカルパスに沿って実装されたゲートの数と一致する数のゲートを含むことができる。また、レプリカクリティカルパス320は、ステージ305のクリティカルパスに沿うゲートのファンイン及びファンアウト値と一致するように構成することができる。レプリカクリティカルパス320のいくつかの実施形態は、ステージ305内のクリティカルパスのロジックと必ずしも同一ではないロジックを含む。代わりに、レプリカクリティカルパス320のロジックは、レプリカクリティカルパス320に沿った信号のフローの監視を容易にするために、入力信号がレプリカクリティカルパス320のゲートを通ると入力信号の値が変わるように構成されている。レプリカクリティカルパス320と実際のクリティカルパスとの間のレイテンシは、回路シミュレーションを用いて決定することができる。
【0022】
また、一部300は、ステージ305の完了ステータスを推定するのに使用される信号を提供及び受信するモジュール325,330を含む。モジュール325,330は、
図1に示すモジュール120,125,150~152のいくつかの実施形態を実装するために使用される。モジュール325のいくつかの実施形態は、入力データの処理をレプリカクリティカルパス320に開始させるための開始信号335を提供する。開始信号335は、ステージ305が入力レジスタ310に記憶された入力データの処理を開始するのに使用される開始信号と同時に提供される。モジュール330は、開始信号335に応じてレプリカクリティカルパス320によって生成される出力信号340を監視して、レプリカクリティカルパス320の完了ステータスを決定する。いくつかの変形例では、モジュール330は、出力信号340の特定のパターンを検出することによって、又は、レプリカクリティカルパス320に関連する出力レジスタに記憶されたデータが定常状態に達したと判別することによって、レプリカクリティカルパス320が入力データに対する演算を完了したと判別する。レプリカクリティカルパス320に関してモジュール330が決定した完了時間にレイテンシを加算又は減算して、ステージ305の推定完了時間と実際の完了時間との差を補償することができる。
【0023】
図4は、いくつかの実施形態による、非同期パイプラインの一部400のブロック図である。一部400は、入力レジスタ410からの入力データにアクセスし、出力データを出力レジスタ415に提供するステージ405を含む。一部400は、
図1に示す非同期パイプライン105のいくつかの実施形態において使用される。いくつかの変形例では、入力レジスタ410及び出力レジスタ415は、
図1に示すレジスタ121~124のうち1つ以上のレジスタを実装するために使用され、ステージ405は、
図1に示すステージ110~114のうち対応するステージを実装するために使用される。
【0024】
ステータスモジュール420は、ステージ405によって提供された出力信号を監視するように構成されている。ステータスモジュール420は、出力信号の特性を使用してステージ405の完了ステータスを決定する。例えば、ステータスモジュール420は、ステージ405によって生成された出力信号の変化を監視することができる。ステータスモジュール420は、出力信号の値が変化している場合に、ステージ405が現在のタスクを処理していると判別する。いくつかの変形例では、ステータスモジュール420は、出力信号の値が定常状態である又は閾値未満のレートで変化している場合に、ステージ405が現在のタスクの処理を完了したと判別する。
【0025】
また、一部400は、ステージ405の完了ステータスを推定するのに使用される信号を提供及び受信するモジュール425,430を含む。モジュール425,430は、
図1に示すモジュール120,125,150~152のいくつかの実施形態を実装するために使用される。モジュール425のいくつかの実施形態は、ステージ405が入力レジスタ410に記憶された入力データを使用してタスクの処理を開始したことを示す開始信号435を、ステータスモジュール420に提供する。開始信号435は、ステージ405が入力レジスタ410に記憶された入力データの処理を開始するのに使用される開始信号と同時に提供される。上述したように、モジュール430は、開始信号435に応じてステージ405によって生成された出力信号の監視を開始して、ステージ405の完了ステータスを決定する。ステータスモジュール420は、ステージ405の完了ステータスを示す信号をモジュール430に提供する。例えば、ステータスモジュール420は、ステージ405の完了ステータスが「処理中」である間に論理ロー信号を論理モジュール430にアサートし、次に、ステージ405の完了ステータスが「完了」に移行したことに応じて、論理ハイ信号をモジュール430にアサートすることができる。
【0026】
図5は、いくつかの実施形態による、レプリカクリティカルパスにおいて中間完了ステータス検出を実施する非同期パイプラインの一部500のブロック図である。一部500は、入力レジスタ510からの入力データにアクセスし、出力データを出力レジスタ515に提供するステージ505を含む。一部500は、
図1に示す非同期パイプライン105のいくつかの実施形態において使用される。いくつかの変形例では、入力レジスタ510及び出力レジスタ515は、
図1に示すレジスタ121~124のうち1つ以上のレジスタを実装するために使用され、ステージ505は、
図1に示すステージ110~114のうち対応するステージを実装するために使用される。
【0027】
ステージ505は、ステージ505内の1つ以上のクリティカルパスのタイミングを複製するように構成されたロジックを含むレプリカクリティカルパス520に関連しており、これにより、レプリカクリティカルパス520は、ステージ505内のクリティカルパスが入力データの処理を完了するのに必要な時間に対応する時間間隔の後に入力データの処理を完了する。レプリカクリティカルパス520は、
図3に示すレプリカクリティカルパス320といくつかの特徴を共有する。しかしながら、レプリカクリティカルパス520は、レプリカクリティカルパス520の始めと終わりの間の位置での中間完了ステータスを決定するのに使用されるロジック525(レジスタ、フリップフロップ、ラッチ又は他の回路等)を含むことから、レプリカクリティカルパス320とは異なる。例えば、ロジック525は、レプリカクリティカルパス520における処理の実行中の時点でレプリカクリティカルパス520によって生成された結果を記憶するレジスタを含むことができる。
【0028】
また、一部500は、ステージ505の完了ステータスを推定するのに使用される信号を提供及び受信するモジュール530,535を含む。モジュール530,535は、
図1に示すモジュール120,125,150~152のいくつかの実施形態を実装するために使用することができる。モジュール530のいくつかの実施形態は、入力データの処理をレプリカクリティカルパス520に開始させるための開始信号540を提供する。開始信号540もロジック525に提供される。開始信号540は、ステージ505が入力レジスタ510に記憶された入力データの処理を開始するのに使用される開始信号と同時に提供される。ロジック525は、例えば、レプリカクリティカルパス520によってロジック525で生成された信号の特性を監視することによって、開始信号540に応じて、レプリカクリティカルパス520の中間完了ステータスを決定することができる。例えば、ロジック525は、ロジック525が受信した信号の特定パターンを検出することによって、又は、ロジック525に関連するレジスタに記憶されたデータが定常状態に達したと判別することによって、レプリカクリティカルパス520が入力データに対する演算を完了したと判別することができる。ロジック525は、レプリカクリティカルパス520の中間完了ステータスを示す信号をモジュール535に提供することができる。本明細書で説明するように、ステージ505の推定中間完了時間と実際の中間完了時間との差を補償するために、レプリカクリティカルパス520に関してロジック525が決定した中間完了時間に対してレイテンシを加算又は減算することができる。
【0029】
中間完了ステータスは、ステージ505の一部の動作速度を変更するためにステージコントローラ(ステージコントローラ161~164等)によって使用される。例えば、ステージコントローラは、ロジック525によって生成された完了ステータスを使用して、ロジック525に先行するステージ505の一部(例えばロジック525の上流にある回路)、又は、ロジック525の後続のステージ505の一部(例えばロジック525の下流にある回路)の動作速度を変更することができる。
図5には単一のロジック525が示されているが、レプリカクリティカルパス520のいくつかの実施形態は、レプリカクリティカルパス520内の異なる場所に配置することができる追加の完了ステータスロジックを含む。さらに、いくつかの実施形態では、レプリカクリティカルパス520の1つ以上の中間完了ステータスを検出するロジックは、
図3に示すモジュール330に実装されるロジック等のように、レプリカクリティカルパス520の全体の完了ステータスを検出するロジックと組み合わされる。
【0030】
図6は、いくつかの実施形態による、中間完了ステータス検出を実施する非同期パイプラインの一部600のブロック図である。一部600は、入力レジスタ610からの入力データにアクセスし、出力データを出力レジスタ615に提供するステージ605を含む。一部600は、
図1に示す非同期パイプライン105のいくつかの実施形態において使用される。いくつかの変形例では、入力レジスタ610及び出力レジスタ615は、
図1に示すレジスタ121~124のうち1つ以上のレジスタを実装するために使用され、ステージ605は、
図1に示すステージ110~114のうち対応するステージを実装するために使用される。
【0031】
ステージ605は、ステージ605に割り当てられたタスクの一部を実行する回路の領域620と、ステージ605に割り当てられたタスクの別の部分を実行する回路の領域625と、を含む。レジスタ630のセットが領域620,625の間に実装されている。レジスタ630は、領域620によって実行された処理の結果を記憶し、ステージ605における追加の処理のために結果を領域625に提供するように構成されている。レジスタ630は、領域620によってレジスタ630に提供される出力信号を監視するように構成されたステータスモニタ635に接続されている。ステータスモジュール635は、レジスタ630に記憶された値の特性を使用して、領域620の完了ステータスを決定する。例えば、ステータスモジュール635は、領域620によって生成された出力信号の変化を監視し、レジスタ630に記憶された出力信号の値が変化している場合に、領域620が現在のタスクを処理中であると判別することができる。また、ステータスモジュール635のいくつかの変形例は、レジスタ630に記憶された値が定常状態である又は閾値未満の速度で変化している場合に、領域620が現在のタスクの処理を完了したと判別することができる。
【0032】
また、一部600は、ステージ605の中間完了ステータスを推定するのに使用される信号を提供及び受信するモジュール640,645を含む。モジュール640,645は、
図1に示すモジュール120,125,150~152のいくつかの実施形態を実装するために使用される。モジュール640のいくつかの実施形態は、ステージ605が入力レジスタ610に記憶された入力データを使用してタスクの処理を開始したことを示す開始信号650を、ステータスモジュール635に提供する。開始信号650は、ステージ605が入力レジスタ610に記憶された入力データの処理を開始するのに使用される開始信号と同時に提供される。上述したように、ステータスモジュール635は、開始信号650に応じてレジスタ630に提供された出力信号の監視を開始し、領域620の完了ステータスを決定する。次に、ステータスモジュール635は、領域620の完了ステータスを示す信号655をモジュール645に提供する。例えば、ステータスモジュール635は、領域620の完了ステータスが「処理中」である間に論理ロー信号をモジュール645にアサートし、次に、領域620の完了ステータスが「完了」に移行したことに応じて論理ハイ信号をモジュール645にアサートすることができる。
【0033】
中間完了ステータスは、ステージ605の領域620,625の動作速度を変更するためにステージコントローラ(
図1に示すステージコントローラ161~164等)によって使用される。例えば、ステージコントローラは、ステータスモジュール635によって生成された完了ステータスを使用して、領域620,領域625又はこれらの組み合わせの動作速度を変更することができる。
図6にはレジスタ630の単一のセット及び単一のステータスモジュール635が示されているが、一部600のいくつかの実施形態は、ステージ605内の異なる場所に配置された追加の完了ステータスロジックを含む。さらに、いくつかの実施形態では、領域620,625の1つ以上の中間完了ステータスを検出するロジックは、
図4に示すモジュール420内で実装されるロジック等のように、ステージ605の全体の完了ステータスを検出するロジックと組み合わされる。
【0034】
図7は、いくつかの実施形態による、並列処理を実施する非同期パイプラインの一部700のブロック図である。一部700は、比較的高いレート又は速度でタスクを完了する高速ステージ705と、比較的低いレート又は速度でタスクを完了する低速ステージ710と、を含む。一部700は、
図1に示す非同期パイプライン105のいくつかの実施形態において実装される。いくつかの変形例では、
図1に示すステージ110~114の各々は、並列に動作している複数のステージを表す。例えば、ステージ111は、異なる入力データに対する乗算演算を並列に実行するように構成された少なくとも一対のステージを表す。1つのステージは、比較的高いレート又は速度でタスクを完了することができ、1つの他のステージは、比較的低いレート又は速度でタスクを完了することができる。
【0035】
非同期パイプラインは、フォーク715で並列ステージ705,710の実行を開始し、並列ステージ705,710の演算結果がジョイン720で組み合わされる。並列分岐は、並列ステージ705,710によるタスクの実行が両方とも完了するまでジョイン720を完了することができない。したがって、1つ以上のステージコントローラ(
図1に示すステージコントローラ161~164等)は、ステージ705,710の動作を、これらの完了ステータスに基づいて調整する。例えば、ステージコントローラは、比較的速いステージ705の動作速度を下げること、比較的遅いステージ710の動作速度を上げること、又は、これらの変更の組み合わせを実行することができ、これにより、両ステージ705,710は、並列ステージ705,710の目標完了時間とほぼ等しい時間に完了する。
【0036】
図8は、いくつかの実施形態による、非同期パイプライン内のステージの動作速度を変更する方法800のフロー図である。方法800は、
図1に示す処理システム100のいくつかの実施形態において実施される。ステージは、左側の隣接ステージによって生成された入力データを受信し、右側の隣接ステージに入力データとして提供される出力データを生成する。ステージのいくつかの実施形態は、
図1に示すステージ112に対応する。この場合、左側の隣接ステージは
図1に示すステージ111に対応し、右側の隣接ステージはステージ113に対応する。
【0037】
ブロック805において、ステージコントローラ(
図1に示すテージコントローラ162等)は、ステージの完了ステータスを示す情報にアクセスする。完了ステータスは、ステージが実行中のタスクを未だ完了していないことを示す情報を含むことができ、この場合、ステージの完了ステータスは「処理中」である。また、完了ステータスは、ステージがタスクを完了したことを示す情報を含むことができ、この場合、ステージの完了ステータスは「完了」である。さらに、完了ステータスは、本明細書で説明するように、ステージの一部又は領域に関連する中間完了ステータスを示す情報を含むことができる。
【0038】
ブロック810において、ステージコントローラは、左側の隣接ステージの完了ステータスを示す情報にアクセスする。完了ステータスは、左側の隣接ステージが実行中のタスクを未だ完了していないことを示す情報を含むことができ、この場合、左側の隣接ステージの完了ステータスは「処理中」である。また、完了ステータスは、左側の隣接ステージがタスクを完了したことを示す情報を含むことができ、この場合、左側の隣接ステージの完了ステータスは「完了」である。さらに、完了ステータスは、本明細書で説明するように、左側の隣接ステージの一部又は領域に関連する中間完了ステータスを示す情報を含むことができる。ステージのいくつかの実施形態は、非同期パイプラインの左側の隣接ステージに関連付けられていない。例えば、
図1に示すステージ110は、左側の隣接ステージに関連付けられておらず、この場合、ブロック810をバイパスすることができる。
【0039】
ブロック815において、ステージコントローラは、右側の隣接ステージの完了ステータスを示す情報にアクセスする。完了ステータスは、右側の隣接ステージが実行中のタスクを未だ完了していないことを示す情報を含むことができ、この場合、右側の隣接ステージの完了ステータスは「処理中」である。また、完了ステータスは、右側の隣接ステージがタスクを完了したことを示す情報を含むことができ、この場合、右側の隣接ステージの完了ステータスは「完了」である。さらに、完了ステータスは、本明細書で説明するように、右側の隣接ステージの一部又は領域に関連する中間完了ステータスを示す情報を含むことができる。ステージのいくつかの実施形態は、非同期パイプラインの右側の隣接ステージに関連付けられていない。例えば、
図1に示すステージ114は、右側の隣接ステージに関連付けられておらず、この場合、ブロック815をバイパスすることができる。
【0040】
ブロック820において、ステージコントローラは、ステージの完了ステータスと、左側の隣接ステージの完了ステータス(利用可能な場合)と、右側の隣接ステージの完了ステータス(利用可能な場合)と、に基づいて、ステージの動作速度を変更する。本明細書で説明するように、ステージ又はステージの一部に印加されるバッファドライブ強度又は電圧を変更することによって、動作速度を変更することができる。
【0041】
いくつかの実施形態では、
図1~
図8を参照して上述した非同期パイプライン等の上述した装置及び技術は、1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を備えるシステムで実施される。これらのICデバイスの設計及び製造には、通常、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよく、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0042】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の記憶媒体、又は、記憶媒体の組み合わせを含むことができる。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、キャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステム(例えば、システムRAM又はROM)に内蔵されてもよいし、コンピュータシステム(例えば、磁気ハードドライブ)に固定的に取り付けられてもよいし、コンピュータシステム(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)に着脱可能に取り付けられてもよいし、有線又は無線のネットワークを介してコンピュータシステム(例えば、ネットワークアクセス可能なストレージ(NAS))に接続されてもよい。
【0043】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0044】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0045】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。