【文献】
田端 邦男 外1名,"命令レベル並列計算機上で並列実行する領域の選択を高速に行う方法",情報処理学会論文誌,社団法人情報処理学会,2002年 1月15日,Vol.43,No.SIG1(PRO 13),pp.97−106
【文献】
朴 小林 外2名,"述語付き命令を持つ計算機における条件変換の静的最適化方式",情報処理学会研究報告,社団法人情報処理学会,2002年 3月 8日,Vol.2002,No.22,pp.103−108
(58)【調査した分野】(Int.Cl.,DB名)
前記HL CF命令を変換することが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除することを備える、請求項1に記載の方法。
前記1つまたは複数の関連するテクスチャロード命令が対称であるか、ほぼ対称であるかを判断することが、前記1つまたは複数の分岐の各分岐に関連する等しい数のテクスチャロード命令を識別することを備える、請求項1に記載の方法。
HL CF命令の前記識別されたセットを変換することが、LL命令のセットを生成することを備え、ここにおいてLL命令の前記セットの実行が、選択関数の結果に基づいてアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、請求項1に記載の方法。
HL CF命令の前記セットを識別することが、条件を有するIF−ELSE文を識別することを備え、ここにおいて前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、請求項1に記載の方法。
HL CF命令の前記セットを変換することが、LL命令のセットを生成することを備え、ここにおいてLL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、請求項6に記載の方法。
前記HL命令を変換することが、前記LL命令を生成するために前記HL命令をランタイムコンパイルすることを備え、グラフィックス処理ユニット上で前記出力されたLL命令を実行することをさらに備える、請求項1に記載の方法。
前記出力されたLL命令を実行することが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールすることを備える、請求項9に記載の方法。
ローカルメモリをさらに備え、前記1つまたは複数のテクスチャロード命令の実行が、前記テクスチャを前記装置のローカルメモリに転送させる、請求項11に記載の装置。
前記HL CF命令を変換するために、前記1つまたは複数のプロセッサが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除するように構成された、請求項11に記載の装置。
前記1つまたは複数の関連するテクスチャロード命令が対称であるか、ほぼ対称であるかを判断するために、前記1つまたは複数の処理ユニットが、前記1つまたは複数の分岐の各分岐に関連する等しい数のテクスチャロード命令を識別するように構成された、請求項11に記載の装置。
HL CF命令の前記識別されたセットを変換するために、前記1つまたは複数のプロセッサが、LL命令のセットを生成するように構成され、LL命令の前記セットの実行が、選択関数の結果に基づいてアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、請求項11に記載の装置。
HL CF命令の前記セットを識別するために、前記1つまたは複数のプロセッサが、条件を有するIF−ELSE文を識別するように構成され、前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、請求項11に記載の装置。
HL CF命令の前記セットを変換するために、前記1つまたは複数のプロセッサが、LL命令のセットを生成するように構成され、LL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、請求項16に記載の装置。
前記変換されたLL命令を出力するために、前記1つまたは複数のプロセッサが、前記変換されたLL命令をメモリに記憶するように構成された、請求項11に記載の装置。
前記HL命令を変換するために、前記1つまたは複数のプロセッサが、前記LL命令を生成するために前記HL命令をランタイムコンパイルするように構成され、前記出力されたLL命令を実行することをさらに備える、請求項11に記載の装置。
前記出力されたLL命令を実行するために、前記1つまたは複数のプロセッサが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールするように構成された、請求項19に記載の装置。
前記1つまたは複数のテクスチャロード命令の実行が、前記テクスチャをグラフィックス処理ユニットのローカルメモリに転送させる、請求項21に記載のコンピュータプログラム。
前記HL CF命令を変換することが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除することを備える、請求項21に記載のコンピュータプログラム。
前記1つまたは複数の関連するテクスチャロード命令が対称であるか、ほぼ対称であるかを判断することために、前記命令が、前記1つまたは複数のプロセッサに、前記1つまたは複数の分岐の各分岐に関連する等しい数のテクスチャロード命令を識別させる、請求項21に記載のコンピュータプログラム。
HL CF命令の前記識別されたセットを変換することが、LL命令のセットを生成することを備え、ここにおいてLL命令の前記セットの実行が、選択関数の結果に基づいてアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、請求項21に記載のコンピュータプログラム。
HL CF命令の前記セットを識別することが、条件を有するIF−ELSE文を識別することを備え、ここにおいて前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、請求項21に記載のコンピュータプログラム。
HL CF命令の前記セットを変換することが、LL命令のセットを生成することを備え、ここにおいてLL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、請求項26に記載のコンピュータプログラム。
前記HL命令を変換することが、前記LL命令を生成するために前記HL命令をランタイムコンパイルすることを備え、実行されたとき、グラフィックス処理ユニット上で前記出力されたLL命令を実行することを前記1つまたは複数のプロセッサに行わせる命令をさらに備える、請求項21に記載のコンピュータプログラム。
前記出力されたLL命令を実行することが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールすることを備える、請求項29に記載のコンピュータプログラム。
前記HL CF命令を変換するための前記手段が、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除するための手段を備える、請求項31に記載の装置。
前記1つまたは複数の関連するテクスチャロード命令が対称であるか、ほぼ対称であるかを判断するための前記手段が、前記1つまたは複数の分岐の各分岐に関連する等しい数のテクスチャロード命令を識別するための手段を備える、請求項31に記載の装置。
HL CF命令の前記識別されたセットを変換するための前記手段が、LL命令のセットを生成するための手段を備え、LL命令の前記セットの実行が、選択関数の結果に基づいてアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、請求項31に記載の装置。
HL CF命令の前記セットを識別するための前記手段が、条件を有するIF−ELSE文を識別するための手段を備え、前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、請求項31に記載の装置。
HL CF命令の前記セットを変換するための前記手段が、LL命令のセットを生成するための手段を備え、LL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、請求項36に記載の装置。
前記HL命令を変換するための前記手段が、前記LL命令を生成するために前記HL命令をランタイムコンパイルするための手段を備え、グラフィックス処理ユニット上で前記出力されたLL命令を実行することをさらに備える、請求項31に記載の装置。
前記出力されたLL命令を実行するための前記手段が、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールするための手段を備える、請求項39に記載の装置。
【発明を実施するための形態】
【0012】
詳細な説明
[0017]概して、本開示では、1つまたは複数のテクスチャロード命令を含む制御フロー文の効率的なコンパイルのための技法について説明する。「制御フロー」という句は、概して、何らかの条件文に基づいて、コンピュータプログラムを形成する高レベル(HL)ソフトウェア命令の実行のフローを制御することを意図する、HLプログラミング言語に従って定義された命令のセットを指す。すなわち、制御フロー(CF)文の実行により、結果として、HLソフトウェア命令の2つ以上の分岐のうちのいずれが実行されるべきかに関する選定が行われ得る。いくつかの事例で、CF文は、「フロー制御」文または「条件付きフロー制御」文と呼ばれることもある。
【0013】
[0018]例えば、HL CF文の1つのセットは、概して、「if」命令と後続する条件文との使用を伴う。この条件文は、通常、ブール演算子を使用してブール文として定義される。1つの例示的な条件文は、変数の現在値が所与の値よりも大きいかどうかを判断するためのブール比較を伴い得、これは「x>10」として表され得、但し、変数は、この文ではxとして表され、大なり(greater than)演算子は、記号「>」として定義される。この文は、それが、(通常、1として定義される)「真」または(通常、0として定義される)「偽」のいずれかのブール値を戻すので、ブールである。この「if」命令の後に、1つまたは複数の追加の命令が続く。条件文が真である場合、追加の命令は実行される。条件文が偽である場合、追加の命令はスキップされるかまたは実行されず、実行のフローは追加の命令の後に再開する。
【0014】
[0019]他のタイプのHL CF命令セットは、「if」命令と後続する「else」命令とを使用して定義されるもの(一般に「if−else」CF命令と呼ばれる)、演算子「:?」を使用して定義されるもの、および複数の「if」文を使用して定義されるもの(一般に「if−if」CFC命令と呼ばれる)を含む。
【0015】
[0020]テクスチャロード命令は、概して、実行されたとき、ローカルメモリ(例えば、グラフィックス処理ユニット(GPU)など、コンピューティングデバイスのローカルメモリ)にテクスチャをロードさせる命令を指す。「テクスチャ」は、概して、すべてが同じフォーマットを有する1つまたは複数の画像を含んでいるオブジェクト(例えば、特定のサイズおよび特定のフォーマットをもつ、ある次元数のピクセルのアレイ)を指す。すなわち、例えば、テクスチャは、オブジェクトにテクスチャのアピアランスを与えるピクセル色のビットマップであり得る。GPUにおいて、テクスチャロード命令を実行することは、外部メモリからGPUのローカルメモリにテクスチャ(例えば、画像データ)を転送させ得る。外部メモリは、GPUに対してオフチップであり得、システムバスを介してアクセスされ得る。いくつかの事例では、以下でより詳細に説明するように、比較的長いレイテンシがそのようなデータ転送に関連し得る。例えば、外部メモリからローカルメモリにデータを転送することは、比較的多数のクロックサイクルを消費し得る。
【0016】
[0021]本開示の技法は、テクスチャロード命令を含む制御フロー(CF)文を、述語構造を有する1つまたは複数の命令に変換することを含む。例えば、本開示の技法は、テクスチャロード命令を含む「IF」CF文を、述語構造を有する1つまたは複数の命令に変換することを含み得る。述語実行サポートは、命令ストリームから分岐をなくす方法を与える。例えば、述語実行は、述語と呼ばれるブールソースオペランドの値に基づく、命令の条件付き実行を指すことがある。述語実行サポートは、コンパイラが、条件付き分岐をプレディケートされた決定的な命令(predicated defining instructions)に変換し、各分岐の代替経路に沿った命令をプレディケートされた命令に変換することを可能にする。すなわち、プレディケートされた命令は、それらの述語値にかかわらずフェッチされ得る。述語が真である命令は正常に実行される。逆に、述語が偽である命令は無効にされ、従って、GPUの状態を変更するのを妨げられる。従って、述語構造を有する命令は、(例えば、分岐することなしに)直列に実行され得る。
【0017】
[0022]プログラムのCF命令を、述語構造を有する命令に変換することは、処理デバイスによって最終的に実行される命令の数を増加させ得る。例えば、プレディケーションを用いて、処理デバイスは、分岐の両側を効果的に評価し、結果のうちの1つを廃棄する。いくつかの事例で、分岐の両側を評価することは、特に、経路が大きいおよび/または複雑な文を含む場合、比較的コストがかかり得る。
【0018】
[0023]しかしながら、いくつかの処理アーキテクチャは、プレディケートされた命令をCF命令よりも効率的に実行し得る。例えば、(「ストリームプロセッサ」と呼ばれることがある)GPUの並列性質により、いくつかのGPUアーキテクチャは、プレディケートされた命令をCF命令よりも効率的に実行し得る。例えば、CF命令の分岐は、各クロックサイクルに実行されるために利用可能な独立した命令の数を制限する制御依存性を課し得る。さらに、いくつかの処理ユニットは、依存性に関連するレイテンシ(latency)を低減することを意図した推論的(speculative)実行を実行し得るが、分岐の誤予測も性能不利益をもたらし得る。
【0019】
[0024]処理ユニット(例えば、GPUなど)が述語サポートを含む事例で、コンパイラは、完全述語変換または部分述語変換を実行し得る。完全述語サポートは、全てのCF命令が述語構造に変換されることを可能にする。対照的に、部分述語サポートは、述語構造に変換され得る命令のタイプを制限する。例えば、いくつかのGPUは部分述語サポートのみを可能にし、そのような事例で、対応するGPUコンパイラは、条件付き移動命令(例えば、MOVC)および/または選択命令(例えば、SELECT)に変換される命令のセットを制限し得る。
【0020】
[0025]いくつかのGPUコンパイラなど、いくつかのコンパイラは、いくつかの命令を変換することのコストが述語構造の利益を上回り得るので、部分述語変換を実行しないことを選定し得る。例えば、上述したように、テクスチャロード命令は、外部メモリからGPUのローカルメモリにテクスチャ(例えば、画像データ)を転送させ得る。いくつかの事例では、比較的長いレイテンシがそのようなデータ転送に関連し得る。テクスチャロード命令に関連する比較的長いレイテンシにより、コンパイラは、テクスチャロード命令を含むCF命令のセットを述語構造に変換しないことがある。例えば、各分岐のテクスチャロード命令を実行することは、一般に、変換の利益を上回り得る。
【0021】
[0026]本開示の技法は、1つまたは複数の関連するテクスチャロード命令を有するCF命令のセットを、CF命令のセットの各分岐に関連するあらゆるテクスチャロード命令を実行することを回避するような方法で述語構造に変換することを含む。このようにして、本開示の技法を実装するGPUコンパイラは、テクスチャロード命令に固有のレイテンシを最小限に抑えながら、GPUアーキテクチャに適した述語構造を実装し得る。
【0022】
[0027]
図1は、述語構造を有する命令(プレディケートされた命令)への、1つまたは複数の関連するテクスチャロード命令を有する制御フロー(CF)命令の変換を意図する本開示の技法を実装し得る開発システム10を示すブロック図である。
図1の例で、開発システム10はコンピューティングデバイス12を含む。コンピューティングデバイス12は、デスクトップコンピュータ、(いわゆる「ネットブック」コンピュータを含む)ラップトップコンピュータ、ワークステーション、スレートまたはタブレットコンピュータ、携帯情報端末(PDA)、(いわゆる「スマートフォン」を含む)モバイルまたはセルラーフォン、デジタルメディアプレーヤ、ゲームデバイス、あるいは、ソフトウェア開発者13など、ユーザが、高レベル(HL)コードを定義することと、次いで、低レベル(LL)コードを生成するためにHLコードをコンパイルすることとを行うために対話し得る他のデバイスを備え得る。本開示では、「コード」という用語は、概して、コンピュータプログラム、ソフトウェア、または他の実行ファイルを定義する1つまたは複数のソフトウェア命令のセットを指す。
【0023】
[0028]コンピューティングデバイス12は制御ユニット14を含む。制御ユニット14は、プログラマブルマイクロプロセッサなど、1つまたは複数のプロセッサ(
図1の例では図示せず)を備え得、そのプロセッサは、本明細書で説明する技法をプログラマブルプロセッサに実行させるための命令を記憶するストレージデバイス(例えば、磁気ハードディスクドライブ、ソリッドステートドライブ、またはオプティカルドライブ)、あるいは(フラッシュメモリ、ランダムアクセスメモリまたはRAMなどの)メモリあるいは他のタイプの揮発性または不揮発性メモリなど、コンピュータ可読記憶媒体(同じく、
図1の例では図示せず)に記憶された、ソフトウェアまたはコンピュータプログラムを定義するために使用されるものなど、ソフトウェア命令を実行する。代替として、制御ユニット14は、本明細書で説明する技法を実行するための、1つまたは複数の集積回路、1つまたは複数の特定用途向け集積回路(ASIC)、1つまたは複数の特定用途向け専用プロセッサ(ASSP)、1つまたは複数のフィールドプログラマブルゲートアレイ(FPGA)など、専用ハードウェア、またはプログラマブルプロセッサ、専用ハードウェアなどの上記の例のうちの1つまたは複数の任意の組合せを備え得る。
【0024】
[0029]制御ユニット14は、ユーザインターフェース(UI)モジュール16と、ソフトウェア開発モジュール18と、コンパイラ20とを実行するか、またはさもなければ実装する。すなわち、いくつかの例で、UIモジュール16、ソフトウェア開発モジュール18、および/またはコンパイラ20は、制御ユニット14によって実行されるソフトウェアから構成され得る。UIモジュール16は、開発者13などのユーザがソフトウェア開発モジュール18およびコンパイラ20と対話するためにインターフェースし得るユーザインターフェースを提示するモジュールを表す。UIモジュール16は、開発者13がモジュール18および20とインターフェースするために対話し得る、コマンドラインインターフェース(CLI)および/またはグラフィカルユーザインターフェース(GUI)など、任意のタイプのユーザインターフェースを提示し得る。
【0025】
[0030]ソフトウェア開発モジュール18は、HLプログラミング言語に関してソフトウェアの開発を可能にするモジュールを表す。一般に、ソフトウェア開発モジュール18は、開発者13にUIモジュール16を介して1つまたは複数のユーザインターフェースを提示し、それによって、開発者13は、高レベル(HL)コード22の形態のソフトウェアを定義するために、これらのユーザインターフェースと対話する。以下でより詳細に説明するように、HLコード22は制御フロー(CF)命令を含み得る。この場合も、本開示で使用する「コード」という用語は、コンピュータプログラム、ソフトウェアまたは他の実行ファイルを定義する1つまたは複数のソフトウェア命令のセットを指す。HLコード22は、一般に、HLプログラミング言語と一般に呼ばれるもので定義された命令を表す。HLプログラミング言語は、概して、プロセッサのメモリアクセスモデルおよびプロセッサ内のスコープの管理など、コンピュータの基礎をなす詳細からの何らかの抽象化を伴うプログラミング言語を指す。
【0026】
[0031]HLプログラミング言語は、概して、機械プログラミング言語とアセンブリプログラミング言語とを概して指す用語である低レベル(LL)プログラミング言語よりも高いレベルの抽象化を行う。HLプログラミング言語の例としては、Cプログラミング言語、いわゆる「C++」プログラミング言語、Javaプログラミング言語、visual basic(VB)プログラミング言語、およびBasicプログラミング言語がある。いくつかの例で、HLプログラミング言語は、グラフィックス処理ユニット(GPU)の実行のためにHLコードを生成することなど、特定の目的のために適合され得る。そのようなHLプログラミング言語の例としては、Open Graphics Library(GL)プログラミング言語、Open GL Embedded Systems(ES)プログラミング言語、またはハイレベルシェーダー言語(HLSL:High Level Shader Language)がある。多くのHLプログラミング言語は、それらが、コンピューティングデバイスの基礎をなすアーキテクチャを考慮することなしに様々な問題を抽象的に解決するために、データを記憶することが可能であり、アルゴリズムによる操作を受け入れる、(例えば、命令、インターフェース、およびデータ構造を備え得る)オブジェクトの定義を可能にするという点で、オブジェクト指向である。
【0027】
[0032]コンパイラ20は、HLプログラミング言語に従って定義されたHL命令をLLプログラミング言語のLL命令に縮小するモジュールを表す。コンパイルの後に、これらのLL命令は、FPGA、ASICなど、特定のタイプのプロセッサまたは他のタイプのハードウェアによって実行されることが可能になる。LLプログラミング言語は、それらが、プロセッサまたは他のタイプのハードウェアの命令セットアーキテクチャからの抽象化をほとんど行わないか、またはより低いレベルの抽象化を行うという意味において、低レベルと見なされ得る。LL言語は、概して、アセンブリ言語および/または機械語を指す。アセンブリ言語は、機械語よりもわずかに高度なLL言語であるが、概して、アセンブリ言語は、コンパイラまたは他の変換モジュールを使用せずに機械語に変換され得る。機械語は、x86機械コードなど、基礎をなすハードウェア、例えば、プロセッサによってネイティブに実行されるものと、同じでなければ同様である命令を定義する何らかの言語を表す(x86は、Intel Corporationによって開発されたx86プロセッサの命令セットアーキテクチャを指す)。
【0028】
[0033]コンパイラ20は、実際には、HLプログラミング言語に従って定義されたHL命令を、基礎をなすハードウェアによってサポートされるLL命令に変換し、HLプログラミング言語に関連する抽象化を除去するので、これらのHLプログラミング言語に従って定義されたソフトウェアは、実際の基礎をなすハードウェアによってより直接的に実行されることが可能になる。いくつかのコンパイラは、2つ以上のHLプログラミング言語に関連するHL命令を、1つまたは複数のLLプログラミング言語に従って定義されたLL命令に縮小し得るが、一般に、コンパイラ20などのコンパイラは、単一のHLプログラミング言語に関連するHL命令を、1つまたは複数のLLプログラミング言語に従って定義された命令を備える、LLコード24などのLLコードに縮小することが可能である。
【0029】
[0034]説明のために、
図1の例で、ソフトウェア開発モジュール18とコンパイラ20とは別々のモジュールとして示されているが、いくつかの例で、ソフトウェア開発モジュール18とコンパイラ20とは、一般に統合開発環境(IDE)と呼ばれる単一のモジュールにおいて組み合わされ得る。本開示の技法は、この点において、
図1の例に示された別々のモジュール18および20に限定されるべきではなく、IDEにおいてなど、これらが組み合わされた事例に適用され得る。IDEを用いて、開発者は、HL命令を使用してソフトウェアを定義することと、HL命令をLL命令に変換するためにコンパイラを採用することによって、プロセッサ(例えば、GPUなど)または他のタイプのハードウェアによって実行されることが可能なLL命令を備える実行ファイルを生成することの両方を行い得る。一般に、IDEは、開発者が、HL命令を使用してソフトウェアを定義し、定義されたソフトウェアをデバッグすることと、HL命令をLL命令にコンパイルすることと、デバイス内に存在するか、またはセルラーフォンなど、別のデバイス内に存在するハードウェアによって実行されたとき、LL命令の実行がどのように機能するかを観察するために、LL命令の実行をモデル化することとを行うために対話し得る包括的なGUIを提供する。
【0030】
[0035]例えば、Open GL ESプログラミング言語は、(デスクトップおよびラップトップコンピュータによる実行ために開発された)Open GLのバージョンであり、デスクトップおよびラップトップコンピュータなど、パーソナルコンピュータ上ではなく、(いわゆるスマートフォンを含む)セルラーフォン、ネットブックコンピュータ、タブレットコンピュータ、スレートコンピュータ、デジタルメディアプレーヤ、ゲームデバイス、および他のポータブルデバイスなど、モバイルデバイス上での実行に適応される。Open GLおよび、従って、Open GL ESは、2次元(2D)グラフィックと3次元(3D)グラフィックの両方を定義、操作およびレンダリングするための包括的なアーキテクチャを提供する。パーソナルコンピュータにおいて一般的なものとは非常に異なる命令セットアーキテクチャを有するプロセッサを有し得るこれらのモバイルデバイスをIDE内でモデル化する能力は、モバイルデバイスのためのソフトウェアを開発しようとする開発者のための開発環境の選択肢としてIDEのデザイアビリティをさらに高めた。
図1の例には図示されていないが、制御ユニット14はまた、モバイルプロセッサなど、しばしばコンピューティングデバイス12内にネイティブに含まれないハードウェアによるLLソフトウェア命令の実行をモデル化することが可能なモデラモジュールを実行または実装し得る。
【0031】
[0036]いずれの場合も、コンパイラ20などのコンパイラの1つの機能は、述語構造をもつ命令を有する(例えば、LLプログラミング言語に従って定義された)LLコード24への、(例えば、HLプログラミング言語に従って定義された)HLコード22の制御フロー(CF)命令の変換を伴い得る。CF命令は、プロセッサによる命令の実行のフローが制御され得る何らかの命令を指す。例えば、多くのHLプログラミング言語は「if」命令を指定し、そのシンタックスは、通常、この「if」命令の呼出しに続いて条件文の定義を必要とする。この条件文は、通常、ブール演算子を使用してブール文として定義される。
【0032】
[0037]1つの例示的な条件文は、変数の現在値が所与の値よりも大きいかどうかを判断するためのブール比較を伴い得、これは「x>10」として表され得、但し、変数は、この文では「x」として表され、大なりブール演算子は、記号「>」として定義される。この文は、それが、(通常、1として定義される)「真」または(通常、0として定義される)「偽」のいずれかのブール値を戻すので、ブールである。この「if」命令に後に、1つまたは複数の追加の命令が続き、条件文が真である場合、追加の命令は実行される。条件文が偽である場合、追加の命令はスキップされるかまたは実行されず、実行のフローは追加の命令の後に再開する。この意味で、「if」命令は、条件付き文、しばしばブール文の評価に応じて、追加の命令の実行を決定し、それによって制御する。このために、「if」命令は、一般にCF命令と呼ばれる。
【0033】
[0038]他のタイプのHL CF命令セットは、「if」命令と後続する「else」命令とを使用して定義されるもの(一般に「if−else」または「if−then−else」CF命令と呼ばれる)、演算子「:?」を使用して定義されるもの、および複数の「if」文を使用して定義されるもの(一般に「if−if」CF命令と呼ばれる)を含む。「if−else」命令セットでは、「if」命令は上記で説明したものと同じであるが、実行のフローまたは制御は「else」文によって変更され、従って、「if」に続く条件文が偽であるとき、「else」命令に続く追加の命令の第2のセットが実行される。追加の命令のこの第2のセットは、「if」命令に続く条件文が偽である場合のみ実行され、それによって、命令の実行に対するさらなるレベルの制御を与える。
【0034】
[0039]「:?」命令は、概して、「if−else」命令を模倣する三項演算子(ternary operator)を指す。この命令は、一般に「?:」命令として知られていることもある。一般に、「?」命令または演算子は、その前に条件文、しばしばブール文があり、その直後に、条件文が真である場合に変数に割り当てられるべき値が続く。次いで、この「真」の値の後に、「:」命令または演算子が続き、その後に、条件文が偽である場合に変数に割り当てられるべき値が続く。「if−if」命令セットは、概して、上記で定義した「if」文と形式が同じであるか、または少なくとも同様である、一連の「if」文を指す。「if−if」命令セットは、第1の「if」命令の後に、ある条件文が続き、第1の「if」命令に続く第2の「if」命令が、第1の「if」命令のために定義された条件文の逆を有するときなど、「if−else」命令セットの方法と同様の方法で採用され得る。
【0035】
[0040]いくつかの例で、コンパイラ20は部分述語サポートを含み得る。すなわち、例えば、コンパイラ20は、他のタイプのCF命令を変換することを控えながら、いくつかのタイプのCF命令を有するHLコード22を、述語構造を有する命令に変換し得る。一例で、コンパイラ20は、他の条件付き命令、ループ命令、またはCF命令を変換することを控えながら、HLコード22の移動命令(例えば、MOVC)および/または選択命令(例えば、SELECT)を、述語構造を有する命令に変換し得る。概して、HLコード22のCF命令のセットを、述語構造を有する命令に変換することは、CF命令のセットの各分岐を評価し、結果のうちの1つを廃棄する、命令のセットを定義することを含み得る。
【0036】
[0041]コンパイラ20が、いわゆる部分述語コンパイラとして構成された例で、コンパイラ20は、一般に、テクスチャロードに関連するレイテンシにより、テクスチャロード命令を有するCF命令のセットを、述語構造を有する命令に変換しないことがある。例えば、テクスチャロード命令が実行されたとき、GPUは、外部メモリからGPUのローカルメモリにテクスチャ(例えば、画像データ)をロードし得る。いくつかの事例では、比較的長いレイテンシがそのようなデータ転送に関連し得る。すなわち、外部メモリからローカルメモリにデータを転送することは、比較的多数のクロックサイクルを消費し得る。テクスチャロード命令を有するそのようなCF命令のセットを変換することは、CF命令のセットに関連する全てのテクスチャロード命令を実行することと、適切なロードされたテクスチャを選択することとを伴い得る。CF命令のセットに関連する全てのテクスチャロード命令を実行するために必要な時間は、述語構造を有する命令への変換によって得られる効率(例えば、ハードウェア効率)を上回り得る。
【0037】
[0042]本開示の技法は、1つまたは複数の関連するテクスチャロード命令を有するCF命令のセットを含むHLコード22を、LLプログラミング言語に従って定義されたLLコード24に変換することを含む。変換は、本開示の技法によれば、制御フローを削除し、CF命令のセットの各分岐に関連する全てのテクスチャロード命令を実行することを回避するような方法で実行され得る。
【0038】
[0043]本開示のいくつかの態様によれば、テクスチャロード命令を有するCF命令のセットは、テクスチャ座標上に述語構造を有する命令を生成することによって、述語構造を有する命令に変換され得る。座標は、例えば、メモリ中の特定のアドレスを含み得る。従って、述語構造を有する命令の結果は特定のメモリアドレスを指し得る。命令は、次いで、特定のメモリアドレスからテクスチャをロードするために使用され得る。このようにして、単一のテクスチャが、プレディケートされた命令に従って定義されたアドレスからロードされ得る。
【0039】
[0044]説明のための非限定的な例で、HLコード22は、if−else文の各経路に関連するテクスチャロード命令を有するif−else CF文を含み得る。すなわち、例えば、if−else文の「if」経路が真である場合、テクスチャは第1のメモリアドレスからロードされる。逆に、「if」経路が偽である場合、if−else文の「else」経路が実行され、テクスチャは第2のメモリアドレスからロードされる。そのようなif−else文は、if(condition){x=texture(coordinate1);}else{x=texture(coordinate2);}のように表され得る。
【0040】
[0045]この例で、本開示の態様によれば、コンパイラ20は、if−else CF文を、述語構造をもつ命令を有するLLコード24に変換し得る。すなわち、コンパイラ20は、テクスチャ座標上に述語命令を生成し得る。例えば、上記で説明したif−else文に関して、変換されたif−else文は、{new_coordinate=condition ? coordinate1:coordinate2;x=texture(new_coordinate);}のように表され得る。if−else文を、テクスチャ座標上で実行される三項演算子と置き換えることによって、その文は、テクスチャをロードすることなしに実行され得る。さらに、if−else制御フローは削除され、命令は、分岐することなしに実行され得る。例について単一のif−else文に関して説明したが、本開示の技法は、ネスト制御フロー構造を含む、CF命令の他のセットに関して一般化され得ることを理解されたい。
【0041】
[0046]このようにして、制御ユニット14によって実行されるコンパイラ20は、テクスチャロード命令を有するCF命令のセットを、述語構造を有する命令に変換するための本開示の技法を実装し得る。テクスチャロード命令を有するCF命令のセットを変換することは、GPUなど、いくつか処理アーキテクチャのための効率を高め得る。例えば、述語構造を有する変換された命令は、(フィードバックループなしに)直列に実行され得る。その上、実行されるテクスチャロード命令の数を制限することによって、外部メモリからGPUのオンチップメモリにデータを転送することに関連するレイテンシが最小限に抑えられ得る。
【0042】
[0047]いくつかの例で、コンパイラ20は、対称テクスチャロード命令を有するCF命令のセットに本開示の技法を適用し得る。対称テクスチャロード命令は、概して、CF命令のセットの各経路に関連する同じまたはほぼ同じ数のテクスチャロード命令を有するCF命令のセットを指す。説明のための一例で、if−else文は、文の「if」部分に関連する第1の経路と、文の「else」部分に関連する第2の経路とを有する。本開示の態様によれば、コンパイラ20は、第1の経路に関連するテクスチャロード命令の数が、第2の経路に関連するテクスチャロード命令の数にほぼ等しいかどうかを判断し得る。
【0043】
[0048]テクスチャロード命令がほぼ対称である場合、コンパイラ20は、CF命令のセットを、述語構造を有する命令に変換するための本開示の技法を実行し得る。テクスチャロード命令が対称でない(例えば、一方の経路のみがテクスチャロード命令を含む)場合、コンパイラ20は、CF命令を変換することを控え得る。コンパイラ20は、命令を変換するためのインセンティブが潜在的により少ないので、非対称テクスチャロード命令を有するCF命令のセットを変換しないことがある(例えば、CF命令はそのままであり得る)。例えば、CF命令のセットが、テクスチャロード命令を含むある経路と、テクスチャロード命令を含まない別の経路とを有する場合、テクスチャロード命令が実行されず、テクスチャロード命令に関連するレイテンシが生じない可能性(例えば、テクスチャロード命令なしの経路が真である場合)がある。この可能性により、コンパイラ20は、CF命令のセットを変換することに関連する計算および/または時間コストをかけることを控え得る。
【0044】
[0049]例について、CF命令のセットの各経路に関連する単一のテクスチャロード命令に関して説明したが、本開示の技法はこのように限定されない。すなわち、コンパイラ20は、テクスチャロード命令が、CF命令のセットの2つ以上の分岐についてほぼ対称であるかどうかを判断し得る。その上、テクスチャロード命令は、本質的に、明示的に対称である必要はない。例えば、コンパイラ20は、これらのロードのテクスチャ座標が適切にプレディケートされ得る限り、ある経路が、別の経路よりも多いまたは少ない関連するテクスチャロード命令を有する(例えば、ある経路が2つの関連するテクスチャロード命令を有し、別の経路が1つまたは3つのテクスチャロード命令を有する)にもかかわらず、CF命令を変換するための本開示の技法を実行し得る。
【0045】
[0050]
図2は、本開示で説明する技法を実装し得る別のコンピューティングデバイス70を示すブロック図である。
図2の例で、コンピューティングデバイス70は、(いわゆる「スマートフォン」を含む)セルラーフォン、ラップトップコンピュータ、およびいわゆる「ネットブック」、または携帯情報端末(PDA)、デジタルメディアプレーヤ、ゲームデバイス、地理的測位システム(GPS:geographical positioning system)ユニット、埋込みシステム、ポータブルメディアシステム、または、一般に、OpenGL ES仕様に従ってOpenGL ESを実装またはサポートする他のタイプのコンピューティングデバイスの任意の組合せなど、モバイルデバイスを表す。但し、本開示の技法はモバイルデバイスに限定されないことを理解されたい。
【0046】
[0051]
図2の例で、コンピューティングデバイス70は、中央処理ユニット(CPU)72と、グラフィックス処理ユニット(GPU)74と、ストレージユニット76と、ディスプレイユニット78と、ディスプレイバッファユニット80と、ユーザインターフェースユニット84とを含む。一例で、
図1の例に示された制御ユニット14は、ユニット72〜76および80を備え得る。CPU72とGPU74とは、
図2の例で別々のユニットとして示されているが、CPU72とGPU74とは、GPUがCPUに統合される場合など、単一のユニットに統合され得る。CPU72は、機械命令またはLL命令を実行することが可能である1つまたは複数のプロセッサを表す。いくつかの例で、CPU72はメモリ75Aを含み得る。
【0047】
[0052]GPU74は、グラフィカル動作を実行するための1つまたは複数の専用プロセッサを表す。すなわち、例えば、GPU74は、グラフィックをレンダリングすること、およびGPUアプリケーションを実行することのための、固定機能構成要素とプログラマブル構成要素とを有する専用ハードウェアユニットであり得る。GPU74はまた、DSP、汎用マイクロプロセッサ、ASIC、FPGA、あるいは他の等価な集積回路またはディスクリート論理回路を含み得る。GPU74は、専用GPUメモリ75Bなど、他の構成要素をも含み得る。
【0048】
[0053]上述したように、CPU72およびGPU74の各々は、メモリ75A、75B(「メモリ75」)を含み得る。メモリ75は、機械コードまたはオブジェクトコードを実行する際に使用されるオンチップストレージまたはメモリを表し得る。メモリ75は、それぞれ、固定数のデジタルビットを記憶することが可能なハードウェアメモリレジスタを備え得る。CPU72およびGPU74は、それぞれ、例えばシステムバスを介してアクセスされ得るストレージユニット76から値を読み取るか、またはそれに値を書き込むよりも迅速に、ローカルメモリ75A、75Bから値を読み取り、またはそれに値を書き込むことが可能であり得る。いくつかの例で、メモリ75Aは、CPU72に関してオンチップメモリであり得、メモリ75Bは、GPU74に関してオンチップメモリであり得る。
【0049】
[0054]ストレージユニット76は1つまたは複数のコンピュータ可読記憶媒体を備え得る。ストレージユニット76の例としては、限定はしないが、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM(登録商標))、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。
【0050】
[0055]いくつかの例示的な実装形態で、ストレージユニット76は、本開示においてCPU72およびGPU74に起因する機能をCPU72および/またはGPU74に実行させる命令を含み得る。ストレージユニット76は、いくつかの例で、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示し得る。但し、「非一時的」という用語は、ストレージユニット76が非可動であることを意味するものと解釈されるべきでない。一例として、ストレージユニット76は、コンピューティングデバイス70から取り外され、別のデバイスに移され得る。別の例として、ストレージユニット76と実質的に同様のストレージユニットが、コンピューティングデバイス70中に挿入され得る。いくつかの例で、非一時的記憶媒体は、時間経過に伴って変動し得るデータを(例えば、RAMに)記憶し得る。
【0051】
[0056]ディスプレイユニット78は、観察者による消費のために、ビデオデータ、画像、テキストまたは他のタイプのデータを表示することが可能なユニットを表す。ディスプレイユニット78は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、有機LED(OLED)、アクティブマトリックスOLED(AMOLED:active-matrix OLED)ディスプレイなどを含み得る。ディスプレイバッファユニット80は、ディスプレイユニット78のための、写真またはビデオフレームなど、像を表示するためのデータを記憶することに専用のメモリまたはストレージデバイスを表す。ユーザインターフェースユニット84は、ユーザが、CPU72など、コンピューティングデバイス70の他のユニットと対話するか、またはさもなければそれらのユニットと通信するためにインターフェースし得るユニットを表す。ユーザインターフェースユニット84の例としては、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェースユニット84はまた、タッチスクリーンであり得、ディスプレイユニット78の一部として組み込まれ得る。
【0052】
[0057]コンピューティングデバイス70は、明快のために
図2に示されていない追加のモジュールまたはユニットを含み得る。例えば、コンピューティングデバイス70は、コンピューティングデバイス70がモバイル無線電話である例において電話通信を実現するために、そのいずれも
図2に示されていないスピーカーおよびマイクロフォンを含み、またはコンピューティングデバイス70がメディアプレーヤである例においてスピーカーを含み得る。いくつかの事例で、ユーザインターフェースユニット84およびディスプレイユニット78は、コンピューティングデバイス78が、外部ユーザインターフェースまたはディスプレイとインターフェースする能力があるデスクトップコンピュータまたは他のデバイスである例において、コンピューティングデバイス78の外部にあり得る。
【0053】
[0058]
図2の例に示すように、ストレージユニット76は、GPUドライバ86と、GPUプログラム88と、コンパイラ92とを記憶する。以下でより詳細に説明するように、ストレージユニット76はまた、ローカルでコンパイルされたGPUプログラム94とテクスチャデータ96とを記憶し得る。GPUドライバ86は、GPU74にアクセスするためのインターフェースを与えるコンピュータプログラムまたは実行可能コードを表す。CPU72は、GPU74とインターフェースするために、GPUドライバ86またはそれの部分を実行し、このために、GPUドライバ86は、CPU72内に「GPUドライバ86」と標示された破線ボックスとして
図2の例に示されている。GPUドライバ86は、GPUプログラム88を含む、CPU72によって実行されるプログラムまたは他の実行ファイルにとってアクセス可能である。
【0054】
[0059]GPUプログラム88は、(一般に「OpenCL」として知られる)Open−Computing Language、OpenGL ES、HLSL、またはGPU88によって与えられる専用GPU固有動作を利用する別のHLプログラミング言語など、HLプログラミング言語で書かれたプログラムを備え得る。OpenGL仕様を使用して開発されたGPUプログラムはシェーダープログラムと呼ばれることがある。代替として、OpenCL仕様を使用して開発されたGPUプログラムはプログラムカーネルと呼ばれることがある。但し、本開示の技法は特定のHLプログラミング言語に限定されない。例えば、GPUプログラム88は、CPU72上で実行する別のプログラム内に埋め込まれるか、またはさもなければ含まれ得る。
【0055】
[0060]GPUプログラム88は、GPUドライバ86によって与えられる1つまたは複数の機能を呼び出すか、またはさもなければ含み得る。CPU72は、概して、GPUプログラム88が埋め込まれたプログラムを実行し、GPUプログラム88に遭遇すると、GPUプログラム88をGPUドライバ86に受け渡す。CPU72は、GPUプログラム88を処理するために、このコンテキストではGPUドライバ86を実行する。すなわち、例えば、GPUドライバ86は、GPUプログラム88を、GPU74によって実行可能なオブジェクトコードまたは機械コードにコンパイルすることによって、GPUプログラム88を処理し得る。このオブジェクトコードは、ローカルでコンパイルされたGPUプログラム94として
図3の例に示されている。
【0056】
[0061]このGPUプログラム88をコンパイルするために、GPUドライバ86は、GPUプログラム88をコンパイルするコンパイラ92を含む。すなわち、いくつかの例で、コンパイラ92が、GPUプログラム88が埋め込まれたプログラムの実行中に、GPUプログラム88をコンパイルするためにリアルタイムまたはほぼリアルタイムで動作することを除いて、コンパイラ92は、
図1に関して上記で説明したコンパイラ20と実質的に同様であり得る。コンパイラ92は、テクスチャロード命令を有するCF命令を、述語構造を有する命令に変換するための本開示の技法を利用し得る。
【0057】
[0062]例えば、コンパイラ92は、GPUプログラム88を含むHLコードを実行するとき、CPU72からGPUプログラム88を受信し得る。コンパイラ92は、LLプログラミング言語(例えば、機械語またはアセンブリ言語など)に準拠するローカルでコンパイルされたGPUプログラム94を生成するために、GPUプログラム88をコンパイルし得る。いくつかの例で、GPUプログラム94は、OpenGL ESシェーディング言語に従って定義され得る。GPUプログラム88は、コンパイラ92が本開示の技法に従ってコンパイルするテクスチャロード命令を含む、HL CF命令または他のループ命令を含み得る。コンパイラ92は、次いで、LL命令を含むローカルでコンパイルされたGPUプログラム94を出力する。
【0058】
[0063]GPU74は、概して、(GPU74内に「ローカルでコンパイルされたGPUプログラム94」と標示された破線ボックスによって示されるように)ローカルでコンパイルされたGPUプログラム94を受信し、その後、いくつかの事例で、GPU74は、画像をレンダリングし、画像のレンダリングされた部分をディスプレイバッファユニット80に出力する。ディスプレイバッファユニット80は、画像全体がレンダリングされるまで、レンダリングされた画像のレンダリングされたピクセルを一時的に記憶し得る。ディスプレイバッファユニット80は、このコンテキストでは画像フレームバッファと見なされ得る。ディスプレイバッファユニット80は、次いで、ディスプレイユニット48上に表示されるべきレンダリングされた画像を送信し得る。いくつかの代替例で、GPU74は、画像をディスプレイバッファユニット80に一時的に記憶するのではなく、画像のレンダリングされた部分を表示のためにディスプレイユニット78に直接出力し得る。ディスプレイユニット78は、次いで、ディスプレイバッファユニット78に記憶された画像を表示し得る。
【0059】
[0064]コンパイルされたGPUプログラム94の実行中に、ストレージユニット76とGPUメモリ75Bとの間でデータが転送され得る。例えば、(オンチップメモリであり得る)GPUメモリ75Bの容量は、ストレージユニット76の容量と比較して比較的小さいことがある。従って、プログラム94を実行するとき、GPU74は、ストレージユニット76からメモリ75Bにデータを転送し、データを処理し、処理されたデータをストレージユニット76および/またはディスプレイバッファ80に記憶し得る。いくつかの事例で、ストレージユニット76とメモリ75Bとの間で転送されるデータの量および/またはデータが転送される回数を制限することは、性能を改善し得る。例えば、ストレージユニット76とメモリ75Bとの間でデータを転送することは、データ転送に関連するレイテンシを導入し得る。そのようなレイテンシは、特に、ランタイム中に(例えば、GPUプログラム88が、コンパイルされたGPUプログラム94を形成するためにコンパイルされ、実行される間に)ストレージユニット76からメモリ75Bにデータがフェッチされる場合、ボトルネックを提示し得る。その上、ストレージユニット76からデータをフェッチすることは電力を消費する。限られた電源を使用して電力供給される、コンピューティングデバイス70などのコンピューティングデバイス(例えば、バッテリーによって電力供給されるモバイルコンピューティングデバイス)が電力消費を減少させることは、コンピューティングデバイス70が充電間に動作し得る寿命を増加させる。
【0060】
[0065]場合によって、GPU74は、コンパイルされたGPUプログラム94の実行中にテクスチャデータ96を生成しおよび/またはそれにアクセスし得、テクスチャデータ96をストレージユニット76および/またはディスプレイバッファ80に記憶し得る。テクスチャデータ96は、例えば、同じフォーマットを有する1つまたは複数の画像を含んでいる1つまたは複数のオブジェクト(例えば、特定のサイズおよび特定のフォーマットをもつ、ある次元数のピクセルのアレイ)を含み得る。GPU74は、レンダリング中にテクスチャデータ96が使用され得るように、テクスチャデータ96をGPUメモリ75Bに記憶し得る。一例で、テクスチャデータ96は、特定の色に関連するデータを含み得る。特定の色を含むピクセルデータをレンダリングするとき、GPU74は、ストレージユニット76からメモリ75Bに適切なテクスチャデータをロードし得る。すなわち、GPU74は、ストレージユニット76からメモリ75Bに特定のテクスチャを転送するために、コンパイルされたGPUプログラム94のテクスチャロード命令を実行し得る。GPUは、次いで、テクスチャを使用してピクセルデータをレンダリングし、レンダリングされたピクセルデータをディスプレイバッファユニット80に記憶し得る。
【0061】
[0066]本開示の態様によれば、コンパイラ92は、テクスチャロード命令(例えば、GPU74に、ストレージユニット76からローカルGPUメモリ75Bにテクスチャデータ96をロードさせる命令)を含むGPUプログラム88のHL CF命令を、述語構造を有するLL命令に変換し得る。例えば、コンパイラ92は、HL命令を変換した後に、CF命令を削除する、GPU74が実行するためのローカルでコンパイルされたGPUプログラム94を生成し得る。コンパイラ92は、CF命令のセットの各分岐に関連する全てのテクスチャロード命令を実行することを回避するような方法で、GPUプログラム88のHL CF命令を変換し得、それによって、ストレージユニット78へのアクセスの数を低減し得る。
【0062】
[0067]いくつかの例で、コンパイラ92は、テクスチャ座標上に述語構造を有するLL命令を生成することによって、テクスチャロードを有するHL CF命令を、述語構造を有する命令に変換し得る。例えば、
図5に関してより詳細に説明するように、コンパイラ92は、述語構造を有する命令を生成し得、それらの命令の結果は、特定のメモリアドレス、例えば、メモリ75B中のメモリアドレスを指し得る。コンパイラ92はまた、例えば、述語構造を有する命令に基づいて、メモリ75B中の特定のメモリアドレスにテクスチャをロードする命令を生成し得る。
【0063】
[0068]このようにして、コンパイラ92はGPU74の効率を高め得る。例えば、テクスチャロード命令を有するCF命令を、述語構造を有する命令に変換することは、GPU74が、コンパイルされたGPUプログラム94を(フィードバックループなしに)直列に実行することを可能にし得る。その上、実行されるテクスチャロード命令の数を制限することによって、ストレージユニット76からメモリ75Bにデータを転送することに関連するレイテンシが最小限に抑えられ得る。さらに、実行されるテクスチャロード命令の数を制限することはまた、例えば、ストレージユニット76とメモリ75Bとの間で転送されるデータの量を制限することによって、電力を温存するのを助け得る。
【0064】
[0069]いくつかの例で、上記で
図1に関して説明したように、コンパイラ92は、対称テクスチャロード命令を有するGPUプログラム88のCF命令に本開示の技法を適用し得る。すなわち、変換されるCF命令のセットに関して、テクスチャロード命令がほぼ対称である(例えば、分岐が、比較的比例する数のテクスチャロード命令を有する)場合、コンパイラ92は、CF命令のセットを、述語構造を有する命令に変換するために本開示の技法を実行し得る。しかしながら、テクスチャロード命令が対称でない(例えば、一方の経路のみがテクスチャロード命令を含む)場合、コンパイラ92は、CF命令を変換することを控え得る。
【0065】
[0070]本開示のいくつかの態様によれば、GPUプログラム88から、関連するテクスチャロード命令を有するCF命令を削除することによって、コンパイラ92は、コンパイルされたGPUプログラム94の実行をスケジュールすることに関する増加したフレキシビリティを有し得る。例えば、テクスチャロードを有するCF命令より前にHL GPUプログラム88中に含まれる1つまたは複数の他の命令があり、(CF命令の)CF条件とテクスチャロード座標とがそれらの他の命令への依存性を有しない場合、コンパイラ20は、テクスチャロード命令を1つまたは複数の他の命令より前に実行するようにスケジュールし得る。
【0066】
[0071]
図3に、例えば、コンパイラ20または92による、CF命令のセットを含むHL擬似コード100の、述語構造を有しない(「変換なし」の)LL命令104への変換と、述語構造を有する(「変換あり」の)LL命令108への変換とを示す。
図3に示すように、変換なしのLL命令104は、分岐(BR)およびジャンプ(JMP)コマンドなどのCF命令を含む。従って、LL命令104は直列に実行されないことがある。すなわち、例えば、ジャンプコマンドJMPL2が実行され、それによって、(L1ではなく)L2が実行されるように命令ポインタレジスタを変更し得る。
【0067】
[0072]しかしながら、LL命令108は、分岐(BR)およびジャンプ(JMP)コマンドが削除されるように変換された。従って、LL命令108は直列に実行され得る。LL命令108を実行することにより、結果として、LL命令104と比較してより多くの命令が実行され得るが、CF命令を削除することによって、GPU74など、いくつかの処理ユニットは、LL命令104よりも迅速におよび/または高い精度でLL命令108を実行し得る(例えば、適切な値が適切なレジスタに記憶されることになる)。例えば、GPU74(図示せず)中に含まれ得る算術論理ユニット(ALU:arithmetic logic unit)の並列性質は、分岐、ジャンプ、または他のCF命令を効率的に処理しないことがある。
【0068】
[0073]いくつかの例で、(コンパイラ20またはコンパイラ92などの)コンパイラは、述語構造を有する命令に変換され得る命令において制限され得る。そのようなコンパイラは、コンパイラが、「移動」(例えば、MOVC)および「選択」(例えば、SELECT)命令など、命令の限られたセットのみを変換し得るので、「部分述語」コンパイラと呼ばれ得る。
【0069】
[0074]
図4に、述語構造を有するLL命令116への、テクスチャロード命令(「texture(address1)」および「texture(address2)」)を有するCF命令のセットを含むHL擬似コード112の変換を示す。そのような変換は、コンパイラ20(
図1)またはコンパイラ92(
図2)など、コンパイラによって実行され得る。しかしながら、そのような変換は、CF命令112の両方のテクスチャロード命令が実行されなければならないので、一般に実行されないことがある。すなわち、
図4に示す方法でCF命令112を変換することによって、テクスチャロード命令の各々が実行され、適切なテクスチャが選択される。
【0070】
[0075]上述したように、テクスチャロード命令を実行することにより、結果として、テクスチャデータが外部メモリからローカルメモリに転送される。従って、比較的高いレイテンシがテクスチャロード命令に関連し得る。この高いレイテンシにより、コンパイラは、
図4の例に示される変換を実行しないことがある。
【0071】
[0076]
図5に、本開示の技法による、述語構造を有するLL命令124への、テクスチャロード命令(「texture(address1)」および「texture(address2)」)を有するCF命令のセットを含むHL擬似コード120の変換を示す。そのような変換は、コンパイラ20(
図1)またはコンパイラ92(
図2)など、コンパイラによって実行され得る。
図5のコードは説明のために与えたものにすぎないことを理解されたい。すなわち、
図5はif−else命令を示しているが、(より複雑な命令を含む)他のCF命令および/またはループ命令が、同様にしてコンパイラによって述語命令に変換され得る。その上、ブロック124のLLアセンブリ言語命令は例として与えたものにすぎず、CF命令120は1つまたは複数の他のLL言語にコンパイルされ得る。
【0072】
[0077]
図5に示すように、本開示の態様によれば、テクスチャロード命令を有するCF命令のセット120は、述語構造を有するLL命令124に変換され得る。変換は、例えば、述語構造を有するテクスチャ座標上にLL命令124を生成することによって実行される。例えば、LL命令124は、変数p0と条件(cond)との比較(cmp)を含む。アドレス(addr)が、条件の結果に基づいて予約される。アドレス呼出しが、選択関数(sel)と組み合わせて使用される(addr)。すなわち、選択(例えば、sel p0が真である場合、address1におけるテクスチャを選択し、そうでない場合、address2におけるテクスチャを選択する)の結果に応じて、addrは、address1の値またはaddress2の値のいずれかを保持する。次いで、結果コマンドが、適切なtexture(addr)をロードするために使用される。このようにして、コマンドは直列に実行され得(例えば、ブランチコマンドまたはジャンプコマンドはない)、ただ1つのテクスチャがロードされる。従って、本開示の技法は、上記で説明した欠点(例えば、複数のテクスチャロードおよびメモリアクセス違反の可能性)なしに、テクスチャロードを有する制御フロー命令が述語命令に変換されることを可能にする。
【0073】
[0078]いくつかの例で、(コンパイラ92などの)コンパイラは、THENブロックとELSEブロックの両方から対称テクスチャロードを検出し、対称テクスチャロードに対する最適化のみを実行し得る。例えば、特定の命令が、1つの分岐中にのみテクスチャロードを含む場合(例えば、「x」である場合は「y」であり、他の場合は「テクスチャをロードする」、但し、「y」はテクスチャロードではない)、変換は必要とされないことがあるので、そのような変換は実行されないことがある。すなわち、この例では、1つのテクスチャロードについての可能性のみがあり、従って、変換は、テクスチャロードをなくすことによって効率を高めない。
【0074】
[0079]本開示の技法は、プレディケートされたテクスチャ座標を使用して、制御フロー外のテクスチャロードを「ホイスト」するために使用され得る。すなわち、テクスチャロードは、ジャンプ、分岐、またはテクスチャロードの結果に影響を及ぼし得る他の命令がないので、他の命令とは無関係に実行され得る(「ホイスティング」と呼ばれる)。従って、他の命令への依存性なしに、コンパイラは、レンダリングプロセスにおいて比較的初期に実行されるようにテクスチャロードをスケジュールし得る。このようにして、テクスチャがレンダリング中に必要とされるとき、テクスチャがメモリからロードされる(これは、比較的多数のクロックサイクルを消費し得る)のを待たなければならないのではなく、テクスチャは準備ができていることがある。
【0075】
[0080]
図6に、本開示の技法による、関連するテクスチャロード命令を有するCF命令のセットを、述語構造を有する命令に変換する方法を示す。
図6の方法について、コンピューティングデバイス70(
図2)のコンパイラ92によって実行されるものとして説明するが、本開示の技法は、様々な他のコンピューティングデバイスおよびコンパイラによって実行され得ることを理解されたい。
【0076】
[0081]
図6の例では、コンパイラ92が、関連するテクスチャロード命令を有するHL CF命令のセットを識別する(130)。HL CF命令は、例えば、様々な条件付き命令および/またはループ命令を含み得る。例は、if命令、if−else命令(if−then−else命令)、if−if命令、またはプロセッサによる命令の実行のフローが制御され得る他の命令(例えば、命令ポインタレジスタを制御し得る命令)を含む。コンパイラ92によって識別されたCF命令のセットは、(例えば、分岐する経路を定義する)2つ以上の分岐を含み得、各分岐の各経路は1つまたは複数のテクスチャロード命令を含み得る。その上、いくつかの例で、CF命令のセットは、サブルーチンなど、命令のより大きいセットの一部分であり得る。
【0077】
[0082]関連するテクスチャロード命令を有するHL CF命令のセットを識別した後に、コンパイラ92は、HL CF命令のセットを、述語構造を有するLL命令に変換する(134)。すなわち、本開示の態様によれば、コンパイラ92は、述語構造を有するLL命令を生成する。その上、コンパイラ92は、LL命令中に含まれるテクスチャロード命令の数を制限するようにLL命令を生成する。例えば、上記で説明したように、コンパイラ92は、HL CF命令のテクスチャロード命令のすべてが、変換されたLL命令中に含まれる必要がないように、テクスチャ座標上に命令を生成し得る。
【0078】
[0083]本開示の態様によれば、コンパイラ92は、例えば、HL CF命令を含んでいるプログラムの実行中にランタイムコンパイラとして、ランタイムにおいて変換を実行し得る。従って、コンパイラ92は、次いで、実行のために変換されたLL命令を出力する(138)。但し、コンパイラ92はまた、記憶のために、変換されたLL命令を、例えば、ストレージユニット76などの記憶媒体に出力する(138)。
【0079】
[0084]例に応じて、
図6に示した方法など、本明細書で説明した方法のいくつかの行為またはイベントは、異なるシーケンスで実行され得、互いに付加、マージ、または完全に除外され得る(例えば、全ての説明した行為またはイベントが、本方法の実施のために必要であるとは限らない)ことを理解されたい。さらに、いくつかの例で、行為またはイベントは、連続的にではなく、例えば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して、同時に実行され得る。さらに、本開示のいくつかの態様は、明快のために単一のモジュールまたはユニットによって実行されるものとして説明したが、本開示の技法は、コンピューティングデバイスに関連するユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
【0080】
[0085]1つまたは複数の例で、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され得る。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む、コンピュータデータ記憶媒体または通信媒体を含み得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。
【0081】
[0086]限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。例えば、ソフトウェアが、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などの無線技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などの無線技術は、媒体の定義に含まれる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびblu−ray(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【0082】
[0087]コードは、1つまたは複数のデジタル信号プロセッサ(DSP)などの1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。従って、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、専用のハードウェアモジュールおよび/またはソフトウェアモジュール内に与えられ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
【0083】
[0088]本開示の技法は、無線ハンドセット、集積回路(IC)またはICのセット(例えば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示した技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、ハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
【0084】
[0089]本開示の多くの態様について説明した。特許請求の範囲から逸脱することなく、様々な変更が行われ得る。これらおよび他の態様は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
低レベルソフトウェア命令を生成するために高レベルソフトウェア命令をコンパイルする方法であって、
コンピューティングデバイスを用いて、1つまたは複数の関連するテクスチャロード命令を有する高レベル(HL)制御フロー(CF)命令のセットを識別することであって、HL CF命令の前記セットが1つまたは複数の分岐を備える、識別することと、
前記コンピューティングデバイスを用いて、HL CF命令の前記識別されたセットを、述語構造を有する低レベル(LL)命令に変換することと、
前記述語構造を有する前記変換された(LL)命令を出力することと
を備える、方法。
[C2]
前記1つまたは複数のテクスチャロード命令の実行が、画像データをグラフィックス処理ユニットのローカルメモリに転送させる、C1に記載の方法。
[C3]
前記HL CF命令を変換することが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除することを備える、C1に記載の方法。
[C4]
HL CF命令の前記セットを識別することは、前記1つまたは複数の関連するテクスチャロード命令がHL CF命令の前記セットに関して対称であるかどうかを識別することを備え、前記1つまたは複数の関連するテクスチャロード命令が対称でない場合、HL CF命令の前記識別されたセットを変換することを控えることをさらに備える、C1に記載の方法。
[C5]
HL CF命令の前記識別されたセットを変換することが、LL命令のセットを生成することを備え、LL命令の前記セットの実行が、選択文の結果にアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、C1に記載の方法。
[C6]
HL CF命令の前記セットを識別することが、条件を有するIF−ELSE文を識別することを備え、前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、C1に記載の方法。
[C7]
HL CF命令の前記セットを変換することが、LL命令のセットを生成することを備え、LL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、C6に記載の方法。
[C8]
前記変換されたLL命令を出力することが、前記変換されたLL命令をメモリに記憶することを備える、C1に記載の方法。
[C9]
前記HL命令を変換することが、前記LL命令を生成するために前記HL命令をランタイムコンパイルすることを備え、グラフィックス処理ユニット上で前記出力されたLL命令を実行することをさらに備える、C1に記載の方法。
[C10]
前記出力されたLL命令を実行することが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールすることを備える、C9に記載の方法。
[C11]
低レベルソフトウェア命令を生成するために高レベルソフトウェア命令をコンパイルするための装置であって、
1つまたは複数の関連するテクスチャロード命令を有する高レベル(HL)制御フロー(CF)命令のセットを識別することであって、HL CF命令の前記セットが1つまたは複数の分岐を備える、識別することと、
HL CF命令の前記識別されたセットを、述語構造を有する低レベル(LL)命令に変換することと、
前記述語構造を有する前記変換された(LL)命令を出力することと
を行うように構成された1つまたは複数の処理ユニットを備える、装置。
[C12]
ローカルメモリをさらに備え、前記1つまたは複数のテクスチャロード命令の実行が、画像データを前記装置のローカルメモリに転送させる、C11に記載の装置。
[C13]
前記HL CF命令を変換するために、前記1つまたは複数のプロセッサが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除するように構成された、C11に記載の装置。
[C14]
HL CF命令の前記セットを識別するために、前記1つまたは複数のプロセッサは、前記1つまたは複数の関連するテクスチャロード命令がHL CF命令の前記セットに関して対称であるかどうかを識別するように構成され、前記1つまたは複数の関連するテクスチャロード命令が対称でない場合、HL CF命令の前記識別されたセットを変換することを控えるようにさらに構成された、C11に記載の装置。
[C15]
HL CF命令の前記識別されたセットを変換するために、前記1つまたは複数のプロセッサが、LL命令のセットを生成するように構成され、LL命令の前記セットの実行が、選択文の結果にアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、C11に記載の装置。
[C16]
HL CF命令の前記セットを識別するために、前記1つまたは複数のプロセッサが、条件を有するIF−ELSE文を識別するように構成され、前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、C11に記載の装置。
[C17]
HL CF命令の前記セットを変換するために、前記1つまたは複数のプロセッサが、LL命令のセットを生成するように構成され、LL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、C16に記載の装置。
[C18]
前記変換されたLL命令を出力するために、前記1つまたは複数のプロセッサが、前記変換されたLL命令をメモリに記憶するように構成された、C11に記載の装置。
[C19]
前記HL命令を変換するために、前記1つまたは複数のプロセッサが、前記LL命令を生成するために前記HL命令をランタイムコンパイルするように構成され、前記出力されたLL命令を実行するようにさらに構成された、C11に記載の装置。
[C20]
前記出力されたLL命令を実行するために、前記1つまたは複数のプロセッサが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールするように構成された、C19に記載の装置。
[C21]
低レベルソフトウェア命令を生成するために高レベルソフトウェア命令をコンパイルするためのコンピュータプログラム製品であって、実行されたとき、
1つまたは複数の関連するテクスチャロード命令を有する高レベル(HL)制御フロー(CF)命令のセットを識別することであって、HL CF命令の前記セットが1つまたは複数の分岐を備える、識別することと、
HL CF命令の前記識別されたセットを、述語構造を有する低レベル(LL)命令に変換することと、
前記述語構造を有する前記変換された(LL)命令を出力することと
を1つまたは複数のプロセッサに行わせる命令を記憶する、コンピュータプログラム製品。
[C22]
前記1つまたは複数のテクスチャロード命令の実行が、画像データをグラフィックス処理ユニットのローカルメモリに転送させる、C21に記載のコンピュータプログラム製品。
[C23]
前記HL CF命令を変換することが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除することを備える、C21に記載のコンピュータプログラム製品。
[C24]
HL CF命令の前記セットを識別することは、前記1つまたは複数の関連するテクスチャロード命令がHL CF命令の前記セットに関して対称であるかどうかを識別することを備え、前記1つまたは複数の関連するテクスチャロード命令が対称でない場合、HL CF命令の前記識別されたセットを変換することを控えることをさらに備える、C21に記載のコンピュータプログラム製品。
[C25]
HL CF命令の前記識別されたセットを変換することが、LL命令のセットを生成することを備え、LL命令の前記セットの実行が、選択文の結果にアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、C21に記載のコンピュータプログラム製品。
[C26]
HL CF命令の前記セットを識別することが、条件を有するIF−ELSE文を識別することを備え、前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、C21に記載のコンピュータプログラム製品。
[C27]
HL CF命令の前記セットを変換することが、LL命令のセットを生成することを備え、LL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、C26に記載のコンピュータプログラム製品。
[C28]
前記変換されたLL命令を出力することが、前記変換されたLL命令をメモリに記憶することを備える、C21に記載のコンピュータプログラム製品。
[C29]
前記HL命令を変換することが、前記LL命令を生成するために前記HL命令をランタイムコンパイルすることを備え、実行されたとき、グラフィックス処理ユニット上で前記出力されたLL命令を実行することを前記1つまたは複数のプロセッサに行わせる命令をさらに備える、C21に記載のコンピュータプログラム製品。
[C30]
前記出力されたLL命令を実行することが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールすることを備える、C29に記載のコンピュータプログラム製品。
[C31]
低レベルソフトウェア命令を生成するために高レベルソフトウェア命令をコンパイルするための装置であって、
1つまたは複数の関連するテクスチャロード命令を有する高レベル(HL)制御フロー(CF)命令のセットを識別するための手段であって、HL CF命令の前記セットが1つまたは複数の分岐を備える、識別するための手段と、
HL CF命令の前記識別されたセットを、述語構造を有する低レベル(LL)命令に変換するための手段と、
前記述語構造を有する前記変換された(LL)命令を出力するための手段と
を備える、装置。
[C32]
前記1つまたは複数のテクスチャロード命令の実行が、画像データをグラフィックス処理ユニットのローカルメモリに転送させる、C31に記載の装置。
[C33]
前記HL CF命令を変換することが、前記変換された低レベル命令の無条件直列実行を可能にするために前記1つまたは複数の分岐を削除することを備える、C31に記載の装置。
[C34]
HL CF命令の前記セットを識別することは、前記1つまたは複数の関連するテクスチャロード命令がHL CF命令の前記セットに関して対称であるかどうかを識別することを備え、前記1つまたは複数の関連するテクスチャロード命令が対称でない場合、HL CF命令の前記識別されたセットを変換することを控えるための手段をさらに備える、C31に記載の装置。
[C35]
HL CF命令の前記識別されたセットを変換することが、LL命令のセットを生成することを備え、LL命令の前記セットの実行が、選択文の結果にアドレスを割り当てさせ、前記割り当てられたアドレスからテクスチャをロードさせる、C31に記載の装置。
[C36]
HL CF命令の前記セットを識別することが、条件を有するIF−ELSE文を識別することを備え、前記条件が真である場合、HL CF命令の前記セットが第1のメモリアドレスからテクスチャをロードさせ、前記条件が偽である場合、HL CF命令の前記セットが第2のメモリアドレスから前記テクスチャをロードさせる、C31に記載の装置。
[C37]
HL CF命令の前記セットを変換することが、LL命令のセットを生成することを備え、LL命令の前記セットが、前記条件の結果に基づいてアドレスを予約させ、前記予約されたアドレスから前記テクスチャをロードさせる、C36に記載の装置。
[C38]
前記変換されたLL命令を出力することが、前記変換されたLL命令をメモリに記憶することを備える、C31に記載の装置。
[C39]
前記HL命令を変換することが、前記LL命令を生成するために前記HL命令をランタイムコンパイルすることを備え、グラフィックス処理ユニット上で前記出力されたLL命令を実行することをさらに備える、C31に記載の装置。
[C40]
前記出力されたLL命令を実行することが、前記コンパイルされた命令を、前記HL CF命令の条件と前記出力されたLL命令の座標とが依存しない命令より前に実行されるようにスケジュールすることを備える、C39に記載の装置。