説明

サーバ−ベースのコードコンパイル

データ通信ネットワークへのインターフェースと、複数の異なるコンパイラを記憶するコンパイラライブラリと、インターフェースにおいて受信されたデータに応答し、論理を含むコンパイラ選択論理とを含むサーバを開示する。コンパイラ選択論理は、受信データの評価に基づいて複数の異なるコンパイラの1つを選択するように構成される。選択されたコンパイラはコンパイルされた出力データを生成し、コンパイルされた出力データはデータ通信ネットワークを介してクライアントに伝達される。

【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、サーバ−ベースのコードコンパイルのシステムおよび方法に関する。
【背景技術】
【0002】
技術の進歩により、パーソナルコンピューティングデバイスは、より小型でより強力になった。たとえば、現在、小型で軽量な、ユーザが容易に持ち運べるポータブルワイヤレス電話、携帯情報端末(PDA)、ページングデバイスなどのワイヤレスコンピューティングデバイスを含む様々なポータブルパーソナルコンピューティングデバイスが存在する。より具体的には、セルラ電話やインターネットプロトコル(IP)電話などのポータブルワイヤレス電話は、ボイスおよびデータパケットをワイヤレスネットワーク上で伝達することができる。さらに、多くのそのようなワイヤレス電話は、その中に組み込まれた他のタイプのデバイスを含む。たとえば、ワイヤレス電話は、ポータブルゲームコンソール、デジタルスチルカメラ、デジタルビデオカメラ、デジタルレコーダ、およびオーディオファイルプレーヤをも含むことができる。また、そのようなワイヤレス電話は、ウェブブラウザアプリケーションなど、インターネットにアクセスするために使用できるアプリケーションを含むことができる。したがって、これらのワイヤレス電話はかなりの計算能力を含む。
【0003】
一般に、これらのデバイスは、より小型でより強力になるにつれて、ますますリソースの制約を受けるようになる。たとえば、画面サイズ、利用可能なメモリおよびファイルシステムスペースの量、及び入出力能力の量は、デバイスの小さいサイズによって制限され得る。さらに、電池サイズ、電池によって供給される電力の量、および電池の寿命も制限され得る。
【0004】
さらに、ポータブルデバイス上の計算リソースが制限される。たとえば、セルラ電話上のプロセッサ機能はサイズおよび電力消費制約によって制限される。したがって、ソースコードからオブジェクトコードへのソフトウェアの変換を必要とするプログラムのコンパイルは、一般に、そのようなポータブルデバイス上では実行されない。しかしながら、ポータブルデバイスは異なるプロセッサおよび実行プラットフォームを有するので、異なるプラットフォームを有する各タイプのデバイスのコンパイル要求は異なる。このプラットフォームのバリエーションは、アプリケーション開発者に対して複雑さおよびコストの増加をもたらす。彼らは、複数のプラットフォームに適応するようにアプリケーションの異なるバージョンを作成する代わりに、単一ターゲット実行環境用のソフトウェアアプリケーションを開発することを好む。加えて、ビデオおよびマルチメディアアプリケーション処理機能などの増加した機能を有する様々なポータブルデバイスの普及とともに、異なるターゲットプラットフォーム用のアプリケーションに関係する問題は、より重要になっている。
【0005】
したがって、コンパイルの改善されたシステムおよび方法を提供することが有利であろう。
【発明の概要】
【0006】
サーバ−ベースのコンパイル方法および本方法を実施するためのサーバを開示する。サーバ−ベースのコンパイル方法は、複数のコンパイラを有するサーバにおいてコードコンパイル要求を受信することを含む。更に、本方法は、サーバがコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、コードコンパイル要求中の情報をサーバに記憶された複数のコンパイラのリストと比較することと、コードコンパイル要求への応答をサーバからネットワークを介してクライアントに伝達することとを含む。応答はコードコンパイル要求の容認または拒否の指示を含む。応答がコードコンパイル要求の容認の指示を含む場合、本方法は、サーバにおいてコンパイルすべきソースコードを受信することと、ソースコードをコンパイルしてコンパイル済みコードを生成するために適した選択されたコンパイラを使用して、サーバにおいて受信したソースコードをコンパイルすることと、コンパイル済みコードをサーバからネットワークを介してクライアントに伝達することとを含む。
【0007】
特定の実施形態において、サーバは、データ通信ネットワークに対するインターフェースと、複数の異なるコンパイラを記憶するコンパイラライブラリと、インターフェースにおいて受信されたデータに応答するコンパイラ選択論理とを含む。コンパイラ選択論理は、受信データの評価に基づいて複数の異なるコンパイラの1つを選択する論理を含む。選択されたコンパイラは、コンパイルされた出力データを生成するために使用され、コンパイルされた出力データはデータ通信ネットワークを介してクライアントに伝達される。
【0008】
さらに別の実施形態において、クライアントにサーバ−ベースのコードコンパイルを要求する方法を開示する。本方法は、複数のコンパイラを有するサーバにコードコンパイル要求を送ることと、サーバからコードコンパイル要求に対する応答を受信することと、なお、応答は、コードコンパイル要求の容認または拒否のいずれかを示す、コードコンパイル要求の容認を検出したときに、サーバでコンパイルされるソースコードをサーバに送ることと、サーバがソースコードをコンパイルした後、サーバからコンパイル済みコードを受信することと、を含む。
【0009】
さらに別の実施形態において、コンピューティングデバイスを開示する。本コンピューティングデバイスは、プロセッサと、プロセッサがアクセス可能なメモリと、通信インターフェースとを含む。通信インターフェースは、複数のコンパイラを有するサーバにコードコンパイル要求を送り、サーバからコードコンパイル要求に対する応答を受信するように構成される。応答はコードコンパイル要求の容認または拒否のいずれかを示す。通信インターフェースはさらに、サーバにおいてコンパイルすべきソースコードをサーバに送り、サーバからコンパイル済みコードを受信するように構成される。
【0010】
本明細書で開示する実施形態の1つまたは複数の利点は、ソフトウェアアプリケーションコードのコンパイルをより多くの処理リソースを有することができるサーバにシフトすることによるデバイスリソースの節約を含むことができる。本明細書で開示する1つまたは複数の実施形態の別の利点は、ユーザとの対話処理、またはアプリケーション処理ユニットとの適合性に基づくソフトウェアのユーザ選択を必要とすることのない、クライアントデバイスのグラフィックス処理ユニット、ビデオ処理ユニットまたはカメラ画像処理ユニットなどのアプリケーション処理ユニットにおいて実行するためのソフトウェアの分配を含むことができる。
【0011】
1つまたは複数の実施形態の別の特定の利点は、アプリケーション開発者が所望のプラットフォームを対象とするコードを書けるようにすることと、ポータブルデバイスから要求を受信することに応答して、1つまたは複数の特定のデバイスプラットフォームに対するコードをコンパイルすることができるサーバ−ベースのコードコンパイルシステムを提供することと、によるソフトウェアコーディングプロセスの簡略化を含むことができる。このようにして、ソフトウェア開発者に対して複雑さを増すこと、且つポータブルデバイスにおいて処理リソースを消費することなしに、単一のプラットフォームに対して書かれたコードは、異なるプラットフォーム上で動作する複数のデバイスで使用するためにコンパイルされることができる。
【0012】
本開示の他の態様、利点、および特徴は、図面の簡単な説明、詳細な説明、および特許請求の範囲を含む、本出願全明細書を概説した後に明らかになろう。
【0013】
本明細書に記載の実施形態の態様および利点は、添付の図面とともに以下の詳細な説明を参照することによって、より容易に明らかになろう。
【図面の簡単な説明】
【0014】
【図1】サーバ−ベースのコンパイルを実行するサーバを含む例示的なシステムのブロック図。
【図2】サーバ−ベースのコンパイルを利用するシステムの実施形態のブロック図。
【図3】サーバ−ベースのコンパイルを利用するシステムの別の実施形態のブロック図。
【図4】サーバ−ベースのコンパイルを利用するシステムの別の実施形態のブロック図。
【図5】サーバコンパイル済みコードを実行するプロセッサを組み込んだポータブル通信デバイスのブロック図。
【図6】サーバコンパイル済みコードを実行するプロセッサを組み込んだ例示的なセルラ電話のブロック図。
【図7】サーバ−ベースのコンパイルを実行する方法の特定の例示的な実施形態のフローチャート図。
【図8】サーバ−ベースのコンパイルを実行する方法の第2の特定の例示的な実施形態のフローチャート図。
【図9】クライアント要求コンパイルの方法の特定の例示的な実施形態のフローチャート図。
【発明を実施するための形態】
【0015】
図1に、サーバ−ベースのコンパイルを実行するサーバを含む例示的なシステムのブロック図を示す。システム100は、代表的なクライアント102、104と、データネットワーク106と、サーバ120とを含む。サーバ120は、ネットワークインターフェース130と、コンパイラ選択論理140と、サポートされる記憶されたコンパイラのリスト142と、複数のコンパイラ150、152、154を含むコンパイラライブラリとを含む。複数のコンパイラ150、152、および154は、ネットワークインターフェース130とコンパイラ選択論理140とに結合される。ネットワークインターフェース130は、データ通信ネットワーク106に結合される。データ通信ネットワーク106は、インターネットプロトコルネットワークでもよく、有線またはワイヤレスデータネットワークでもよい。一般に、コンパイラ150、152および154は、バイトコード、記号コードまたは高級記号言語を、特定のプロセッサが理解し、実行することができる等価プロセッサ読み取り可能命令に変換するように適合される。特定の実施形態において、コンパイルされた結果は、中間表現言語コードまたはバイトコード、たとえば、X86タイプのプロセッサのアセンブリコードとすることができる。中間表現は、フレキシブルであり、多くのプラットフォームまたは処理ユニットに移植可能である。中間表現言語コードは、特定のプラットフォームまたは処理ユニットでは別の(低)レベルコンパイラへの入力として使用できる。図示のコンパイラ150、152、および154など、サーバ120に記憶されたコンパイラの各々は、異なるプロセッサ用のコードをコンパイルするために使用される異なるコンパイラである。たとえば、第1のクライアント102と第2のクライアント104は、異なる実行プラットフォームを利用する異なるプロセッサを有することができる。サーバ120は、コンパイル要求を受信し、利用可能なコンパイラ150、152、および154から適切なコンパイラを選択し、第1のクライアント102に関連する特定のプロセッサに適した選択されたコンパイラを使用して、第1のクライアント102などの要求側デバイスのためにコードをコンパイルするように適合される。
【0016】
コンパイラ選択論理140は、クライアント102、104の1つから受信したコードコンパイル要求110など、ネットワークインターフェース130において受信されたデータに応答する。コンパイラ選択論理140は、コードコンパイル要求メッセージ110中で伝達される情報の評価など、受信データの評価に基づいて複数の異なるコンパイラ150、152、または154のうちの1つを選択する論理を含む。特定の実施形態において、コンパイラ選択論理140は、論理回路として実施されることができる。動作中に、コンパイラ選択論理140は、コンパイラライブラリから選択されたコンパイラ(たとえば、コンパイラ150)を決定し、要求側クライアント、たとえば、第1のクライアント102にメッセージを伝達する。要求側クライアントへのメッセージは、コードコンパイル要求メッセージ110に対する容認または拒否のいずれかを示す。
【0017】
サーバ120において適切なコンパイラが利用可能な場合、サーバ120は、コードコンパイル要求メッセージ110に対する容認を伝達する。それに応答して、要求側クライアント102または104は、コンパイルすべきソースコードをサーバ120に送信することができ、サーバ120のコンパイラ選択論理140は、受信したソースコードを選択されたコンパイラ150、152、または154にルーティングする。選択されたコンパイラ150、152、または154は、ソースコードをコンパイルし、コンパイル済みコード112を生成する。オブジェクトコードとも呼ばれるコンパイル済みコード112は、ネットワークインターフェース130およびネットワーク106を介して要求側クライアント102または104に伝達される。
【0018】
特定の実施形態において、要求側クライアント102または104は、パーソナルコンピュータ、ポータブルコンピュータ、ワイヤレス電話などのハンドヘルドコンピューティングデバイス、携帯情報端末、メディア再生デバイス、または同様のデバイスとすることができる。要求側クライアントデバイスは、サーバ120から送信されたコンパイル済みコードを実行するグラフィックス処理ユニット(GPU)などのターゲットアプリケーション処理ユニットを含むことができる。更に、要求側クライアント102または104は、ソフトウェアアプリケーション、ドライバ、インストールプログラム、他のプロセッサ実行可能命令、またはそれらの任意の組合せにすることができる。コードコンパイル要求110は、サーバ120が適切なコンパイラを選択することができるように、ターゲットアプリケーション処理ユニットに関する情報を含むことができる。特定の実施形態において、情報は、ソースコード言語名、ソースコード言語バージョン、処理ユニット名、処理ユニットバージョン、またはそれらの任意の組合せを含む。
【0019】
ワイヤレスアプリケーションにおいて、サーバ120は、ワイヤレス通信ネットワークのワイヤレス基地局内に配設されるか、またはワイヤレス基地局において共設されることができる。別の特定の実施形態において、サーバ120は、ワイヤレス通信ネットワークのワイヤレス基地局と通信することができる。サーバ120が様々なGPUプラットフォーム用のシェーダコンパイラを含むアプリケーションにおいて、送信すべき典型的なソースコードファイルサイズまたはコンパイルされたファイルサイズは、2000バイト未満など、小さくすることができる。したがって、ワイヤレス通信ネットワークを介したソースコードの送信、サーバ120でのコンパイル、および要求側クライアント102または104による受信は、許容できない遅延をもたらすことなしに実行時に行うことができる。
【0020】
特定の実施形態において、クライアント102または104は、汎用中央処理ユニット(CPU)、デジタル信号プロセッサ(DSP)、1つまたは複数のアプリケーション処理ユニット、またはそれらの任意の組合せを含むことができる。アプリケーション処理ユニットは、グラフィックス処理ユニット、ビデオ処理ユニット、カメラ画像処理ユニット、他のアプリケーション処理ユニット、またはそれらの任意の組合せを含むことができる。アプリケーションプログラムは、OpenGL(登録商標)、DirectX(登録商標)などの1つまたは複数のアプリケーションプログラミングインターフェースに基づくコードを有するアプリケーション層、プログラミングインターフェースの下のドライバ層、1つまたは複数の専用のアプリケーション処理ユニット、DSP、またはCPU上で実行できるアプリケーション処理層などの複数の層を含むことができる。特定の実施形態において、特定の構成によれば、アプリケーション処理層のいくつかの構成要素は、専用アプリケーション処理ユニット上で実行でき、他の構成要素は、DSP上で実行でき、さらに他の構成要素は、CPU上で実行できる。特定の実施形態において、クライアント102または104のCPU上で実行するインストーラ、アプリケーション、またはドライバなどのクライアントは、単一のアプリケーションプログラムの異なる構成要素のために異なるコンパイル要求をサーバ120に発行することができる。たとえば、クライアント102または104は、いくつかの構成要素のためにコードをCPU実行コードにコンパイルせよという要求、他の構成要素のためにソースコードをDSP実行コードにコンパイルせよという要求、および特定の構成要素のためにソースコードを特定のアプリケーション処理ユニットによって実行可能な機械コードにコンパイルせよという要求を生成することができる。クライアントは、対応するアプリケーション処理ユニット、DSP、CPU、またはそれらの任意の組合せ上で実行するために、サーバ120から受信したコンパイル済みコードを分配することができる。特定の実施形態において、CPUまたはDSPは、そのようなアプリケーション処理ユニットがクライアントデバイス中に供されず、有効に構成されないとき、1つまたは複数のアプリケーション処理ユニットとして機能することができる。
【0021】
特定の実施形態において、サーバ120は、シェーディング言語ソースコードを受信することができ、GPUで実行するためにソースコードをコンパイルすることができる。他の実施形態において、サーバ120は、他の処理プラットフォーム用の他のタイプのソースコードをコンパイルするように適合できる。たとえば、サーバ120は、Cまたは別のプログラミング言語で書かれたデジタル信号プロセッサ(DSP)コードをコンパイルすることができ、DSP実行コードを出力することができる。別の例として、サーバ120は、計算タスクの少なくとも一部がGPUからDSPに移動された場合、シェーディング言語コードを受信することができ、DSP実行コードを出力することができる。別の例として、サーバ120は、シェーディング言語コードを受信することができ、高縮小命令セットコンピューティング(RISC)マシン(たとえば、ARM)コードを出力することができる。別の例において、サーバ120は、C言語ソースコードを受信することができ、GPUでの汎用計算のためなどのGPU実行コードを出力することができる。たとえば、GPUは、CPUまたはDSPからGPUに移動された汎用音声またはビデオ処理を実行するために使用できる。他の実施形態は、特定のハードウェア構成によれば、Cコードを受信し、CPU実行コードまたはDSP実行コードのいずれかを出力するサーバ120を含むことができる。
【0022】
図2は、サーバ−ベースのコンパイルを利用するシステム200の実施形態のブロック図を示す。システム200は、ネットワーク206を介してサーバ204と通信するクライアントデバイス202を含む。特定の実施形態において、ネットワーク206は、ワイヤレスネットワーク、有線ネットワーク、またはそれらの任意の組合せを含むことができる。クライアントデバイス202は、クライアントデバイス202のメモリ(図示せず)においてデータをディレクトリおよびファイルに編成するために使用できるファイルシステム208を含む。更に、クライアントデバイス202は、1つまたは複数のアプリケーション210と、ドライバ212と、アプリケーション処理ユニット214とを含む。特定の実施形態において、アプリケーション処理ユニット214は、グラフィックス処理ユニット(GPU)、ビデオプロセッサ、カメラまたはイメージングプロセッサ、オーディオプロセッサ、別の特定用途向けプロセッサ、ならびにそれらの任意の組合せを含むことができる。特定の実施形態において、クライアントデバイス202は、CPU(図示せず)、DSP(図示せず)、またはそれらの任意の組合せを含むことができる。CPU、DSPおよびアプリケーション処理ユニット214は、メモリと、アプリケーション210と、ドライバ212とにアクセスすることができる。CPUは、ネットワーク206を介してサーバ204と通信するために、アプリケーション210を実行することができる。サーバ204は、フロントエンド216と、第1のコンパイラ218と、第2のコンパイラ220とを含む。フロントエンド216は、図1に示すコンパイラ選択論理140などのコンパイラ選択論理を含むことができる。
【0023】
特定の例示的な実施形態において、クライアントデバイス202は、1つまたは複数のアプリケーション210の少なくとも1つを実行して、メモリに記憶されたソースコードまたは中間表現バイトコードをファイルシステム208を介して検索することができる。中央処理ユニット(CPU)などのプロセッサは、1つまたは複数のアプリケーション210を実行することができ、ソースコードに関係するコードコンパイル要求を生成することができる。コードコンパイル要求は、コード言語識別子(シェーダプログラミング言語名、たとえば、OpenGLシェーディング言語(GLSL)、高レベルシェーディング言語(HLSL)、Cgなど、高級プログラミング言語名、たとえば、JAVA(登録商標)、C++、または他のプログラム言語識別子など)と、バージョン識別子と、ターゲット名(たとえば、GPU名またはCPU名)と、ターゲットバージョンと、サポートされるバイナリコード名と、バージョン識別子とを含むことができる。クライアントデバイス202は、ネットワーク206を介してサーバ204への接続を確立することを試みる。接続が確立された場合、クライアントデバイス202は、サーバ204がコードをコンパイルする能力を有するかどうかを決定するために、コードコンパイル要求をネットワーク206を介してサーバ204に送信することができる。クライアントデバイス202は、サーバ204から応答を受信する。応答は、サーバ204がコードをコンパイルすることができることを示す容認である場合がある。代案として、応答は、要求の拒否を含む場合がある。応答がサーバ204による容認を示す場合、クライアントデバイス202は、コードをネットワーク206を介してサーバ204に送信し、コンパイルされた結果を待つ。クライアントデバイス202は、コンパイルされた結果を受信すると、コンパイルされた結果を実行することができる。
【0024】
特定の例において、クライアントデバイス202において実行される特定のアプリケーション210(すなわち、クライアント)は、サーバ204と通信を開始することができる。たとえば、実行中の特定のポイントにおいて、アプリケーション210は、ソースコードまたは中間表現バイトコードの実行を要求することができる。アプリケーション210は、サーバ204に対してコードのコンパイルの要求を開始することができる。容認を示す応答の受信に応答して、アプリケーション210は、コンパイルするためのコードをサーバ204に送信することができる。アプリケーション210は、コンパイル済みコードを受信することができる。アプリケーション210は、コンパイルされた結果を受信した後、結果をローカルファイルシステム208(すなわち、メモリ)に記憶するか、コンパイルされた結果をドライバ212、アプリケーション処理ユニット214、またはそれらの任意の組合せに供給する。特定の例示的な実施形態において、次にアプリケーション210が実行される場合、アプリケーション210は、コンパイルされた結果をチェックし、コンパイルされた結果をロードすることができる。別の特定の例示的な実施形態において、アプリケーション210は、実行を休止し、オンザフライでコードのコンパイルを要求し、コンパイル済みコードを受信し、コンパイル済みコードを使用して実行を再開することができる。さらに別の特定の例示的な実施形態において、クライアントは、特定のアプリケーションをサーバ204に要求することができ、サーバ204は、要求されたアプリケーションを要求に従ってコンパイルし、コンパイル済みコードを記憶、実行、またはそれらの任意の組合せのためにクライアントに供給する。
【0025】
図3は、サーバ−ベースのコンパイルを利用するシステム300の別の特定の実施形態のブロック図を示す。システム300は、ネットワーク306を介してサーバ304と通信するクライアントデバイス302を含む。特定の実施形態において、ネットワーク306は、ワイヤレスネットワーク、有線ネットワーク、またはそれらの任意の組合せを含むことができる。クライアントデバイス302は、クライアントデバイス302のメモリ(図示せず)においてデータをディレクトリおよびファイルに編成するために使用できるファイルシステム308を含む。更に、クライアントデバイス302は、1つまたは複数のアプリケーション310と、ドライバ312と、アプリケーション処理ユニット314と、インストーラ(ダウンローダ)316と、を含む。特定の実施形態において、アプリケーション処理ユニット314は、グラフィックス処理ユニット(GPU)、ビデオ処理ユニット、カメラまたは画像処理ユニット、オーディオ処理ユニット、別の特定用途向け処理ユニット、ならびにそれらの任意の組合せを含むことができる。特定の実施形態において、クライアントデバイス302は、CPU(図示せず)、DSP(図示せず)、またはそれらの任意の組合せを含むことができる。特定の例示的な実施形態において、CPU、DSPおよびアプリケーション処理ユニット314の各々は、メモリと、1つまたは複数のアプリケーション310と、ドライバ312と、にアクセスすることができ、CPUは、1つまたは複数のアプリケーション310の少なくとも1つを実行する。特定の実施形態において、インストーラ316は、コンパイル済みコードをダウンロードするためにネットワーク306を介してサーバ304と通信するように実行可能なソフトウェアアプリケーションとすることができる。サーバ304は、フロントエンド318と、第1のコンパイラ320と、第2のコンパイラ322と、を含む。フロントエンド318は、図1に示すコンパイラ選択論理140などのコンパイラ選択論理を含むことができる。
【0026】
特定の例示的な実施形態において、インストーラ316は、サーバ304との通信を開始することができる。ソフトウェアをインストールする場合、インストーラ316は、1つまたは複数のアプリケーション310のうちのアプリケーションのためにデータを集め、コンパイルサービスの要求をサーバ304に送る。インストーラ316は、サーバ304からコンパイル済みコードを受信し、コンパイル済みコードをローカルファイルシステム308に記憶する。1つまたは複数のアプリケーション310の1つは、ローカルファイルシステム308からコンパイル済み(バイナリ)コードおよびフォーマットを読み、コンパイル済みコードをドライバ312に直接送ることができる。別の特定の実施形態において、アプリケーションが別のサーバ(図示せず)からダウンロードされる場合、インストーラ(ダウンローダ)316は、アプリケーションがダウンロードされるサーバからコンパイル要求をサーバ304に送り、コンパイル済みコードをクライアントデバイス302に直接送ることをそのサーバに命令することができる。別の特定の実施形態において、アプリケーションがアプリケーションサーバ(図示せず)からダウンロードされるとき、インストーラ(ダウンローダ)316は、コンパイル情報をアプリケーションサーバに供給することができ、アプリケーションサーバは、コンパイル要求をサーバ304に送ることができる。サーバ304は、コンパイル済みバイナリコードをアプリケーションサーバに送り返すことができ、アプリケーションサーバは、クライアントデバイス302に送るためにアプリケーションとバイナリコードを一緒にパックすることができる。アプリケーションサーバを介して要求をサーバ304にルーティングすることによって、コンパイルおよびインストールは、クライアントデバイス302に対して透明なものになることができる。
【0027】
特定の実施形態において、クライアントデバイス302は、オンラインゲームデバイスとすることができ、アプリケーションダウンロードが起こる間、アプリケーションがクライアントデバイスにおいて実行し、プレーヤ対話に関して進むことができる。ダウンロードされたアプリケーションのプログラムの一部に対応するものがソースコードから、クライアントデバイス302において1つまたは複数の処理ユニットで実行可能なマシンコードへの、コンパイルを必要とする場合、ダウンロードすることは、ネットワーク306を介してサーバ304のコンパイルサービスを要求することができる。この場合、ダウンロードサーバまたはアプリケーションサーバは、サーバ304へのコンパイル要求を直接開始し、アプリケーションサーバにおいてサーバ304からコンパイル済みコードを受信することができる。アプリケーションサーバは、コンパイル済みコードを実行のためにクライアントデバイス302に送信することができる。アプリケーションサーバからダウンロードされるコンパイル済みコードは、アプリケーションが実行のために必要とするデータまたはファイルおよび関連する他のアプリケーションコードとともにダウンロードされることができる。特定の例示的な実施形態において、サーバ304が、要求側クライアントのプラットフォームを決定し、ソースコードを要求側クライアントに関連するプラットフォームによって実行可能なオブジェクトコードにコンパイルするのに適したコンパイラを選択するように構成されるので、サーバ304は、アプリケーションが実行されるプラットフォームに対する懸念なしに特定のアプリケーションをコードするソフトウェア開発者を許容することができる。
【0028】
図4は、サーバ−ベースのコンパイルを利用するシステム400の別の特定の実施形態のブロック図を示す。システム400は、ネットワーク406を介してサーバ404と通信するクライアントデバイス402を含む。特定の実施形態において、ネットワーク406は、ワイヤレスネットワーク、有線ネットワーク、またはそれらの任意の組合せを含むことができる。クライアントデバイス402は、クライアントデバイス402のメモリ(図示せず)においてデータをディレクトリおよびファイルに配置するために使用できるファイルシステム408を含む。更に、クライアントデバイス402は、1つまたは複数のアプリケーション410と、ドライバ412と、アプリケーション処理ユニット414と、を含む。特定の実施形態において、アプリケーション処理ユニット414は、グラフィックス処理ユニット(GPU)、ビデオプロセッサ、カメラまたはイメージングプロセッサ、オーディオプロセッサ、別の特定用途向けプロセッサ、ならびにそれらの任意の組合せを含むことができる。特定の実施形態において、クライアントデバイス402は、CPU(図示せず)、DSP(図示せず)、またはそれらの任意の組合せを含むことができる。CPUまたはDSPは、そのようなアプリケーション処理ユニットがクライアントデバイスに供されず、有効に構成されない場合、1つまたは複数のアプリケーション処理ユニットの機能を実行することができる。特定の例示的な実施形態において、CPU、DSPおよびアプリケーション処理ユニット414は、メモリと、1つまたは複数のアプリケーション410と、ドライバ412と、にアクセスすることができる。特定の実施形態において、ドライバ412は、ソースコードコンパイルを要求し、コンパイル済みコードをダウンロードし、またはそれらの任意の組合せを行うために、ネットワーク404を介してサーバ406と通信するように実行可能なソフトウェアアプリケーションとすることができる。サーバ404は、フロントエンド416と、第1のコンパイラ418と、第2のコンパイラ420とを含む。フロントエンド416は、図1に示すコンパイラ選択論理140などのコンパイラ選択論理を含むことができる。
【0029】
特定の例示的な実施形態において、ドライバ412は、アプリケーション410がコンパイル済みコードを要求する場合、サーバ404との通信を開始する。サーバ404は、グラフィック要素に関連する色を計算し、グラフィックス効果をレンダリングするためにシェーダプログラムをコンパイルするように構成されたシェーダコンパイルサーバとすることができる。
【0030】
特定の例示的な実施形態において、ドライバ412は、サーバ404からコンパイル済みコードを受信し、コンパイル済みコードをアプリケーション410に公開することができる。アプリケーション410は、コンパイルされた結果を読み取り、コンパイルされた結果をローカルファイルシステム408に記憶することができる。アプリケーション410は、次いで、アプリケーション410の後続の実行の間にローカルファイルシステム408からコンパイル済みコードをロードすることができる。例示的な実施形態において、ソースコードは、クライアントデバイス402におけるアプリケーション410の第1の実行の間に、サーバ404においてのみコンパイルできる。
【0031】
別の特定の例示的な実施形態において、ドライバ412は、コンパイル済みコードをアプリケーション410に公開しない。アプリケーション410が実行されるたびに、アプリケーション410は、ソースコードのコンパイルをドライバ412に要求することができる。アプリケーション410は、サーバ404の如何なる知識を有することなしに、まるでドライバが実行時コンパイルを実行するために適合されているかのように、実行時にコンパイル済みコードを要求することができる。特定の例示的な実施形態において、ドライバ412は、オンザフライでコンパイル要求をサーバ404に直接送り、必要に応じてコンパイル済みコードをキャッシュすることができる。従って、サーバ404は、ドライバ412の拡張として機能することができる。サーバ404からコンパイル済みコードを受信するのを待ちながら、ドライバ412は、コンパイルと並列に実行できる動作を実行し続けることができる。
【0032】
特定の実施形態において、アプリケーション処理ユニット414は、サーバ404からのコンパイル済みコードを待ちながら、頂点およびテクスチャシェーディングデータをロードするGPUを含むことができる。この実施によって提供される1つの特定の利点は、コンパイル済みコードをサーバ404に透明な形で要求し、受信するドライバ412を使用することによって、アプリケーション410用のグラフィックスのローディング速度がコンパイルと頂点/テクスチャデータのローディングが順次実行されるシステムと比較して、改善されることを実現することができる。これに加えて、サーバ404は、たとえば、ゲームプレイレベルが上がった場合、オンデマンドのコンパイルを提供するために使用されることができる。クライアントデバイス402は、特定のゲームレベルまたは特定の詳細のためにのみ、コンパイル要求をネットワーク406を介してサーバ404に送信することができる。したがって、時間および記憶域が節約できる。
【0033】
図5に、全体的に520と称されるポータブル通信デバイスの例示的な非限定的実施形態を示す。図5に示すように、ポータブル通信デバイスは、CPU(図示せず)と、デジタル信号プロセッサ524と、グラフィックス処理ユニット(GPU)526とを含むオンチップシステム522を含む。特定の実施形態において、CPUは、実行用のコンパイル済みコードを受信するために、図1に示し、ここで説明されるサーバ120などのコンパイラサーバとの対話を開始するように構成できる。更に、図5は、GPU526がデジタル信号プロセッサ524とディスプレイ528とに結合されることを示す。更に、入力デバイス530およびメモリ532は、デジタル信号プロセッサ524に結合される。これに加えて、コーダ/デコーダ(コーデック)534は、デジタル信号プロセッサ524に結合できる。スピーカ536およびマイクロホン538は、コーデック534に結合できる。
【0034】
更に、図5は、ワイヤレスコントローラ540がデジタル信号プロセッサ524とワイヤレスアンテナ542とに結合できることを示す。特定の実施形態において、電源544は、オンチップシステム522に結合される。更に、特定の実施形態において、図5に示すように、ディスプレイ528、入力デバイス530、スピーカ536、マイクロホン538、ワイヤレスアンテナ542、および電源544は、オンチップシステム522の外部にある。しかしながら、各々は、オンチップシステム522の構成要素に結合される。
【0035】
特定の実施形態において、デジタル信号プロセッサ524は、ポータブル通信デバイス520の様々な構成要素が必要とする機能および動作を実行するのに必要なプログラムスレッドに関連する命令を処理するためにインターリービング型マルチスレッディングを利用する。たとえば、ワイヤレス通信セッションがワイヤレスアンテナを介して確立される場合、ユーザは、マイクロホン538に話すことができる。ユーザの音声を表す電子信号は、符号化されるためにコーデック534に送られることができる。デジタル信号プロセッサ524は、マイクロホンからの電子信号を符号化するためにコーデック534のためのデータ処理を実行することができる。さらに、ワイヤレスアンテナ542を介して受信される到来信号は、ワイヤレスコントローラ540によってコーデック534に送られ、復号され、スピーカ536に送られることができる。更に、デジタル信号プロセッサ524は、ワイヤレスアンテナ542を介して受信される信号を復号する場合、コーデック534のためのデータ処理を実行することができる。
【0036】
更に、ワイヤレス通信セッションの前、その間、またはその後に、デジタル信号プロセッサ524は、入力デバイス530から受信される入力を処理することができる。たとえば、ワイヤレス通信セッションの間に、ユーザは、入力デバイス530およびディスプレイ528を使用して、ポータブル通信デバイス520のメモリ532内に埋め込まれたウェブブラウザを介してインターネットサーフィンすることができる。ここで説明するように、デジタル信号プロセッサ524は、ポータブル通信デバイス520およびその中の様々な構成要素の動作を効率的に制御するために、入力デバイス530、GPU526、ディスプレイ528、コーデック534およびワイヤレスコントローラ540によって使用される様々なプログラムスレッドをインターリーブすることができる。様々なプログラムスレッドに関連する命令の多くは、1つまたは複数のクロックサイクルの間に同時に実行される。したがって、無駄なクロックサイクルによる電力およびエネルギー消費は大幅に減少する。
【0037】
図6を参照すると、例として、セルラ電話の例示的な非限定的実施形態が示され、全体的に620と称される。図示のように、セルラ電話620は、互いに結合されたデジタルベースバンドプロセッサ624とアナログベースバンドプロセッサ626とを含むオンチップシステム622を含む。更に、セルラ電話620は、CPU(図示せず)とグラフィックス処理ユニット(GPU)628とを含む。特定の例示的な実施形態において、CPUは、実行用のコンパイル済みコードを受信するために、図1に示し、ここで説明されるサーバ120などのコンパイラサーバとの対話を開始するように構成できる。特定の実施形態において、デジタルベースバンドプロセッサ624は、デジタル信号プロセッサである。図6に示すように、GPU628およびタッチスクリーンコントローラ630は、デジタルベースバンドプロセッサ624に結合される。次に、オンチップシステム622の外部のタッチスクリーンディスプレイ632は、GPU628とタッチスクリーンコントローラ630とに結合される。
【0038】
更に、図6は、ビデオエンコーダ634、たとえば、位相反転線(PAL)エンコーダ、順次式カラーメモリ(SECAM)エンコーダ、または全米テレビジョン方式標準化委員会(NTSC:national television system(s) committee)エンコーダがデジタルベースバンドプロセッサ624に結合されることを示す。さらに、ビデオ増幅器636は、ビデオエンコーダ634とタッチスクリーンディスプレイ632とに結合される。また、ビデオポート638は、ビデオ増幅器636に結合される。図6に示すように、ユニバーサルシリアルバス(USB)コントローラ640は、デジタルベースバンドプロセッサ624に結合される。また、USBポート642は、USBコントローラ640に結合される。更に、メモリ644および加入者識別モジュール(SIM)カード646は、デジタルベースバンドプロセッサ624に結合することができる。さらに、図6に示すように、デジタルカメラ648は、デジタルベースバンドプロセッサ624に結合することができる。例示的な一実施形態において、デジタルカメラ648は、電荷結合デバイス(CCD)カメラまたは相補型金属酸化物半導体(CMOS)カメラである。
【0039】
更に、図6に示すように、ステレオオーディオコーデック650は、アナログベースバンドプロセッサ626に結合できる。更に、オーディオ増幅器652は、ステレオオーディオコーデック650に結合することができる。例示的な一実施形態において、第1のステレオスピーカ654および第2のステレオスピーカ656は、オーディオ増幅器652に結合される。図6は、マイクロホン増幅器658もステレオオーディオコーデック650に結合できることを示す。更に、マイクロホン660は、マイクロホン増幅器658に結合することができる。特定の実施形態において、周波数変調(FM)ラジオチューナ662は、ステレオオーディオコーデック650に結合することができる。また、FMアンテナ664は、FMラジオチューナ662に結合される。更に、ステレオヘッドホン666は、ステレオオーディオコーデック650に結合できる。
【0040】
更に、図6は、無線周波数(RF)トランシーバ668がアナログベースバンドプロセッサ626に結合することができることを示す。RFスイッチ670は、RFトランシーバ668とRFアンテナ672とに結合することができる。図6に示すように、キーパッド674は、アナログベースバンドプロセッサ626に結合することができる。また、マイクロホン付きモノラルヘッドセット676は、アナログベースバンドプロセッサ626に結合することができる。さらに、バイブレータデバイス678は、アナログベースバンドプロセッサ626に結合することができる。更に、図6は、電源680がオンチップシステム622に結合することができることを示す。特定の実施形態において、電源680は、電力を必要とするセルラ電話620の様々な構成要素に電力を供給する直流電流(DC)電源である。さらに、特定の実施形態において、電源は、再充電可能なDC電池、またはAC電源に接続された交流電流(AC)からDCへの変圧器から得られるDC電源である。
【0041】
特定の実施形態において、図6に示すように、タッチスクリーンディスプレイ632、ビデオポート638、USBポート642、カメラ648、第1のステレオスピーカ654、第2のステレオスピーカ656、マイクロホン、FMアンテナ664、ステレオヘッドホン666、RFスイッチ670、RFアンテナ672、キーパッド674、モノラルヘッドセット676、バイブレータ678、および電源680は、オンチップシステム622の外部にある。さらに、特定の実施形態において、デジタルベースバンドプロセッサ624は、セルラ電話620に関連する様々な構成要素の1つまたは複数に関連する様々なプログラムスレッドを処理するために、ここで説明されるインターリーブ型マルチスレッディングを使用することができる。
【0042】
特定の実施形態において、セルラ電話620は、デバイス上で実行するアプリケーションの異なるプログラム構成要素について異なるコンパイルを要求するために、ネットワークを介してコンパイラサーバに異なるコンパイル要求を開始するように構成することができる。たとえば、GPU628において実行されるように割り当てられたプログラム構成要素の計算タスクに対して、コンパイラサーバにおいてシェーダコンパイラを選択することができる。別の例として、ビデオコーデック、エンコーダまたはデコーダ(図示せず)に割り当てられるプログラム構成要素の計算タスクに対して、コンパイラサーバにおいて対応するビデオコンパイラを選択することができる。さらに別の例として、オーディオコーデック650に割り当てられるプログラム構成要素の計算タスクに対して、コンパイラサーバにおいて対応するオーディオコンパイラを選択することができる。さらに別の例として、DSP624において実行されるように割り当てられたプログラム構成要素の計算タスクに対して、コンパイラサーバにおいてDSPコンパイラを選択することができる。コンパイル済みコードは、セルラ電話620において受信し、実行のために1つまたは複数の対応する処理ユニットに配置することができる。
【0043】
図7は、サーバ−ベースのコンパイルを実行する方法の特定の例示的な実施形態を示すフローチャート図である。図7を参照すると、サーバ−ベースのコンパイル方法は、702において、複数のコンパイラを有するサーバにおいてコードコンパイル要求を受信することと、704において、サーバがコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、コードコンパイル要求の情報をサーバに記憶された複数のコンパイラのリストと比較することとを含む。本方法は、706において、コードコンパイル要求への応答をサーバからネットワークを介してクライアントに伝達することをさらに含む。なお、応答は、コードコンパイル要求の容認または拒否の指示を含む。
【0044】
決定ノード708に進み、応答が拒否を示す場合、716において本方法は、終了する。708に戻ると、応答がコードコンパイル要求の容認を示す場合、本方法は、710に続き、サーバにおいてコンパイルすべきソースコードを受信することを含む。712に進むと、更に、本方法は、ソースコードをコンパイルしてコンパイル済みコードを生成するのに適した選択されたコンパイラを使用して、サーバにおいて受信したソースコードをコンパイルすることを含む。本方法はさらに、714において、コンパイル済みコードをサーバからネットワークを介してクライアントに伝達することを含む。本方法は、716において終了する。
【0045】
図8は、サーバ−ベースのコンパイルを実行する方法の第2の特定の例示的な実施形態を示すフローチャート図である。802において、本方法は、複数のコンパイラを有するサーバにおいて1つまたは複数のコードコンパイル要求を受信することを含む。804に進むと、サーバに関連する論理は、1つまたは複数のコードコンパイル要求からコードコンパイル要求を選択する。806に進むと、論理は、サーバが選択されたコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、選択されたコードコンパイル要求の情報をサーバに記憶された複数のコンパイラのリストと比較する。808に進むと、論理は、選択されたコードコンパイル要求への応答をサーバからネットワークを介して要求側クライアントに伝達し、応答は、選択されたコンパイル要求の容認または拒否の指示を含む。
【0046】
決定ノード810において、応答が容認を示す場合、本方法は、812に進み、サーバにおいてコンパイルすべきソースコードを受信する。814に進むと、本方法は、ソースコードをコンパイルするのに適した選択されたコンパイラを使用して、サーバにおいて受信したソースコードをコンパイルしてコンパイル済みコードを生成することを含む。816に進むと、本方法は、コンパイル済みコードをサーバからネットワークを介して要求側クライアントに伝達することを含む。決定ノード818に進むと、別のソースコンパイル要求がある場合、本方法は、820に進み、1つまたは複数のコードコンパイル要求から別のコードコンパイル要求(すなわち、第2のコードコンパイル要求)を選択する。本方法は、806に進み、サーバが選択されたコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、選択されたコードコンパイル要求の情報をサーバに記憶された複数のコンパイラのリストと比較する。
【0047】
810に戻ると、応答が拒否を示す場合、本方法は決定ノード818に進み、別のソースコンパイル要求があるかどうかを決定する。別のソースコンパイル要求がある場合、本方法は、820に進む。818において、他のソースコンパイル要求がない場合、本方法は822において終了する。
【0048】
特定の実施形態において、コードコンパイル要求の情報は、ソースコード言語名、ソースコード言語バージョン、処理デバイス名、処理デバイスバージョン、ドライバ名、ドライババージョン、オペレーティングシステム名、オペレーティングシステムバージョン、またはそれらの任意の組合せを含む。コードコンパイル要求の情報は、サーバがコンパイラライブラリから特定のコンパイラを識別し、選択するために使用することができる情報を含み、選択されたコンパイラは、適切であり、クライアント上で実行すべきコードと合致する。そのような情報は、特定のグラフィックス処理デバイスなど、処理デバイスベンダによって利用可能にされる特定の処理デバイスに関する情報を含むことができる。さらに、処理デバイスのベンダは、使用に適したコンパイラを選択するために、サーバがクライアントからベンダ提供情報を受信することができ、受信した情報をコンパイラライブラリで前に記憶された情報と照合することができるような、サーバ上に記憶されたコンパイラを提供することができる。本方法は、複数のデバイスの複数のクライアントのために使用でき、第1および第2のクライアントの使用は、説明のためである。
【0049】
特定の実施形態において、クライアントは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバである。さらに、クライアントは、プロセッサを含むクライアントデバイス上にロードまたは配置できる。別の特定の実施形態において、ソースコードは、OpenGLシェーディング言語、OpenGL頂点プログラム、OpenGLフラグメントプログラム、OpenGL ESシェーディング言語、nVidia Cgプログラミング言語、マイクロソフトDirectX高級シェーディング言語、または別のシェーディング言語などのシェーディング言語を含むことができ、使用のために選択されるサーバ−ベースのコンパイラはシェーダコンパイラである。ソースコードは、ゲームアプリケーションとともに使用できるOpenGL glFx、マイクロソフトEffect、またはnVidia Effect CgFXなどのシェーディングプログラムを含むことができる。サーバにおけるシェーダコンパイラは、シェーディングプログラムのソースコードをコンパイルしてコンパイル済みコードを生成するために使用でき、コンパイル済みコードは伝達され、次いでターゲットポータブルデバイス、またはグラフィックス処理ユニットを含むエンドユーザコンピュータなどのクライアントにおいて実行される。
【0050】
特定の実施形態において、ソースコードのコンパイルがコンパイルコード要求に応答してリアルタイムまたはほぼリアルタイムベースで実行されるように、サーバは、十分な計算能力を含み、通信インターフェースは十分な帯域幅を有する。
【0051】
図9は、クライアント要求コンパイルの方法を示すフローチャート図である。図9を参照すると、サーバ−ベースのコードコンパイルを要求する方法は、902において、複数のコンパイラを有するサーバにコードコンパイル要求を送信することと、904において、サーバからコードコンパイル要求への応答を受信することとを含み、応答はコードコンパイル要求の容認または拒否のいずれかを示す。決定ノード906において、コードコンパイル要求の拒否が検出された場合、本方法は、916において終了する。さもなければ、決定ノード906において、コードコンパイル要求の容認を検出したときに、本方法は、908において、ソースコードをサーバに送信することと、910において、サーバがソースコードをコンパイルした後、サーバからコンパイル済みコードを受信することとを含む。本方法はさらに、912において、コンパイル済みコードをプロセッサ読み取り可能メモリに記憶することと、914において、コンパイル済みコードを実行することとを含む。特定の実施形態において、コンパイル済みコードは、GPUなどのアプリケーション処理ユニットにおいて実行できる。別の実施形態において、コンパイル済みコードは、デジタル信号プロセッサ(DSP)または中央処理ユニット(CPU)において実行できる。本方法は、916において終了する。特定の実施形態において、ソースコードはシェーダプログラムコードであり、コンパイル済みコードはシェーダオブジェクトコードを含む。
【0052】
さらに、本明細書で開示した実施形態に関して説明した様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装できることを、当業者は諒解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップを、上記では概して、それらの機能に関して説明した。そのような機能をハードウェアとして実装するかソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装することができるが、そのような実装の決定は、本開示の範囲からの逸脱を生じると解釈すべきではない。
【0053】
本明細書で開示した実施形態に関連して説明した方法またはアルゴリズムのステップは、直接ハードウェアで実施するか、プロセッサによって実行されるソフトウェアモジュールで実施するか、またはその2つの組合せで実施することができる。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、PROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD−ROM、または当技術分野で知られている任意の他の形態の記憶媒体中に常駐することができる。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替として、記憶媒体はプロセッサに一体化することができる。プロセッサおよび記憶媒体はASIC中に常駐することができる。ASICは、コンピューティングデバイスまたはユーザ端末中に常駐することができる。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末中に個別構成要素として常駐することができる。
【0054】
開示した実施形態の上記の説明は、当業者が本開示を実施または使用できるようにするために提供したものである。これらの実施形態への様々な修正は当業者には容易に明らかであり、本明細書で定義した一般原理は、本開示の趣旨または範囲から逸脱することなく他の実施形態に適用できる。したがって、本開示は、本明細書に示した実施形態に限定されるものではなく、特許請求の範囲によって定義される原理および新規の特徴と合致する最も広い範囲が与えられるべきものである。

【特許請求の範囲】
【請求項1】
サーバ−ベースのコンパイル方法であって:
複数のコンパイラを有するサーバにおいてコードコンパイル要求を受信することと;
前記サーバが前記コードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、前記コードコンパイル要求の情報を前記サーバに記憶された前記複数のコンパイラのリストと比較することと;
前記コードコンパイル要求への応答を前記サーバからネットワークを介してクライアントに伝達することと、なお、前記応答は、前記コードコンパイル要求の容認または拒否の指示を含むこと;
を備え、
前記応答が前記コードコンパイル要求の容認の指示を含む場合:
前記サーバにおいてコンパイルすべきソースコードを受信することと;
前記ソースコードをコンパイルしてコンパイル済みコードを生成するのに適した前記選択されたコンパイラを使用して、前記サーバにおいて前記受信したソースコードをコンパイルすることと;
前記コンパイル済みコードを前記サーバから前記ネットワークを介して前記クライアントに伝達することと;
を備える方法。
【請求項2】
前記情報は、ソースコード言語名、ソースコード言語バージョン、処理デバイス名、処理デバイスバージョン、ドライバ名、ドライババージョン、またはそれらの任意の組合せを含む、請求項1に記載の方法。
【請求項3】
前記クライアントは、アプリケーションプログラム、インストーラプログラム、またはデバイスドライバのうちの1つであり、前記クライアントが、プロセッサを含むデバイス上に配置される、請求項1に記載の方法。
【請求項4】
前記ネットワークは、インターネットプロトコルネットワークである、請求項1に記載の方法。
【請求項5】
前記ネットワークは、ワイヤレスネットワークであり、前記サーバは、ワイヤレス基地局内に配置される、請求項1に記載の方法。
【請求項6】
前記ソースコードは、シェーディング言語コードと、機械実行コードに変換すべき中間表現バイトコードと、C言語コードと、からなるグループから選択され、前記コンパイル済みコードは、グラフィックス処理ユニット(GPU)実行コードと、デジタル信号プロセッサ(DSP)実行コードと、CPU実行コードと、からなるグループから選択される、請求項1に記載の方法。
【請求項7】
前記ソースコードは、グラフィックスプログラムを含み、前記クライアントは、グラフィックス処理ユニットを含むターゲットデバイス上へのゲームアプリケーションプログラムのインストールに関連して、前記グラフィックスプログラムのコンパイルを要求するディストリビュータによって使用されるインストーラプログラムである、請求項1に記載の方法。
【請求項8】
前記ソースコードの前記コンパイルは、前記コンパイルコード要求に応答してリアルタイムまたはほぼリアルタイムベースで実行される、請求項1に記載の方法。
【請求項9】
前記サーバにおいて第2のクライアントから第2のコードコンパイル要求を受信することと;
前記サーバが前記第2のコードコンパイル要求に関連するソースコードをコンパイルするのに適したコンパイラを有するかどうかを決定するために、前記第2のコードコンパイル要求の情報を前記サーバに記憶された前記複数のコンパイラの前記リストと比較することと;
前記第2のコードコンパイル要求への第2の応答を前記サーバから前記ネットワークを介して前記第2のクライアントに伝達することと、なお、前記第2の応答は、前記第2のコードコンパイル要求の容認または拒否の指示を含むこと;
をさらに備え、
前記第2の応答が前記第2のコードコンパイル要求の容認の指示を含む場合:
前記サーバにおいてコンパイルすべき第2のソースコードを受信することと;
前記第2のソースコードをコンパイルして第2のコンパイル済みコードを生成するのに適した第2の選択されたコンパイラを使用して、前記サーバにおいて前記受信した第2のソースコードをコンパイルすることと;
前記第2のコンパイル済みコードを前記サーバから前記ネットワークを介して前記第2のクライアントに伝達することと;
を備える、請求項1に記載の方法。
【請求項10】
データ通信ネットワークへのインターフェースと;
複数の異なるコンパイラを記憶するコンパイラライブラリと;
前記インターフェースにおいて受信されたデータに応答し、前記受信データの評価に基づいて前記複数の異なるコンパイラの1つを選択する論理を含むコンパイラ選択論理と;
を備えるサーバであって、
前記複数の異なるコンパイラの前記選択された1つによって生成されるコンパイル済みの出力データは、前記データ通信ネットワークを介してクライアントデバイスに伝達される、サーバ。
【請求項11】
前記受信データは、クライアントデバイスからのコンパイル要求を備え、前記コンパイル要求は、前記クライアントデバイスに関連する情報を含む、請求項10に記載のサーバ。
【請求項12】
前記複数の異なるコンパイラの前記選択された1つは、ソースコードデータを受信し、前記ソースコードデータをコンパイルして、コンパイルされた出力データを生成する、請求項10に記載のサーバ。
【請求項13】
前記クライアントデバイスは、前記コンパイルされた出力データを実行するグラフィックス処理ユニットを含む、請求項12に記載のサーバ。
【請求項14】
前記通信ネットワークは、ワイヤレスネットワークであり、前記クライアントデバイスは、ワイヤレス通信デバイスである、請求項13に記載のサーバ。
【請求項15】
サーバ−ベースのコードコンパイルを要求する方法であって:
複数のコンパイラを有するサーバにコードコンパイル要求を送信することと;
前記サーバから前記コードコンパイル要求への応答を受信することと、なお、前記応答は、前記コードコンパイル要求の容認または拒否のいずれかを示す;
前記コードコンパイル要求の容認を検出したときに、前記サーバにおいてコンパイルすべきソースコードを前記サーバに送信することと;
前記サーバが前記ソースコードをコンパイルした後、前記サーバからコンパイル済みコードを受信することと;
を備える方法。
【請求項16】
前記コンパイル済みコードをプロセッサ読み取り可能メモリに記憶することをさらに備える、請求項15に記載の方法。
【請求項17】
グラフィックス処理デバイスにおいて前記コンパイル済みコードを実行することをさらに備え、前記ソースコードは、シェーダプログラムコードを備え、前記コンパイル済みコードは、シェーダオブジェクトコードを備える、請求項16に記載の方法。
【請求項18】
プロセッサと;
前記プロセッサがアクセス可能なメモリと;
通信インターフェースと;
を備えるコンピューティングデバイスであって、前記通信インターフェースは:
複数のコンパイラを有するサーバにコードコンパイル要求を送り;
前記サーバから前記コードコンパイル要求への応答を受信し、なお、前記応答は、前記コードコンパイル要求の容認または拒否のいずれかを示す;
前記サーバにおいてコンパイルすべきソースコードを前記サーバに送り;
前記サーバからコンパイル済みコードを受信するように構成された通信インターフェースである;
コンピューティングデバイス。
【請求項19】
前記サーバから受信した前記コンパイル済みコードが前記メモリに記憶され、前記プロセッサによって実行される、請求項18に記載のコンピューティングデバイス。
【請求項20】
前記メモリは、アプリケーションプログラムを含み、デバイスドライバプログラムを含む、請求項18に記載のコンピューティングデバイス。
【請求項21】
前記アプリケーションプログラムは、前記コードコンパイル要求を前記通信インターフェースを介して前記サーバに送ることを開始する論理を含む、請求項20に記載のコンピューティングデバイス。
【請求項22】
前記プロセッサは、グラフィックス処理ユニット、ビデオ処理ユニット、デジタル信号プロセッサ、またはカメラ画像処理ユニットのうちの1つであり、前記プロセッサに関連し、前記サーバに記憶されたコンパイラは、前記プロセッサのベンダによって利用可能にされる、請求項21に記載のコンピューティングデバイス。
【請求項23】
前記メモリに記憶されたファイルシステムをさらに備える、請求項18に記載のコンピューティングデバイス。
【請求項24】
前記プロセッサに応答してグラフィックスおよびデータを表示するディスプレイデバイスをさらに備える、請求項18に記載のコンピューティングデバイス。
【請求項25】
前記プロセッサに結合され、オーディオ入力を受信するように適合されたマイクロホンと;
前記プロセッサに結合され、オーディオ出力を生成するように適合されたスピーカと;
をさらに備える、請求項18に記載のコンピューティングデバイス。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公表番号】特表2011−501325(P2011−501325A)
【公表日】平成23年1月6日(2011.1.6)
【国際特許分類】
【出願番号】特願2010−531292(P2010−531292)
【出願日】平成20年10月24日(2008.10.24)
【国際出願番号】PCT/US2008/081205
【国際公開番号】WO2009/055731
【国際公開日】平成21年4月30日(2009.4.30)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】