いくつかの実施形態は、シナリオプロファイル(例えば、アクティビティおよび/または機能)に基づいてアプリケーションをより小さな部分にスプリットすることによって、新規または既存のアプリケーションをパーティションするための自己適応型設計を含む。例えば、図1A~図1Cのプロセスにおいて、アプリケーション118の異なる部分は、アプリケーションダウンロードのサイズを低減し、ネットワークトラフィックを低減し、メモリ使用量を削減するために、ユーザの予測された行動に基づいてユーザデバイス102に自動的にプリロードされ得る。
サーバ104は、アプリケーション118のすべてのアプリケーションコードおよび/または機能を含むアプリケーションバンドル110を含むことができ、一方、ユーザデバイス102は、アプリケーション118のアプリケーションコードの一部のみを含むことができる。一例として、アプリケーション118は、写真、メッセージング、ビデオ会議などのようないくつかのアクティビティを実行することができる場合がある。サーバ104は、アプリケーション118のコピーを(例えば、コンパイル中にツールを介して)第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fに対応する複数のコード部分に分割することができる。第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの各々は、異なるアクティビティ(例えば、写真、メッセージング、ビデオ会議など)のための機能を含み得る。したがって、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの各々は、アプリケーションのアクティビティを実行するためのソースコードを含み得る。
詳細には、図1A~図1Cは、向上したアプリケーション操作および配布プロセス100を示す。プロセス100は、予測されたユーザアクションに基づいて選択的に配布され得る第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fを含むアプリケーションバンドル110を生成する。第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fは、アプリケーション118のアプリケーションコードの異なるパーティションおよび/または部分を実行するためのソースコードを含み得る。アプリケーションバンドル110は、ユーザデバイス102(例えば、モバイルデバイス)上にアプリケーション118を構築するために利用され得る。
サーバ104は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の遷移確率を定義することができる。例えば、遷移確率の1つは、ユーザが、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの1つに対応する機能を選択し、一方、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの別のものに対応する別の機能を選択する予測確率を表すことができる。サーバ104は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fを格納することができ、さらに遷移確率を関係ファイル108に格納することができる。第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの各々は、1つまたは複数のバイナリライブラリ、クラス、またはリソースを含む1つまたは複数のパッケージを含んでもよい。
ユーザデバイス102は、アプリケーションバンドル110から構築されるべきアプリケーション118のダウンロードを開始することができる。すなわち、ユーザデバイス102は、サーバ104から、小さな必須パッケージの初期バンドルをダウンロードし、パッケージをインストールして、ユーザの初期操作およびセットアップ(例えば、選択メニュー、初期グラフィックスユーザインターフェースなど)を満たすことができる。
ユーザデバイス102は、関係ファイル108にさらにアクセス(例えば、ダウンロード)して、関係マップ112を生成することができる。関係マップ112は、遷移確率に基づいて、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の関係をマッピングすることができる。ランタイム114は、関係マップ112を参照して、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからシナリオプロファイルを予測することができ、ユーザが遷移確率ならびに第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の関係に基づいて選択すると予測される。したがって、ユーザデバイス102は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fのすべてをダウンロードする必要がない場合がある。むしろ、ユーザデバイス102は、ランタイム114が近い将来、または初期化のための必須パッケージとして利用されると予測する第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの第1のシナリオプロファイル106aのみをダウンロードすることができ、第2、第3、第4、第5、および第6のシナリオプロファイル106b、106c、106d、106e、106fのうちの不要なもののダウンロードを回避する。
したがって、アプリケーション118を実行している間、ユーザデバイス102は、関係マップ112に基づいて需要分析および予測を実行して、事前に(ユーザが選択する前に)および実行中に、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fのリアルタイムかつ向上したダウンロードを容易にすることができる。したがって、プロセス100は、ネットワークトラフィックおよびオーバーヘッドを低減しながら、ユーザデバイス102のメモリ使用量およびストレージ使用量を低減することができる。さらに、効率的な帯域幅の使用、メモリ、および長期記憶を実現できる。さらに、パーティショニングおよび選択的ダウンロードは、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fが、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fのユーザの選択の前に自動的にダウンロードされるので、ユーザに対して透過的であり得る。したがって、プロセス100は、中粒度のデータ転送を提供することができ、これは、ネットワーク性能とアプリケーション118のサイズとの間をバランスする。
さらに、サーバ104が第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fを識別するためのカスタムツールを含み得るので、アプリケーション開発者はアプリケーションを分割する必要はない。例えば、新しいアプリケーションが開発者によってコンパイルされると、依存関係チェックツールは、識別されたシナリオプロファイルに従って、新しいアプリケーションを小さなパッケージ(例えば、コード部分)のセットに自動的にスプリットすることができる。さらに、既存のアプリケーションの場合、依存関係チェックツールは、識別されたシナリオプロファイルに従って、既存のアプリケーションをパッケージにスプリットすることもできる。既存のアプリケーションは、現在のプロセス100の前に構築されたアプリケーションを含んでもよい。各パッケージには、バイナリライブラリ、クラス、またはリソースのうちの1つまたは複数が含まれる場合がある。依存関係チェックツールは、サーバ104、および/または別のコンピューティングデバイスに格納および実行することができる。
上記のように、サーバ104は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の遷移をさらに定義することができる。遷移は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからの1つのシナリオプロファイルから第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからの別のシナリオプロファイルへの転送方法を示してもよい。例えば、アプリケーション118のアプリケーションコードは、遷移トリガイベントを識別するために解析され、関係ファイル108に格納されてもよい。遷移トリガイベントは、ユーザによる様々な選択に対応することができる。例えば、アプリケーション118のグラフィカルユーザインターフェースがユーザデバイス102上に提示される場合、遷移トリガイベントは、グラフィカルユーザインターフェースを介するユーザの様々な可能な選択(例えば、音楽オプション、ビデオオプション、画像オプションなど)であってもよい。各遷移トリガイベントは、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fのどのシナリオプロファイルがダウンロードされるかを示すためにユーザの最も可能性の高い選択を予測するように確率を割り当てられ得る。したがって、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの各々は、機能を実行することができる。
例えば、図1Cに目を向けると、ユーザの意図に基づいてアプリケーションコード126を分解するプロセス128が示され、サーバ104によって実行されてもよい。アプリケーションコード126は、アプリケーション118のソースコードの一部だけではなく、図1A~図1Bのアプリケーション118のすべてのソースコードを含み得る。
アクティビティの切り替えは、有向グラフ132のシナリオプロファイルの切り替えにマッピングできる。アクティビティの切り替えは、意図的に駆動される場合がある。第1のアクティビティがユーザの入力に従って第2のアクティビティに切り替わると予測されるとき、予測された意図(すなわち、予測された切り替え)が、第1のアクティビティおよび/またはユーザデバイス102からにサーバ104に送信されてもよく、サーバ104は意図をチェックし、第2のアクティビティをユーザデバイス102に送信する責任がある。そのような意図は、アプリケーションコード126のコンパイル時に識別されて、関係ファイル108を生成し、有向グラフ132によって示されるような異なるアクティビティ間の関係を記録することができる。前述のように、アクティビティは、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fに対応する。
アプリケーションコード126は、サーバ104上のアプリケーション118のコンパイル時に、意図に基づいて分解され得る(130)。意図は、アプリケーションコード126のある部分からアプリケーションコード126の別の部分に遷移する確率に対応し得る。理解されるように、アプリケーションコード126の部分は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fに対応し得る。
図示のように、第1のシナリオプロファイル106aは、第2、第3、および第4のシナリオプロファイル106b、106c、106dにつながる場合がある。第1のシナリオプロファイル106aから第2、第3、および第4のシナリオプロファイル106b、106c、106dの各々に遷移する確率は、第1のシナリオプロファイル106aと第2、第3、および第4のシナリオプロファイル106b、106c、106dとの間の接続線上に提供される。この例では、第1のシナリオプロファイル106aは、第3のシナリオプロファイル106cに遷移する可能性が最も高く、発生の確率は「0.7」である。図示のように、第3のシナリオプロファイル106cは、第5のシナリオプロファイル106eにのみ遷移するため、第3のシナリオプロファイル106cから第5のシナリオプロファイル106eに遷移する確率は「1」である。図1Aのユーザデバイス102などのユーザデバイスは、有向グラフ132を、例えば、関係マップ112として再作成して、ランタイム中にダウンロードするために、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからの最も可能性の高いシナリオプロファイルを識別することができる。
再び図1Aおよび図1Bを参照すると、ユーザがアプリケーション118をユーザデバイス102にインストールすると、ユーザデバイス102は、必須の初期ダウンロードおよび関係ファイル108として第1のシナリオプロファイル106a(例えば、ログインアクティビティおよびメインアクティビティ)を自動的にダウンロードおよびインストールすることができる。ランタイム114は、関係ファイル108を、図1Cの有向グラフ132によって図示されるような有向グラフデータ構造であり得る関係マップ112に解析して、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106f間の関係を識別することができる。ユーザがアプリケーション118を操作するとき、ランタイム114は、現在選択されている第1のシナリオプロファイル106a(すなわち、ユーザが利用している現在選択されているシナリオ)および関係マップ112に従って、ユーザによって選択される可能性が最も高い第2、第3、第4、第5、および第6のシナリオプロファイル106b、106c、106d、106e、106fから次に可能性が最も高いシナリオプロファイルを予測することができる。次に可能性が最も高いシナリオプロファイルおよび対応するパッケージをダウンロードできる。
例えば、予測分析およびダウンロード120は、上記のように、次に可能性が最も高いシナリオプロファイルを識別することができる。この例では、有向グラフ132に関して上で説明したように、次に可能性が最も高いシナリオプロファイルは、第3のシナリオプロファイル106cである。図1Bに図示されるように、ユーザデバイス102は、サーバ104に第3のシナリオプロファイル106cを要求することができる。それに応答して、サーバ104は、第3のシナリオプロファイル106cをユーザデバイス102に送信することができる。次に、ユーザデバイス102は、第3のシナリオプロファイル106c(例えば、パッケージ)をインストールすることができる。したがって、ユーザデバイス102が第3のシナリオプロファイル106cを要求してインストールする前に、ユーザは、第3のシナリオプロファイル106cを実際に選択していない可能性がある。むしろ、第3のシナリオプロファイル106cは、ユーザが第3のシナリオプロファイル106cを選択する可能性が高いという予測に応答してダウンロードおよびインストールされ得る。したがって、ユーザデバイス102は、現在ユーザによって選択されていないシナリオプロファイルをダウンロードすることができる。
いくつかの実施形態では、ユーザデバイス102は、次に可能性が最も高いシナリオプロファイルだけでなく、次に可能性が最も高いシナリオプロファイルの後に選択されるその次に可能性が最も高いシナリオプロファイルも予測することができる。この例では、ユーザデバイス102は、第3のシナリオプロファイル106cが次に可能性が最も高い次のシナリオプロファイルであると予測した。次に、ユーザデバイス102は、次に可能性が最も高い次のシナリオプロファイルを予測して、第3のシナリオプロファイル106cにも同様に従ってもよい。例えば、ユーザデバイス102は、関係マップ112を参照して、第3のシナリオプロファイル106cの後に選択される第1、第2、第4、第5、および第6のシナリオプロファイル106a、106b、106d、106e、106fから次に可能性が最も高い次のシナリオプロファイルを予測することができる。この例では、上記のように、第5のシナリオプロファイル106eは、第3のシナリオプロファイル106cの後に発生する可能性が最も高いシナリオプロファイルであると識別され得る。したがって、ユーザデバイス102は、サーバ104に第5のシナリオプロファイル106eを要求し、次いで、第5のシナリオプロファイル106eをダウンロードしてインストールすることができる。
いくつかの実施形態では、アプリケーション118の第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの一部のみが事前にダウンロードおよびインストールされる。したがって、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからの特定のシナリオプロファイルのダウンロード時間と、ユーザが特定のシナリオプロファイルを使用できるときとの間のギャップを回避するために、ユーザデバイス102および/またはサーバ104は、ダウンロード時間を短縮し、および/またはダウンロードを開始するタイミングを調整しようとすることができる。例えば、ダウンロード時間は2つの部分に分割することができる。1)特定のシナリオプロファイルをサーバ104からアクセスネットワークに転送するのに費やされる時間、および2)特定のシナリオプロファイルをアクセスネットワークからユーザデバイス102に転送するのに消費される時間。
特定のシナリオプロファイルをサーバ104からアクセスネットワークに転送するのに消費される時間を短縮するために、エッジコンピューティングまたはエッジサーバ配置が使用され得る。例えば、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fをホストする複数のサーバが存在する場合、アクセスネットワークに最も近接するサーバを選択して、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fをアクセスネットワークに送信するための待ち時間を他の可能なサーバ(図示せず)と比較して短縮することができる。この実施形態では、最も近接するサーバは、サーバ104であり得る。
特定のシナリオプロファイルをアクセスネットワークからユーザデバイス102に転送するのに消費される時間を短縮するために、異なるアクセス技術のダウンリンク速度を特定することができる。例えば、Wi-Fi(例えば、IEEE 802.11g/astandard)ネットワークのおよそのダウンロード速度は、54Mbit/秒である。第5世代ワイヤレス(5G)ネットワークのおよそのダウンロード速度は、20Gbpsである。特定のシナリオプロファイルのサイズが十分に小さい場合、最新の技術を使用したダウンロード時間は無視できる。特定のシナリオプロファイルのサイズが十分に小さくない場合、ユーザデバイス102および/またはサーバ104は、より積極的なプロセスを実施することによってダウンロードを開始するタイミングを調整することができる。例えば、ユーザデバイス102および/またはサーバ104は、特定のシナリオプロファイルが有向グラフ132の最も高い確率のパスにある場合に特定のシナリオプロファイルがダウンロードされるように、特定のシナリオプロファイルをダウンロードするトリガを調整することができる。
すなわち、ユーザデバイス102および/またはサーバ104は、より多くの可能なシナリオプロファイルをダウンロードするための時間およびその時間が顕著な遅延を引き起こし得るかどうかを識別し得る。例えば、いくつかの実施形態では、ユーザデバイス102および/またはサーバ104は、通信の待ち時間(例えば、帯域幅、ダウンロード速度など)を識別し得る。ユーザデバイス102は、待ち時間に基づいて要求およびダウンロードされる第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの数を調整することができる。例えば、通信の待ち時間が閾値を満たしている(ダウンロードが十分に遅い)場合、ユーザデバイス102は、早い段階で第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからシナリオプロファイルを要求するために、より積極的な要求およびダウンロードスキームが採用されるべきであると決定することができる。
したがって、この例では、ユーザデバイス102は、待ち時間が閾値を満たしていると決定することができる(例えば、ダウンロード速度が遅いと識別され得る)。その結果、最も確率の高いシナリオプロファイルパスを識別して、顕著な遅延が発生しないようにすることができる。第3のシナリオプロファイル106cが識別された後、第3のシナリオプロファイル106cがユーザによって選択される前に、第3のシナリオプロファイル106cに従う可能性が最も高いシナリオプロファイルも識別され、サーバ104に要求され得る。この例では、第5のシナリオプロファイル106eは、第3のシナリオプロファイル106cに従う可能性が最も高いシナリオプロファイルであると識別され得る。したがって、有向グラフ132の最も高い確率のパスは、第3のシナリオプロファイル106cとそれに続く第5のシナリオプロファイル106eであり得る。ランタイム114は、第5のシナリオプロファイル106eのサイズをさらに識別し、サイズが遅延を引き起こすのに十分に大きいかどうかを決定することができる。例えば、第5のシナリオプロファイル106eが非常に小さい場合、遅延がない可能性がある。しかしながら、サイズがユーザデバイス102の帯域幅および/またはダウンロード速度に対して十分に大きい場合、ランタイム114は、第5のシナリオプロファイル106eがダウンロードされるべきであると決定することができる。
したがって、第5のシナリオプロファイル106eは、第5のシナリオプロファイル106eが第3のシナリオプロファイル106cに従う確率、待ち時間に対する第5のシナリオプロファイル106eのサイズ、および通信の待ち時間が十分であるという識別に基づいてダウンロードされ得る。特に、第3のシナリオプロファイル106cは、第5のシナリオプロファイル106eがダウンロードされる前に、ユーザによって実際に選択されない場合がある。いくつかの実施形態では、待ち時間が閾値を満たさない場合、および/または第5のシナリオプロファイル106eのサイズが十分に小さい場合、第3のシナリオプロファイル106cのみをダウンロードすることができる。
いくつかの実施形態では、ユーザデバイス102は、関係マップ112の遷移確率を調整するためのマップアジャスタ122をさらに含んでもよい。マップアジャスタ122は、ユーザの習慣、ユーザに関連する環境(例えば、地理的位置、低待ち時間エリア、騒々しい環境、低照度レベルなど)、およびアプリケーション118の使用時間などの追加情報を決定することができる。マップアジャスタ122は、追加情報(使用モードと呼ばれることがある)に基づく機械学習を使用して、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の予測を向上させることができる。第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の遷移確率に影響を及ぼし得る要因のいくつかの例は、以下を含む。
1.地理的位置および/または人口統計-異なる国および/または異なる文化のユーザは、異なる使用モードを有する場合がある。
2.地理的位置-ユーザはさらに、オフィスまたは自宅で様々なモードのアプリケーションを使用することができ、これは、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの使用率に直接影響し得る。
3.タイミング-ユーザは、昼間および夜間、ならびに/または異なる日に異なるモードでアプリケーションを使用できる。
4.周囲の感知レベル-ユーザがマイクロフォンで検出されるような騒々しい環境にいる場合、ユーザは、特定の条件がない限り、ビデオ電話会議または他の音声ベースの通信機能など、電話の特定のオーディオ機能を使用する可能性は低くなる。例えば、特定の条件は、音声通信を容易にするために、ユーザデバイス102に接続されていると検出されるヘッドホンマイクロフォンまたはBluetooth(登録商標)ヘッドセットを含み得る。別の例として、ユーザが薄暗いエリアにいる場合、ユーザがビデオ通信を利用する可能性は非常に低いが、懐中電灯アプリケーションが選択されている、または読書アプリケーションが選択されている可能性が高まり得る。
5.履歴分析-アプリケーション118または別のアプリケーションにおけるユーザの履歴は、使用の将来の使用パターンを予測し得る。例えば、ユーザが通常、アプリケーションでオンラインゲームを利用する場合、関係マップ112は、関係ファイル108に示されるよりも、そのようなオンラインゲームシナリオプロファイルをより高く重み付けするように調整され得る。
したがって、異なる使用モードは、ユーザデバイス102によって構築された有向グラフ132の第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fの間の遷移確率を調整することができ、したがってランタイム114分析および予測に影響を与える。そのような追加情報および/または修正された遷移確率はまた、サーバ104が関係ファイル108の遷移確率を調整することができるように、サーバ104に通信され得る。
例えば、サーバ104は、関係ファイル108を調整するための関係ファイルアジャスタ124を含んでもよい。いくつかの実施形態では、ユーザデバイス102は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fからのシナリオプロファイルがユーザによって選択されたときに、サーバ104と通信することができ、関係ファイルアジャスタ124、それに応じて関係ファイル108を調整することができる。例えば、ユーザが、次に可能性が最も高いシナリオプロファイルであると予測されなかった第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fから選択されたシナリオプロファイルを選択した場合、関係ファイルアジャスタ124は、関係ファイル108の遷移確率を調整して、次に可能性が最も高いシナリオプロファイルであると誤って予測された選択されていないシナリオプロファイルの遷移確率を低下させながら、選択されたシナリオプロファイルにつながる確率を増加させることができる。
いくつかの実施形態では、ユーザデバイス102は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fのうちのダウンロードされたものを削除することができる。例えば、この例では、第3および第5のシナリオプロファイル106c、106eがユーザデバイス102にダウンロードされる。ユーザが第5のシナリオプロファイル106eを選択すると仮定する。ランタイム114は、第5のシナリオプロファイル106eの後に第3のシナリオプロファイル106cが選択される確率が最小であり、したがって削除され得ることを識別し得る。いくつかの実施形態では、ユーザデバイス102は、ユーザデバイス102の利用可能なストレージスペース(例えば、無料の長期ストレージおよび/または短期ストレージ)が十分に小さい、および/またはユーザデバイス102に現在格納されているシナリオプロファイルが選択される可能性が低いという識別に応答して、シナリオプロファイルを削除することができる。いくつかの実施形態では、シナリオプロファイルは、現在選択されているシナリオプロファイルの後に、少なくとも所定の数のシナリオプロファイルに対してシナリオプロファイルが選択される可能性が低いという識別に応答して削除され得る。
いくつかの実施形態では、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fから次に可能性が最も高いシナリオプロファイルがすでにユーザデバイス102にダウンロードされている場合、ダウンロードプロセスは冗長性を避けるために省略され得る。いくつかの実施形態では、ユーザデバイス102からのいくつかの機能は、サーバ104にシフトされ得る。例えば、ユーザデバイス102は、サーバ104にシナリオプロファイルを要求することができない。むしろ、サーバ104は、アプリケーション118とのユーザ相互作用の更新を受信し、次に可能性が最も高いシナリオプロファイルを識別し、次いで、次に可能性が最も高いシナリオプロファイルを送信することができる。したがって、上記の機能は、ユーザデバイス102および/またはサーバ104の処理能力などの要因に基づいて、サーバ104とユーザデバイス102との間でシフトすることができる。
いくつかの実施形態では、サーバ104は、第1、第2、第3、第4、第5、および第6のシナリオプロファイル106a、106b、106c、106d、106e、106fならびに関係ファイル108を、アプリケーションバンドル110として配布するために開発者または別のデバイスから受信することができる。サーバ104は、古いアプリケーションおよび新しいアプリケーションを異なる方法で処理することができる。例えば、パーティション化された新しいアプリケーションは、パッケージおよび関係ファイルに格納および解凍できる。対照的に、プロセス100を実装する前にサーバ104が受信した古い既存のモノリシックアプリケーションは、変更せずに保持することができる。そのような古いアプリケーションは、スキャンされ、処理され、サーバ104に格納され得、古いアプリケーションがインストールされていない新しいデバイスによって古いアプリケーションが最初に必要とされるとき、アプリケーションは、シナリオプロファイルおよび関係ファイルに分割するように処理され得る。以前に古いアプリケーションをすでにインストールしたことがある古いユーザの場合、古いユーザは引き続き古いアプリケーションを使用およびアップグレードできる。いくつかの実施形態では、古いアプリケーションは、本明細書に記載されているシナリオプロファイルおよび関係ファイルに従って置き換えることができる。
図2は、向上したアプリケーションの使用および管理を提供し得る方法350を示す。方法350は、一般に、例えば、すでに説明したサーバ104(図1A~図1B)などの向上したユーザサーバによって実装されてもよい。一実施形態では、方法350は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、プログラマブルROM(PROM)、ファームウェア、フラッシュメモリなどの機械もしくはコンピュータ可読記憶媒体に、例えば、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、複雑なプログラマブルロジックデバイス(CPLD)などの構成可能なロジックに、例えば、特定用途向け集積回路(ASIC)、相補型金属酸化膜半導体(CMOS)、もしくはトランジスタ-トランジスタロジック(TTL)技術などの回路技術を使用する固定機能ロジックハードウェアに、またはそれらの任意の組み合わせに格納されたロジック命令のセットとして1つまたは複数のモジュールに実装される。
例えば、方法350に示される操作を実行するためのコンピュータプログラムコードは、JAVA(登録商標)、SMALLTALK(登録商標)、C++などのオブジェクト指向プログラミング言語および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで書くことができる。さらに、ロジック命令には、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、状態設定データ、集積回路の構成データ、ハードウェア(ホストプロセッサ、中央処理装置/CPU、マイクロコントローラなど)に備え付けの電子回路および/または他の構造コンポーネントをパーソナライズする状態情報が含まれる場合がある。
図示の処理ブロック352は、アプリケーションを、各々がアプリケーションの1つまたは複数の機能に関連するコードである複数の部分に分割する。例えば、アプリケーションの1つまたは複数の機能の各部分は、ユーザデバイスのグラフィカルユーザインターフェース(例えば、シナリオプロファイル)を介して選択可能な機能に対応し得る。図示の処理ブロック354は、複数の部分の間の遷移確率を決定する。遷移確率は、各々が、1つまたは複数の機能の別のものが選択されている間に、ユーザが1つまたは複数の機能の少なくとも1つを選択するという予測確率を表すことができる。図示されていないが、この方法は、シナリオプロファイルおよび遷移確率をユーザデバイスに送信することを含んでもよい。
図3は、向上したアプリケーションのインストールおよび記憶を提供し得る方法360を示す。方法360は、一般に、例えば、すでに説明したユーザデバイス102(図1A~図1B)などの向上したユーザデバイスによって実装されてもよい。より具体的には、方法360は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械もしくはコンピュータ可読記憶媒体に、例えば、PLA、FPGA、CPLDなどの構成可能なロジックに、例えば、ASIC、CMOS、もしくはTTL技術などの回路技術を使用する固定機能ロジックハードウェアに、またはそれらの任意の組み合わせに格納されたロジック命令のセットとして1つまたは複数のモジュールに実装され得る。
図示の処理ブロック362は、複数の部分の少なくとも第1の部分を受信し、複数の部分の各々は、アプリケーションの1つまたは複数の機能に関連するコードである。図示の処理ブロック364は、複数の部分の間で遷移する遷移確率を示す関係ファイルを受信する。有向グラフは、例えば、関係ファイルから構築できる。図示の処理ブロック366は、複数の遷移確率から遷移確率のグループを決定する。遷移確率のグループの各々は、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の確率を示し得る。図示の処理ブロック368は、遷移確率のグループの比較に基づいて、複数の部分から第2の部分を決定する。いくつかの実施形態では、第2の部分は、遷移確率のグループからの最大の遷移確率に関連する。図示の処理ブロック370は、サーバに第2の部分を要求する。
図4は、ユーザ選択の向上した予測を提供し得る方法380を示す。方法380は、一般に、例えば、すでに説明したユーザデバイス102(図1A~図1B)などの向上したユーザデバイスによって実装されてもよい。より具体的には、方法380は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械もしくはコンピュータ可読記憶媒体に、例えば、PLA、FPGA、CPLDなどの構成可能なロジックに、例えば、ASIC、CMOS、もしくはTTL技術などの回路技術を使用する固定機能ロジックハードウェアに、またはそれらの任意の組み合わせに格納されたロジック命令のセットとして1つまたは複数のモジュールに実装され得る。
図示の処理ブロック382は、受信した関係ファイルから関係マップを構築する。例えば、関係マップは、シナリオプロファイルおよびシナリオプロファイル間の遷移確率を含む有向グラフであり得る。図示の処理ブロック384は、現在のユーザ習慣(例えば、ユーザの履歴データ)、ユーザの地理的位置、ユーザデバイスのセンサの感知された信号、ユーザの人口統計、または機械学習のうちの1つまたは複数に基づいて関係マップを調整する。図示の処理ブロック386は、分析をサーバに提供し、サーバは、次に、分析に基づいて、関連するグラフおよび/またはデータを更新することができる。
図5は、環境要因およびシナリオプロファイルのサイズに基づいてダウンロードされるシナリオプロファイルの数を調整することができる方法400を示す。方法400は、一般に、例えば、すでに説明したユーザデバイス102および/またはサーバ104(図1A~図1B)などの向上したユーザデバイスおよび/またはサーバによって実装されてもよい。より具体的には、方法400は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械もしくはコンピュータ可読記憶媒体に、例えば、PLA、FPGA、CPLDなどの構成可能なロジックに、例えば、ASIC、CMOS、もしくはTTL技術などの回路技術を使用する固定機能ロジックハードウェアに、またはそれらの任意の組み合わせに格納されたロジック命令のセットとして1つまたは複数のモジュールに実装され得る。
図示の処理ブロック402は、ユーザデバイスの帯域幅またはダウンロード速度のうちの1つまたは複数を決定する。図示の処理ブロック404は、複数のシナリオプロファイルからの第1のシナリオプロファイルがユーザデバイスによって利用されることを予測することができる。図示の処理ブロック406は、第1のシナリオプロファイルから第2のシナリオプロファイルへの遷移を予測する。例えば、第2のシナリオプロファイルは、第1のシナリオプロファイルから1つまたは複数の他のシナリオプロファイルへの1つまたは複数の他の遷移確率よりも大きい第1のシナリオプロファイルからの遷移確率を有し得る。図示の処理ブロック408は、第2のシナリオプロファイルのサイズ、帯域幅、またはダウンロード速度のうちの1つまたは複数に基づいて、第2のシナリオプロファイルをダウンロードするためのダウンロード時間を決定する。例えば、ブロック408は、帯域幅および/またはダウンロード速度に対するサイズの比率に基づいて、第2のシナリオプロファイルをダウンロードするための時間(すなわち、ダウンロード時間)を予測することができる。図示の処理ブロック410は、ダウンロード時間が十分に短いかどうかを決定する。例えば、ユーザがアプリケーション利用するときに遅れを経験しないようにするために、ダウンロード時間が特定の時間量よりも短い場合、ダウンロード時間は十分に短いと見なすことができる。したがって、ブロック410は、第2のシナリオプロファイルを直ちにダウンロードする必要があり得るか、または別のときにダウンロードすることができるかどうかを決定する。
ダウンロード時間が十分に短い場合、図示の処理ブロック412は、第2のシナリオプロファイルのダウンロードを待機することができる。例えば、処理ブロック412は、第1のシナリオプロファイルがユーザによって用いられるまで、第2のシナリオプロファイルのダウンロードを開始するのを待機することができる。すなわち、ブロック412は、ユーザが第1のシナリオプロファイルを用いているという識別に応答して、第2のシナリオプロファイルの送信を開始する。
ダウンロード時間が十分に短くない場合、図示の処理ブロック414は、ユーザが第1のシナリオプロファイルを用いるのを待たずに、第2のシナリオプロファイルの送信を開始する。すなわち、ユーザに第2のシナリオプロファイルのダウンロードを待たせると(例えば、第1のシナリオプロファイルを用いた後)、ユーザが遅延を経験する場合、このような遅延を回避するために、ユーザが第1のシナリオプロファイルを用いる前に、第2のシナリオプロファイルがダウンロードされる。
図6は、アプリケーション全体を削除することなく、ユーザデバイスからシナリオプロファイルを削除するかどうかを決定することができる方法450を示している。方法450は、一般に、例えば、すでに説明したユーザデバイス102および/またはサーバ104(図1A~図1B)などの向上したユーザデバイスおよび/またはサーバによって実装されてもよい。より具体的には、方法450は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械もしくはコンピュータ可読記憶媒体に、例えば、PLA、FPGA、CPLDなどの構成可能なロジックに、例えば、ASIC、CMOS、もしくはTTL技術などの回路技術を使用する固定機能ロジックハードウェアに、またはそれらの任意の組み合わせに格納されたロジック命令のセットとして1つまたは複数のモジュールに実装され得る。
図示の処理ブロック452は、第1のシナリオプロファイルから第2のシナリオプロファイルへのユーザ遷移を含む。例えば、ユーザは、グラフィカルユーザインターフェースを介して第2のシナリオプロファイルを積極的に用いることができる(例えば、第2のシナリオプロファイルを作動させるためのボタンを選択する)。図示の処理ブロック454は、第2のシナリオプロファイルから可能性が最も高いシナリオプロファイルパスを決定する。例えば、ブロック454は、シナリオプロファイル間の遷移確率に基づいて、可能性が最も高いパス(1つまたは複数の予測されたシナリオプロファイル)を識別する。処理ブロック456は、第1のシナリオプロファイルの使用頻度を決定する。したがって、ブロック456は、第1のシナリオプロファイルの使用履歴を決定することができる。
図示の処理ブロック458は、保持閾値が、可能性のあるシナリオプロファイルパスまたはユーザの頻度のうちの1つまたは複数によって満たされているかどうかを決定する。例えば、第1のシナリオプロファイルが可能性が最も高いシナリオプロファイルパスの一部ではなく、使用頻度が履歴上低い場合(例えば、ユーザの頻度が使用頻度の閾値を満たさない場合)、図示の処理ブロック462は、第1のシナリオプロファイルを削除する。しかしながら、図示の処理ブロック462は、第2のシナリオプロファイルを保持するか、または削除しない場合がある。第1のシナリオプロファイルが可能性が最も高いシナリオプロファイルパスの一部である場合、および/または使用頻度が履歴上高い場合、処理ブロック460は、第1のシナリオプロファイルを保持することができる。したがって、方法450は、再利用される可能性が低いシナリオプロファイルを削除することによってメモリ使用を向上させることができる。
図7は、シナリオプロファイル予測の有向グラフ500を示す。図1A~図1Cに関して上で説明したように、ユーザデバイス102および/またはサーバ104は、いくつかの条件において、現在のノードから有向グラフィックス内で次に最も可能性の高いノードを識別し得る。有向グラフ500および現在のシナリオプロファイルを使用して、ランタイムは、アプリケーションが要求するノードを予測できる。
有向グラフ500において、各シナリオプロファイルは、ノード502、504、506、508、512、512、514、516、516、520、524、526、528のうちの1つであり得る。図示のように、ノード502、504、506、508、512、512、514、516、516、520、524、526、528の各々は、ノード(例えば、クラス、リソース、ライブラリなど)のサイズおよびユーザがノードに滞在する予測時間を含んでもよい。あるシナリオプロファイルから別のシナリオプロファイルへの遷移は、関連する遷移確率を含む有向エッジである場合がある。図に示すように、ノード502、504、506、508、512、512、514、516、516、520、524、526、528の任意のノードからの遷移確率の合計は「1」である。
ノード502は、開始シナリオプロファイルであり得、ノード512は、ユーザが現在実行および選択されている現在のシナリオプロファイルであり得る。ノード512は、ノード518、520、524のうちの1つに遷移することができる。図示のように、ノード518はノード510に遷移することができ、ノード520はノード526、528のうちの1つに遷移することができる。したがって、ノード518、520、524は、可能性が最も高い次の転送されるシナリオプロファイルと見なされ得るが、ノード510、526、528は、将来、潜在的に転送されるシナリオプロファイルである場合がある。
サーバおよび/またはユーザデバイスは、どのシナリオプロファイルがダウンロードされるべきかを識別するために、遷移確率に基づいて可能性が最も高いシナリオプロファイルパスを識別することができる。遷移確率は、ノード520が、ノード518への遷移確率0.1およびノード524への遷移確率0.3よりも大きい、0.6の遷移確率を有する可能性が最も高いシナリオプロファイルパスであることを示している。したがって、ノード520は、可能性が最も高いシナリオプロファイルパスの一部であり得る。
さらに、可能性が最も高いシナリオプロファイルパスにはノード528が含まれる。例えば、ノード520からノード528への遷移の確率は、0.9であり、これは、ノード520からノード526への遷移の確率0.1よりも大きい。
可能性が最も高いシナリオプロファイルパスのノード520、528のダウンロード時間は、ノード520、528のサイズ、ならびにユーザデバイスのダウンロード速度および帯域幅に基づいて推定することができる。ユーザデバイスおよび/またはサーバは、ダウンロード時間を使用して、ノード528のシナリオプロファイルをプロアクティブにダウンロードするかどうかを決定することができる。例えば、ノード528は、数秒のダウンロード時間を有することができ、これは、ユーザがノード520のシナリオプロファイルを選択し、次いでノード528のシナリオプロファイルを選択する場合、遅延を引き起こす可能性が高い。すなわち、ユーザがノード520に留まる可能性のある時間は、0.6秒である。ノード528のシナリオプロファイルがダウンロードするのに数秒かかる場合、ダウンロード時間の数秒が、ユーザがノードに留まっている時間(0.6秒)よりも長いため、ユーザは遅延を経験する可能性がある。
したがって、ノード528のシナリオプロファイルのダウンロード時間は数秒であるが、ユーザは、ダウンロード時間よりも短い時間だけノード520に留まる可能性が高いため、ユーザデバイスは、そのようなリスクを許容できないと見なすことができるしたがって、ユーザデバイスは、遅延なしに、および/またはノード520のシナリオプロファイルのダウンロードが終了するとすぐに、ノード528のシナリオプロファイルをダウンロードすることができ、さらなる遅延を軽減することができる。
説明したように、有向グラフ500は、サーバによって構築され、関係ファイルに記述されてもよい。ユーザデバイスは、関係ファイルを受信し、関係ファイルから有向グラフ500を再作成することができる。ユーザデバイスのアプリケーションのランタイムは、再作成された有向グラフ500に基づいて、現在のノード(すなわち、シナリオプロファイル)に従って可能性が最も高い宛先ノードを見つけることができる。いくつかの実施形態では、可能な時間は、ユーザの記録された実際の時間に基づいて更新され得、さらに、将来の使用のために関係ファイルを更新するために、および/または再作成された方向グラフ500を更新するためにサーバに提供され得る。
有向グラフ500を構築する例をここで提供する。一部のオペレーティングシステムでは、開発中の新しいアプリケーションに、JAVA(登録商標)クラス、C/C++ライブラリ、ならびにイメージおよび文字列などのリソースファイルが含まれる場合がある。Java(登録商標)コンパイラ(Javac)はJAVA(登録商標)コードをコンパイルし、Clang/GNUのNot Unix(登録商標)(GNU)コンパイラコレクション(gcc)はC/C++コードをコンパイルすることができ、Android(登録商標)Asset Packaging Tool(Aapt)はリソースファイルをコンパイルすることができる。既存のアプリケーションコンテナには、Dalvik実行可能(dex)ファイル、C/C+=ライブラリ、およびコンパイル済みリソースファイルが含まれる場合がある。アクティビティは、ユーザ入力の受け入れ、バックグラウンドデータサービスの照会、および必要な情報の表示に使用される基本的なユーザインターフェースユニットによって区切られる場合がある。各アクティビティは、シナリオプロファイルと見なすことができる。
新しいアプリケーションをコンパイルするとき、サーバは、特定のアクティビティに必要なクラス、リソース、ライブラリをグループ化して、小さなパッケージ(シナリオプロファイル)としてグループ化および実装できる。例えば、Aaptは「OperatingSystemManifest.xml」ファイルを解析して、すべてのアクティビティの情報を取得することができる。サーバは、すべてのアクティビティの情報を利用して、アクティビティによって依存するjava(登録商標)クラスを判別できる。さらに、サーバは、「Proguide」またはJava(登録商標)依存関係分析ツール(Jdeps)などの依存関係分析ツールを利用する場合がある。したがって、サーバは、アクティビティの依存関係に応じて、1つのDexファイルを多数の小さなDexファイルにスプリットする場合がある。リソースには、ビットマップ、レイアウト定義、ユーザインターフェース文字列、アニメーション命令など、オペレーティングシステムコードが使用する追加のファイルおよび静的コンテンツが含まれる場合がある。オペレーティングシステムのアプリケーション内のコードは、「R.string.hello,R.id.myimageview and R.drawable.myimage」などのリソースを使用する場合があるため、サーバはツールを実装するか、既存のJava(登録商標)ソースコードパーサーツールを使用して、1つのアクティビティおよびその依存クラスによって使用されるリソースを解析することができる。これらのリソースは、上記で作成した小さなDexファイルに追加される。
いくつかの実施形態では、有向グラフ500は、Java(登録商標)Native Interface(JNI)ライブラリに基づいて生成されてもよい。例えば、JNIライブラリは、java(登録商標)アプリケーションによりC/C++関数を呼び出すために使用する。Java(登録商標)で呼び出されるすべての関数は、ネイティブ関数として宣言される。この情報を使用して、サーバは依存関係チェックツールを使用して対応するC/C++関数を識別し、対応するC/C++関数を小さなライブラリに再パッケージ化できる。いくつかの実施形態では、既存のアプリケーションの場合、ApkTool、dex2jar、java(登録商標)デコンパイラグラフィカルユーザインターフェース(jd-gui)などのリバースエンジニアリングツールは、dexファイルをjava(登録商標)コードに逆コンパイルするのに役立ち、および/またはAaptは、コンパイルされたリソースファイルを逆コンパイルすることができ、そして依存関係ツールはそれらをスプリットして再パッケージ化できる。
図8に目を向けると、グラフィカルユーザインターフェース(GUI)600が示されている。GUI600は、ビデオプレーヤ602、テキスト読み上げ604、翻訳606、音楽プレーヤ608、電子書籍(eBook)読み取り610、およびインターネットブラウザ612を含む、いくつかの異なる機能を呼び出すことができる。ユーザは、GUI600上の対応する領域上にカーソルをナビゲートすることによって、またはGUI600上の対応する領域に触れることによって、例えば、ビデオプレーヤ602、テキスト読み上げ604、翻訳606、音楽プレーヤ608、eBook読み取り610、およびインターネットブラウザ612のうちの1つを選択することができる。ビデオプレーヤ602、テキスト読み上げ604、翻訳606、音楽プレーヤ608、eBook読み取り610、およびインターネットブラウザ612の各々は、異なるシナリオプロファイルに対応し得る。したがって、ユーザデバイスは、GUI600を表示することができる。GUIが表示されると、ユーザデバイスは、ユーザが選択する可能性のあるシナリオプロファイルを識別し、他のシナリオプロファイルのダウンロードを回避しながら、そのシナリオプロファイルを自動的にダウンロードすることができる。したがって、例えば、ユーザデバイスは、ビデオプレーヤ602が選択されるが、テキスト読み上げ604は選択されないことを予測することができる。したがって、ビデオプレーヤ602のシナリオプロファイル(例えば、ソースコード)はダウンロードされ得るが、テキスト読み上げ604のシナリオプロファイル(例えば、ソースコード)はダウンロードされない場合がある。
ここで図9に目を向けると、向上したアプリケーション配布コンピューティングシステム158(例えば、サーバ)が示されている。コンピューティングシステム158は、一般に、コンピューティング機能(例えば、携帯情報端末/PDA、ノートブックコンピュータ、タブレットコンピュータ、コンバーチブルタブレット、サーバ)、通信機能(例えば、スマートフォン)、イメージング機能(例えば、カメラ、カムコーダ)、メディア再生機能(例えば、スマートテレビ/TV)、ウェアラブル機能(例えば、時計、アイウェア、ヘッドウェア、フットウェア、ジュエリー)、車両機能(例えば、車、トラック、オートバイ)など、またはそれらの任意の組み合わせを有する電気デバイス/プラットフォームの一部であり得る。図示の例では、システム158は、システムメモリ164に結合された統合メモリコントローラ(IMC)162を有するホストプロセッサ160(例えば、1つまたは複数のプロセッサコアを備えたCPU)を含む。
図示のシステム158はまた、グラフィックスプロセッサ168(例えば、グラフィックス処理ユニット/GPU)およびシステムオンチップ(SOC)として半導体ダイ170上にプロセッサ160(例えば、マイクロコントローラとして)と共に実装されたおよび入力出力(IO)モジュール166を含み、IOモジュール166は、例えば、ディスプレイ172(例えば、タッチスクリーン、液晶ディスプレイ/LCD、発光ダイオード/LEDディスプレイ)、入力周辺機器156(例えば、マウス、キーボード、マイクロフォン)、ネットワークコントローラ174(例えば、有線および/または無線)、および大容量ストレージ176(例えば、ハードディスクドライブ/HDD、光ディスク、ソリッドステートドライブ/SSD、フラッシュメモリ、または他の不揮発性メモリ/NVM)と通信することができる。
いくつかの実施形態では、SOC170は、依存関係チェックツール142を利用して、アプリケーションコード146を解析して、アプリケーションコード146の異なるシナリオプロファイル144(機能)間の遷移確率を含む有向グラフを生成することができる。詳細には、SOC170は、例えば、NVM176および/またはシステムメモリ164に格納された命令を実装して、アプリケーションコード146を解析することができる。有向グラフは、関係ファイル140としてシステムメモリ164に格納されてもよい。
ホストプロセッサ160は、ネットワークコントローラ174を介して別のコンピューティングデバイス(例えば、ユーザデバイス)と通信することができる。ユーザデバイスは、アプリケーションコード146のインストールを要求することができる。アプリケーションコード146全体を送信するのではなく、ホストプロセッサ160は、アプリケーションを開始するために要求され得るシナリオプロファイル144からのシナリオプロファイルのみを提供し、さらに関係ファイル140を提供することができる。残りのシナリオプロファイル144は送信されない可能性がある。むしろ、ホストプロセッサ158は、シナリオプロファイル144のより多くのシナリオプロファイルを求める要求をユーザデバイスから受信することができる。例えば、ユーザデバイスは、関係ファイル140およびユーザデバイス上で現在選択されているシナリオプロファイルに基づいて、ユーザの行動の予測分析を行うことができる。
ホストプロセッサ160は、シナリオプロファイル144をキャッシュ178に格納して、ユーザデバイスに送信するためのシナリオプロファイル144へのアクセスの待ち時間を容易に少なくする。対照的に、関係ファイル140がユーザデバイスに送信された後に関係ファイル140を必要としないかもしれないので、関係ファイル140は、システムメモリ164に格納され得る。したがって、待ち時間を減らし、メモリ使用量を減らし、ネットワークトラフィックを減らすために、向上したアプリケーション配布スキームが提供される。
図10は、半導体パッケージ装置180を示す。図示の装置180は、1つまたは複数の基板184(例えば、シリコン、サファイア、ガリウムヒ素)および1つまたは複数の基板184に結合されたロジック182(例えば、トランジスタアレイおよび他の集積回路/ICコンポーネント)を含む。一例では、ロジック182は、構成可能なロジックまたは固定機能ロジックハードウェアに少なくとも部分的に実装されている。ロジック182は、すでに説明したプロセス100(図1A~図1B)、方法350(図2)、方法360(図3)、方法380(図4)、方法400(図5)、および/または方法450(図6)のうちの1つまたは複数の態様を実装することができる。いくつかの実施形態では、ロジック182は、アプリケーションを、各々がアプリケーションの1つまたは複数の機能に関連する複数の部分に分割して、複数の部分の間の遷移確率を決定することができる。ロジック182はさらに、1つまたは複数の部分および確率をコンピューティングデバイスに提供することができる。ロジック182は、別のコンピューティングデバイスからアプリケーションのさらなる部分に対する要求を受信し、別のコンピューティングデバイスにさらなる部分を提供することができる。一例では、ロジック182は、基板184内に配置される(例えば、埋め込まれる)トランジスタチャネル領域を含む。したがって、ロジック182と基板184との間のインターフェースは、階段接含ではない場合がある。ロジック182はまた、基板184の最初のウェーハ上に成長するエピタキシャル層を含むと見なされ得る。
図11は、一実施形態によるプロセッサコア200を示す。プロセッサコア200は、マイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、またはコードを実行するための他のデバイスなどの任意のタイプのプロセッサのコアであり得る。図11には1つのプロセッサコア200のみが示されているが、処理要素は、代わりに、図11に示されているプロセッサコア200のうちの2つ以上を含み得る。プロセッサコア200は、シングルスレッドコアであり得るか、または少なくとも1つの実施形態では、プロセッサコア200は、コアごとに2つ以上のハードウェアスレッドコンテキスト(または「ロジックプロセッサ」)を含み得るという点でマルチスレッドであり得る。
図11はまた、プロセッサコア200に結合されたメモリ270を示している。メモリ270は、当業者に知られているか、またはそうでなければ利用可能であるように、多種多様なメモリ(メモリ階層の様々な層を含む)のいずれかであり得る。メモリ270は、プロセッサコア200によって実行される1つまたは複数のコード213命令を含むことができ、コード213は、すでに説明したプロセス100(図1A~図1B)、方法350(図2)、方法360(図3)、方法380(図4)、方法400(図5)、および/または方法450(図6)のうちの1つまたは複数の態様を実装することができる。プロセッサコア200は、コード213によって示される命令のプログラムシーケンスに従う。各命令は、フロントエンド部分210に入り、1つまたは複数のデコーダ220によって処理されてもよい。デコーダ220は、その出力として、事前定義されたフォーマットでの固定幅マイクロ操作などのマイクロ操作を生成することができ、または元のコード命令を反映する他の命令、マイクロ命令、または制御信号を生成することができる。図示のフロントエンド部分210はまた、レジスタ名前変更ロジック225およびスケジューリングロジック230を含み、これらは、一般に、リソースを割り当て、実行のために変換命令に対応する操作をキューに入れる。
プロセッサコア200は、実行ユニット255-1~255-Nのセットを有する実行ロジック250を含むように示されている。いくつかの実施形態は、特定の機能または機能のセット専用のいくつかの実行ユニットを含んでもよい。他の実施形態は、特定の機能を実行することができる1つの実行ユニットのみまたは1つの実行ユニットを含んでもよい。図示の実行ロジック250は、コード命令によって指定された操作を実行する。
コード命令によって指定された操作の実行の完了後、バックエンドロジック260は、コード213の命令をリタイアする。一実施形態では、プロセッサコア200は、アウトオブオーダー実行を可能にするが、命令のリタイアを順番に要求する。リタイアメントロジック265は、当業者に知られているように様々な形態をとることができる(例えば、リオーダーバッファなど)。このようにして、プロセッサコア200は、コード213の実行中に、少なくとも、デコーダによって生成された出力、レジスタ名前変更ロジック225によって利用されたハードウェアレジスタおよびテーブル、ならびに実行ロジック250によって変更された任意のレジスタ(図示せず)に関して変換される。
図11には示されていないが、処理要素は、プロセッサコア200を備えたチップ上の他の要素を含んでもよい。例えば、処理要素は、プロセッサコア200と共にメモリ制御ロジックを含んでもよい。処理要素は、入力/出力(I/O)制御ロジックを含んでもよく、および/またはメモリ制御ロジックと統合されたI/O制御ロジックを含んでもよい。処理要素はまた、1つまたは複数のキャッシュも含んでもよい。
ここで図12を参照すると、一実施形態によるコンピューティングシステム1000の実施形態のブロック図が示されている。図12に示されているのは、第1の処理要素1070および第2の処理要素1080を含むマルチプロセッサシステム1000である。2つの処理要素1070および1080が示されているが、システム1000の実施形態はまた、1つのそのような処理要素のみを含み得ることが理解されるべきである。
システム1000は、ポイントツーポイント相互接続システムとして示され、第1の処理要素1070および第2の処理要素1080は、ポイントツーポイント相互接続1050を介して結合される。図12に示される相互接続のいずれかまたはすべては、ポイントツーポイント相互接続ではなく、マルチドロップバスとして実装され得ることが理解されるべきである。
図12に示されるように、処理要素1070および1080の各々は、第1および第2のプロセッサコア(すなわち、プロセッサコア1074aおよび1074bならびにプロセッサコア1084aおよび1084b)を含むマルチコアプロセッサであってもよい。そのようなコア1074a、1074b、1084a、1084bは、図11に関連して上で論じたのと同様の方法で命令コードを実行するように構成されてもよい。
各処理要素1070、1080は、少なくとも1つの共有キャッシュ1896a、1896bを含んでもよい。共有キャッシュ1896a、1896bは、それぞれコア1074a、1074b、および1084a、1084bなどのプロセッサの1つまたは複数のコンポーネントによって利用されるデータ(例えば、命令)を格納することができる。例えば、共有キャッシュ1896a、1896bは、プロセッサのコンポーネントによるより高速なアクセスのために、メモリ1032、1034に格納されたデータをローカルにキャッシュすることができる。1つまたは複数の実施形態では、共有キャッシュ1896a、1896bは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはそれらの組み合わせなどの1つまたは複数の中間レベルキャッシュを含み得る。
2つの処理要素1070、1080のみで示されているが、実施形態の範囲はそれほど限定されないことが理解されるべきである。他の実施形態では、1つまたは複数の追加の処理要素が、所与のプロセッサに存在してもよい。あるいは、処理要素1070、1080のうちの1つまたは複数は、アクセラレータまたはフィールドプログラマブルゲートアレイなどのプロセッサ以外の要素であってもよい。例えば、追加の処理要素は、第1のプロセッサ1070と同じ追加のプロセッサ、第1のプロセッサ1070を処理するために異種または非対称である追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、またはその他の処理要素を含んでもよい。建築、マイクロ建築、熱、電力消費特性などを含むメリットの測定基準のスペクトルに関して、処理要素1070、1080の間には様々な違いがあり得る。これらの違いは、処理要素1070、1080の間の非対称性および不均一性として効果的に現れる可能性がある。少なくとも1つの実施形態では、様々な処理要素1070、1080は、同じダイパッケージ内に存在してもよい。
第1の処理要素1070は、メモリコントローラロジック(MC)1072ならびにポイントツーポイント(P-P)インターフェース1076および1078をさらに含んでもよい。同様に、第2の処理要素1080は、MC1082ならびにP-Pインターフェース1086および1088を含んでもよい。図12に示されるように、MCの1072および1082は、プロセッサをそれぞれのメモリ、すなわち、メモリ1032およびメモリ1034に結合し、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。MC1072および1082は、処理要素1070、1080に統合されるように示されているが、代替の実施形態では、MCロジックは、処理要素1070、1080に統合されるのではなく、処理要素1070、1080の外側の離散ロジックであり得る。
第1の処理要素1070および第2の処理要素1080は、それぞれ、P-P相互接続1076 1086を介してI/Oサブシステム1090に結合することができる。図10に示されるように、I/Oサブシステム1090は、P-Pインターフェース1094および1098を含む。さらに、I/Oサブシステム1090は、I/Oサブシステム1090を高性能グラフィックスエンジン1038と結合するためのインターフェース1092を含む。一実施形態では、バス1049を使用して、グラフィックスエンジン1038をI/Oサブシステム1090に結合することができる。あるいは、ポイントツーポイント相互接続がこれらのコンポーネントを結合することができる。
次に、I/Oサブシステム1090は、インターフェース1096を介して第1のバス1016に結合することができる。一実施形態では、第1のバス1016は、ペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバスもしくは別の第3世代I/O相互接続バスなどのバスであり得るが、実施形態の範囲はそのように限定されない。
図12に示されるように、様々なI/Oデバイス1014(例えば、バイオメトリックスキャナ、スピーカー、カメラ、センサ)は、第1のバス1016を第2のバス1020に結合し得るバスブリッジ1018と共に、第1のバス1016に結合され得る。一実施形態では、第2のバス1020は、低ピン数(LPC)バスであってもよい。一実施形態では、例えば、キーボード/マウス1012、1つまたは複数の通信デバイス1026、およびコード1030を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのデータストレージユニット1019を含む様々なデバイスを第2のバス1020に結合することができる。図示のコード1030は、すでに説明したプロセス100(図1A~図1B)、方法350(図2)、方法360(図3)、方法380(図4)、方法400(図5)、および/または方法450(図6)のうちの1つまたは複数の態様を実装することができる。さらに、オーディオI/O1024は、第2のバス1020に結合されてもよく、バッテリ1010は、コンピューティングシステム1000に電力を供給することができる。
他の実施形態が企図されることに留意されたい。例えば、図12のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは別のそのような通信トポロジーを実装することができる。また、図12の要素は、代わりに、図12に示されるよりも多いまたは少ない統合チップを使用してパーティションされ得る。
追記と実施例:
実施例1は、1つまたは複数の基板と、1つまたは複数の基板に結合されたロジックと、を含み、ロジックは、構成可能なロジックまたは固定機能ロジックハードウェアのうちの1つまたは複数に実装され、ロジックは、複数の部分の少なくとも第1の部分を受信することであって、複数の部分の各々は、アプリケーションの1つまたは複数の異なる機能に関連するコードである、受信することと、複数の部分の間の複数の遷移確率を示す関係ファイルを受信することと、を行うために、1つまたは複数の基板に結合されている、半導体装置を含んでもよい。
実施例2は、ロジックが、遷移確率のグループを複数の遷移確率から決定することであって、遷移確率のグループの各遷移確率は、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の確率を示す、決定することと、遷移確率のグループの比較に基づいて、複数の部分から第2の部分を決定することと、サーバに第2の部分を要求することと、を行う実施例1に記載の半導体装置を含んでもよい。
実施例3は、遷移確率のグループからの最大の遷移確率が、第1の部分から第2の部分への遷移確率である、実施例2に記載の半導体装置を含んでもよい。
実施例4は、ロジックが、ダウンロード速度または帯域幅のうちの1つまたは複数に関連する待ち時間を決定することと、待ち時間および関係ファイルに基づいて、複数の部分の第3の部分を要求するかどうかを決定することと、を行い、関係ファイルによれば、第2の部分は、第3の部分に遷移する、実施例2に記載の半導体装置を含んでもよい。
実施例5は、ロジックが、第3の部分のサイズに基づいて、第3の部分を要求するかどうかを決定する、実施例4に記載の半導体装置を含んでもよい。
実施例6は、ロジックが、ユーザの現在の習慣、地理的位置、感知された信号、ユーザの人口統計、または機械学習のうちの1つまたは複数に基づいて、複数の遷移確率を調整する、実施例1に記載の半導体装置を含んでもよい。
実施例7は、1つまたは複数の基板に結合されたロジックが、1つまたは複数の基板内に配置されたトランジスタチャネル領域を含む、実施例1に記載の半導体装置を含んでもよい。
実施例8は、実行可能なプログラム命令のセットを含む少なくとも1つのコンピュータ可読記憶媒体であって、プログラム命令は、コンピューティングシステムによって実行されると、コンピューティングシステムに、複数の部分の少なくとも第1の部分を受信する手順であって、複数の部分の各々は、アプリケーションの1つまたは複数の異なる機能に関連するコードである、受信する手順と、複数の部分の間の複数の遷移確率を示す関係ファイルを受信する手順と、を行わせる、少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例9は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、遷移確率のグループを複数の遷移確率から決定する手順であって、遷移確率のグループの各遷移確率は、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の確率を示す、決定する手順と、遷移確率のグループの比較に基づいて、複数の部分から第2の部分を決定する手順と、サーバに第2の部分を要求する手順と、を行わせる、実施例8に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例10は、遷移確率のグループからの最大の遷移確率が、第1の部分から第2の部分への遷移確率である、実施例9に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例11は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、コンピューティングシステムのダウンロード速度またはコンピューティングシステムの帯域幅のうちの1つまたは複数に関連する待ち時間を決定する手順と、待ち時間および関係ファイルに基づいて、複数の部分の第3の部分を要求するかどうかを決定する手順と、を行わせ、関係ファイルによれば、第2の部分は、第3の部分に遷移する、実施例9に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例12は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、第3の部分のサイズに基づいて、第3の部分を要求するかどうかを決定する手順を行わせる、実施例11に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例13は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、ユーザの現在の習慣、地理的位置、感知された信号、ユーザの人口統計、または機械学習のうちの1つまたは複数に基づいて、複数の遷移確率を調整させる、実施例8に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例14は、実行可能なプログラム命令のセットを含む少なくとも1つのコンピュータ可読記憶媒体であって、プログラム命令は、コンピューティングシステムによって実行されると、コンピューティングシステムに、アプリケーションを、各々がアプリケーションの1つまたは複数の機能に関連するコードである複数の部分に分割する手順と、複数の部分の間の複数の遷移確率を決定する手順と、を行わせる、少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例15は、アプリケーションの各機能が、グラフィカルユーザインターフェースを介して選択可能である、実施例14に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例16は、遷移確率が、各々、ユーザが機能をそれぞれ1つ選択するという予測確率を表す、実施例14に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例17は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、複数の部分の第1の部分をユーザデバイスに送信することを識別する手順と、複数の部分の第2の部分をユーザデバイスに送信するという指示を受信する手順と、を行わせ、複数の遷移確率からの遷移確率の第1のグループは、各々、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の予測確率を示し、第1の部分と第2の部分との間の第1のグループからの遷移確率は、第1のグループの中で最大である、実施例14に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例18は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、複数の部分および遷移確率の有向グラフを生成するために利用される関係ファイルを生成する手順であって、有向グラフにおいて、遷移確率の各々は、複数の部分の2つの異なる部分の間の遷移の確率を示す、生成する手順と、関係ファイルをユーザデバイスに送信する手順と、を行わせる、実施例14に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例19は、実行可能なプログラム命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、複数の部分のユーザ生成選択を受信する手順と、受信したユーザ生成選択に基づいて、遷移確率を調整する手順と、を行わせる、実施例14に記載の少なくとも1つのコンピュータ可読記憶媒体を含んでもよい。
実施例20は、1つまたは複数の基板と、1つまたは複数の基板に結合されたロジックと、を含み、ロジックは、構成可能なロジックまたは固定機能ロジックハードウェアのうちの1つまたは複数に実装され、ロジックは、アプリケーションを、各々がアプリケーションの1つまたは複数の機能に関連するコードである複数の部分に分割することと、複数の部分の間の複数の遷移確率を決定することと、を行うために、1つまたは複数の基板に結合されている、半導体装置を含んでもよい。
実施例21は、アプリケーションの各機能が、グラフィカルユーザインターフェースを介して選択可能である、実施例20に記載の半導体装置を含んでもよい。
実施例22は、遷移確率が、各々、ユーザが機能をそれぞれ1つ選択するという予測確率を表す、実施例20に記載の半導体装置を含んでもよい。
実施例23は、ロジックが、複数の部分の第1の部分をユーザデバイスに送信することを識別することと、複数の部分の第2の部分をユーザデバイスに送信するという指示を受信することと、を行い、複数の遷移確率からの遷移確率の第1のグループは、各々、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の予測確率を示し、第1の部分と第2の部分との間の第1のグループからの遷移確率は、第1のグループの中で最大である、実施例20に記載の半導体装置を含んでもよい。
実施例24は、ロジックが、複数の部分のユーザ生成選択を受信し、受信したユーザ生成選択に基づいて、遷移確率を調整する、実施例20に記載の半導体装置を含んでもよい。
実施例25は、1つまたは複数の基板に結合されたロジックが、1つまたは複数の基板内に配置されたトランジスタチャネル領域を含む、実施例20に記載の半導体装置を含んでもよい。
実施例26は、複数の部分の少なくとも第1の部分を受信する手段であって、複数の部分の各々は、アプリケーションの1つまたは複数の異なる機能に関連するコードである、少なくとも第1の部分を受信する手段と、複数の部分の間の複数の遷移確率を示す関係ファイルを受信する手段と、を含む、半導体装置を含んでもよい。
実施例27は、遷移確率のグループを複数の遷移確率から決定する手段であって、遷移確率のグループの各遷移確率は、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の確率を示す、決定する手段と、遷移確率のグループの比較に基づいて、複数の部分から第2の部分を決定する手段と、サーバに第2の部分を要求する手段と、をさらに含む、実施例26に記載の半導体装置を含んでもよい。
実施例28は、遷移確率のグループからの最大の遷移確率が、第1の部分から第2の部分への遷移確率である、実施例27に記載の半導体装置を含んでもよい。
実施例29は、ダウンロード速度または帯域幅のうちの1つまたは複数に関連する待ち時間を決定する手段と、待ち時間および関係ファイルに基づいて、複数の部分の第3の部分を要求するかどうかを決定する手段と、をさらに含み、関係ファイルによれば、第2の部分は、第3の部分に遷移する、実施例27に記載の半導体装置を含んでもよい。
実施例30は、第3の部分のサイズに基づいて、第3の部分を要求するかどうかを決定する手段をさらに含む、実施例29に記載の半導体装置を含んでもよい。
実施例31は、ユーザの現在の習慣、地理的位置、感知された信号、ユーザの人口統計、または機械学習のうちの1つまたは複数に基づいて、複数の遷移確率を調整する手段をさらに含む、実施例26に記載の半導体装置を含んでもよい。
実施例32は、アプリケーションを、各々がアプリケーションの1つまたは複数の機能に関連するコードである複数の部分に分割する手段と、複数の部分の間の複数の遷移確率を決定する手段と、を含む、半導体装置を含んでもよい。
実施例33は、アプリケーションの各機能が、グラフィカルユーザインターフェースを介して選択可能である、実施例32に記載の半導体装置を含んでもよい。
実施例34は、遷移確率が、各々、ユーザが機能をそれぞれ1つ選択するという予測確率を表す、実施例32に記載の半導体装置を含んでもよい。
実施例35は、複数の部分の第1の部分をユーザデバイスに送信するかを識別する手段と、複数の部分の第2の部分をユーザデバイスに送信するという指示を受信する手段と、をさらに含み、複数の遷移確率からの遷移確率の第1のグループは、各々、第1の部分から、複数の部分からの異なるそれぞれの部分への遷移の予測確率を示し、第1の部分と第2の部分との間の第1のグループからの遷移確率は、第1のグループの中で最大である、実施例32に記載の半導体装置を含んでもよい。
実施例36は、複数の部分および遷移確率の有向グラフを生成するために利用される関係ファイルを生成する手段であって、有向グラフにおいて、遷移確率の各々は、複数の部分の2つの異なる部分の間の遷移の確率を示す、関係ファイルを生成する手段と、関係ファイルをユーザデバイスに送信する手段と、をさらに含む、実施例32に記載の半導体装置を含んでもよい。
実施例37は、複数の部分のユーザ生成選択を受信する手段と、受信したユーザ生成選択に基づいて、遷移確率を調整する手段と、をさらに含む、実施例32に記載の半導体装置を含んでもよい。
実施形態は、すべてのタイプの半導体集積回路(「IC」)チップでの使用に適用可能である。これらのICチップの例には、プロセッサ、コントローラ、チップセットコンポーネント、プログラマブルロジックアレイ(PLA)、メモリチップ、ネットワークチップ、システムオンチップ(SoC)、SSD/NANDコントローラASICなどが含まれるが、これらに限定されない。さらに、一部の図面では、信号導体線を線で表している。いくつかは、より多くの構成信号パスを示すために異なる場合があり、構成信号パスの数を示すために番号ラベルを有し、および/または一次情報の流れの方向を示すために1つもしくは複数の端部に矢印を有する。ただし、これを限定的に解釈するべきではない。むしろ、そのような追加された詳細は、回路の理解をより容易にするために、1つまたは複数の例示的な実施形態に関連して使用され得る。追加情報があるかどうかにかかわらず、表された信号線は、実際には、複数の方向に移動する可能性があり、任意の適切なタイプの信号方式、例えば、差動ペア、光ファイバー線、および/またはシングルエンド線で実装されたデジタルまたはアナログ線で実装できる、1つまたは複数の信号を含むことができる。
実施形態は同じに限定されないが、例示的なサイズ/モデル/値/範囲が与えられている場合がある。製造技術(例えば、フォトリソグラフィー)が時間と共に成熟するにつれて、より小さなサイズのデバイスを製造できることが予期される。さらに、図解および説明を簡単にするために、また実施形態の特定の態様を不明瞭にしないように、ICチップおよび他のコンポーネントへの周知の電源/接地接続が図内に示されてもされなくてもよい。さらに、配置は、実施形態が不明瞭になることを回避するために、また、そのようなブロック図配置の実装に関する詳細が、実施形態が実装されるコンピューティングシステムに大きく依存するという事実を考慮して、ブロック図形式で示され得、すなわち、そのような詳細は、当業者の範囲内に十分にあるべきである。例示的な実施形態を説明するために特定の詳細(例えば、回路)が示される場合、これらの特定の詳細なしで、またはこれらの特定の詳細の変形を伴って実施形態を実施できることは当業者には明らかであるはずである。したがって、説明は、限定するのではなく、例示と見なされるべきである。
「結合された」という用語は、本明細書では、問題のコンポーネント間の直接的または間接的な任意のタイプの関係を指すために使用され得、電気的、機械的、流体、光学的、電磁気的、電気機械的、または他の接続に適用され得る。さらに、「第1」、「第2」などの用語は、本明細書では議論を容易にするためにのみ使用され得、特に明記しない限り、特定の時間的または時系列的な重要性を持たない。
本出願および特許請求の範囲で使用されるように、「1つまたは複数」という用語によって結合されたアイテムのリストは、リストされた用語の任意の組み合わせを意味し得る。例えば、「A、B、またはCのうちの1つまたは複数」という句は両方ともA、B、C、AおよびB、AおよびC、BおよびC、またはA、B、およびCを意味する場合がある。
当業者は、前述の説明から、実施形態の広範な技術が様々な形態で実装され得ることを理解するであろう。したがって、実施形態はその特定の例に関連して説明されてきたが、図面、明細書、および以下の特許請求の範囲を検討すると、他の修正が当業者に明らかになるので、実施形態の真の範囲はそれほど限定されるべきではない。
他の考えられる項目
[項目1]
1つまたは複数の基板と、上記1つまたは複数の基板に結合されたロジックと、を備え、上記ロジックは、構成可能なロジックまたは固定機能ロジックハードウェアのうちの1つまたは複数に実装され、上記ロジックは、複数の部分の少なくとも第1の部分を受信することであって、上記複数の部分の各々は、アプリケーションの1つまたは複数の異なる機能に関連するコードである、受信することと、上記複数の部分の間の複数の遷移確率を示す関係ファイルを受信することと、を行うために、上記1つまたは複数の基板に結合されている、半導体装置。
[項目2]
上記ロジックが、遷移確率のグループを上記複数の遷移確率から決定することであって、上記遷移確率のグループの各遷移確率は、上記第1の部分から、上記複数の部分からの異なるそれぞれの部分への遷移の確率を示す、決定することと、上記遷移確率のグループの比較に基づいて、上記複数の部分から第2の部分を決定することと、サーバに上記第2の部分を要求することと、を行う、項目1に記載の半導体装置。
[項目3]
上記遷移確率のグループからの最大の遷移確率が、上記第1の部分から上記第2の部分への遷移確率である、項目2に記載の半導体装置。
[項目4]
上記ロジックが、ダウンロード速度または帯域幅のうちの1つまたは複数に関連する待ち時間を決定することと、上記待ち時間および上記関係ファイルに基づいて、上記複数の部分の第3の部分を要求するかどうかを決定することと、を行い、上記関係ファイルによれば、上記第2の部分は、上記第3の部分に遷移する、項目2に記載の半導体装置。
[項目5]
上記ロジックが、上記第3の部分のサイズに基づいて、上記第3の部分を要求するかどうかを決定する、項目4に記載の半導体装置。
[項目6]
上記ロジックは、ユーザの現在の習慣、地理的位置、感知された信号、上記ユーザの人口統計、または機械学習のうちの1つまたは複数に基づいて、上記複数の遷移確率を調整する、項目1に記載の半導体装置。
[項目7]
上記1つまたは複数の基板に結合された上記ロジックが、上記1つまたは複数の基板内に配置されたトランジスタチャネル領域を含む、項目1に記載の半導体装置。
[項目8]
実行可能なプログラム命令のセットを備える少なくとも1つのコンピュータ可読記憶媒体であって、上記プログラム命令は、コンピューティングシステムによって実行されると、上記コンピューティングシステムに、複数の部分の少なくとも第1の部分を受信する手順であって、上記複数の部分の各々は、アプリケーションの1つまたは複数の異なる機能に関連するコードである、受信する手順と、上記複数の部分の間の複数の遷移確率を示す関係ファイルを受信する手順と、を行わせる、少なくとも1つのコンピュータ可読記憶媒体。
[項目9]
上記実行可能なプログラム命令が、上記コンピューティングシステムによって実行されると、上記コンピューティングシステムに、遷移確率のグループを上記複数の遷移確率から決定する手順であって、上記遷移確率のグループの各遷移確率は、上記第1の部分から、上記複数の部分からの異なるそれぞれの部分への遷移への確率を示す、決定する手順と、上記遷移確率のグループの比較に基づいて、上記複数の部分から第2の部分を決定する手順と、サーバに上記第2の部分を要求する手順と、を行わせる、項目8に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目10]
上記遷移確率のグループからの最大の遷移確率が、上記第1の部分から上記第2の部分への遷移確率である、項目9に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目11]
上記実行可能なプログラム命令が、上記コンピューティングシステムによって実行されると、上記コンピューティングシステムに、上記コンピューティングシステムのダウンロード速度または上記コンピューティングシステムの帯域幅のうちの1つまたは複数に関連する待ち時間を決定する手順と、上記待ち時間および上記関係ファイルに基づいて、上記複数の部分の第3の部分を要求するかどうかを決定する手順と、を行わせ、上記関係ファイルによれば、上記第2の部分は、上記第3の部分に遷移する、項目9に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目12]
上記実行可能なプログラム命令が、上記コンピューティングシステムによって実行されると、上記コンピューティングシステムに、上記第3の部分のサイズに基づいて、上記第3の部分を要求するかどうかを決定する手順を行わせる、項目11に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目13]
実行可能なプログラム命令のセットを備える少なくとも1つのコンピュータ可読記憶媒体であって、上記プログラム命令は、コンピューティングシステムによって実行されると、上記コンピューティングシステムに、アプリケーションを、各々が上記アプリケーションの1つまたは複数の機能に関連するコードである複数の部分に分割する手順と、上記複数の部分の間の複数の遷移確率を決定する手順と、を行わせる、少なくとも1つのコンピュータ可読記憶媒体。
[項目14]
上記遷移確率が、各々、ユーザが上記機能をそれぞれ1つ選択するという予測確率を表す、請求項項目13に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目15]
上記実行可能なプログラム命令が、上記コンピューティングシステムによって実行されると、上記コンピューティングシステムに、上記複数の部分の第1の部分をユーザデバイスに送信することを識別する手順と、上記複数の部分の第2の部分を上記ユーザデバイスに送信するという指示を受信する手順と、を行わせ、上記複数の遷移確率からの遷移確率の第1のグループは、各々、上記第1の部分から、上記複数の部分からの異なるそれぞれの部分への遷移の予測確率を示し、上記第1の部分と上記第2の部分との間の上記第1のグループからの遷移確率は、上記第1のグループの中で最大である、項目13に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目16]
上記実行可能なプログラム命令が、上記コンピューティングシステムによって実行されると、上記コンピューティングシステムに、上記複数の部分および上記遷移確率の有向グラフを生成するために利用される関係ファイルを生成する手順であって、上記有向グラフにおいて、上記遷移確率の各々は、上記複数の部分の2つの異なる部分の間の遷移の確率を示す、生成する手順と、上記関係ファイルをユーザデバイスに送信する手順と、を行わせる、項目13に記載の少なくとも1つのコンピュータ可読記憶媒体。
[項目17]
1つまたは複数の基板と、上記1つまたは複数の基板に結合されたロジックと、を備え、上記ロジックは、構成可能なロジックまたは固定機能ロジックハードウェアのうちの1つまたは複数に実装され、上記ロジックは、アプリケーションを、各々が上記アプリケーションの1つまたは複数の機能に関連するコードである複数の部分に分割することと、上記複数の部分の間の複数の遷移確率を決定することと、を行うために、上記1つまたは複数の基板に結合されている、半導体装置。
[項目18]
上記遷移確率が、各々、ユーザが上記機能をそれぞれ1つ選択するという予測確率を表す、項目17に記載の半導体装置。
[項目19]
上記ロジックが、上記複数の部分の第1の部分をユーザデバイスに送信することを識別することと、上記複数の部分の第2の部分を上記ユーザデバイスに送信するという指示を受信することと、を行い、上記複数の遷移確率からの遷移確率の第1のグループは、各々、上記第1の部分から、上記複数の部分からの異なるそれぞれの部分への遷移の予測確率を示し、上記第1の部分と上記第2の部分との間の上記第1のグループからの遷移確率は、上記第1のグループの中で最大である、項目17に記載の半導体装置。
[項目20]
上記1つまたは複数の基板に結合された上記ロジックが、上記1つまたは複数の基板内に配置されたトランジスタチャネル領域を含む、項目17に記載の半導体装置。