(57)【要約】  機械学習を使用して、アプリケーションおよび/またはアプリケーションと関連付けられる複雑なアルゴリズムを動的に構成するための、コンピューティングデバイスのための方法、デバイス、システム、および非一時的プロセッサ可読記憶媒体。コンピューティングデバイスのプロセッサによって実行されるある態様の方法は、複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行し、アプリケーションの性能に対するユーザの応答を示す信号を取得し、ユーザの応答を示す取得された信号に基づいてユーザがアプリケーションの性能に寛容であるかどうかを決定し、ユーザがアプリケーションの性能に寛容ではないとの決定に応答してアプリケーションのその後の性能を改善するようにアプリケーションの構成を調整し、アプリケーションの性能に対するユーザの応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するための動作を含み得る。
2018504676.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上で実行されるアプリケーションと関連付けられる複雑なアルゴリズムを動的に構成するための方法であって、
前記コンピューティングデバイスのプロセッサを介して、複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するステップと、
前記プロセッサを介して、前記アプリケーションの性能に対するユーザ応答を示す信号を取得するステップと、
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するステップと、
前記プロセッサを介して、前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するステップとを備える、方法。
【請求項２】
前記アプリケーションの前記性能が、結果を得るための実行速度、前記結果の正確度、および前記結果の精度のうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項３】
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を下げるように、前記ライブラリ関数の前記構成を調整するステップをさらに備える、請求項1に記載の方法。
【請求項４】
前記ユーザ応答を示す前記取得される信号が、タッチスクリーン上でのタッチ入力、ボタンの押下、センサからのデータ、別のアプリケーションの起動、前記アプリケーションの状態の変化、およびユーザ応答が予想されるときにユーザ入力がないことのうちの1つまたは複数である、請求項1に記載の方法。
【請求項５】
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するステップが、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの出力を前記ユーザが無視したかどうかを決定するステップ、および、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの前記出力を前記ユーザが訂正したかどうかを決定するステップのうちの1つまたは複数を備える、請求項1に記載の方法。
【請求項６】
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するステップが、
前記プロセッサを介して、前記取得された信号に基づいて、前記ユーザが前記アプリケーションから離れて操作しているかどうかを決定するステップ、および、
前記プロセッサを介して、前記取得された信号に基づいて、前記ユーザがリフレッシュ機能性を使ったかどうか、または他のボタンを繰り返し押したかどうかを決定するステップのうちの1つまたは複数を備える、請求項1に記載の方法。
【請求項７】
前記取得された信号に基づいた前記ユーザが前記アプリケーションから離れて操作しているという決定に応答して、前記プロセッサを介して、前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するステップをさらに備える、請求項6に記載の方法。
【請求項８】
前記ユーザが前記アプリケーションに戻って操作しているとの決定に応答して、前記プロセッサを介して、事前に定められた閾値の時間内に前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するステップをさらに備える、請求項7に記載の方法。
【請求項９】
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を改善するように、前記アプリケーションの前記構成を調整するステップが、
前記プロセッサを介して、精度の設定を上げるステップ、
前記プロセッサを介して、実行速度の設定を上げるステップ、および、
前記プロセッサを介して、実行コアの設定を変更するステップのうちの1つまたは複数を備える、請求項1に記載の方法。
【請求項１０】
前記プロセッサを介して、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して前記アプリケーションの前記その後の性能を改善するように前記アプリケーションの前記構成を調整するステップが、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記ライブラリ関数を使用するための前記アプリケーションの前記構成を調整するステップを備える、請求項1に記載の方法。
【請求項１１】
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を下げるように、前記アプリケーションの前記構成を調整するステップをさらに備える、請求項1に記載の方法。
【請求項１２】
前記アプリケーションが複数のライブラリ関数を呼び出し、前記ライブラリ関数が前記複数のライブラリ関数内にあり、前記方法が、
前記プロセッサを介して、前記複数のライブラリ関数のうちの第1のライブラリ関数を選択するステップと、
前記ユーザ応答を示す前記取得された信号に基づいた前記ユーザが前記アプリケーションの前記性能に寛容ではないという決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を改善するように、前記第1のライブラリ関数の構成を調整するステップと、
前記プロセッサを介して、前記アプリケーションを続いて実行するステップと、
前記プロセッサを介して、前記アプリケーションの前記その後の性能に対するその後のユーザ応答を示す後続の信号を取得するステップと、
前記ユーザが前記アプリケーションの前記その後の性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記複数のライブラリ関数のうちの第2のライブラリ関数を選択するステップと、
前記プロセッサを介して、前記第2のライブラリ関数の構成を調整するステップとをさらに備える、請求項1に記載の方法。
【請求項１３】
前記コンピューティングデバイスの前記プロセッサを介して、前記アプリケーションに対する複数のトレードオフ設定を取得するステップと、
前記プロセッサを介して、初期時間における前記コンピューティングデバイスと関連付けられる条件を評価するステップと、
前記プロセッサを介して、前記初期時間における前記コンピューティングデバイスと関連付けられる前記評価された条件に基づいて、前記取得された複数のトレードオフ設定のうちのトレードオフ設定が利用されるべきかどうかを決定するステップとをさらに備える、請求項1に記載の方法。
【請求項１４】
前記初期時間における前記コンピューティングデバイスと関連付けられる前記評価された条件に基づいた前記トレードオフ設定が利用されるべきであるという決定に応答して、前記プロセッサを介して、前記トレードオフ設定に基づいて前記アプリケーションの初期構成を調整するステップをさらに備える、請求項13に記載の方法。
【請求項１５】
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を改善するように前記アプリケーションの前記構成を調整するステップが、前記初期構成を使用した前記アプリケーションの前記性能に前記ユーザが寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記初期構成を上書きするステップを備える、請求項14に記載の方法。
【請求項１６】
前記コンピューティングデバイスの前記プロセッサを介して、前記アプリケーションに対する前記複数のトレードオフ設定を取得するステップが、
前記プロセッサを介して、前記アプリケーションのランタイムの間にアプリケーションプログラミングインターフェース(API)呼出しを介して前記アプリケーションに対する第1のトレードオフ設定を取得するステップ、
前記プロセッサを介して、コード中のディレクティブを介して前記アプリケーションに対する第2のトレードオフ設定を取得するステップ、および、
前記プロセッサを介して、専用レジスタを介して前記アプリケーションに対する第3のトレードオフ設定を取得するステップのうちの少なくとも1つを備える、請求項13に記載の方法。
【請求項１７】
前記プロセッサを介して、前記初期時間における前記コンピューティングデバイスと関連付けられる条件を評価するステップが、
前記プロセッサによって、前記アプリケーションの作業負荷を評価するステップ、および、
前記プロセッサによって、前記コンピューティングデバイスによる前記アプリケーションの処理に影響する外部条件を評価するステップのうちの少なくとも1つを備える、請求項13に記載の方法。
【請求項１８】
動作を実行するためのプロセッサ実行可能命令によって構成されたプロセッサを備えるコンピューティングデバイスであって、前記動作が、
複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するステップと、
前記アプリケーションの性能に対するユーザ応答を示す信号を取得するステップと、
前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するステップと、
前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するステップとを備える、コンピューティングデバイス。
【請求項１９】
前記プロセッサが、
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記アプリケーションの前記その後の性能を下げるように、前記ライブラリ関数の前記構成を調整するステップをさらに備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２０】
前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するステップが、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの出力を前記ユーザが無視したかどうかを決定するステップ、および、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの前記出力を前記ユーザが訂正したかどうかを決定するステップのうちの1つまたは複数を備えるように動作を実行するように、前記プロセッサがプロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２１】
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するステップが、
前記取得された信号に基づいて、前記ユーザが前記アプリケーションから離れて操作しているかどうかを決定するステップ、および、
前記取得された信号に基づいて、前記ユーザがリフレッシュ機能性を使ったかどうか、または他のボタンを繰り返し押したかどうかを決定するステップのうちの1つまたは複数を備えるように動作を実行するように、前記プロセッサがプロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２２】
前記プロセッサが、
前記取得された信号に基づいた前記ユーザが前記アプリケーションから離れて操作しているという決定に応答して、前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するステップをさらに備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項21に記載のコンピューティングデバイス。
【請求項２３】
前記プロセッサが、
前記ユーザが前記アプリケーションに戻って操作しているとの決定に応答して、事前に定められた閾値の時間内に前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するステップをさらに備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項22に記載のコンピューティングデバイス。
【請求項２４】
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションの前記その後の性能を改善するように、前記アプリケーションの前記構成を調整するステップが、
精度の設定を上げるステップ、
実行速度の設定を上げるステップ、および、
実行コアの設定を変更するステップのうちの1つまたは複数を備えるように動作を実行するように、前記プロセッサがプロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２５】
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して前記アプリケーションの前記その後の性能を改善するように前記アプリケーションの前記構成を調整するステップが、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記ライブラリ関数を使用するための前記アプリケーションの前記構成を調整するステップを備えるように動作を実行するように、前記プロセッサがプロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２６】
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記アプリケーションの前記その後の性能を下げるように、前記アプリケーションの前記構成を調整するステップをさらに備える動作を実行するように、前記プロセッサがプロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２７】
前記アプリケーションが複数のライブラリ関数を呼び出すように動作を実行するように前記プロセッサがプロセッサ実行可能命令によって構成され、前記ライブラリ関数が前記複数のライブラリ関数内にあり、前記プロセッサが、
前記複数のライブラリ関数のうちの第1のライブラリ関数を選択するステップと、
前記ユーザ応答を示す前記取得された信号に基づいた前記ユーザが前記アプリケーションの前記性能に寛容ではないという決定に応答して、前記アプリケーションの前記その後の性能を改善するように、前記第1のライブラリ関数の構成を調整するステップと、
前記アプリケーションを続けて実行するステップと、
前記アプリケーションの前記その後の性能に対するその後のユーザ応答を示す後続の信号を取得するステップと、
前記ユーザが前記アプリケーションの前記その後の性能に寛容ではないとの決定に応答して、前記複数のライブラリ関数のうちの第2のライブラリ関数を選択するステップと、
前記第2のライブラリ関数の構成を調整するステップとをさらに備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２８】
前記プロセッサが、
前記アプリケーションに対する複数のトレードオフ設定を取得するステップと、
初期時間における前記コンピューティングデバイスと関連付けられる条件を評価するステップと、
前記初期時間における前記コンピューティングデバイスと関連付けられる前記評価された条件に基づいて、前記取得された複数のトレードオフ設定のうちのあるトレードオフ設定が利用されるべきかどうかを決定するステップとをさらに備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項18に記載のコンピューティングデバイス。
【請求項２９】
複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するための手段と、
前記アプリケーションの性能に対するユーザ応答を示す信号を取得するための手段と、
前記ユーザ応答を示す取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するための手段と、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するための手段と、
前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するための手段とを備える、コンピューティングデバイス。
【請求項３０】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記動作が、
複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するステップと、
前記アプリケーションの性能に対するユーザ応答を示す信号を取得するステップと、
前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するステップと、
前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するステップとを備える、非一時的プロセッサ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、2014年12月12日に出願された「Application Characterization for Machine Learning on Heterogeneous Core Devices」という表題の米国仮出願第62/091,290号、ならびに2014年12月12日に出願された「Architecture for Improving Dynamic Execution of Complex Algorithms」という表題の米国仮出願第62/091,132号の優先権の利益を主張し、これらの仮出願の両方の内容全体が参照により本明細書に組み込まれる。
【背景技術】
【０００２】
多くのユーザデバイスのアプリケーションが、複雑なアルゴリズムの集合体(計算カーネルとしても知られている)を利用することがある。たとえば、ソーシャルメディアアプリケーションは、線形システムを解き、行列乗算を行い、固有値分解を実行するなどするライブラリを呼び出すように構成されることがある。そのような複雑なアルゴリズムは通常、大量のコンピューティングリソースを必要とするので、最高の実行速度および/または精度の設定にて実行されるときに、バッテリーの電力に大きく影響を与えることがあり、または別様にコンピューティングシステムのリソースに負荷を与えることがある。しかしながら、ユーザは、デバイス上で実行されるアプリケーションによる複雑なアルゴリズムの最適な性能(たとえば、速度、正確度、精度)を常に必要とするとは限らない。たとえば、ユーザは、ソーシャルメディアアプリケーションにおける分類アルゴリズムの結果を受け取るための緩い期限について、ソーシャルメディアアプリケーションにおける他の活動(たとえば、アップロード、コメント、整理など)に関わっているときには寛容であり得る。別の例として、ソーシャルメディアサイトへアップロードするために写真が撮影されるとき、ユーザは、その写真とともに状況を書いていることがあるので、顔検出の複雑なアルゴリズムの遅延を気にしないことがある。
【発明の概要】
【課題を解決するための手段】
【０００３】
様々な態様は、コンピューティングデバイス上で実行されるアプリケーションと関連付けられる複雑なアルゴリズムを動的に構成するための、方法、デバイス、システム、および非一時的プロセッサ可読記憶媒体を提供する。コンピューティングデバイスのプロセッサによって実行されるある態様の方法は、複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行し、アプリケーションの性能に対するユーザ応答を示す信号を取得し、ユーザ応答を示す取得された信号に基づいてユーザがアプリケーションの性能に寛容であるかどうかを決定し、ユーザがアプリケーションの性能に寛容ではないとの決定に応答してアプリケーションのその後の性能を改善するようにアプリケーションの構成を調整し、アプリケーションの性能に対するユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するための動作を含み得る。いくつかの態様では、アプリケーションの性能は、結果を得るための実行速度、結果の正確度、および結果の精度のうちの少なくとも1つを含む。いくつかの態様では、方法はさらに、ユーザがアプリケーションの性能に寛容であるとの決定に応答して、アプリケーションのその後の性能を下げるように、ライブラリ関数の構成を調整するステップを含み得る。
【０００４】
いくつかの態様では、ユーザ応答を示す取得される信号は、タッチスクリーン上でのタッチ入力、ボタンの押下、センサからのデータ、別のアプリケーションの起動、アプリケーションの状態の変化、およびユーザ応答が予想されるときにユーザ入力がないことのうちの1つまたは複数である。いくつかの態様では、ユーザ応答を示す取得された信号に基づいてユーザがアプリケーションの性能に寛容であるかどうかを決定するステップは、取得された信号に基づいてユーザがそのアプリケーションの出力を無視したかどうかを決定するステップ、および取得された信号に基づいてユーザがそのアプリケーションの出力を訂正したかどうかを決定するステップのうちの1つまたは複数を含み得る。いくつかの態様では、ユーザ応答を示す取得された信号に基づいてユーザがアプリケーションの性能に寛容であるかどうかを決定するステップは、取得された信号に基づいてユーザがそのアプリケーションから離れて操作しているかどうかを決定するステップ、および取得された信号に基づいてユーザがリフレッシュ機能を使ったかどうか、または他のボタンを繰り返し押したかどうかを決定するステップのうちの1つまたは複数を含み得る。
【０００５】
いくつかの態様では、方法はさらに、取得された信号に基づいたユーザがそのアプリケーションから離れて操作しているという決定に応答して、ユーザがそのアプリケーションに戻って操作しているかどうかを決定するステップを含み得る。いくつかの態様では、方法はさらに、ユーザがそのアプリケーションに戻って操作しているとの決定に応答して、事前に定められた閾値の時間内にユーザがそのアプリケーションに戻って操作しているかどうかを決定するステップを含み得る。いくつかの態様では、ユーザがアプリケーションの性能に寛容ではないとの決定に応答してそのアプリケーションのその後の性能を改善するようにアプリケーションの構成を調整するステップは、精度の設定を上げるステップ、実行速度の設定を上げるステップ、および実行コアの設定を変更するステップのうちの1つまたは複数を含み得る。
【０００６】
いくつかの態様では、ユーザがアプリケーションの性能に寛容ではないとの決定に応答してそのアプリケーションのその後の性能を改善するようにアプリケーションの構成を調整するステップは、ユーザがアプリケーションの性能に寛容ではないとの決定に応答して、ライブラリ関数を使用するためのアプリケーションの構成を調整するステップを含み得る。いくつかの態様では、方法はさらに、ユーザがアプリケーションの性能に寛容ではないとの決定に応答して、アプリケーションのその後の性能を下げるように、アプリケーションの構成を調整するステップを含み得る。いくつかの態様では、アプリケーションは複数のライブラリ関数を呼び出すことがあり、上記のライブラリ関数はその複数のライブラリ関数内にあることがあり、方法はさらに、複数のライブラリ関数のうちの第1のライブラリ関数を選択するステップと、ユーザ応答を示す取得された信号に基づいてユーザがアプリケーションの性能に寛容ではないとの決定に応答して、アプリケーションのその後の性能を改善するように第1のライブラリ関数の構成を調整するステップと、アプリケーションを続いて実行するステップと、アプリケーションのその後の性能に対するその後のユーザ応答を示す後続の信号を取得するステップと、ユーザがアプリケーションのその後の性能に寛容ではないとの決定に応答して、複数のライブラリ関数の第2のライブラリ関数を選択するステップと、第2のライブラリ関数の構成を調整するステップとを含み得る。
【０００７】
いくつかの態様では、方法はさらに、アプリケーションに対する複数のトレードオフ設定を取得するステップと、初期時間においてコンピューティングデバイスと関連付けられる条件を評価するステップと、初期時間におけるコンピューティングデバイスと関連付けられる評価された条件に基づいて、取得された複数のトレードオフ設定のうちのトレードオフ設定が利用されるべきであるかどうかを決定するステップとを含み得る。いくつかの態様では、方法はさらに、初期時間におけるコンピューティングデバイスと関連付けられる評価された条件に基づいた、そのトレードオフ設定が利用されるべきであるという決定に応答して、そのトレードオフ設定に基づいてアプリケーションの初期構成を調整するステップを含み得る。いくつかの態様では、ユーザがアプリケーションの性能に寛容ではないとの決定に応答してそのアプリケーションのその後の性能を改善するようにアプリケーションの構成を調整するステップは、初期構成を使用したアプリケーションの性能にユーザが寛容ではないとの決定に応答して、アプリケーションの初期構成を上書きするステップを含み得る。いくつかの態様では、アプリケーションに対する複数のトレードオフ設定を取得するステップは、アプリケーションのランタイムの間にアプリケーションプログラミングインターフェース(API)呼出しを介してアプリケーションに対する第1のトレードオフ設定を取得するステップ、コード中のディレクティブを介してアプリケーションに対する第2のトレードオフ設定を取得するステップ、および専用レジスタを介してアプリケーションに対する第3のトレードオフ設定を取得するステップのうちの少なくとも1つを含み得る。いくつかの態様では、初期時間においてコンピューティングデバイスと関連付けられる条件を評価するステップは、アプリケーションに対する作業負荷を評価するステップ、およびコンピューティングデバイスによるアプリケーションの処理に影響する外部条件を評価するステップのうちの少なくとも1つを含み得る。
【０００８】
さらなる態様は、上で説明された方法の動作を実行するためのプロセッサ実行可能命令を用いて構成されたコンピューティングデバイスを含む。さらなる態様は、コンピューティングデバイスに上で説明された方法の動作を実行させるように構成されたプロセッサ実行可能命令が記憶されている、非一時的プロセッサ可読媒体を含む。さらなる態様は、上で説明された方法の動作を実行するためのプロセッサ実行可能命令を用いて構成されたコンピューティングデバイスを含む通信システムを含む。
【０００９】
本明細書に組み込まれ、本明細書の一部を構成している添付の図面は、本発明の例示的な態様を示すものであり、上で与えられた全般的な説明、および下で与えられる詳細な説明とともに、本発明の特徴について説明するのに役立つ。
【図面の簡単な説明】
【００１０】
【図１Ａ】複雑なアルゴリズムの電力消費と正確度の一般的な関係を示すグラフ(たとえば、パレート最適性グラフ)である。
【図１Ｂ】複雑なアルゴリズムの電力消費とランタイム速度構成の一般的な関係を示すグラフ(たとえば、パレート最適性グラフ)である。
【図２】マルチコアデバイスにおいて実装され様々な態様において使用するのに適したアーキテクチャのコンポーネントブロック図である。
【図３】様々な態様による、アプリケーションと関連付けられるトレードオフ機能性のコンポーネントブロック図である。
【図４】様々な態様とともに使用するのに適した例示的なディレクティブ(すなわち、プラグマ)のセットを示す図である。
【図５】様々な態様とともに使用するのに適した例示的なアプリケーションプログラミングインターフェース(API)呼出しのセットを示す図である。
【図６Ａ】トレードオフ機能性において定義されるように、かつ評価された現在の条件に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの構成を調整するための、コンピューティングデバイスのための態様の方法を示すプロセスフロー図である。
【図６Ｂ】トレードオフ機能性において定義されるように、かつ評価された現在の条件に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの構成を調整するための、コンピューティングデバイスのための態様の方法を示すプロセスフロー図である。
【図７Ａ】様々な態様とともに使用するのに適した基本的なモジュールアーキテクチャを示すコンポーネントブロック図である。
【図７Ｂ】ユーザ応答に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの構成を調整するための、コンピューティングデバイスのためのある態様の方法を示すプロセスフロー図である。
【図８Ａ】ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの精度の構成を調整するための、コンピューティングデバイスのためのある態様の方法を示すプロセスフロー図である。
【図８Ｂ】ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの精度の構成を調整するための、コンピューティングデバイスのためのある態様の方法を示すプロセスフロー図である。
【図９Ａ】ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの実行速度の構成を調整するための、コンピューティングデバイスのためのある態様の方法を示すプロセスフロー図である。
【図９Ｂ】ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの実行速度の構成を調整するための、コンピューティングデバイスのためのある態様の方法を示すプロセスフロー図である。
【図１０】様々な態様とともに使用するのに適した例示的なラップトップコンピューティングデバイスのコンポーネントブロック図である。
【図１１】ある態様において使用するのに適したモバイルコンピューティングデバイスのコンポーネントブロック図である。
【発明を実施するための形態】
【００１１】
添付の図面を参照して、様々な態様が詳細に説明される。可能な限り、同じまたは同様の部分を指すために図面全体を通じて同じ参照番号が使用される。具体的な例および実装形態への言及は説明のためであり、本発明の範囲または特許請求の範囲を限定するものではない。
【００１２】
「例示的な」という単語は、本明細書では、「例、実例、または例証として働く」ことを意味するために使用される。本明細書で「例示的」として説明するいかなる実装形態も、必ずしも他の実装形態よりも好ましいか、または有利であると解釈されるべきではない。
【００１３】
本明細書では「コンピューティングデバイス」という用語は、携帯電話、スマートフォン、ウェブパッド、タブレットコンピュータ、インターネット対応携帯電話、WiFi(登録商標)対応電子デバイス、携帯情報端末(PDA)、ラップトップコンピュータ、パーソナルコンピュータ、および少なくとも1つのプロセッサを備える同様の電子デバイスのうちのいずれか1つまたはすべてを指すために使用される。たとえば、モバイル通信デバイス(たとえば、スマートフォン)がモバイルコンピューティングデバイスであると考えられ得る。さらに、コンピューティングデバイスは、アプリケーションプロセッサ、グラフィクス処理装置(GPU)、デジタルシグナルプロセッサ(DSP)などの、様々な能力および構成を各々有し得る様々なコアまたはプロセッサ(すなわち、ヘテロジニアスコア)を利用し得る。そのようなコンピューティングデバイスは、本明細書では「マルチコアデバイス」と呼ばれることがある。
【００１４】
一般に、多くの科学的アルゴリズム(たとえば、行列乗算、ベクトル計算、曲線あてはめなど)は計算集約的であり、コンピューティングデバイスによって実行されると、大量の電力消費と全体的な性能の問題につながる。たとえば、システムオンチップ(SoC)アーキテクチャ上で使用するために適切に構成されていないいくつかの機能を利用するアプリケーションがSoCデバイス上で実行されるとき、アプリケーションの性能が鈍いことがあり、かつ/またはデバイスのバッテリーが高速に枯渇することがある。図1A〜図1Bは、アプリケーションおよび/または複雑なアルゴリズムの電力消費と正確度およびランタイム速度構成との一般的な関係を示すグラフ(たとえば、パレート最適性グラフ)である。具体的には、これらのグラフは、典型的なアプリケーションおよび/またはアルゴリズムがより高い正確度(または精度)またはランタイム速度のために構成されるにつれて、電力消費も増大することを示す。
【００１５】
ユーザは、アプリケーションの結果の実行速度、精度、および/または正確度に関するアプリケーションとの様々な体験に寛容であることがある。しかしながら、ユーザの寛容さの限度は事前には知ることができないことがあるので、要件はユーザに依存し個別的であることが多い。たとえば、一部のユーザはあるアプリケーションの結果の遅延に寛容であり得るが、他のユーザは同じアプリケーションの結果(たとえば、顔タギング)を受け取ることについてのわずかな遅延にもまったく寛容ではないことがある。別の例として、アプリケーションがラップトップ上で実行されるとき、顔検出の複雑なアルゴリズムはより遅いことが許されることがあるが、スマートグラス上で実行されるときには、顔検出アルゴリズムのわずかな遅延がユーザに受け入れられないことがある。したがって、アプリケーションの性能に対するユーザ体験の要件は、場合によっては複雑なアルゴリズムの実行を改善するために使用され得るプラグマまたはディレクティブなどの、事前に与えられたヒントを用いてプログラマが対処することが困難であり非現実的であり得る。たとえば、プログラマまたは開発者が、応答時間を改善するためにより精度が低くなるようにヒント(たとえば、プラグマ)を介して構成されるべきであるコードの部分を見誤ることがあり、ユーザの苛立ちを引き起こす。
【００１６】
状況およびユーザによっては、すべてのアプリケーションおよび/またはアプリケーションによって使用されるすべての複雑なアルゴリズムを、最もリソースを消費する構成で単純に実行することは、非効率的または実行不可能であることがある。たとえば、アプリケーションのアルゴリズムが最高の実行速度の構成を使用するように構成されるとき、ユーザに対する明らかな利益がない状態で、あまりにも多くの電力があまりにも速く利用されることがある。別の例として、アプリケーションが最大のリソースを使用するが、アプリケーションのコンポーネントの一部に対しては最高の浮動小数点精度を必要とせず、複雑なアルゴリズムからのより低い精度に寛容であり得るとき、電力が無駄にされることがある(たとえば、機械学習アルゴリズムの複数の段階は、結果を受け入れ可能なものにしながらより低い精度で実行されることが可能である)。したがって、コンピューティングデバイスの性能とユーザ体験のバランスをとるように、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムを構成する改善された方法を学習する、インテリジェントな技法が必要とされる。
【００１７】
様々な態様は、ユーザが受け入れ可能な様式を学習してアプリケーションおよび/または複雑なアルゴリズムの実行を調整するように、複雑なアルゴリズムを利用するアプリケーションの呼出しおよび使用を用いるための、方法、デバイス、システム、および非一時的プロセッサ可読記憶媒体を提供する。言い換えると、態様の技法は、複雑なアルゴリズムの実行を行うときなどに、十分なユーザ体験を提供するために、アプリケーションの性能に対するユーザの要件または選好を自動的に学習する。そのような学習は、アプリケーションおよび/またはその複雑なアルゴリズムの実行の間の、または完了時の、ユーザからの観察される入力または他のコンテキスト情報に基づいて遂行され得る。ユーザからの受け取られたフィードバックに基づいて、コンピューティングデバイスは、正確度もしくは精度を上げる/下げること、実行速度を上げる/下げること、および/または複雑なアルゴリズムの動作を実行するために割り当てられるコアを変更することなどによって、アプリケーションおよび/またはアプリケーションの複雑なアルゴリズムの実行に対する構成を継続的に調整することができる。
【００１８】
様々な態様では、コンピューティングデバイスは、アプリケーションおよび/または複雑なアルゴリズムの実行と現在の構成が受け入れられるユーザ体験を提供しているかどうかを推測するために、ユーザによって与えられる様々な信号を聴取して処理することができる。具体的には、コンピューティングデバイスは、結果に対する苛立ちまたは不満と一致するフィードバック/入力をユーザが与えないような、結果の十分にリアルタイムな応答、正確度、および/または精度をアプリケーションが提供しているかどうかを特定するために、コンピューティングデバイスのインターフェースおよび/またはセンサとのユーザの対話を分析することができる。たとえば、コンピューティングデバイスは、アプリケーションの複雑なアルゴリズムによって生成される結果データに対する満足を示す、タッチスクリーン上でのタップを特定することがある。様々な態様では、アプリケーションおよび関連する複雑なアルゴリズムの実行に対するユーザの体験を示す信号は、コンピューティングデバイスのオペレーティングシステムおよび/またはアプリケーションの両方によって、取得および/または処理され得る。いくつかの態様では、コンピューティングデバイスは、アプリケーションの応答がユーザの許容パラメータ内にあるかどうかを決定するために、異常検出(たとえば、マルウェアアプリケーションの検出)のための挙動システムなどの、挙動分析システムを利用することができる。
【００１９】
アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの応答時間(または実行速度)の構成に関して、コンピューティングデバイスは、ユーザがインターフェースの焦点を別のアプリケーションに移すかどうか、実行が行われている間に入力(たとえば、リフレッシュ、タッチスクリーン上でのタップなど)を継続的に与えるかどうか、および/または、実行が完了し結果がユーザに提示された後でタイムリーに入力を提供しないかどうかを観察することができる。たとえば、アプリケーションによって要求される結果が遅れ、ユーザがそのアプリケーションから離れて操作する(たとえば、アプリケーションを閉じる、別のアプリケーションに切り替えるなど)場合、コンピューティングデバイスは、ユーザがその遅延に寛容ではなく、結果を提供するための実行期限(または遅延)が長すぎたと推測することができる。別の例として、アプリケーションの結果がバックグラウンドで計算されている間にユーザがアプリケーションを継続的にリフレッシュし、かつ/またはボタンの一部を繰り返し押していると、信号に基づいてコンピューティングデバイスが決定する場合、コンピューティングデバイスは、アプリケーションに対するタイムリー性についてのユーザの選好が守られていないと推測することができる。
【００２０】
アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの正確度および/または精度に関して、コンピューティングデバイスは、アプリケーションからの結果をユーザが不適切であると見なしていることを示すユーザ入力または信号を監視することができる。たとえば、ユーザ入力がないことに基づいて決定されたように、利用可能な最大の精度より低い精度で計算されたソーシャルメディアアプリケーションの複雑なアルゴリズム(たとえば、顔検出およびタギング)の出力を、ユーザが無視するとき、コンピューティングデバイスは、その精度がユーザに対して低すぎた(たとえば、違う人物への顔タギングが多すぎるなど)と推測することができる。別の例として、アプリケーションの複雑なアルゴリズムの出力を訂正する(たとえば、トランスクリプションの訂正、自動訂正機能に対するユーザの訂正など)入力をユーザが与えるとき、コンピューティングデバイスは、精度がユーザの選好に対して低すぎたことを示すためにそのような信号を解釈することができ、関連するアプリケーションによるその後の実行に対して、複雑なアルゴリズムの精度の構成を上げることができる。いくつかの態様では、アプリケーションの出力に対する観察されるユーザの訂正の程度が、アプリケーションおよび/または複雑なアルゴリズムの構成を調整するために使用され得る。たとえば、ユーザが写真全体に対する名前タギングの結果を完全に拒否する場合、コンピューティングデバイスは、タギングアルゴリズムの精度の構成が大きく上げられるべきであると推測することができ、一方、ユーザが写真の名前タグの小さな部分を訂正しただけである場合、コンピューティングデバイスは、タギングアルゴリズムの精度の構成は調整される必要がない、または小規模に調整される必要があると推測することができる。
【００２１】
いくつかの態様では、コンピューティングデバイスは、観察されたユーザ入力/信号に基づいてユーザが受け入れ可能な性能の下限を学習するために、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの構成または実行速度を、継続的かつ自動的に調整するように構成され得る。たとえば、コンピューティングデバイスは、ユーザの苛立ちを示す入力(たとえば、繰り返しボタンを押すこと、ユーザがタグを無視することなど)が検出されるまでアルゴリズムの実行速度および/または精度のいずれかを徐々に下げることによって、ソーシャルメディアアプリケーションにおける顔タギングアルゴリズムに対するユーザの寛容さの限度を学習するように構成され得る。このようにして、コンピューティングデバイスは、選好を手動で設定することをユーザに求めることなく、ユーザの選好を満たしながら、効率的であるアプリケーションの構成および実行速度のセットを発見することができる。
【００２２】
アプリケーションは、ユーザ体験に各々寄与する様々な複雑なアルゴリズムを利用することがあり、いくつかの態様では、複雑なアルゴリズムの各々は、悪い体験を示す取得されたユーザ入力に応答してユーザ体験を改善するために個別に調整され得る、固有の構成または設定(たとえば、正確度、精度、実行速度など)と関連付けられることがある。しかしながら、ユーザ入力は、悪い体験に寄与している複雑なアルゴリズムの構成を必ずしも示さないことがあるので、コンピューティングデバイスは、反復的に複雑なアルゴリズムを個別に調整するように構成され得る。たとえば、アプリケーションについての悪いユーザ体験(たとえば、結果の遅延または不正確な結果による)を示す第1のユーザ信号を検出した後、コンピューティングデバイスは、アプリケーションの第1の複雑なアルゴリズムの第1の構成を改善し、タッチ入力などを介したその後の応答などのその後のユーザ対話を観察することができる。次いで、悪いユーザ体験を示す、またはそれと一致するその後の第2のユーザ対話をコンピューティングデバイスが観察する場合、コンピューティングデバイスは、アプリケーションによって使用される第2の複雑なアルゴリズムの第2の構成を調整し、その後のユーザ対話を再び観察することができる。そのような「調整と観察」のプロセスは、満足のいくユーザ体験と一致するユーザ対話をコンピューティングデバイスが観察するまで繰り返され得る。調整するために異なる複雑なアルゴリズムを選択することは、事前に定められた優先リストを介して、開発者によって提供されるヒント(たとえば、プラグマ)を介して、かつ/またはリモートデバイス(たとえば、アプリケーションおよび関連するユーザ体験の他の具体化についての知識があるクラウドサーバ)から、遂行され得る。
【００２３】
いくつかの態様では、アプリケーションおよび/または複雑なアルゴリズムがユーザの要件を満たすのに十分に調整されることが可能ではない場合、アプリケーションおよび/または複雑なアルゴリズムの次の呼出しにおいて、作業がクラウドコンピューティングデバイスにオフロードされ得る。たとえば、顔検出アルゴリズムが実行されるときの処理の遅延によってユーザが苛立ち続けていることを観察されたユーザ対話が示すとき(たとえば、モバイルデバイス上で検出された多数のタップに基づいて)、モバイルデバイスは次の顔検出動作をリモートサーバにオフロードすることができ、一方で、モバイルデバイスはその完全なリソースを他の動作のために使用する。
【００２４】
様々な態様では、異なる仕様の複数の処理コアが、態様の技法を利用するように構成されるコンピューティングデバイス(たとえば、モバイルデバイス)において利用可能であることがある。特定の計算の結果がどれだけ速く正確であることが必要とされるかに応じて、アプリケーション(またはアプリケーションの部分)および/または複雑なアルゴリズムは、タイムリーに結果を提供しながらエネルギーを節約するように、コンピューティングデバイスの様々な処理コア上でスケジューリングされ、ディスパッチされ、実行され得る。本明細書で説明されるシステムアーキテクチャは、アプリケーションおよび/またはアプリケーションと関連付けられる複雑なアルゴリズムをスケジューリングし、調整し、実行するために使用されるべきハードウェアとアプリケーションの要件およびステータスを収集することによってこの目標を達成するために使用され得る。いくつかの態様では、コンピューティングデバイスは、様々なコアの1つまたは複数での効率的な実行のためにアプリケーションおよび/または複雑なアルゴリズム(たとえば、アプリによって呼び出される計算カーネル)をどのように構成するかを特定するために、様々な情報を利用することができる。たとえば、コンピューティングデバイスは、コンピューティングデバイスのハードウェア(たとえば、ヘテロジニアスコア、メモリなど)の安定状態での特性および能力、アプリケーションおよび/もしくは複雑なアルゴリズムを実行するための以前に特定されたパラメータ(たとえば、受け入れ可能な実行速度または期限、精度など)、コンピューティングデバイスの様々なハードウェアの任意の現在のもしくは過渡的な状態もしくは条件、ならびに/または、アプリケーションおよび/もしくはアプリケーションによって使用される複雑なアルゴリズムによるリソース使用の履歴(たとえば、キャッシュミス、メモリアクセスパターン、帯域幅の利用率、例外および分岐の頻度など)を利用することができる。そのような情報は、システム変数(たとえば、専用レジスタ)のクエリを介して、アプリケーションと関連付けられるコード内のプラグマインジケータを介して、アプリケーションおよび/もしくは関連するソフトウェア内のAPI呼出しを介して、ならびに/または、ユーザ入力(たとえば、苛立ちを示す検出されたタッチ、不正確な応答時間または受け入れられないほど遅延した応答時間を示す選択入力など)から、取得され得る。いくつかの態様では、コンピューティングデバイスは、スケジューラまたは負荷分配器モジュールを利用して、(守られなかった期限および負荷バランスの履歴などの)情報を使用して様々なコア上で実行されるようにソフトウェアを構成する(または割り当てる)ことができる。いくつかの態様では、コンピューティングデバイスは、アプリケーションの実行の間にカーネル使用率データをリソース履歴サブシステムに提供することなどによって、アプリケーションおよび/または複雑なアルゴリズムのその後の実行において使用するためのコア使用率データを記憶し、または別様に保存することができる。
【００２５】
いくつかの態様では、コンピューティングデバイスは、事前に定められたトレードオフ機能性および/または他のユーザもしくは開発者により提供されたデータを利用して、ユーザ体験を最良に改善するために調整され得る、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの構成/設定を決定することができる。たとえば、ビデオゲームアプリケーションによって使用されるベクトル計算アルゴリズムが結果を提供することについて緩い期限を利用し得ることを示すプラグマに基づいて、コンピューティングデバイスは、タッチスクリーン上での連続的なタップに基づいてコンピューティングデバイスの現在の性能にユーザが苛立っているとの推測に応答して、ベクトル計算アルゴリズムをそれに従って調整することができる。本明細書で説明されるように、コンピューティングデバイスは、ユーザにより提供されたヒントに基づいて、アプリケーションおよび/または複雑なアルゴリズムに対する調整を行うことができる(たとえば、プログラマが計算集約的であるものとしてコードの一部分を特定することがあるが、コンパイラはそのコードの実行を調整することもしないこともある)。しかしながら、より後の時間において、観察されたユーザ対話の結果として、強調されている(たとえば、API呼出しおよび/またはプラグマを介した)そのコードの部分が、悪いユーザ体験を引き起こし得る潜在的な遅延を特定するためにコンピューティングデバイスによって評価され得る。
【００２６】
いくつかの態様は、コンピューティングデバイスの動的な制約(たとえば、利用可能な電力、計算応力など)に対処するトレードオフ機能性を使用することによって、コンピューティングデバイス上で実行される、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの動的な実行のために設計されるアーキテクチャを利用することができる。具体的には、いくつかの態様の技法は、性能および精度とエネルギーおよび電力の消費とのトレードオフを行うための機能を提供し得る。
【００２７】
デバイス上で、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムを実行するには、アプリケーションおよび/もしくは複雑なアルゴリズムを実行することによってデバイスが悪い影響を受けるかどうかを、かつ/または、コンピューティングデバイスが他の対策をとるべきであるかどうかを決定するために、様々な評価が必要とされ得る。たとえば、モバイルデバイスは、利用可能な電力レベルだけが限られているとき、複雑なアルゴリズムの実行がバッテリーを枯渇させないことを確実するために、テストを実行することがある。別の例として、いくつかの重要なアプリケーションの低速な出力または非リアルタイムの出力につながる過度の最適化を避けるための対策が、コンピューティングデバイスに対して必要とされることがある。別の例は、リアルタイム期限を満たすことを試みながらプロセッサの過剰な発熱を避けるための対策および評価である。
【００２８】
ユーザは、コードまたは命令セットに埋め込まれるディレクティブ(または「プラグマ」)などを介して、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの実行を適合させるための静的なパラメータを設定することができる。1つのそのような適合は、計算の速度を調整する(たとえば、上げるまたは下げる)ことであり得る。実行の速度を下げることは、アルゴリズムの出力がユーザによりリアルタイムで必要とされていないときには有用であり得る。たとえば、一部のユーザは別のこと(たとえば、写真にテキスト表現を追加すること)に関与しているためわずかな(または緩やかな)リアルタイム遅延に寛容であり得るので、顔タギングアルゴリズムの出力は、新しい写真が得られたときにはわずかに遅延してよい。別の例として、ユーザは、日中に撮影された写真の分類と別々のアルバムへの写真のグループ化とを実行するのを、コンピューティングデバイスが夜間に電源に差し込まれるまで待つことについて寛容であり得る。別の例として、機械学習アルゴリズムは、翌日の使用に向けてアルゴリズムの構成を調整するために、夜間に(およびデバイスが壁のコンセントに差し込まれているときに)フィードバックデータを処理することを許容され得る。場合によっては、実行速度の低下は、たとえばアルゴリズムが発話の認識および/またはトランスクリプションを提供するときに厳しいリアルタイム要件を有する場合、可能ではないことがある。
【００２９】
別のそのような適合は、計算の精度および/または正確度を調整する(たとえば、上げるまたは下げる)ことであり得る。たとえば、利用可能な電力が限られているとき、ユーザは、ある割合の結果が正しい限り、顔検出アルゴリズムまたは顔タギングアルゴリズムのわずかな正確度または精度の低下に寛容であり得る。一部のアプリケーションおよび/またはアルゴリズムは、適切な結果を与えるために高い精度を必要としないことがある。
【００３０】
別のそのような適合は、異なるコアでの実行のために動作をスケジューリングすることであり得る。そのようなスケジューリングは、所与の時間(たとえば、初期時間)における入力データおよびシステムの状態(たとえば、ハードウェア能力などの静的なデバイス情報およびバッテリー電力などの他の過渡的な情報)に依存することがある。たとえば、デバイスのバッテリーが大量の利用可能なバッテリー電力を有するとき、コンピューティングデバイスは、科学的ライブラリ関数についての処理期限を満たすためにすべてのコアを利用するようにアプリケーションを構成し得るが、他の場合(たとえば、バッテリーが事前に定められたレベルを下回るとき)には、コンピューティングデバイスは、妥協して、関数を実行するために単一のコアまたは専用コアだけを使用することがある。
【００３１】
いくつかの態様では、コンピューティングデバイスは、計算に必要とされるデータまたはコードを移送するために、どれだけのメモリ帯域幅(またはチャネル)が占有のためにアプリケーションによって利用されるかを調整するように構成され得る。そのような調整は、他のプロセスがアプリケーションによって使用されるものと同じチャネルにアクセスして別様に利用することを許可されるように行われ得る。いくつかの態様では、コンピューティングデバイスは、アプリケーションを実行するためのある期限を満たすためにメモリ階層(たとえば、共有メモリ上で様々なコアに割り振られるスタックおよびヒープの量)を変更するように構成されることがあり、スタンバイ中の他のコアを起動することが必要であるか、または必要ではない。
【００３２】
検出されたユーザ入力に基づく機械学習技法に加えて、いくつかの態様は、ユーザのデバイス性能に対する期待ならびに所与の時間におけるデバイスの制約に対処するために、アプリケーションおよび/または複雑なアルゴリズムの構成をどのように動的に設定して調整すべきかを決定するための、インテリジェントシステムも利用することができる。したがって、いくつかの態様は、コンピューティングデバイスが、変化する状況、デバイス状態、ユーザの性能に対する期待、および他のデバイスの制約に対処するようにアプリケーションおよび/または複雑なアルゴリズムの性能を自動的に調整することを可能にすることによって、コンピューティングデバイスの機能を改善する。そのような調整は、ユーザ体験とのバランスをとりながらデバイスにおける電力消費を改善することができる。
【００３３】
コンピューティングデバイスのユーザまたはアプリケーション開発者などによって、論理的な関係または規則のセット(「トレードオフ機能性」と本明細書では呼ばれる)が定義され得る。各トレードオフ機能性は、アプリケーションによって呼び出され得る、科学的な計算などのアプリケーションおよび/または複雑なアルゴリズムを実行するための、様々な構成または設定を示し得る。トレードオフ機能性はまた、検出されると複数の構成のいずれかの使用を引き起こし得る、アプリケーションの実行の間のコンピューティングデバイスの条件またはデバイス状態を示し得る。たとえば、トレードオフ機能性は、関連するライブラリ関数の実行が遅くされるように、またはより不正確にされるように再構成されるべきであることを、満たされるときに示す、熱条件(たとえば、デバイスの温度)を示すデータを含み得る。別の例として、コンピューティングデバイスが電源(たとえば、壁のコンセント)に接続されているとの決定に応答して、トレードオフ機能性内のデータは、コンピューティングデバイスに、より高い精度のレベルで行列乗算ライブラリ関数を実行するように促し得る。このようにして、コンピューティングデバイスによって実行される態様の技法は、コンピューティングデバイスが時間集約的および/もしくはエネルギー集約的なアプリケーションならびに/または複雑なアルゴリズムを構成する方式を、ユーザがより厳密かつ動的に制御することを可能にし得る。
【００３４】
例示として、ユーザは、アプリケーション(たとえば、ソーシャルメディアアプリケーション)に関連して実行される特定の科学的ライブラリ関数(たとえば、ベクトル計算アルゴリズム)のためのトレードオフ機能性を定義し得る。トレードオフ機能性は、コンピューティングデバイスにおける温度または熱エネルギーの条件(または測定値)に対する性能の設定(たとえば、複雑なアルゴリズムを実行するための実行速度またはランタイム速度)を示し得る。トレードオフ機能性は、熱的なボトルネックが原因で単位時間当たりのエネルギー消費率を減らそうとする中で、科学的ライブラリ関数に対してより遅いランタイムが実装され得ることを示し得る。性能と熱条件との間のそのような関連は、事前に定められた熱的な制約(たとえば、製造業者の仕様など)に基づくコンピューティングデバイスの全体的な健全性に対して重要であり得る。トレードオフ機能性(または別のトレードオフ機能性)は、利用可能な電力の条件(たとえば、利用可能なバッテリーレベル)に対する性能の設定を示すことがあり、バッテリー電力を節約しようとする中で科学的ライブラリ関数に対してより遅いランタイムが実装され得ることを示すことがある。トレードオフ機能性(または別のトレードオフ機能性)は、温度または熱エネルギーの条件に対する正確度または精度の設定を示すことがあり、エネルギー消費率を下げるためにより低い正確度または精度の設定が使用され得ることを示す。トレードオフ機能性(または別のトレードオフ機能性)は、電力条件に対する正確度または精度の設定を示すことがあり、バッテリー電力を節約するためにより低い正確度または精度の設定が使用され得ることを示す。
【００３５】
アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズム(またはライブラリ関数)がどのように、かつどのような状況のもとで構成され得るかを定義するトレードオフ機能性は、様々な方式でコンピューティングデバイスによってアクティブ化され、または別様に取得され得る。具体的には、コンピューティングデバイスは、トレードオフ機能性を利用して、アプリケーションに対する初期構成および/または初期時間において(たとえば、起動時に、アプリケーションをロードするときに、など)アプリケーションによって使用される機能を確立することができる。トレードオフ機能性に基づいて設定される構成は、アプリケーションおよび/または複雑なアルゴリズムに対して再構成が行われることを要求するユーザ入力の受信に応答して、コンピューティングデバイスによって上書きもしくは別様に無視されることがあり、されないこともある。たとえば、アプリケーションはある特定の顔タギングアルゴリズムに対して「低」精度の設定を利用するように最初に構成されるが、コンピューティングデバイスは続いて、ユーザが顔タギングの結果に満足していないことを示すユーザ入力に基づいて、精度の設定を「高」に変更することができる。さらに、コンピューティングデバイスは、現在のユーザの満足に基づいてアプリケーションおよび/または複雑なアルゴリズムにおいて制定されるべき構成に反するトレードオフ機能性を無視するように構成され得る。たとえば、コンピューティングデバイスは、ユーザの満足を示す現在のユーザ入力に基づいて、利用されることもされないこともある唯一の提案される構成として、ライブラリ関数のためのトレードオフ機能性から低精度の設定を特定することができる。
【００３６】
いくつかの態様では、トレードオフ機能性は、コンピューティングデバイスによって実行されるべきアプリケーションおよび/または複雑なアルゴリズムと関連付けられるコード内のディレクティブによって定義またはアクティブ化され得る。言い換えると、アプリケーション、ライブラリ関数、または他の複雑なアルゴリズムは、プラグマ(すなわち、アセンブラ/インタプリタ/コンパイラプロセスを引き起こす前処理ディレクティブ)などのコードにおいて示されるヒントを介して、利用され得る設定の実現性を知らされ得る。そのようなディレクティブは、コンパイル時に、たとえばプラグマを含むコードが構文解析され、解釈され、コンパイルされ、実行のために別様にロードされるときに、特定され得る(または別様に取得され得る)。
【００３７】
いくつかの態様では、トレードオフ機能性は、アプリケーションプログラミングインターフェース(API)呼出しを介してランタイムの間に制定され得る。たとえば、スレッド、プロセス、または他のソフトウェア対応の要素が、所与の時間(たとえば、初期化時または初期時間)における熱エネルギーの測定値および/または利用可能なバッテリー電力に基づいて科学的ライブラリ関数の実行を制限するための定められた規則のセットを要求または使用するための、特定のAPI呼出しを呼び出すように構成され得る。
【００３８】
いくつかの態様では、コンピューティングデバイスは、アプリケーションおよび/またはアルゴリズムの構成を提供することと関連付けられる特別に確保されたメモリ位置(「専用レジスタ」と呼ばれる)からトレードオフ機能性データを取得することができる。たとえば、専用レジスタは、現在のデバイスの温度および/またはバッテリー電力レベルに対して緩い/厳しいリアルタイム期限を使用するように数学的アルゴリズムが構成され得ることを示す情報を含み得る。
【００３９】
トレードオフ機能性がアプリケーションおよび/または複雑なアルゴリズムとともに使用するためにどのように取得またはアクティブ化されるかにかかわらず、トレードオフ機能性は、コンピューティングデバイスと関連付けられる様々な条件および/または複雑なアルゴリズムを呼び出すアプリケーションの実行を継続的に評価することによって、動的に利用され得る。言い換えると、アプリケーションおよび/または複雑なアルゴリズムの構成は、コンピューティングデバイスの様々な動作状態などの、ポーリングされる変数または測定される変数の現在の値に基づいて、アプリケーションのコンパイル時に、および/またはアプリケーションの実行の間中ずっと動的に、動的に設定され、調整され、かつ/またはデフォルトの設定に戻され得る。たとえば、ベクトル計算アルゴリズムを使用するアプリケーションのためのトレードオフ機能性が、アプリケーションのソースコードに含まれるディレクティブに基づいてコンパイル時に確立されると、コンピューティングデバイスは、コンピューティングデバイスのバッテリー電力、アプリケーションを実行することと関連付けられる作業負荷、デバイスの熱エネルギー(たとえば、デバイスの温度)、および/または、ベクトル計算アルゴリズムの実行の構成を調整する(たとえば、より遅く/速く実行する、より高精度/低精度または正確/不正確にする、異なるコアで実行する、など)かどうかを決定するための他の条件を、継続的に評価することができる。別の例として、バッテリーの残量が少なくなっていると決定されるとき、コンピューティングデバイスは、データ移送があまりにも多くのエネルギーを必要とすることがあるので、GPUを含まない2つのコア上でのみ機械学習アルゴリズムを実行すると、動的に決断することができる。言い換えると、構成がどのように変更されるべきかを計画するトレードオフ機能性はより静的な方式で確立されるが、確立されたトレードオフ機能性によって定義される様々な構成または設定を使用するかどうかについてのトリガまたは入力は、コンピューティングデバイスおよび/またはアプリケーションのその時点での条件に基づいて動的である。
【００４０】
いくつかの態様では、コンピューティングデバイスは、トレードオフ機能性に左右される複雑なアルゴリズムを利用するアプリケーションの作業負荷を評価して、アプリケーションおよび/または複雑なアルゴリズムが所与の時間において再構成され得るかどうかを決定することができる。たとえば、コンピューティングデバイスは、タギングすべき画像データベースのサイズを評価し、アルゴリズムのための関連するトレードオフ機能性に基づいて、タギング手順のための処理の遅延を動的に要求することができる。いくつかの態様では、構成は、コンピューティングデバイスの現在の利用可能な電力レベルおよびコンピューティングデバイスの熱エネルギーレベルが原因で、トレードオフ機能性に従って調整され得る。いくつかの態様では、構成は、現在の外部条件に基づいて、トレードオフ機能性に従って調整され得る。たとえば、外部電源に差し込まれていること、またはワイヤレスルータ(たとえば、Wi-Fi(登録商標)ルータ)に接続されていることは、より多くの電力が利用可能であり、より少量の電力がコンピューティングデバイスによって使用されている(たとえば、ルータへの送信はより少量の送信電力を使用し得る)ことを示し得るので、科学的ライブラリ関数は、より高い実行速度および/またはより高い正確度もしくは精度の構成を用いて構成され得る。
【００４１】
いくつかの態様では、コンピューティングデバイスは、上で説明されたように初期時間において有効であると決定されるトレードオフ機能性に基づいて、アプリケーションの構成(たとえば、複雑なアルゴリズム、科学的関数などの実行の設定)を調整することができる。そのような調整は、アプリケーションおよび/またはアプリケーションが使用する複雑なアルゴリズムを実行するための、正確度、精度、および/または実行速度の構成を変更することを含み得る。いくつかの態様では、調整は、アプリケーションプロセッサコア、グラフィクス処理装置(GPU)、デジタルシグナルプロセッサ(DSP)、または仮想的なコアもしくは実際のコアの任意の組合せなどの、コンピューティングデバイスの1つまたは複数のコアに、複雑なアルゴリズムおよび/またはアプリケーションの実行可能コードの部分をディスパッチするようにアプリケーションを構成することを含み得る。たとえば、態様の技法は、トレードオフ機能性を使用するアプリケーションに、電力リソースが限られているとき(たとえば、トレードオフのエネルギー制約などが原因で)、かつ/またはコンピューティングデバイスが発熱しているとき(たとえば、トレードオフの熱的な制約などが原因で)、より低い精度の結果(たとえば、誤った顔タギングまたは写真の分類など)を提供させ、かつ/または異なるコアを利用させ得る。
【００４２】
いくつかの態様では、サブプログラムまたは他の実行可能な動作は、正確度または精度の構成とリアルタイムの要件とを定義するトレードオフ機能性を、それぞれの親アプリケーションから受け継ぐように構成され得る。たとえば、実行時間における少ないレイテンシ、ある期限(たとえば、厳しい期限、緩い期限など)、および/または科学的関数に対する高精度の結果を許容するトレードオフ機能性を親アプリが利用する場合、親アプリに関連するサブアプリケーションは、同じまたは類似する要件を受け継ぐことができる。
【００４３】
様々な態様は、複雑なアルゴリズムまたは科学的計算ライブラリを利用するアプリケーションなどの、計算集約的なアプリケーションの使用を改善するための有益な技法を提供することができる。たとえば、計算を遅くすること、および/または計算の精度を下げることによってトレードオフを行う構成は、コンピューティングデバイスが、ユーザの現在の満足度および/または様々な動作条件(たとえば、ローバッテリー、高いデバイス温度など)に従ってアプリケーションを動作させ続けることを可能にし得る。このようにして、複雑なアルゴリズム/アプリケーションの実行に対するユーザの反応が、デバイスの性能(たとえば、使用される電力、タスクを完了するまでの時間、使用されるコンポーネント、結果の正確度、結果の精度など)と許容可能なユーザ体験のバランスをとるようにその後の実行を継続的に構成するために使用され得る。
【００４４】
コンピューティングデバイス上でのプログラムの実行に関して、周波数、電圧、クロック速度、消費電力、およびリソースの割振り(たとえば、無線のアクティブ化/使用など)などの、オペレーティングシステムまたはハードウェアの設定を調整する、従来の技法が存在し得る。しかしながら、これらの従来の技法は、アプリケーションおよび/またはアプリケーションによって利用されるソフトウェア(たとえば、ライブラリ関数など)を構成する、本明細書で開示される態様の技法とは異なる。言い換えると、態様の技法は、正確度/精度、実行速度などに関する、アプリケーションについてのユーザが受け入れ可能な体験に到達するために、ハードウェアまたはシステムの設定ではなく、アプリケーションの設定を調整する。たとえば、態様の技法は、科学的関数の以前の呼出しについての、解釈されたユーザの満足度に基づいて、アプリケーションがどのように科学的関数を使用するか(たとえば、倍精度、2つの倍精度など)を変更することができる。別の例として、態様の技法は、実行可能コードのループの部分または他の部分を1つまたは複数のプロセッサに割り当てること、または順番にもしくは並列に実行するようにループまたは他の部分を設定することなどによって、科学的関数の異なる部分の実行をアプリケーションがどのように割り当てるかを変更するために使用され得る。別の例として、態様の技法を使用すると、コンピューティングデバイスは、データのより高速なプリフェッチを促すために、単一のコア上でライブラリ関数の動作のハイパースレッディングを使用するように構成されるように、アプリケーションを調整することができる。
【００４５】
さらに、態様の技法は、ユーザの選好および/またはユーザのプロファイルを利用または調整せずに、代わりにアプリケーション固有の構成および/またはアルゴリズム固有の構成を調整するという点で、従来の技法と異なる。たとえば、アプリケーションは、科学的関数(たとえば、行列乗算など)からの以前の結果があまりにも不正確であったことを示すユーザのフィードバック(たとえば、アプリケーションによるいくつかの誤ったまたは不正確な計算を示すユーザ入力など)に基づいて、その科学的関数についてより高精度の計算を利用するように構成され得る。加えて、一般的な問題に対する最適な解を特定することを担ういくつかの従来の技法と異なり、態様の技法は、単にユーザのフィードバックを利用して、ユーザの現在の期待により合うようにソフトウェアの実行を変更することができる。たとえば、態様の技法は、専門のプログラムまたは解決エンジンを用いて論理的なジレンマを解くように働くのではなく、代わりに、アプリケーションの実行がユーザの現在の満足度のフィードバック(たとえば、スクリーン上でのタップ、スクリーンを凝視することなど)により適合するようにアプリケーションを再構成する。
【００４６】
態様の技法は、現在のユーザ満足度のフィードバックデータ(たとえば、アプリケーションへのユーザ入力)を使用して、アプリケーションの実行についてのユーザの満足度を改善するために今後のアプリケーション構成に対して行われるべき変更を特定することができる。たとえば、(たとえば、顔タギング機能の呼出しを介して)名前によりタギングされた画像の束の中にある測定された誤答の数に基づいて、コンピューティングデバイスは、顔タギング機能のその後の実行がより高精度の(しかしより低速の)構成を利用し得るように、アプリケーションに対する1つまたは複数の顔タギングの精度の設定を調整することができる。このようにして、コンピューティングデバイスは、ユーザ活動の履歴およびアプリケーションの実行に対する満足度に基づいて、実行をどのように再構成するかを特定することができる。
【００４７】
以下の説明は、ユーザの満足度に基づいて、かつ様々な態様に従って、アプリケーションと関連付けられアプリケーションによって実行されるライブラリ関数および/または複雑なアルゴリズムに対して行われ得る、トレードオフ設定、構成、および他の調整に言及する。たとえば、以下の説明は、アプリケーションによって利用される特定のライブラリ関数のためにコンピューティングデバイスによって取得されるトレードオフ設定に言及する。しかしながら、様々な態様の技法は、複雑なアルゴリズムまたはライブラリ関数の使用にかかわらず、アプリケーションの構成またはアプリケーションの部分(すなわち、コンピューティングデバイス上で実行されるソフトウェアまたはコードのセグメント)を変更することができることを理解されたい。したがって、特定のライブラリ関数、アルゴリズム、科学的計算、コード、および/または他の特定の機能性のための構成または設定への言及は説明のためのものに過ぎず、ソフトウェア構成を調整する態様の技法に関して限定するものではない。たとえば、実行速度および/または精度に関する構成は、アプリケーション全体(たとえば、プログラム)、アプリケーションの一部分(たとえば、アプリケーションのコード内のループなど)、およびアプリケーションによって呼び出されるライブラリ関数(たとえば、行列乗算演算など)の任意の組合せに対して行われ得る。
【００４８】
図2は、マルチコアコンピューティングデバイスにおいて実装され様々な態様において使用するのに適したアーキテクチャ200を示す。アーキテクチャ200は、デバイスの接続および/または動作条件(たとえば、電気コンセントに差し込まれていること、移動していることなど)を示すデータを提供することが可能な外部データソース202(たとえば、センサ入力)を含む、コンピューティングデバイスの様々な機能性を提供するためのモジュールを含み得る。コンピューティングデバイスはまた、挙動分析モジュール204、動き状態分析(たとえば、混合ガウスモデル(GMM)、隠れマルコフモデル(HMM)など)、音声分析モジュール208(たとえば、GMM、HMM、人工ニューラルネットワーク(ANN))、ビデオおよび/または写真分析モジュール210(たとえば、ディープ畳み込みネットワーク(DCN)、ANNなど)、機械学習アルゴリズム212(たとえば、ナイーブベイズ、ロジスティック回帰(LR)、サポートベクターマシン(SVM)、HMM、GMM/期待値最大化(EM)、ブースティング、ANN、DCNなど)などの、様々なソフトウェア、ルーチン、アプリケーション、および/または命令セット、ならびに、線形代数パッケージ(LAPACK)ソルバ214、ベクトル計算アルゴリズム216、要約統計アルゴリズム218、および曲線あてはめアルゴリズム220などの、様々な複雑なアルゴリズムと組み合わせて実行され得る様々なモジュールを含み得る。アーキテクチャ200はまた、Snapdragon(登録商標)プロセッサに最適化された線形代数ライブラリ222(たとえば、Basic Linear Algebra Subprograms(BLAS)など)などの、特定のコンピューティング環境に最適化されたモジュールを含み得る。そのようなライブラリ222はまた、MAREモジュール224(たとえば、マルチコアアーキテクチャを利用することによって電力および効率を最適化するためのモジュール)を含み得る。様々なコンポーネント204〜224は、本明細書で説明されるような態様のトレードオフ機能性から利益を得ることができる複雑なアルゴリズムを利用し得る。様々な態様では、アーキテクチャ200は、生体分析に関する複雑なアルゴリズム、ビデオゲームまたは他のグラフィクスエンジン動作などの、本明細書で説明されるような態様のトレードオフ機能性および他の構成技法からも利益を得ることができる、様々な他のモジュールを含み得る。
【００４９】
アーキテクチャ200はまた、異なる能力、仕様、および/または特性を有するヘテロジニアスコア226などの、様々なコアを含み得る。ハードウェアアクセラレーションモジュール228も含まれ得る。いくつかの態様では、様々なコア226は、関連するトレードオフ機能性の中で設定されるように、かつ/またはユーザのフィードバックに基づいて別様に構成されるように、上で説明されたモジュール204〜224に関する動作を実行するために利用され得る。
【００５０】
図3は、様々な態様による、例示的なトレードオフ機能性構成物302を示す。トレードオフ機能性構成物302は、アプリケーションまたは複雑なアルゴリズム(たとえば、特定のライブラリ関数、科学的計算など)に対して異なる構成または設定を定義し得る、データ構造、論理、命令、または他の記憶されている情報であり得る。様々な態様では、トレードオフ機能性構成物302は、ユーザ/開発者の入力(たとえば、API呼出し、プラグマなど)を介して事前に定められアクティブ化されることがあり、または代替的に、そのような入力に基づいて生成されることがある。
【００５１】
トレードオフ機能性構成物302は、精度のための変数306(たとえば、現在の精度の設定、高精度の設定、低精度の設定など)、エネルギーのための変数308(すなわち、上限のバッテリーエネルギー値、下限のバッテリーエネルギー値など)、性能のための変数310(たとえば、現在の実行速度またはランタイム速度、より低い実行速度の設定、より高い実行速度の設定など)、および電力のための変数312(すなわち、上限の熱出力値、下限の熱出力値など)などのトレードオフ変数304を含み、記憶し、利用し、かつ/またはそれらと別様に関連付けられ得る。トレードオフ機能性構成物302は、トレードオフ機能性構成物302がどのように制定され、アクティブ化され、かつ/または別様に調整され得るかを示し得る、コンパイル時データ316(たとえば、静的なデータ)および/またはランタイムデータ318(すなわち、潜在的に動的なデータ)を含む、決断時データ314を含み、記憶し、利用し、かつ/またはそれと別様に関連付けられ得る。トレードオフ機能性構成物302は、ディレクティブデータ322、APIデータ324、およびハードウェアレジスタ326などの、トレードオフ機能性構成物302が調整および/またはアクティブ化され得る方式を示し得る、インターフェースモードデータ320を含み、記憶し、利用し、かつ/またはそれと別様に関連付けられ得る。
【００５２】
図4は、様々な態様とともに使用するのに適した例示的なディレクティブ(または「プラグマ」)のセット400を示す。そのようなディレクティブは、コンピューティングデバイス上での使用のために実行可能ファイルを生成するためのコンパイルの間にソースコードが利用されるときなどの、コンパイル時に、コンピューティングデバイスによって利用され得る。一般に、従来のプラグマまたは他の同様のディレクティブは、コンピューティングデバイスのコンパイラまたは他の処理システムのためのヒントまたは指示を提供するために他のコード内に開発者が挿入する、コード、テキスト、および/または他の情報であり得る。従来のプラグマは、コンパイル時の動作および結果を直接制御し得る。たとえば、例示的な従来のプラグマが、実行可能ファイルのあるセクションが調整されるべきであることを示すとき、コンピューティングデバイスは、それに従って機能性を調整する。
【００５３】
従来のディレクティブと異なり、いくつかの態様の技法は、コンピューティングデバイスが最終的に動作し得る方式を一方的に決定するものではないディレクティブを利用し得る。代わりに、いくつかの態様の技法において使用されるようなディレクティブは、コンピューティングデバイスに関連する他の条件の評価によって上書きされ得る、アプリケーションおよび/または複雑なアルゴリズムの動作または構成に対する選好を提案するだけであり得る。言い換えると、いくつかの態様の技法において使用されるようなディレクティブは、コンピューティングデバイス上で実行されるアプリケーションによって使用されることも使用されないこともある、様々なアプリケーションおよび/または複雑なアルゴリズムに適用可能なトレードオフ機能性を示し得る。たとえば、態様の技法とともに使用されるようなプラグマは、特定のライブラリ関数のために所与の時間において使用されることをユーザが好み得る特定のトレードオフ機能性(または規則のセット)を指すことがあるが、コンピューティングデバイスは、リアルタイムで評価される動的なシステム状態変数に基づいて、ライブラリ関数に対する異なるトレードオフ設定を利用することがある。言い換えると、いくつかの態様の技法は、いくつかのアプリケーションおよび/または複雑なアルゴリズムのためにどのような種類のトレードオフ方式をシステムが使用すべきかをシステムに伝えるために使用するための1つの可能性のある入力として、プラグマを利用し得る。
【００５４】
以下は、コンピューティングデバイス上で実行されるアプリケーションによって使用される複雑なアルゴリズムを構成するために使用され得る、図4に示されるプラグマの例示的なセット400の説明である。セット400中の各々の例示的なプラグマ402〜410は、それが提案されるまたは好まれるディレクティブであることを示すキーワード(たとえば、「#pragma」)、プラグマによってアドレス指定されるターゲットの複雑なアルゴリズム(またはライブラリ関数)を示す引数(たとえば、「scientific_library」)、ターゲットの複雑なアルゴリズムの特性(たとえば、「deadline」)、およびその特性の構成に対する選好を示すキーワード(たとえば、「HardReal-time」など)を含み得る。プラグマの例示的なセット400は、厳しいリアルタイム期限を有するように実行されるべきであるという科学的ライブラリアルゴリズムに対するコンパイル時の選好を示す第1のプラグマ402と、緩いリアルタイム期限を有するように実行されるべきであるという科学的ライブラリアルゴリズムに対するコンパイル時の選好を示す第2のプラグマ404と、適切であるときに日和見的にバッテリーの電力を節約し得るように実行されるべきであるという科学的ライブラリアルゴリズムに対するコンパイル時の選好を示す第3のプラグマ406と、15秒という期限とともに実行されるべきであるという科学的ライブラリアルゴリズムに対するコンパイル時の選好を示す第4のプラグマ408と、10分という期限とともに実行されるべきであるという科学的ライブラリアルゴリズムに対するコンパイル時の選好を示す第5のプラグマ410とを含み得る。
【００５５】
図5は、様々な態様とともに使用するのに適した例示的なアプリケーションプログラミングインターフェース(API)呼出しのセット500を示す。図4を参照して上で説明された例示的なプラグマとは異なり、そのようなAPI呼出しは、コンピューティングデバイス上で実行されるアプリケーションおよび/または複雑なアルゴリズムに対する様々なトレードオフ機能性のリアルタイムの呼出しを可能にし得る。例示として、科学的ライブラリと関連付けられるスカラー機能性が第1の行501aとともに開始されることがあり、タスクディスパッチャルーチンが行501bにおいて科学的ライブラリのためのスケジューラと関連付けられることがある。セット500中の各API呼出し502〜510は、様々なトレードオフがリアルタイムで要求されるようにするための、タスクディスパッチャを介した様々な呼出しを示し得る。例示的なセット500は、スカラー機能性に関する厳しいリアルタイム期限を強いるための第1のAPI呼出し502と、スカラー機能性に関する緩いリアルタイム期限を強いるための第2のAPI呼出し504と、スカラー機能性に関する緩い日和見的なバッテリーセーバー期限を強いるための第3のAPI呼出し506と、スカラー機能性に関する第1の数値的な期限(たとえば、15秒)を強いるための第4のAPI呼出し508と、スカラー機能性に関する第2の数値的な期限(たとえば、600秒)を強いるための第5のAPI呼出し510とを含み得る。
【００５６】
図4〜図5を参照して上で説明された例では、コンピューティングデバイスは、コンピューティングデバイス上で実行されるアプリケーションによって利用される複雑なアルゴリズムに対する期限(または実行速度)に関するトレードオフを利用するように構成される。しかしながら、態様の技法の他の可能な実装形態では、トレードオフ機能性は、アプリケーションによって実行される複雑なアルゴリズムの正確度および/または精度の構成に対処し得る。たとえば、期限と同様に、正確度の期待値が、APIを通じて、またはハードウェアレジスタを設定することによって、ディレクティブとして与えられ得る。たとえば、ライブラリ関数(たとえば、行列を乗算するための、ベクトル乗算のための複雑なアルゴリズムなど)が高い精度で実行されること、粗い精度で実行されること、および/またはアプリケーションに関して特に高い精度(たとえば、倍精度、2つの倍精度など)で実行されることが好まれることを示すために、プラグマが使用され得る。
【００５７】
図6Aは、トレードオフ機能性において定義されるように、かつ評価される現在の条件に基づいて、コンピューティングデバイス上で実行されるアプリケーションおよび/またはアプリケーションによって利用される複雑なアルゴリズムの構成を調整するための、コンピューティングデバイスのためのある態様の方法600を示す。様々な態様では、方法600は、関連するトレードオフ機能性に基づいて1つまたは複数の複雑なアルゴリズム(以下では単にライブラリ関数と呼ばれる)に対して調整を行うために、コンピューティングデバイスによって実行され得る。そのような調整(すなわち、「トレードオフ」)は、1つまたは複数の複雑なアルゴリズムを呼び出すアプリケーションの実行の間に継続的に行われ得る。たとえば、トレードオフは、ベクトル計算ライブラリ関数に対する各呼出しの実行の前に行われ得る。
【００５８】
ブロック602において、コンピューティングデバイスのプロセッサは、特定のライブラリ関数を利用するアプリケーションを実行する(たとえば、コンパイル時、ランタイム)ことを開始し得る。たとえば、上で説明されたように、アプリケーションは、ソーシャルメディアアプリケーション、ビデオゲームアプリケーション、または、大量のコンピューティングリソースを必要とするライブラリ(たとえば、線形代数ライブラリ関数、行列計算アルゴリズムなど)に対する内部的な呼出しを行い得る他のソフトウェアであり得る。ブロック604において、コンピューティングデバイスのプロセッサは、アプリケーションおよび/または特定のライブラリ関数(たとえば、API呼出し、コード中のディレクティブ、専用レジスタ値など)に対するトレードオフ設定を取得することができる。言い換えると、コンピューティングデバイスは、コンピューティングデバイスによってアプリケーションおよび/またはライブラリ関数の構成(たとえば、電力レベルに対する実行速度、熱エネルギーに対する実行速度、電力レベルに対する精度、熱エネルギーに対する精度など)を調整するための様々な変数、値、およびデータを示す、アプリケーションおよび/またはライブラリ関数に対するあるトレードオフ機能性(または複数のトレードオフ機能性または複数のトレードオフ設定)を取得することができる。たとえば、コンピューティングデバイスは、アプリケーションのランタイムの間にアプリケーションプログラミングインターフェース(API)呼出しを介してアプリケーションに対する第1のトレードオフ設定を取得し、コード中のディレクティブを介してアプリケーションに対する第2のトレードオフ設定を取得し、かつ/または、専用レジスタを介してアプリケーションに対する第3のトレードオフ設定を取得することができる。様々な態様では、ライブラリ関数は、機械学習アルゴリズム、複雑な数学的アルゴリズム、オーディオ分析アルゴリズム、グラフィクス操作アルゴリズム、および画像分析アルゴリズムと関連付けられ得る。
【００５９】
ブロック606において、コンピューティングデバイスのプロセッサは、所与の時間においてコンピューティングデバイスと関連付けられる様々な条件を評価し得る。ブロック606の動作についての追加の詳細が以下で説明される。いくつかの態様では、所与の時間は、アプリケーションまたはライブラリ関数が最初に実行される時間などの、アプリケーションおよび/またはライブラリ関数の初期構成を確立するために指定された初期時間であり得る。
【００６０】
決定ブロック614において、コンピューティングデバイスのプロセッサは、様々な評価に基づいてアプリケーションおよび/またはライブラリ関数の構成に対する調整(または「トレードオフ」)が行われる必要があるかどうかを決定することができる。たとえば、コンピューティングデバイスは、初期時間におけるコンピューティングデバイスと関連付けられる評価された条件に基づいて複数の取得されたトレードオフ設定のうちのトレードオフ設定がアプリケーションおよび/またはライブラリ関数の初期構成を調整するために利用されるべきであるかどうかを決定することができる。様々な評価に基づいてトレードオフが行われる必要はないとの決定に応答して(すなわち、決定ブロック614=「No」)、コンピューティングデバイスのプロセッサは、任意選択のブロック622において、アプリケーションおよび/または特定のライブラリ関数をデフォルトの設定に戻すことができる。アプリケーションおよび/またはライブラリ関数はすでにデフォルトの設定で動作するように構成されていることがあるので、任意選択のブロック622における動作は任意選択であり得る。様々な評価に基づいてトレードオフが行われる必要があるとの決定に応答して(すなわち、決定ブロック614=「Yes」)、コンピューティングデバイスのプロセッサは、ブロック618において、取得されたトレードオフ設定に基づいて、アプリケーションおよび/またはライブラリ関数の構成を調整することができる。ブロック618の動作についての追加の詳細が以下で説明される。
【００６１】
ブロック618または622の動作のいずれかの実行に応答して、コンピューティングデバイスのプロセッサは、ブロック624において、特定のライブラリ関数への任意の呼出しを含むアプリケーションを実行することができる。コンピューティングデバイスは、ブロック606の評価動作を続けることができる。
【００６２】
図6Bは、評価された現在の条件に基づいてトレードオフ機能を利用するための、コンピューティングデバイスのためのある態様の方法650を示す。方法650は、コンピューティングデバイスが様々な条件を評価して様々な評価に基づいてアプリケーションおよび/または関連する複雑なアルゴリズム(またはライブラリ関数)の構成を調整し得る方式のための、詳細な動作を含むことを除き、図6Aを参照して上で説明された方法600と同様である。
【００６３】
ブロック602〜604の動作は、図6Aを参照して上で説明された同様の番号のブロックの動作と同様であり得る。任意選択のブロック652において、コンピューティングデバイスのプロセッサは、たとえば、ある期間の中、待ち行列に入れられたジョブの中などで行われ得る、特定のライブラリ関数および/または他の関数への呼出しの数を決定することによって、アプリケーション全体の作業負荷を評価することができる。いくつかの態様では、そのような評価は、アプリケーションおよび/またはライブラリ関数がコンピューティングデバイスによって初めて使用されるときなどの、初期時間に行われ得る。
【００６４】
任意選択のブロック654において、コンピューティングデバイスのプロセッサは、コンピューティングデバイスが電源に差し込まれているかどうか、および/またはワイヤレスルータ(たとえば、Wi-Fi(登録商標)ルータ)に接続されているかどうかなどの、作業負荷の処理に影響する外部条件を評価することができる。任意選択のブロック656において、コンピューティングデバイスのプロセッサは、プロセッサに結合されている再充電可能なバッテリーの現在のバッテリーレベルをポーリングすることなどによって、デバイスの利用可能な電力レベルを評価することができる。
【００６５】
任意選択のブロック658において、コンピューティングデバイスのプロセッサは、現在のデバイスの温度および/または特定のデバイスユニットの温度(たとえば、コアの温度など)を特定するためにプロセッサに結合されたサーミスタまたは他の温度センサにポーリングすることなどによって、デバイスの熱エネルギーレベルを評価することができる。決定ブロック614において、図6Aに関する同様の番号のブロックについて上で説明されたように、コンピューティングデバイスのプロセッサは、様々な評価に基づいてトレードオフが行われる必要があるかどうかを決定することができる。
【００６６】
様々な評価に基づいてトレードオフが行われる必要があるとの決定に応答して(すなわち、決定ブロック614=「Yes」)、コンピューティングデバイスのプロセッサは、任意選択のブロック660〜664の動作のいずれかまたはすべてを実行することができる。具体的には、コンピューティングデバイスのプロセッサは、任意選択のブロック660において、アプリケーションおよび/または特定のライブラリ関数の実行を二次的なプロセッサにディスパッチする(すなわち、割り当て直す、または移す)ことができる。さらに、または代替的に、コンピューティングデバイスのプロセッサは、任意選択のブロック662において、取得されたトレードオフ設定に基づいて、アプリケーションおよび/または特定のライブラリ関数の正確度の構成および/または精度の構成を調整することができる。任意選択のブロック664において、コンピューティングデバイスのプロセッサは、取得されたトレードオフ設定に基づいて、アプリケーションおよび/または特定のライブラリ関数の実行速度(またはランタイム)を調整することができる。任意選択のブロック660〜664または任意選択のブロック622の動作のいずれかの実行に応答して、コンピューティングデバイスのプロセッサは、ブロック624において、特定のライブラリ関数への任意の呼出しを含むアプリケーションを実行し、任意選択のブロック652において、評価動作を続けることができる。
【００６７】
上で説明されたように、コンピューティングデバイスは、アプリケーションおよび/またはアプリケーションによって利用される複雑なアルゴリズム、ならびに、アプリケーションおよび/またはアルゴリズムの部分(計算負荷または計算カーネルとも呼ばれる)を実行するために割り当てられ得るターゲットの処理コアの、特性または構成を効率的に調整するように構成され得る。アプリケーションによって呼び出される計算負荷のそのような効率的な調整および分配は、様々な情報を必要とすることがある。たとえば、コンピューティングデバイスは、ハードウェアの安定状態での特性および能力のデータ(たとえば、ヘテロジニアスコアおよび/またはメモリのタイプ、数、使用率などについてのデータ)、様々なアプリケーションのための複雑なアルゴリズムに対する許容可能な動作パラメータ(たとえば、期限/実行速度、精度レベル、正確度レベルなど)、ハードウェアリソースの現在の(または過渡的な)ステータス(すなわち、ヘテロジニアスコアの使用率または利用可能性など)、および/または、複雑なアルゴリズム(たとえば、アプリによって呼び出される計算カーネル)を実行する、またはその実行を要求するときのアプリケーションによるリソース使用(たとえば、キャッシュミス、メモリアクセスパターン、帯域幅利用率、例外および分岐の頻度など)に関する履歴データを利用し得る。いくつかの態様では、アプリケーションおよび/またはアプリケーションによって使用される特定の複雑なアルゴリズムの実行と関連付けられるリソース使用データは、リソース履歴サブシステムに与えられ得る。そのような情報により、アプリケーションおよび/または複雑なアルゴリズムは、コンピューティングデバイス内のスケジューラおよび負荷分配機能などによって、調整され、かつ/または異なるヘテロジニアスコアに割り当てられ得る。
【００６８】
図7Aは、アプリケーションおよび/またはアプリケーションによって利用される複雑なアルゴリズムの実行を調整し、指示し、スケジューリングするための機能性などの、様々な態様の技法を実施するためにコンピューティングデバイスによって使用され得る基本モジュールアーキテクチャ700を示す。そのようなモジュールアーキテクチャ700は、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズム(「計算カーネル」とも呼ばれる)をどのように、いつ、かつ/またはどこで実行するかをコンピューティングデバイスが決断するためのデータ(たとえば、基準)を提供する、様々なモジュールを含み得る。言い換えると、モジュールアーキテクチャ700のモジュールは、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムを実行するための精度、正確度、実行速度、および/またはターゲットコアをコンピューティングデバイスがどのように調整し得るかを特定するために使用され得る。
【００６９】
モジュールアーキテクチャ700は、メモリ帯域幅、様々なコアの周波数などの、ハードウェアについての情報を提供するように構成されるシステム静的情報モジュール702と、特定のアプリケーションに対する要件(たとえば、結果がどれだけ速く必要とされるか、どれだけ正確な結果が必要とされるかなど)を示すデータを提供するように構成されるアプリケーション情報モジュール704と、プロセッサ(またはコア)リソースのうちのどれだけがコンピューティングデバイスによってサポートされる他のプロセスによって現在使用されているか、メモリ帯域幅のうちのどれだけが使用されているかなどを示すデータを提供するように構成されるシステム過渡情報モジュール710とを含み得る。モジュールアーキテクチャ700はさらに、モジュール702〜710からの様々な情報を利用してシステムにおいて実行されるアプリケーションによって呼び出される複雑なアルゴリズム(または計算カーネル)を割り当てるべき処理コアを選択することができる、スケジューラおよび負荷分配器モジュール712を含み得る。実行の間、アプリケーションは、実行されるべき複雑なアルゴリズムについての情報をスケジュールおよび負荷分配器モジュール712に提出することができ、スケジュールおよび負荷分配器モジュール712は次いで、作業負荷が送信されるべき処理コア、および/または作業負荷がどのように実行されるべきか(たとえば、調整された正確度/精度など)を特定するように、モジュール702〜710に問い合わせ得る。
【００７０】
モジュールアーキテクチャ700はまた、アプリケーションのライブラリおよび他の機能性の背後にあるコードであり得る、アプリケーション計算カーネルモジュール714を含み得る。言い換えると、アプリケーション計算カーネルモジュール714は、実行のために様々なコアに提出されることになる複雑なアルゴリズムの命令であり得る。さらに、コンピューティングデバイスは、スケジューラおよび負荷分配器モジュール712を介して様々な作業負荷を割り当てられ得るアプリケーションプロセッサ、グラフィクス処理装置(GPU)、デジタルシグナルプロセッサ(DSP)、および/または他の処理ユニットなどの、1つまたは複数の処理ユニットであり得る様々なヘテロジニアスコア716を含み得る。
【００７１】
いくつかの態様では、アプリケーション情報モジュール704は、アプリケーションの複雑なアルゴリズムに対して機械学習機能性を実装するのに適した、精度要件学習モジュール706および/またはリアルタイム要件学習モジュール708を含み得る。精度要件学習モジュール706は、コンピューティングデバイス上で実行されるアプリケーションによって利用される様々な複雑なアルゴリズムに対する、ユーザに好まれる、要求される、または望まれる精度もしくは正確度を学習するために、コンピューティングデバイスにおいて受信されるデータを記憶し、取得し、別様に利用するように構成され得る。同様に、リアルタイム要件学習モジュール708は、要求される期限、または複雑なアルゴリズムに対して要求される(または望まれる)実行速度を学習するためにデータを利用し得る。受け取られたユーザ入力のタイミング、ユーザ入力がプロンプトに応答して少しでも受け取られるかどうか、および、様々なコア上でのアプリケーション(および、したがって関連する様々な複雑なアルゴリズム)の実行にユーザがどのように応答しているかを示す他のデータなどの、ユーザから受け取られた情報が、モジュール706〜708において使用され得る。さらに、そのようなデータは、アプリケーションおよび/または複雑なアルゴリズムの実行に対する継続的な観察されるユーザ入力に基づいて、経時的に上書きされ、更新され、かつ/または調整され得る。たとえば、経時的に、精度要件学習モジュール706によって利用されるデータは、顔タギングアルゴリズムに対するより高速な実行速度がユーザによって要求または要望されることを示し得る、不寛容なユーザ入力(たとえば、複雑なアルゴリズムが実行される間のタッチスクリーンへの複数のタップなど)と符合し得る。
【００７２】
いくつかの態様では、モジュール706〜708によって利用される学習機能性はまた、上で説明されたようなトレードオフ機能性または論理を利用し得る。たとえば、API呼出し、専用レジスタ、および/またはインラインディレクティブは、様々なアプリケーションおよび/または複雑なアルゴリズムの現在の実行にユーザがどのように応答しているかを決定するときにモジュール706〜708によって使用されるパラメータを制御するために使用され得る。
【００７３】
図7Bは、ユーザ応答に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの構成を調整するための、コンピューティングデバイスのための一般的な態様の方法750を示す。方法750は、アプリケーションおよび/またはライブラリ関数の構成の妥当性を示唆する、経時的に受け取られるユーザ入力に基づいて、アプリケーションおよび/または1つまたは複数の複雑なアルゴリズム(ライブラリ関数と単に以下で呼ばれる)に対する調整を行うためにコンピューティングデバイスによって実行され得る。言い換えると、調整は、アプリケーションの現在の構成(たとえば、実行速度、精度、正確度など)またはライブラリ関数の現在の構成に左右されるアプリケーションの性能にユーザがどれだけ寛容であるかに基づき得る。上で説明されたように、そのような調整は、アプリケーションの実行の間に継続的に行われ得る。いくつかの態様では、アプリケーションおよび/またはライブラリ関数の初期構成は、図3〜図6Bを参照して上で説明されたようなトレードオフ機能性に基づくことがあるが、受け取られたユーザ入力(たとえば、「リフレッシュ」ボタンへの繰り返されるタッチ入力など)に基づいて、コンピューティングデバイスは、アプリケーションに対する、および/または個々のライブラリ関数に対するそのような初期のトレードオフ機能性によって定義される構成を上書きし、または別様に変更するように構成され得る。
【００７４】
コンピューティングデバイスのプロセッサは、図6Aに関して同様の番号のブロックについて上で説明されたように、ブロック602および624の動作を実行し得る。ブロック752において、コンピューティングデバイスのプロセッサは、アプリケーションの性能に対するユーザ応答(たとえば、タッチ入力など)を示す信号を取得し得る。そのような取得される信号は、コンピューティングデバイスのタッチスクリーン上でのタッチ入力、ボタン押下、センサからのデータ、別のアプリケーションの起動と関連付けられる状態変化、アプリケーションの状態の変化(たとえば、中断されている、またはユーザが離れて操作しているのでバックグラウンドに置かれている、など)、および入力が予想されるときにプロンプトまたは状況に応答するユーザ入力がないことのうちの1つまたは複数を含み得る。たとえば、コンピューティングデバイスは、ユーザがアプリケーションの現在の性能に寛容である、またはそれを別様に受け入れるかどうかを特定するために各々が評価され得る、コンピューティングデバイスのタッチスクリーン上での最近のタッチ入力、テキストフィールドまたはフォームにおけるテキストの入力または削除、ロッカーボタンの押下、スクリーン/アプリケーションを「リフレッシュする」ための要求、カメラ入力、マイクロフォン入力、アプリケーションおよび/または他のアプリケーションとの対話(たとえば、応答時間が十分に速いかどうか、アプリケーションの結果が十分正確であるかどうかなど)などを取得し得る。一般に、アプリケーションの性能は、アプリケーションと関連付けられる結果を得るための実行速度、結果の正確度、および結果の精度のうちの少なくとも1つを含み得る。
【００７５】
決定ブロック754において、コンピューティングデバイスのプロセッサは、取得された情報に基づいて、ユーザがアプリケーションの性能に寛容であるかどうかを決定し得る。たとえば、アプリケーションが動作を開始してから検出されたスクリーン上でのタップの数が、苛立ち、怒り、無関心などのしるしをユーザが見せているかどうかを示すために評価され得る。受け取られる入力の頻度または検出される入力の数は、ある期間に対するユーザの寛容さを示す事前に定められた閾値と比較され得る。そのような閾値は、コンピューティングデバイスとのユーザの対話の継続的な評価に基づいて、経時的に更新され得る。いくつかの態様では、コンピューティングデバイスは、取得された信号を評価し、専用の論理、ソフトウェア、モジュール、および/または、ユーザの挙動を分析するためのサブシステムなどのコンピューティングデバイス上で実行される他の機能性を使用して、性能に対するユーザの寛容さについての決定を行うことができる。
【００７６】
ユーザが取得された信号に基づいてアプリケーションの性能に寛容ではないとの決定に応答して(すなわち、決定ブロック754=「No」)、コンピューティングデバイスのプロセッサは、ブロック756において、アプリケーションのその後の性能を改善するように、アプリケーションおよび/またはアプリケーションによって使用される特定のライブラリ関数の構成を調整することができる。たとえば、以下でより詳細に説明されるように、コンピューティングデバイスは、アプリケーションによって呼び出されるようなライブラリ関数に対する実行速度の設定を変更することによって、ライブラリ関数を使用するためのアプリケーションの構成を調整することができる。別の例として、コンピューティングデバイスは、より高精度の/正確な結果を生み出すためにアプリケーションによって使用されるベクトル計算アルゴリズムと関連付けられる精度の設定を調整し、アプリケーションの応答時間を改善する(たとえば、遅延を減らす)ために計算関数に対する実行速度の設定を調整し、異なるコアで実行されるように処理集約的なライブラリ呼出しを構成する(たとえば、DSP、GPUなどに移す)ことができる。いくつかの態様では、上で説明されたようなトレードオフ機能性は、アプリケーションおよび/またはライブラリ関数に対してどのように調整が行われ得るか、またはどれだけの調整が行われ得るかに関する見識をコンピューティングデバイスに提供するためのクエリであり得る。
【００７７】
取得された信号に基づいて、ユーザがアプリケーションの性能に寛容であるとの決定に応答して(すなわち、決定ブロック754=「Yes」)、コンピューティングデバイスのプロセッサは、たとえば、より低い精度を使用するようにライブラリ関数を設定すること(たとえば、計算のためのより低精度の浮動小数点の設定など)、より低い実行速度を使用するようにライブラリ関数を設定すること(たとえば、結果を生み出す際のより大きな遅延)、および/またはライブラリ関数が実行される処理コアを変更することなどによって、任意選択のブロック758においてアプリケーションの性能を低下させる(または下げる)ように、アプリケーションおよび/または特定のライブラリ関数の構成を調整することができる。このようにして、コンピューティングデバイスは、ユーザの寛容さの閾値を構成が下回ったことをユーザが示すまで、アプリケーションおよび/またはライブラリ関数の構成によって引き起こされるコンピューティングデバイス上での負荷を減らすことを試み得る。
【００７８】
ブロック756と任意選択のブロック758のいずれかの動作の実行に応答して、コンピューティングデバイスのプロセッサは、ブロック760において、以前の構成におけるアプリケーションの性能に対するユーザ応答(または取得される信号)と、その後の取得されるユーザ入力(または信号)のその後の評価において使用するための他の外部変数(たとえば、時間帯、コンピューティングデバイス上で同時に実行される他のアプリケーション、センサ入力など)とを示すデータを記憶し得る。いくつかの態様では、記憶され使用され得る他の例示的なデータ(たとえば、トリガ)は、アプリケーションについてのユーザの挙動を示すデータ、アプリケーションがソーシャルネットワーキングアプリケーションであるときのユーザデータフィード、アプリケーションが健康(または健康管理)に関するときのユーザの健康パターン、ユーザの年齢、性別、および/または他の属性情報であり得る。このようにして、アプリケーションおよび/またはコンピューティングデバイスのアプリケーションと関連付けられる様々な複雑なアルゴリズムに対して設定され得る構成を改良するために以前の体験に継続的に依存する、機械学習技法が可能にされ得る。コンピューティングデバイスは、ブロック624において、特定のライブラリ関数に対する任意の呼出しを含むアプリケーションを実行することで開始する方法750の動作を繰り返し得る。
【００７９】
図8Aは、ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの精度の構成を調整するための、コンピューティングデバイスのための態様の方法800を示す。方法800は、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズム(すなわち、ライブラリ関数)の精度または正確度の構成を調整することに焦点が当てられ得ることを除き、上で説明された方法750と同様であり得る。たとえば、ユーザがライブラリ関数の結果の正確度および/または精度(たとえば、顔タギングの正確度)のレベルに寛容ではないことを示すユーザ入力の受信に応答して、コンピューティングデバイスは、アプリケーションのその後の動作においてより許容可能な顔タギングの結果を得るために、ライブラリ関数の精度または正確度の構成を変更することができる。
【００８０】
コンピューティングデバイスのプロセッサは、図6Aに関して同様の番号のブロックについて上で説明されたように、ブロック602の動作を実行し得る。ブロック802において、コンピューティングデバイスのプロセッサは、ライブラリ関数および/またはアプリケーションと関連付けられる記憶されているデータをクエリすることなどによって、アプリケーションおよび/または特定のライブラリ関数に対する現在の精度の設定を特定することができる。図6Aに関して同様の番号のブロックについて上で説明されたように、ブロック624において、コンピューティングデバイスのプロセッサは、特定のライブラリ関数に対する任意の呼出しを含むアプリケーションを実行し得る。コンピューティングデバイスのプロセッサは、図7Bに関して同様の番号のブロックについて上で説明されたように、ブロック752において信号取得動作を実行し得る。
【００８１】
決定ブロック806において、コンピューティングデバイスのプロセッサは、ユーザ応答を示す取得された情報に基づいて、ユーザがアプリケーションの出力を無視したかどうかを決定し得る。たとえば、コンピューティングデバイスは、ライブラリ関数に関する結果の完了および提示からある期間内に任意のユーザ応答(たとえば、ボタンのクリックなど)が受け取られたかどうかを決定し得る。そのような結果を無視することは、不適当であること、または不正確であることが原因で、ユーザが結果に対して注意を払っていないことを示し得る。ユーザ応答を示す取得された信号に基づいて、ユーザがアプリケーションの出力を無視していないとの決定に応答して(すなわち、決定ブロック806=「No」)、コンピューティングデバイスのプロセッサは、決定ブロック808において、ユーザ応答において示される取得された信号に基づいて、アプリケーションの出力(たとえば、ライブラリ関数を介して提供されるような出力)をユーザが訂正したかどうかを決定し得る。たとえば、コンピューティングデバイスは、結果の提示の後に受け取られる入力を評価して、ユーザが「backspace」を押したかどうか、「delete」を押したかどうか、上書き情報を提供したかどうか、および/または、結果に対する訂正もしくは削除であると見なされ得る他の入力を提供したかどうかを特定することができる。ユーザ応答を示す取得された信号に基づいて、ユーザがアプリケーションの出力を訂正していないとの決定に応答して(すなわち、決定ブロック808=「No」)、コンピューティングデバイスのプロセッサは、時間および/またはエネルギーを節約するために関数のその後の実行においてより安価であるがより不正確または低精度である計算が行われ得ることを示すように、ライブラリ関数と関連付けられる記憶されている設定または変数を変更することなどによって、任意選択のブロック812において、アプリケーションおよび/または特定のライブラリ関数に対する現在の精度の設定を下げることができる。
【００８２】
ユーザ応答を示す取得された信号に基づいてユーザがアプリケーションの出力を訂正したとの決定に応答して(すなわち、決定ブロック808=「Yes」)、または、ユーザが出力を無視したとの決定に応答して(すなわち、決定ブロック806=「Yes」)、コンピューティングデバイスのプロセッサは、今後の計算がより高い精度を利用すべきであり、よってより多くの時間および/または処理リソースを必要とすることを示すように、記憶されている構成変数の値を変更することなどによって、ブロック810において、アプリケーションおよび/または特定のライブラリ関数に対する現在の精度の設定を上げることができる。任意選択のブロック811において、コンピューティングデバイスのプロセッサは、アプリケーションおよび/またはライブラリ関数と関連付けられる実行コアの設定を変更することなどによって、アプリケーション(たとえば、アプリケーションの一部分など)および/または特定のライブラリ関数を実行するために使用される処理コアを変更することができる。たとえば、コンピューティングデバイスは、ライブラリ関数の今後の実行がコンピューティングデバイス内の異なるコアおよび/または特定のコア(たとえば、DSP、GPUなど)で扱われるべきであることを示すように、実行コアの設定(たとえば、記憶されている変数、フラグなど)を変更することができる。
【００８３】
任意選択のブロック811または任意選択のブロック812の動作の実行に応答して、コンピューティングデバイスのプロセッサは、ブロック814において、以前の精度の設定または他の外部変数におけるアプリケーションの性能に対するユーザ応答を示すデータを記憶し得る。ブロック814における動作は、明示的に精度の設定に関連していることを除き、図7Bに関して同様の番号のブロックについて上で説明されたようなブロック760の動作と同様であり得る。コンピューティングデバイスは、ブロック624において、特定のライブラリ関数に対する任意の呼出しを含むアプリケーションを実行することで開始する方法800の動作を繰り返し得る。
【００８４】
図8Bは、ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの精度の構成を調整するための、コンピューティングデバイスのための態様の方法850を示す。方法850は、実行されているアプリケーションと関連付けられる複数のライブラリ関数のいずれもがユーザ入力に基づいて調整され得ることを示す動作を含むことを除き、図8Aを参照して上で説明された方法800と同様である。言い換えると、コンピューティングデバイスは、アプリケーションの実行に対するユーザの寛容さを改善するために、個々のライブラリ関数のインテリジェントな選択を継続的に行って調整することができる。いくつかの態様では、そのような選択は、アプリケーションの実行の間のユーザの体験を改善するための最良の選択に関する、事前に定められたリストまたはクラウドが源の情報に基づき得る。たとえば、同じアプリケーションを実行する多数のデバイス上でのユーザの体験の集合体をクラウドベースで入手できる場合、コンピューティングデバイスは、可能性がある最も効果的な調整を特定するために、様々なユーザ体験のクラウドの網羅的な処理から利益を得ることがある。いくつかの態様では、選択は、本明細書で説明されるようにトレードオフ機能性などを介して示されるような、ユーザのヒントに基づいて行われ得る。
【００８５】
ブロック602'において、コンピューティングデバイスのプロセッサは、複数のライブラリ関数を利用するアプリケーションの使用を開始し得る(たとえば、コンパイル時、ランタイム)。ブロック802'において、コンピューティングデバイスのプロセッサは、アプリケーションおよび/または複数のライブラリ関数の各々に対する現在の精度の設定を特定し得る。ブロック624'において、コンピューティングデバイスのプロセッサは、複数のライブラリ関数に対する任意の呼出しを含むアプリケーションを実行し得る。ブロック602'、802'、および624'の動作は、アプリケーションに関連して利用される複数のライブラリ関数に注目することを除き、上で説明されたブロック602、802、および624の動作と同様であり得る。図7Bに関して同様の番号のブロックについて上で説明されたように、ブロック752において、コンピューティングデバイスのプロセッサは、アプリケーションの性能に対するユーザ応答(たとえば、タッチ入力など)を示す信号を取得し得る。ブロック852'において、コンピューティングデバイスのプロセッサは、複数のライブラリ関数のうちの1つを選択し得る。たとえば、コンピューティングデバイスは、選択すべき次のライブラリ関数を選ぶために、待ち行列、リスト、または他のシナリオを利用し得る。
【００８６】
コンピューティングデバイスのプロセッサは、図8Aに関して同様の番号のブロックについて上で説明されたように、決定ブロック806〜808の動作を実行し得る。ユーザ入力に基づいてユーザがアプリケーションの出力を無視したとの決定に応答して(すなわち、決定ブロック806=「Yes」)、または、ユーザ入力に基づいてユーザがアプリケーションの出力を訂正したとの決定に応答して(すなわち、決定ブロック808=「Yes」)、コンピューティングデバイスのプロセッサは、任意選択のブロック854において、以前に選択されたライブラリ関数に対する精度の設定をリセットすることができる。ブロック810'において、コンピューティングデバイスのプロセッサは、選択されたライブラリ関数に対する現在の精度の設定を上げることができる。ブロック810'の動作は、コンピューティングデバイスが複数のライブラリ関数のうちの選択された1つに対する精度の設定を上げ得ることを除き、上で説明されたブロック810の動作と同様である。任意選択のブロック811'において、コンピューティングデバイスのプロセッサは、選択されたライブラリ関数を実行するための処理コアを変更することができる。任意選択のブロック811'の動作は、コンピューティングデバイスが複数のライブラリ関数のうちの選択された1つのための処理コアを変更し得ることを除き、上で説明された任意選択のブロック811の動作と同様である。
【００８７】
ユーザがアプリケーションの出力を訂正していないとの決定に応答して(すなわち、決定ブロック808=「No」)、コンピューティングデバイスのプロセッサは、任意選択のブロック812'において、選択されたライブラリ関数に対する現在の精度の設定を下げることができる。精度の設定はすでにデフォルトの設定または最低の設定であることがあるので、任意選択のブロック812'の動作は任意選択であり得る。任意選択のブロック811'または任意選択のブロック812'の動作の実行に応答して、コンピューティングデバイスは、図8Aに関して同様の番号のブロックについて上で説明されたようにブロック814の動作を実行し、ブロック624'において、特定のライブラリ関数に対する呼出しを含むアプリケーションを実行することによって、方法850の動作を繰り返すことができる。
【００８８】
図9Aは、ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの実行速度の構成を調整するための、コンピューティングデバイスのためのある態様の方法900を示す。様々な態様では、方法900は、アプリケーションおよび/またはライブラリ関数の構成の妥当性を示唆する、経時的に受け取られるユーザ入力に基づいて、アプリケーションおよび/または1つまたは複数の複雑なアルゴリズム(ライブラリ関数と単に以下で呼ばれる)に対する調整を行うためにコンピューティングデバイスによって実行され得る。方法900は、精度の構成ではなく実行速度の構成に対する調整に対処するものであることを除き、上で説明された方法800と同様であり得る。
【００８９】
コンピューティングデバイスのプロセッサは、図6Aに関して同様の番号のブロックについて上で説明されたように、ブロック602の動作を実行し得る。ブロック902'において、コンピューティングデバイスのプロセッサは、アプリケーションおよび/または特定のライブラリ関数に対する現在の実行速度の設定を特定し得る。コンピューティングデバイスのプロセッサは、図6Aに関して同様の番号のブロックについて上で説明されたようにブロック624の動作を実行し、図7Bに関して同様の番号のブロックについて上で説明されたようにブロック752の動作を実行し得る。決定ブロック904において、コンピューティングデバイスのプロセッサは、ユーザ応答を示す取得された情報に基づいて、ユーザがアプリケーションから離れて操作しているかどうかを決定し得る。たとえば、ユーザ入力は、他のアプリケーションを起動させるためのグラフィカル要素、オペレーティングシステムの焦点を異なるアプリケーションへ変更させる要素などをユーザがクリックしたかどうかを特定するために、評価され得る。
【００９０】
ユーザがアプリケーションから離れて操作しているとの決定に応答して(すなわち、決定ブロック904=「Yes」)、コンピューティングデバイスのプロセッサは、任意選択の決定ブロック906において、ユーザ応答を示す取得された信号に基づいて、ユーザがアプリケーションに戻って操作しているかどうかを決定し得る。たとえば、コンピューティングデバイスは、タッチ入力を評価して、以前に別のアプリケーションへと焦点を切り替えた後に、ユーザがアプリケーションに戻ってクリックしたかどうかを特定し得る。いくつかの態様では、ユーザがアプリケーションに戻って操作しているとの決定に応答して(すなわち、任意選択の決定ブロック906=「Yes」)、コンピューティングデバイスのプロセッサは、任意選択の決定ブロック907において、ユーザがアプリケーションに戻って操作するのに要した時間が事前に定められた時間の閾値を超えるかどうかを決定し得る。たとえば、コンピューティングデバイスは、ユーザがアプリケーションから離れていた(たとえば、別のアプリケーションを使用していた、など)時間の量を特定し、その離れていた時間を、システムの性能についてのユーザの苛立ちまたは受け入れに対する基準として設定される時間の量(たとえば、秒、ミリ秒など)と比較し得る。アプリケーションに戻って操作する前にユーザが事前に定められた閾値の時間を超えたとの決定に応答して、コンピューティングデバイスは、ユーザを満足させるためにアプリケーションの性能が上げられる必要があると決定し得る。
【００９１】
ユーザがアプリケーションから離れて操作していないとの決定に応答して(すなわち、決定ブロック904=「No」)、またはユーザがアプリケーションに戻って操作しているとの決定に応答して(すなわち、任意選択の決定ブロック906=「Yes」)、またはユーザがアプリケーションに戻って操作するまでの時間が事前に定められた閾値を超えていないとの決定に応答して(すなわち、任意選択の決定ブロック907=「No」)、コンピューティングデバイスのプロセッサは、決定ブロック908において、取得された信号またはユーザ応答に基づいて、ユーザがリフレッシュ(たとえば、リフレッシュ機能性)を使ったかどうか、または他のボタンを繰り返し押したかどうかを決定し得る。コンピューティングデバイスのプロセッサは、通常のクリック/入力を超える入力の数を評価するための事前に定められた閾値を利用して、通常の使用と一致しない対話を特定し得る。
【００９２】
ユーザがリフレッシュを使った、もしくは他のボタンを繰り返し押したとの決定に応答して(すなわち、決定ブロック908=「Yes」)、またはユーザがアプリケーションに戻って操作していないとの決定に応答して(すなわち、任意選択の決定ブロック906=「No」)、またはユーザがアプリケーションに戻って操作するまでの時間が事前に定められた閾値を超えたとの決定に応答して(すなわち、任意選択の決定ブロック907=「Yes」)、コンピューティングデバイスのプロセッサは、ブロック910において、ライブラリ関数と関連付けられる変数値を設定することなどによって、アプリケーションおよび/または特定のライブラリ関数に対する現在の実行速度の設定を上げることができる。言い換えると、ユーザは現在の構成について満足していない可能性が高いので、実行速度を上げることによって、アプリケーションを実行するための(またはその実行を完了するための)時間は減り得る。任意選択のブロック811において、コンピューティングデバイスのプロセッサは、アプリケーションおよび/または特定のライブラリ関数を実行するためのコアを変更し得る。
【００９３】
ユーザがリフレッシュを使っていない、または他のボタンを繰り返し押していないとの決定に応答して(すなわち、決定ブロック908=「No」)、コンピューティングデバイスのプロセッサは、任意選択のブロック912において、アプリケーションおよび/または特定のライブラリ関数に対する現在の実行速度の設定を下げることができる。言い換えると、ユーザは現在の構成について満足している可能性が高いので、実行速度を下げることによって、アプリケーションを実行するための(またはその実行を完了するための)時間は増え得る。任意選択のブロック912の動作は、アプリケーションおよび特定のライブラリ関数に対する実行速度がすでに最小の実行速度であるとき、任意選択であり得る。
【００９４】
任意選択のブロック911または任意選択のブロック912の動作のいずれかの実行に応答して、コンピューティングデバイスのプロセッサは、ブロック914において、以前の実行速度の設定または他の外部変数におけるアプリケーションの性能に対するユーザ応答を示すデータを記憶し得る。コンピューティングデバイスのプロセッサは、ブロック914の動作が実行速度の設定に関することを除き、図7Bに関して上で説明された方法750のブロック760の動作と同様にブロック914の動作を実行し得る。コンピューティングデバイスは、ブロック624において、特定のライブラリ関数に対する任意の呼出しを含むアプリケーションを実行することで開始する方法900の動作を繰り返し得る。
【００９５】
図9Bは、ユーザ入力に基づいて、アプリケーションおよび/またはアプリケーションによって使用される複雑なアルゴリズムの実行速度の構成を調整するための、コンピューティングデバイスのためのある態様の方法950を示す。方法950は、実行されているアプリケーションと関連付けられる複数のライブラリ関数のいずれもがユーザ入力に基づいて調整され得ることを示す動作を含むことを除き、図9Aを参照して上で説明された方法900と同様である。さらに、方法950は、精度の構成ではなく実行速度の構成に対する調整に対処するものであることを除き、上で説明された方法850と同様であり得る。
【００９６】
コンピューティングデバイスのプロセッサは、図8Bに関して同様の番号のブロックについて上で説明されたように、ブロック602'の動作を実行し得る。ブロック902'において、コンピューティングデバイスのプロセッサは、アプリケーションおよび/または複数のライブラリ関数の各々に対する現在の実行の設定を特定し得る。ブロック902'の動作は、アプリケーションに関連して利用される複数のライブラリ関数に注目することを除き、上で説明されたブロック902の動作と同様であり得る。コンピューティングデバイスは、図8Bに関して同様の番号のブロックについて上で説明されたようにブロック624'の動作を実行し、図7Bに関して上で説明されたようにブロック752の動作を実行し、図8Bに関して上で説明されたようにブロック852の動作を実行し、図9Aに関して上で説明されたように決定ブロック904〜908の動作を実行し得る。
【００９７】
ユーザがアプリケーションに戻って操作していないとの決定に応答して(すなわち、任意選択の決定ブロック906=「No」)、またはユーザがアプリケーションに戻って操作するまでの時間が事前に定められた閾値を超えたとの決定に応答して(すなわち、任意選択の決定ブロック907=「Yes」)、またはユーザがリフレッシュを使った、もしくは他のボタンを繰り返し押したとの決定に応答して(すなわち、決定ブロック908=「Yes」)、コンピューティングデバイスのプロセッサは、任意選択のブロック952において、以前に選択されたライブラリ関数に対する現在の実行速度の設定をリセットし、ブロック910'において、選択されたライブラリ関数に対する現在の実行速度の設定を下げることができる。言い換えると、任意選択のブロック952の任意選択の動作は、以前に選択されたライブラリ関数の以前の成功しなかった再構成を取り消すために実行され得る。いくつかの態様では、コンピューティングデバイスは、ユーザの体験を改善する調整を見つけることを試みるために、単に以前の再構成をやめて次のライブラリ関数に移ることができる。任意選択のブロック811'において、コンピューティングデバイスのプロセッサは、図8Bを参照して上で説明されたように選択されたライブラリ関数を実行するためのコアを変更することができる。
【００９８】
ユーザがリフレッシュを使っていない、または他のボタンを繰り返し押していないとの決定に応答して(すなわち、決定ブロック908=「No」)、コンピューティングデバイスのプロセッサは、任意選択のブロック912'において、選択されたライブラリ関数に対する現在の実行速度の設定を上げることができる。任意選択のブロック811'または任意選択のブロック912'の動作の実行に応答して、コンピューティングデバイスのプロセッサは、ブロック914において、以前の実行速度の設定または他の外部変数におけるアプリケーションの性能に対するユーザ応答を示すデータを記憶し得る。コンピューティングデバイスは、ブロック624'において、特定のライブラリ関数に対する任意の呼出しを含むアプリケーションを実行することで開始する方法950の動作を繰り返し得る。
【００９９】
パーソナルコンピュータおよびラップトップコンピュータを含む様々な形態のコンピューティングデバイスが、図2〜図9Bを参照して上で説明された態様を含む、様々な態様を実装するために使用され得る。例示的なラップトップコンピューティングデバイス1000が、図2〜図9Bを参照して上で説明された態様を含む、様々な態様を実装するために使用され得る。多くのラップトップコンピューティングデバイス1000は、コンピュータのポインティングデバイスとして働くタッチパッドタッチ面1014を含み、したがって、タッチスクリーンディスプレイを備えたモバイルコンピューティングデバイス上で実施されるものと同様のドラッグ、スクロール、およびフリックジェスチャーを受け取ることができる。そのようなラップトップコンピューティングデバイス1000は、一般に、揮発性内部メモリ1002と、ディスクドライブ1006などの大容量不揮発性メモリとに結合された、プロセッサ1001を含む。ラップトップコンピューティングデバイス1000はまた、プロセッサ1001に結合されたコンパクトディスク(CD)および/またはDVDドライブ1008を含み得る。ラップトップコンピューティングデバイス1000はまた、プロセッサ1001をネットワークに結合するためのネットワーク接続回路などの、データ接続を確立するまたは、外部メモリデバイスを受け入れるための、プロセッサ1001に結合されたいくつかのコネクタポート1010を含み得る。ラップトップコンピューティングデバイス1000は、本明細書で説明されるようなワイヤレス信号を送信および受信するための1つまたは複数の短距離無線信号送受信機1018(たとえば、Peanut(登録商標)、Bluetooth(登録商標)、Zigbee(登録商標)、Wi-Fi(登録商標)、RF無線)とアンテナ1020とを有し得る。送受信機1018およびアンテナ1020は、様々なワイヤレス送信プロトコルスタック/インターフェースを実装するために、上述の回路とともに使用され得る。ラップトップまたはノートブック構成では、コンピュータのハウジングは、タッチパッドタッチ面1014と、キーボード1012と、ディスプレイ1016とを含むことがあり、これらのすべてがプロセッサ1001に結合される。ラップトップコンピューティングデバイス1000の他の構成は、よく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含むことがあり、それらもまた、様々な態様とともに使用され得る。
【０１００】
図2〜図9Bを参照して上で説明された態様を含む、様々な態様を実装するために使用され得るマルチコアモバイルデバイス1100の例が、図11において示される。様々な態様では、マルチコアモバイルデバイス1100は、タッチスクリーンコントローラ1104および内部メモリ1102に結合されたプロセッサ1101を含み得る。プロセッサ1101は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコア集積回路(IC)であり得る。内部メモリ1102は揮発性または不揮発性メモリであってもよく、また、セキュアおよび/もしくは暗号化メモリ、または非セキュアおよび/もしくは非暗号化メモリ、あるいはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ1104およびプロセッサ1101は、抵抗感知タッチスクリーン、静電容量感知タッチスクリーン、赤外線感知タッチスクリーンなどのタッチスクリーンパネル1112にも結合され得る。マルチコアモバイルデバイス1100は、互いに結合され、かつ/またはプロセッサ1101に結合された、送受信のための、1つまたは複数の無線信号送受信機1108(たとえば、Bluetooth(登録商標)、Zigbee(登録商標)、Wi-Fi(登録商標)、RF無線)、およびアンテナ1110を有し得る。送受信機1108およびアンテナ1110は、様々なワイヤレス送信プロトコルスタックおよびインターフェースを実装するために、上述された回路とともに使用され得る。マルチコアモバイルデバイス1100は、セルラーネットワークを介した通信を可能にし、プロセッサに結合される、セルラーネットワークワイヤレスモデムチップ1116を含み得る。マルチコアモバイルデバイス1100は、プロセッサ1101に結合された周辺デバイス接続インターフェース1118を含み得る。周辺デバイス接続インターフェース1118は、1つのタイプの接続を受け入れるように単独で構成されることがあり、または、USB、FireWire、Thunderbolt、もしくはPCIeなどの、共通もしくは独自の様々なタイプの物理的接続および通信接続を受け入れるように多様に構成されることがある。周辺デバイス接続インターフェース1118は、同様に構成された周辺デバイス接続ポート(図示せず)にも結合され得る。マルチコアモバイルデバイス1100はまた、音声出力を提供するためのスピーカー1114を含み得る。マルチコアモバイルデバイス1100は、プラスチック、金属、または材料の組合せから構成された、本明細書で議論されるコンポーネントのすべてまたはいくつかを収容するためのハウジング1120も含み得る。マルチコアモバイルデバイス1100は、使い捨てバッテリーまたは充電式バッテリーなどの、プロセッサ1101に結合された電源1122を含み得る。充電式バッテリーは、マルチコアモバイルデバイス1100の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートにも結合され得る。
【０１０１】
本明細書で説明される様々なプロセッサは、本明細書で説明された様々な態様の機能を含む、様々な機能を実行するようにソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであり得る。様々なデバイスでは、ワイヤレス通信機能専用の1つのプロセッサおよび他のアプリケーションの実行専用の1つのプロセッサなどの、複数のプロセッサが設けられ得る。典型的には、ソフトウェアアプリケーションは、アクセスされ、プロセッサにロードされる前に、内部メモリに記憶され得る。プロセッサは、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含み得る。多くのデバイスでは、内部メモリは、揮発性メモリ、またはフラッシュメモリなどの不揮発性メモリ、または両方の組合せであり得る。本明細書では、メモリへの一般的な言及は、内部メモリまたは様々なデバイス内に差し込まれるリムーバブルメモリと、プロセッサ内のメモリとを含む、プロセッサによってアクセス可能なメモリを指す。
【０１０２】
上述の方法の説明およびプロセスフロー図は、単に例示的な説明として提供されたものであり、様々な態様のステップが提示された順序で実行されなければならないことを要求または暗示するものではない。当業者によって理解されるように、上記の態様におけるステップの順序は、任意の順序で実行され得る。「その後」、「次いで」、「次に」などの単語は、ステップの順序を限定するものではなく、これらの単語は、単に、方法の説明を通して読者を導くために使用される。さらに、たとえば冠詞「a」、「an」、または「the」を使用する、単数形での請求項の要素への任意の言及は、要素を単数形に限定すると解釈されるべきではない。
【０１０３】
本明細書で開示される態様に関して説明される様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に説明するために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップが、上では一般にそれらの機能に関して説明された。そのような機能がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、具体的な適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明された機能を具体的な適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本発明の範囲からの逸脱を引き起こすと解釈されるべきではない。
【０１０４】
本明細書で開示される態様に関して説明される様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェアコンポーネント、または本明細書で説明される機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替的に、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。代替的に、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行され得る。
【０１０５】
1つまたは複数の例示的な態様では、説明される機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。機能は、ソフトウェアで実装される場合、1つまたは複数の命令またはコードとして、非一時的プロセッサ可読、コンピュータ可読もしくはサーバ可読媒体、または非一時的プロセッサ可読記憶媒体上に記憶され、またはその上で送信され得る。本明細書で開示される方法またはアルゴリズムのステップは、非一時的コンピュータ可読記憶媒体、非一時的サーバ可読記憶媒体、および/または非一時的プロセッサ可読記憶媒体上に存在し得る、プロセッサ実行可能ソフトウェアモジュールまたはプロセッサ実行可能ソフトウェア命令において具現化され得る。様々な態様では、そのような命令は、記憶されたプロセッサ実行可能命令または記憶されたプロセッサ実行可能ソフトウェア命令であり得る。有形の非一時的コンピュータ可読記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または、命令またはデータ構造の形式で所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を備え得る。ディスク(disk)およびディスク(disc)は、本明細書で使用されるとき、コンパクトディスク(disc)(CD)、レーザーディスク（登録商標）(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読媒体の範囲内に含まれるべきである。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、有形の非一時的プロセッサ可読記憶媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せまたはセットとして存在し得る。
【０１０６】
開示された態様の上記の説明は、任意の当業者が本発明を作成または使用することを可能にするように提供される。これらの態様に対する様々な修正は当業者には容易に明らかとなり、本明細書で定義された一般原理は、本発明の趣旨または範囲から逸脱することなく、他の態様に適用され得る。したがって、本発明は、本明細書に示される態様に限定されるものではなく、以下の特許請求の範囲、ならびに、本明細書で開示される原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【０１０７】
200  アーキテクチャ
202  外部データソース
204  挙動分析モジュール
206  動き状態分析
208  音声分析モジュール
210  ビデオ/写真分析モジュール
212  機械学習アルゴリズム
214  LAPACKソルバ
216  ベクトル計算アルゴリズム
218  要約統計アルゴリズム
220  曲線あてはめアルゴリズム
222  Snapdragonに対して最適化されたBLAS
224  MARE
226  ヘテロジニアスコア
228  ハードウェアアクセラレーションモジュール
302  トレードオフ機能性
304  トレードオフ変数
306  精度のための変数
308  エネルギーのための変数
310  性能のための変数
312  電力のための変数
314  決断時データ
316  コンパイル時データ
318  ランタイムデータ
320  インターフェースモード
322  ディレクティブデータ
324  APIデータ
326  ハードウェアレジスタ
400  プラグマのセット
402  プラグマ
404  プラグマ
406  プラグマ
408  プラグマ
410  プラグマ
500  API呼出しのセット
501a  行
501b  行
502  API呼出し
504  API呼出し
506  API呼出し
508  API呼出し
510  API呼出し
600  方法
650  方法
700  基本モジュールアーキテクチャ
702  システム静的情報モジュール
704  アプリケーション情報モジュール
706  精度要件学習モジュール
708  リアルタイム要件学習モジュール
710  システム過渡情報モジュール
712  スケジューラおよび負荷分配器モジュール
714  アプリケーション計算カーネルモジュール
716  ヘテロジニアスコア
750  方法
800  方法
850  方法
900  方法
950  方法
1000  ラップトップコンピューティングデバイス
1001  プロセッサ
1002  揮発性内部メモリ
1006  ディスクドライブ
1008  CD/DVDドライブ
1010  コネクタポート
1012  キーボード
1014  タッチパッドタッチ面
1016  ディスプレイ
1018  送受信機
1020  アンテナ
1100  マルチコアモバイルデバイス
1101  プロセッサ
1102  内部メモリ
1104  タッチスクリーンコントローラ
1108  送受信機
1110  アンテナ
1112  タッチスクリーンパネル
1114  スピーカー
1116  セルラーネットワークワイヤレスモデムチップ
1118  周辺デバイス接続インターフェース
1120  ハウジング
1122  電源
【図１Ａ】
2018504676.tif 000003
【図１Ｂ】
2018504676.tif 000004
【図２】
2018504676.tif 000005
【図３】
2018504676.tif 000006
【図４】
2018504676.tif 000007
【図５】
2018504676.tif 000008
【図６Ａ】
2018504676.tif 000009
【図６Ｂ】
2018504676.tif 000010
【図７Ａ】
2018504676.tif 000011
【図７Ｂ】
2018504676.tif 000012
【図８Ａ】
2018504676.tif 000013
【図８Ｂ】
2018504676.tif 000014
【図９Ａ】
2018504676.tif 000015
【図９Ｂ】
2018504676.tif 000016
【図１０】
2018504676.tif 000017
【図１１】
2018504676.tif 000018
【手続補正書】
【提出日】平成29年6月13日(2017.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上で実行されるアプリケーションと関連付けられる複雑なアルゴリズムを動的に構成するための方法であって、
前記コンピューティングデバイスのプロセッサを介して、複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するステップと、
前記プロセッサを介して、前記アプリケーションの性能に対するユーザ応答を示す信号を取得するステップと、
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を下げるように、前記ライブラリ関数の前記構成を調整するステップと、
前記プロセッサを介して、前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するステップとを備える、方法。
【請求項２】
前記アプリケーションの前記性能が、結果を得るための実行速度、前記結果の正確度、および前記結果の精度のうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項３】
前記ユーザ応答を示す前記取得される信号が、タッチスクリーン上でのタッチ入力、ボタンの押下、センサからのデータ、別のアプリケーションの起動、前記アプリケーションの状態の変化、およびユーザ応答が予想されるときにユーザ入力がないことのうちの1つまたは複数である、請求項1に記載の方法。
【請求項４】
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するステップが、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの出力を前記ユーザが無視したかどうかを決定するステップ、および、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの前記出力を前記ユーザが訂正したかどうかを決定するステップのうちの1つまたは複数を備える、請求項1に記載の方法。
【請求項５】
前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するステップが、
前記プロセッサを介して、前記取得された信号に基づいて、前記ユーザが前記アプリケーションから離れて操作しているかどうかを決定するステップ、および、
前記プロセッサを介して、前記取得された信号に基づいて、前記ユーザがリフレッシュ機能性を使ったかどうか、または他のボタンを繰り返し押したかどうかを決定するステップのうちの1つまたは複数を備える、請求項1に記載の方法。
【請求項６】
前記取得された信号に基づいた前記ユーザが前記アプリケーションから離れて操作しているという決定に応答して、前記プロセッサを介して、前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するステップをさらに備える、請求項5に記載の方法。
【請求項７】
前記ユーザが前記アプリケーションに戻って操作しているとの決定に応答して、前記プロセッサを介して、事前に定められた閾値の時間内に前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するステップをさらに備える、請求項6に記載の方法。
【請求項８】
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を改善するように、前記アプリケーションの前記構成を調整するステップが、
前記プロセッサを介して、精度の設定を上げるステップ、
前記プロセッサを介して、実行速度の設定を上げるステップ、および、
前記プロセッサを介して、実行コアの設定を変更するステップのうちの1つまたは複数を備える、請求項1に記載の方法。
【請求項９】
前記プロセッサを介して、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して前記アプリケーションの前記その後の性能を改善するように前記アプリケーションの前記構成を調整するステップが、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記ライブラリ関数を使用するための前記アプリケーションの前記構成を調整するステップを備える、請求項1に記載の方法。
【請求項１０】
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を下げるように、前記アプリケーションの前記構成を調整するステップをさらに備える、請求項1に記載の方法。
【請求項１１】
前記アプリケーションが複数のライブラリ関数を呼び出し、前記ライブラリ関数が前記複数のライブラリ関数内にあり、前記方法が、
前記プロセッサを介して、前記複数のライブラリ関数のうちの第1のライブラリ関数を選択するステップと、
前記ユーザ応答を示す前記取得された信号に基づいた前記ユーザが前記アプリケーションの前記性能に寛容ではないという決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を改善するように、前記第1のライブラリ関数の構成を調整するステップと、
前記プロセッサを介して、前記アプリケーションを続いて実行するステップと、
前記プロセッサを介して、前記アプリケーションの前記その後の性能に対するその後のユーザ応答を示す後続の信号を取得するステップと、
前記ユーザが前記アプリケーションの前記その後の性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記複数のライブラリ関数のうちの第2のライブラリ関数を選択するステップと、
前記プロセッサを介して、前記第2のライブラリ関数の構成を調整するステップとをさらに備える、請求項1に記載の方法。
【請求項１２】
前記コンピューティングデバイスの前記プロセッサを介して、前記アプリケーションに対する複数のトレードオフ設定を取得するステップと、
前記プロセッサを介して、初期時間における前記コンピューティングデバイスと関連付けられる条件を評価するステップと、
前記プロセッサを介して、前記初期時間における前記コンピューティングデバイスと関連付けられる前記評価された条件に基づいて、前記取得された複数のトレードオフ設定のうちのトレードオフ設定が利用されるべきかどうかを決定するステップとをさらに備える、請求項1に記載の方法。
【請求項１３】
前記初期時間における前記コンピューティングデバイスと関連付けられる前記評価された条件に基づいた前記トレードオフ設定が利用されるべきであるという決定に応答して、前記プロセッサを介して、前記トレードオフ設定に基づいて前記アプリケーションの初期構成を調整するステップをさらに備える、請求項12に記載の方法。
【請求項１４】
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記その後の性能を改善するように前記アプリケーションの前記構成を調整するステップが、前記初期構成を使用した前記アプリケーションの前記性能に前記ユーザが寛容ではないとの決定に応答して、前記プロセッサを介して、前記アプリケーションの前記初期構成を上書きするステップを備える、請求項13に記載の方法。
【請求項１５】
前記コンピューティングデバイスの前記プロセッサを介して、前記アプリケーションに対する前記複数のトレードオフ設定を取得するステップが、
前記プロセッサを介して、前記アプリケーションのランタイムの間にアプリケーションプログラミングインターフェース(API)呼出しを介して前記アプリケーションに対する第1のトレードオフ設定を取得するステップ、
前記プロセッサを介して、コード中のディレクティブを介して前記アプリケーションに対する第2のトレードオフ設定を取得するステップ、および、
前記プロセッサを介して、専用レジスタを介して前記アプリケーションに対する第3のトレードオフ設定を取得するステップのうちの少なくとも1つを備える、請求項12に記載の方法。
【請求項１６】
前記プロセッサを介して、前記初期時間における前記コンピューティングデバイスと関連付けられる条件を評価するステップが、
前記プロセッサによって、前記アプリケーションの作業負荷を評価するステップ、および、
前記プロセッサによって、前記コンピューティングデバイスによる前記アプリケーションの処理に影響する外部条件を評価するステップのうちの少なくとも1つを備える、請求項12に記載の方法。
【請求項１７】
複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行し、
前記アプリケーションの性能に対するユーザ応答を示す信号を取得し、
前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定し、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整し、
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記アプリケーションの前記その後の性能を下げるように、前記ライブラリ関数の前記構成を調整し、
前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するためのプロセッサ実行可能命令によって構成されたプロセッサを備えるコンピューティングデバイス。
【請求項１８】
前記プロセッサが、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの出力を前記ユーザが無視したかどうかを決定するステップ、および、
前記プロセッサを介して、前記取得された信号に基づいて、前記アプリケーションの前記出力を前記ユーザが訂正したかどうかを決定するステップ
のうちの1つまたは複数によって、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項１９】
前記プロセッサが、
前記取得された信号に基づいて、前記ユーザが前記アプリケーションから離れて操作しているかどうかを決定するステップ、および、
前記取得された信号に基づいて、前記ユーザがリフレッシュ機能性を使ったかどうか、または他のボタンを繰り返し押したかどうかを決定するステップ
のうちの1つまたは複数によって、前記プロセッサを介して、前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能に前記ユーザが寛容であるかどうかを決定するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項２０】
前記プロセッサが、
前記取得された信号に基づいた前記ユーザが前記アプリケーションから離れて操作しているという決定に応答して、前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するためのプロセッサ実行可能命令によってさらに構成される、請求項19に記載のコンピューティングデバイス。
【請求項２１】
前記プロセッサが、
前記ユーザが前記アプリケーションに戻って操作しているとの決定に応答して、事前に定められた閾値の時間内に前記ユーザが前記アプリケーションに戻って操作しているかどうかを決定するためのプロセッサ実行可能命令によってさらに構成される、請求項20に記載のコンピューティングデバイス。
【請求項２２】
前記プロセッサが、
精度の設定を上げるステップ、
実行速度の設定を上げるステップ、および、
実行コアの設定を変更するステップ
のうちの1つまたは複数によって、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションの前記その後の性能を改善するように、前記アプリケーションの前記構成を調整するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項２３】
前記プロセッサが、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記ライブラリ関数を使用するための前記アプリケーションの前記構成を調整することによって、前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して前記アプリケーションの前記その後の性能を改善するように前記アプリケーションの前記構成を調整するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項２４】
前記プロセッサが、前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記アプリケーションの前記その後の性能を下げるように、前記アプリケーションの前記構成を調整するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項２５】
前記アプリケーションが複数のライブラリ関数を呼び出すように動作を実行するように前記プロセッサがプロセッサ実行可能命令によって構成され、前記ライブラリ関数が前記複数のライブラリ関数内にあり、前記プロセッサが、
前記複数のライブラリ関数のうちの第1のライブラリ関数を選択し、
前記ユーザ応答を示す前記取得された信号に基づいた前記ユーザが前記アプリケーションの前記性能に寛容ではないという決定に応答して、前記アプリケーションの前記その後の性能を改善するように、前記第1のライブラリ関数の構成を調整し、
前記アプリケーションを続けて実行し、
前記アプリケーションの前記その後の性能に対するその後のユーザ応答を示す後続の信号を取得し、
前記ユーザが前記アプリケーションの前記その後の性能に寛容ではないとの決定に応答して、前記複数のライブラリ関数のうちの第2のライブラリ関数を選択し、
前記第2のライブラリ関数の構成を調整するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項２６】
前記プロセッサが、
前記アプリケーションに対する複数のトレードオフ設定を取得し、
初期時間における前記コンピューティングデバイスと関連付けられる条件を評価し、
前記初期時間における前記コンピューティングデバイスと関連付けられる前記評価された条件に基づいて、前記取得された複数のトレードオフ設定のうちのあるトレードオフ設定が利用されるべきかどうかを決定するためのプロセッサ実行可能命令によってさらに構成される、請求項17に記載のコンピューティングデバイス。
【請求項２７】
複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するための手段と、
前記アプリケーションの性能に対するユーザ応答を示す信号を取得するための手段と、
前記ユーザ応答を示す取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するための手段と、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するための手段と、
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記アプリケーションの前記その後の性能を下げるように、前記ライブラリ関数の前記構成を調整するための手段と、
前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するための手段とを備える、コンピューティングデバイス。
【請求項２８】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記動作が、
複雑なアルゴリズムと関連付けられるライブラリ関数を呼び出すアプリケーションを実行するステップと、
前記アプリケーションの性能に対するユーザ応答を示す信号を取得するステップと、
前記ユーザ応答を示す前記取得された信号に基づいて、前記アプリケーションの前記性能にユーザが寛容であるかどうかを決定するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容ではないとの決定に応答して、前記アプリケーションのその後の性能を改善するように、前記アプリケーションの構成を調整するステップと、
前記ユーザが前記アプリケーションの前記性能に寛容であるとの決定に応答して、前記アプリケーションの前記その後の性能を下げるように、前記ライブラリ関数の前記構成を調整するステップと、
前記アプリケーションの前記性能に対する前記ユーザ応答とユーザ入力のその後の評価において使用するための他の外部変数とを示すデータを記憶するステップとを備える、非一時的プロセッサ可読記憶媒体。
【国際調査報告】
2018504676.tif 000019
2018504676.tif 000020