(57)【特許請求の範囲】
【請求項１】
コプロセッサタスクオフローディングのためのコンピューティングデバイスであって、
前記コンピューティングデバイスのコプロセッサによって、前記コンピューティングデバイスの１つ以上のセンサに関連するセンサデータを受信する、センサマネジメントモジュールと、
前記コプロセッサによって、前記センサデータに関連する複数のイベントを検出し、前記コプロセッサによって、前記イベントに関連するリソース使用コスト値及び電力状態遷移コスト値を決定する、センサプロファイリングモジュールと、
前記コプロセッサによって、前記コンピューティングデバイスのアプリケーションプロセッサからオフロードされるタスクリクエストを受信する、タスクスケジュールモジュールと、
前記イベントの頻度、前記イベントに関連する前記リソース使用コスト値、及び前記イベントに関連する前記電力状態遷移コスト値の関数として、前記複数のイベントに関連する総コプロセッサロード値を、前記コプロセッサによって決定し、前記総コプロセッサロード値と前記オフロードされるタスクリクエストに関連するコプロセッサロード値とに基づいて、前記オフロードされるタスクリクエストを受け入れるか否かを前記コプロセッサによって決定する、機械学習モジュールと、
を備える、コンピューティングデバイス。
【請求項２】
前記複数のイベントが、センサイベント又はタイマイベントを含む、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記リソース使用コスト値を決定することが、前記イベントに関連する１つ以上のコールバック関数の処理に対するコプロセッサ使用値を決定することを含む、請求項１に記載のコンピューティングデバイス。
【請求項４】
前記電力状態遷移コスト値を決定することが、低電力状態から前記イベントを処理する動作状態へ前記コンピューティングデバイスの機能ブロックを遷移させることに関連するコストを決定することを含む、請求項１に記載のコンピューティングデバイス。
【請求項５】
前記総コプロセッサロード値を決定することが、前記イベントの頻度、前記イベントに関連する前記リソース使用コスト値、及び前記イベントに関連する前記電力状態遷移コスト値の関数として、指数移動平均を決定することを含む、請求項１に記載のコンピューティングデバイス。
【請求項６】
前記タスクスケジュールモジュールが、前記オフロードされるタスクリクエストを受け入れないと決定することに応答して、前記コプロセッサによってタスクオンロードリクエストを前記アプリケーションプロセッサにさらに送信する、請求項１に記載のコンピューティングデバイス。
【請求項７】
前記アプリケーションプロセッサによって、前記コプロセッサからの前記タスクオンロードリクエストの受信に基づいて、第２タスクオフロードリクエストを前記コプロセッサに送信するか否かを決定する、アプリケーションモジュールをさらに含む、請求項６に記載のコンピューティングデバイス。
【請求項８】
前記オフロードされるタスクリクエストを受け入れるか否かを決定することが、前記コプロセッサの残存処理能力に基づいて前記オフロードされるタスクリクエストを受け入れるか否かを決定することを含む、請求項１に記載のコンピューティングデバイス。
【請求項９】
前記オフロードされるタスクリクエストを受け入れるか否かを決定することが、前記総コプロセッサロード値と前記オフロードされるタスクリクエストに関連する前記コプロセッサロード値とを所定のしきいコプロセッサロード値と比較することを含む、請求項１に記載のコンピューティングデバイス。
【請求項１０】
前記所定のしきいコプロセッサロード値が、前記コプロセッサのプロセッサコアの数に基づいている、請求項９のコンピューティングデバイス。
【請求項１１】
前記機械学習モジュールが、
前記複数のイベントの主成分分析を実行し、
前記主成分分析に基づいて、前記コンピューティングデバイスの使用パターンにおける変化が存在するか否かを決定し、
前記オフロードされるタスクリクエストを受け入れるか否かを決定することが、前記コンピューティングデバイスの使用パターンにおける前記変化が存在するか否かの決定の関数として、前記オフロードされるタスクリクエストを受け入れるか否かを決定することをさらに含む、請求項１乃至１０のいずれか一項記載のコンピューティングデバイス。
【請求項１２】
前記機械学習モジュールは、
前記オフロードされるタスクリクエストが短期間のタスクに関連しているか否かを前記コプロセッサによって決定し、
前記オフロードされるタスクリクエストを受け入れるか否かを決定することは、前記オフロードされるタスクリクエストが、短期間のタスクに関連しているか否かの決定の関数として、前記オフロードされるタスクリクエストを受け入れるか否かを決定することをさらに含む、請求項１１に記載のコンピューティングデバイス。
【請求項１３】
前記オフロードされるタスクリクエストが短期間のタスクに関連しているという決定に応答して、前記オフロードされるタスクを受け入れるか否かを決定することは、（ｉ）前記総コプロセッサロード値の決定又は（ｉｉ）前記コンピューティングデバイスの使用パターンにおける前記変化の存在の決定に基づいて、前記タスクを受け入れるか否かを決定することを含み、
前記オフロードされるタスクリクエストが短期間のタスクに関連していないという決定に応答して、前記オフロードされるタスクを受け入れるか否かの決定は、（ｉ）前記総コプロセッサロード値の決定及び（ｉｉ）前記コンピューティングデバイスの使用パターンにおける前記変化の存在の決定に基づいて、前記タスクを受け入れるか否かを決定することを含む、
請求項１２に記載のコンピューティングデバイス。
【請求項１４】
コプロセッサタスクオフローディングのための方法であって、
コンピューティングデバイスの１つ以上のセンサに関連するセンサデータを、前記コンピューティングデバイスのコプロセッサによって、受信することと、
前記センサデータに関連する複数のイベントを、前記コプロセッサによって検出することと、
前記イベントに関連するリソース使用コスト値と電力状態遷移コスト値とを、前記コプロセッサによって決定することと、
前記コンピューティングデバイスのアプリケーションプロセッサからオフロードされるタスクリクエストを、前記コプロセッサによって、受信することと、
前記イベントの頻度、前記イベントに関連する前記リソース使用コスト値、及び前記イベントに関連する前記電力状態遷移コスト値の関数として、前記複数のイベントに関連する総コプロセッサロード値を、前記コプロセッサによって決定することと、
前記総コプロセッサロード値と前記オフロードされるタスクリクエストに関連するコプロセッサロード値とに基づいて前記オフロードされるタスクリクエストを受け入れるか否かを、前記コプロセッサによって、決定することと、
を含む方法。
【請求項１５】
前記リソース使用コスト値を決定することが、前記イベントに関連する１つ以上のコールバック関数を処理するためのコプロセッサ使用値を決定することを含む、請求項１４に記載の方法。
【請求項１６】
前記電力状態遷移コスト値を決定することが、低電力状態から前記イベントを処理する動作状態へ前記コンピューティングデバイスの機能ブロックを遷移させることに関連するコストを決定することを含む、請求項１４に記載の方法。
【請求項１７】
前記総コプロセッサロード値を決定することが、前記イベントの前記頻度、前記イベントに関連する前記リソース使用コスト値、及び前記イベントに関連する前記電力状態遷移コスト値との関数として、指数移動平均を決定することを含む、請求項１４に記載の方法。
【請求項１８】
前記オフロードされるタスクリクエストを受け入れないと決定することに応答して、前記コプロセッサによって、タスクオンロードリクエストを前記アプリケーションプロセッサに送信することを、さらに含む、請求項１４に記載の方法。
【請求項１９】
前記オフロードされるタスクリクエストを受け入れるか否かを決定することが、前記コプロセッサの残存処理能力に基づいて前記オフロードされるタスクリクエストを受け入れるか否かを決定することを含む、請求項１４に記載の方法。
【請求項２０】
前記複数のイベントの主成分分析を前記コプロセッサによって実行することと、
前記主成分分析に基づいて、前記コンピューティングデバイスの使用パターンにおける変化が存在するか否かを前記コプロセッサによって決定することと、
前記オフロードされるタスクリクエストを受け入れるか否かを決定することが、前記コンピューティングデバイスの使用パターンにおける前記変化が存在するか否かの決定の関数として、前記オフロードされるタスクリクエストを受けるか否かを決定することをさらに含む、請求項１４に記載の方法。
【請求項２１】
前記オフロードされるタスクリクエストが短期間のタスクに関連しているか否かを、前記コプロセッサによって決定することをさらに含み、
前記オフロードされるタスクリクエストを受け入れるか否かを決定することが、前記オフロードされるタスクリクエストが短期間のタスクに関連しているか否かの決定の関数として、前記オフロードされるタスクリクエストを受け入れるか否かを決定することをさらに含む、請求項２０に記載の方法。
【請求項２２】
前記オフロードされるタスクリクエストが短期間のタスクに関連しているという決定に応答して、前記オフロードされるタスクを受け入れるか否かを決定することは、（ｉ）前記総コプロセッサロード値の決定又は（ｉｉ）前記コンピューティングデバイスの使用パターンにおける前記変化の存在の決定に基づいて、前記タスクを受け入れるか否かを決定することを含み、
前記オフロードされるタスクリクエストが短期間のタスクに関連していないという決定に応答して、前記オフロードされるタスクを受け入れるか否かの決定は、（ｉ）前記総コプロセッサロード値の決定及び（ｉｉ）前記コンピューティングデバイスの使用パターンにおける前記変化の存在の決定に基づいて、前記タスクを受け入れるか否かを決定することを含む、
請求項２１に記載の方法。
【請求項２３】
プロセッサと、
前記プロセッサによって実行されたときに、前記コンピューティングデバイスに請求項１４乃至２２のいずれか一項に記載の方法を実行させる、複数の命令をその中に記憶するメモリと、
を備える、コンピューティングデバイス。
【請求項２４】
実行されたことに応答して、コンピューティングデバイスに請求項１４乃至２２のいずれか１項に記載の方法を実行させる、その上に記憶された複数の命令を含む、１つ以上の機械読み取り可能記憶媒体。
【請求項２５】
請求項１４乃至２２のいずれか１項に記載の方法を実行するための手段を含む、コンピューティングデバイス。
【請求項２６】
実行されたことに応答して、コンピューティングデバイスに請求項１４乃至２２のいずれか１項に記載の方法を実行させる複数の命令を含む、コンピュータプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願の相互参照
本出願は、２０１５年３月２７日に出願された、米国特許出願１４／６７１,０７７号、題名「プロセッサ／コプロセッサ構成からのデータのオフローディング及びオンローディングのための技術（TECHNOLOGIES  FOR  OFFLOADING  AND  ON-LOADING  DATA  FROM  PROCESSOR/COPROCESSOR  ARRANGEMENTS）」に対する優先権を主張する。
【０００２】
ラップトップ、スマートフォン、タブレット及びウエアラブルを含むほとんどすべての電子デバイスに、より多くのセンサが追加されるにつれて、センサのデータを処理し、それを有益な情報に変えるためには、より多くの電力（power）が必要となる。加速度計やジャイロスコープなどの複数のセンサから読み出されたデータは、管理するのにさらにより複雑になってきている。近年、電力を食うホストプロセッサ（「アプリケーション」プロセッサとも呼ばれる）やバッテリ電力制限のために、センサハブ（sensor  hubs）は、モバイルデバイスやウエアラブル電子機器に進化してきている。ホストプロセッサからそれらのタスクをオフロードし、より長いバッテリ実行時間を可能にするために、センサ融合アルゴリズム（sensor  fusion  algorithms：センサフュージョンアルゴリズム）を走らせるために、センサハブは使用される。しかしながら、オフローディング技術（offloading  technologies）は、消費電力、サイズの制約、バッテリ寿命、及び処理リソースなどの要因によってしばしば影響を受け、それらは、ホストプロセッサのオフローディングの能力及び効率に影響を与えることがある。
【図面の簡単な説明】
【０００３】
本明細書で説明されるコンセプトは、添付図面において、例として、且つ制限のためではなく、説明される。説明の単純さ及び明確さのために、図面において説明され要素は、必ずしも縮尺通りに描かれていない。適切と考えられる場合には、参照ラベルは、対応する要素又は類似する要素を示す図面の間で、繰り返される。
【０００４】
【図１】センサハブのオフローディング動作を実行するためのシステムの少なくとも１つの実施形態の単純化したブロック図である。
【図２】図１のシステムのコンピューティングデバイスによって確立され得る環境の少なくとも１つの実施形態の単純化したブロック図である。
【図３】図１及び図２のコンピューティングデバイスによって実行され得るセンサハブに対するオフローディング動作及びオンローディング動作に関する方法の少なくとも１つの実施形態の単純化した流れ図である。
【図４】図３の方法によって決定され得るセンサハブに対する総計したプロセッサワークロードを決定するための方法の少なくとも１つの実施形態の単純化した流れ図である。
【図５】図１及び図２のコンピューティングデバイスによって実行され得るセンサハブに対するオフローディング動作及びオンローディング動作に関する別の方法の少なくとも１つの実施形態の単純化された流れ図である。
【図６】図５の方法によって判定され决定され得るオフローディング動作及びオンローディング動作において使用されるセンサハブに対する総プロセッサワークロードを統計的に分析するための方法に関する少なくとも１つの実施形態の単純化された流れ図である。
【発明を実施するための形態】
【０００５】
本開示の特定の実施形態が図面において例として示され、本明細書で詳細に説明されるが、本開示の概念は、様々な変更や代替形態を受け入れることができる。しかしながら、本開示の概念を開示される特定の形態に制限する意図は無く、しかし、それどころか、本開示及び添付請求項と調和する変更、均等物、及び代替手段のすべてをカバーする意図であることを理解されたい。
【０００６】
「１つの実施形態（one  embodiment）」、「１実施形態（an  embodiment）」、「例となる実施形態（an  illustrative  embodiment）」等への本明細書中での参照は、説明される実施形態が特定の構成要件、構造、又は特徴を含むことがあるが、いかなる実施形態も必ずしも特定の構成要件、構造又は特徴を含むこともあり、又は含まないこともあり得ることを示す。その上、そのような表現は、必ずしも同じ実施形態を指すものではない。さらに、特定の構成要件、構造、又は特徴が１実施形態に関連して説明されるとき、それは当業者の知識内で、明示的に説明されていようがなかろうが他の実施形態に関連してそのような構成要件、構造、又は特徴を生み出せると考える。加えて、「Ａ、Ｂ、及びＣのうちの少なくとも１つ」という形式におけるリストに含まれる項目は、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）又は（Ａ、Ｂ、及びＣ）を意味することができると理解されたい。同様に、「Ａ、Ｂ、又はＣのうちの少なくとも１つ」の形式においてリストされた項目は、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）又は（Ａ、Ｂ、及びＣ）を意味することができる。
【０００７】
開示される実施形態は、場合によっては、ハードウェア、ファームウェア、ソフトウェア、又はそれらの有形の具体化された組合せとして実装することができる。開示される実施形態は、１つ以上のプロセッサによって読み取り、実行することができる、１つ以上の非一時的機械読み取り可能（例えば、コンピュータ読み取り可能）記憶媒体によって搬送される命令、又は記憶媒体上に記憶される命令として実装することもできる。機械読み取り可能記憶媒体は、機械によって読み取り可能な形式で情報を記憶し、伝送するための任意の記憶デバイス、メカニズム、又は他の物理的構造として具体化することができる（例えば、揮発性又は不揮発性メモリ、媒体ディスク、又は他の媒体デバイス）。
【０００８】
図面において、いくつかの構造的特徴又は方法の特徴は、特定の構成及び／又は順番で示されることがある。しかしながら、そのような特定の構成及び／又は順序は、必ずしも必要ではない点を理解されたい。むしろ、いくつかの実施形態において、そのような構成要件は、例としての図面に示されたのと異なるやり方及び／又は順序で構成することができる。加えて、特定の図面における構造的構成要件又は方法構成要件の包含は、すべての実施形態においてそのような構成要件が必要であることを暗示するつもりはなく、いくつかの実施形態において、それらを含まないことができ又は他の構成要件と組み合わせることができる。
【０００９】
これから図１を参照して、例となる実施形態において、プロセッサオフローディング（例えば、ホストプロセッサからセンサハブへのタスク／データの移動）、オンローディング（例えばセンサハブからホストプロセッサへのタスク／データの移動）及びセンサマネジメントに関するシステム１００が示される。例となるシステム１００は、プロセッサ１０４及びセンサハブ１１０を含むコンピューティングデバイス１０２を含む。使用中は、プロセッサ１０４からセンサハブ１１０へのオフローディング動作をスケジュールし、及び／又は制御するためにセンサがバッチ処理及びデリバリするようなデバイス動作を、システム１００のコンピューティングデバイス１０２は、動的に学習するように動作する。フィードバックベースの構成を使用して、プロセッサロード時間シリーズ（processor  load  time  series）は、センサハブ１１０におけるセンサイベントの移動平均（moving  average）を使って計算することができる。プロセッサロードが所定のしきい値以下であると推定された場合、プロセッサ（例えば、プロセッサ１０４）からコプロセッサ（例えば、センサハブコプロセッサ１１２）へのオフロード処理に対してオフロード決定をすることができる。センサハブ１１０に対するプロセッサロードが、その後、所定のしきい値を超えたと推定された場合、コプロセッサ（例えば、センサハブコプロセッサ１１２）は、プロセッサ（例えば、プロセッサ１０４）にオフロードされるタスクを戻す（又は「オンロードする」）ことができる。双方向のアプリケーションプログラミングインタフェース（ＡＰＩ：application  programming  interface）は、オフロードリクエスト及び／又はオンロードリクエストをサポートするのを助けることができる。
【００１０】
本明細書で開示された例となる任意の技術を使用して、プロセッサ１０４からセンサハブ１１０への（及び逆もまた同様に）オフローディングは、センサイベント、センサイベントのバッチ処理、及びデリバリなどのセンサハブ機能に実質的に影響を及ぼすことなく、遂行することができる。センサマネジメントランタイムエンジンは、フィードバックベースのシステムにおいて、オフローディング決定（すなわち、プロセッサ１０４からセンサハブ１１０への）をするためにセンサハブ１１０のバッチ処理及びデリバリの動的リアルタイム学習を実行するように構成することができる。適切な時にオフロードを許可するためにアクティブなセンサハブ環境において、学習が生じ得る。単純なタスク移動（task  migration）（例えば、ロードバランシング、スケジューリング）と比較すると、機械学習決定（machine  learning  decisions）は、センサデータと使用量（usage）に基づいており、オンローディングタスク及びオフローディングタスクに対する双方向の能力をさらに許可する。例えば、タスクは、プロセッサ１０４からセンサハブ１１０へオフロードすることができ、プロセッサ１０４へセンサハブ１１０からオンロードで戻すことができ、その後、センサハブ１１０へ再びオフロードして戻すこともできる。  
【００１１】
開示した技術は、プロセッシング装置（processing  apparatus）（例えば、プロセッサ１０４）とコプロセッシング装置（coprocessing  apparatus）（例えば、センサハブコプロセッサ１１２）との間でのオフローディング決定及びオンローディング決定を効率的に判定するために活用することができる。オフローディング決定及びオンローディング決定は、スタンドアロンのプロセッシング装置（例えば、プロセッサ１０４）及びコプロセッシング装置（例えば、センサハブコプロセッサ１１２）上、又は、プロセッシング装置（例えば、プロセッサ１０４）及びコプロセッシング装置（例えば、センサハブコプロセッサ１１２）がネットワークに接続されている構成において、実行することができる。例えば、いくつかのアプリケーションサービス（例えば、グーグルプレイサービス）に対して、動的アルゴリズムオフロードは、リモートで提供され（例えば、リモートサーバから）、更新されたアルゴリズムは、ホストプロセッサ（例えば、プロセッサ１０４）からの関与が最小限から無いまでで、センサハブ１１０上で直接実行することができる。その結果、コンテキスト融合アルゴリズム（context  fusion  algorithms）などのデータは、ファームウェアの更新を必要とせずに更新することができる。それ故に、アプリケーションサービスアルゴリズムが更新された場合、コンピューティングデバイスアプリケーションがサービス中のアルゴリズムにアクセスする又はアルゴリズムを使うとき、アルゴリズムは、センサハブ１１０に動的にロードされなければならないことを示すコードを使用して、それは、（例えば、リモートサーバによって）マークが付けられるか又はタグ付することができる。例となる実施形態において、アプリケーションソースは、メイン又はオフロードのＪａｖａ（登録商標）コードを包含することができ、オフロードコードの検出時に、アプリケーション仮想マシン（例えば、Ｄａｌｖｉｋクラスローダ）は、本明細書で説明される技法のいずれかを使用してデータをオフロードすることができる。
【００１２】
図１のコンピューティングデバイス１０２は、本明細書に説明される機能を実行する能力がある計算又はコンピュータデバイスの任意のタイプとして具体化することができる。例えば、コンピューティングデバイス１０２は、制限されることなく、デスクトップコンピュータ、ラップトップコンピューティングデバイス、ホームオートメーションゲートウェイデバイス、サーバコンピュータ、プログラマブルロジックコントローラ、スマート電化製品、家電デバイス、ワイヤレスアクセスポイント、ネットワークスイッチ、ネットワークルータ、モバイルコンピューティングデバイス、モバイルフォン、スマートフォン、タブレットコンピューティングデバイス、パーソナルデジタルアシスタント、ウェアラブルコンピューティングデバイス、及び／又はスタンドアローンデバイスとして又はコンピュータネットワークを経由して、オフローディング／オンローディング能力を備えるように構成された他のタイプのコンピューティングデバイスとして具体化することができる。図１の例となる実施形態において、コンピューティングデバイス１０２は、プロセッサ１０４、Ｉ／Ｏサブシステム１０６、メモリ１１６，データ記憶デバイス１１８、及び通信回路１２０を含む。もちろん、コンピューティングデバイス１０２は、他の実施形態において、ラップトップコンピュータ（例えば、様々な入力／出力デバイス）で、通常見出されるような、別の又は追加のコンポーネントを含むことができる。追加として、いくつかの実施形態において、１つ以上の例となるコンポーネントは、他のコンポーネントに組み込まれ、又はそうでなければ他のコンポーネントの一部を形成することができる。例えば、メモリ１１６、又はその一部は、いくつかの実施形態において、プロセッサ１０４に組み込むことができる。
【００１３】
プロセッサ１０４は、本明細書で説明した機能を実行する能力がある任意のタイプのプロセッサとして具体化することができる。例えば、プロセッサ１０４は、シングル又はマルチコア・プロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、又は他のプロセッサ又は処理／制御回路として具体化することができる。同様に、メモリ１１６は、本明細書で説明する機能を実行する能力がある揮発性メモリ又は不揮発性メモリ又はデータ記憶装置の任意のタイプ又はいくつかとして具体化することができる。動作中、メモリ１１６は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバなどのコンピューティングデバイス１０２の動作の間使用される様々なデータ及びソフトウェアを記憶することができる。例となる実施形態において、メモリ１１６は、Ｉ／Ｏサブシステム１０６を経由してプロセッサ１０４に通信可能に接続され、Ｉ／Ｏサブシステム１０６は、プロセッサ１０４、メモリ１１６、及びコンピューティングデバイス１０２の他のコンポーネントと入力／出力動作を促進する回路及び／又はコンポーネントとして具体化することができる。例えば、Ｉ／Ｏサブシステム１０６は、メモリコントローラハブ、入力／出力コントローラハブ、ファームウェアデバイス、通信リンク（すなわち、ポイント・ツー・ポイントリンク、バスリンク、有線、ケーブル、光ガイド、プリント基板配線など）、及び／又は入力／出力動作を促進する他のコンポーネント及びシステムとして具体化されるか、又はそうではなくそれらを含むようにすることができる。いくつかの実施形態において、Ｉ／Ｏサブシステム１０６は、システム・オン・チップ（ＳｏＣ）の一部として形成することができ、及びプロセッサ１０４、センサハブ１１０、メモリ１１６、及びコンピューティングデバイス１０２の他のコンポーネント、単一の集積回路チップ上に組み込むことができる。
【００１４】
周辺デバイス１０８は、関連するグラフィックス回路と一緒にディスプレイを含むこともでき、いくつかの実施形態において、キーボード、マウス、オーディオ処理回路（例えば、増幅回路及び１つ以上のスピーカを含み）、及び／又は入力／出力デバイス、インタフェースデバイス、及び／又は周辺デバイスをさらに含むことができる。いくつかの実施形態において、メモリ１１６及び／又はデータ記憶装置１１８は、その中に記憶した１つ以上のアプリケーションプログラムを有し、プロセッサ１０４は、１つ以上のアプリケーションプログラムを実行し、対応する図形情報をディスプレイ上に表示するようにディスプレイスクリーンを制御するように動作可能である。もちろん、コンピューティングデバイス１０２は、他の実施形態において、デジタル装置及び／又はコンピュータにおいて通常見出されるような（例えば、様々な入力／出力デバイス）他の又は追加のコンポーネントを含むことができる。
【００１５】
コンピューティングデバイス１０２の通信回路１２０は、１つ以上の通信ネットワーク（例えば、ローカルエリアネットワーク、パーソナルエリアネットワーク、ワイドエリアネットワーク、セルラネットワーク、インターネットなどのグローバルネットワークなどの）を経由して、コンピューティングデバイス１０２と他のコンピューティングデバイスとの間の通信を可能にする能力のある任意のタイプの通信回路、デバイス、又はそれらの集合として具体化することができる。通信回路１２０は、任意の１つ以上の通信技術（例えば、ワイヤレス通信又は有線通信）及びそのような通信をもたらす関連するプロトコル（例えば、イーサネット（登録商標）、Ｗｉ−Ｆｉ（Ｒ）、ＷｉＭＡＸなど）を使用するように構成することができる。
【００１６】
コンピューティングデバイス１０２は、センサハブコプロセッサ１１２を含み、１つ以上のセンサ１１４を含み、又はそうでなければ１つ以上のセンサに接続されたセンサハブ１１０も含む。センサハブコプロセッサ１１２は、１つ以上の色々なセンサ１１４からのデータを総計し、処理することを助ける、マイクロプロセッサ、マイクロコントローラユニット、コプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）などとして具体化することができる。センサ１１４は、これらに限定されることなく、ジャイロスコープ、加速度計、グローバルポジショニングシステム（ＧＰＳ）レシーバ、気圧センサ、温度センサ、磁力計、タッチパネルインタフェース、赤外（ＩＲ）検出器などを含むことができる。センサ処理のためのセンサハブコプロセッサ１１２を使うことによって、プロセッサ１０４からセンサ関連タスクをオフロードをすることを助け、それ故にバッテリ消費を削減し、及び／又はパフォーマンスの改善を提供する。また、低電力コプロセッサ（例えば、センサハブコプロセッサ１１２）ハードウェアサポートを使うことによって、アプリケーションプロセッサ１０４は、センサハブコプロセッサ１１２がセンサ１１４のいずれかからセンサデータを収集し、フィルターし、そして処理するスリープ状態にとどまることができる。
【００１７】
コンピューティングデバイス１０２は、アプリケーション（例えば、メモリ１１６及び／又はデータ記憶デバイス１１８から実行されるアプリケーション）に物理センサ１１４が下部にあるコンピューティングデバイス１０２へのアクセス権を与えるように構成することができる。いくつかの例となる実施形態において、センサ１１４からのデータは、センサのハードウェア抽象化レイヤ（ＨＡＬ）（例えば、「ｓｅｎｓｏｒｓ．ｈ」又は同様のＡＰＩ定義によって定義される）の実装として定義されるデータ提供型仮想デバイスとして構成することができる。いくつかの例となる実施形態において、センサは、相互に接続されるか及び／又はトランスポートメカニズム（例えば、インターインテグレーテッドサーキット（Ｉ２Ｃ）又はシリアルペリフェラルインタフェース（ＳＰＩ）など）を経由してセンサハブ１１０中のセンサハブコプロセッサに接続され、センサデータの低電力モニタリング及び処理を可能とすることができる。消費電力削減のために、センサハブ１１０は、いくつかの最低限の処理が特定用途向け集積回路（ＡＳＩＣ）において各センサ１１４によって実行され、さらなる処理は、センサハブコプロセッサ１１２において実行されるような、階層的でも良い。センサ１１４の信号は、それらを直ちにレポートする代わりにＨＡＬを通してそれらをレポートする前にハードウェアＦＩＦＯにおいてセンサイベントを記憶するためにさらに「バッチ処理され（batched）」ても良い。バッチ処理は、センサからの各イベントを受信するためにプロセッサ１０４がウェークアップすることを防ぐことによって大幅な省電力を可能にする。その代わりに、イベントは、グループ化され（バッチ処理され）、一緒に処理することができる。
【００１８】
センサハブ１１０は、センサデータ（例えば、センサ１１４からの）又はセンサハブ１１０によるセンサデータから抽出されたデータを組合せて、センサハブ１１０を経由してセンサ１１４から受信するデータの正確性、信頼性、及び／又は完全性を向上させる。センサハブ１１０は、直接融合（direct  fusion）のために構成することができ、それは、異種の又は同種のセンサ、ソフトセンサ、及びセンサデータの過去の値のセットからセンサデータを融合する。センサハブ１１０は、間接融合（indirect  fusion）のために構成することもでき、それは環境や人間の入力についての演繹的知識のような情報源を使用する。
【００１９】
これから図２を参照して、例となる実施形態における、コンピューティングデバイス１０２は、動作の間、環境２００を確立する。例となる環境２００は、アプリケーションプロセッサ１０４（又は「ホストプロセッサ」）及びセンサハブコプロセッサ１１２によって確立されるモジュールを含む。図示したように、環境２００は、アプリケーションモジュール２０２，タスクスケジュールモジュール２１０、センサマネジメントモジュール２１２、センサプロファイリングモジュール２１４、及び機械学習モジュール２１６を含む。環境２００の様々なモジュールが、ハードウェア、ファームウェア、ソフトウェア、又はそれらの組合せとして具体化することができる。例えば、環境２００の様々なモジュール、ロジック、及び他のコンポーネントは、プロセッサ１０４、コプロセッサ１１２、又はコンピューティングデバイス１０２の他のハードウェアコンポーネントの一部を形成することができ、そうでなければそれらによって確立することができる。そのため、いくつかの実施形態において、環境２００の任意の１つ以上のモジュールは、電子デバイスの回路又は集合として具体化することができる（例えば、タスクスケジュール回路、センサマネジメント回路など）。
【００２０】
アプリケーションモジュール２０２は、アプリケーションプロセッサ１０４を使用して、アプリケーション仮想マシン（ＶＭ）及び１つ以上のアプリケーション２０６を実行するように構成される。アプリケーションＶＭ２０４（「プロセスＶＭ」又は「マネージドランタイム環境（ＭＲＥ）」としても知られる）は、下層のハードウェア又はオペレーティングシステムの詳細を抽象化し、プログラム（例えば、アプリケーション２０６から）が任意のプラットフォーム上で同じように実行することを許す、プラットフォーム非依存プログラミング環境を提供するように構成することができる。アプリケーションＶＭ２０４は、コンピューティングデバイス１０２のオペレーティングシステム（「ホストＯＳ」）内で通常のアプリケーションとして走るように構成することができ、１つ以上のプロセスをサポートすることもできる。いくつかの例となる実施形態において、アプリケーションＶＭ２０４は、高レベルプログラミング言語に類似する高レベルの抽象性を提供することができ、インタプリタを使用して実行することができる。ジャスト・イン・タイムコンパイラは、パフォーマンスを増加するために使用することができる。例となるアプリケーションＶＭ２０４は、これらに制限されないが、Ｄａｌｖｉｋ及びＤｅｘバイトコードが走るアンドロイドラインタイム（ＡＲＴ）及びそれらのコアジャバアプリケーションライブラリを含む。アプリケーション２０６は、アプリケーションフレームワーク内で実行できる（例えば、起動、処理、初期化など）ソフトウェアとして具体化することができる。アプリケーションモジュール２０２及び／又はアプリケーション仮想マシン２０４は、ミドルウェアを含むこともできる。いくつかの例となる実施形態において、ミドルウェアは、アプリケーション間メッセージングサービス、データ記憶、画面表示、マルチメディア、及びウェブブラウジングなどのサービスを提供するライブラリを含むことができる。ミドルウェアライブラリは、直ぐにサービスを実行できるように機械語にコンパイルすることもできる。
【００２１】
アプリケーションモジュール２０２は、１つ以上のオフロードされるタスクリクエストをセンサハブ１１０へ送信し、センサハブ１１０からオンロードタスクリクエストを受信するように構成することができる。オフロードされるタスクリクエスト（offloaded  task  request）は、コード、データ、又はセンサハブ１１０による処理タスクの実行に使用されうる他の情報を含むことができる。いくつかの実施形態において、アプリケーションモジュール２０２は、例えば、センサハブ１１０の利用可能性に基づいて追加のオフロードするタスクリクエストをサブミットするか否かを判断するなど、センサハブ１１０から受信するフィードバックに基づいて自身のタスクオフローディングビヘイビアを適応させることができる。アプリケーションモジュール２０２及び／又はアプリケーションＶＭ２０４は、センサハブ１１０が可能性があるセンサイベント及び／又はセンサイベントトリガを予期すると同時に、タスク又はコードをセンサハブ１１０にオフロードしない適切なレスポンスを提供することができる。アプリケーションＶＭ２０４は、センサハブ１１０の利用可能性及びプラットフォームＳ０ｉｘ状態（「アクティブアイドル（active  idle）」電力状態）遷移も検出し、それによって、センサイベントを見逃さないことを保証するためにアプリケーションＶＭ２０４が、センサハブ１１０タスク（「タスクレット（tasklets）」）をスケジュールし、上書きすることさえ許可することができる。
【００２２】
コプロセッサ１１２によって確立される、タスクスケジュールモジュール２１０は、アプリケーションプロセッサ１０４からオフロードされるタスクリクエストを受信するように構成される。以下で説明するように、オフロードされるタスクリクエストを受け入れると、タスクスケジュールモジュール２１０は、センサハブ１１０（例えば、コプロセッサ１１２）の処理リソースを使用して、オフロードされるタスクを実行するように構成することができる。いくつかの実施形態において、タスクスケジュールモジュール２１０は、オフロードされるタスクリクエストが受け入れられなかった場合、タスクオンロードリクエストをアプリケーションプロセッサ１０４に送信するように構成することができる。
【００２３】
コプロセッサ１１２によって確立されるセンサマネジメントモジュール２１２は、コンピューティングデバイス１０２のセンサ１１４と関連するセンサデータを受信するように構成される。コプロセッサ１１２によって確立されるセンサプロファイリングモジュール２１４は、センサデータに関連するセンサイベント及び／又はタイマイベントを検出するように構成される。センサプロファイリングモジュール２１４は、イベントに対するリソース使用コスト値を決定するように構成され、それは、イベントに関連する１つ以上のコールバック関数の処理に対するコプロセッサ使用値として具体化することができる。センサプロファイリングモジュール２１４は、イベントに関連する電力状態遷移コスト値を決定するようにさらに構成され、それは低電力状態からイベントを処理する動作状態にコンピューティングデバイス１０２の機能ブロックを遷移させることに関連するコストとして具体化することができる。
【００２４】
コプロセッサ１１２によって確立された、機械学習モジュール２１６は、イベントの頻度、イベントに関連するリソース使用コスト値、及びイベントに関連する電力状態遷移コスト値の関数として複数のイベントに関連する総コプロセッサロード値を決定するように構成される。総コプロセッサロード値（aggregate  coprocessor  load  value）は、例えば、指数移動平均として決定することができる。機械学習モジュール２１６は、オフロードされるタスクリクエストに関連するコプロセッサロード値を結合した総コプロセッサロード値に基づいてオフロードされるタスクリクエストを受け入れるか否かを判定するように構成される。いくつかの実施形態において、機械学習モジュール２１６は、イベントの主成分分析（ＰＣＡ）を実行し、ＰＣＡの計算に基づいて、コンピューティングデバイス１０２の使用パターンにおける変化が存在するか否かを判定する。機械学習モジュール２１６は、オフロードされるタスクリクエストが短期間のタスク又は長期間のタスクに関連しているか判定し、オフロードされるタスクが短期間又は長期間かに基づいてオフロードを受け入れるか否かの判定を調整する。これらの機能は、移動平均モジュール２１８又は主成分分析モジュール２２０などとして、１つ以上のサブモジュールによって実行することができる。
【００２５】
コプロセッサ１１２によって確立されるように説明されているが、ある実施形態において、各タスクスケジュールモジュール２１０、センサマネジメントモジュール２１２、センサプロファイリングモジュール２１４、及び／又は機械学習モジュール２１６の一部又は全部は、アプリケーションプロセッサ１０４によって確立することができることを理解されたい。例えば、いくつかの実施形態において、タスクスケジューリング及びイベントプロファイリングは、コプロセッサ１１２によって実行することができ、しかしながら、機械学習計算は、アプリケーションプロセッサ１０４によって実行することができる。
【００２６】
これから図３を参照して、使用中は、コンピューティングデバイス１０２は、総プロセッサ（例えば、コプロセッサ１１２）ワークロードに依存してセンサハブ１１０へのオフローディング動作を実行させるための方法３００を実行することができる。方法３００は、ブロック３０２で始まり、そこでコンピューティングデバイス１０２のセンサハブコプロセッサ１１２は、オフロードされるタスクリクエストがアプリケーションプロセッサ１０４から受信されたか否かを判定する。オフロードされるタスクリクエストが、アプリケーションプロセッサ１０４がセンサハブ１１０に実行するようにリクエストした１つ以上のタスク、例えば、タスクレット、センサ融合イベント、又は他のタスクなどを特定する。オフロードされるタスクリクエストが受信されなかった場合、方法３００は、ブロック３０２へ戻り、コプロセッサ１１２は、通常動作を続ける。オフロードされるタスクリクエストが受信された場合、又はタスクオフロードが、そうでなければ必要な場合、方法３００は、ブロック３０４へ進む。
【００２７】
ブロック３０４において、コプロセッサ１１２は、センサハブ１１０プロセッシング能力、現在のセンサの処理ワークロード、及び近未来のセンサ処理ワークロードに基づいて総ワークロード値（Ｌ）を決定する。総ワークロード値Ｌを計算する１つの方法が、図４と関連して下記で説明される。
【００２８】
ブロック３０４において総ワークロード値（Ｌ）を決定した後、方法３００は、ブロック３０６に進み、そこでコンピューティングデバイス１０２のコプロセッサ１１２は、プロセッサ１０４の総ワークロード値（Ｌ）が残存センサハブ１１０処理能力又はバンド幅未満であるか否かを判定する。例えば、オフロードされるタスクリクエストと関連するワークロード値（例えば、オフロードされるタスクに対する推定ワークロード値）と結合された総ワークロード値（Ｌ）は、所定のしきいワークロード値と比較することができる。例となる実施形態において、所定のしきいワークロード値は、コプロセッサ１１２のプロセッシングコアの数によって近似するか、又はそうでなければ決定することができる。総ワークロード値（Ｌ）（オフロードされるタスクリクエストに関連するワークロード値を含む）が残存センサハブ１１０処理能力未満の場合、方法３００は、ブロック３１０へ進み、そこで、アプリケーション（ホスト）プロセッサ１０４からセンサハブ１１０へのオフロードされるタスクリクエストが受け入れられ、オフロードされるタスクは、その後、実行される。タスクをオフロードした後で、方法３００は、ブロック３０２へ戻り、追加のオフロードされるタスクリクエストを処理する。
【００２９】
ブロック３０６に戻って参照し、総ワークロード値（L）が、残存センサハブ１１０の処理能力未満ではない場合、方法３００は、ブロック３０８へ進み、そこで、コプロセッサ１１２は、アプリケーションプロセッサ１０４にタスクをオンロードするリクエストをする。アプリケーションプロセッサ１０４は、オンロードタスクリクエストを受信することに応答してタスクを実行することができる。いくつかの実施形態にいて、アプリケーションプロセッサ１０４は、タスクをオンロードするリクエストを受信することに基づいて将来オフロードされるタスクリクエストを修正することができる。例えば、アプリケーションプロセッサ１０４によって実行されるマネージドランタイムは、センサハブ１１０の利用可能性を知り、又はそうでなければそれに適合し、そして、センサイベントを見逃さないように確認するためにオフロードされるタスクをスケジュールすることができる。タスクのオフローディングの後、方法３００は、ブロック３０２に戻り、追加のオフロードされるタスクリクエストを処理する。
【００３０】
これから図４を参照して、使用中は、コンピューティングデバイス１０２は、センサハブ１１０の総プロセッサワークロードを計算し、決定するために方法４００を実行することができる。例えば、上述の図３に説明された方法３００のブロック３０４に関連して、又は後述の図５に説明される方法５００に関連して、方法４００を実行することができる。方法４００は、ブロック４０２に始まり、そこで、コンピューティングデバイス１０２のコプロセッサ１１２は、センサハブ１１０によって受信されたセンサデータに関連するセンサイベント及び／又はタイマイベントを検出する。例えば、図３の例となる方法３００の目的のため、ｎ種類のセンサイベント又はタイマイベント（Ｓｉ）があると仮定することができる。いくつかの実施形態において、合成センサイベント（composite  sensor  event）（例えば、１つ以上のセンサから生成されるイベント又は他のセンサデータから由来するイベント）は、新しいイベントタイプとして扱うことができる。ブロック４０４において、コプロセッサ１１２は、センサ／タイマイベントの頻度を決定する。時間ｔの任意の単位時間での、センサ／タイマイベントの頻度がｆｉである。
【００３１】
ブロック４０６において、コプロセッサ１１２は、これらのイベントに関連する各コールバック関数の処理に関連するリソース使用コスト（resource  usage  cost）を決定する。例えば、コプロセッサ１１２は、コールバック関数によって使用されるコプロセッサ１１２サイクル又は他の実行リソースを決定することができる。各イベントＳに関連するリソース使用コストは、Ｌｉとして表現することができる。ブロック４０８において、コプロセッサ１１２は、プロセッサ（例えば、プロセッサ１０４及び／又はコプロセッサ１１２）における機能ブロック（例えば、ＩＰブロック）を低電力状態（例えば、Ｄ０ｉ３）から動作状態（例えば、Ｄ０ｉ０）に実行時で遷移させる電力状態に関連するコスト（Ｐｉ）を計算する。
【００３２】
ブロック４１０において、コプロセッサ１１２は、総プロセッサロード値Ｌを計算し、それは、下記のように表現される：
【数１】
0006689873.tif 000002
ここで、ｇｉ（ｔ）は、ｆｉ（ｔ）の指数移動平均として定義することができ、又は：
【数２】
0006689873.tif 000003
ここで、
【数３】
0006689873.tif 000004
ここで、Ｍは、平均を滑らかにするために使用される単位時間の期間を表す。Ｌを計算した後に、方法４００は終了する。結果として生じる総プロセッサロード値Ｌは、図３及び図５に関連して説明されるオフロードされるタスクリクエストを受け入れるか否かを判定するために使用することができる。
【００３３】
これから図５を参照して、使用中は、コンピューティングデバイス１０２は、総プロセッサ（例えば、コプロセッサ１１２）ワークロード及び主成分分析（ＰＣＡ）計算に依存してセンサハブ１１０に対するオフローディング動作を実行する方法５００を実行することができる。方法５００は、ブロック５０２に始まり、そこで、コンピューティングデバイス１０２のセンサハブコプロセッサ１１２は、オフロードされるタスクリクエストが、アプリケーションプロセッサ１０４から受信されたか否かを判定する。オフロードされるタスクリクエストは、アプリケーションプロセッサ１０４が、センサハブ１１０に実行するようにリクエストするタスクレット、センサ融合イベント、又は他のタスクなどの１つ以上のタスクを特定する。オフロードされるタスクリクエストが受信されなかった場合、方法５００は、ブロック５０２に戻り、コプロセッサ１１２は、通常動作を続ける。オフロードタスクリクエスト（offload  task  request）が受信され、又はタスクオフロードが別の方法で要求された場合、方法５００は、ブロック５０４へ進む。
【００３４】
ブロック５０４において、コプロセッサ１１２は、センサハブ１１０の処理能力、現在のセンサ処理、及び近未来のセンサ処理ワークロードに基づいて、総ワークロード値（Ｌ）を判定する。総ワークロード値Ｌを計算する１つの方法は、図４と関連して上述のとおりである。ブロック５０４において総ワークロード値（Ｌ）を決定した後、方法５００はブロック５０６へ進み、そこで、コプロセッサ１１２は、センサイベントデータ上で主成分分析（ＰＣＡ）を実行する。ＰＣＡの計算をすることは、コプロセッサ１１２が、コンピューティングデバイス１０２の使用パターンにおける変化に通常は関連するセンサイベントにおける「位相シフト（phase  shifts）」を検出することを許す。例えば、さらに以下で説明するように、ＰＣＡを計算することは、１つ以上のしきい値を超える固有値における変化を検出することができる。ＰＣＡを計算することは、センサデータ分析に特に適したロバストなデータを提供することができる。ＰＣＡを計算するための方法の１つの実施形態は、図６に関連して以下で説明される。もちろん、いくつかの実施形態において、コプロセッサ１１２は、センサハブ１１０に対するセンサ使用に関する確率モデルを計算する１つ以上の他の技術を使用することができ、プロセッサ１０４とセンサハブ１１０の間のタスク及び／又はデータのオンローディング及びオフローディングにおける予測又は判定を行う。
【００３５】
ブロック５０８において、コンピューティングデバイス１０２のコプロセッサ１１２は、オフロードされるタスクリクエストが短期間のリクエスト（short-term  request）に関連しているか否かを判定する。コプロセッサ１１２は、リクエストされたタスクが短期間のリクエストか否かを判定するために任意の適切な基準を使用することができる。例えば、コプロセッサ１１２は、所定の時間スケール（例えば、分、時、日など）に基づいてリクエストされたタスクが短期間か否かを判定することができる。リクエストが短期間のリクエスト（例えば、それが長期間のリクエストなど）でない場合、方法５００は、以下で説明するようにブロック５１２へ分岐する。リクエストが短期間のリクエストの場合、方法５００は、ブロック５１０へ分岐する。
【００３６】
ブロック５１０において、コプロセッサ１１２は、総ワークロード値（Ｌ）又は主成分分析の結果に基づいてリクエストされたタスクをオフロードすべきか否かを判定する。総ワークロード値（Ｌ）に基づく判定は、図３のブロック３０６に関連する上述の判定に似ていてもよい。例えば、コプロセッサ１１２は、総ワークロード値（Ｌ）が所定のしきい値より小さい場合又はＰＣＡ分析が使用パターンにおける変化がありそうではないことを示している場合、タスクをオフロードすることを決定することができる。コプロセッサ１１２がリクエストされたタスクをオフロードすると決定した場合、方法５００は、ブロック５１４へ分岐し、そこでは、アプリケーション（ホスト）プロセッサ１０４からセンサハブ１１０へのオフロードされるタスクリクエストが受け入れられ、オフロードされるタスクは、その後実行される。タスクのオフロード後、方法５００は、ブロック５０２に戻り、追加のオフロードされるタスクリクエストを処理する。
【００３７】
ブロック５１０へ戻って参照すると、コプロセッサ１１２が、タスクをオフロードしないと決定した場合、方法５００は、ブロック５１６へ分岐し、そこで、コプロセッサ１１２は、タスクをアプリケーションプロセッサ１０４へオンロードするようにリクエストする。アプリケーションプロセッサ１０４は、オンロードタスクリクエストの受信に応答してタスクを実行することができる。いくつかの実施形態において、アプリケーションプロセッサ１０４は、タスクをオンロードするリクエストの受信に基づいて将来のオフロードされるタスクリクエストを修正することができる。例えば、アプリケーションプロセッサ１０４によって実行されるマネージドランタイムは、センサハブ１１０の利用可能性を知ることができ、そうでなければセンサハブ１１０の利用可能性に適合することができ、センサイベントを見逃さないことを確認するためにオフロードされるタスクをスケジュールすることができる。タスクをオンロードした後、方法５００は、ブロック５０２へ戻り、追加のオフロードされるタスクリクエストを処理する。
【００３８】
ブロック５０８へ戻って参照すると、リクエストが短期間のリクエストではない場合（例えば、長期間のリクエスト）、方法５００は、ブロック５１２へ分岐する。ブロック５１２において、コプロセッサ１１２は、総ワークロード値（Ｌ）と主成分分析の結果に基づいて、リクエストされたタスクをオフロードするか否かを判定する。総ワークロード値（Ｌ）に基づく判定は、図３のブロック３０６に関連して上述の判定に類似してもよい。例えば、コプロセッサ１１２は、総ワークロード値（Ｌ）が所定のしきい値より小さい場合、及びＰＣＡ分析が使用パターンにおける変化がありそうでないことを示す場合に、タスクをオフロードすることを判定することができる。コプロセッサ１１２は、リクエストされたタスクをオフロードすると判定した場合、方法５００は、ブロック５１４へ分岐し、そこで、オフロードされるタスクリクエストが上述の通り受け入れる。コプロセッサ１１２が、タスクをオフロードしないと判定した場合、方法５００は、ブロック５１６へ分岐し、そこで、コプロセッサ１１２は、上述の通り、アプリケーションプロセッサ１０４へタスクをオフロードすることをリクエストする。
【００３９】
これから図６を参照して、使用中は、コンピューティングデバイス１０２は、主成分分析（ＰＣＡ）機械学習アルゴリズムを使用してタスクをオフロードするか否かを判定するために方法６００を実行することができる。ＰＣＡは、多分相関性のある変数の観測結果のセットを線形な非相関な変数のセット、又は「主成分（principal  components）」に変換する、直交変換を使用する統計的な技法である。ある例となる実施形態において、主成分の数は、オリジナルの変数の数より少ないか又は同じであり得る。ある例となる実施形態において、直交変換は、第１の主成分が、最も大きい可能性がある分散（variance）（すなわち、可能性のあるデータにおける大きな変動の主な要因である）を持ち、及び順に続く各成分が、その前の成分（すなわち、無関係な）と直交するという制限の下で可能性のある最も高い分散を持つように定義することができる。主成分は対称な共分散行列（covariance  matrix）の固有ベクトル（eigenvectors）であるので、主成分は、直交と見なされる。ある例となる実施形態において、ＰＣＡは、固有ベクトルベース多変量解析と同じように動作することができるので、ＰＣＡ処理は、最もよくデータの中の分散を説明するように集められたネットワークデータの内部構造を明らかにすることができる。多変量データセットが高次元のデータ領域における座標のセットとして提示される場合（例えば、変数毎に１軸など）、ＰＣＡは、より有益な情報を提供することができる、より低い次元のデータセットを持つネットワークを供給することができる。
【００４０】
方法６００は、上述のように、図５のブロック５０６と関連して実行することができる。方法６００は、ブロック６０２で始まり、そこで、コプロセッサ１１２は、センサ／タイマイベント及び関連するデータから興味のある特徴を抽出する。ブロック６０４において、コプロセッサ１１２は、抽出された特徴からベクトルを形成する。コプロセッサ１１２は、ある期間に対する抽出された特徴データを集め、次に、興味のある抽出されたセンサ特徴上で特徴アグリゲーション（feature  aggregation）を実行する。コプロセッサ１１２は、観測（observation）（又は「特徴（feature）」）ベクトルを生成することができる。ブロック６０４で、ベクトルを形成している間、センサ／タイマイベントに関連するプロセッサのロードは、ある次元のベクトルとして特徴付けることができる。
【００４１】
コプロセッサ１１２は、ブロック６０６で、センサ／タイマイベントに対する固有値平均プロセッサロードキー値のペアを生み出す。上述の通り、主成分分析（ＰＣＡ）は、可能性のある相関変数の観測結果のセットを線形な未修正の変数の値のセット（主成分）に変換するための統計的な手続きである。ＰＣＡを使って、コプロセッサ１１２は、観測ベクトルから主成分を計算し、ある次元にわたるベクトルの変化量を特徴付けることができる。いくつかの例となる実施形態において、平均プロセッサロードの主成分は、結果となる共分散行列の固有ベクトルであり得、オフローディングとオンローディングとの決定しきい値は、主成分からこのようにして計算することができる。プロセッサ１１２は、内部テーブルにおける固有値平均プロセッサロードキー値のペアに対するモデルエントリとして、各計算された固有値を記録し、保存するように構成することができる。新しいプロセッサロードデータが受信されると、それは、テーブル検索を通して検出される新しい固有値に関連し得る。コプロセッサ１１２（又はコンピューティングデバイス１０２の他の適切なコンポーネント）は、ブロック６０８においてセンサ／タイマイベントを検出し続け、そして、ブロック６１０で、ブロック６０６で決定された１つ以上のしきい値を超える固有値の変化を検出することができる。固有値における任意の変化を検出後、方法６００は、終了する。ＰＣＡ計算の結果は、図５に関連して説明されたオフロードされるタスクリクエストを受け入れるか否かを決定するために使用することができる。固有値における変化が１つ以上のしきい値を超えた場合、プロセッサ１０４からセンサハブ１１０へのデータ及び／又はタスクをオフロードするためのオフロード（又はオンロード）決定をすることができる。
【００４２】
実例
本明細書で開示された技術の説明に役立つ実例を以下で提供する。技術の実施形態は、以下で説明される実例の任意の１つ以上、及び任意の組合せを含むことができる。
【００４３】
実例１は、コプロセッサタスクオフローディングのためのコンピューティングデバイスを含み、コンピューティングデバイスのコプロセッサによって、コンピューティングデバイスの１つ以上のセンサに関連するセンサデータを受信する、センサマネジメントモジュールと、コプロセッサによって、センサデータに関連する複数のイベントを検出し、コプロセッサによって、イベントに関連するリソース使用コスト値及び電力状態遷移コスト値を決定する、センサプロファイリングモジュールと、コプロセッサによって、コンピューティングデバイスのアプリケーションプロセッサからオフロードされるタスクリクエストを受信する、タスクスケジュールモジュールと、イベントの頻度、イベントに関連するリソース使用コスト値、イベントに関連する電力状態遷移コスト値の関数として、複数のイベントに関連する総コプロセッサロード値を、コプロセッサによって決定し、総コプロセッサロード値とオフロードされるタスクリクエストに関連するコプロセッサロード値とに基づいて、オフロードされるタスクリクエストを受け入れるか否かをコプロセッサによって判定する、機械学習モジュールと、を備える。
【００４４】
実例２は、実例１の構成要件を含み、複数のイベントがセンサイベント又はタイマイベントを含む。
【００４５】
実例３は、実例１及び２のいずれかの構成要件を含み、リソース使用コスト値を決定することが、イベントに関連する１つ以上のコールバック関数の処理に対するコプロセッサ使用値を決定することを含む。
【００４６】
実例４は、実例１〜３のいずれかの構成要件を含み、電力状態遷移コスト値を決定することが、低電力状態からイベントを処理する動作状態へコンピューティングデバイスの機能ブロックを遷移させることに関連するコストを決定することを含む。
【００４７】
実例５は、実例１〜４のいずれかの構成要件を含み、総コプロセッサロード値を決定することが、イベントの頻度と、イベントに関連するリソース使用コスト値と、イベントに関連する電力状態遷移コスト値との関数として、指数移動平均を決定することを含む。
【００４８】
実例６は、実例１〜５のいずれかの構成要件を含み、タスクスケジュールモジュールが、オフロードされるタスクリクエストを受け入れないと判定することに応答して、コプロセッサによってタスクオンロードリクエストをアプリケーションプロセッサにさらに送信する。
【００４９】
実例７は、実例１〜６のいずれかの構成要件を含み、アプリケーションプロセッサによって、コプロセッサからのタスクオンロードリクエストの受信に基づいて、第２タスクオフロードリクエストをコプロセッサに送信するか否かを判定する。
【００５０】
実例８は、実例１〜７のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れるか否かを判定することが、コプロセッサの残存処理能力に基づいてオフロードされるタスクリクエストを受け入れるか否かを判定することを含む。
【００５１】
実例９は、実例１〜８のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れるか否かを判定することが、総コプロセッサロード値とオフロードされるタスクリクエストに関連するコプロセッサロード値とを所定のしきいコプロセッサロード値と比較することを含む。
【００５２】
実例１０は、実例１〜９のいずれかの構成要件を含み、所定のしきいコプロセッサロード値が、コプロセッサのプロセッサコアの数に基づいている。
【００５３】
実例１１は、実例１〜１０のいずれかの構成要件を含み、機械学習モジュールが、複数のイベントの主成分分析を実行し、主成分分析に基づいて、コンピューティングデバイスの使用パターンにおける変化が存在するか否かを判定し、オフロードされるタスクリクエストを受け入れるか否かを判定することが、コンピューティングデバイスの使用パターンにおける変化が存在するか否かの判定の関数として、オフロードされるタスクリクエストを受け入れるか否かを決定することをさらに含む。
【００５４】
実例１２は、実例１〜１１のいずれかの構成要件を含み、機械学習モジュールは、オフロードされるタスクリクエストが短期間のタスクに関連しているか否かをコプロセッサによって判定し、オフロードされるタスクリクエストを受け入れるか否かを判定することは、オフロードされるタスクリクエストが、短期間のタスクに関連しているか否かの判定の関数として、オフロードされるタスクリクエストを受け入れるか否かを判定することをさらに含む。
【００５５】
実例１３は、実例１〜１２のいずれかの構成要件を含み、オフロードされるタスクリクエストが短期間のタスクに関連しているという判定に応答して、オフロードされるタスクを受け入れるか否かを判定することは、（ｉ）総コプロセッサロード値の判定又は（ｉｉ）コンピューティングデバイスの使用パターンにおける変化の存在の判定に基づいて、タスクを受け入れるか否かを判定することを含み、オフロードされるタスクリクエストが短期間のタスクに関連していないという判定に応答して、オフロードされるタスクを受け入れるか否かの判定は、（ｉ）総コプロセッサロード値の判定及び（ｉｉ）コンピューティングデバイスの使用パターンにおける変化の存在の判定に基づいて、タスクを受け入れるか否かを判定することを含む。
【００５６】
実例１４は、コプロセッサタスクオフローディングのための方法を含み、方法は、コンピューティングデバイスの１つ以上のセンサに関連するセンサデータを、コンピューティングデバイスのコプロセッサによって、受信することと、センサデータに関連する複数のイベントを、コプロセッサによって検出することと、イベントに関連するリソース使用コスト値と電力状態遷移コスト値を、コプロセッサによって決定することと、コンピューティングデバイスのアプリケーションプロセッサからオフロードされるタスクリクエストを、コプロセッサによって、受信することと、イベントの頻度と、イベントに関連するリソース使用コスト値と、イベントに関連する電力状態遷移コスト値との関数として、複数のイベントに関連する総コプロセッサロード値を、コプロセッサによって決定することと、総コプロセッサロード値とオフロードされるタスクリクエストに関連するコプロセッサロード値とに基づいてオフロードされるタスクリクエストを受け入れるか否かを、コプロセッサによって、判定することと、を含む。
【００５７】
実例１５は、実例１４の構成要件を含み、複数のイベントを検出することが、センサイベント又はタイマイベントを検出することを含む。
【００５８】
実例１６は、実例１４及び１５のいずれかの構成要件を含み、リソース使用コスト値を決定することが、イベントに関連する１つ以上のコールバック機能を処理するためのコプロセッサ使用値を決定することを含む。
【００５９】
実例１７は、実例１４〜１６のいずれかの構成要件を含み、電力状態遷移コスト値を決定することが、低電力状態からイベントを処理する動作状態へコンピューティングデバイスの機能ブロックを遷移させることに関連するコストを決定することを含む。
【００６０】
実例１８は、実例１４〜１７のいずれかの構成要件を含み、総コプロセッサロード値を判定することが、イベントの頻度と、イベントに関連するリソース使用コスト値と、イベントに関連する電力状態遷移コスト値との関数として、指数移動平均を決定することを含む。
【００６１】
実例１９は、実例１４〜１８のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れないと判定することに応答して、コプロセッサによって、タスクオンロードリクエストをアプリケーションプロセッサに送信することを、さらに含む。
【００６２】
実例２０は、実例１４〜１９のいずれかの構成要件を含み、コプロセッサからタスクオンロードリクエストの受信に基づいて第２タスクオフロードリクエストをコプロセッサに送信するか否かを、アプリケーションプロセッサによって、判定することをさらに含む。
【００６３】
実例２１は、実例１４〜２０のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れるか否かを判定することが、コプロセッサの残存処理能力に基づいてオフロードされるタスクリクエストを受け入れるか否かを判定することを含む。
【００６４】
実例２２は、実例１４〜２１のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れるか否かを判定することが、総コプロセッサロード値とオフロードされるタスクリクエストに関連するコプロセッサロード値とを所定のしきいコプロセッサロード値と比較することを含む。
【００６５】
実例２３は、実例１４〜２２のいずれかの構成要件を含み、所定のしきいコプロセッサロード値がコプロセッサのプロセッサコアの数に基づく。
【００６６】
実例２４は、実例１４〜２３のいずれかの構成要件を含み、複数のイベントの主成分分析をコプロセッサによって実行することと、主成分分析に基づいて、コンピューティングデバイスの使用パターンにおける変化が存在するか否かをコプロセッサによって判定することと、オフロードされるタスクリクエストを受け入れるか否かを判定することが、コンピューティングデバイスの使用パターンにおける変化が存在するか否かの判定の関数として、オフロードされるタスクリクエストを受けるか否かを判定することをさらに含む。
【００６７】
実例２５は、実例１４〜２４のいずれかの構成要件を含み、オフロードされるタスクリクエストが短期間のタスクに関連しているか否かを、コプロセッサによって判定することをさらに含み、オフロードされるタスクリクエストを受け入れるか否かを判定することが、オフロードされるタスクリクエストが短期間のタスクに関連しているか否かの判定の関数として、オフロードされるタスクリクエストを受け入れるか否かを判定することをさらに含む。
【００６８】
実例２６は、実例１４〜２５のいずれかの構成要件を含み、オフロードされるタスクリクエストが短期間のタスクに関連しているかの判定に応答して、オフロードされるタスクを受け入れるか否かを判定することは、（ｉ）総コプロセッサロード値の判定又は（ｉｉ）コンピューティングデバイスの使用パターンにおける変化の存在の判定に基づいて、タスクを受け入れるか否かを判定することを含み、オフロードされるタスクリクエストが短期間のタスクに関連していないという判定に応答して、オフロードされるタスクを受け入れるか否かの判定は、（ｉ）総コプロセッサロード値の判定と（ｉｉ）コンピューティングデバイスの使用パターンにおける変化の存在の判定に基づいて、タスクを受け入れるか否かを判定することを含む。
【００６９】
実例２７は、プロセッサと、プロセッサによって実行されたときに、コンピューティングデバイスに実例１４〜２６のいずれかの方法を実行させる、複数の命令をその中に記憶するメモリと、を備えるコンピューティングデバイスを含む。
【００７０】
実例２８は、実行されたことに応答して、コンピューティングデバイスに実例１４〜２６のいずれかの方法を実行させる、その上に記憶された複数の命令を含む、１つ以上の機械読み取り可能記憶媒体を含む。
【００７１】
実例２９は、実例１４〜２６のいずれかの方法を実行するための手段を含む、コンピューティングデバイスを含む。
【００７２】
実例３０は、コプロセッサタスクオフローディングのためのコンピューティングデバイスを含み、コンピューティングデバイスは、コンピューティングデバイスの１つ以上のセンサに関連するセンサデータを、コンピューティングデバイスのコプロセッサによって、受信する手段と、センサデータに関連する複数のイベントを、コプロセッサによって検出する手段と、イベントに関連するリソース使用コスト値と電力状態遷移コスト値を、コプロセッサによって決定する手段と、コンピューティングデバイスのアプリケーションプロセッサからオフロードされるタスクリクエストを、コプロセッサによって、受信する手段と、イベントの頻度と、イベントに関連するリソース使用コスト値と、イベントに関連する電力状態遷移コスト値との関数として、複数のイベントに関連する総コプロセッサロード値を、コプロセッサによって決定する手段と、総コプロセッサロード値とオフロードされるタスクリクエストに関連するコプロセッサロード値とに基づいてオフロードされるタスクリクエストを受け入れるか否かを、コプロセッサによって、判定する手段と、を含む。
【００７３】
実例３１は、実例３０の構成要件を含み、複数のイベントを検出する手段が、センサイベント又はタイマイベントを検出する手段を含む。
【００７４】
実例３２は、実例３０及び３１のいずれかの構成要件を含み、リソース使用コスト値を判定する手段が、イベントに関連する１つ以上のコールバック機能を処理するためのコプロセッサ使用値を判定する手段を含む。
【００７５】
実例３３は、実例３０〜３２のいずれかの構成要件を含み、電力状態遷移コスト値を判定する手段が、コンピューティングデバイスの機能ブロックを低電力状態からイベントを処理する動作状態へ遷移させることに関連するコストを判定する手段を含む。
【００７６】
実例３４は、実例３０〜３３のいずれかの構成要件を含み、総コプロセッサロード値を判定する手段が、イベントの頻度と、イベントに関連するリソース使用コスト値と、イベントに関連する電力状態遷移コスト値との関数として指数移動平均を判定する手段を含む。
【００７７】
実例３５は、実例３０〜３４のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れないと判定したことに応答して、コプロセッサによってタスクオンロードリクエストをアプリケーションプロセッサに送信する手段をさらに含む。
【００７８】
実例３６は、実例３０〜３５のいずれかの構成要件を含み、コプロセッサからのタスクオンロードリクエストの受信に基づいて、コプロセッサに第２タスクオフロードリクエストを送信するか否かをアプリケーションプロセッサによって判定する手段をさらに含む。
【００７９】
実例３７は、実例３０〜３６のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れるか否かを判定する手段が、コプロセッサの残存処理能力に基づいてオフロードされるタスクリクエストを受け入れるか否かを判定する手段を含む。
【００８０】
実例３８は、実例３０〜３７のいずれかの構成要件を含み、オフロードされるタスクリクエストを受け入れるか否かを判定する手段が、総コプロセッサロード値とオフロードされるタスクリクエストに関連するコプロセッサロード値とを、所定のしきいコプロセッサロード値と比較する手段を備える。
【００８１】
実例３９は、実例３０〜３８のいずれかの構成要件を含み、所定のしきいコプロセッサロード値はコプロセッサのプロセッサコアの数に基づく。
【００８２】
実例４０は、実例３０〜３９のいずれかの構成要件を含み、複数のイベントの主成分分析の実行をコプロセッサによって実行する手段と、主成分分析に基づいて、コンピューティングデバイスの使用パターンにおける変化が存在するか否かをコプロセッサによって判定する手段と、オフロードされるタスクリクエストを受け入れるか否かを判定する手段が、コンピューティングデバイスの使用パターンにおける変化が存在するか否かの判定の関数として、オフロードされるタスクリクエストを受け入れるか否かを決定する手段をさらに含む。
【００８３】
実例４１は、実例３０〜４０のいずれかの構成要件を含み、オフロードされるタスクリクエストが短期間のタスクに関連しているか否かをコプロセッサによって判定する手段を含み、オフロードされるタスクリクエストを受け入れるか否かを判定する手段は、オフロードされるタスクリクエストが、短期間のタスクに関連しているか否かの判定の関数として、オフロードされるタスクリクエストを受け入れるか否かを判定する手段をさらに含む。
【００８４】
実例４２は、実例３０〜４１のいずれかの構成要件を含み、オフロードされるタスクリクエストが短期間のタスクに関連しているという判定に応答して、オフロードされるタスクを受け入れるか否かを判定する手段は、（ｉ）総コプロセッサロード値の判定又は（ｉｉ）コンピューティングデバイスの使用パターンにおける変化の存在の判定に基づいて、タスクを受け入れるか否かを判定する手段を含み、オフロードされるタスクリクエストが短期間のタスクに関連していないという判定に応答して、オフロードされるタスクを受け入れるか否かの判定は、（ｉ）総コプロセッサロード値の判定及び（ｉｉ）コンピューティングデバイスの使用パターンにおける変化の存在の判定に基づいて、タスクを受け入れるか否かを判定する手段を含む。
【図１】
0006689873.tif 000005
【図２】
0006689873.tif 000006
【図３】
0006689873.tif 000007
【図４】
0006689873.tif 000008
【図５】
0006689873.tif 000009
【図６】
0006689873.tif 000010