(57)【特許請求の範囲】
【請求項１】
複数のプロセッサエレメントを有するコンピューティングデバイス上で1つまたは複数の共通リソースを競合しているプロセッサエレメントを管理するための方法であって、
前記コンピューティングデバイスの動作状態に基づいて、リソースに対するアクセスを要求している前記複数のプロセッサエレメントに優先度を割り当てる際に使用するためのパラメータを決定するステップと、
前記リソースにアクセスするための優先度をプロセッサエレメントに割り当てるステップであって、前記優先度が、前記プロセッサエレメントに関する前記パラメータに基づいて割り当てられる、割り当てるステップと、
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングするステップと、
前記リソースの可用性を示す信号に応じて、前記リソースにアクセスするための最高優先度が割り当てられたプロセッサエレメントに前記リソースにアクセスするようにシグナリングするステップであって、前記リソースにアクセスするための前記最高優先度が割り当てられた前記プロセッサエレメントが、前記リソースのための利用可能なロックを取得する、ステップと
を含む、方法。
【請求項２】
前記リソースの前記可用性を示す前記信号に応じて、前記リソースにアクセスするための前記最高優先度が割り当てられた、前記複数のプロセッサエレメントのうちの1つを特定するステップと
をさらに含む、請求項1に記載の方法。
【請求項３】
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングするステップが、スリープ状態に入るように前記プロセッサエレメントをトリガするステップを含み、
前記プロセッサエレメントに前記リソースにアクセスするようにシグナリングするステップが、前記プロセッサエレメントにウェイクアップするようにシグナリングするステップを含む
請求項1に記載の方法。
【請求項４】
コンピューティングデバイスであって、
複数のプロセッサエレメントと、
前記複数のプロセッサエレメントに通信可能に接続され、
前記コンピューティングデバイスの動作状態に基づいて、リソースに対するアクセスを要求している前記複数のプロセッサエレメントに優先度を割り当てる際に使用するためのパラメータを決定することと、
前記リソースにアクセスするための優先度をプロセッサエレメントに割り当てることであって、前記優先度が、前記プロセッサエレメントに関する前記パラメータに基づいて割り当てられる、割り当てることと、
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングすることと、
前記リソースの可用性を示す信号に応じて、前記リソースにアクセスするための最高優先度が割り当てられたプロセッサエレメントに前記リソースにアクセスするようにシグナリングすることであって、前記リソースにアクセスするための前記最高優先度が割り当てられた前記プロセッサエレメントが、前記リソースのための利用可能なロックを取得する、シグナリングすることと
を含む動作を実行するためのシグナリングイベントマネージャ実行可能命令で構成されたシグナリングイベントマネージャと
を含む、コンピューティングデバイス。
【請求項５】
前記シグナリングイベントマネージャが、
前記リソースの前記可用性を示す前記信号に応じて、前記リソースにアクセスするための前記最高優先度が割り当てられた、前記複数のプロセッサエレメントのうちの1つを特定することと
をさらに含む動作を実行するためのシグナリングイベントマネージャ実行可能命令でさらに構成される、請求項4に記載のコンピューティングデバイス。
【請求項６】
前記シグナリングイベントマネージャが、
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングすることが、スリープ状態に入るように前記プロセッサエレメントをトリガすることを含み、
前記プロセッサエレメントに前記リソースにアクセスするようにシグナリングすることが、前記プロセッサエレメントにウェイクアップするようにシグナリングすることを含む
ような動作を実行するためのシグナリングイベントマネージャ実行可能命令でさらに構成される、請求項4に記載のコンピューティングデバイス。
【請求項７】
プロセッサ実行可能ソフトウェア命令を記憶したプロセッサ可読記憶媒体であって、前記プロセッサ実行可能ソフトウェア命令が、複数のプロセッサエレメントを有するコンピューティングデバイスのプロセッサに、
前記コンピューティングデバイスの動作状態に基づいて、リソースに対するアクセスを要求している前記複数のプロセッサエレメントに優先度を割り当てる際に使用するためのパラメータを決定することと、
前記リソースにアクセスするための優先度をプロセッサエレメントに割り当てることであって、前記優先度が、前記プロセッサエレメントに関する前記パラメータに基づいて割り当てられる、割り当てることと、
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングすることであって、前記リソースにアクセスするための前記最高優先度が割り当てられた前記プロセッサエレメントが、前記リソースのための利用可能なロックを取得する、シグナリングすることと、
前記リソースの可用性を示す信号に応じて、前記リソースにアクセスするための最高優先度が割り当てられたプロセッサエレメントに前記リソースにアクセスするようにシグナリングすることと
を含む動作を実行させる、プロセッサ可読記憶媒体。
【請求項８】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記プロセッサに、
前記リソースの前記可用性を示す前記信号に応じて、前記リソースにアクセスするための前記最高優先度が割り当てられた、前記複数のプロセッサエレメントのうちの1つを特定することと
をさらに含む動作を実行させるように構成される、請求項7に記載のプロセッサ可読記憶媒体。
【請求項９】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記プロセッサに、
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングすることが、スリープ状態に入るように前記プロセッサエレメントをトリガすることを含み、
前記プロセッサエレメントに前記リソースにアクセスするようにシグナリングすることが、前記プロセッサエレメントにウェイクアップするようにシグナリングすることを含む
ような動作を実行させるように構成される、請求項7に記載のプロセッサ可読記憶媒体。
【請求項１０】
複数のプロセッサエレメントを有するコンピューティングデバイスであって、
前記コンピューティングデバイスの動作状態に基づいて、リソースに対するアクセスを要求している前記複数のプロセッサエレメントに優先度を割り当てる際に使用するためのパラメータを決定するための手段と、
前記リソースにアクセスするための優先度をプロセッサエレメントに割り当てるための手段であって、前記優先度が、前記プロセッサエレメントに関する前記パラメータに基づいて割り当てられる、割り当てるための手段と、
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングするための手段と、
前記リソースの可用性を示す信号に応じて、前記リソースにアクセスするための最高優先度が割り当てられたプロセッサエレメントに前記リソースにアクセスするようにシグナリングするための手段であって、前記リソースにアクセスするための前記最高優先度が割り当てられた前記プロセッサエレメントが、前記リソースのための利用可能なロックを取得する、手段と
を含む、コンピューティングデバイス。
【請求項１１】
前記リソースの前記可用性を示す前記信号に応じて、前記リソースにアクセスするための前記最高優先度が割り当てられた、前記複数のプロセッサエレメントのうちの1つを特定するための手段と
をさらに含む、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記リソースが利用可能でないとの決定に応じて、前記リソースに対するアクセスを要求している前記プロセッサエレメントに前記リソースが利用可能になるのを待機するようにシグナリングするための手段が、スリープ状態に入るように前記プロセッサエレメントをトリガするための手段を含み、
前記プロセッサエレメントに前記リソースにアクセスするようにシグナリングするための手段が、前記プロセッサエレメントにウェイクアップするようにシグナリングするための手段を含む
請求項10に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
マルチプロセッサシステムのための指向性イベントシグナリングに関する。
【背景技術】
【０００２】
マルチコアプロセッサは、並列アプリケーションの正当性を保証するためにアトミック性(atomicity)に依存する。他のプロセスがアトミック操作(atomic operations)の実行に割り込むのを防ぐために、実装される1つの解決策は、リソースがそれらのロックから解放されるまで、他のプロセスが同じリソースを使用するのを防ぐように、プロセスが相互解除におけるクリティカルセクションを実行するために必要とされるリソースに対するロックを取得することである。1つのそのようなロックの一例はスピンロックである。スピンロックは、ロックが利用可能であるかどうかを繰り返し検査して、ロックが獲得されるまでアクティブに待つアトミック操作である。スピンロックプロセスはアクティブな状態に留まるが、有用なタスクを実行していないので、プロセッサはメモリからロックを連続的にロードするため、このアクティブな待機動作はエネルギーを消費する。他のロック、または他のリソース獲得方式は、同様に、実装されるデバイスの効率的および性能に対する何らかのコストに関連付けられる場合がある。エネルギーを節約するために、いくつかのプロセッサアーキテクチャは、イベントを待機し、イベントをシグナリングする命令(たとえば、ARMイベント待機(「WFE:wait-for-event」)/イベントセット(「SEV:set event」))を有する。これらのアーキテクチャは、無差別な形でこれらの命令を採用し、これらの命令は、すべての待機しているプロセッサコアにブロードキャストされ、クリティカルセクションを実行するために利用可能なロックを要求するための競合状態をプロセッサコア間に生み出す。
【０００３】
アトミックプロセスを実行するためのウェイクアップ命令を用いてプロセッサコアにシグナリングするとき、Linux(登録商標)など、いくつかのオペレーティングシステムは、キャッシュピンポン問題を回避するために、ソフトウェア内のウェイクアップを並べ替える。これらの場合、オペレーティングシステムレベル処理は、カーネルアクティビティおよびコンテンツ切替えを必要とし得る。これは、上で説明した無差別な命令シグナリングを採用するアーキテクチャにおいて性能低減およびリソースの使用の増大をもたらす可能性があり、1つのコアだけがそのリソースを使用することが可能であるとき、複数のプロセッサコアは、ウェイクアップして利用可能なロックを取得するようにシグナリングされることになる。
【発明の概要】
【課題を解決するための手段】
【０００４】
様々な実施形態の方法および装置は、マルチプロセッサシステムに対する指向性イベントシグナリング(directed event signaling)のための回路および方法を提供する。実施形態方法は、リソースが利用可能でないとの決定に応じて、リソースに対するアクセスを要求しているプロセッサエレメントにイベントを待機するようにシグナリングするステップと、ソースが利用可能になるのに応じて、そのプロセッサエレメントにそのリソースにアクセスするようにシグナリングするステップとを含み得る。実施形態は、リソースの可用性に応じて、リソースにアクセスするための優先度をプロセッサエレメントに割り当てるステップと、リソースの可用性を示す信号を受信するステップと、信号がリソースの可用性を示すのに応じて、複数のプロセッサエレメントのうち、リソースにアクセスするための最高優先度が割り当てられた1つのプロセッサエレメントを特定するステップとを含むことが可能であり、リソースが利用可能になるのに応じて、プロセッサエレメントにリソースにアクセスするようにシグナリングするステップは、リソースが利用可能になるのに応じて、リソースにアクセスするための最高優先度が割り当てられたプロセッサエレメントにリソースにアクセスするようにシグナリングするステップを含み得る。一実施形態方法では、リソースが利用可能でないとの決定に応じて、リソースに対するアクセスを要求しているプロセッサエレメントにイベントを待機するようにシグナリングするステップは、スリープ状態に入るようにプロセッサエレメントをトリガするステップを含んでよく、リソースが利用可能になるのに応じて、そのプロセッサエレメントにそのリソースにアクセスするようにシグナリングするステップは、プロセッサエレメントにウェイクアップするようにシグナリングするステップを含んでよい。
【０００５】
一実施形態では、リソースにアクセスするための優先度をプロセッサエレメントに割り当てるステップは、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを受信するステップと、プロセッサエレメントのパラメータをリソースにアクセスするのを待機している複数のプロセッサエレメントのうちのいずれかに関するパラメータと比較するステップと、その比較に基づいて、リソースにアクセスするための、プロセッサエレメントの優先度を決定するステップと、プロセッサエレメントの決定された優先度をメモリ内に記憶するステップとを含み得る。一実施形態では、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを受信するステップは、プロセッサエレメントにプロセッサエレメントの優先度を計算する際に使用するためのパラメータを戻すようにシグナリングするステップと、プロセッサエレメントからパラメータを受信するステップと、パラメータをメモリ内に記憶するステップとを含み得る。一実施形態方法は、コンピューティングデバイスの状態に基づいて、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを決定するステップを含んでよく、プロセッサエレメントにプロセッサエレメントの優先度を計算する際に使用するためのパラメータを戻すようにシグナリングするステップは、プロセッサエレメントに決定されたパラメータを戻すようにシグナリングするステップを含んでよい。
【０００６】
一実施形態では、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを受信するステップは、プロセッサエレメントに関する温度を受信するステップを含み得る。一実施形態では、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを受信するステップは、プロセッサエレメントに関する周波数を受信するステップを含み得る。一実施形態では、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを受信するステップは、プロセッサエレメントが別のプロセッサエレメントと共有するキャッシュの表示を受信するステップを含み得る。一実施形態では、プロセッサエレメントの優先度を計算する際に使用するためのパラメータを受信するステップは、別のプロセッサエレメントに対するプロセッサエレメントの近接性の表示を受信するステップを含み得る。
【０００７】
一実施形態では、リソースの可用性に応じて、リソースにアクセスするための優先度をプロセッサエレメントに割り当てるステップは、プロセッサエレメントに関するウェイクアップ統計を追跡するステップと、プロセッサエレメントに関するウェイクアップ統計がウェイクアップしきい値を超えるかどうかを決定するステップと、プロセッサエレメントに関するウェイクアップ統計がウェイクアップしきい値を超えるとの決定に応じて、リソースにアクセスするための高優先度をプロセッサエレメントに割り当てるステップとを含み得る。
【０００８】
一実施形態方法は、プロセッサエレメントに割り当てられた優先度をそのリソースに現在アクセスしている別のプロセッサエレメントに送るステップを含むことが可能であり、リソースが利用可能になるのに応じて、プロセッサエレメントにリソースにアクセスするようにシグナリングするステップは、リソースを解放するとすぐに、そのリソースに現在アクセスしている別のプロセッサエレメントによってプロセッサエレメントにシグナリングするステップを含み得る。一実施形態方法は、リソースに対するアクセスを要求している複数のスレッドを検出するステップと、複数のスレッドを複数のプロセッサエレメントの選択されたグループに移動させるようにオペレーティングシステムに要求するステップとを含み得る。
【０００９】
一実施形態方法は、リソースを待機する間にプロセッサエレメントに関するスリープ時間を推定するステップと、推定されたスリープ時間に基づいて、プロセッサエレメントに関するスリープ状態を決定するステップと、リソースを待機する間に実装するために、プロセッサエレメントにスリープ状態を通知するステップとを含み得る。一実施形態方法は、リソースを待機する間にプロセッサエレメントに関するスリープ時間を推定するステップと、コンピューティングデバイスのオペレーティングシステムにプロセッサエレメントに関する推定されたスリープ時間を通知するステップとを含み得る。一実施形態方法は、プロセッサエレメントに関する推定されたスリープ時間に関連付けられた時間期間にわたってスケジューリングキューからプロセッサエレメントを除去するステップを含み得る。一実施形態方法は、推定されたスリープ時間の間にスレッドをプロセッサエレメントに割り当てるステップを含み得る。一実施形態方法は、複数のプロセッサエレメントのシグナリングを管理するために、シグナリングイベントマネージャ間で通信するステップを含み得る。
【００１０】
一実施形態は、互いに通信可能に接続された、複数のプロセッサエレメントと、シグナリングイベントマネージャとを有するコンピューティングデバイスを含み、シグナリングイベントマネージャは、上で説明した実施形態方法のうちの1つまたは複数の動作を実行するためのシグナリングイベントマネージャ実行可能命令で構成される。
【００１１】
一実施形態は、プロセッサに上記で説明した実施形態方法のうちの1つまたは複数の動作を実行させるプロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読媒体を含む。
【００１２】
一実施形態は、上で説明した実施形態方法のうちの1つまたは複数の機能を実行するための手段を有するコンピューティングデバイスを含む。
【００１３】
本明細書に組み込まれ、本明細書の一部を構成する添付図面は、本発明の例示的な実施形態を示し、上記の一般的な説明および以下で与えられる発明を実施するための形態とともに、本発明の特徴について説明するのに役立つ。
【図面の簡単な説明】
【００１４】
【図１】一実施形態を実装するのに適したコンピューティングデバイスを示す構成要素ブロック図である。
【図２Ａ】一実施形態を実装するのに適した少なくとも1つのシグナリングイベントマネージャを含む例示的なマルチコアプロセッサを示す構成要素ブロック図である。
【図２Ｂ】一実施形態を実装するのに適した少なくとも1つのシグナリングイベントマネージャを含む例示的なマルチコアプロセッサを示す構成要素ブロック図である。
【図２Ｃ】一実施形態を実装するのに適した少なくとも1つのシグナリングイベントマネージャを含む例示的なSoCを示す構成要素ブロック図である。
【図２Ｄ】一実施形態を実装するのに適した少なくとも1つのシグナリングイベントマネージャを含む例示的なSoCを示す構成要素ブロック図である。
【図３】クラスタアーキテクチャを有し、一実施形態を実装するのに適したシグナリングイベントマネージャを含む例示的なマルチコアプロセッサを示す構成要素ブロック図である。
【図４】一実施形態による、プロセッサエレメントとその割り当てられた優先度との間の関係を示す例示的なテーブルである。
【図５】一実施形態による、マルチプロセッサシステム内の指向性イベントシグナリングを示すプロセスフローおよびシグナリング図である。
【図６】マルチプロセッサシステム内の指向性イベントシグナリングを実装するための一実施形態方法を示すプロセスフロー図である。
【図７】マルチプロセッサシステム内の指向性イベントシグナリングに関するリソースアクセスロック要求待機リストを実装するための一実施形態方法を示すプロセスフロー図である。
【図８】マルチプロセッサシステム内の指向性イベントシグナリングのためのプロセッサエレメントの優先度付けを実装するための一実施形態方法を示すプロセスフロー図である。
【図９】マルチプロセッサシステム内の指向性イベントシグナリングに関する枯渇回避を実装するための一実施形態方法を示すプロセスフロー図である。
【図１０】マルチプロセッサシステム内の指向性イベントシグナリングを用いたロック認識スケジューリングを実装するための一実施形態方法を示すプロセスフロー図である。
【図１１】マルチプロセッサシステム内の指向性イベントシグナリングを用いたロック停止動作を実装するための一実施形態方法を示すプロセスフロー図である。
【図１２】マルチプロセッサシステム内の指向性イベントシグナリングを用いたロック停止動作を実装するための一実施形態方法を示すプロセスフロー図である。
【図１３】様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す構成要素ブロック図である。
【図１４】様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す構成要素ブロック図である。
【図１５】様々な実施形態とともに使用するのに適した例示的なサーバを示す構成要素ブロック図である。
【発明を実施するための形態】
【００１５】
添付の図面を参照しながら、様々な実施形態について詳細に説明する。可能な場合はいつでも、同じまた同様の部分を指すために、図面全体を通して同じ参照番号が使用される。特定の例および実装形態へと行われる言及は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
【００１６】
「コンピューティングデバイス」および「モバイルコンピューティングデバイス」という用語は、セルラー電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、スマートブック、ウルトラブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラー電話、ワイヤレスゲームコントローラ、ならびに、メモリ、およびプログラマブルマルチコアプログラマブルプロセッサ(たとえば、マルチコア、マルチソケット、またはマルチCPU)を含む同様のパーソナル電子デバイスのいずれか1つまたはすべてを指すために本明細書で互換的に使用される。様々な実施形態は、限られたメモリおよびバッテリーリソースを有するスマートフォンなどのモバイルコンピューティングデバイスに特に有用であるが、本実施形態は一般に、複数のメモリデバイスおよび限られた電力バジェットを実装する任意の電子デバイスにおいて有用であり、プロセッサの電力消費を低減することは、モバイルコンピューティングデバイスのバッテリー動作時間を延ばすことができる。
【００１７】
「システムオンチップ」(SoC)という用語は、一般に、限定はしないが、ハードウェアコア、メモリ、および通信インターフェースを含む相互接続された電子回路のセットを指すために本明細書で使用される。ハードウェアコアは、汎用プロセッサ、中央処理ユニット(CPU)、デジタル信号プロセッサ(DSP)、グラフィックス処理ユニット(GPU)、加速処理ユニット(APU)、補助プロセッサ、シングルコアプロセッサ、マルチコアプロセッサ、および個々のプロセッサコアなどの様々な異なるタイプのプロセッサエレメントを含み得る。ハードウェアコアは、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASCI)、他のプログラマブル論理デバイス、個別ゲート論理、トランジスタ論理、性能監視ハードウェア、ウォッチドッグハードウェア、および時間基準などの他のハードウェアおよびハードウェアの組合せをさらに具現化し得る。集積回路は、集積回路の構成要素がシリコンなどの単体の半導体材料上に存在するように構成され得る。
【００１８】
実施形態は、マルチプロセッサエレメントシステム内の各プロセッサエレメントがシステム状態情報を使用して信号を受信する時間を動的に変更するための方法、およびそのような方法を実装するコンピューティングデバイスを含む。シグナリングイベントマネージャは、システムおよび環境状態に基づいて、イベントを順序付けることによって、プロセッサエレメントの各々に対するイベントおよびウェイクアップシグナリングを管理するためにハードウェアおよび/またはソフトウェア内で実装され得る。1つまたは複数のシグナリングイベントマネージャは、ヒューリスティックベースの通知優先度を計算し、ヒューリスティックから決定された優先度によって決定された順序でイベント(たとえば、ウェイクアップ信号および待機信号)の通知を個々のプロセッサエレメントに送ることができる。特定のシグナリングイベントに応じて適用されるプロセッサエレメント優先度を決定するためのヒューリスティックは、シグナリングイベントに基づいて選択可能であり、受信されたシグナリングイベント命令内で直接的に符号化されることによって、シグナリングイベントマネージャに供給されるか、シグナリングイベントに関連付けられたレジスタロケーションまたはメモリロケーションから読み取られるか、またはあらかじめ定義されて、異なるシグナリングモードまたはシグナリングイベントに関してシグナリングイベントマネージャ内に記憶されることが可能である。一実施形態では、サーマルスロットリング(thermal throttling)の可能性を低減するために(低から高への)プロセッサエレメントの温度に基づいて、プロセッサエレメントに関するシグナリング優先度の順序を決定するためにヒューリスティックを使用することができる。一実施形態では、ヒューリスティックは、実行時間を最小限に抑えるために(高から低への)プロセッサエレメントの動作周波数に基づき得る。一実施形態では、ヒューリスティックは、いくつかのプロセッサエレメント間でキャッシュ、または加速器もしくは機能ユニットなど、他のリソースを共有すること、およびプロセッサエレメントの近接性(リモートプロセッサエレメントよりもローカルプロセッサエレメントが好ましい)に基づき得る。
【００１９】
プロセッサエレメントの優先度を決定するための実施形態のヒューリスティックのうちの1つまたは複数を使用して、シグナリングイベントマネージャは、プロセッサエレメントおよびその優先度のリストを作成して管理することができる。(先行技術におけるようにすべてのプロセッサコアに対して)プロセッサエレメントのうちの1つにリソースの可用性をシグナリングする通知をプロセッサエレメントに送りだし、すべてのプロセッサエレメントからリソースに対する要求を受け入れ/検証するために、このリストを使用することができる。上で説明したヒューリスティック要因に基づいてプロセッサエレメントの優先度を再構成できるようにこのリストを管理することができる。
【００２０】
一実施形態では、プロセッサエレメントがイベントを受信するとき、プロセッサエレメントは、ウェイクアップして、ロックを捉えることを試みることができる。シグナリングイベントマネージャは、リソースに対するロックを捉えて、プロセッサエレメントからプロセッサエレメントの優先度を特定する要求を受信することができる。ロックが利用可能であり、プロセッサエレメントが最高優先度を有する場合、シグナリングイベントマネージャは、そのプロセッサエレメントが利用可能なロックを取得することを可能にし得る。しかしながら、リソースに対するロックが利用不可能であるか、またはプロセッサエレメントが最高優先度を有さない場合、シグナリングイベントマネージャは待機するようにプロセッサエレメントに命令することができる。ロックが利用可能になり、シグナリングイベントマネージャが最高優先度のプロセッサエレメントを特定するとすぐ、シグナリングイベントマネージャは、最高優先度のプロセッサエレメントにウェイクアップしてロックを取得することを要求するようにシグナリングすることができる。プロセッサエレメントがロックを解放し、ロックが利用可能になるとき、シグナリングイベントマネージャは、プロセッサエレメントの前の優先度順序に従って、待機している次のプロセッサエレメントに信号を送ることができるか、またはシグナリングイベントマネージャは、待機しているプロセッサエレメントのリストを更新して、待機している、新しい最高優先度のプロセッサエレメントに信号を送ることができる。
【００２１】
プロセッサエレメントの優先度を決定するためにシグナリングイベントマネージャによって使用されるヒューリスティックは、プロセッサエレメントによって提供され得る。一実施形態では、プロセッサエレメントは、リソースロックを要求するとき実行され得るイベント待機(「WFE」)命令を含み得る。イベント待機命令は、プロセッサエレメントの優先度を決定するために望まれるヒューリスティック情報を記載することができる。イベント待機命令を実行することは、プロセッサエレメントに、リソースロックに対する要求とともに、ヒューリスティック情報を転送させることができる。たとえば、プロセッサエレメントは、温度ベースのヒューリスティックの表示に応じて温度情報を、ロケーションベースのヒューリスティックの表示に応じてキャッシュローカリティ情報を、周波数ベースのヒューリスティックの表示に応じて電力状態情報を戻すことができる。プロセッサエレメントは、ロックを捉える要求時に、これらの情報タイプのうちの1つまたは複数をシグナリングイベントマネージャに提供することができる。送られるヒューリスティック情報タイプは、シグナリングイベントマネージャを実装するシステムのタイプによってあらかじめ決定され得る。一実施形態では、シグナリングイベントマネージャは、リソースロックに対する要求およびヒューリスティック情報にWFE信号を用いて応答することができ、これは、スリープ/低電力状態に入るように受信側プロセッサをトリガし得る。
【００２２】
プロセッサエレメントがWFE命令を含まず、ヒューリスティック情報タイプがシグナリングイベントマネージャによって示されるか、またはシグナリングイベントマネージャが優先度を決定するために必要とするヒューリスティック情報をシグナリングイベントマネージャが変更する実施形態では、要求されるヒューリスティック情報のタイプは、プロセッサエレメントに送られるWFE信号内に含まれてよい。シグナリングイベントマネージャがプロセッサエレメントの優先度を決定するためにその情報をそのヒューリスティックに適用することができるように、WFE信号内のビットは、ヒューリスティックに関連する状態情報を用いてシグナリングイベントマネージャに応答するようにプロセッサエレメントに催促することができる。上記のように、例は、プロセッサエレメントが、シグナリングイベントマネージャ選択ヒューリスティックの表示に応じて、温度ベースのヒューリスティックの表示に応じた温度情報、ロケーションベースのヒューリスティックの表示に応じたキャッシュローカリティ情報、周波数ベースのヒューリスティックの表示に応じた電力状態情報のうちの1つまたは複数を戻すことを含み得る。イベント待機信号はまた、要求側プロセッサエレメント内のスリープ状態をトリガし得る。
【００２３】
一実施形態では、要求側プロセッサエレメントに関するヒューリスティック情報は、リソースロック要求に応じて、シグナリングイベントマネージャによって、取り出されるのではなく、決定され得る。シグナリングイベントマネージャは、要求側プロセッサエレメント内のスリープ状態をトリガするために、イベント待機信号を要求側プロセッサエレメントに依然として送ることができる。
【００２４】
シグナリングイベントマネージャは、各プロセッサエレメントに関するウェイクアップの数および/または最後のウェイクアップがいつか発生したかを追跡することができる。シグナリングイベントマネージャは、最終的にすべてのプロセッサエレメントがロックを受けるように、このデータを枯渇しきい値と比較してプロセッサエレメントに優先度付けすることができる。たとえば、プロセッサエレメントがしきい値を超え、そのプロセッサエレメントが偏った数(高または低)のロックを受けていることを表示するとき、シグナリングイベントマネージャは、プロセッサエレメントの優先度を調整して、様々なプロセッサエレメントによって取得されるロックの数を平衡させ、待機しているプロセスの前進を催促する。
【００２５】
複数の参加者がコンピューティングデバイスのリソースに対するアクセスを試み、それらのリソースにアクセスするための競合の可能性が存在するとき、様々な実施形態は何らかの同期プリミティブに関して有用であり得る。説明しやすいように、リソースロックを参照して様々な実施形態を説明するが、そのような説明は限定的であることを意図しない。
【００２６】
図1は、様々な実施形態とともに使用するのに適したリモートコンピューティングデバイス50と通信中のコンピューティングデバイス10を含むシステムを示す。コンピューティングデバイス10は、プロセッサ14、メモリ16、通信インターフェース18、および記憶インターフェース20を備えたSoC12を含み得る。コンピューティングデバイスは、ワイヤードモデムまたはワイヤレスモデムなどの通信構成要素22、記憶構成要素24、ワイヤレスネットワーク30へのワイヤレス接続32を確立するためのアンテナ26、および/またはインターネット40へのワイヤード接続44に接続するためのネットワークインターフェース28をさらに含み得る。プロセッサ14は、いくつかのプロセッサコアを含めて、様々なプロセッサエレメントのいずれかを含み得る。SoC12は、1つまたは複数のプロセッサ14を含み得る。コンピューティングデバイス10は、2つ以上のSoC12を含んでよく、それによって、プロセッサ14、プロセッサエレメント、およびプロセッサコアの数を増加させる。コンピューティングデバイス10は、SoC12に関連付けられていないプロセッサ14を含んでもよい。個々のプロセッサ14は、図2Aおよび図2Bを参照しながら下で説明するようなマルチコアプロセッサであり得る。プロセッサ14はそれぞれ、コンピューティングデバイス10の他のプロセッサ14と同じであってもよく、またはそれらとは異なっていてもよい特定の目的のために構成され得る。したがって、様々なプロセッサ14は、同じタイプまたは異なるタイプの様々なプロセッサエレメントを含み得る。同じまたは異なる構成のプロセッサ14およびプロセッサコアのうちの1つまたは複数は、一緒にグループ化されてもよい。
【００２７】
SoC12のメモリ16は、プロセッサ14がアクセスするためのデータおよびプロセッサ実行可能コードを記憶するように構成された揮発性メモリまたは不揮発性メモリであり得る。一実施形態では、メモリ16は、プロセッサ14のうちの1つまたは複数によって出力された中間処理データなど、データ構造を少なくとも一時的に記憶するように構成され得る。一実施形態では、メモリ16は、リソースアクセスロック要求を行っているプロセッサエレメントを優先度付けするための情報を記憶するように構成されたキャッシュメモリまたはランダムアクセスメモリ(RAM)であり得る。メモリ16は、コンピューティングデバイス上のリソースに対するロックの取得を試みているプロセッサエレメントを優先度付けするための情報を維持するための不揮発性読取り専用メモリ(ROM)を含み得る。
【００２８】
コンピューティングデバイス10および/またはSoC12は、様々な目的のために構成された1つまたは複数のメモリ16を含み得る。一実施形態では、1つまたは複数のメモリ16は、プロセッサエレメントの指定されたセットに関してプロセッサエレメントを優先度付けするための情報の記憶専用であるように構成され得る。メモリ16は、情報が、シグナリングイベントマネージャによって、マルチプロセッサエレメントシステムに対する指向性イベントシグナリングのために解釈されることを可能にするように、情報を記憶することができる。
【００２９】
通信インターフェース18、通信構成要素22、アンテナ26、および/またはネットワークインターフェース28は、コンピューティングデバイス10がワイヤレス接続32を介してワイヤレスネットワーク30上でおよび/またはワイヤードネットワーク44上でリモートコンピューティングデバイス50と通信することを可能にするように、一体となって動作し得る。ワイヤレスネットワーク30は、コンピューティングデバイス10がリモートコンピューティングデバイス50とデータを交換することができる手段であるインターネット40への接続をコンピューティングデバイス10に提供するために、たとえば、ワイヤレス通信に使用される無線周波数スペクトルを含む様々なワイヤレス通信技術を使用して実装され得る。
【００３０】
記憶インターフェース20および記憶構成要素24は、コンピューティングデバイス10が不揮発性記憶媒体上にデータを記憶することを可能にするように、一体となって動作し得る。記憶構成要素24は、記憶構成要素24が、情報が1つまたは複数のプロセッサ14によってアクセスされ得るように、リソースアクセスロック要求を行っているプロセッサエレメントを優先度付けするための情報を記憶することができるメモリ16の一実施形態と同じように構成され得る。不揮発性である記憶構成要素24は、コンピューティングデバイス10の電源が切断された後でも情報を保持し得る。電源が再び投入され、コンピューティングデバイス10が再起動すると、記憶構成要素24上に記憶された情報はコンピューティングデバイス10に利用可能になり得る。記憶インターフェース20は、記憶構成要素24へのアクセスを制御し、プロセッサ14が記憶構成要素24からデータを読み取り、記憶構成要素24にデータを書き込むことを可能にし得る。
【００３１】
コンピューティングデバイス10の構成要素のいくつかまたはすべては、依然として必要な機能を果たしながら、別様に配置および/または結合され得る。さらに、コンピューティングデバイス10は、構成要素の各々の1つに限定されなくてもよく、各構成要素の複数のインスタンスは、コンピューティングデバイス10の様々な構成に含まれ得る。
【００３２】
図2Aは、一態様を実装するのに適したマルチコアプロセッサ14などのプロセッサエレメントを示す。マルチコアプロセッサ14は、プロセッサコア200、201、202、203など、複数の同種または異種のプロセッサエレメントを有し得る。単一のプロセッサ14のプロセッサコア200、201、202、203が、同じ目的のために構成され、同じまたは同様の性能特性を有し得るという点で、プロセッサコア200、201、202、203は同種であり得る。たとえば、プロセッサ14は汎用プロセッサであってもよく、プロセッサコア200、201、202、203は同種の汎用プロセッサコアであってもよい。代替的に、プロセッサ14はグラフィックス処理ユニットまたはデジタル信号プロセッサであってもよく、プロセッサコア200、201、202、203はそれぞれ、同種のグラフィックスプロセッサコアまたはデジタル信号プロセッサコアであってもよい。
【００３３】
製造プロセスおよび材料のばらつきにより、同種のプロセッサコア200、201、202、203の性能特性は、同じマルチコアプロセッサ14内または同じ設計のプロセッサコアを使用する別のマルチコアプロセッサ14内のプロセッサコアによって異なる場合がある。
【００３４】
単一のプロセッサ14のプロセッサコア200、201、202、203が、異なる目的のために構成され、かつ/または異なる性能特性を有し得るという点で、プロセッサコア200、201、202、203は異種であり得る。そのような異種のプロセッサコアの例は、より低速で低電力のプロセッサコアがより強力で電力を大量に消費するプロセッサコアと結合され得る「big.LITTLE」アーキテクチャとして知られているものを含み得る。
【００３５】
マルチコアプロセッサ14は、各プロセッサコア200、201、202、203と通信中のシグナリングイベントマネージャ206をさらに含み得る。シグナリングイベントマネージャ(または、シグナリングマネージャ)206は、コンピューティングデバイスのリソースをロックまたはロック解除する要求を含めて、リソースアクセス要求を受信し、各プロセッサコアを優先順序付けし、イベントを待機するようにプロセッサコアにシグナリングし、イベントが発生したとき、優先順序付けされたプロセッサコアにシグナリングすることができる。一実施形態では、イベントは、プロセッサコアがロックを取得することを試みるリソースに対するロックの解放を含む。
【００３６】
図2Bは、図2Aと同じような実施形態を実装するのに適したプロセッサエレメントを示す。一実施形態では、プロセッサエレメント、この場合、マルチコアプロセッサ14は、複数のシグナリングイベントマネージャ208、210、212を含み得る。様々な実施形態では、シグナリングイベントマネージャ208、210、212は、プロセッサコア200、201、202、203の様々な組合せと通信中であり得る。一実施形態では、プロセッサコア0 200、プロセッサコア1 201、およびプロセッサコア2 202など、複数のプロセッサコアは、シグナリングイベントマネージャ0 208など、共有シグナリングイベントマネージャと通信中であり得る。一実施形態では、プロセッサコア2 202など、1つまたは複数のプロセッサコアは、シグナリングイベントマネージャ0 208およびシグナリングイベントマネージャ1 210など、複数のシグナリングイベントマネージャと通信中であり得る。一実施形態では、プロセッサコア3 203などのプロセッサコアは、シグナリングイベントマネージャ2 212など、専用シグナリングイベントマネージャと通信中であり得る。シグナリングイベントマネージャ208、210、212は、プロセッサエレメントの共通の通信バスを介して、または専用シグナリングイベントマネージャ通信バス230を介して、互いと通信中であり得る。
【００３７】
図2Cは、シグナリングイベントマネージャ206、208、210が、単一のコアプロセッサまたはマルチコアプロセッサ212、214、216、218などのプロセッサエレメントに対してローカルである実施形態を示す。図2Dは、シグナリングイベントマネージャ206、208、210がSoC220、222、224、226などのプロセッサエレメントに対してローカルである実施形態を示す。図2Bの例と同様、シグナリングイベントマネージャ206、208、210は、図2CのSoC12または図2Dのコンピューティングデバイス10の共通の通信バスを介して、または専用シグナリングマネージャ通信バス230を介して、互いと通信中であり得る。一実施形態では、シグナリングイベントマネージャ206、208、210が、図2Bのプロセッサコア200、201、202、203に対してローカルであり得、マルチコアプロセッサ212、214、216、218、またはSoC220、222、224、226など、より高いレベルの構成要素に対してローカルなシグナリングイベントマネージャ206、208、210と通信中であり得るように、シグナリングイベントマネージャ206、208、210のレイヤが存在し得る。同様に、マルチコアプロセッサ212、214、216、218に対してローカルなシグナリングイベントマネージャ206、208、210は、SoC220、222、224、226に対してローカルなシグナリングイベントマネージャ206、208、210と通信中であり得る。
【００３８】
図2Aおよび図2Bに示す例では、マルチコアプロセッサ14は、4つのプロセッサコア200、201、202、203(すなわち、プロセッサコア0、プロセッサコア1、プロセッサコア2、およびプロセッサコア3)を含む。図2Cに示す例では、SoC12は、4つのプロセッサ212、214、216、218(すなわち、プロセッサ0、プロセッサ1、プロセッサ2、およびプロセッサ3)を含む。図2Dに示す例では、コンピューティングデバイス10は、4つのSoC220、222、224、226(すなわち、SoC0、SoC1、SoC2、およびSoC3)を含む。説明しやすくするために、図2A〜図2Dに示した4つのプロセッサコア200、201、202、203、プロセッサ212、214、216、218、またはSoC220、222、224、226を含めて、プロセッサエレメントのうちのいずれかを参照して様々な実施形態を説明する場合がある。しかしながら、図2A〜図2Dに示した、本明細書で参照するプロセッサエレメントは、単なる一例として提供され、決して様々な実施形態を4つのコアプロセッサのシステム、4つのプロセッサのシステム、または4つのSoCのシステムに限定することを意図しない。コンピューティングデバイス10、SoC12、またはマルチコアプロセッサ14は個別に、または組合せで、4つよりも少ないまたは多いプロセッサコア、プロセッサ、もしくはSoCを含み得る。
【００３９】
複数のシグナリングイベントマネージャ206、208、210は、本明細書でさらに論じるように、プロセッサエレメントによって要求されるリソースの可用性、プロセッサエレメントの優先度、およびプロセッサエレメントにウェイクアップして要求されたリソースに対するロックを取得するようにシグナリングすることを管理するために、互いと通信することができる。本明細書で論じる例は、単一のシグナリングイベントマネージャに関して説明される場合があるが、これは、単に一例であることを目的とし、決して様々な実施形態を単一のシグナリングイベントマネージャシステムに限定することを意図しない。コンピューティングデバイス10、SoC12、またはマルチコアプロセッサ14は個別に、または組合せで、2つ以上のシグナリングイベントマネージャを含み得る。
【００４０】
図3は、一態様を実装するのに適したクラスタアーキテクチャを採用するマルチコアプロセッサ14などの例示的なプロセッサエレメントを示す。図2Aおよび図2Bの例示的なマルチコアプロセッサ14と同じように、図3に示すマルチコアプロセッサ14は、4つのプロセッサコア200、201、202、203を含み得るが、プロセッサコアのこの構成は、限定的ではなく、様々な実施形態はより少ないまたはより多いプロセッサコアを用いて同様の形で機能する。図2Aおよび図2Bのマルチコアプロセッサ14とやはり同様に、プロセッサコア200、201、202、203はすべて、シグナリングイベントマネージャ206、208、210、212と通信中であり得る。図3に示すマルチコアプロセッサは、プロセッサコア200、201、202、203をクラスタ300、302にグループ化することをさらに含み得る。マルチコアプロセッサ14は、クラスタ300、302を採用して、プログラム命令およびデータの処理を効率的に実行することができる。
【００４１】
クラスタ300、302は、静的であり、同じプロセッサコア200、201、202、203をクラスタ300、302内に維持し得る。クラスタ300、302はまた、動的であり、様々な要因に基づいて、1つまたは複数のクラスタ300、302内のプロセッサコアのメンバーシップを変更し得る。図3に示す例は、各クラスタ300、302内に2つのプロセッサコア200、201、202、203を示す。クラスタ300、302内のプロセッサコア200、201、202、203の数および組合せは限定的であることを意図しない。さらに、クラスタ300、302の数、および各クラスタ300、302の構成も限定的であることを意図しない。クラスタ300、302は、両方のクラスタ300、302内に含まれたプロセッサコア200、201、202、203を含めて、プロセッサコア200、201、202、203の任意の組合せを含み得る。
【００４２】
プロセッサコア200、201、202、203に加えて、クラスタ300、302は各々、一実施形態では、上で説明した図1のメモリデバイス16と同じように構成され得るクラスタキャッシュ304、306を含み得る。クラスタキャッシュ304、306は、そのそれぞれのクラスタ300、302内のプロセッサコア200、201、202、203による高速アクセスのためのデータおよびプログラム命令を記憶することができる。クラスタキャッシュ304、306は、リソースアクセス要求のためにプロセッサコア200、201、202、203を優先度付けすることに関するデータを記憶することができる。一実施形態では、クラスタキャッシュ304、306内に記憶された項目は、クラスタキャッシュ304、306のそれぞれのクラスタ300、302だけに関連し得る。クラスタキャッシュ304、306は、それに関してそれぞれのクラスタ300、302のプロセッサコア200、201、202、203がリソースアクセス要求を発行するリソースを記憶することもできる。マルチコアプロセッサ14は、クラスタキャッシュ304、306内のデータおよびプログラム命令と同様のデータおよびプログラム命令を含んでもよいプロセッサキャッシュ308も含み得る。プロセッサキャッシュ308は、クラスタ300、302のうちの1つまたは複数に割り振られたプロセッサコア200、201、202、203のうちの1つまたは複数に関してそのような情報を維持することができる。
【００４３】
クラスタ300、302は、同様のまたは異なる処理が可能なプロセッサコア200、201、202、203を含み得る。クラスタ300、302は、クラスタ300、302内に含めるためのオプションであり得るマルチコアプロセッサ14の他の構成要素と比較して、相対的に近いローカリティのプロセッサコア200、201、202、203、およびクラスタキャッシュ304、306などの構成要素をも含み得る。クラスタ300、302は、プロセッサコア200、201、202、203をクラスタ化しないよりもプロセスおよびスレッドをより効率的に実行するように構成され得る。
【００４４】
図4は、一実施形態による、プロセッサエレメントとその割り当てられた優先度との間の関係を示す例示的なテーブル400を示す。テーブル400は、テーブル400内に示すデータのうちのいくつかまたはすべてに関して例示的かつ非限定的なフォーマットである。テーブル400は、(列402に記載された)プロセッサエレメントがプロセッサエレメントに関連付けられた情報(列404〜410)と(行ごとに)どのように相関され得るかの一例を示すが、そのようなデータは、任意の数の知られているデータ構造を使用して記憶され、関係付けられてよい。各プロセッサエレメントに関する情報の例は、列404内の優先度と、列406内の優先度を決定するための1つまたは複数のパラメータ(たとえば、プロセッサエレメント温度、動作周波数、および/またはエレメントの近接性/エレメントによるリソースの共有)と、列408内の、プロセッサエレメントがウェイクアップしてリソースロックを取得するためにシグナリングされている回数と、列410内の、プロセッサエレメントがウェイクアップするようにシグナリングされた最後の発生からの時間量、またはプロセッサエレメントがウェイクアップするようにシグナリングされた最後の発生時間とを含み得る。一実施形態では、優先度を決定するためのパラメータは、コンピューティングデバイス上で実行しているソフトウェア内で事前にプログラムされること、シグナリングイベントマネージャにハードコーディングされること、またはシグナリングイベントマネージャによる様々な考慮に基づいて選択されることが可能である。
【００４５】
テーブル400は、リソースアクセスロック要求を行うすべてのプロセッサエレメントを含み得る。一実施形態では、コンピューティングデバイス上の特定のセッションの間、第1のプロセッサエレメントがリソースアクセスロック要求を行うまで、テーブル400は空であってよく、または存在しなくてもよい。テーブル400は、第1のプロセッサエレメントによる第1のリソースアクセスロック要求時に開始され得る。テーブル400は、他のプロセッサエレメントが他のリソースアクセスロック要求を行うとさらにポピュレートされ得る。
【００４６】
一実施形態では、テーブル400は、リソースアクセスロック要求を行う各プロセッサエレメントの情報に関する列414、416、418、420、422、424を含み得る。列414〜424は、N個のプロセッサエレメント(すなわち、プロセッサエレメント0からプロセッサエレメントN-1)の各々に関するテーブル内に含まれてよい。各列414〜424は、それぞれのプロセッサエレメントがリソースアクセスロック解除要求を行った後でテーブル400内に保持され得る。列414〜424の各々は、それぞれのプロセッサエレメントが別のリソースロック要求を行うとすぐ、プロセッサエレメントがリソースアクセスロック解除要求を行うとすぐ、および/または周期的間隔で更新され得る。一実施形態では、リソースアクセスロック解除要求を行っているプロセッサエレメントに関する列414〜424はテーブル400から除去され得る。テーブル400は、すべてのリソースアクセスロック要求に関して普遍的なテーブルであり得る。
【００４７】
テーブル400は、(列402内に記載された)関連するプロセッサエレメントがロックの取得を試みているリソースを特定する、各列414〜424に関する情報を保持することができる。そのようなテーブル400では、各優先度が異なるリソースに関する限り、異なるプロセッサエレメントが(列404に記載された)同じ優先度を有することが可能である。
【００４８】
一実施形態では、複数のテーブル400をメモリ内で実装することができ、その場合、テーブル400の各々は特定のリソース専用であり得る。
【００４９】
様々なプロセッサエレメントとそのそれぞれの優先度との関係、およびテーブル内に記憶され得るプロセッサエレメントに関する他の情報の一例として、テーブル400は、ヒューリスティックに従って優先度を決定するための基準がどのようにプロセッサエレメント温度406であり得るかを示す。この例は、各プロセッサエレメントに関する(列404に記載された)優先度が、(列406に記載された)プロセッサエレメント温度との逆関係に基づいて決定され得ることを示す。この例では、最低プロセッサエレメント温度は最高優先度と相関し得る。したがって、28.1℃の最低プロセッサエレメント温度を有する、列418内のプロセッサエレメント2には1の最高優先度を割り当てることができる。逆に、38.2℃の最高のプロセッサエレメント温度を有する、列420内のプロセッサエレメント3には8の最低優先度を割り当てることができる。上述のように、プロセッサエレメントの優先度404を決定するための基準としてプロセッサエレメント温度406以外のパラメータを使用することができる。一実施形態では、プロセッサエレメントの優先度を決定するための基準としてパラメータの任意の組合せを使用することができる。
【００５０】
一実施形態では、プロセッサエレメントのいずれかに関する枯渇状態を回避するために、プロセッサエレメントの優先度を設定するためのヒューリスティックにおいて、(列408内に記載された)プロセッサエレメントがウェイクアップして、リソースロックを取得するようにシグナリングされている回数、および/または(列410内に記載された)プロセッサエレメントがウェイクアップするようにシグナリングされた最後の発生からの時間量を使用することができる。枯渇しているプロセッサエレメントがリソースロックの取得を試み得るプロセスが時宜を得た形で進展していない可能性がある限り、枯渇したプロセッサエレメントに待機することを強制することができる。プロセッサエレメントが、他のプロセッサエレメントよりもかなり低い頻度でウェイクアップするようにシグナリングされるとき、またはウェイクアップするようにシグナリングされるまで他のプロセッサエレメントよりもかなり長く待機するとき、枯渇が発生し得る。プロセッサエレメントがウェイクアップしてリソースロックを取得するようにシグナリングされている回数をウェイクアップ数のしきい値と比較することができる。追加または代替として、プロセッサエレメントがウェイクアップするようにシグナリングされた最後の発生からの時間量をウェイクアップ後の時間しきい値と比較することができる。この比較は、周期的に、かつ/またはプロセッサエレメントがリソースアクセスロック解除要求を発行するとすぐに、発生し得る。枯渇しきい値のうちの1つまたは複数を超えたとの決定に応じて、枯渇しているプロセッサエレメントの優先度を増大して、枯渇しているプロセッサエレメントが前により高い優先度を有した他のプロセッサの前にリソースロックを取得することを可能にすることができる。
【００５１】
テーブル400は、上述のメモリおよびストレージデバイスのうちのいずれかの中に記憶されてよい。たとえば、テーブル400は、図1に示したメモリデバイス16、図3に示したプロセッサキャッシュ308、または図2および図3に示したシグナリングイベントマネージャ206内に記憶されてよい。別の例では、テーブル400は、上述のメモリデバイス16、図3に示したプロセッサキャッシュ308、シグナリングイベントマネージャ206、クラスタキャッシュ304、またはクラスタキャッシュ306内に記憶されてよい。シグナリングイベントマネージャは、これらのストレージロケーションのうちのいずれかからテーブル400にアクセスすることができる。
【００５２】
図5は、一実施形態による、マルチプロセッサシステム内の指向性イベントシグナリングのプロセスフローおよびシグナリングフローを示す。説明しやすいように、図5の例は、シグナリングイベントマネージャ206と、プロセッサエレメント0 524と、プロセッサエレメント1 526と、プロセッサエレメント2 528との間のシグナリングを含む。この例は、シグナリングイベントマネージャと通信することができるプロセッサエレメントの数、またはプロセッサエレメントと通信することができるシグナリングイベントマネージャの数に関して限定的であることを意図しない。この例では、プロセッサエレメント0 524は、リソースアクセスロック要求500をシグナリングイベントマネージャ206に送ることができる。プロセッサエレメント0 524がリソースロックを要求している同じリソースに対するリソースロックを有する他のプロセッサエレメント526、528がないのに応じて、プロセッサエレメント0 524はリソースロック518を取得することができる。シグナリングイベントマネージャ206はリソースアクセスロック要求500に応じることができるが、いくつかの実施形態では、リソースアクセスロック要求500時にリソースロックが利用可能でないとき、シグナリングイベントマネージャ206は応じなくてよい。
【００５３】
シグナリングイベントマネージャ206は、プロセッサエレメント524、526、528をそれぞれの優先度と関連付けるためのテーブルを更新または開始することができる。一実施形態では、リソースロックを取得するプロセッサエレメントの優先度を表示するために様々な方式を使用することができる。たとえば、リソースロックを有するプロセッサエレメントがロックを放棄し、その時点で、優先度に関する基準に基づいて、そのプロセッサエレメントが別のリソースアクセスロック要求を発行するかどうかに基づいて、および/または枯渇情報の逆使用に基づいて、その優先度が更新され得るまで、そのプロセッサエレメントに最高優先度を与えることができる。他の例では、別のリソースアクセスロック要求を行うまで、リソースロックを有するプロセッサエレメントに最低優先度を割り当ててよいか、または何の優先度も割り当てなくてよい。
【００５４】
プロセッサエレメント1 526がリソースロック518によってロックされた同じリソースに対するリソースアクセスロック要求502をシグナリングイベントマネージャ206に送るとき、シグナリングイベントマネージャ206は、テーブルを更新して、要求されたリソースロックを取得するための優先度をプロセッサエレメント1 526に割り当てることができる。シグナリングイベントマネージャ206は、要求されたリソースがリソースロック518によってロックされているのに応じて、イベント待機信号504をプロセッサエレメント1 526に戻すことができる。イベント待機信号504は、リソースがリソースロックに関して利用可能であるという信号(たとえば、イベントセット信号)をプロセッサエレメント526が受信するまで、スリープ状態に入るようにプロセッサエレメント1 526をトリガし得る。しかしながら、プロセッサエレメント1 526が最高優先度を有さない場合、リソースがリソースロックに関して利用可能になる最初の時点で、プロセッサエレメント1 526はそのようなイベントセット信号を受信することができない。
【００５５】
上記のリソースアクセスロック要求500、502の場合、優先度の基準に関する情報は、シグナリングイベントマネージャ206によって必要とされても、必要とされなくてもよい。リソースアクセスロック要求500の場合、この情報は第1のリソースアクセスロック要求であり、他のプロセッサエレメント526、528はそのリソースロックに関して競合していないため、この情報は必要とされなくてよい。リソースアクセスロック要求502は情報を必要としなくてよいが、プロセスエレメント1 526のリソースロックに対する順番が次である場合、プロセスエレメント1 526に優先度を割り当てることが必要でない場合がある。しかしながら、情報はシグナリングイベントマネージャ206に将来のプロセッサエレメント1 526の優先度を変更させ得るため、この情報は後続のリソースアクセスロック要求と比較するためにテーブル内に記憶されてよい。
【００５６】
プロセッサエレメント2 528がプロセッサエレメント0 524およびプロセッサエレメント1 526と同じリソースに対するリソースアクセスロック要求506をシグナリングイベントマネージャ206に送るとき、シグナリングイベントマネージャは、プロセッサエレメント2 528に関する優先度基準の情報を他の待機中のプロセッサエレメント、この場合、プロセッサエレメント1 526に関するテーブル内の情報と比較することによって、テーブルを更新することができる。この例では、プロセッサエレメント2 528は、優先度基準に関して、プロセッサエレメント1よりも高い優先度をもたらすパラメータ値を有する。プロセッサエレメント0 524がリソースロック518を依然として有する場合、シグナリングイベントマネージャは、イベント待機信号508をプロセッサエレメント2 528に戻すことができる。イベント待機信号508は、リソースがリソースロックに関して利用可能であるという信号(たとえば、イベントセット信号)をプロセッサエレメント2 528が受信するまで、スリープ状態に入るようにプロセッサエレメント2 528をトリガし得る。
【００５７】
プロセッサエレメント0 524は、プロセッサエレメント0 524がリソースロック518を放棄していることを示すリソースアクセスロック解除要求510をシグナリングイベントマネージャ206に送り、リソースに対するリソースロックを取得するためにそのリソースをプロセッサエレメント526、528のうちのもう1つのプロセッサエレメントに利用可能にすることができる。応じて、シグナリングイベントマネージャ206は、テーブルを検査して、最高優先度を有するプロセッサエレメント524、526、528を決定することができる。プロセッサエレメント2 528が最高優先度を有するとの決定に応じて、シグナリングイベントマネージャ206は、イベントセット信号またはウェイクアップ信号512をそのプロセッサエレメント2 528に送ることができる。ウェイクアップ信号512は、そのスリープ状態からウェイクアップして、リソースロック520を取得するようにプロセッサエレメント2 528をトリガし得る。そのリソースを終えるとき、プロセッサエレメント2 528はリソースアクセスロック解除要求514をシグナリングイベントマネージャ206に送り、リソースロック520を放棄することができる。応じて、シグナリングイベントマネージャ206は、テーブルを再度検査して、最高優先度を有するプロセッサエレメント524、526、528を決定することができる。図5に示した例では、この時点で、プロセッサエレメント1 526はリソースロックを待機している唯一のプロセッサエレメントであり、したがって、最高優先度を有するのもプロセッサエレメント1 526である。したがって、シグナリングイベントマネージャ206は、そのスリープ状態からウェイクアップして、リソースロック522を取得するようにプロセッサエレメント1 526をトリガするウェイクアップ信号516を送ることができる。
【００５８】
リソースアクセスロック要求500、502、506は、優先度および/または枯渇に関する基準についての情報を含んでもよく、含まなくてもよい。一実施形態では、優先度および/または枯渇に関する基準は、プロセッサエレメント524、526、528に知られていなくてもよい。この実施形態では、シグナリングイベントマネージャ206は、コンピューティングデバイス上で実行しているカーネルシステムまたはオペレーティングシステムなど、別のソースから情報を要求すること、メモリから情報を取り出すこと、またはプロセッサエレメント524、526、528に近いセンサー(たとえば、温度センサー)から測定を行うことによって、要求側プロセッサエレメント524、526、528についての情報を取り出すことができる。他の実施形態では、プロセッサエレメント524、526、528は、その情報を知っている場合があるが、シグナリングイベントマネージャが選択した特定のヒューリスティックに依存し得る、シグナリングイベントマネージャ206によって必要とされる情報については知らない場合がある。したがって、リソースアクセスロック要求500、502、506の受信に応じて、シグナリングイベントマネージャ206は、必要とされる情報に対する要求を送り、引き換えに、ロック要求側プロセッサエレメントからの情報を受信することができる。一実施形態では、シグナリングイベントマネージャ206による情報に対する要求はイベント待機信号504、508の一部であってよく、シグナリングイベントマネージャ206は、プロセッサエレメント524、526、528がスリープ状態に入るのに先立って、要求された情報を受信することができる。一実施形態では、必要とされる情報は、イベント待機信号504、508の前または後に特殊な意味を有する、特殊レジスタ、メモリロケーション、または追加されたNOP命令内に表示可能である。
【００５９】
一実施形態では、シグナリングイベントマネージャ206がリソースアクセスロック解除要求510、514を受信し、ウェイクアップ信号512、516を送るのではなく、シグナリングイベントマネージャ206は、リソースロックを有するプロセッサエレメントに更新された優先度情報を送ることができ、リソースロックの放棄に応じて、放棄側プロセッサエレメントは、最高優先度を有するプロセッサエレメントにウェイクアップ信号を送ることができる。このようにして、最高優先度プロセッサエレメントは、放棄側プロセッサエレメントからウェイクアップ信号を受信して、そのプロセッサエレメントに、そのスリープ状態からウェイクアップさせ、そのとき利用可能なリソースロックを取得させることができる。
【００６０】
図6は、マルチプロセッサシステム内の指向性イベントシグナリングを実装するための一実施形態方法600を示す。方法600は、ソフトウェア、プロセッサもしくはシグナリングイベントマネージャなど、汎用もしくは専用ハードウェア、またはソフトウェアとハードウェアの組合せを使用するコンピューティングデバイスにおいて実行され得る。ブロック602で、シグナリングイベントマネージャはプロセッサエレメントからリソースアクセス要求を受信することができる。一実施形態では、リソースアクセス要求は、シグナリングイベントマネージャが、上で論じたように、要求されたリソースに対するロックを取得するために、要求側プロセッサエレメントの優先度を決定するのを助けることができる情報を含み得る。
【００６１】
決定ブロック604で、シグナリングイベントマネージャは、リソースアクセス要求が取得されたリソースロックをロック解除するためであるか、またはリソースロックを取得するためであるかを決定することができる。たとえば、リソースアクセス要求は、要求がリソースアクセスロック解除要求であるか、またはリソースアクセスロック要求であるかを指定することができる。リソースアクセス要求がリソースアクセスロック解除要求であるとの決定(すなわち、決定ブロック604=「ロック解除」)に応じて、シグナリングイベントマネージャは、決定ブロック606で、同じリソースに対する何らかの保留中のリソースアクセスロック要求が存在するかどうかを決定することができる。一実施形態では、シグナリングイベントマネージャは、前にリソースアクセスロック要求を送ったが、要求されたリソースが別のプロセッサエレメントによってすでにロックされていたため拒否されたプロセッサエレメントの優先度を検査することができる。同じリソースに関して何の保留中のリソースアクセスロック要求も存在しないとの決定(すなわち、決定ブロック606=「NO」)に応じて、シグナリングイベントマネージャは、ブロック602に戻って、他のリソースアクセス要求を受信することができる。保留中のリソースアクセスロック要求が存在するとの決定(すなわち、決定ブロック606=「YES」)に応じて、シグナリングイベントマネージャは、ブロック608で、ウェイクアップ信号を最高優先度のプロセッサエレメントに送り、それによって、スリープ状態からウェイクアップし、利用可能なリソースに対するロックを取得するようにプロセッサエレメントをトリガすることができる。シグナリングイベントマネージャは、ブロック602で、他のリソースアクセス要求を受信することができる。
【００６２】
リソースアクセス要求がリソースアクセスロック要求であるとの決定(すなわち、決定ブロック604=「ロック」)に応じて、シグナリングイベントマネージャは、決定ブロック610で、要求されたリソースに対するロックが、別のプロセッサエレメントによって所有されているか、またはすでに取得されているかを決定することができる。上で論じたように、シグナリングイベントマネージャは、ロック、および、この動作に関してアクセスされ得るプロセッサエレメントに関するデータを、テーブル内などに、記憶および維持することができる。そのようなテーブルは、特定のリソース専用であってよく、シグナリングイベントマネージャは、テーブル内のデータを分析することによって、取得されたリソースロックの状態を決定することができる。一実施形態では、特定のリソースに関するテーブル内のデータは、優先度値によってリソースロックの状態を示すことができる。たとえば、ある優先度値は、関連するプロセッサエレメントが現在リソースロックを所有していることを表示し得る。別の実施形態では、データ(たとえば、バイナリフラグ)はリソースロックの所有権を表示し得る。他の実施形態は、プロセッサエレメントがリソースロックを要求しているか、または所有しているという、リソースの表示を含み得る(リソース固有のテーブルではなく)普遍的なテーブルを含む。要求されたリソースがロックされていないか、要求されたリソースが利用可能であるか、またはリソースロックが所有されていないかという決定(すなわち、決定ブロック610=「NO」)に応じて、シグナリングイベントマネージャは、ブロック612で、要求側プロセッサエレメントに対してリソースロックの獲得を確認することができる。ブロック614で、シグナリングイベントマネージャは、テーブルまたはロック要求待機リストを更新して、リソースロックの所有権を反映することができる。上で説明した実施形態では、シグナリングイベントマネージャは、リソースロック所有権の表示のうちの1つまたは複数を更新することによって、テーブルの更新を達成することができる。シグナリングイベントマネージャは、ブロック602で、他のリソースアクセス要求を受信することができる。
【００６３】
要求されたリソースがロックされている/要求されたリソースが利用可能でない/リソースロックが所有されているという決定(すなわち、決定ブロック610=「YES」)に応じて、シグナリングイベントマネージャは、ブロック616で、要求側プロセッサエレメントにイベントを待機するようにシグナリングすることができる。一実施形態では、イベント待機信号は、上で説明したように、イベントについて通知されるまで、さらにスリープに入るようにプロセッサエレメントをトリガし得る。ブロック618で、シグナリングイベントマネージャは、テーブルまたはロック要求待機リストを更新して、リソースロックに関して拒否された要求を反映することができる。一実施形態では、シグナリングイベントマネージャは、テーブル内の要求側プロセッサエレメントの少なくとも優先度を更新し、要求側プロセッサエレメントがリソースロックに対する要求を行ったこと、および他のリソースロックの要求の中で現在の要求はどこにランク付けされるかを表示することができる。シグナリングイベントマネージャは、ブロック602で、他のリソースアクセス要求を受信することができる。
【００６４】
一実施形態では、コンピューティングデバイス上のセッションの間に、テーブルはまだ開始されていない場合があるか、または第1のリソースアクセスロック要求に先立って、完全にまたは部分的にポピュレートされていない場合がある。完全にまたは部分的にポピュレートされたテーブルはデータを含み得るが、リソースアクセスロック要求に関連付けられた更新データを受信するまで、そのデータは無関係であるか、または不完全な場合がある。この実施形態に対処するために、シグナリングイベントマネージャまたは別のプロセッサは、そのようなテーブルが存在するかどうかを決定して、図7に示したように、テーブルが存在しないとき、リソースアクセスロック要求テーブル、または待機リストを実装するために一実施形態方法700を実装することができる。方法700は、ソフトウェア、汎用ハードウェア、あるいはプロセッサもしくはシグナリングイベントマネージャ、またはソフトウェアとハードウェアの組合せなど、専用のハードウェアを使用するコンピューティングデバイスにおいて実行され得る。
【００６５】
シグナリングイベントマネージャが、方法600で、ブロック602でリソース要求の受信時、または決定ブロック604で、要求されたリソースがロックされているかどうかの決定時になど、リソースアクセスロック要求テーブル、または待機リストにアクセスする必要があるとき、シグナリングイベントマネージャは、決定ブロック702で、リソースアクセスロック要求テーブル、または待機リストが存在するかどうか、またはポピュレートされているかどうかを決定することができる。テーブルが存在しないか、または開始されていないとの決定(すなわち、決定ブック702=「NO」)に応じて、シグナリングイベントマネージャは、ブロック704で、テーブルまたは待機リストを開始することができる。一実施形態では、テーブルを開始することは、テーブルを作成し、リソースアクセスロック要求を行っている少なくとも1つのプロセッサエレメントに関連付けられたデータでそのテーブルを埋めることに関連し得る。ブロック706で、シグナリングイベントマネージャは、要求側プロセッサエレメントに優先度を割り当てることができる。上で説明したように、比較する他のプロセッサエレメントが存在しないため、テーブルの第1のプロセッサエレメントは任意の優先度を有してよい。一実施形態では、テーブル内の第1のプロセッサエレメントにデフォルト優先度または任意の優先度を割り当てることができる。
【００６６】
テーブルが存在するか、または開始されているとの決定(すなわち、決定ブック702=「YES」)に応じて、シグナリングイベントマネージャは、ブロック708で、要求側プロセッサエレメントの優先度を決定することができる。上で論じたように、シグナリングイベントマネージャは、シグナリングイベントマネージャとコンピューティングデバイスの他のハードウェア構成要素およびソフトウェア構成要素との間の複数の信号を含めて、様々な手段によってプロセッサエレメントの優先度を決定するための関連データを受信することができる。プロセッサエレメントの優先度の決定に関連するデータは、ソフトウェアまたはファームウェアによってあらかじめ決定されてよく、またはシグナリングイベントマネージャによって選択されてもよい。ブロック710で、シグナリングイベントマネージャはテーブルを更新することができる。テーブルの構成に応じて、シグナリングイベントマネージャは、要求側プロセッサエレメントに関連付けられたデータと他のプロセッサエレメントに関連付けられたデータとの比較に基づいて、要求側プロセッサエレメント、およびテーブル内に記載された他のプロセッサエレメントの優先度を更新することができる。要求側プロセッサエレメントの優先度を含めるかまたは更新するためにテーブルを更新することは、要求側プロセッサエレメント優先度がより高いことに応じて、他のプロセッサエレメントの優先度を変更させ得る。オプションのブロック712で、リソースロックを所有するプロセッサエレメントが、リソースがロック解除されたとき、待機している次のプロセッサエレメントに通知する実施形態では、シグナリングイベントマネージャはリソースロックを所有するプロセッサエレメントにテーブルを送ることができる。動作ブロック712の動作は、リソースロックを所有するプロセッサエレメントがテーブル内の優先度に基づいてロックを受信することになる、待機している次のプロセッサエレメントを決定することを可能にする。
【００６７】
図8は、マルチプロセッサシステム内の指向性イベントシグナリングのためのプロセッサエレメントの優先度付けを実装するための一実施形態方法800を示す。方法800は、ソフトウェア、汎用ハードウェア、あるいはプロセッサもしくはシグナリングイベントマネージャ、またはソフトウェアとハードウェアの組合せなど、専用のハードウェアを使用するコンピューティングデバイスにおいて実行され得る。ブロック802で、シグナリングイベントマネージャは、要求側プロセッサエレメントに優先度を割り当てるための1つまたは複数の基準を決定することができる。1つまたは複数の基準は、プロセッサエレメントの温度、動作周波数、およびローカリティのうちの1つまたは複数であり得る。一実施形態では、シグナリングイベントマネージャは、その時点のコンピューティングデバイスに状態に依存し得る、優先度を割り当てるための1つまたは複数の基準を選択することができる。たとえば、高温度状態、低電力可用性状態、電力節約モード状態、および低優先度状態のプロセスは、シグナリングイベントマネージャに、より高い優先度の基準として、低いプロセッサエレメント温度および/または低い動作周波数を選択させ得る。他方で、完全に充電されたバッテリーまたは充電中のバッテリー、および高性能ソフトウェアは、シグナリングイベントマネージャに、より高い優先度の基準として、高い動作周波数および/または高いローカリティ程度を選択させ得る。他の実施形態では、シグナリングイベントマネージャは、シグナリングイベントマネージャ内に統合された、もしくはその外部のレジスタなど、またはコンピューティングデバイス上で実行するソフトウェアプログラムによって提供されるようなど、ストレージから1つの基準/複数の基準を取り出すことによって、優先度を割り当てるための1つまたは複数の基準を決定することができる。
【００６８】
ブロック804で、シグナリングイベントマネージャは、選択された基準に関する要求側プロセッサエレメントの1つまたは複数のパラメータをテーブル内に記憶された他のプロセッサエレメントの1つまたは複数の同様のパラメータと比較して、優先度を割り当てるための選択された1つまたは複数の基準を最も満たすプロセッサエレメントを決定することができる。プロセッサエレメントの優先度を決定するために選択された1つまたは複数の基準に応じて、要求側プロセッサエレメントに関する好ましい比較は、要求側プロセッサエレメントのデータが他のプロセッサエレメントの比較可能なデータよりも高いこと、または低いことから生じ得る。要求側プロセッサエレメントに関する好ましい比較は、要求側プロセッサエレメントと同じリソースに対するリソースロックを取得しようと待機している他のプロセッサエレメントのうちの少なくとも1つよりも高い優先度をもたらし得る。いくつかの実施形態では、ブロック804における比較は、これらのパラメータの値の直接的な比較であり得る。いくつかの実施形態では、ブロック804における比較は、1つまたは複数のアルゴリズム/計算がこれらのパラメータの値に適用され、これらのアルゴリズム/計算の結果が比較される間接的な比較であり得る。
【００６９】
ブロック806で、シグナリングイベントマネージャは、パラメータ比較に基づいて、要求側プロセッサエレメントに優先度を割り当てることができる。要求側プロセッサエレメントに優先度を割り当てることはまた、同じリソースに対するリソースロックを取得しようと待機している他のプロセッサエレメントのうちの1つまたは複数に関する優先度に変更をもたらし得る。たとえば、3つの他のプロセッサエレメントよりも要求側プロセッサエレメントにより高い優先度が割り当てられるのに応じて、3つの他のプロセッサエレメントの各々の優先度をそれに応じて下げることができる。同時に、要求側プロセッサエレメントに割り当てられた優先度よりも高い優先度を有する他のプロセッサエレメントは、優先度割当てによって変更されない状態に留まってよい。
【００７０】
図9は、マルチプロセッサシステム内の指向性イベントシグナリングに関する枯渇回避を実装するための一実施形態方法900を示す。方法900は、ソフトウェア、汎用ハードウェア、あるいはプロセッサもしくはシグナリングイベントマネージャ、またはソフトウェアとハードウェアの組合せなど、専用のハードウェアを使用するコンピューティングデバイスにおいて実行され得る。ブロック902で、シグナリングイベントマネージャは、リソースアクセスロック要求を行った1つまたは複数のプロセッサエレメントに関するウェイクアップ統計を追跡することができる。一実施形態では、そのようなウェイクアップ統計は、シグナリングイベントマネージャがウェイクアップ信号をプロセッサエレメントに送った回数、プロセッサエレメントが最後にウェイクアップ信号を送った時間、最後のウェイクアップ信号がプロセッサエレメントに送られてから経過した時間、プロセッサエレメントがリソースアクセスロック要求を保留した時間、および/またはプロセッサエレメントがリソースアクセスロック要求を保留してから経過した時間を含み得る。
【００７１】
ブロック904で、シグナリングイベントマネージャは、リソースアクセスロック要求を保留にしているプロセッサエレメントに関するウェイクアップ統計をウェイクアップしきい値と比較することができる。一実施形態では、ウェイクアップしきい値は、あらかじめ決定された値、同じ統計に関する履歴情報に基づく値、またはリソースアクセスロック要求を保留している他のプロセッサエレメントに関する同じ統計の値のうちの1つまたは複数の関数であり得る。
【００７２】
決定ブロック906で、シグナリングイベントマネージャは、リソースアクセスロック要求を保留にしているプロセッサエレメントに関するウェイクアップ統計がウェイクアップしきい値を超えるかどうかを決定することができる。リソースアクセスロック要求を保留にしているプロセッサエレメントに関するウェイクアップ統計がウェイクアップしきい値を超えないとの決定(すなわち、決定ブロック906=「NO」)に応じて、シグナリングイベントマネージャは、ブロック908で、テーブルを変更のない状態に保つことができる。
【００７３】
リソースアクセスロック要求を保留にしているプロセッサエレメントのウェイクアップ統計がウェイクアップしきい値を超えるとの決定(すなわち、決定ブロック906=「YES」)に応じて、シグナリングイベントマネージャは、ブロック910で、プロセッサエレメントにより高い優先度を割り当て、上のブロック710に関して説明したように、ブロック912でテーブルを更新することができる。プロセッサエレメントに割り当てられるより高い優先度は多数の方法で決定され得る。一実施形態では、より高い優先度は、一定の値だけ優先度を下げること、プロセッサエレメントに一定の優先度(たとえば、最高優先度)を割り当てること、または優先度キュー内のプロセッサエレメントの位置を反転させることなど、あらかじめ決定された規則に従って割り当てられてよい。一実施形態では、より高い優先度は、プロセッサエレメントの枯渇の重大度に従って割り当てられてよい。重大度は、他のプロセッサエレメントのウェイクアップ統計と比較した、プロセッサエレメントのウェイクアップ統計の関数によって決定され得る。枯渇の重大度が大きければ大きいほど、プロセッサエレメントに割り当てられ得る優先度は高くなる。
【００７４】
図10は、マルチプロセッサシステム内の指向性イベントシグナリングを用いたロック認識スケジューリングを実装するための一実施形態方法1000を示す。方法1000は、ソフトウェア、汎用ハードウェア、あるいはプロセッサもしくはシグナリングイベントマネージャ、またはソフトウェアとハードウェアの組合せなど、専用のハードウェアを使用するコンピューティングデバイスにおいて実行され得る。ブロック1002で、シグナリングイベントマネージャは、複数のスレッドが異なるプロセッサエレメント上で実行するための共通のリソースを使用するときなど、複数のスレッドが同じリソースロックを要求していることを検出することができる。
【００７５】
ブロック1004で、シグナリングイベントマネージャは、同じリソースを競合しているスレッドのうちのいくつかまたはすべてをいくつかのプロセッサエレメントに移動させるようにオペレーティングシステム/スケジューラに要求することができる。シグナリングイベントマネージャは、異なるシステムアーキテクチャの一定の効率を利用するために、いくつかのエレメントにスレッドを移動することを要求することができる。一実施形態では、プロセッサエレメントは、クラスタアーキテクチャ内で構成され得る。同じリソースを競合しているスレッドを実行するためにクラスタの一定のプロセッサエレメントを選択することは、クラスタのプロセッサエレメントが同じ周波数で動作しているとき、性能を最大化することができる。一実施形態では、クラスタのプロセッサエレメントは極めて近接している傾向にある。クラスタの待機中のプロセッサエレメントがほぼゼロの電力消費で停止され得るとき、熱散逸を改善することができ、停止したプロセッサエレメントのエリアを使用して、他の実行中のプロセッサエレメントによって生成される熱を散逸することができる。一実施形態では、停止したプロセッサエレメントの余分なエリアが熱散逸のために使用されるとき、実行中のプロセッサエレメントの最大周波数は、最大推奨温度および/または動作周波数を超える場合がある。一実施形態では、プロセッサアーキテクチャは、複数のプロセッサエレメントによるメモリ階層の共有部分を採用することができ、その場合、様々なヒューリスティックにおいて、メモリに対するアクセス待ち時間は、優先度基準として低減または最小化され得、ローカリティは、優先度基準として増大または最大化され得る。複数の電源を含むコンピューティングシステムでは、スレッドが同じ電源を使用するプロセッサエレメントに移動され得るように、優先度基準を調整することができると同時に、他の電源上のプロセッサエレメントがスレッドを受信することができないように、それらのプロセッサエレメントは優先度を下げ、したがって、電源切断することができる。ブロック1006で、シグナリングイベントマネージャは、同じリソースを競合しているスレッドの要求されたプロセッサエレメントに対する再割振りの確認を受信することができる。ブロック1008で、シグナリングイベントマネージャは、ブロック710に関して上で説明したようにテーブルを更新することができる。
【００７６】
図11は、マルチプロセッサシステム内の指向性イベントシグナリングを用いたロック停止動作を実装するための一実施形態方法1100を示す。方法1100は、ソフトウェア、汎用ハードウェア、あるいはプロセッサもしくはシグナリングイベントマネージャ、またはソフトウェアとハードウェアの組合せなど、専用のハードウェアを使用するコンピューティングデバイスにおいて実行され得る。ブロック1102で、シグナリングイベントマネージャは、要求されたリソースロックに対する現在のイベント待機状態が利用可能になると同時に、プロセッサエレメントに関するスリープ時間(すなわち、プロセッサが低電力状態に留まり得る持続時間)を推定することができる。一実施形態では、シグナリングイベントマネージャは、履歴情報、より高い優先度を有し、同じリソースを待機しているプロセッサエレメント上のスレッドに関して予想される実行時間、およびリソースを待機しているより高い優先度のプロセッサエレメントの数のうちの1つまたは複数に基づいて推定を行うことができる。たとえば、プロセッサエレメントが低優先度を有し、同じリソースを待機している、より高い優先度を有する複数のプロセッサエレメントが存在する場合、シグナリングイベントマネージャは、特に、プロセッサエレメントが最高優先度を有するとき、または待機リスト上の唯一のエレメントであり、したがって、そのリソースを使用する次のエレメントであるときと比較して、プロセッサエレメントが比較的長いスリープ時間を有することになると推定することができる。
【００７７】
ブロック1104で、シグナリングイベントマネージャは、推定されたスリープ時間に基づいて、要求側プロセッサエレメントに関するスリープ状態を決定することができる。様々な実施形態は、プロセッサエレメントに関して多数の異なるスリープ状態を実装し得る。異なるスリープ状態は電力消費レベルによって特徴付けられてもよい。より高い電力消費スリープ状態は、より低い電力節約を提供し得るが、不揮発性メモリ内に状態および作動データを保持することによってなど、より高速のウェイクアップが可能であり得る。対照的に、より低い電力消費スリープ状態は、より多くのリソースをオフにして、メモリの電力を切断することによって、より電力を節約することができ、(電力を必要とする)より多くのリソースを再活性化(reenergize)し、実行命令にランプアップするために、状態データを揮発性メモリ内に再ロードする(より長い時間がかかる)必要をもたらし得る。一実施形態では、シグナリングイベントマネージャは、より短い推定スリープ時間に対してより高い電力消費スリープ状態を選択することができるが、これは、より短い時間期間にわたる電力節約は、システム内でプロセッサエレメントを再確立しなければならないことによる効率損失に値し得ないためである。同様に、より長いスリープ時間の場合、シグナリングイベントマネージャは、より大きな電力節約の純便益により、より低い電力消費スリープ状態を選択することができる。ブロック1106で、シグナリングイベントマネージャは、推定されたスリープ時間に対して指定されたスリープ状態を要求側プロセッサエレメントに通知することができる。一実施形態では、要求側プロセッサエレメントは指定されたスリープ状態を実装することができる。
【００７８】
図12は、マルチプロセッサシステム内の指向性イベントシグナリングを用いたロック停止動作を実装するための一実施形態方法1200を示す。方法1200は、ソフトウェア、汎用ハードウェア、あるいはプロセッサもしくはシグナリングイベントマネージャ、またはソフトウェアとハードウェアの組合せなど、専用のハードウェアを使用するコンピューティングデバイスにおいて実行され得る。ブロック1202で、シグナリングイベントマネージャは、ブロック1102におけるように、要求されたリソースロックに対する現在のイベント待機状態が利用可能になると同時に、プロセッサエレメントに関するスリープ時間(すなわち、プロセッサが低電力状態に留まり得る持続時間)を推定することができる。ブロック1204で、シグナリングイベントマネージャは、推定されたスリープ時間をオペレーティングシステム/スケジューラに通知することができる。一実施形態では、オプションのブロック1206で、オペレーティングシステム/スケジューラは、推定されたスリープ時間に関連付けられた時間期間にわたってスケジューリングキューから要求側プロセッサエレメントを除去することができる。代替実施形態では、オプションのブロック1208で、オペレーティングシステム/スケジューラは、推定されるスリープ時間の間、それに関してプロセッサエレメントがイベント待機信号を受信したリソースの使用を必要としないことになるスレッドなど、異なるスレッドをプロセッサエレメントに割り当てることができる。
【００７９】
図13は、様々な実施形態、たとえば、図1〜図12を参照して示し、かつ/または説明した実施形態とともに使用するのに適した1つの例示的なモバイルコンピューティングデバイスを示す。モバイルコンピューティングデバイス1300は、タッチスクリーンコントローラ1304および内部メモリ1306に結合されたプロセッサ1302を含み得る。プロセッサ1302は、汎用処理タスクまたは特定の処理タスクに指定された1つまたは複数のマルチコア集積回路であってもよい。内部メモリ1306は、揮発性メモリまたは不揮発性メモリとすることができ、セキュアメモリおよび/もしくは暗号化されたメモリ、アンセキュアメモリおよび/もしくは暗号化されないメモリ、またはその任意の組合せとすることもできる。利用され得るメモリタイプの例は、限定はしないが、DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM、および混載DRAMを含む。タッチスクリーンコントローラ1304およびプロセッサ1302は、抵抗感知タッチスクリーン、容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル1312に結合される場合もある。加えて、コンピューティングデバイス1300のディスプレイは、タッチスクリーン機能を有する必要はない。
【００８０】
モバイルコンピューティングデバイス1300は、互いに結合され、かつ/またはプロセッサ1302に結合された、通信を送信および受信するための1つまたは複数の無線信号トランシーバ1308(たとえば、Peanut、Bluetooth(登録商標)、Zigbee、Wi-Fi、RF無線など)およびアンテナ1310を有する場合がある。トランシーバ1308およびアンテナ1310は、様々なワイヤレス送信のプロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用される場合がある。モバイルコンピューティングデバイス1300は、セルラーネットワークを介した通信を可能にし、プロセッサに結合されたセルラーネットワークワイヤレスモデムチップ1316を含み得る。
【００８１】
モバイルコンピューティングデバイス1300は、プロセッサ1302に結合された周辺デバイス接続インターフェース1318を含み得る。周辺デバイス接続インターフェース1318は、1つのタイプの接続を受け入れるように単独で構成され得、または、USB、FireWire、Thunderbolt、またはPCIeなど、一般的なまたはプロプライエタリの様々なタイプの物理接続および通信接続を受け入れるように構成され得る。周辺デバイス接続インターフェース1318は、同様に構成された周辺デバイス接続ポート(図示せず)にも結合され得る。
【００８２】
モバイルコンピューティングデバイス1300は、オーディオ出力を提供するためのスピーカー1314も含み得る。モバイルコンピューティングデバイス1300は、本明細書で論じる構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築された筐体1320も含み得る。モバイルコンピューティングデバイス1300は、使い捨てバッテリーまたは充電式バッテリーなどの、プロセッサ1302に結合された電源1322を含み得る。充電式バッテリーは、モバイルコンピューティングデバイス1300の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。モバイルコンピューティングデバイス1300は、ユーザ入力を受け取るための物理ボタン1324を含み得る。モバイルコンピューティングデバイス1300は、モバイルコンピューティングデバイス1300をオンオフするための電源ボタン1326を含み得る。
【００８３】
様々な実施形態、たとえば、図1〜図12を参照して示した、かつ/または説明した実施形態はまた、図14で示したラップトップコンピュータ1400など、様々なモバイルコンピューティングデバイス内で実装され得る。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして働くタッチパッドのタッチ面1417を含み、したがって、タッチスクリーンディスプレイを装備した、上で説明したコンピューティングデバイス上で実装されるものと同様のドラッグジェスチャ、スクロールジェスチャ、およびフリックジェスチャを受け取ることができる。ラップトップコンピュータ1400は通常、揮発性メモリ1412、およびフラッシュメモリのディスクドライブ1413などの大容量不揮発性メモリに結合されたプロセッサ1411を含む。加えて、コンピュータ1400は、プロセッサ1411に結合されたワイヤレスデータリンクおよび/またはセルラー電話トランシーバ1416に接続され得る、電磁放射を送信および受信するための1つまたは複数のアンテナ1408を有し得る。コンピュータ1400はまた、プロセッサ1411に結合されたフロッピーディスクドライブ1414およびコンパクトディスク(CD)ドライブ1415を含み得る。ノートブック構成では、コンピュータ筐体は、すべてがプロセッサ1411に結合された、タッチパッド1417、キーボード1418、およびディスプレイ1419を含む。コンピューティングデバイスの他の構成はよく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含んでよく、それらはまた、様々な実施形態とともに使用され得る。
【００８４】
様々な実施形態、たとえば、図1〜図12を参照して示し、かつ/または説明した実施形態はまた、サーバキャッシュメモリ内でデータを圧縮するための様々な市販のサーバのうちのいずれかの中で実装され得る。例示的なサーバ1500が、図15に示されている。そのようなサーバ1500は通常、揮発性メモリ1502、およびディスクドライブ1504などの大容量不揮発性メモリに結合された1つまたは複数のマルチコアプロセッサアセンブリ1501を含む。図15に示すように、マルチコアプロセッサアセンブリ1501は、それらをアセンブリのラックに挿入することによって、サーバ1500に追加され得る。サーバ1500は、プロセッサ1501に結合された、フロッピーディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ1506も含み得る。サーバ1500はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話網、ならびに/またはセルラーデータネットワーク(たとえば、CDMA、TDMA、GSM(登録商標)、PCS、3G、4G、LTE、もしくは任意の他のタイプのセルラーデータネットワーク)など、ネットワーク1505とのネットワークインターフェース接続を確立するための、マルチコアプロセッサアセンブリ1501に結合されたネットワークアクセスポート1503を含み得る。
【００８５】
様々な実施形態の動作を遂行するためにプログラマブルプロセッサ上で実行するためのコンピュータプログラムコードまたは「プログラムコード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaScript(登録商標)、Visual Basic、Structured Query Language(たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語で、または様々な他のプログラミング言語で書かれ得る。本出願で使用する場合、コンピュータ可読記憶媒体上に記憶されたプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である(オブジェクトコードなどの)機械語コードを指す場合がある。
【００８６】
多くのコンピューティングデバイスのオペレーティングシステムのカーネルは、(非特権コードが動作する場合)ユーザ空間に編成され、(特権コードが動作する場合)カーネル空間に編成される。この分離は、カーネル空間の一部であるコードが一般公有使用許諾(GPL)許諾されなければならない一方で、ユーザ空間内で動作するコードがGPL許諾されなくてもよい、Androidおよび他のGPL環境において特に重要である。本明細書で説明した様々なソフトウェア構成要素/モジュールのうちの少なくともいくつかは、別段に明記されていない限り、カーネル空間またはユーザ空間のいずれかにおいて実装され得ることを理解されたい。
【００８７】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供されており、様々な実施形態の動作が提示された順序で実施されなければならないことを必要とするまたは暗示するものではない。当業者によって諒解されるように、上記の実施形態における動作の順序は、任意の順序で実施され得る。さらに、たとえば冠詞「a」、「an」、または「the」を使用する、請求項の要素に対する単数形でのいかなる参照も、要素を単数形に限定すると解釈されるべきではない。
【００８８】
様々な実施形態に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、および動作について、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装形態の決定は、本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００８９】
本明細書で開示した実施形態に関して説明した様々な例示的論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明した機能を実行するように設計されたそれらの任意の組合せを用いて実装もしくは実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装される場合もある。代替的に、いくつかの動作または方法は、所与の機能に固有の回路によって実行され得る。
【００９０】
1つまたは複数の実施形態では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装されてもよい。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体上に記憶され得る。本明細書で開示する方法またはアルゴリズムの動作は、非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体上に存在し得るプロセッサ実行可能ソフトウェアモジュールにおいて具現化され得る。非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る任意の記憶媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびblu-rayディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)はレーザーを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読記憶媒体およびプロセッサ可読記憶媒体の範囲内に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれる場合がある、非一時的プロセッサ可読媒体および/または非一時的コンピュータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せまたはセットとして存在する場合がある。
【００９１】
開示した実施形態の前述の説明は、いかなる当業者も本発明を作成または使用することができるように与えたものである。これらの実施形態に対する様々な修正は当業者には容易に明らかとなり、本明細書で定義した一般原理は、本発明の趣旨または範囲から逸脱することなく、他の実施形態に適用され得る。したがって、本発明は、本明細書に示す実施形態に限定されるものではなく、以下の特許請求の範囲、ならびに本明細書で開示する原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【００９２】
10  コンピューティングデバイス
12  SoC
14  プロセッサ
16  メモリ
18  通信インターフェース
20  記憶インターフェース
22  通信構成要素
24  記憶構成要素
26  アンテナ
28  ネットワークインターフェース
30  ワイヤレスネットワーク
32  ワイヤレス接続
40  インターンジェット
44  ワイヤード接続
50  リモートコンピューティングデバイス
200  プロセッサコア、プロセッサコア0
201  プロセッサコア、プロセッサコア1
202  プロセッサコア、プロセッサコア2
203  プロセッサコア、プロセッサコア3
206  シグナリングイベントマネージャ
208  シグナリングイベントマネージャ、シグナリングイベントマネージャ0
210  シグナリングイベントマネージャ、シグナリングイベントマネージャ1
212  シグナリングイベントマネージャ、シグナリングイベントマネージャ2、マルチコアプロセッサ、プロセッサ
214  マルチコアプロセッサ、プロセッサ
216  マルチコアプロセッサ、プロセッサ
218  マルチコアプロセッサ、プロセッサ
220  SoC、SoC0
222  SoC、SoC1
224  SoC、SoC2
226  SoC、SoC3
230  専用シグナリングイベントマネージャ通信バス
300  クラスタ
302  クラスタ
304  クラスタキャッシュ
306  クラスタキャッシュ
308  プロセッサキャッシュ
400  テーブル
402  列
404  列、優先度
406  列、プロセッサエレメント温度
408  列
410  列
412  列
414  列
416  列
418  列
420  列
422  列
424  列
500  リソースアクセスロック要求
502  リソースアクセスロック要求
504  イベント待機信号
506  リソースアクセスロック要求
508  イベント待機信号
510  リソースアクセスロック解除要求
512  ウェイクアップ信号
514  リソースアクセスロック解除要求
516  ウェイクアップ信号
518  リソースロック
520  リソースロック
522  リソースロック
524  プロセッサエレメント0
526  プロセッサエレメント1
528  プロセッサエレメント2
600  一実施形態方法
700  一実施形態方法
800  一実施形態方法
900  一実施形態方法
1000  一実施形態方法
1100  一実施形態方法
1200  一実施形態方法
1300  モバイルコンピューティングデバイス
1302  プロセッサ
1304  タッチスクリーンコントローラ
1306  内部メモリ
1308  無線信号トランシーバ、トランシーバ
1310  アンテナ
1312  タッチスクリーンパネル
1314  スピーカー
1316  セルラーネットワークワイヤレスモデムチップ
1318  周辺デバイス接続インターフェース
1320  筐体
1322  電源
1324  物理ボタン
1326  電源ボタン
1400  ラップトップコンピュータ
1408  アンテナ
1411  プロセッサ
1412  揮発性メモリ
1413  ディスクドライブ
1414  フロッピーディスクドライブ
1415  コンパクトディスク(CD)ドライブ
1416  ワイヤレスデータリンクおよび/またはセルラー電話トランシーバ
1417  タッチ面、タッチパッド
1418  キーボード
1419  ディスプレイ
1500  サーバ
1501  マルチコアプロセッサアセンブリ、プロセッサ
1502  揮発性メモリ
1503  ネットワークアクセスポート
1504  ディスクドライブ
1505  ネットワーク
1506  フロッピーディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ
【図１】
0006423518.tif 000002
【図２Ａ】
0006423518.tif 000003
【図２Ｂ】
0006423518.tif 000004
【図２Ｃ】
0006423518.tif 000005
【図２Ｄ】
0006423518.tif 000006
【図３】
0006423518.tif 000007
【図４】
0006423518.tif 000008
【図５】
0006423518.tif 000009
【図６】
0006423518.tif 000010
【図７】
0006423518.tif 000011
【図８】
0006423518.tif 000012
【図９】
0006423518.tif 000013
【図１０】
0006423518.tif 000014
【図１１】
0006423518.tif 000015
【図１２】
0006423518.tif 000016
【図１３】
0006423518.tif 000017
【図１４】
0006423518.tif 000018
【図１５】
0006423518.tif 000019