JP5985766B2 - 過度のコンパイル時間の低減 - Google Patents

過度のコンパイル時間の低減 Download PDF

Info

Publication number
JP5985766B2
JP5985766B2 JP2015561348A JP2015561348A JP5985766B2 JP 5985766 B2 JP5985766 B2 JP 5985766B2 JP 2015561348 A JP2015561348 A JP 2015561348A JP 2015561348 A JP2015561348 A JP 2015561348A JP 5985766 B2 JP5985766 B2 JP 5985766B2
Authority
JP
Japan
Prior art keywords
optimization
execution
time
path
pass
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015561348A
Other languages
English (en)
Other versions
JP2016510919A (ja
Inventor
ブラックマン、デイビッド・サムエル
リム、チュ−チョウ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2016510919A publication Critical patent/JP2016510919A/ja
Application granted granted Critical
Publication of JP5985766B2 publication Critical patent/JP5985766B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

[0001]本開示は、コンパイラに関する。
[0002]ビジュアル提示の内容を提供するデバイスは、一般に、GPUを含む。GPUは、ディスプレイ上のコンテンツを表すピクセルをレンダリングする。GPUは、ディスプレイ上の各ピクセルの1つまたは複数のピクセル値を生成し、ディスプレイ上の各ピクセルのピクセル値にグラフィック処理を実行して、提示のために各ピクセルをレンダリングする。そのレンダリングプロセスは、ピクセル値を修正することができる1つまたは複数のシェーダプログラムの実行を含み得る。
[0003]プログラマは、通常は、ソフトウェア、すなわち、コンピュータのための命令集合、を開発するために人間のユーザに理解可能である高水準のコーディング言語を使用する。そのような命令は、通常は、コンパイルされる、すなわち、プロセッサ、たとえば、汎用プロセッサまたはグラフィックス処理ユニット(GPU)、によって実行することができる低水準のオブジェクトコード(時に機械コードと呼ばれる)に高水準のコーディング言語から変換される。コンパイルは、実行より前に、または、時に「ジャストインタイム」コンパイルと呼ばれる、実行時間に、実行することができる。たとえば、GPUのためのシェーダプログラムは、しばしば、ジャストインタイムでコンパイルされる。
[0004]コンパイラは、様々な最適化タスクを実行するように構成することができる。そのような最適化は、コンパイルされたコードが実行され得る速度を上げるためなどに、コンパイルされたコードの実行中に消費されるメモリを減らそうとすることを含み得る。いくつかのコード最適化問題は、非決定的多項式時間(NP)完全、または決定不能ですらあるように示された。したがって、コード最適化プロセスは、実行に比較的長い時間がかかり、プロセッサとメモリの両方の負荷が大きくなり得る。
[0005]一般に、本開示は、コンパイラ最適化を強化することに関連する様々な技法を説明する。そのような技法は、たとえばシェーダプログラムをコンパイルするための、ジャストインタイムコンパイル、または、他のコンパイル時間、たとえばソフトウェア開発および/または試験、の間に使用することができる。本開示は、コンパイラがコンパイル中にコードを最適化して費やす時間の量を減らすことができる技法を説明する。本開示はまた、コンパイルされることになる特定の命令集合に最も適した、最適化プロセスの組合せ、およびそれらのプロセスのためのパラメータを決定するための技法を説明する。本開示の様々な技法は、単独でまたは任意の組合せでともに使用することができる。
[0006]一例で、方法は、ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定することと、そのコードで最適化パスの少なくともいくつかの命令を実行することと、その最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、その最適化パスのその後の命令の実行を防ぐこととを含む。
[0007]別の例で、デバイスは、ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定することと、そのコードでその最適化パスの少なくともいくつかの命令を実行することと、その最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、その最適化パスのその後の命令の実行をプリベンティングすることとを行うように構成された1つまたは複数のプロセッサを含む。
[0008]別の例で、デバイスは、ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定するための手段と、そのコードで最適化パスの少なくともいくつかの命令を実行するための手段と、その最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、その最適化パスのその後の命令の実行を防ぐための手段とを含む。
[0009]別の例で、コンピュータ可読記憶媒体は、実行されるときに、プロセッサにソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定させ、そのコードでその最適化パスの少なくともいくつかの命令を実行させ、その最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、その最適化パスのその後の命令の実行を防がせる命令がそこに記憶されてある。
[0010]別の例で、方法は、コンパイルされることになるソフトウェアプログラムのコードのための最適化パス構成データのセットを決定することと、ここにおいて、最適化パス構成データは、コンパイル中にそのソフトウェアプログラムのための最適化パスのシーケンスを定義する、その最適化パス構成データのセットに基づいてそのソフトウェアプログラムのコードでその最適化パスのシーケンスを実行することとを含む。
[0011]別の例で、デバイスは、コンパイルされることになるソフトウェアプログラムのコードのための最適化パス構成データのセットを決定することと、ここにおいて、その最適化パス構成データは、コンパイル中にそのソフトウェアプログラムのための最適化パスのシーケンスを定義する、その最適化パス構成データのセットに基づいてそのソフトウェアプログラムのコードでその最適化パスのシーケンスを実行することとを行うように構成された、1つまたは複数のプロセッサを含む。
[0012]別の例で、デバイスは、コンパイルされることになるソフトウェアプログラムのコードのための最適化パス構成データのセットを決定するための手段と、ここにおいて、最適化パス構成データは、コンパイル中にそのソフトウェアプログラムのための最適化パスのシーケンスを定義する、その最適化パス構成データのセットに基づいてそのソフトウェアプログラムのコードでその最適化パスのシーケンスを実行するための手段とを含む。
[0013]別の例で、コンピュータ可読記憶媒体は、実行されるときに、コンパイルされることになるソフトウェアプログラムのコードのための最適化パス構成データのセットを決定することと、ここにおいて、最適化パス構成データは、コンパイル中にそのソフトウェアプログラムのための最適化パスのシーケンスを定義する、その最適化パス構成データのセットに基づいてそのソフトウェアプログラムのコードでその最適化パスのシーケンスを実行することとをプロセッサに行わせる命令がそこに記憶されてある。
[0014]1つまたは複数の例の詳細が、添付の図面および次の記述で説明される。他の特徴、目的、および利点が、それらの記述および図面から、そして特許請求の範囲から、明らかとなろう。
[0015]例示的コンピューティングデバイスを示すブロック図。 [0016]コンパイラの構成要素の例示的セットを示すブロック図。 [0017]本開示の技法によるコンパイルの最適化フェーズの時間予算を使用するための例示的方法を示す流れ図。 [0018]本開示の技法によるコンパイラを動的に構成するための例示的方法を示す流れ図。
[0019]概して、本開示は、コンパイル中のコンピュータプログラムのコードの最適化に関する技法を説明する。そのコンパイルプロセスは、通常は、3つのフェーズを含む:(1)ソースコードが中間表現に変換される、構文解析と、(2)中間表現が変形されて、よりよくされる、最適化(たとえば、メモリ消費、処理効率、より高速のコード、改善された並行処理などに関する)と、(3)最適化された中間表現がオブジェクトコードに変換される、コード生成。
[0020]通常は、最適化フェーズは、最適化パスと呼ばれる一連のパスを介して実行される。たとえば、最適化パスは、ループ最適化パス、データフロー最適化パス、コードジェネレータ最適化パス、関数型言語最適化パスなどを含み得る。いくつかの最適化パスは、最適化された中間表現への影響が大きく、比較的複雑であるが、他のパスは、最適化された表現への影響が比較的小さく、比較的単純である。
[0021]コンパイラ(ソフトウェアで実装し、1つまたは複数のハードウェアベースのプロセッサによって実行することができる)は、通常は、順々に各最適化パスを繰り返す。ある種のパス(たとえば、より複雑なパス)は、実行を終了するために比較的多くの時間を必要とし得る。これは、大きいソフトウェア製品の最終ビルドが消費者への流通向けにコンパイルされるときなど、いくつかの場合に許容可能であるが、他の場合に、コンパイルの遅延は、ユーザ体験の縮小をもたらし得る。
[0022]たとえば、コンピュータゲーム、コンピュータ動画、ウェブベースのプログラムなどで一般に使用される、ジャストインタイム(JIT)コンパイル中に実行される最適化は、ユーザがプログラムの開始を要求する時間とプログラムが実行することができる時間の間の許容不可能な遅延をもたらし得る。別の例として、コード開発サイクル中に実行される最適化は、コードがコンパイルされるときと、プログラマがそのコードを試験し、バグを取ることができる間の時間を遅らせ得る。さらに別の例として、スマートフォンおよびタブレットコンピューティングデバイスなどのモバイルデバイスで、電池残量は限られていることがあり、コードの最適化に過度の時間が費やされることは、電池寿命に否定的な影響を及ぼし得る。
[0023]本開示は、ユーザ体験を改善することができる、コンパイルの最適化フェーズ中に消費される時間の量の低減に関するある種の技法を説明する。たとえば、本開示のある種の技法によれば、コンパイラのパスマネージャは、様々な最適化パスの間で割り当てることができる最大最適化時間(たとえば、最適化時間予算)を定義するデータで構成することができる。パスマネージャは、より大量の時間をより複雑なパスに割り振り、より少ない時間をより単純なパスに割り当てる、各パスに同量の時間を割り当てる、または様々な他の割り当て方式を適用することができる。本開示は、そこに属する機能を実行する、ハードウェア、ソフトウェア、またはその任意の組合せのいずれで実装されても、任意のユニット、モジュール、または構成要素を「パスマネージャ」と呼ぶ。そのコンパイラは、離散的パスマネージャ要素を含むことなしに、これらの機能自体を実行するように構成することができる。同様に、コードジェネレータなどのコンパイラの特定の要素は、本開示のパス管理技法を実行するように構成することができる。
[0024]場合によって、パスマネージャは、より複雑なパスが割り当て時間の量を超えることを可能にし、次いで、複雑なパスの間に費やされた過度の時間に従って、他のパスに割り当て時間の量を減らすことができる。場合によって、パスマネージャは、たとえば、パスに割り当て時間の量をゼロにセットすることによって、ある特定のパスを完全になくすることができる。
[0025]パスマネージャが、異なる量の時間を異なるパスに割り当てるとき、特定のパスに割り当て時間の量は、様々なデータに依存し得る。たとえば、パスマネージャは、そのパスの優先度(他のパスに対する)、全体の最適化予算内で残っている時間の量、電力状態、コンパイルされているプログラムのための最適化の重要性を示す重要性値、ユーザ選択などに基づいて、特定のパスに割り当て時間の量を決定することができる。構成データは、様々なパスに優先度値を割り当てることができる。たとえば、構成データは、その数値がパス間の相対的優先順位を決定するために比較され得るような、パスの優先順位の数値表現を含み得る。電力状態は、たとえば、「満充電」、「半分充電」、「4分の1充電」、「10パーセント充電」など、モバイルデバイスの蓄電池の様々なレベルの電池残量を備え得る。
[0026]本開示はまた、コンパイラの動的構成を介してコンパイルの最適化フェーズを改善することに関する他の技法を説明する。たとえば、特定の、固定のシーケンスで最適化パスを実行するのではなくて、本開示は、たとえば、どのプログラムがコンパイルされることになるかに基づいて、たとえば、プログラムの識別子に基づいておよび/またはコンパイルされることになるプログラムの識別特性に基づいて、最適化パスを並べ替えること、同最適化パスを複数回、しかし異なるパラメータで実行すること、および/または、ある特定の最適化パスを完全になくすることによって、最適化パスのシーケンスを選択的に修正するための技法を説明する。その識別子は、ファイル名、プログラムのファイルのハッシュ、または他の識別する情報を備えることができ、一方、識別特性は、たとえば、ファイル拡張子、そのプログラムが書かれた言語、または、他の識別特性を備え得る。最適化パスのシーケンス、および最適化パスのパラメータは、前もって決定することができ、コンパイラに提供することができる。たとえば、コンパイラは、ネットワーク資源を参照して最適化パスのシーケンスおよび最適化パスのパラメータを定義するデータを要求するように構成することができる。
[0027]図1は、例示的コンピューティングデバイス10のブロック図である。この例で、コンピューティングデバイス10は、制御ユニット20およびディスプレイ出力インターフェース40を含む。制御ユニット20に起因する機能は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組合せを使用して実現することができる。ソフトウェアまたはファームウェアで実装されるとき、ソフトウェアまたはファームウェア命令を記憶するためのコンピュータ可読媒体およびその命令を実行するための1つまたは複数のプロセッサなど、必要なハードウェアもまた用意されると推定される。たとえば、制御ユニット20は、1つまたは複数のプロセッサを含み得る。同様に、制御ユニット20は、1つまたは複数のプロセッサが実行することができる命令を記憶するための1つまたは複数のコンピュータ可読記憶媒体を含み得る。
[0028]この例で、制御ユニット20は、グラフィックスプログラム22およびグラフィックス処理ユニット(GPU)ドライバ30を含む。グラフィックスプログラム22は、たとえば、動画プログラム、ビデオゲーム、グラフィックス開発プログラム、または他のコンピュータベースのグラフィックス生成プログラムを備え得る。この例で、グラフィックスプログラム22は、データ定義グラフィックスオブジェクト24およびデータ定義シェーダプログラム26を含む。グラフィックスオブジェクト24は、一般に、ディスプレイ出力インターフェース40のGPU42などのGPUによってレンダリングすることができるグラフィックスオブジェクトに対応する。グラフィックスオブジェクト24は、たとえば、点、線、三角形、長方形、および他の多角形などのグラフィックスプリミティブの定義、ならびに、たとえば、2次元のまたは3次元のメッシュなどの複数のプリミティブで構成される構造体を含み得る。グラフィックスオブジェクト24は、2次元のまたは3次元のグラフィックスオブジェクトに対応し得る。
[0029]ディスプレイ出力インターフェース40は、データ定義グラフィックスオブジェクト24をレンダリングすることができるGPU24を含む。そのレンダリングプロセスは、グラフィックスオブジェクトから、画像の各ピクセルの光の三原色のトリプレット値の値などのピクセルデータを生成するために、実行される。この方式で、本開示により参照されるレンダリングプロセスは、たとえば、JPEG(Joint Photographic Experts Group)符号化された画像を復号することなどの画像の符号化された表現を復号することとは異なる。すなわち、符号化された画像の復号は、一般に、符号化されたピクセルデータまたは一般に画像のピクセルを表す他のデータの復号を含み、一方、レンダリングプロセスは、一般に、いくつかの例ではカメラ視点、照明効果、および他のそのような要因をさらに考慮することができる、2次元または3次元のグラフィックスオブジェクト(たとえば、グラフィックスプリミティブ)などのデータの高次表現からピクセルデータを生成することを含む。レンダリングプロセスに続いて実際に表示される画像の部分は、符号化された画像の復号の結果として生じ得るが、表示される画像の少なくともいくらかの部分は、たとえば、レンダリングプロセス中にグラフィックス処理データを適用することによって、グラフィックス処理データから生成される。
[0030]レンダリングプロセスの部分として、GPU42は、シェーダプログラム26のうちの1つまたは複数を実行することができる。シェーダプログラムは、柔軟な形で様々なグラフィックス処理機能を実行するために、GPUのプログラマブルシェーダプロセッサコアで実行するソフトウェアアプリケーションである。実行されるときに、シェーダプログラム26は、光源および互いに対するグラフィックスオブジェクト24の位置に基づいて、グラフィックスオブジェクト24から生成されるピクセルに照明または影を追加することなど、様々なタスクのために使用することができる。たとえば、頂点シェーダ、幾何学シェーダ、およびピクセルシェーダなど、様々なタイプのシェーダプログラムが、使用され得る。図1の例で、グラフィックスプログラム22は、シェーダプログラム26を定義するソースコードデータを含む。他の例で、1つまたは複数のシェーダプログラムを定義するソースコードデータは、たとえば、グラフィックスプログラム22がアクセスを有する1つまたは複数の動的にリンクされたライブラリなど、他のどこかに記憶することができる。そのような動的にリンクされたライブラリは、制御ユニット20のコンピュータ可読媒体(図1に示さず)に記憶することができる。
[0031]GPUドライバ30は、制御ユニット20とGPU42の間のインターフェースを表す。GPUドライバ30は、コンピューティングデバイス10のオペレーティングシステム内にインストールすることができる。この方式で、グラフィックスプログラム22は、コンピューティングデバイス10にディスプレイ出力インターフェース40に結合されたディスプレイ上に画像を表示させるために、GPUドライバ30を介してGPU42にコマンドを発行することができる。たとえば、グラフィックスプログラム22は、1つまたは複数のグラフィックスオブジェクト24のデータおよび/またはシェーダプログラム26のうちの1つまたは複数を定義するデータをGPUドライバ30を介してGPU42に送信することができる。本開示の技法によれば、GPUドライバ30は、コンパイラ50がプログラム(たとえば、シェーダプログラム26のうちの1つ)をコンパイルするために呼び出されるたびに、コンパイラ50の特定の構成を決定することができる。加えてまたは代替で、コンパイラ50は、コンパイルされることになるプログラムの識別する情報に基づいて構成を決定するように構成することができる。
[0032]コンパイラ50の起こり得る構成は、GPUドライバ30とは別個のデータベース内に、GPUドライバ30自体によって、コンパイラ50によって、またはGPUドライバ30にアクセス可能な他のメモリで、記憶することができる。一例として、その構成データは、ネットワークを介してアクセス可能なデータベースに記憶することができる。図1の例で、GPUドライバ30は、様々なコンパイル目標に基づいて、コンパイラ50のための様々な潜在的構成を記憶する、構成データベース32を含む。GPUドライバ30内に示されるが、構成データベース32は、他のどこか、たとえば、制御ユニット20内またはコンピューティングデバイス10の外部で、記憶され得ることを理解されたい。そのような例で、GPUドライバ30は、データを検索または受信するように構成されたインターフェースを介して構成データを検索または受信することができる。したがって、GPUドライバ30、またはコンパイラ50は、コンパイルのための特定の時間に1つまたは複数の様々なコンパイル目標に基づいてコンパイラ50のための特定の構成を決定するように構成することができる。たとえば、目標が節電である場合、GPUドライバ30は、最適化パス、たとえば、そのパスのための実行時間(すなわち、実行のためにそのパスに割り当て時間の量)および/または実行される最適化パスの数、を減らす構成を選択することができる。一例として、GPUドライバ30は、ループ最適化をなくし、単純な線形走査レジスタアロケータを使用する構成を選択して節電することができる。代替で、ループ最適化は、ループを有するシェーダのためにとっておくことができ、そして、GPUドライバ30は、グラフ彩色レジスタ割振りパスを使用するようにコンパイラ50を構成することができる。
[0033]代替で、目標が、最適に近いコードである場合、GPUドライバ30は、多数の最適化パスが実行できるようにする構成を選択することができ、そして、データベースは、各々のシェーダプログラム26の最もよく知られているコンパイラ構成を記憶することができる。さらに別の例として、目標がメモリの節約である場合、GPUドライバ30は、メモリ使用量の改善に向けられた最適化パスが実行されることを確保し、他の最適化パスを選択的に使用するまたは飛ばすことができる。さらに別の例として、システム負荷が、考慮すべき事項であることがある。したがって、GPUドライバ30は、現在のシステム負荷の検出に応答して、コンパイラ50の構成を選択することができる。たとえば、GPUドライバ30は、システム負荷が比較的高いかまたは比較的低いかをチェックし、どの最適化パスまたは最適化パスのどのバージョンを実行するかを選択することができる。
[0034]それによって、コンパイラ50は、それらのそれぞれの時間の1つまたは複数のコンパイル目標に基づいて、異なる時間にシェーダプログラム26のうちの同じもののために異なるオブジェクトコードを作り出すことができる。この方式で、GPUドライバ30は、様々なコンパイル目標に応じて、異なって、コンパイラ50を動的におよび自動的に再構成することができる。すなわち、コンパイラ50の実行に先立って、GPUドライバ30は、たとえば、1つまたは複数の現在のコンパイル目標に基づいておよび/またはコンパイルされることになるプログラム(たとえば、シェーダプログラム26のうちの1つ)に基づいて、構成データベース32からのデータを使用してコンパイラ50を構成することができる。
[0035]図1の例で、コンピューティングデバイス10はまた、ネットワークインターフェース44を含む。この例で、GPUドライバ30は、コンパイルされることになるシェーダプログラム26のうちの1つに基づいてネットワークインターフェース44を使用してコンパイラ50のコンパイラ構成データを検索するように構成することができる。すなわち、GPUドライバ30は、シェーダプログラム26のうちの1つをコンパイルするときに使用するためのコンパイラ構成を検索するために、ネットワークの場所にアクセスすることができる。それによって、GPUドライバ30は、ネットワークインターフェース44を介して検索された構成データを使用し、構成データベース32を更新することができる。いくつかの例で、GPUドライバ30は、最新のコンパイラ構成がシェーダプログラム26のコンパイルに先立って使用可能であるように、定期的に、たとえば、週に1度または月に1度、そのような構成を検索することができる。
[0036]図1の例で、データ定義シェーダプログラム26は、ソースコード(すなわち、コンパイルされていないコード)の形で記憶される。したがって、GPU42によって実行可能であるために、グラフィックスプログラム22は、シェーダプログラム26のソースコードをコンパイルのためにGPUドライバ30に送信する。したがって、GPUドライバ30は、コンパイラ50を含む。コンパイラ50は、一般に、シェーダプログラム26のソースコードをGPU42によって実行され得るオブジェクトコードに変換する、制御ユニット20のプロセッサによって実行され得る、プログラムに相当する。したがって、シェーダプログラム26は、グラフィックスプログラム22の実行中にコンパイルすることができる。言い換えれば、シェーダプログラム26のためのソースコードは、ジャストインタイムでコンパイルすることができる。
[0037]GPUドライバ30および/またはコンパイラ50は、コンパイラ50によって生成されるオブジェクトコードの最適化に関する本開示の様々な技法を実行するように構成することができる。前述のように、コンパイラ50は、複数の異なる最適化パスの定義を含み得る。各最適化パスは、コードの特定の態様、たとえば、メモリ管理、コード速度など、を最適化するように構成することができる。ある特定の最適化パスは、他よりも比較的より複雑であることがある。すなわち、ある特定の最適化パスは、他よりもより多くの実行時間および/またはより多くのコンピューティング資源を通常は必要とすると知られていることがある。本開示の技法によれば、コンパイラ50は、最適化パスのうちの1つまたは複数が実行することを許される実行時間の量を制限するように構成することができる。
[0038]一例として、コンパイラ50は、全体の最適化時間予算および/または1つまたは複数の個々の最適化パス時間予算を決定することができる。「時間予算」は、一般に、時間の量が満たされたまたは超過された後は、コンパイラ50が、さらなる実行(たとえば、現在の最適化パスのおよび/またはその後の最適化パスの)を停止するような、その間に実行が許される時間の量に相当する。したがって、全体の最適化予算は、たとえば、いくつかのミリ秒、秒、計算周期などで定義される、その間に最適化フェーズが実行することが許される期間に相当し得る。同様に、個々の最適化パス予算は、それぞれの最適化パスが実行することを許される期間に相当し得る。最適化パスの実行中、コンパイラ50は、費やされた時間の量をモニタし、予算の時間量が満たされたまたは超過されたときに、最適化パスの実行を終了することができる。代替で、コンパイラ50は、ある特定の最適化パスが予算の時間量を超えることを可能にし得るが、1つまたは複数のその後の最適化パスのための予算を減らすことによって、超過分を相殺することができる。
[0039]加えて、または代替で、コンパイラ50は、シェーダプログラム26のうちのどの1つがコンパイルされているかに基づいて、異なるセットの最適化パス(たとえば、省略されることになる1つまたは複数の起こり得る最適化パス)および最適化パスの順序付けを決定することができる。たとえば、ある種のシェーダプログラムは、使用可能な最適化パスのサブセットを使用し、よりよく最適化することができ、さらに、ある特定の順番でおよび/またはある特定のパラメータを使用してそれらの最適化パスを実行することができる。同様に、他のシェーダプログラムは、使用可能な最適化パスの異なるサブセットを使用し、この場合も同様に、ある特定の順番でおよび/またはある特定のパラメータを使用して、よりよく最適化することができる。
[0040]コンパイラ50は、これらの様々な技法を単独でまたはともに実行するように構成することができる。たとえば、コンパイラ50は、コンパイルされることになるシェーダプログラム26のうちの1つ、ならびに、その最適化パスを実行するための時間予算に基づいて、実行する使用可能な最適化パスのサブセットを決定するように構成することができる。そのサブセットの最適化パスを完了した後に時間予算内の時間が残っている場合、コンパイラ50は、時間予算が使い果たされるまで、追加の最適化パスを実行することができる。代替でまたは加えて、コンパイラ50は、使用可能な最適化パスの選択されたサブセット内の各最適化パスの個々の時間予算を決定することができる。
[0041]この方式で、コンパイラ50は、コンパイルの最適化フェーズの改善に関する本開示の技法のうちの1つまたは複数を実行するように構成することができる。すなわち、構文解析に続いて、コンパイラ50は、たとえば、シェーダプログラム26のうちの1つの、ソースコードの構文解析された中間表現を最適化することができる。中間表現を最適化した後、本開示の技法によれば、コンパイラ50は、最適化された中間表現を使用してオブジェクトコードを生成することができる。
[0042]コンパイラ50は、プログラム、たとえば、シェーダプログラム26のうちの1つ、のソースコードに対応する実質的に最適化されたオブジェクトコードを生成することができる。オブジェクトコードを生成した後、GPUドライバ30は、たとえば、GPU42にそのコードを渡すこと、または、GPU42に、GPU42によってアクセス可能なメモリ内で、そのコードのアドレスを送信することによって、そのオブジェクトコードをGPU42に実行させることができる。その結果、GPU42は、シェーダプログラムのためのコンパイルされたオブジェクトコードを実行することができる。たとえば、グラフィックスオブジェクト24のうちの1つまたは複数を定義するデータをレンダリングする間に、GPU42は、1つまたは複数のシェーダプログラムのオブジェクトコードを実行することができる。画像を完全にレンダリングした後、ディスプレイ出力インターフェース40は、ディスプレイのディスプレイデバイス(図示せず)によって検索することができる、画像バッファで画像のデータを記憶することができる。
[0043]図1の例は、GPUドライバの部分としてコンパイラ50を示すが、本開示の技法は他の状況でも使用され得ることを理解されたい。一般に、本開示の技法は、任意のコンパイラ、必ずしもGPUドライバのコンパイラでなくてもよい、によって使用され得る。たとえば、本開示の技法は、コード開発および/またはデバッギング中にコンパイラによって使用され得る。同様に、これらの技法は、Java(登録商標)向けのコンパイラなど、他のジャストインタイムコンパイラによって使用され得る。
[0044]図2は、コンパイラ50の構成要素の例示的セットを示すブロック図である。図2の例で、コンパイラ50は、パーサ52、トークナイザ54、トークンデータ56、グラマ58、オプティマイザ60、コードジェネレータ80、およびオブジェクトコードデータ82を含む。図1に関して説明されたように、コンパイラ50は、プログラム、たとえば、シェーダプログラム、のソースコードを受信することができる。図2は、パーサ52によって受信されるソースコードを示す。一般に、パーサ52は、ソースコードのテキスト(すなわち、すべての入力文字)を構文解析する。図2の例で、パーサ52は、構文解析プロセス中にトークナイザ54を使用する。トークナイザ54は、入力ソースコードをトークン化する。トークン化は、一般に、入力ソースコードから個々のトークンを抽出することを含む。トークンは、一般に、ソースコード(たとえば、変数、関数、数値、コマンド、演算子、シンボルなど)の個々の意味論的ユニットに相当する。
[0045]パーサ52は、トークナイザ54に次のトークンを要求することができ、そして、応答して、トークナイザ54が、パーサ52に入力ソースコードから次のトークンを表すデータを返すことができる。たとえば、次のトークンを表すデータは、「トークンテキスト」値および「トークンタイプ」値を備えることができ、トークンテキストは、ソースコードから抽出された文字テキストであり、トークンタイプは、トークンテキストのタイプ、たとえば、純粋なテキスト、英数字テキスト(文字および数字の組合せを含むテキスト)、数字テキスト、シンボル、または余白(たとえば、スペース、キャリッジリターン、タブなど)、を表す値である。トークンデータ56は、テキストのタイプを定義する。この方式で、トークナイザ54は、余白のセットの間のすべての非余白テキストを検索し、トークンデータ56から検索テキストのタイプを決定することができる。トークナイザ54は、非余白トークンの間の余白を同様に検索し、トークンデータ56を使用して、その余白を、たとえば、余白トークンとして、分類することができる。
[0046]トークナイザ54からトークンデータを受信した後、パーサ52は、トークンの意味論的意味を決定する。たとえば、パーサ52は、グラマ58を定義するデータを使用してトークンの意味論を決定することができる。グラマ58は、文脈のないグラマを備え得る。パーサ52は、再帰的下降パーサを備え得る。それによって、パーサ52は、グラマ58を使用し、現在の状態および受信されたトークンに基づいて、様々な状態間を移行することができる。それらの様々な状態は、パーサ52がどのように各トークンに意味論を割り当てるかに影響を及ぼし得る。パーサ52は、次いで、ソースコードの様々なトークンについて決定された意味論を使用し、そのソースコードの中間表現を作り出すことができる。
[0047]パーサ52は、次いで、オプティマイザ60にソースコードの中間表現を提供することができる。オプティマイザ60は、本開示の技法のうちの1つまたは複数を単独でまたは任意の組合せで使用し、中間表現を最適化することができる。一般に、オプティマイザ60は、中間表現に適用されることになる最適化パス74のうちの1つまたは複数を実行することができる。以下で説明するように、オプティマイザ60は、最適化パスの実行が所定の実行時間予算を超えないことを確保するように構成することができ、および/または、たとえば、コンパイルされるプログラムの識別および/またはそのプログラムの識別特性に基づいて、実行するための最適化パス74のサブセットを選択して中間表現を最適化することができる。
[0048]図2の例で、オプティマイザ60は、パスマネージャ62および最適化エンジン72を含む。最適化エンジン72は、パスマネージャ62の指示で様々な最適化パス74を実行する。パスマネージャ62は、順に、予算モニタ64およびパススケジューラ68を含み、予算データ66およびパスデータベース(DB)70を保持する。予算データ66は、一般に、その間に最適化プロセスが実行し得る全体的時間予算および/または最適化パス74のうちの個々のパスの時間予算、ならびに、コンパイルされている現在のプログラムの最適化に関する追跡データを定義することができる。たとえば、予算モニタ64は、以前に実行された最適化パス74の実行の時間、最適化パス74の優先順位のランキング、最適化パス74の最初の時間割振り、最適化パス74の修正された時間割振りなどに関する統計量を保持することができる。
[0049]最適化エンジン72は、たとえば、最適化パスの実行中にまたは最適化パスの実行の開始に先立って、最適化パス74のうちの現在のパスの実行を進めるかどうかを決定するために、パスマネージャ62と通信することができる。たとえば、各命令の後、最適化エンジン72は、パスマネージャ62にメッセージを送信して、現在の最適化パスを継続するか、現在の最適化パスを終了させるかを決定することができる。場合によって、最適化パス74のうちの1つの実行のための時間が経過したが、その最適化パスが実行をまだ完了していない場合、最適化エンジン72は、その最適化パスの実行を潔く終了させ、次いで、続けて、その後の最適化パスを実行するかまたはその最適化プロセスを終了することができる。
[0050]この方式で、オプティマイザ60は、命令ストリームに適用される最適化および他の変形の自動的制限を介して、過度のコンパイル時間を防ぐことができる。コンパイラ50は、実行時間予算を提供され得る。パスマネージャ62は、最適化パス74およびコードジェネレータ80を横切ってこの予算を分割することができる。言い換えれば、パスマネージャ62は、最適化フェーズ(またはコンパイラ50自体の実行)の実行時間予算を妥当な実行時間、たとえば、5秒、に制限することができる。コード生成は、すべての最適化パスが完了された場合ほどよくないことがあるが、コード生成プロセスは、正しいコードをやはりもたらすことになり、コンパイル時間の開始と完了の間の不当な遅延を回避することによって、よりよいユーザ体験を提供することができる。
[0051]パスマネージャ62は、様々なパラメータを使用し、実行時間予算を決定することができる。そのようなパラメータは、コンパイラ50を実行するCPUの速度、コンパイラ50がマルチスレッドである場合には、そのCPU内のコアの数、システム負荷などのうちの1つまたは複数を含み得る。総時間予算が、以下にさらに詳しく説明されるように、様々な割振り技法を使用し、最適化パス74の間で割り当てられ得る。一例として、パスマネージャ62は、パスごとの実行時間を制限し、実行する最適化パスの数を制限することができ、および/または、最適化パス74のうちのどれを実行するか、およびどのくらい長く実行するかを決定するための動的アルゴリズムを使用することができる。加えて、または代替で、高価なパスは、より単純なパスと置き換えることができる。たとえば、複雑なスケジューラパスは、より効率の低いコードを生み出し得る、より単純なスケジューラアルゴリズムで置き換えることができる。一例として、グラフ彩色を使用する複雑なレジスタ割振りアルゴリズムは、線形走査を使用するより単純なアルゴリズムで置き換えることができる。
[0052]いくつかの例で、最適化パス74の間の実行時間予算の配分は、コンパイラ50が異なるシーケンスで異なるオプションを有する異なる最適化パスを実行するときに、異なり得る。同様に、総予算および配分は、他の外部要因、たとえば、システム負荷、により異なる時間で同コンパイラおよびプログラムについて異なり得る。
[0053]一例で、パスマネージャ62は、最適化パス74を実行するときにバックオフアルゴリズムを使用するように構成され得る。すなわち、5秒の総予算がある場合、パスマネージャ62は、各々の最適化パス74が、最適化エンジン72が実行を終了する前に200ミリ秒より長く実行しないことを確保することができる。そのような終了が起きる場合、テレスコーピングパターンが使用されて、残りのパスのリストから残りのパスの半分を選別することができる。このパターンは、5秒制限が決して到達されないことを確保し、さらなるパス時間切れについて繰り返され得る。時間切れの結果は、最適ではないコード生成である。そのコードは、やはり正しく動作することになるが、最適ではない。
[0054]前述のバックオフアルゴリズムに加えてまたはそれの代替で、パスマネージャ62は、パスの時間制限の階層化されたシステムで構成され得る。すなわち、予算データ66は、最適化パス74の異なる類別の異なる実行時間(または全体的実行時間の割合)を定義することができる。たとえば、最適化エンジン72は、テレスコピック選別アルゴリズムを実行するように構成することができ、そのテレスコピック選別アルゴリズムでは、複雑なパス(たとえば、ループ分析最適化パス)のみが各々200ミリ秒かけることができ、一方、より単純なパス(たとえば、デッドコード削除最適化パス)は50ミリ秒のみかけることができる。予算データ66は、各々の最適化パス74を「複雑な」または「単純な」のいずれかとして分類し、それに応じて実行時間を割り当てることができる。テレスコピック選別アルゴリズムは、残りの複雑な予算をより単純なパスに転送し、より短い最適化パスの前に複雑な最適化パスを省くことができる。これは、複雑なパスよりもより単純なパスの実行を優先する。言い換えれば、最適化エンジン72は、実行時間予算内の残された時間に応じて、最適化パス74のうちの1つの早期の終了の後に「複雑な」パスの半分を実行することができる。すべての複雑なパスが飛ばされた後、最適化エンジン72は、「簡単な」(単純な)パスを飛ばし始めることができる。本技法は、問題のコンパイラによって処理される特定のプログラムドメインについて微調整することができる。
[0055]予算データ66は、様々な入力基準に基づいて様々な実行時間予算を定義することができる。たとえば、予算データ66は、コンパイルされることになるソースコードが書き込まれた言語に基づいて異なる実行時間予算を定義することができる。そのような言語は、たとえば、OpenGL、OpenCL、DirectX、GLslang、RenderManシェーディング言語などを含み得る。
[0056]これらの技法は、様々な利点を実現することができる。たとえば、本技法は、最適化フェーズが過度の実行時間を費やさないことを確保するためにユーザ影響が必要とされないという点で、自動である。したがって、コンパイラ50は、複雑な最適化パスを使用して、より多くの時間を費やし得る。したがって、コンパイラ50の開発者は、大きな(しかし稀有な)プログラムでの最適化パスの最悪の場合の実行時間について心配する必要はない。これは、コンパイラ50が、最悪の場合とは反対に、平均的(そして、恐らく最善の)場合について最適化することを可能にする。同様に、これらの技法は、きめの細かい制御、たとえば、グラフィックスプログラム(たとえば、OpenGLで書かれたプログラム)のための20ミリ秒予算および計算プログラム(たとえば、OpenCLで書かれたプログラム)プログラム最適化のための5秒、を可能にすることができる。
[0057]加えて、コード生成中、より複雑な、時間のかかるパスは、深くネスト化した機能コールフローを有するソースプログラムなど、稀有な周辺条件に対処する必要なしにコンパイラパイプライン内に置くことができる。より単純な最適化パスの実行時間に基づいて、パスマネージャ62は、より積極的な最適化パスのためにどのくらいの時間が使用可能であるかを推定し、これらをパイプラインに追加することができる。起こり得る修正形態は、より積極的なループ分析および/またはより積極的なレジスタ割振りおよび命令スケジューリングを含み得る。
[0058]時間予算編成アルゴリズムはまた、1つまたは複数の様々なシステム目標に従って調整することができる。すなわち、異なる最適化パスパラメータプロファイルが、様々なシステム目標を達成するために開発可能であり、予算データ66に記憶され得る。たとえば、1つの目標は、たとえば、電池式のデバイスにおける、省電力化である。コンパイル時間リミタとして省電力プロファイルを使用することによって、パスマネージャ62は、コンパイラ50が、効率的に電力を消費するための最大限の能力を有することを確保しようと試みることができる。たとえば、省電力を目的とする効率的コンパイル時間は、CPU時間の5秒に相当し得る。
[0059]本開示の技法の開発中の発見的試験は、ソースコードパターンの特質、および、本開示の技法を適用することなしに、それらに適用される最適化パスの複雑性が原因で、コンパイルするために比較的長い時間がかかる様々なプログラムを識別した。すなわち、本開示の技法なしには、コンパイル開始時間と完了時間の間に長い遅延が存在し得る。たとえば、いくつかのシェーダプログラムは、コンパイラ50の実行が「ロックアップする」、すなわち妥当な時間内に完了することに失敗する、結果をもたらし得る莫大な量のCPU時間をopt(すなわち、コンパイル最適化フェーズ)およびcodegen(すなわち、最適化に続く、オブジェクトコードの生成)に消費させる、複雑なパターンを含む。GPUシェーダおよびカーネルの場合、これはまた、プログラム(たとえば、シェーダを使用するゲームまたはカーネルを使用するオペレーティングシステム)の開始を遅らせ得る。したがって、コンパイル遅延(たとえば、最適化によって引き起こされる遅延)は、乏しいユーザ体験をもたらし得る。いくつかの極端な場合には、本開示の技法なしにコンパイラは、プロセスのユーザインターフェースを「ロックアップ」させ得る。
[0060]一例として、OpenCL(オープンコンピューティング言語)で書かれた例示的ビットコインプログラムのコンパイルの試験は、8064GPUコンパイラでコンパイルするのに1時間以上かかった。この例で、ビットコインマイナはphatk2.clであり、そして、コンパイラはOpenCLコンパイラであった。そのような遅延は、乏しいユーザ体験をもたらすのみでなく、悪意あるユーザは、そのような遅延を利用するなどの方法でソースコードを書き込み、それによって、サービス妨害攻撃を引き起こすことができる。したがって、コンパイル遅延は、潜在的セキュリティリスクをもたらし得る。したがって、本開示の技法を使用することで、そのような遅延を回避し、改善されたユーザ体験をもたらすことができ、セキュリティの強化も実現することができる。すなわち、本開示の実行時間制限技法は、コンパイラ50が過度のCPU時間を消費するのを防ぐことができる。
[0061]加えて、または代替で、パスマネージャ62は、そのサブセットが、多くのプログラムについて、過度の時間を消費することがない最適化パスを含むように、最適化パス74のサブセットを選択することができる。すなわち、パスマネージャ62は、最適化パス74のうちの様々な最適化パスの統計量を記録して、実行中に消費される平均時間、ならびに、その最適化パスを実行することによって達成される最適化の相対的量(たとえば、どのくらい上手くその最適化パスがメモリ使用量を達成するか、ループを改善するか、実行速度を改善するかなど)を決定することができる。パスマネージャ62は、次いで、ソースコードを十分に最適化することなしに過度の実行時間を消費するそれらの最適化パスをなくすることができる。
[0062]加えて、または代替で、最適化フェーズ中に、コンパイラ50を実行するCPUは、様々な最適化フェーズの1つまたは複数の新しいスレッドを生じさせることができる。CPU(たとえば、GPUドライバ30を実行する)は、コンパイルスレッドが時間制限を超えたかを検出することができ、次いで、そのスレッドが時間制限を超えたと決定したときに、そのスレッドをキルすることができる。
[0063]本開示の技法の実装は、大多数の状況で通常のコンパイルビヘイビアを保ちながら、コンパイル時間が高くなり過ぎたときにユーザ知覚可能な遅延を回避することができる。明白な無応答の代わりに、コンパイル時間が過度であった可能性があるとき、ユーザは、ソースコードのコンパイルに由来するプログラムがGPUで(または、場合により、CPUで)高速で実行しないことを経験し得る。
[0064]前述のコンパイル時間リミタ技法に加えて、またはその代替で、コンパイラ50はまた、コンパイルされることになる特定のプログラムに基づいて、実行するための最適化パス74のサブセットを選択するように構成することができる。それによって、最適化ビヘイビア(たとえば、引数としてコンパイラに渡され得る−O2、−O3、−Os、および−非インラインスイッチ)を修正するためにユーザに使用可能な従来のコンパイラオプションに加えて(または代替で)、パスマネージャ62は、たとえば、ユーザ入力なしに、最適化ビヘイビアを修正するための1つまたは複数のオプションを自動的に選択することができる。言い換えれば、あらゆる入力ソースコードプログラムの最適化パスの固定のシーケンスを実行するのではなくて、オプティマイザ60は、たとえば、コンパイルされることになるプログラムに基づいて、動的に最適化パスを実行することができる。さらに、オプティマイザ60は、特定の順序で、複数回、様々なパラメータ、または、たとえば、コンパイルされることになるプログラムに基づく、他の修正形態で、最適化パス74またはそのサブセットを実行することができる。
[0065]パスデータベース70は、最適化パス74の順序付けのうちの1つまたは複数、最適化パス74のうちの1つまたは複数の最適化パスが異なるパラメータ(ならびにそのようなパスのために使用されることになるパラメータ)で複数回実行されるべきか、最適化パス74のうちの1つまたは複数の最適化パスが飛ばされるべきかを定義するデータを含む。パスデータベース70は、様々な構成のそのようなデータの1つまたは複数の組合せを記憶することができる。いくつかの例で、ドライバ(たとえば、図1のGPUドライバ30)は、パスデータベース70で記憶された構成のうちの1つを選択する、または、それらの構成のうちのどれをパスデータベース70から検索するかに関してコンパイラ50に命令を送信することができる。加えて、パスデータベース70はまた、実行されることになる最適化パスのうちのいずれかまたはすべての実行時間予算および/または最適化フェーズの全体的時間予算を定義するために、予算データ66へのマッピングを含み得る。
[0066]最適化エンジン72は、最適化パス74のうちのどれが最適化パスのシーケンスで次に実行すべきかを決定するために、パスマネージャ62と通信することができる。加えて、パススケジューラ68は、最適化パス74のうちの1つまたは複数の最適化パスの最適化エンジン72へのパラメータ、たとえば、いつ最適化パス74のうちの1つまたは複数の最適化パスが異なるパラメータで複数回実行されることになるか、を提供することができる。すなわち、コンパイラ50(図1のGPU42など、GPUのコンパイラに対応し得る)は、最適化パス74のうちの1つまたは複数の最適化パスが省略され得る、最適化パス74が様々な異なる順序で、異なる回数、および/または各パスについて異なるパラメータで実行され得るように、柔軟な形で構造化され得る。
[0067]好ましい最適化パス構成データは、プログラムもしくはプログラムの特性について、プログラムを実行するデバイスの特性について、および/または、1つまたは複数の現在のコンパイル目標について、具体的に定義され得る。たとえば、異なるセットの好ましい最適化パス構成データは、プログラムのソースコードをコンパイルするように構成されたデバイスがパーソナルコンピュータ、スマートフォン、タブレットコンピュータ、ラップトップコンピュータなどであるかどうかに基づいて、定義することができる。この方式で、好ましい最適化パス構成データが、好ましい最適化パス構成データがそのプログラムおよびデバイスの所望のコンパイル最適化特性をもたらすように、コンパイルを実行していることになるデバイスについて個々に調整され得る。図1に関して論じたように、好ましい最適化パス構成データは、たとえば、構成データベース32(図1)内の、コンパイラ50から別個に記憶することができる。
[0068]1つまたは複数の最適化パス74の実行に続いて、オプティマイザ60は、コードジェネレータ80に最適化された中間表現を提供する。「最適化された中間表現」は、中間表現が完全に最適化されたことを必ずしも意味しないことを、理解されたい。そうではなくて、「最適化された中間表現」は、オプティマイザ60によって処理されたものとしての、パーサ52によって作り出された、中間表現を指すことを、理解されたい。すなわち、オプティマイザ60は、最適化パス74のすべてを実行していないことがあり、時期尚早に最適化パス74のうちの1つまたは複数の最適化パスの実行を終了した可能性があり、および/または、最も最適な中間表現をもたらす最適化パス74のうちの1つまたは複数の最適化パスのパラメータを選択していないことがある。しかし、オプティマイザ60は、最適化フェーズが過度の時間を消費しないことを確保するためにおよび/または他のコンパイル目標、たとえば、省電力、現在のシステム負荷に従うことなど、に従うために、そのようなアクションを実行した可能性がある。
[0069]コードジェネレータ80は、オプティマイザ60から最適化された中間表現を受信し、オブジェクトコードデータ82を使用してその最適化された中間表現をオブジェクトコードに翻訳する。オブジェクトコードデータ82は、GPU42(図1)などの特定のプロセッサのために、オブジェクトコード構造、形式、内容などを定義することができる。すなわち、オブジェクトコードデータ82は、対応するプロセッサによって実行することができる整形式のオブジェクトコードの構文および意味論を定義することができる。それによって、コードジェネレータ80は、オブジェクトコードデータ82を使用し、対応するプロセッサによって実行することができる形式でオブジェクトコードを生成することができる。オプティマイザ60が最適化パスを実行するものとして記載されるが、コードジェネレータ80もまた(すなわち、加えてまたは代替で)、1つまたは複数の最適化パスを実行するように構成され得る。
[0070]一例として、最適化された中間表現は、「do−while」ループを定義するデータを含み得る。オブジェクトコードデータ82を使用する、コードジェネレータ80は、「do−while」ループを定義するデータを、そのループ内の一連の命令、真理比較演算、および、真理比較演算が「真」値(たとえば、非ゼロ値)を返す場合に一連の命令の最初にあるアドレスをプロセッサに返させる飛越し命令に翻訳することができる。別の例として、最適化された中間表現は、「if−else」ステートメントを定義するデータを含み得る。オブジェクトコードデータ82を使用する、コードジェネレータ80は、「if−else」ステートメントを定義するデータを真理比較演算、真理比較演算が「真」値を産出する場合にプロセッサを第1の一連の命令のアドレスに飛び越させる第1の飛越し動作、真理比較が「偽」値を産出する場合にプロセッサを第2の一連の命令のアドレスに飛び越させる第2の飛越し動作、第2の一連の命令に続くアドレスにプロセッサを飛び越させる飛越し動作がその後に続く第1の一連の命令のデータ、および、第2の一連の命令のデータに翻訳することができる。
[0071]この方式で、コンピューティングデバイス10(図1)は、ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定することと、そのコードでその最適化パスの少なくともいくつかの命令を実行することと、その最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、その最適化パスのその後の命令の実行をプリベンティングすることとを行うように構成された、1つまたは複数のプロセッサを含むデバイスの一例を表す。
[0072]同様に、コンピューティングデバイス10(図1)は、コンパイルされることになるソフトウェアプログラムのコードのための最適化パス構成データのセットを決定することと、ここにおいて、その最適化パス構成データは、コンパイル中にそのソフトウェアプログラムのための最適化パスのシーケンスを定義する、その最適化パス構成データのセットに基づいてそのソフトウェアプログラムのコードでその最適化パスのシーケンスを実行することとを行うように構成された1つまたは複数のプロセッサを含むデバイスの一例を表す。
[0073]図2のコンパイラ50の例は、コンパイラ50がGPU42のオブジェクトコードを生成するコンパイラを表す、図1のコンピューティングデバイス10との関連で論じられる。しかし、本開示の技法は、汎用CPUのコンパイラに同様に適用され得ることを、理解されたい。したがって、様々な例で、本開示の技法を実装するコンパイラは、OpenGL、OpenCL、またはDirectXなどのGPUプログラミング言語のためのコンパイラ、GLシェーディング言語(GLslang)もしくはRenderManシェーディング言語などのシェーダ言語、または、C/C++、C#、Ruby、Fortran、Haskell、Cython、Objective−Cなどの一般プログラミング言語のためのコンパイラなどを備え得る。
[0074]図3は、本開示の技法によるコンパイルの最適化フェーズの時間予算を使用するための例示的方法を示す流れ図である。例示を目的として、図3の方法は、図1および図2の要素、たとえば、制御ユニット20(プロセッサを含み得る)、GPUドライバ30、およびコンパイラ50、に関して説明される。しかし、同様の方法が、GPUではなくて、他のデバイスおよび構成要素、たとえば、汎用プロセッサのためのコードをコンパイルするための構成要素、によって実行され得ることを、理解されたい。
[0075]最初に、GPUドライバ30が、コンパイルされることになるソースコードを受信することができる(100)。図1の例で、そのソースコードは、シェーダプログラム26のうちの1つのソースコードに対応し得る。そのソースコードは、シェーダ言語などのグラフィックスプログラミング言語に準拠し得る。様々な要因に応じて、GPUドライバ30は、最適化時間予算、すなわち、その間にコンパイラ50がコンパイルの最適化フェーズを実行することができる割り当て時間の量、を計算することができる(102)。この時間は、たとえば、5秒、10秒などでもよく、秒、ミリ秒、クロックチックなどで表すことができる。
[0076]GPUドライバ30は、たとえば、ユーザ選択、システム負荷、電力考慮事項、コンパイルされることになるプログラムの識別子、または他の要因など、1つまたは複数の様々な要因に基づいて最適化時間予算を計算することができる。GPUドライバ30は、次いで、最適化時間予算を示すデータをコンパイラ50に提供することができる。コンパイラ50は、次いで、最適化パス74のうちの1つまたは複数の最適化パスに時間予算を割り当てることができる(104)。いくつかの例で、コンパイラ50は、同等に最適化パスの間で時間を割り当てることができる。最適化パスが、割り当て時間の前に終了する場合、コンパイラ50は、1つまたは複数のその後の最適化パスに残りの時間を割り当てることができる。
[0077]コンパイラ50は、次いで、ソースコードを構文解析して中間表現を形成することができる(106)。具体的には、パーサ52は、中間表現を形成するとき、トークナイザ54を使用してソースコードからトークンを検索し、グラマ58を使用してそのトークンから意味論を決定することができる。中間表現は、ソースコードを表すコンパイラ50のメモリで記憶された1つまたは複数のデータ構造体を備え得る。パーサ52は、次いで、最適化のためにオプティマイザ60に中間表現を提供することができる。
[0078]オプティマイザ60は、最適化時間予算の割振りに従って、パスマネージャ62に最適化エンジン72を管理させることができる。パスマネージャ62は、最初に最適化エンジン72に第1の最適化パスを開始させ(108)、第1の最適化パスのための最適化時間予算の割り振られた部分に対応するタイマを始動させることができる。最適化エンジン72は、次いで、その最適化パスの1つまたは複数の命令を実行することができる(110)。最適化エンジン72は、次いで、その命令がその最適化パスの最後の命令であるかどうかを決定することができる(112)。実行された命令が、最後の命令ではない場合(112の「いいえ」分岐)、最適化エンジン72は、現在の最適化パスのための実行時間が現在の最適化パスの実行のための割り当て時間を超えたかどうかに関してパスマネージャ62に照会することができる(114)。
[0079]現在のパスのための実行時間が、現在の最適化パスのための割り当て時間を超えていない場合(114の「いいえ」分岐)、最適化エンジン72は、現在の最適化パスの1つまたは複数のその後の命令を続けて実行することができる(110)。他方で、前に実行された命令がその最適化パスの最後の命令であった場合(112の「はい」分岐)、あるいは、現在のパスのための実行時間が現在の最適化パスのための割り当て時間を超えた場合(114の「はい」分岐)、最適化エンジン72は、その最適化パスを終了させることができ、そして、パスマネージャ62は、前の最適化パスが実行されるべき最後の最適化パスであったかどうかを決定することができる(116)。この方式で、最適化パスの実行のための実時間がその最適化パスの実行のための割り当て時間を超えた場合(114の「はい」分岐により)、コンパイラ50は、その最適化パスのその後の命令の実行を防ぐことができる。
[0080]図3の例で、パスマネージャ62は、最適化パスのための実行時間がその最適化パスのための割り当て時間を超えた後に、その最適化パスの実行を終了する。しかし、他の例で、パスマネージャ62は、1つまたは複数の最適化パスが割り当て時間を超えることと、1つまたは複数のその後の最適化パスのために割り当て時間を調整してその差を埋め合わせることとを可能にし得ることを、理解されたい。したがって、パスマネージャ62は、現在の(および/または1つまたは複数の前の)最適化パスの実行のための実時間に基づいて1つまたは複数のその後の最適化パスのための割り当て時間を調整するように構成され得る。
[0081]前の最適化パスが最後の最適化パスではなかった場合(116の「いいえ」分岐)、パスマネージャ62は、最適化エンジン72に次の最適化パスを始めさせ(108)、この次の最適化パスに割り当て時間の量のためのタイマを再始動させることができる。他方では、最後の最適化パスを実行した後(116の「はい」分岐)、オプティマイザ60は、最適化された中間表現からオブジェクトコードを生成することができるコードジェネレータ80にその最適化された中間表現を提供することができる(118)。コンパイラ50は、次いで、たとえば、GPU42(図1)に生成されたコードを提供することによって、生成されたコードを出力することができる(120)。
[0082]この方式で、図3の方法は、ソフトウェアプログラムのコード(たとえば、コンパイルされることになるコードの中間表現)を最適化するための最適化パスの実行のための割り当て時間を決定することと、そのコンパイルされたコードで最適化パスの少なくともいくつかの命令を実行することと、その最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、その最適化パスのその後の命令の実行を防ぐこととを含む、方法の一例を表す。本方法はさらに、最適化されたコードからソフトウェアプログラムのためのコンパイルされたコード(すなわち、オブジェクトコード)を生成することを含み得る。
[0083]図4は、本開示の技法によるコンパイラを動的に構成するための例示的方法を示す流れ図である。例示を目的として、図4の方法は、図1および図2の要素、たとえば、制御ユニット20(プロセッサを含み得る)、GPUドライバ30、およびコンパイラ50、に関して説明される。しかし、同様の方法が、他のデバイスおよび構成要素、たとえば、GPUではなくて、汎用プロセッサのためのコードをコンパイルするための構成要素、によって実行され得ることを、理解されたい。
[0084]GPUドライバ30は、構成データベース32が更新されるべきかどうかを定期的に決定するように構成することができる。たとえば、GPUドライバ30は、毎月、毎週、毎日、または他の間隔で、構成データベース32の更新をチェックするように構成することができる。したがって、GPUドライバ30は、更新された構成データが、たとえば、ネットワークの場所でアクセス可能であり得る、構成データベースから、使用可能であるかどうかを決定することができる(150)。更新された構成データが使用可能である場合(150の「はい」分岐)、GPUドライバ30は、たとえば、ネットワークの場所から、更新された構成データを検索することができる(152)。たとえば、GPUドライバ30は、シェーダプログラム26のいずれかまたはすべてなど、前にコンパイルされたまたは今後コンパイルされることになる様々なプログラムの記録を構成データベース32で保持することができる。GPUドライバ30はまた、検索された更新された最適化情報で構成データベース32を更新することができる。
[0085]更新された構成データが使用可能でない場合(150の「いいえ」分岐)、または構成データベース32を更新した後、GPUドライバ30は、コンパイルされることになるプログラムのソースコードを受信することができる(154)。そのソースコードは、図1および図2の例で、シェーダプログラム26のうちの1つに対応し得る。GPUドライバ30はさらに、コンパイルされることになるプログラムの識別を決定することができる(156)。たとえば、GPUドライバ30は、そのプログラムの名、そのプログラムのハッシュ、またはそのプログラムの他の識別情報を決定することができる。GPUドライバ30は、次いで、プログラム識別に基づいて、最適化構成情報を決定することができる(158)。加えてまたは代替で、GPUドライバ30は、たとえば、そのプログラムが書かれた言語、そのプログラムのファイルのファイル名の拡張子など、そのプログラムの識別特性に基づいて、最適化構成情報を決定することができる。
[0086]すなわち、GPUドライバ30は、コンパイルされることになるプログラムの決定された識別を使用して構成データベース32を照会し、構成データベース32がそのプログラムの識別と関連付ける構成情報でコンパイラ50を構成することができる。この情報は、たとえば、最適化パス74のうちのどれがそのプログラムを実行するか、最適化パス74のうちのいずれかが複数回実行されるべきかどうか、実行されることになる最適化パスのパラメータ、最適化パスが実行されることになる順番などを示し得る。加えて、その構成情報は、前述で図3に関して論じられたように使用することができるコンパイルの最適化フェーズを実行するための時間予算を、示すことができる、あるいは、GPUドライバ30がその時間予算を決定することができる。
[0087]前述のようにコンパイラ50を構成した後、GPUドライバ30は、コンパイルのためにコンパイラ50にそのプログラムのソースコードを提供することができる。それによって、パーサ52は、そのソースコードを受信し、そのソースコードを構文解析して中間表現を形成することができる(160)。具体的には、パーサ52は、中間表現を形成するとき、トークナイザ54を使用してそのソースコードからトークンを検索すること、およびグラマ58を使用してそのトークンの意味論を決定することができる。その中間表現は、そのソースコードを表すコンパイラ50のメモリで記憶された1つまたは複数のデータ構造体を備え得る。パーサ52は、次いで、最適化のためのオプティマイザ60にその中間表現を提供することができる。
[0088]オプティマイザ60は、たとえば、パスデータベース70で記憶されたものとしての最適化のための構成情報を決定することができる。この情報は、前述のように、最適化パス74のうちのどれが実行されることになるかを指示することができる。それによって、パスマネージャ62は、パスデータベース70から、最適化パス74のうちのどれが実行されることになるか、それらの最適化パスが実行されるべき順序、最適化パスを実行するためのパラメータ、ある特定の最適化パスが複数回実行されるべきかどうかなどを決定することができる。この方式で、パスマネージャ62は、最適化構成情報を使用して実行するための最適化パスのセットを決定することができる(162)。いくつかの例で、1つまたは複数の最適化パス74は、それぞれのパスのビヘイビアを変更するパラメータを受け付けることができる。たとえば、そのようなパラメータは、最適化パスのためのアンロール要因またはスケジューリング戦略を指定することができる。そのような場合、パスマネージャ62は、パスマネージャ62がどのパスが実行されることになるかを選択する方式と実質的に同様の方式で適切なパラメータを選択することができる。すなわち、パスデータベース70は、最適化パス74に渡されることになる様々なパラメータの値を定義するデータを含み得る。
[0089]パススケジューラ68は、実行するための決定された最適化パスのうちの第1の最適化パスをスケジュールすることができるので、パススケジューラ68は、次いで、次の最適化パスを始めることができ(164)、そして、最適化エンジン72は、最適化パスを実行することができる。すなわち、最適化エンジン72は、最適化構成情報によって決定されたものとしての最適化パスのパラメータを使用して、最適化パスの実行を介してプログラムの受信された中間表現を修正することができる。最適化パスの実行を終了した後、パスマネージャ62は、最近完了した最適化パスが最後のパスであったかどうかを決定することができる(166)。
[0090]最近完了した最適化パスが最後のパスでなかった場合(166の「いいえ」分岐)、パスマネージャ62は、最適化エンジン72にその後の最適化パスを実行させることができる。他方で、最近完了した最適化パスが最後のパスであった場合(166の「はい」分岐)、パスマネージャ62は、オプティマイザ60に最適化された中間表現をコードジェネレータ80に提供させることができる。加えて、図3に関して論じたように、パスマネージャ62はまた、最適化フェーズの時間予算を保持することができ、決定された最適化パスのうちのすべてが完了していなくても時間予算が終了した後にコードジェネレータ80に最適化された中間表現を提供することができる。オプティマイザ60が、概して、最適化パスを実行するものとして説明されるが、コードジェネレータ80もまた(すなわち、加えてまたは代替で)、最適化パスを実行するように構成することができることを理解されたい。この方式で、コードジェネレータ80は、本開示の技法のうちの1つまたは複数を実装するように構成することができる。
[0091]コードジェネレータ80が最適化された中間表現を取得した後(または、コードジェネレータ80が中間表現を最適化した後)、コードジェネレータ80は、最適化された中間表現からオブジェクトコードを生成することができる(168)。オブジェクトコードを生成することは、図3のステップ118の論考に実質的に対応し得る。コードジェネレータ80はまた、たとえば、GPU42に、生成されたコードを出力することができる(170)。
[0092]この方式で、図4の方法は、コンパイルされることになるプログラムの最適化パス構成データのセットを決定することと、ここにおいて、最適化パス構成データはコンパイル中にそのプログラムの最適化パスのシーケンスを定義する、その最適化パス構成データのセットに基づいてそのプログラムのコードで最適化パスのシーケンスを実行することとを含む、方法の一例を表す。
[0093]例として、そして限定ではなく、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMまたは他の光ディスク記憶装置、磁気ディスク記憶装置、または他の磁気記憶デバイス、フラッシュメモリ、あるいは、命令またはデータ構造体の形式で所望のプログラムコードを記憶するために使用され得るおよびコンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、任意の接続が、適切にコンピュータ可読媒体と呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線(DSL)、あるいは、赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他の遠隔ソースから送信される場合、そのとき、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、あるいは、赤外線、無線、およびマイクロ波などのワイヤレス技術が、媒体の定義に含まれる。しかし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号または他の一時的媒体を含まないが、その代わりに、非一時的、有形記憶媒体を対象とすることを、理解されたい。本明細書で、ディスク(diskおよびdisc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイ(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常は、磁気的にデータを再生し、ディスク(disc)は、レーザーで光学的にデータを再生する。前述の組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
[0094]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の同等の統合されたもしくは離散的論理回路など、1つまたは複数のプロセッサによって実行することができる。したがって、本明細書で、「プロセッサ」という用語は、前述の構造体または本明細書に記載の技法の実装に適した任意の他の構造体のいずれかを示し得る。加えて、いくつかの態様で、本明細書に記載の機能は、符号化および復号のために構成された専用ハードウェアおよび/またはソフトウェアモジュール内で提供され得る、あるいは結合されたコーデックに組み込むことができる。また、本技法は、1つまたは複数の回路または論理要素で完全に実装することができる。
[0095]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装することができる。様々な構成要素、モジュール、またはユニットが、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために本開示で説明されるが、異なるハードウェアユニットによる実現を必ずしも必要としない。そうではなくて、前述のように、様々なユニットは、コーデックハードウェアユニットで結合され得る、または、適切なソフトウェアおよび/またはファームウェアとともに、前述のように1つまたは複数のプロセッサを含む、相互に動作するハードウェアユニットの一群によって提供され得る。
[0096]様々な例が、記載された。これらのおよび他の例は、次の特許請求の範囲の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定することと、
前記コードで前記最適化パスの少なくともいくつかの命令を実行することと、
前記最適化パスの実行のための実時間が実行のための前記割り当て時間を超えたという決定に応答して、前記最適化パスのその後の命令の実行を防ぐことと
を備える、方法。
[C2]
前記最適化パスが、複数の最適化パスのうちの第2の最適化パスを備え、そして、前記第2の最適化パスの実行のための実時間が、実行のための第2の実時間を備え、前記方法がさらに、
前記最適化パスの第1の最適化パスの実行のための第1の実時間を決定すること
を備え、ここにおいて、前記実行のための割り当て時間を決定することが、前記第1の最適化パスの実行のための前記第1の実時間に少なくとも部分的に基づいて前記第2の最適化パスの前記実行のための割り当て時間を決定することを備える、C1に記載の方法。
[C3]
前記実行のための割り当て時間を決定することがさらに、実行のための前記第1の実時間が前記第1の最適化パスの実行のための予算の時間を超えたかどうかを決定することを備える、C2に記載の方法。
[C4]
前記割り当て時間を決定することが、前記最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記最適化パスを実行するデバイスの電力状態、前記プログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を決定することを備える、C1に記載の方法。
[C5]
実行のための前記実時間に基づいて1つまたは複数のその後の最適化パスのための割り当て時間を調整することをさらに備える、C1に記載の方法。
[C6]
前記最適化パスが、現在の最適化パスを備え、
前記現在の最適化パスを含む複数の最適化パスを実行するための時間予算を決定することと、
前記複数の最適化パスに前記時間予算の部分を割り当てることと
をさらに備える、C1に記載の方法。
[C7]
前記最適化パスが、現在の最適化パスを備え、
前記現在の最適化パスの実行に先立って、
前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定することと、ここにおいて、前記最適化パス構成データは、コンパイル中に前記プログラムの最適化パスのシーケンスを定義し、ここにおいて、最適化パスの前記シーケンスは前記現在の最適化パスを含む、
最適化パスの前記シーケンスを実行するための時間予算を決定することと、
前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときに、および前記現在の最適化パスの実行を終了した後に、前記最適化パス構成データのセットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行することと
をさらに備える、C1に記載の方法。
[C8]
前記コードで前記最適化パスの少なくともいくつかの命令を実行することが、最適化されたコードを作り出し、前記方法がさらに、前記最適化されたコードから前記ソフトウェアプログラムのオブジェクトコードを生成することを備える、C1に記載の方法。
[C9]
ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定することと、前記コードで前記最適化パスの少なくともいくつかの命令を実行することと、前記最適化パスの実行のための実時間が実行のための前記割り当て時間を超えたという決定に応答して、前記最適化パスのその後の命令の実行をプリベンティングすることとを行うように構成された1つまたは複数のプロセッサを備える、デバイス。
[C10]
前記最適化パスが、複数の最適化パスのうちの第2の最適化パスを備え、そして、前記第2の最適化パスの実行のための実時間が、実行のための第2の実時間を備え、そして、前記1つまたは複数のプロセッサがさらに、前記最適化パスの第1の最適化パスの実行のための第1の実時間を決定することと、前記第1の最適化パスの実行のための前記第1の実時間に少なくとも部分的に基づいて前記第2の最適化パスの実行のための割り当て時間を決定することとを行うように構成された、C9に記載のデバイス。
[C11]
実行のための前記割り当て時間を決定するために、前記1つまたは複数のプロセッサがさらに、実行のための前記第1の実時間が前記第1の最適化パスの実行のための予算時間を超えたかどうかを決定するように構成された、C10に記載のデバイス。
[C12]
前記1つまたは複数のプロセッサが、前記最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記デバイスの電力状態、前記プログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を決定するように構成された、C9に記載のデバイス。
[C13]
前記1つまたは複数のプロセッサがさらに、実行のための前記実時間に基づいて1つまたは複数のその後の最適化パスのための割り当て時間を調整するように構成された、C9に記載のデバイス。
[C14]
前記最適化パスが、現在の最適化パスを備え、そして、前記1つまたは複数のプロセッサがさらに、前記現在の最適化パスを含む複数の最適化パスを実行するための時間予算を決定することと、前記複数の最適化パスに前記時間予算の部分を割り当てることとを行うように構成された、C9に記載のデバイス。
[C15]
前記最適化パスが、現在の最適化パスを備え、そして、前記1つまたは複数のプロセッサがさらに、前記現在の最適化パスの実行に先立って、前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定することと、ここにおいて、前記最適化パス構成データは、コンパイル中に前記プログラムの最適化パスのシーケンスを定義し、ここにおいて、最適化パスの前記シーケンスは前記現在の最適化パスを含む、最適化パスの前記シーケンスを実行するための時間予算を決定することとを行うように構成され、ここにおいて、前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときおよび前記現在の最適化パスの実行を終了した後に、前記1つまたは複数のプロセッサが、前記最適化パス構成データの前記セットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行するように構成された、C9に記載のデバイス。
[C16]
グラフィックス処理ユニット(GPU)をさらに備え、ここにおいて、前記ソフトウェアプログラムが前記GPUのためのシェーダプログラムを備え、そして、前記1つまたは複数のプロセッサが、前記GPUに前記シェーダプログラムのためのコンパイルされたコードを提供するように構成された、C9に記載のデバイス。
[C17]
ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定するための手段と、
前記コードで前記最適化パスの少なくともいくつかの命令を実行するための手段と、
前記最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、前記最適化パスのその後の命令の実行を防ぐための手段と
を備える、デバイス。
[C18]
前記最適化パスが、複数の最適化パスのうちの第2の最適化パスを備え、そして、前記第2の最適化パスの実行のための実時間が、実行のための第2の実時間を備え、
前記最適化パスのうちの第1の最適化パスの実行のための第1の実時間を決定するための手段
をさらに備え、ここにおいて、実行のための前記割り当て時間を決定するための前記手段が、前記第1の最適化パスの実行のための前記第1の実時間に少なくとも部分的に基づいて前記第2の最適化パスの実行のための割り当て時間を決定するための手段を備える、C17に記載のデバイス。
[C19]
前記実行のための割り当て時間を決定するための前記手段が、実行のための前記第1の実時間が前記第1の最適化パスの実行のための予算時間を超えたかどうかを決定するための手段をさらに備える、C18に記載のデバイス。
[C20]
前記割り当て時間を決定するための前記手段が、前記最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記最適化パスを実行するデバイスの電力状態、前記プログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を決定するための手段を備える、C17に記載のデバイス。
[C21]
実行のための前記実時間に基づいて1つまたは複数のその後の最適化パスのための割り当て時間を調整するための手段をさらに備える、C17に記載のデバイス。
[C22]
前記最適化パスが、現在の最適化パスを備え、
前記現在の最適化パスを含む複数の最適化パスを実行するための時間予算を決定するための手段と、
前記複数の最適化パスに前記時間予算の部分を割り当てるための手段と
さらに備える、C17に記載のデバイス。
[C23]
前記最適化パスが、現在の最適化パスを備え、
前記現在の最適化パスの実行に先立って、前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定するための手段と、ここにおいて、前記最適化パス構成データは、コンパイル中に前記プログラムの最適化パスのシーケンスを定義し、ここにおいて、最適化パスの前記シーケンスは前記現在の最適化パスを含む、
最適化パスの前記シーケンスを実行するための時間予算を決定するための手段と、
前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときにおよび前記現在の最適化パスの実行を終了した後に、最適化パス構成データの前記セットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行するための手段と
をさらに備える、C17に記載のデバイス。
[C24]
実行されるときに、プロセッサに
ソフトウェアプログラムのコードを最適化するための最適化パスの実行のための割り当て時間を決定することと、
前記コードで前記最適化パスの少なくともいくつかの命令を実行することと、
前記最適化パスの実行のための実時間が実行のための割り当て時間を超えたという決定に応答して、前記最適化パスのその後の命令の実行を防ぐことと
を行わせる命令がそこに記憶された、コンピュータ可読記憶媒体。
[C25]
前記最適化パスが、複数の最適化パスのうちの第2の最適化パスを備え、そして、前記第2の最適化パスの実行のための実時間が実行のための第2の実時間を備え、前記プロセッサに
前記最適化パスの第1の最適化パスの実行のための第1の実時間を決定させる
命令をさらに備え、
ここにおいて、前記プロセッサに実行のための前記割り当て時間を決定させる前記命令が、前記プロセッサに前記第1の最適化パスの実行のための前記第1の実時間に少なくとも部分的に基づいて前記第2の最適化パスの実行のための前記割り当て時間を決定させる命令を備える
C24に記載のコンピュータ可読記憶媒体。
[C26]
前記プロセッサに実行のための前記割り当て時間を決定させる前記命令がさらに、実行のための前記第1の実時間が前記第1の最適化パスの実行のための期待された時間を超えたかどうかを前記プロセッサに決定させる命令を備える、C25に記載のコンピュータ可読記憶媒体。
[C27]
前記割り当て時間を前記プロセッサに決定させる前記命令が、前記最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記最適化パスを実行するデバイスの電力状態、前記プログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を前記プロセッサに決定させる命令を備える、C24に記載のコンピュータ可読記憶媒体。
[C28]
実行のための前記実時間に基づいて1つまたは複数のその後の最適化パスのための割り当て時間を前記プロセッサに調整させる命令をさらに備える、C24に記載のコンピュータ可読記憶媒体。
[C29]
前記最適化パスが、現在の最適化パスを備え、
前記現在の最適化パスを含む複数の最適化パスを実行するための時間予算を決定することと、
前記時間予算の部分を前記複数の最適化パスに割り当てることと
を前記プロセッサに行わせる命令をさらに備える、C24に記載のコンピュータ可読記憶媒体。
[C30]
前記最適化パスが、現在の最適化パスを備え、
前記現在の最適化パスの実行に先立って、
前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定することと、ここにおいて、前記最適化パス構成データはコンパイル中に前記プログラムの最適化パスのシーケンスを定義し、ここにおいて、最適化パスの前記シーケンスは前記現在の最適化パスを含む、
最適化パスの前記シーケンスを実行するための時間予算を決定することと、
前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときにおよび前記現在の最適化パスの実行を終了した後に、最適化パス構成データの前記セットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行することと
を前記プロセッサに行わせる命令をさらに備える、C24に記載のコンピュータ可読記憶媒体。

Claims (21)

  1. プロセッサが、ソフトウェアプログラムのコードのコンパイルの最適化フェーズ中に前記コードを最適化するための複数の最適化パスのうちの第1の最適化パスの実行のための予算時間を決定することと、
    前記プロセッサが、前記第1の最適化パスの実行のための第1の実時間を決定することと、
    前記プロセッサが、実行のための前記第1の実時間が前記第1の最適化パスの実行のための前記予算時間を超えたかどうかに少なくとも部分的に基づいて、前記複数の最適化パスのうちの第2の最適化パスの実行のための割り当て時間を決定することと、ここにおいて、前記第2の最適化パスは、第1の数の命令を定義する、と、
    前記プロセッサが、前記ソフトウェアプログラムの前記コードから最適化されたコードを作り出すために前記コードで前記第2の最適化パスの第2の数の前記命令を実行することと、ここにおいて、前記第2の数は前記第1の数よりも少ない、と、
    前記第2の最適化パスの実行のための実時間が実行のための前記割り当て時間を超えたという決定に応答して、前記プロセッサが、前記第2の最適化パスのその後の命令の実行を防ぐことと、
    前記その後の命令の実行を防いだ後に、前記最適化されたコードから前記ソフトウェアプログラムのオブジェクトコードを生成することと
    を備える、方法。
  2. 前記割り当て時間を決定することが、前記第2の最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記第2の最適化パスを実行するデバイスの電力状態、前記ソフトウェアプログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を決定することを備える、請求項1に記載の方法。
  3. 前記第1の最適化パスの実行のための前記第1の実時間に基づいて前記最適化フェーズの1つまたは複数のその後の最適化パスのための割り当て時間を調整することをさらに備える、請求項1に記載の方法。
  4. 前記最適化フェーズの前記複数の最適化パスを実行するための時間予算を決定することと、
    前記複数の最適化パスに前記時間予算の部分を割り当てることと
    をさらに備える、請求項1に記載の方法。
  5. 前記第2の最適化パスが、現在の最適化パスであり、
    前記現在の最適化パスの実行に先立って、
    前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定することと、ここにおいて、前記最適化パス構成データは、コンパイルの前記最適化フェーズ中に前記ソフトウェアプログラムの前記複数の最適化パスのうちの最適化パスのシーケンスを定義し、ここにおいて、最適化パスの前記シーケンスは前記現在の最適化パスを含む、と、
    最適化パスの前記シーケンスを実行するための時間予算を決定することと、
    前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときに、および前記現在の最適化パスの実行を終了した後に、前記最適化パス構成データのセットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行することと
    をさらに備える、請求項1に記載の方法。
  6. ソフトウェアプログラムのコードのコンパイルの最適化フェーズ中に前記コードを最適化するための複数の最適化パスのうちの第1の最適化パスの実行のための予算の時間を決定することと、
    前記最適化パスのうちの第1の最適化パスの実行のための第1の実時間を決定することと、
    実行のための前記第1の実時間が前記第1の最適化パスの実行のための前記予算の時間を超えたかどうかに少なくとも部分的に基づいて、前記複数の最適化パスのうちの第2の最適化パスの実行のための割り当て時間を決定することと、ここにおいて、前記第2の最適化パスは、第1の数の命令を定義する、と、
    前記ソフトウェアプログラムの前記コードから最適化されたコードを作り出すために前記コードで前記第2の最適化パスの第2の数の前記命令を実行することと、ここにおいて、前記第2の数は前記第1の数よりも少ない、と、
    前記第2の最適化パスの実行のための実時間が実行のための前記割り当て時間を超えたという決定に応答して、前記第2の最適化パスのその後の命令の実行を防ぐことと、
    前記その後の命令の実行を防いだ後に、前記最適化されたコードから前記ソフトウェアプログラムのオブジェクトコードを生成することと
    を行うように構成された1つまたは複数のプロセッサを備える、デバイス。
  7. 前記1つまたは複数のプロセッサが、前記第2の最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記デバイスの電力状態、前記ソフトウェアプログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を決定するように構成された、請求項6に記載のデバイス。
  8. 前記1つまたは複数のプロセッサがさらに、前記第1の最適化パスの実行のための前記第1の実時間に基づいて前記最適化フェーズの1つまたは複数のその後の最適化パスのための割り当て時間を調整するように構成された、請求項6に記載のデバイス。
  9. 前記1つまたは複数のプロセッサがさらに、前記最適化フェーズの前記複数の最適化パスを実行するための時間予算を決定することと、前記複数の最適化パスに前記時間予算の部分を割り当てることとを行うように構成された、請求項6に記載のデバイス。
  10. 前記第2の最適化パスが、現在の最適化パスであり、そして、前記1つまたは複数のプロセッサがさらに、前記現在の最適化パスの実行に先立って、前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定することと、ここにおいて、前記最適化パス構成データは、コンパイルの前記最適化フェーズ中に前記ソフトウェアプログラムの前記複数の最適化パスのうちの最適化パスのシーケンスを定義し、最適化パスの前記シーケンスは前記現在の最適化パスを含、最適化パスの前記シーケンスを実行するための時間予算を決定することとを行うように構成され、前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときおよび前記現在の最適化パスの実行を終了した後に、前記1つまたは複数のプロセッサが、前記最適化パス構成データの前記セットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行するように構成された、請求項6に記載のデバイス。
  11. グラフィックス処理ユニット(GPU)をさらに備え、ここにおいて、前記ソフトウェアプログラムが前記GPUのためのシェーダプログラムを備え、そして、前記1つまたは複数のプロセッサが、前記GPUに前記シェーダプログラムのためのコンパイルされたコードを提供するように構成された、請求項6に記載のデバイス。
  12. ソフトウェアプログラムのコードのコンパイルの最適化フェーズ中に前記コードを最適化するための複数の最適化パスのうちの第1の最適化パスの実行のための予算の時間を決定するための手段と、
    前記第1の最適化パスの実行のための第1の実時間を決定するための手段と、
    実行のための前記第1の実時間が前記第1の最適化パスの実行のための前記予算の時間を超えたかどうかに少なくとも部分的に基づいて、前記複数の最適化パスのうちの第2の最適化パスの実行のための割り当て時間を決定するための手段と、ここにおいて、前記第2の最適化パスは、第1の数の命令を定義する、と、
    前記ソフトウェアプログラムの前記コードから最適化されたコードを作り出すために前記コードで前記第2の最適化パスの第2の数の前記命令を実行するための手段と、ここにおいて、前記第2の数は前記第1の数よりも少ない、と、
    前記第2の最適化パスの実行のための実時間が実行のための前記割り当て時間を超えたという決定に応答して、前記第2の最適化パスのその後の命令の実行を防ぐための手段と、
    前記その後の命令の実行を防いだ後に、前記最適化されたコードから前記ソフトウェアプログラムのオブジェクトコードを生成するための手段と
    を備える、デバイス。
  13. 前記割り当て時間を決定するための前記手段が、前記第2の最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記第2の最適化パスを実行するデバイスの電力状態、前記ソフトウェアプログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を決定するための手段を備える、請求項12に記載のデバイス。
  14. 前記第1の最適化パスの実行のための前記第1の実時間に基づいて前記最適化フェーズの1つまたは複数のその後の最適化パスのための割り当て時間を調整するための手段をさらに備える、請求項12に記載のデバイス。
  15. 前記最適化フェーズの前記複数の最適化パスを実行するための時間予算を決定するための手段と、
    前記複数の最適化パスに前記時間予算の部分を割り当てるための手段と
    さらに備える、請求項12に記載のデバイス。
  16. 前記第2の最適化パスが、現在の最適化パスであり、
    前記現在の最適化パスの実行に先立って、前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定するための手段と、ここにおいて、前記最適化パス構成データは、コンパイルの前記最適化フェーズ中に前記ソフトウェアプログラムの前記複数の最適化パスのうちの最適化パスのシーケンスを定義し、最適化パスの前記シーケンスは前記現在の最適化パスを含む、と、
    最適化パスの前記シーケンスを実行するための時間予算を決定するための手段と、
    前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときにおよび前記現在の最適化パスの実行を終了した後に、最適化パス構成データの前記セットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行するための手段と
    をさらに備える、請求項12に記載のデバイス。
  17. 実行されるときに、プロセッサに
    ソフトウェアプログラムのコードのコンパイルの最適化フェーズ中に前記コードを最適化するための複数の最適化パスのうちの第1の最適化パスの実行のための予算の時間を決定することと、
    前記第1の最適化パスの実行のための第1の実時間を決定することと、
    実行のための前記第1の実時間が前記第1の最適化パスの実行のための前記予算の時間を超えたかどうかに少なくとも部分的に基づいて、前記複数の最適化パスのうちの第2の最適化パスの実行のための割り当て時間を決定することと、ここにおいて、前記第2の最適化パスは、第1の数の命令を定義する、と、
    前記ソフトウェアプログラムの前記コードから最適化されたコードを作り出すために前記コードで前記第2の最適化パスの第2の数の前記命令を実行することと、ここにおいて、前記第2の数は前記第1の数よりも少ない、と、
    前記第2の最適化パスの実行のための実時間が実行のための前記割り当て時間を超えたという決定に応答して、前記第2の最適化パスのその後の命令の実行を防ぐことと、
    前記その後の命令の実行を防いだ後に、前記最適化されたコードから前記ソフトウェアプログラムのオブジェクトコードを生成することと
    を行わせる命令が記憶された、コンピュータ可読記憶媒体。
  18. 前記割り当て時間を前記プロセッサに決定させる前記命令が、前記第2の最適化パスの優先度、全体の最適化時間予算内の残りの時間の量、前記第2の最適化パスを実行するデバイスの電力状態、前記ソフトウェアプログラムの最適化に割り当てられる重要性値、およびユーザ選択のうちの少なくとも1つに基づいて前記割り当て時間を前記プロセッサに決定させる命令を備える、請求項17に記載のコンピュータ可読記憶媒体。
  19. 前記第1の最適化パスの実行のための前記第1の実時間に基づいて前記最適化フェーズの1つまたは複数のその後の最適化パスのための割り当て時間を前記プロセッサに調整させる命令をさらに備える、請求項17に記載のコンピュータ可読記憶媒体。
  20. 前記最適化フェーズの前記複数の最適化パスを実行するための時間予算を決定することと、
    前記複数の最適化パスに前記時間予算の部分を割り当てることと
    を前記プロセッサに行わせる命令をさらに備える、請求項17に記載のコンピュータ可読記憶媒体。
  21. 前記第2の最適化パスが、現在の最適化パスであり、
    前記現在の最適化パスの実行に先立って、
    前記ソフトウェアプログラムの前記コードのための最適化パス構成データのセットを決定することと、ここにおいて、前記最適化パス構成データは前記コンパイルの前記最適化フェーズ中に前記ソフトウェアプログラムの前記複数の最適化パスのうちの最適化パスのシーケンスを定義し、最適化パスの前記シーケンスは前記現在の最適化パスを含む、と、
    最適化パスの前記シーケンスを実行するための時間予算を決定することと、
    前記現在の最適化パスが前記シーケンス内の最後の最適化パスではないときにおよび前記現在の最適化パスの実行を終了した後に、最適化パス構成データの前記セットに基づいて最適化パスの前記シーケンス内の次の最適化パスを実行することと
    を前記プロセッサに行わせる命令をさらに備える、請求項17に記載のコンピュータ可読記憶媒体。
JP2015561348A 2013-03-06 2014-02-04 過度のコンパイル時間の低減 Expired - Fee Related JP5985766B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/787,485 2013-03-06
US13/787,485 US9027007B2 (en) 2013-03-06 2013-03-06 Reducing excessive compilation times
PCT/US2014/014597 WO2014137521A1 (en) 2013-03-06 2014-02-04 Reducing excessive compilation times

Publications (2)

Publication Number Publication Date
JP2016510919A JP2016510919A (ja) 2016-04-11
JP5985766B2 true JP5985766B2 (ja) 2016-09-06

Family

ID=50156916

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015561348A Expired - Fee Related JP5985766B2 (ja) 2013-03-06 2014-02-04 過度のコンパイル時間の低減

Country Status (5)

Country Link
US (1) US9027007B2 (ja)
EP (1) EP2965198B1 (ja)
JP (1) JP5985766B2 (ja)
CN (1) CN105009082B (ja)
WO (1) WO2014137521A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727339B2 (en) * 2013-07-18 2017-08-08 Nvidia Corporation Method and system for distributed shader optimization
GB201405755D0 (en) * 2014-03-31 2014-05-14 Irdeto Bv Optimizing and protecting software
US9223551B1 (en) * 2014-07-22 2015-12-29 Here Global B.V. Rendergraph compilation method and use thereof for low-latency execution
US9747084B2 (en) * 2014-09-09 2017-08-29 Google Inc. Offline shader compilation
US10419483B1 (en) * 2014-09-17 2019-09-17 Amazon Technologies, Inc. Time-bounded execution for privileged code
US9690928B2 (en) * 2014-10-25 2017-06-27 Mcafee, Inc. Computing platform security methods and apparatus
US10163179B2 (en) * 2015-03-27 2018-12-25 Intel Corporation Method and apparatus for intelligent cloud-based graphics updates
US10133559B2 (en) * 2016-06-03 2018-11-20 International Business Machines Corporation Generating executable files through compiler optimization
AU2016228166A1 (en) * 2016-09-13 2018-03-29 Canon Kabushiki Kaisha Visualisation for guided algorithm design to create hardware friendly algorithms
CN106598579B (zh) * 2016-12-06 2020-12-25 北京果仁宝科技有限公司 区块链上集成动态类型编程语言方法和装置
EP3593305A4 (en) 2017-03-08 2020-10-21 IP Oversight Corporation SYSTEM AND PROCEDURE FOR GENERATING TOKENS SECURED BY THE VALUE OF GOODS FROM RESERVES
CN106933665B (zh) * 2017-03-09 2020-06-26 中国科学技术大学 预测mpi程序运行时间的方法
CN111324353B (zh) * 2018-12-14 2022-09-13 中移(杭州)信息技术有限公司 一种持续集成任务的优化方法及装置
JP7339537B2 (ja) 2020-01-10 2023-09-06 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
CN111488155B (zh) * 2020-06-15 2020-09-22 完美世界(北京)软件科技发展有限公司 着色语言翻译方法
US11487565B2 (en) * 2020-10-29 2022-11-01 Hewlett Packard Enterprise Development Lp Instances of just-in-time (JIT) compilation of code using different compilation settings
US11934255B2 (en) 2022-01-04 2024-03-19 Bank Of America Corporation System and method for improving memory resource allocations in database blocks for executing tasks

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2834171B2 (ja) * 1989-02-06 1998-12-09 株式会社日立製作所 コンパイル方法
JP3190773B2 (ja) * 1993-09-30 2001-07-23 日本電気株式会社 言語処理プログラムのコンパイル処理方法
CA2102089C (en) * 1993-10-29 1999-05-25 David M. Gillies Recompilation of computer programs for enhanced optimization
US5970249A (en) 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
JP2000047879A (ja) * 1998-07-06 2000-02-18 Internatl Business Mach Corp <Ibm> コンパイル方法及び装置、実行方法、及びプログラム実行装置
US6438741B1 (en) * 1998-09-28 2002-08-20 Compaq Computer Corporation System and method for eliminating compile time explosion in a top down rule based system using selective sampling
JP2001318742A (ja) * 2000-05-08 2001-11-16 Mitsubishi Electric Corp コンピュータシステムおよびコンピュータ読み取り可能な記録媒体
US20030237080A1 (en) 2002-06-19 2003-12-25 Carol Thompson System and method for improved register allocation in an optimizing compiler
JP3847672B2 (ja) 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
US7340448B2 (en) * 2003-11-13 2008-03-04 International Business Machines Corporation Method, apparatus, and computer program product for implementing enhanced query governor functions
US7428731B2 (en) 2004-03-31 2008-09-23 Intel Corporation Continuous trip count profiling for loop optimizations in two-phase dynamic binary translators
US7290240B1 (en) 2004-07-30 2007-10-30 Altera Corporation Leveraging combinations of synthesis, placement and incremental optimizations
JP2006127302A (ja) 2004-10-29 2006-05-18 Internatl Business Mach Corp <Ibm> 情報処理装置、コンパイラ、及びコンパイラプログラム
JP2006139413A (ja) * 2004-11-10 2006-06-01 Hitachi Ltd プログラム、プログラムコードの合理化方法、プログラムコードの生成方法、プログラムコード、及び情報処理装置
US20060236310A1 (en) 2005-04-19 2006-10-19 Domeika Max J Methods and apparatus to iteratively compile software to meet user-defined criteria
US7844960B2 (en) * 2005-09-14 2010-11-30 International Business Machines Corporation Optimizing software program execution during class loading phase
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US8539467B2 (en) * 2006-07-27 2013-09-17 International Business Machines Corporation Method and data processing system for solving resource conflicts in assembler programs
US9117071B2 (en) * 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8635606B2 (en) * 2009-10-13 2014-01-21 Empire Technology Development Llc Dynamic optimization using a resource cost registry
US8321851B2 (en) * 2009-12-22 2012-11-27 International Business Machines Corporation Determining compiler efficiency
US9996325B2 (en) * 2013-03-06 2018-06-12 Qualcomm Incorporated Dynamic reconfigurable compiler
US9274931B2 (en) * 2013-05-06 2016-03-01 International Business Machines Corporation Inserting implicit sequence points into computer program code to support debug operations

Also Published As

Publication number Publication date
EP2965198B1 (en) 2019-04-17
CN105009082A (zh) 2015-10-28
WO2014137521A1 (en) 2014-09-12
US20140258996A1 (en) 2014-09-11
EP2965198A1 (en) 2016-01-13
JP2016510919A (ja) 2016-04-11
CN105009082B (zh) 2017-03-29
US9027007B2 (en) 2015-05-05

Similar Documents

Publication Publication Date Title
JP5985766B2 (ja) 過度のコンパイル時間の低減
US9996325B2 (en) Dynamic reconfigurable compiler
US8615747B2 (en) Method and apparatus for dynamic code optimization
US7543282B2 (en) Method and apparatus for selectively executing different executable code versions which are optimized in different ways
US8543993B2 (en) Compiler, compile method, and processor core control method and processor
US8893104B2 (en) Method and apparatus for register spill minimization
US10445118B2 (en) Methods and apparatus to facilitate field-programmable gate array support during runtime execution of computer readable instructions
US8479185B2 (en) Method and system for utilizing parallelism across loops
US20190121625A1 (en) Dynamic compiler parallelism techniques
EP3137985B1 (en) Method and system to create a rendering pipeline
KR20160143489A (ko) 인터리빙을 수행하는 방법 및 장치.
US20160070549A1 (en) Offline shader compilation
JP2010113724A (ja) グラフィックオペレーションのための高レベルプログラムインターフェース
US20150046684A1 (en) Technique for grouping instructions into independent strands
Zhu et al. DISC: A dynamic shape compiler for machine learning workloads
Khaldi et al. Parallelizing with BDSC, a resource-constrained scheduling algorithm for shared and distributed memory systems
CN113204412A (zh) 用于任务调度的方法、电子设备和计算机存储介质
JP2011138494A (ja) 仮想タスクを使用したマルチコアプロセッサの性能解析のための関係モデル化
CN115699072A (zh) 用于工作负载处理的任务图调度
Tagliavini et al. Enabling OpenVX support in mW-scale parallel accelerators
CN110990151A (zh) 一种基于异构计算平台的业务处理方法
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN111767046A (zh) 一种着色器代码复用方法及终端
KR101393152B1 (ko) 자바 가상 머신이 탑재된 장치 및 상기 자바 가상 머신이 탑재된 장치에서 바이트코드를 네이티브 코드로 선택적으로 컴파일하는 방법
JP2010140344A (ja) コンパイルシステム及びコンパイル方法

Legal Events

Date Code Title Description
A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20160119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160308

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160607

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160705

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160803

R150 Certificate of patent or registration of utility model

Ref document number: 5985766

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees