(57)【特許請求の範囲】
【請求項１】
サーバ−ベースのコンパイル方法であって：
異なるソースコード言語をコンパイルするために、複数のコンパイラを有するサーバにおいてコードコンパイル要求を受信することであって、前記コードコンパイル要求は、前記異なるソースコード言語の１つを識別する情報を含むものである、前記受信することと；
前記サーバが前記コードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、前記コードコンパイル要求の情報を前記サーバに記憶された前記複数のコンパイラのリストと比較することと；
前記コードコンパイル要求への応答を前記サーバからネットワークを介してクライアントに伝達することであって、前記応答は、前記コードコンパイル要求の容認または拒否の指示を含むものである、前記伝達することと；
を備え、
前記応答が前記コードコンパイル要求の容認の指示を含む場合：
前記サーバにおいてコンパイルすべきソースコードを受信することと；
前記ソースコードをコンパイルしてコンパイル済みコードを生成するのに適した選択されたコンパイラを使用して、前記サーバにおいて前記受信したソースコードをコンパイルすることと；
前記コンパイル済みコードを前記サーバから前記ネットワークを介してクライアントデバイスに伝達することと；
を備え、前記クライアントデバイスは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバのうちの１つを備えるクライアントと、プロセッサとを備え、前記ソースコードは、グラフィックスプログラムを含み、前記クライアントは、グラフィックス処理ユニットを含むターゲットデバイス上へのゲームアプリケーションプログラムのインストールに関連して、前記グラフィックスプログラムのコンパイルを要求するディストリビュータによって使用されるインストーラプログラムである方法。
【請求項２】
前記情報は、ソースコード言語名、ソースコード言語バージョン、処理デバイス名、処理デバイスバージョン、ドライバ名、ドライババージョン、またはそれらの任意の組合せを含む、請求項１に記載の方法。
【請求項３】
前記ネットワークは、インターネットプロトコルネットワークである、請求項１に記載の方法。
【請求項４】
前記ネットワークは、ワイヤレスネットワークであり、前記サーバは、ワイヤレス基地局内に配置される、請求項１に記載の方法。
【請求項５】
前記ソースコードは、シェーディング言語コードと、機械実行コードに変換すべき中間表現バイトコードと、Ｃ言語コードと、からなるグループから選択され、前記コンパイル済みコードは、グラフィックス処理ユニット（ＧＰＵ）実行コードと、デジタル信号プロセッサ（ＤＳＰ）実行コードと、ＣＰＵ実行コードと、からなるグループから選択される、請求項１に記載の方法。
【請求項６】
前記ソースコードの前記コンパイルは、前記コードコンパイル要求に応答してリアルタイムまたはほぼリアルタイムベースで実行される、請求項１に記載の方法。
【請求項７】
前記サーバにおいて第２のクライアントから第２のコードコンパイル要求を受信することと；
前記サーバが前記第２のコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、前記第２のコードコンパイル要求の情報を前記サーバに記憶された前記複数のコンパイラの前記リストと比較することと；
前記第２のコードコンパイル要求への第２の応答を前記サーバから前記ネットワークを介して前記第２のクライアントに伝達することであって、前記第２の応答は、前記第２のコードコンパイル要求の容認または拒否の指示を含むものである、前記伝達することと；
をさらに備え、
前記第２の応答が前記第２のコードコンパイル要求の容認の指示を含む場合：
前記サーバにおいてコンパイルすべき第２のソースコードを受信することと；
前記第２のソースコードをコンパイルして第２のコンパイル済みコードを生成するのに適した第２の選択されたコンパイラを使用して、前記サーバにおいて前記受信した第２のソースコードをコンパイルすることと；
前記第２のコンパイル済みコードを前記サーバから前記ネットワークを介して前記第２のクライアントに伝達することと；
を備える、請求項１に記載の方法。
【請求項８】
データ通信ネットワークへのインターフェースと；
異なるソースコード言語をコンパイルするために、複数の異なるコンパイラを記憶するコンパイラライブラリと；
前記インターフェースにおいて受信されたデータに応答するコンパイラ選択論理であって、前記受信されたデータは、前記異なるソースコード言語の１つを識別する情報を含み、前記コンパイラ選択論理は、前記受信されたデータの評価に基づいて前記複数の異なるコンパイラの１つを選択する論理を含み、前記受信されたデータは、クライアントデバイスからのコンパイル要求を備え、前記コンパイル要求は、前記クライアントデバイスに関連する情報を含むものである、前記コンパイラ選択論理と；
を備えるサーバであって、
前記複数の異なるコンパイラの前記選択された１つによって生成されるコンパイル済みの出力データは、前記データ通信ネットワークを介してクライアントデバイスに伝達され、前記クライアントデバイスは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバのうちの１つを備えるクライアントと、プロセッサとを備え、前記ソースコード言語は、グラフィックスプログラミング言語を含み、前記クライアントは、グラフィックス処理ユニットを含むターゲットデバイス上へのゲームアプリケーションプログラムのインストールに関連して、前記グラフィックスプログラミング言語のコンパイルを要求するディストリビュータによって使用されるインストーラプログラムである、サーバ。
【請求項９】
前記サーバは、前記複数の異なるコンパイラの前記選択された１つを使用して、ソースコードデータを受信し、前記ソースコードデータをコンパイルして、コンパイルされた出力データを生成する、請求項８に記載のサーバ。
【請求項１０】
前記クライアントデバイスは、前記コンパイルされた出力データを実行するグラフィックス処理ユニットを含む、請求項９に記載のサーバ。
【請求項１１】
前記データ通信ネットワークは、ワイヤレスネットワークであり、前記クライアントデバイスは、ワイヤレス通信デバイスである、請求項１０に記載のサーバ。
【請求項１２】
クライアントデバイスが実行する、サーバ−ベースのコードコンパイルを要求する方法であって：
異なるソースコード言語をコンパイルするために複数のコンパイラを有するサーバにコードコンパイル要求を送信するであって、前記コードコンパイル要求は、前記異なるソースコード言語の１つを識別する情報を含むことである、前記送信することと；
前記サーバから前記コードコンパイル要求への応答を受信することであって、前記応答は、前記コードコンパイル要求の容認または拒否のいずれかを示すものである、前記受信することと；
前記コードコンパイル要求の容認を検出したときに、前記サーバにおいてコンパイルすべきソースコードを前記サーバに送信することと；
前記サーバが前記ソースコードをコンパイルした後、前記サーバからコンパイル済みコードを受信することと；
を備え、前記クライアントデバイスは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバのうちの１つを備えるクライアントと、プロセッサとを備え、前記ソースコードは、グラフィックスプログラムを含み、前記クライアントは、グラフィックス処理ユニットを含むターゲットデバイス上へのゲームアプリケーションプログラムのインストールに関連して、前記グラフィックスプログラムのコンパイルを要求するディストリビュータによって使用されるインストーラプログラムである方法。
【請求項１３】
前記コンパイル済みコードをプロセッサ読み取り可能メモリに記憶することをさらに備える、請求項１２に記載の方法。
【請求項１４】
グラフィックス処理デバイスにおいて前記コンパイル済みコードを実行することをさらに備え、前記ソースコードは、シェーダプログラムコードを備え、前記コンパイル済みコードは、シェーダオブジェクトコードを備える、請求項１３に記載の方法。
【請求項１５】
プロセッサと；
前記プロセッサがアクセス可能なメモリと；
通信インターフェースと；
を備えるコンピューティングデバイスであって、前記通信インターフェースは：
異なるソースコード言語をコンパイルするために複数のコンパイラを有するサーバにコードコンパイル要求をクライアントデバイスから送ることであって、前記コードコンパイル要求は、前記異なるソースコード言語の１つを識別する情報を含むものである、前記送ることと；
前記サーバから前記コードコンパイル要求への応答を受信し、なお、前記応答は、前記コードコンパイル要求の容認または拒否のいずれかを示すことと；
前記サーバにおいてコンパイルすべきソースコードを前記サーバに送ることと；
前記サーバからコンパイル済みコードを受信することとを行うように構成された通信インターフェースであり、前記クライアントデバイスは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバのうちの１つを備えるクライアントと、プロセッサとを備え、前記ソースコードは、グラフィックスプログラムを含み、前記クライアントは、グラフィックス処理ユニットを含むターゲットデバイス上へのゲームアプリケーションプログラムのインストールに関連して、前記グラフィックスプログラムのコンパイルを要求するディストリビュータによって使用されるインストーラプログラムである；
コンピューティングデバイス。
【請求項１６】
前記サーバから受信した前記コンパイル済みコードが前記メモリに記憶され、前記プロセッサによって実行される、請求項１５に記載のコンピューティングデバイス。
【請求項１７】
前記メモリは、アプリケーションプログラムを含み、デバイスドライバプログラムを含む、請求項１５に記載のコンピューティングデバイス。
【請求項１８】
前記コードコンパイル要求を前記通信インターフェースを介して前記サーバに送ることを開始する論理回路をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項１９】
前記プロセッサは、グラフィックス処理ユニット、ビデオ処理ユニット、デジタル信号プロセッサ、またはカメラ画像処理ユニットのうちの１つであり、前記プロセッサに関連し、前記サーバに記憶されたコンパイラは、前記プロセッサのベンダによって利用可能にされる、請求項１８に記載のコンピューティングデバイス。
【請求項２０】
前記メモリに記憶されたファイルシステムをさらに備える、請求項１５に記載のコンピューティングデバイス。
【請求項２１】
前記プロセッサに応答してグラフィックスおよびデータを表示するディスプレイデバイスをさらに備える、請求項１５に記載のコンピューティングデバイス。
【請求項２２】
前記プロセッサに結合され、オーディオ入力を受信するように適合されたマイクロホンと；
前記プロセッサに結合され、オーディオ出力を生成するように適合されたスピーカと；
をさらに備える、請求項１５に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、サーバ−ベースのコードコンパイルのシステムおよび方法に関する。
【背景技術】
【０００２】
技術の進歩により、パーソナルコンピューティングデバイスは、より小型でより強力になった。たとえば、現在、小型で軽量な、ユーザが容易に持ち運べるポータブルワイヤレス電話、携帯情報端末（ＰＤＡ）、ページングデバイスなどのワイヤレスコンピューティングデバイスを含む様々なポータブルパーソナルコンピューティングデバイスが存在する。より具体的には、セルラ電話やインターネットプロトコル（ＩＰ）電話などのポータブルワイヤレス電話は、ボイスおよびデータパケットをワイヤレスネットワーク上で伝達することができる。さらに、多くのそのようなワイヤレス電話は、その中に組み込まれた他のタイプのデバイスを含む。たとえば、ワイヤレス電話は、ポータブルゲームコンソール、デジタルスチルカメラ、デジタルビデオカメラ、デジタルレコーダ、およびオーディオファイルプレーヤをも含むことができる。また、そのようなワイヤレス電話は、ウェブブラウザアプリケーションなど、インターネットにアクセスするために使用できるアプリケーションを含むことができる。したがって、これらのワイヤレス電話はかなりの計算能力を含む。
【０００３】
一般に、これらのデバイスは、より小型でより強力になるにつれて、ますますリソースの制約を受けるようになる。たとえば、画面サイズ、利用可能なメモリおよびファイルシステムスペースの量、及び入出力能力の量は、デバイスの小さいサイズによって制限され得る。さらに、電池サイズ、電池によって供給される電力の量、および電池の寿命も制限され得る。
【０００４】
さらに、ポータブルデバイス上の計算リソースが制限される。たとえば、セルラ電話上のプロセッサ機能はサイズおよび電力消費制約によって制限される。したがって、ソースコードからオブジェクトコードへのソフトウェアの変換を必要とするプログラムのコンパイルは、一般に、そのようなポータブルデバイス上では実行されない。しかしながら、ポータブルデバイスは異なるプロセッサおよび実行プラットフォームを有するので、異なるプラットフォームを有する各タイプのデバイスのコンパイル要求は異なる。このプラットフォームのバリエーションは、アプリケーション開発者に対して複雑さおよびコストの増加をもたらす。彼らは、複数のプラットフォームに適応するようにアプリケーションの異なるバージョンを作成する代わりに、単一ターゲット実行環境用のソフトウェアアプリケーションを開発することを好む。加えて、ビデオおよびマルチメディアアプリケーション処理機能などの増加した機能を有する様々なポータブルデバイスの普及とともに、異なるターゲットプラットフォーム用のアプリケーションに関係する問題は、より重要になっている。
【０００５】
したがって、コンパイルの改善されたシステムおよび方法を提供することが有利であろう。
【発明の概要】
【０００６】
サーバ−ベースのコンパイル方法および本方法を実施するためのサーバを開示する。サーバ−ベースのコンパイル方法は、複数のコンパイラを有するサーバにおいてコードコンパイル要求を受信することを含む。更に、本方法は、サーバがコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、コードコンパイル要求中の情報をサーバに記憶された複数のコンパイラのリストと比較することと、コードコンパイル要求への応答をサーバからネットワークを介してクライアントに伝達することとを含む。応答はコードコンパイル要求の容認または拒否の指示を含む。応答がコードコンパイル要求の容認の指示を含む場合、本方法は、サーバにおいてコンパイルすべきソースコードを受信することと、ソースコードをコンパイルしてコンパイル済みコードを生成するために適した選択されたコンパイラを使用して、サーバにおいて受信したソースコードをコンパイルすることと、コンパイル済みコードをサーバからネットワークを介してクライアントに伝達することとを含む。
【０００７】
特定の実施形態において、サーバは、データ通信ネットワークに対するインターフェースと、複数の異なるコンパイラを記憶するコンパイラライブラリと、インターフェースにおいて受信されたデータに応答するコンパイラ選択論理とを含む。コンパイラ選択論理は、受信データの評価に基づいて複数の異なるコンパイラの１つを選択する論理を含む。選択されたコンパイラは、コンパイルされた出力データを生成するために使用され、コンパイルされた出力データはデータ通信ネットワークを介してクライアントに伝達される。
【０００８】
さらに別の実施形態において、クライアントにサーバ−ベースのコードコンパイルを要求する方法を開示する。本方法は、複数のコンパイラを有するサーバにコードコンパイル要求を送ることと、サーバからコードコンパイル要求に対する応答を受信することと、なお、応答は、コードコンパイル要求の容認または拒否のいずれかを示す、コードコンパイル要求の容認を検出したときに、サーバでコンパイルされるソースコードをサーバに送ることと、サーバがソースコードをコンパイルした後、サーバからコンパイル済みコードを受信することと、を含む。
【０００９】
さらに別の実施形態において、コンピューティングデバイスを開示する。本コンピューティングデバイスは、プロセッサと、プロセッサがアクセス可能なメモリと、通信インターフェースとを含む。通信インターフェースは、複数のコンパイラを有するサーバにコードコンパイル要求を送り、サーバからコードコンパイル要求に対する応答を受信するように構成される。応答はコードコンパイル要求の容認または拒否のいずれかを示す。通信インターフェースはさらに、サーバにおいてコンパイルすべきソースコードをサーバに送り、サーバからコンパイル済みコードを受信するように構成される。
【００１０】
本明細書で開示する実施形態の１つまたは複数の利点は、ソフトウェアアプリケーションコードのコンパイルをより多くの処理リソースを有することができるサーバにシフトすることによるデバイスリソースの節約を含むことができる。本明細書で開示する１つまたは複数の実施形態の別の利点は、ユーザとの対話処理、またはアプリケーション処理ユニットとの適合性に基づくソフトウェアのユーザ選択を必要とすることのない、クライアントデバイスのグラフィックス処理ユニット、ビデオ処理ユニットまたはカメラ画像処理ユニットなどのアプリケーション処理ユニットにおいて実行するためのソフトウェアの分配を含むことができる。
【００１１】
１つまたは複数の実施形態の別の特定の利点は、アプリケーション開発者が所望のプラットフォームを対象とするコードを書けるようにすることと、ポータブルデバイスから要求を受信することに応答して、１つまたは複数の特定のデバイスプラットフォームに対するコードをコンパイルすることができるサーバ−ベースのコードコンパイルシステムを提供することと、によるソフトウェアコーディングプロセスの簡略化を含むことができる。このようにして、ソフトウェア開発者に対して複雑さを増すこと、且つポータブルデバイスにおいて処理リソースを消費することなしに、単一のプラットフォームに対して書かれたコードは、異なるプラットフォーム上で動作する複数のデバイスで使用するためにコンパイルされることができる。
【００１２】
本開示の他の態様、利点、および特徴は、図面の簡単な説明、詳細な説明、および特許請求の範囲を含む、本出願全明細書を概説した後に明らかになろう。
【００１３】
本明細書に記載の実施形態の態様および利点は、添付の図面とともに以下の詳細な説明を参照することによって、より容易に明らかになろう。
【図面の簡単な説明】
【００１４】
【図１】サーバ−ベースのコンパイルを実行するサーバを含む例示的なシステムのブロック図。
【図２】サーバ−ベースのコンパイルを利用するシステムの実施形態のブロック図。
【図３】サーバ−ベースのコンパイルを利用するシステムの別の実施形態のブロック図。
【図４】サーバ−ベースのコンパイルを利用するシステムの別の実施形態のブロック図。
【図５】サーバコンパイル済みコードを実行するプロセッサを組み込んだポータブル通信デバイスのブロック図。
【図６】サーバコンパイル済みコードを実行するプロセッサを組み込んだ例示的なセルラ電話のブロック図。
【図７】サーバ−ベースのコンパイルを実行する方法の特定の例示的な実施形態のフローチャート図。
【図８】サーバ−ベースのコンパイルを実行する方法の第２の特定の例示的な実施形態のフローチャート図。
【図９】クライアント要求コンパイルの方法の特定の例示的な実施形態のフローチャート図。
【発明を実施するための形態】
【００１５】
図１に、サーバ−ベースのコンパイルを実行するサーバを含む例示的なシステムのブロック図を示す。システム１００は、代表的なクライアント１０２、１０４と、データネットワーク１０６と、サーバ１２０とを含む。サーバ１２０は、ネットワークインターフェース１３０と、コンパイラ選択論理１４０と、サポートされる記憶されたコンパイラのリスト１４２と、複数のコンパイラ１５０、１５２、１５４を含むコンパイラライブラリとを含む。複数のコンパイラ１５０、１５２、および１５４は、ネットワークインターフェース１３０とコンパイラ選択論理１４０とに結合される。ネットワークインターフェース１３０は、データ通信ネットワーク１０６に結合される。データ通信ネットワーク１０６は、インターネットプロトコルネットワークでもよく、有線またはワイヤレスデータネットワークでもよい。一般に、コンパイラ１５０、１５２および１５４は、バイトコード、記号コードまたは高級記号言語を、特定のプロセッサが理解し、実行することができる等価プロセッサ読み取り可能命令に変換するように適合される。特定の実施形態において、コンパイルされた結果は、中間表現言語コードまたはバイトコード、たとえば、Ｘ８６タイプのプロセッサのアセンブリコードとすることができる。中間表現は、フレキシブルであり、多くのプラットフォームまたは処理ユニットに移植可能である。中間表現言語コードは、特定のプラットフォームまたは処理ユニットでは別の（低）レベルコンパイラへの入力として使用できる。図示のコンパイラ１５０、１５２、および１５４など、サーバ１２０に記憶されたコンパイラの各々は、異なるプロセッサ用のコードをコンパイルするために使用される異なるコンパイラである。たとえば、第１のクライアント１０２と第２のクライアント１０４は、異なる実行プラットフォームを利用する異なるプロセッサを有することができる。サーバ１２０は、コンパイル要求を受信し、利用可能なコンパイラ１５０、１５２、および１５４から適切なコンパイラを選択し、第１のクライアント１０２に関連する特定のプロセッサに適した選択されたコンパイラを使用して、第１のクライアント１０２などの要求側デバイスのためにコードをコンパイルするように適合される。
【００１６】
コンパイラ選択論理１４０は、クライアント１０２、１０４の１つから受信したコードコンパイル要求１１０など、ネットワークインターフェース１３０において受信されたデータに応答する。コンパイラ選択論理１４０は、コードコンパイル要求メッセージ１１０中で伝達される情報の評価など、受信データの評価に基づいて複数の異なるコンパイラ１５０、１５２、または１５４のうちの１つを選択する論理を含む。特定の実施形態において、コンパイラ選択論理１４０は、論理回路として実施されることができる。動作中に、コンパイラ選択論理１４０は、コンパイラライブラリから選択されたコンパイラ（たとえば、コンパイラ１５０）を決定し、要求側クライアント、たとえば、第１のクライアント１０２にメッセージを伝達する。要求側クライアントへのメッセージは、コードコンパイル要求メッセージ１１０に対する容認または拒否のいずれかを示す。
【００１７】
サーバ１２０において適切なコンパイラが利用可能な場合、サーバ１２０は、コードコンパイル要求メッセージ１１０に対する容認を伝達する。それに応答して、要求側クライアント１０２または１０４は、コンパイルすべきソースコードをサーバ１２０に送信することができ、サーバ１２０のコンパイラ選択論理１４０は、受信したソースコードを選択されたコンパイラ１５０、１５２、または１５４にルーティングする。選択されたコンパイラ１５０、１５２、または１５４は、ソースコードをコンパイルし、コンパイル済みコード１１２を生成する。オブジェクトコードとも呼ばれるコンパイル済みコード１１２は、ネットワークインターフェース１３０およびネットワーク１０６を介して要求側クライアント１０２または１０４に伝達される。
【００１８】
特定の実施形態において、要求側クライアント１０２または１０４は、パーソナルコンピュータ、ポータブルコンピュータ、ワイヤレス電話などのハンドヘルドコンピューティングデバイス、携帯情報端末、メディア再生デバイス、または同様のデバイスとすることができる。要求側クライアントデバイスは、サーバ１２０から送信されたコンパイル済みコードを実行するグラフィックス処理ユニット（ＧＰＵ）などのターゲットアプリケーション処理ユニットを含むことができる。更に、要求側クライアント１０２または１０４は、ソフトウェアアプリケーション、ドライバ、インストールプログラム、他のプロセッサ実行可能命令、またはそれらの任意の組合せにすることができる。コードコンパイル要求１１０は、サーバ１２０が適切なコンパイラを選択することができるように、ターゲットアプリケーション処理ユニットに関する情報を含むことができる。特定の実施形態において、情報は、ソースコード言語名、ソースコード言語バージョン、処理ユニット名、処理ユニットバージョン、またはそれらの任意の組合せを含む。
【００１９】
ワイヤレスアプリケーションにおいて、サーバ１２０は、ワイヤレス通信ネットワークのワイヤレス基地局内に配設されるか、またはワイヤレス基地局において共設されることができる。別の特定の実施形態において、サーバ１２０は、ワイヤレス通信ネットワークのワイヤレス基地局と通信することができる。サーバ１２０が様々なＧＰＵプラットフォーム用のシェーダコンパイラを含むアプリケーションにおいて、送信すべき典型的なソースコードファイルサイズまたはコンパイルされたファイルサイズは、２０００バイト未満など、小さくすることができる。したがって、ワイヤレス通信ネットワークを介したソースコードの送信、サーバ１２０でのコンパイル、および要求側クライアント１０２または１０４による受信は、許容できない遅延をもたらすことなしに実行時に行うことができる。
【００２０】
特定の実施形態において、クライアント１０２または１０４は、汎用中央処理ユニット（ＣＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、１つまたは複数のアプリケーション処理ユニット、またはそれらの任意の組合せを含むことができる。アプリケーション処理ユニットは、グラフィックス処理ユニット、ビデオ処理ユニット、カメラ画像処理ユニット、他のアプリケーション処理ユニット、またはそれらの任意の組合せを含むことができる。アプリケーションプログラムは、ＯｐｅｎＧＬ（登録商標）、ＤｉｒｅｃｔＸ（登録商標）などの１つまたは複数のアプリケーションプログラミングインターフェースに基づくコードを有するアプリケーション層、プログラミングインターフェースの下のドライバ層、１つまたは複数の専用のアプリケーション処理ユニット、ＤＳＰ、またはＣＰＵ上で実行できるアプリケーション処理層などの複数の層を含むことができる。特定の実施形態において、特定の構成によれば、アプリケーション処理層のいくつかの構成要素は、専用アプリケーション処理ユニット上で実行でき、他の構成要素は、ＤＳＰ上で実行でき、さらに他の構成要素は、ＣＰＵ上で実行できる。特定の実施形態において、クライアント１０２または１０４のＣＰＵ上で実行するインストーラ、アプリケーション、またはドライバなどのクライアントは、単一のアプリケーションプログラムの異なる構成要素のために異なるコンパイル要求をサーバ１２０に発行することができる。たとえば、クライアント１０２または１０４は、いくつかの構成要素のためにコードをＣＰＵ実行コードにコンパイルせよという要求、他の構成要素のためにソースコードをＤＳＰ実行コードにコンパイルせよという要求、および特定の構成要素のためにソースコードを特定のアプリケーション処理ユニットによって実行可能な機械コードにコンパイルせよという要求を生成することができる。クライアントは、対応するアプリケーション処理ユニット、ＤＳＰ、ＣＰＵ、またはそれらの任意の組合せ上で実行するために、サーバ１２０から受信したコンパイル済みコードを分配することができる。特定の実施形態において、ＣＰＵまたはＤＳＰは、そのようなアプリケーション処理ユニットがクライアントデバイス中に供されず、有効に構成されないとき、１つまたは複数のアプリケーション処理ユニットとして機能することができる。
【００２１】
特定の実施形態において、サーバ１２０は、シェーディング言語ソースコードを受信することができ、ＧＰＵで実行するためにソースコードをコンパイルすることができる。他の実施形態において、サーバ１２０は、他の処理プラットフォーム用の他のタイプのソースコードをコンパイルするように適合できる。たとえば、サーバ１２０は、Ｃまたは別のプログラミング言語で書かれたデジタル信号プロセッサ（ＤＳＰ）コードをコンパイルすることができ、ＤＳＰ実行コードを出力することができる。別の例として、サーバ１２０は、計算タスクの少なくとも一部がＧＰＵからＤＳＰに移動された場合、シェーディング言語コードを受信することができ、ＤＳＰ実行コードを出力することができる。別の例として、サーバ１２０は、シェーディング言語コードを受信することができ、高縮小命令セットコンピューティング（ＲＩＳＣ）マシン（たとえば、ＡＲＭ）コードを出力することができる。別の例において、サーバ１２０は、Ｃ言語ソースコードを受信することができ、ＧＰＵでの汎用計算のためなどのＧＰＵ実行コードを出力することができる。たとえば、ＧＰＵは、ＣＰＵまたはＤＳＰからＧＰＵに移動された汎用音声またはビデオ処理を実行するために使用できる。他の実施形態は、特定のハードウェア構成によれば、Ｃコードを受信し、ＣＰＵ実行コードまたはＤＳＰ実行コードのいずれかを出力するサーバ１２０を含むことができる。
【００２２】
図２は、サーバ−ベースのコンパイルを利用するシステム２００の実施形態のブロック図を示す。システム２００は、ネットワーク２０６を介してサーバ２０４と通信するクライアントデバイス２０２を含む。特定の実施形態において、ネットワーク２０６は、ワイヤレスネットワーク、有線ネットワーク、またはそれらの任意の組合せを含むことができる。クライアントデバイス２０２は、クライアントデバイス２０２のメモリ（図示せず）においてデータをディレクトリおよびファイルに編成するために使用できるファイルシステム２０８を含む。更に、クライアントデバイス２０２は、１つまたは複数のアプリケーション２１０と、ドライバ２１２と、アプリケーション処理ユニット２１４とを含む。特定の実施形態において、アプリケーション処理ユニット２１４は、グラフィックス処理ユニット（ＧＰＵ）、ビデオプロセッサ、カメラまたはイメージングプロセッサ、オーディオプロセッサ、別の特定用途向けプロセッサ、ならびにそれらの任意の組合せを含むことができる。特定の実施形態において、クライアントデバイス２０２は、ＣＰＵ（図示せず）、ＤＳＰ（図示せず）、またはそれらの任意の組合せを含むことができる。ＣＰＵ、ＤＳＰおよびアプリケーション処理ユニット２１４は、メモリと、アプリケーション２１０と、ドライバ２１２とにアクセスすることができる。ＣＰＵは、ネットワーク２０６を介してサーバ２０４と通信するために、アプリケーション２１０を実行することができる。サーバ２０４は、フロントエンド２１６と、第１のコンパイラ２１８と、第２のコンパイラ２２０とを含む。フロントエンド２１６は、図１に示すコンパイラ選択論理１４０などのコンパイラ選択論理を含むことができる。
【００２３】
特定の例示的な実施形態において、クライアントデバイス２０２は、１つまたは複数のアプリケーション２１０の少なくとも１つを実行して、メモリに記憶されたソースコードまたは中間表現バイトコードをファイルシステム２０８を介して検索することができる。中央処理ユニット（ＣＰＵ）などのプロセッサは、１つまたは複数のアプリケーション２１０を実行することができ、ソースコードに関係するコードコンパイル要求を生成することができる。コードコンパイル要求は、コード言語識別子（シェーダプログラミング言語名、たとえば、ＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）、高レベルシェーディング言語（ＨＬＳＬ）、Ｃｇなど、高級プログラミング言語名、たとえば、ＪＡＶＡ（登録商標）、Ｃ＋＋、または他のプログラム言語識別子など）と、バージョン識別子と、ターゲット名（たとえば、ＧＰＵ名またはＣＰＵ名）と、ターゲットバージョンと、サポートされるバイナリコード名と、バージョン識別子とを含むことができる。クライアントデバイス２０２は、ネットワーク２０６を介してサーバ２０４への接続を確立することを試みる。接続が確立された場合、クライアントデバイス２０２は、サーバ２０４がコードをコンパイルする能力を有するかどうかを決定するために、コードコンパイル要求をネットワーク２０６を介してサーバ２０４に送信することができる。クライアントデバイス２０２は、サーバ２０４から応答を受信する。応答は、サーバ２０４がコードをコンパイルすることができることを示す容認である場合がある。代案として、応答は、要求の拒否を含む場合がある。応答がサーバ２０４による容認を示す場合、クライアントデバイス２０２は、コードをネットワーク２０６を介してサーバ２０４に送信し、コンパイルされた結果を待つ。クライアントデバイス２０２は、コンパイルされた結果を受信すると、コンパイルされた結果を実行することができる。
【００２４】
特定の例において、クライアントデバイス２０２において実行される特定のアプリケーション２１０（すなわち、クライアント）は、サーバ２０４と通信を開始することができる。たとえば、実行中の特定のポイントにおいて、アプリケーション２１０は、ソースコードまたは中間表現バイトコードの実行を要求することができる。アプリケーション２１０は、サーバ２０４に対してコードのコンパイルの要求を開始することができる。容認を示す応答の受信に応答して、アプリケーション２１０は、コンパイルするためのコードをサーバ２０４に送信することができる。アプリケーション２１０は、コンパイル済みコードを受信することができる。アプリケーション２１０は、コンパイルされた結果を受信した後、結果をローカルファイルシステム２０８（すなわち、メモリ）に記憶するか、コンパイルされた結果をドライバ２１２、アプリケーション処理ユニット２１４、またはそれらの任意の組合せに供給する。特定の例示的な実施形態において、次にアプリケーション２１０が実行される場合、アプリケーション２１０は、コンパイルされた結果をチェックし、コンパイルされた結果をロードすることができる。別の特定の例示的な実施形態において、アプリケーション２１０は、実行を休止し、オンザフライでコードのコンパイルを要求し、コンパイル済みコードを受信し、コンパイル済みコードを使用して実行を再開することができる。さらに別の特定の例示的な実施形態において、クライアントは、特定のアプリケーションをサーバ２０４に要求することができ、サーバ２０４は、要求されたアプリケーションを要求に従ってコンパイルし、コンパイル済みコードを記憶、実行、またはそれらの任意の組合せのためにクライアントに供給する。
【００２５】
図３は、サーバ−ベースのコンパイルを利用するシステム３００の別の特定の実施形態のブロック図を示す。システム３００は、ネットワーク３０６を介してサーバ３０４と通信するクライアントデバイス３０２を含む。特定の実施形態において、ネットワーク３０６は、ワイヤレスネットワーク、有線ネットワーク、またはそれらの任意の組合せを含むことができる。クライアントデバイス３０２は、クライアントデバイス３０２のメモリ（図示せず）においてデータをディレクトリおよびファイルに編成するために使用できるファイルシステム３０８を含む。更に、クライアントデバイス３０２は、１つまたは複数のアプリケーション３１０と、ドライバ３１２と、アプリケーション処理ユニット３１４と、インストーラ（ダウンローダ）３１６と、を含む。特定の実施形態において、アプリケーション処理ユニット３１４は、グラフィックス処理ユニット（ＧＰＵ）、ビデオ処理ユニット、カメラまたは画像処理ユニット、オーディオ処理ユニット、別の特定用途向け処理ユニット、ならびにそれらの任意の組合せを含むことができる。特定の実施形態において、クライアントデバイス３０２は、ＣＰＵ（図示せず）、ＤＳＰ（図示せず）、またはそれらの任意の組合せを含むことができる。特定の例示的な実施形態において、ＣＰＵ、ＤＳＰおよびアプリケーション処理ユニット３１４の各々は、メモリと、１つまたは複数のアプリケーション３１０と、ドライバ３１２と、にアクセスすることができ、ＣＰＵは、１つまたは複数のアプリケーション３１０の少なくとも１つを実行する。特定の実施形態において、インストーラ３１６は、コンパイル済みコードをダウンロードするためにネットワーク３０６を介してサーバ３０４と通信するように実行可能なソフトウェアアプリケーションとすることができる。サーバ３０４は、フロントエンド３１８と、第１のコンパイラ３２０と、第２のコンパイラ３２２と、を含む。フロントエンド３１８は、図１に示すコンパイラ選択論理１４０などのコンパイラ選択論理を含むことができる。
【００２６】
特定の例示的な実施形態において、インストーラ３１６は、サーバ３０４との通信を開始することができる。ソフトウェアをインストールする場合、インストーラ３１６は、１つまたは複数のアプリケーション３１０のうちのアプリケーションのためにデータを集め、コンパイルサービスの要求をサーバ３０４に送る。インストーラ３１６は、サーバ３０４からコンパイル済みコードを受信し、コンパイル済みコードをローカルファイルシステム３０８に記憶する。１つまたは複数のアプリケーション３１０の１つは、ローカルファイルシステム３０８からコンパイル済み（バイナリ）コードおよびフォーマットを読み、コンパイル済みコードをドライバ３１２に直接送ることができる。別の特定の実施形態において、アプリケーションが別のサーバ（図示せず）からダウンロードされる場合、インストーラ（ダウンローダ）３１６は、アプリケーションがダウンロードされるサーバからコンパイル要求をサーバ３０４に送り、コンパイル済みコードをクライアントデバイス３０２に直接送ることをそのサーバに命令することができる。別の特定の実施形態において、アプリケーションがアプリケーションサーバ（図示せず）からダウンロードされるとき、インストーラ（ダウンローダ）３１６は、コンパイル情報をアプリケーションサーバに供給することができ、アプリケーションサーバは、コンパイル要求をサーバ３０４に送ることができる。サーバ３０４は、コンパイル済みバイナリコードをアプリケーションサーバに送り返すことができ、アプリケーションサーバは、クライアントデバイス３０２に送るためにアプリケーションとバイナリコードを一緒にパックすることができる。アプリケーションサーバを介して要求をサーバ３０４にルーティングすることによって、コンパイルおよびインストールは、クライアントデバイス３０２に対して透明なものになることができる。
【００２７】
特定の実施形態において、クライアントデバイス３０２は、オンラインゲームデバイスとすることができ、アプリケーションダウンロードが起こる間、アプリケーションがクライアントデバイスにおいて実行し、プレーヤ対話に関して進むことができる。ダウンロードされたアプリケーションのプログラムの一部に対応するものがソースコードから、クライアントデバイス３０２において１つまたは複数の処理ユニットで実行可能なマシンコードへの、コンパイルを必要とする場合、ダウンロードすることは、ネットワーク３０６を介してサーバ３０４のコンパイルサービスを要求することができる。この場合、ダウンロードサーバまたはアプリケーションサーバは、サーバ３０４へのコンパイル要求を直接開始し、アプリケーションサーバにおいてサーバ３０４からコンパイル済みコードを受信することができる。アプリケーションサーバは、コンパイル済みコードを実行のためにクライアントデバイス３０２に送信することができる。アプリケーションサーバからダウンロードされるコンパイル済みコードは、アプリケーションが実行のために必要とするデータまたはファイルおよび関連する他のアプリケーションコードとともにダウンロードされることができる。特定の例示的な実施形態において、サーバ３０４が、要求側クライアントのプラットフォームを決定し、ソースコードを要求側クライアントに関連するプラットフォームによって実行可能なオブジェクトコードにコンパイルするのに適したコンパイラを選択するように構成されるので、サーバ３０４は、アプリケーションが実行されるプラットフォームに対する懸念なしに特定のアプリケーションをコードするソフトウェア開発者を許容することができる。
【００２８】
図４は、サーバ−ベースのコンパイルを利用するシステム４００の別の特定の実施形態のブロック図を示す。システム４００は、ネットワーク４０６を介してサーバ４０４と通信するクライアントデバイス４０２を含む。特定の実施形態において、ネットワーク４０６は、ワイヤレスネットワーク、有線ネットワーク、またはそれらの任意の組合せを含むことができる。クライアントデバイス４０２は、クライアントデバイス４０２のメモリ（図示せず）においてデータをディレクトリおよびファイルに配置するために使用できるファイルシステム４０８を含む。更に、クライアントデバイス４０２は、１つまたは複数のアプリケーション４１０と、ドライバ４１２と、アプリケーション処理ユニット４１４と、を含む。特定の実施形態において、アプリケーション処理ユニット４１４は、グラフィックス処理ユニット（ＧＰＵ）、ビデオプロセッサ、カメラまたはイメージングプロセッサ、オーディオプロセッサ、別の特定用途向けプロセッサ、ならびにそれらの任意の組合せを含むことができる。特定の実施形態において、クライアントデバイス４０２は、ＣＰＵ（図示せず）、ＤＳＰ（図示せず）、またはそれらの任意の組合せを含むことができる。ＣＰＵまたはＤＳＰは、そのようなアプリケーション処理ユニットがクライアントデバイスに供されず、有効に構成されない場合、１つまたは複数のアプリケーション処理ユニットの機能を実行することができる。特定の例示的な実施形態において、ＣＰＵ、ＤＳＰおよびアプリケーション処理ユニット４１４は、メモリと、１つまたは複数のアプリケーション４１０と、ドライバ４１２と、にアクセスすることができる。特定の実施形態において、ドライバ４１２は、ソースコードコンパイルを要求し、コンパイル済みコードをダウンロードし、またはそれらの任意の組合せを行うために、ネットワーク４０４を介してサーバ４０６と通信するように実行可能なソフトウェアアプリケーションとすることができる。サーバ４０４は、フロントエンド４１６と、第１のコンパイラ４１８と、第２のコンパイラ４２０とを含む。フロントエンド４１６は、図１に示すコンパイラ選択論理１４０などのコンパイラ選択論理を含むことができる。
【００２９】
特定の例示的な実施形態において、ドライバ４１２は、アプリケーション４１０がコンパイル済みコードを要求する場合、サーバ４０４との通信を開始する。サーバ４０４は、グラフィック要素に関連する色を計算し、グラフィックス効果をレンダリングするためにシェーダプログラムをコンパイルするように構成されたシェーダコンパイルサーバとすることができる。
【００３０】
特定の例示的な実施形態において、ドライバ４１２は、サーバ４０４からコンパイル済みコードを受信し、コンパイル済みコードをアプリケーション４１０に公開することができる。アプリケーション４１０は、コンパイルされた結果を読み取り、コンパイルされた結果をローカルファイルシステム４０８に記憶することができる。アプリケーション４１０は、次いで、アプリケーション４１０の後続の実行の間にローカルファイルシステム４０８からコンパイル済みコードをロードすることができる。例示的な実施形態において、ソースコードは、クライアントデバイス４０２におけるアプリケーション４１０の第１の実行の間に、サーバ４０４においてのみコンパイルできる。
【００３１】
別の特定の例示的な実施形態において、ドライバ４１２は、コンパイル済みコードをアプリケーション４１０に公開しない。アプリケーション４１０が実行されるたびに、アプリケーション４１０は、ソースコードのコンパイルをドライバ４１２に要求することができる。アプリケーション４１０は、サーバ４０４の如何なる知識を有することなしに、まるでドライバが実行時コンパイルを実行するために適合されているかのように、実行時にコンパイル済みコードを要求することができる。特定の例示的な実施形態において、ドライバ４１２は、オンザフライでコンパイル要求をサーバ４０４に直接送り、必要に応じてコンパイル済みコードをキャッシュすることができる。従って、サーバ４０４は、ドライバ４１２の拡張として機能することができる。サーバ４０４からコンパイル済みコードを受信するのを待ちながら、ドライバ４１２は、コンパイルと並列に実行できる動作を実行し続けることができる。
【００３２】
特定の実施形態において、アプリケーション処理ユニット４１４は、サーバ４０４からのコンパイル済みコードを待ちながら、頂点およびテクスチャシェーディングデータをロードするＧＰＵを含むことができる。この実施によって提供される１つの特定の利点は、コンパイル済みコードをサーバ４０４に透明な形で要求し、受信するドライバ４１２を使用することによって、アプリケーション４１０用のグラフィックスのローディング速度がコンパイルと頂点／テクスチャデータのローディングが順次実行されるシステムと比較して、改善されることを実現することができる。これに加えて、サーバ４０４は、たとえば、ゲームプレイレベルが上がった場合、オンデマンドのコンパイルを提供するために使用されることができる。クライアントデバイス４０２は、特定のゲームレベルまたは特定の詳細のためにのみ、コンパイル要求をネットワーク４０６を介してサーバ４０４に送信することができる。したがって、時間および記憶域が節約できる。
【００３３】
図５に、全体的に５２０と称されるポータブル通信デバイスの例示的な非限定的実施形態を示す。図５に示すように、ポータブル通信デバイスは、ＣＰＵ（図示せず）と、デジタル信号プロセッサ５２４と、グラフィックス処理ユニット（ＧＰＵ）５２６とを含むオンチップシステム５２２を含む。特定の実施形態において、ＣＰＵは、実行用のコンパイル済みコードを受信するために、図１に示し、ここで説明されるサーバ１２０などのコンパイラサーバとの対話を開始するように構成できる。更に、図５は、ＧＰＵ５２６がデジタル信号プロセッサ５２４とディスプレイ５２８とに結合されることを示す。更に、入力デバイス５３０およびメモリ５３２は、デジタル信号プロセッサ５２４に結合される。これに加えて、コーダ／デコーダ（コーデック）５３４は、デジタル信号プロセッサ５２４に結合できる。スピーカ５３６およびマイクロホン５３８は、コーデック５３４に結合できる。
【００３４】
更に、図５は、ワイヤレスコントローラ５４０がデジタル信号プロセッサ５２４とワイヤレスアンテナ５４２とに結合できることを示す。特定の実施形態において、電源５４４は、オンチップシステム５２２に結合される。更に、特定の実施形態において、図５に示すように、ディスプレイ５２８、入力デバイス５３０、スピーカ５３６、マイクロホン５３８、ワイヤレスアンテナ５４２、および電源５４４は、オンチップシステム５２２の外部にある。しかしながら、各々は、オンチップシステム５２２の構成要素に結合される。
【００３５】
特定の実施形態において、デジタル信号プロセッサ５２４は、ポータブル通信デバイス５２０の様々な構成要素が必要とする機能および動作を実行するのに必要なプログラムスレッドに関連する命令を処理するためにインターリービング型マルチスレッディングを利用する。たとえば、ワイヤレス通信セッションがワイヤレスアンテナを介して確立される場合、ユーザは、マイクロホン５３８に話すことができる。ユーザの音声を表す電子信号は、符号化されるためにコーデック５３４に送られることができる。デジタル信号プロセッサ５２４は、マイクロホンからの電子信号を符号化するためにコーデック５３４のためのデータ処理を実行することができる。さらに、ワイヤレスアンテナ５４２を介して受信される到来信号は、ワイヤレスコントローラ５４０によってコーデック５３４に送られ、復号され、スピーカ５３６に送られることができる。更に、デジタル信号プロセッサ５２４は、ワイヤレスアンテナ５４２を介して受信される信号を復号する場合、コーデック５３４のためのデータ処理を実行することができる。
【００３６】
更に、ワイヤレス通信セッションの前、その間、またはその後に、デジタル信号プロセッサ５２４は、入力デバイス５３０から受信される入力を処理することができる。たとえば、ワイヤレス通信セッションの間に、ユーザは、入力デバイス５３０およびディスプレイ５２８を使用して、ポータブル通信デバイス５２０のメモリ５３２内に埋め込まれたウェブブラウザを介してインターネットサーフィンすることができる。ここで説明するように、デジタル信号プロセッサ５２４は、ポータブル通信デバイス５２０およびその中の様々な構成要素の動作を効率的に制御するために、入力デバイス５３０、ＧＰＵ５２６、ディスプレイ５２８、コーデック５３４およびワイヤレスコントローラ５４０によって使用される様々なプログラムスレッドをインターリーブすることができる。様々なプログラムスレッドに関連する命令の多くは、１つまたは複数のクロックサイクルの間に同時に実行される。したがって、無駄なクロックサイクルによる電力およびエネルギー消費は大幅に減少する。
【００３７】
図６を参照すると、例として、セルラ電話の例示的な非限定的実施形態が示され、全体的に６２０と称される。図示のように、セルラ電話６２０は、互いに結合されたデジタルベースバンドプロセッサ６２４とアナログベースバンドプロセッサ６２６とを含むオンチップシステム６２２を含む。更に、セルラ電話６２０は、ＣＰＵ（図示せず）とグラフィックス処理ユニット（ＧＰＵ）６２８とを含む。特定の例示的な実施形態において、ＣＰＵは、実行用のコンパイル済みコードを受信するために、図１に示し、ここで説明されるサーバ１２０などのコンパイラサーバとの対話を開始するように構成できる。特定の実施形態において、デジタルベースバンドプロセッサ６２４は、デジタル信号プロセッサである。図６に示すように、ＧＰＵ６２８およびタッチスクリーンコントローラ６３０は、デジタルベースバンドプロセッサ６２４に結合される。次に、オンチップシステム６２２の外部のタッチスクリーンディスプレイ６３２は、ＧＰＵ６２８とタッチスクリーンコントローラ６３０とに結合される。
【００３８】
更に、図６は、ビデオエンコーダ６３４、たとえば、位相反転線（ＰＡＬ）エンコーダ、順次式カラーメモリ（ＳＥＣＡＭ）エンコーダ、または全米テレビジョン方式標準化委員会（ＮＴＳＣ：national television system(s) committee）エンコーダがデジタルベースバンドプロセッサ６２４に結合されることを示す。さらに、ビデオ増幅器６３６は、ビデオエンコーダ６３４とタッチスクリーンディスプレイ６３２とに結合される。また、ビデオポート６３８は、ビデオ増幅器６３６に結合される。図６に示すように、ユニバーサルシリアルバス（ＵＳＢ）コントローラ６４０は、デジタルベースバンドプロセッサ６２４に結合される。また、ＵＳＢポート６４２は、ＵＳＢコントローラ６４０に結合される。更に、メモリ６４４および加入者識別モジュール（ＳＩＭ）カード６４６は、デジタルベースバンドプロセッサ６２４に結合することができる。さらに、図６に示すように、デジタルカメラ６４８は、デジタルベースバンドプロセッサ６２４に結合することができる。例示的な一実施形態において、デジタルカメラ６４８は、電荷結合デバイス（ＣＣＤ）カメラまたは相補型金属酸化物半導体（ＣＭＯＳ）カメラである。
【００３９】
更に、図６に示すように、ステレオオーディオコーデック６５０は、アナログベースバンドプロセッサ６２６に結合できる。更に、オーディオ増幅器６５２は、ステレオオーディオコーデック６５０に結合することができる。例示的な一実施形態において、第１のステレオスピーカ６５４および第２のステレオスピーカ６５６は、オーディオ増幅器６５２に結合される。図６は、マイクロホン増幅器６５８もステレオオーディオコーデック６５０に結合できることを示す。更に、マイクロホン６６０は、マイクロホン増幅器６５８に結合することができる。特定の実施形態において、周波数変調（ＦＭ）ラジオチューナ６６２は、ステレオオーディオコーデック６５０に結合することができる。また、ＦＭアンテナ６６４は、ＦＭラジオチューナ６６２に結合される。更に、ステレオヘッドホン６６６は、ステレオオーディオコーデック６５０に結合できる。
【００４０】
更に、図６は、無線周波数（ＲＦ）トランシーバ６６８がアナログベースバンドプロセッサ６２６に結合することができることを示す。ＲＦスイッチ６７０は、ＲＦトランシーバ６６８とＲＦアンテナ６７２とに結合することができる。図６に示すように、キーパッド６７４は、アナログベースバンドプロセッサ６２６に結合することができる。また、マイクロホン付きモノラルヘッドセット６７６は、アナログベースバンドプロセッサ６２６に結合することができる。さらに、バイブレータデバイス６７８は、アナログベースバンドプロセッサ６２６に結合することができる。更に、図６は、電源６８０がオンチップシステム６２２に結合することができることを示す。特定の実施形態において、電源６８０は、電力を必要とするセルラ電話６２０の様々な構成要素に電力を供給する直流電流（ＤＣ）電源である。さらに、特定の実施形態において、電源は、再充電可能なＤＣ電池、またはＡＣ電源に接続された交流電流（ＡＣ）からＤＣへの変圧器から得られるＤＣ電源である。
【００４１】
特定の実施形態において、図６に示すように、タッチスクリーンディスプレイ６３２、ビデオポート６３８、ＵＳＢポート６４２、カメラ６４８、第１のステレオスピーカ６５４、第２のステレオスピーカ６５６、マイクロホン、ＦＭアンテナ６６４、ステレオヘッドホン６６６、ＲＦスイッチ６７０、ＲＦアンテナ６７２、キーパッド６７４、モノラルヘッドセット６７６、バイブレータ６７８、および電源６８０は、オンチップシステム６２２の外部にある。さらに、特定の実施形態において、デジタルベースバンドプロセッサ６２４は、セルラ電話６２０に関連する様々な構成要素の１つまたは複数に関連する様々なプログラムスレッドを処理するために、ここで説明されるインターリーブ型マルチスレッディングを使用することができる。
【００４２】
特定の実施形態において、セルラ電話６２０は、デバイス上で実行するアプリケーションの異なるプログラム構成要素について異なるコンパイルを要求するために、ネットワークを介してコンパイラサーバに異なるコンパイル要求を開始するように構成することができる。たとえば、ＧＰＵ６２８において実行されるように割り当てられたプログラム構成要素の計算タスクに対して、コンパイラサーバにおいてシェーダコンパイラを選択することができる。別の例として、ビデオコーデック、エンコーダまたはデコーダ（図示せず）に割り当てられるプログラム構成要素の計算タスクに対して、コンパイラサーバにおいて対応するビデオコンパイラを選択することができる。さらに別の例として、オーディオコーデック６５０に割り当てられるプログラム構成要素の計算タスクに対して、コンパイラサーバにおいて対応するオーディオコンパイラを選択することができる。さらに別の例として、ＤＳＰ６２４において実行されるように割り当てられたプログラム構成要素の計算タスクに対して、コンパイラサーバにおいてＤＳＰコンパイラを選択することができる。コンパイル済みコードは、セルラ電話６２０において受信し、実行のために１つまたは複数の対応する処理ユニットに配置することができる。
【００４３】
図７は、サーバ−ベースのコンパイルを実行する方法の特定の例示的な実施形態を示すフローチャート図である。図７を参照すると、サーバ−ベースのコンパイル方法は、７０２において、複数のコンパイラを有するサーバにおいてコードコンパイル要求を受信することと、７０４において、サーバがコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、コードコンパイル要求の情報をサーバに記憶された複数のコンパイラのリストと比較することとを含む。本方法は、７０６において、コードコンパイル要求への応答をサーバからネットワークを介してクライアントに伝達することをさらに含む。なお、応答は、コードコンパイル要求の容認または拒否の指示を含む。
【００４４】
決定ノード７０８に進み、応答が拒否を示す場合、７１６において本方法は、終了する。７０８に戻ると、応答がコードコンパイル要求の容認を示す場合、本方法は、７１０に続き、サーバにおいてコンパイルすべきソースコードを受信することを含む。７１２に進むと、更に、本方法は、ソースコードをコンパイルしてコンパイル済みコードを生成するのに適した選択されたコンパイラを使用して、サーバにおいて受信したソースコードをコンパイルすることを含む。本方法はさらに、７１４において、コンパイル済みコードをサーバからネットワークを介してクライアントに伝達することを含む。本方法は、７１６において終了する。
【００４５】
図８は、サーバ−ベースのコンパイルを実行する方法の第２の特定の例示的な実施形態を示すフローチャート図である。８０２において、本方法は、複数のコンパイラを有するサーバにおいて１つまたは複数のコードコンパイル要求を受信することを含む。８０４に進むと、サーバに関連する論理は、１つまたは複数のコードコンパイル要求からコードコンパイル要求を選択する。８０６に進むと、論理は、サーバが選択されたコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、選択されたコードコンパイル要求の情報をサーバに記憶された複数のコンパイラのリストと比較する。８０８に進むと、論理は、選択されたコードコンパイル要求への応答をサーバからネットワークを介して要求側クライアントに伝達し、応答は、選択されたコンパイル要求の容認または拒否の指示を含む。
【００４６】
決定ノード８１０において、応答が容認を示す場合、本方法は、８１２に進み、サーバにおいてコンパイルすべきソースコードを受信する。８１４に進むと、本方法は、ソースコードをコンパイルするのに適した選択されたコンパイラを使用して、サーバにおいて受信したソースコードをコンパイルしてコンパイル済みコードを生成することを含む。８１６に進むと、本方法は、コンパイル済みコードをサーバからネットワークを介して要求側クライアントに伝達することを含む。決定ノード８１８に進むと、別のソースコンパイル要求がある場合、本方法は、８２０に進み、１つまたは複数のコードコンパイル要求から別のコードコンパイル要求（すなわち、第２のコードコンパイル要求）を選択する。本方法は、８０６に進み、サーバが選択されたコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、選択されたコードコンパイル要求の情報をサーバに記憶された複数のコンパイラのリストと比較する。
【００４７】
８１０に戻ると、応答が拒否を示す場合、本方法は決定ノード８１８に進み、別のソースコンパイル要求があるかどうかを決定する。別のソースコンパイル要求がある場合、本方法は、８２０に進む。８１８において、他のソースコンパイル要求がない場合、本方法は８２２において終了する。
【００４８】
特定の実施形態において、コードコンパイル要求の情報は、ソースコード言語名、ソースコード言語バージョン、処理デバイス名、処理デバイスバージョン、ドライバ名、ドライババージョン、オペレーティングシステム名、オペレーティングシステムバージョン、またはそれらの任意の組合せを含む。コードコンパイル要求の情報は、サーバがコンパイラライブラリから特定のコンパイラを識別し、選択するために使用することができる情報を含み、選択されたコンパイラは、適切であり、クライアント上で実行すべきコードと合致する。そのような情報は、特定のグラフィックス処理デバイスなど、処理デバイスベンダによって利用可能にされる特定の処理デバイスに関する情報を含むことができる。さらに、処理デバイスのベンダは、使用に適したコンパイラを選択するために、サーバがクライアントからベンダ提供情報を受信することができ、受信した情報をコンパイラライブラリで前に記憶された情報と照合することができるような、サーバ上に記憶されたコンパイラを提供することができる。本方法は、複数のデバイスの複数のクライアントのために使用でき、第１および第２のクライアントの使用は、説明のためである。
【００４９】
特定の実施形態において、クライアントは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバである。さらに、クライアントは、プロセッサを含むクライアントデバイス上にロードまたは配置できる。別の特定の実施形態において、ソースコードは、ＯｐｅｎＧＬシェーディング言語、ＯｐｅｎＧＬ頂点プログラム、ＯｐｅｎＧＬフラグメントプログラム、ＯｐｅｎＧＬ  ＥＳシェーディング言語、ｎＶｉｄｉａ  Ｃｇプログラミング言語、マイクロソフトＤｉｒｅｃｔＸ高級シェーディング言語、または別のシェーディング言語などのシェーディング言語を含むことができ、使用のために選択されるサーバ−ベースのコンパイラはシェーダコンパイラである。ソースコードは、ゲームアプリケーションとともに使用できるＯｐｅｎＧＬ  ｇｌＦｘ、マイクロソフトＥｆｆｅｃｔ、またはｎＶｉｄｉａ  Ｅｆｆｅｃｔ  ＣｇＦＸなどのシェーディングプログラムを含むことができる。サーバにおけるシェーダコンパイラは、シェーディングプログラムのソースコードをコンパイルしてコンパイル済みコードを生成するために使用でき、コンパイル済みコードは伝達され、次いでターゲットポータブルデバイス、またはグラフィックス処理ユニットを含むエンドユーザコンピュータなどのクライアントにおいて実行される。
【００５０】
特定の実施形態において、ソースコードのコンパイルがコンパイルコード要求に応答してリアルタイムまたはほぼリアルタイムベースで実行されるように、サーバは、十分な計算能力を含み、通信インターフェースは十分な帯域幅を有する。
【００５１】
図９は、クライアント要求コンパイルの方法を示すフローチャート図である。図９を参照すると、サーバ−ベースのコードコンパイルを要求する方法は、９０２において、複数のコンパイラを有するサーバにコードコンパイル要求を送信することと、９０４において、サーバからコードコンパイル要求への応答を受信することとを含み、応答はコードコンパイル要求の容認または拒否のいずれかを示す。決定ノード９０６において、コードコンパイル要求の拒否が検出された場合、本方法は、９１６において終了する。さもなければ、決定ノード９０６において、コードコンパイル要求の容認を検出したときに、本方法は、９０８において、ソースコードをサーバに送信することと、９１０において、サーバがソースコードをコンパイルした後、サーバからコンパイル済みコードを受信することとを含む。本方法はさらに、９１２において、コンパイル済みコードをプロセッサ読み取り可能メモリに記憶することと、９１４において、コンパイル済みコードを実行することとを含む。特定の実施形態において、コンパイル済みコードは、ＧＰＵなどのアプリケーション処理ユニットにおいて実行できる。別の実施形態において、コンパイル済みコードは、デジタル信号プロセッサ（ＤＳＰ）または中央処理ユニット（ＣＰＵ）において実行できる。本方法は、９１６において終了する。特定の実施形態において、ソースコードはシェーダプログラムコードであり、コンパイル済みコードはシェーダオブジェクトコードを含む。
【００５２】
さらに、本明細書で開示した実施形態に関して説明した様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装できることを、当業者は諒解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップを、上記では概して、それらの機能に関して説明した。そのような機能をハードウェアとして実装するかソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装することができるが、そのような実装の決定は、本開示の範囲からの逸脱を生じると解釈すべきではない。
【００５３】
本明細書で開示した実施形態に関連して説明した方法またはアルゴリズムのステップは、直接ハードウェアで実施するか、プロセッサによって実行されるソフトウェアモジュールで実施するか、またはその２つの組合せで実施することができる。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＰＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または当技術分野で知られている任意の他の形態の記憶媒体中に常駐することができる。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替として、記憶媒体はプロセッサに一体化することができる。プロセッサおよび記憶媒体はＡＳＩＣ中に常駐することができる。ＡＳＩＣは、コンピューティングデバイスまたはユーザ端末中に常駐することができる。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末中に個別構成要素として常駐することができる。
【００５４】
開示した実施形態の上記の説明は、当業者が本開示を実施または使用できるようにするために提供したものである。これらの実施形態への様々な修正は当業者には容易に明らかであり、本明細書で定義した一般原理は、本開示の趣旨または範囲から逸脱することなく他の実施形態に適用できる。したがって、本開示は、本明細書に示した実施形態に限定されるものではなく、特許請求の範囲によって定義される原理および新規の特徴と合致する最も広い範囲が与えられるべきものである。
【図１】
0005529027.tif 000002
【図２】
0005529027.tif 000003
【図３】
0005529027.tif 000004
【図４】
0005529027.tif 000005
【図５】
0005529027.tif 000006
【図６】
0005529027.tif 000007
【図７】
0005529027.tif 000008
【図８】
0005529027.tif 000009
【図９】
0005529027.tif 000010