(57)【要約】      （修正有）【課題】事前にアプリケーションの配布先のＧＰＵ特性が特定できない場合でも、ＧＰＵ上の処理の高速化を図ることを可能とする。【解決手段】ＧＰＵを備える情報処理装置であって、第１のソースコードと、第１のソースコードを複数種類のＧＰＵそれぞれ向けにチューニングした複数の第２のソースコードと、複数の第２のソースコードそれぞれに対応するＧＰＵの属性情報とを含んで構成された命令セットを取得する取得手段と、ＧＰＵの属性情報に基づいて、命令セットに含まれる第１のソースコードおよび複数の第２のソースコードの中から、ＧＰＵに実行させるソースコードを選択する選択手段２０３と、選択手段にて選択されたソースコードをＧＰＵが解釈可能なデータ形式にコンパイルするコンパイル手段２０６と、コンパイル手段にてコンパイルされたコードをＧＰＵに実行させる制御手段２０７とを有する。【選択図】図２
2019204348.tif 000002
【特許請求の範囲】
【請求項１】
ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備える情報処理装置であって、
第１のソースコードと、前記第１のソースコードを複数種類のＧＰＵそれぞれ向けにチューニングした複数の第２のソースコードと、前記複数の第２のソースコードそれぞれに対応するＧＰＵの属性情報とを含んで構成された命令セットを取得する取得手段と、
前記ＧＰＵの属性情報に基づいて、前記命令セットに含まれる前記第１のソースコードおよび前記複数の第２のソースコードの中から、前記ＧＰＵに実行させるソースコードを選択する選択手段と、
前記選択手段にて選択されたソースコードを前記ＧＰＵが解釈可能なデータ形式にコンパイルするコンパイル手段と、
前記コンパイル手段にてコンパイルされたコードを前記ＧＰＵに実行させる制御手段と
を有することを特徴とする情報処理装置。
【請求項２】
前記コンパイル手段にてコンパイルされたコードをキャッシュするキャッシュ手段を更に有し、
前記制御手段は、前記キャッシュ手段にてキャッシュされたコードを用いて、前記ＧＰＵによる次回以降の処理を実行させることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記選択手段は、前記ＧＰＵに対応した第２のソースコードが前記命令セットに含まれる場合には、当該ＧＰＵに対応した第２のソースコードを選択することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記ＧＰＵの属性情報と、前記複数の第２のソースコードそれぞれに対応する複数種類のＧＰＵそれぞれの属性情報との類似度を算出する算出手段を更に備え、
前記選択手段は、前記ＧＰＵに対応した第２のソースコードが前記命令セットに含まれない場合、前記複数の第２のソースコードのうち、最も類似度が高い第２のソースコードを選択することを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記ＧＰＵの属性情報と、前記複数の第２のソースコードそれぞれに対応する複数種類のＧＰＵそれぞれの属性情報との類似度を算出する算出手段を更に備え、
前記選択手段は、前記ＧＰＵに対応した第２のソースコードが前記命令セットに含まれない場合、類似度が高い順の所定数の第２のソースコードに対し処理のパフォーマンスのチェックを行い、最もパフォーマンスの高い第２のソースコードを選択することを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項６】
前記選択手段にて第２のソースコードが選択され、かつ、前記コンパイル手段にて当該第２のソースコードをコンパイルした結果、前記ＧＰＵの最大命令長もしくは命令キャッシュ長を超える場合、前記選択手段は、前記第１のソースコードを選択しなおすことを特徴とする請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項７】
前記コンパイル手段および前記制御手段は、前記ＧＰＵに対応するＧＰＵドライバに設けられることを特徴とする請求項１乃至６のいずれか一項に記載の情報処理装置。
【請求項８】
ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備える情報処理装置の制御方法であって、
第１のソースコードと、前記第１のソースコードを複数種類のＧＰＵそれぞれ向けにチューニングした複数の第２のソースコードと、前記複数の第２のソースコードそれぞれに対応するＧＰＵの属性情報とを含む命令セットを取得する取得工程と、
前記ＧＰＵの属性情報に基づいて、前記命令セットに含まれる前記第１のソースコードおよび前記複数の第２のソースコードの中から、前記ＧＰＵに実行させるソースコードを選択する選択工程と、
前記選択工程にて選択されたソースコードを前記ＧＰＵが解釈可能なデータ形式にコンパイルするコンパイル工程と、
前記コンパイル工程にてコンパイルされたコードを前記ＧＰＵに実行させる制御工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項９】
ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えるコンピュータを、
第１のソースコードと、前記第１のソースコードを複数種類のＧＰＵそれぞれ向けにチューニングした複数の第２のソースコードと、前記複数の第２のソースコードそれぞれに対応するＧＰＵの属性情報とを含む命令セットを取得する取得手段、
前記ＧＰＵの属性情報に基づいて、前記命令セットに含まれる前記第１のソースコードおよび前記複数の第２のソースコードの中から、前記ＧＰＵに実行させるソースコードを選択する選択手段、
前記選択手段にて選択されたソースコードを前記ＧＰＵが解釈可能なデータ形式にコンパイルするコンパイル手段、
前記コンパイル手段にてコンパイルされたコードを前記ＧＰＵに実行させる制御手段
として機能させるためのプログラム。
【請求項１０】
前記コンパイル手段、および前記制御手段は、前記ＧＰＵに対応するＧＰＵドライバにて構成されることを特徴とする請求項９に記載のプログラム。
【請求項１１】
前記取得手段、前記選択手段、前記コンパイル手段、および、前記制御手段は、前記コンピュータが備えるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）により実行されるプログラムとして構成されることを特徴とする請求項９または１０に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来、画像処理に特化したＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）上で動作する機械語コードをより高速に動作させるための技術が提案されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４９２２３６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一方、現在主流となっている、スマートフォンへのアプリケーションの配布形態では、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のバージョン等で配布可能な端末を制限している。これに対し、各スマートフォンに搭載されるＧＰＵ特性（ＧＰＵベンダ、ＧＰＵチップの種類等）を全て把握することは困難であることから、ＧＰＵ特性を考慮して、アプリケーションを配布可能な端末を制限することは一般的ではない。そのため、特許文献１のようなＧＰＵ特性に依存した従来の手法では、アプリケーションの配布先となるスマートフォンごとの構成に適した高速化を施すことが困難である。
【０００５】
また、特定のＧＰＵ向けに最適化されたソースコードを異なるＧＰＵにてコンパイルや実行を行った場合、最適化されていないソースコードを実行した場合に比べて処理が遅くなり、非効率となる場合がある。
【０００６】
本発明は、このような状況に鑑み、事前にアプリケーションの配布先のＧＰＵ特性が分からない場合でも、ＧＰＵ上の処理の高速化を図ることを可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本願発明は以下の構成を有する。すなわち、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備える情報処理装置であって、第１のソースコードと、前記第１のソースコードを複数種類のＧＰＵそれぞれ向けにチューニングした複数の第２のソースコードと、前記複数の第２のソースコードそれぞれに対応するＧＰＵの属性情報とを含んで構成された命令セットを取得する取得手段と、前記ＧＰＵの属性情報に基づいて、前記命令セットに含まれる前記第１のソースコードおよび前記複数の第２のソースコードの中から、前記ＧＰＵに実行させるソースコードを選択する選択手段と、前記選択手段にて選択されたソースコードを前記ＧＰＵが解釈可能なデータ形式にコンパイルするコンパイル手段と、前記コンパイル手段にてコンパイルされたコードを前記ＧＰＵに実行させる制御手段とを有する。
【発明の効果】
【０００８】
本発明によれば、事前にアプリケーションの配布先のＧＰＵ特性が特定できない場合でも、ＧＰＵ上の処理の高速化を図ることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明に係る情報処理装置のハードウェア構成の例を示す図。
【図２】本発明に係る情報処理装置のソフトウェア構成の例を示す図。
【図３】本発明に係る全体処理のフローチャート。
【図４】第１の実施形態に係るシェーダコンパイル処理のフローチャート。
【図５】本発明に係るシェーダソース格納ＤＢのデータの構成例を示す図。
【図６】第１の実施形態に係る使用シェーダソース選択処理のフローチャート。
【図７】第２の実施形態に係るシェーダコンパイル処理のフローチャート。
【図８】第２の実施形態に係る使用シェーダ選択処理のフローチャート。
【図９】第２の実施形態に係る使用シェーダ選択処理を説明するための図。
【図１０】第３の実施形態に係るシェーダコンパイル処理のフローチャート。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について図面などを参照して説明する。なお、実施形態は、本発明を限定するものではなく、また、実施形態で説明されている全ての構成が本発明の課題を解決するための手段に必須であるとは限らない。
【００１１】
＜第１の実施形態＞
［ハードウェア構成］
本実施形態に係る情報処理装置の一例として、以下では情報処理装置１００を例に挙げて説明する。
【００１２】
図１は、情報処理装置１００のハードウェア構成例を示す図である。情報処理装置１００は、ＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）１０１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０４、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０５、表示部１０８、外部入力部１０９、記憶部１１０、通信部１１１を含んで構成される。ＳｏＣ１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０２、およびＧＰＵ１０３を含んで構成される。また、各部位は、データバス１０６および入出力インターフェース１０７を介して、通信可能に接続される。
【００１３】
本実施形態において、情報処理装置１００は、スマートフォンやタブレット等の小型の持ち運び可能な携帯端末を想定して説明を行う。しかし、情報処理装置１００は、同様の構成であれば、一般的なラップトップコンピュータやデスクトップコンピュータであってもよい。さらに、情報処理装置１００がクライアントとして機能し、外部装置であるサーバ（不図示）からプログラム（アプリケーション）をネットワーク経由で受信し、受信したプログラムを実行するようなクライアントサーバの構成であってもよい。
【００１４】
ＳｏＣ１０１は、１個の集積回路チップ上に複数の異なる機能を有するように構成される。本実施形態において、ＳｏＣ１０１はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０２とＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０３を含むが、他の機能、例えば、無線ベースバンド処理部などを含んでいてもよい。
【００１５】
ＣＰＵ１０２は、記憶部１１０、ＲＯＭ１０４、またはＲＡＭ１０５に格納されたプログラムを実行することにより、情報処理装置１００にて提供される各種処理を行う。すなわち、記憶部１１０等に格納されたプログラムは、本実施形態に係る情報処理装置１００における処理を、ＣＰＵ１０２に実行させるためのコードを含む。このコードにはＯＳのプログラム、アプリケーション用プログラム、ハードウェアを制御するためのドライバプログラムなどが含まれる。
【００１６】
ＧＰＵ１０３は、リアルタイムの画像処理（描画処理）に特化した演算部であり、ＣＰＵ１０２と比べて並列演算処理に優れている。例えば、ＧＰＵ１０３は、画像処理を行うために、異なるパラメータを用いて、同一内容の処理を並列演算処理にて実行することが可能である。ＧＰＵ１０３は、ＧＰＵ１０３用専用のプログラム（以降、シェーダコードと呼ぶ）を実行することができる。シェーダコードは、ＧＰＵ１０３が直接解釈可能な機械語列（データ形式）である。ＧＰＵ１０３が直接解釈可能な機械語列は、ＧＰＵ１０３が解釈可能な命令セットに基づいている。
【００１７】
ＲＯＭ１０４は、情報処理装置１００内部に用意された不揮発性のメモリである。ＣＰＵ１０２が実行可能なプログラムやＧＰＵ１０３用のソースコード（以下、シェーダソース）が格納される。
【００１８】
より詳細にシェーダコードとシェーダソースの違いについて説明する。シェーダコードとは、ＧＰＵ１０３が解釈可能な命令列である。ここでの「解釈可能」とは、ＧＰＵ１０３が直接実行可能な機械語列であってもよいし、ＧＰＵ１０３がその命令列を中間コードとして取り扱い、実行前に直接実行可能な機械語列に変換できる命令列であってもよい。一方、シェーダソースとは、ＧＰＵ１０３を制御するためのＡＰＩ規格（例えば、ＯｐｅｎＧＬ（登録商標）  ＥＳ）によって定められたシェーダ言語によって記述されたソースコードである。シェーダ言語は特に限定するものではない。シェーダソースが、シェーダ言語に対応した所定のコンパイラによってコンパイルされることで、シェーダコードが生成可能である。シェーダの種類としては、例えば、頂点シェーダやフラグメントシェーダなどが挙げられる。
【００１９】
シェーダソースとシェーダコードの違いとして、シェーダコードはＧＰＵ１０３が直接実行可能である一方、シェーダソースはＧＰＵ１０３が直接実行できない点である。また、シェーダコードはＧＰＵ１０３（コンパイルを行ったコンパイラ）に依存した記述になっており、一般的には、あるＧＰＵ１０３のコンパイラにてコンパイルが行われたシェーダコードは他のＧＰＵ１０３では動作する保証がされない。一方、シェーダソースはＧＰＵ用コンパイラが記述に用いられたシェーダ言語に対応していれば動作するため、シェーダコードに比べて動作可能なＧＰＵが多い点が違いとして挙げられる。言い換えると、シェーダソースは、シェーダコードに比べて実行可能なＧＰＵの種類が多く、汎用性が高くなる。
【００２０】
ＲＡＭ１０５は、各種の情報を記憶する読み書き可能な揮発性のメモリであり、ＣＰＵ１０２のワークエリアとしても利用される。例えば、ＣＰＵ１０２は、ＲＯＭ１０４、または記憶部１１０に記憶されているプログラムをＲＡＭ１０５にロードしてプログラムを実行する。なお、情報処理装置１００の機能及び後述するシーケンスに係る処理の全部又は一部については専用のハードウェアを用いて実現してもよい。また、本実施形態では、ＲＡＭ１０５はＳｏＣ１０１には含まれない構成となっているが、高速化等のためにＳｏＣ１０１内部にＲＡＭ１０５が含まれていてもよい。また、ＲＡＭ１０５は、ＧＰＵ１０３用の領域のみＳｏＣ１０１に含まれて構成されてもよい。
【００２１】
データバス１０６は、各部位を相互に接続し、データ通信するために使用される配線である。入出力インターフェース１０７は、外部装置との入出力を制御する各種部位と、情報処理装置１００内部との通信を制御する。本実施形態では、外部との入出力を制御する部位として、表示部１０８、外部入力部１０９、記憶部１１０、および通信部１１１が情報処理装置１００に含まれる。
【００２２】
表示部１０８は、液晶等のディスプレイにより構成され、アプリケーションに関するＵＩや出力結果を表示する。外部入力部１０９は、ユーザからの各種入力を受け付ける。外部入力部１０９は、例えばマウス、キーボード、及びタッチパネル等の入力装置の少なくとも１つ以上を含んで構成される。外部入力部１０９は、ユーザからの入力に応じて、その入力内容を通知する通知情報をＣＰＵ１０２に出力する。または、外部入力部１０９は、ＲＡＭ１０５に直接その通知情報を出力する。
【００２３】
記憶部１１０は、不揮発性の記憶領域であり、ファイルおよびプログラム等を格納可能なメモリ及びハードディスク等の記憶装置の少なくとも１つ以上を含む。または、記憶部１１０は、付け外し可能な可搬メディアであってもよい。通信部１１１は、情報処理装置１００と他の情報処理装置との間で外部ネットワーク（不図示）を介して任意の情報を送受信する。通信部１１１は、例えばネットワークアダプタやアンテナを同梱する無線モジュール等の通信装置を含んで構成される。通信部１１１は、ＣＰＵ１０２から他の情報処理装置に送信するために出力された情報を、ネットワークを介して他の情報処理装置に送信する。また、通信部１１１は、他の情報処理装置からネットワークを介して送信された情報を受信し、ＣＰＵ１０２に出力する。
【００２４】
ＣＰＵ１０２とＧＰＵ１０３の演算能力の特徴以外の違いについて説明する。いずれも解釈可能な機械語コードを実行する点は同じである。ＣＰＵ１０２用の命令セットが一般に公開されている一方、ＧＰＵ１０３用の命令セットは必ずしも公開されているとは限らないという点が異なる。これは、ＧＰＵ１０３を制御するための規格（例えば、ＯｐｅｎＧＬ  ＥＳ）において、シェーダソースを事前にコンパイルするのではなく、実際にプログラムを実行する情報処理端末上でコンパイルすることが定められているためである。そのため、ＣＰＵ１０２用の命令セットの種類に比べてＧＰＵ１０３の命令セットは多種多様である。特に、ＧＰＵ１０３がＧＰＵ１０３用のＡＰＩ規格（例えば、ＯｐｅｎＧＬ  ＥＳ）にさえ対応すれば動作する環境では、アプリケーション開発時に具体的にどのＧＰＵ１０３の命令セットで動作するかを事前に把握することは極めて難しい。また、複数種類のＧＰＵに対応させるために、それぞれに対応した複数のシェーダコードを命令セットに含めると、その数に応じて命令セットのサイズが増大してしまうという問題もある。
【００２５】
［ソフトウェア構成］
続いて、図２を用いて本実施形態に係るハードウェア上で動作するソフトウェアの構成例について説明する。本実施形態では、少なくとも１つ以上の画像演算処理等をＧＰＵ１０３で実行するようなアプリケーションを想定する。ＧＰＵ１０３で実行するためのシェーダコードの基となるシェーダソースは、ＲＯＭ１０４、または記憶部１１０に記憶されているものとする。さらに、使用する命令セットなど、構成の異なるＧＰＵ１０３向けにチューニングされたシェーダソースも、同様にＲＯＭ１０４、または記憶部１１０に記憶されているものとする。ここでの「チューニング」とは、シェーダソースを特定のＧＰＵ１０３で高速に動作するように、基のシェーダソースが実現する機能は変更せずに、パフォーマンス向上のための施策を取り入れることを意味する。具体的には、ループ展開や、ＧＰＵ１０３のレジスタ本数に適した変数の取り扱いの変更などが該当する。ここでは、あるシェーダソースを特定のＧＰＵ向けにチューニングすることで、当該シェーダソースとは異なるシェーダソースが構成されるものとする。特定のＧＰＵは、そのＧＰＵ向けにチューニングされたシェーダソースを用いることで、チューニング前のシェーダソースよりも高いパフォーマンスを提供することが可能となる。
【００２６】
本実施形態では、ＧＰＵの種類に依存しないシェーダソースと、特定のＧＰＵ向けにチューニングされたシェーダソースとが同梱された命令セット（アプリケーション等）が情報処理装置１００に配布されているものとして説明を行う。言い換えると、アプリケーションが配布時には、配布先となる情報処理装置１００にどのような種類のＧＰＵが備えられているかは、特定されていない。また、命令セットには、ＧＰＵアーキテクチャ属性に関する情報が含まれているものとする。この属性情報の詳細については、後述する。
【００２７】
ＲＡＭ１０５には、ＧＰＵアクセス可能領域２０１が設けられる。ＧＰＵアクセス可能領域２０１は、ＧＰＵ１０３が読み書き可能な領域である。スマートフォン等の小型端末ではＣＰＵ１０２とＧＰＵ１０３が使用するＲＡＭ１０５は共有になっていることが多い。そのため、本実施形態では、明確に、ＲＡＭ１０５内にＧＰＵ１０３にとってアクセス可能な領域があるものとして説明を行う。なお、この構成に限定するものではなく、ＣＰＵ１０２、ＧＰＵ１０３向けの領域が混在するようなメモリ配置でもよいし、ＣＰＵ１０２とＧＰＵ１０３が個別に使用可能なメモリが別々に用意された構成であってもよい。
【００２８】
ＣＰＵ１０２は、アプリケーション制御部２０２、シェーダソース選択処理部２０３、シェーダコードキャッシュ処理部２０４、およびＧＰＵドライバ２０５として機能する。これらの部位はそれぞれ、対応するプログラムをＣＰＵ１０２が読み出して実行することにより実現される。アプリケーション制御部２０２は、情報処理装置１００を用いて実現したいアプリケーションを管理、制御する。シェーダソース選択処理部２０３は、チューニング前とチューニング後のシェーダソースの中から、実行を行う情報処理装置１００上のＧＰＵ１０３に適したシェーダソースを選択する。
【００２９】
シェーダコードキャッシュ処理部２０４は、ＧＰＵドライバ２０５に取得要求を行い、コンパイル済みのシェーダコードを取得する。シェーダコードキャッシュ処理部２０４は、次回以降、コンパイル処理をスキップするために、取得したシェーダコードを不揮発メモリ（ＲＯＭ１０４、または記憶部１１０）に保存しておき、利用時にはこの保存したシェーダコードの読み込みを行う。これにより、処理の負荷の低下や処理時間の短縮化が可能となる。
【００３０】
ＧＰＵドライバ２０５は、アプリケーション制御部２０２等のＣＰＵ１０２上の処理部からＧＰＵ１０３を制御するためのインターフェースとしての役割を持つ。ＧＰＵドライバ２０５の役割としては、シェーダソースをコンパイルしてシェーダコードへ変換することや、シェーダコードの実行をＧＰＵ１０３に指示することなどが挙げられる。シェーダソースコンパイル処理部２０６は、シェーダソースをコンパイルし、シェーダコードへ変換する。本実施形態において、シェーダソースコンパイル処理部２０６は主にＣＰＵ１０２上で動作するものとするが、コンパイル処理の一部をＧＰＵ１０３に受け渡すようにオフロードさせてもよい。または、ＧＰＵドライバ２０５がコンパイル指示を出すだけで、全てのコンパイル処理をＧＰＵ１０３に委譲させてもよい。ＧＰＵ制御部２０７は、ＧＰＵ１０３への命令実行指示および、ＧＰＵ１０３が管理するテクスチャやレジスタの制御を行う。
【００３１】
記憶部１１０には、シェーダソース格納ＤＢ２０８、およびシェーダコード格納ＤＢ２０９が設けられる。シェーダソース格納ＤＢ２０８は、アプリケーション制御部２０２が使用するシェーダソースとシェーダソースに結び付けられた各種情報を含むデータベースである。シェーダソース格納ＤＢ２０８の具体的な内容は図５を用いて後述する。シェーダコード格納ＤＢ２０９は、ＧＰＵドライバ２０５のシェーダソースコンパイル処理部２０６が出力したシェーダコードをシェーダコードキャッシュ処理部２０４が格納する際に用いられるデータベースである。
【００３２】
ＧＰＵ１０３は、シェーダコード実行部２１０、およびＧＰＵキャッシュ管理部２１１として機能する。更に、ＧＰＵ１０３には、ＧＰＵキャッシュ２１２が設けられる。シェーダコード実行部２１０は、ＧＰＵ１０３の演算機能を用いて、ＧＰＵ１０３が直接解釈可能なシェーダコードをＧＰＵ制御部２０７の指示に従って実行する。ＧＰＵキャッシュ管理部２１１は、ＧＰＵ１０３のシェーダコード実行部２１０がシェーダコードを実行する際に、ＲＡＭ１０５のＧＰＵアクセス可能領域２０１よりも高速な読み書きが可能なＧＰＵキャッシュ２１２にシェーダコードをキャッシュさせる。ＧＰＵキャッシュ２１２は、ＧＰＵキャッシュ管理部２１１によって管理される、シェーダコードとテクスチャデータを一時的に保管するためのＧＰＵ１０３に直結された高速なメモリ領域である。
【００３３】
［処理シーケンス］
次に、図３を用いて、本実施形態に係る処理シーケンスについて説明する。本処理シーケンスは、例えば、アプリケーション（不図示）を介してユーザから表示処理の要求を受け付けた際に、開始される。ここでは、ＣＰＵ１０２、ＧＰＵドライバ２０５、およびＧＰＵ１０３が連携して処理を行う。
【００３４】
Ｓ３０１にて、アプリケーション制御部２０２は、アプリケーション（不図示）で使用するシェーダコードがシェーダコード格納ＤＢ２０９に存在するか否かを確認する。シェーダコードがシェーダコード格納ＤＢ２０９に存在しないことを確認した場合（Ｓ３０１にてＮＯ）Ｓ４００に遷移する。一方、シェーダコードがシェーダコード格納ＤＢ２０９内に存在した場合（Ｓ３０１にてＹＥＳ）、すでに使用したいシェーダソースはコンパイル済みであることから、シェーダコンパイル処理をスキップし、Ｓ３０２に遷移する。つまり、コンパイル処理が行われたことにより生成されたシェーダコードがシェーダコード格納ＤＢ２０９に格納されていた場合、それ以降はコンパイル処理をスキップすることで、処理の負荷の低下や処理時間の短縮化が可能となる。
【００３５】
Ｓ４００にて、シェーダソース選択処理部２０３は、チューニング前のシェーダソースとチューニング後のシェーダソースの中からパフォーマンスが好適なシェーダソースを選択し、コンパイルする。シェーダコンパイル処理の詳細については、図４を用いて後述する。本工程が完了した後、Ｓ３０２に遷移する。
【００３６】
Ｓ３０２にて、アプリケーション制御部２０２は、ＧＰＵドライバ２０５に対し、シェーダコード格納ＤＢ２０９に格納されている対象のシェーダコードを実行するように指示する。
【００３７】
Ｓ３０３にて、ＧＰＵドライバ２０５のＧＰＵ制御部２０７は、Ｓ３０２にてコンパイルするよう指示を受けた対象のシェーダコードを実行するように、ＧＰＵ１０３に対して指示する。
【００３８】
Ｓ３０４にて、ＧＰＵ１０３は、Ｓ３０３の指示にて指定されたシェーダコードをシェーダコード実行部２１０にて実行する。なお、本工程で用いられるシェーダコードは、ＧＰＵアクセス可能領域２０１に保持されている。そして、本処理シーケンスを終了する。
【００３９】
（シェーダコンパイル処理）
続いて、シェーダコンパイル処理について、図４を用いて詳細に説明する。
【００４０】
Ｓ４０１にて、シェーダソース選択処理部２０３は、ＧＰＵ１０３に関する属性情報（ＧＰＵアーキテクチャ属性）を取得する。ＧＰＵアーキテクチャ属性とは、具体的には、ＧＰＵベンダー名や各ＧＰＵベンダーに依存するＧＰＵチップの世代情報、更にはＧＰＵ１０３が対応している拡張機能およびテクスチャフォーマットの種類などが挙げられる。また、使用できるテクスチャの最大枚数と最大解像度などを、ＧＰＵアーキテクチャ属性として使用してもよく、上記に限定するものではない。ＧＰＵ１０３のＧＰＵアーキテクチャ属性に関する情報は、予めＲＯＭ１０４等に保持しておき、ＣＰＵ１０２がこれを取得するようにしてもよいし、ＧＰＵドライバ２０５を介してＧＰＵ１０３等に問い合わせを行うような構成であってもよい。
【００４１】
Ｓ６００にて、シェーダソース選択処理部２０３は、コンパイル対象として使用するシェーダソースをチューニング前とチューニング後のシェーダソースから選択する。使用シェーダソース選択処理の詳細については、図６を用いて後述する。本工程が完了した後、Ｓ４０２に遷移する。
【００４２】
Ｓ４０２にて、シェーダソース選択処理部２０３は、使用シェーダソース選択処理（Ｓ６００）にて選択したシェーダソースをコンパイルするように、ＧＰＵドライバ２０５に指示する。
【００４３】
Ｓ４０３にて、ＧＰＵドライバ２０５のシェーダソースコンパイル処理部２０６は、シェーダソース選択処理部２０３から指示された対象のシェーダソースをコンパイルし、シェーダコードを生成する。この時、本実施形態では、シェーダソースのコンパイルはＧＰＵドライバ２０５で行うため、これを備えているＣＰＵ１０２がコンパイル処理を行うこととなる。しかし、コンパイル処理自体は、ＣＰＵ１０２とＧＰＵ１０３が協働して行ってもよいし、または、ＧＰＵ１０３が全てのコンパイル処理を行ってもよい。
【００４４】
Ｓ４０４にて、ＧＰＵドライバ２０５のシェーダソースコンパイル処理部２０６は、Ｓ４０３にて生成したシェーダコードをＧＰＵ１０３に記憶するよう、ＧＰＵ１０３に指示する。このとき、シェーダソースコンパイル処理部２０６は、指示に併せて、生成されたシェーダコードをＧＰＵ１０３へ渡す。
【００４５】
Ｓ４０５にて、ＧＰＵ１０３は、Ｓ４０４にて記憶するよう指示された対象のシェーダコードをＲＡＭ１０５内のＧＰＵアクセス可能領域２０１に記憶する。
【００４６】
Ｓ４０６にて、ＣＰＵ１０２のシェーダソース選択処理部２０３は、Ｓ４０５にてＧＰＵアクセス可能領域２０１に記憶されたシェーダコードが取得可能か判定する。このような判定が必要な理由は、ＣＰＵ１０２からも使用可能なＲＡＭ１０５内にシェーダコードが格納されていたとしても、ＧＰＵアクセス可能領域２０１はＣＰＵ１０２からの直接アクセスが禁止されていることが想定されるためである。そのため、シェーダソース選択処理部２０３は、ＧＰＵドライバ２０５にシェーダコードが取得可能か問い合わせ、その問い合わせ結果に基づいて判定を行う。シェーダコードが取得できないと判定された場合（Ｓ４０６にてＮＯ）、本処理フローを終了し、図３のＳ３０２へ進む。シェーダコードが取得可能であると判定された場合（Ｓ４０６にてＹＥＳ）、Ｓ４０７に遷移する。
【００４７】
Ｓ４０７にて、シェーダソース選択処理部２０３は、シェーダコードをＧＰＵドライバ２０５から取得する。このとき、ＧＰＵドライバ２０５は、ＧＰＵ１０３を介してＲＡＭ１０５のＧＰＵアクセス可能領域２０１からシェーダコードを取得する。
【００４８】
Ｓ４０８にて、シェーダソース選択処理部２０３は、Ｓ４０７で取得したシェーダコードをシェーダコード格納ＤＢ２０９に保存する。そして、本処理フローを終了し、図３のＳ３０２へ進む。
【００４９】
（データ構成例）
次に、使用シェーダソース選択処理（Ｓ６００）で参照するシェーダソース格納ＤＢ２０８の詳細について、図５を用いて説明する。
【００５０】
図５は、シェーダソース格納ＤＢ２０８において、基となるあるシェーダソースに対して、３つのチューニング済シェーダソースがあることを示している。それぞれのチューニング済シェーダソースには、それぞれを一意に識別するためのＩＤ（識別情報）がチューニングＩＤとして割り振られており、本実施形態ではチューニングＩＤ“１”〜“３”を示している。
【００５１】
シェーダソース格納ＤＢ２０８内には、チューニング済シェーダソースそのものの他に、ＧＰＵアーキテクチャ属性と呼ばれる、チューニング対象のＧＰＵ１０３に関する情報が含まれている。ＧＰＵアーキテクチャ属性は、シェーダソースをチューニングする際に、チューニングのターゲットとなるＧＰＵアーキテクチャ向けの属性が、チューニングしたシェーダソースに付与される。つまり、ＧＰＵアーキテクチャ属性は、アプリケーションの配布前に事前に準備される。
【００５２】
図５に示すように、ＧＰＵアーキテクチャ属性は、具体的には、ＧＰＵ１０３のベンダーおよびレンダラ（世代情報）、サポートするＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）のバージョン、およびサポートするシェーダ言語のバージョンなどが挙げられる。更に、ＧＰＵアーキテクチャ属性は、拡張機能（すなわちＧＰＵを操作するＡＰＩのコア機能以外の機能）のサポート情報を含んでいてもよい。他にも、ＧＰＵアーキテクチャ属性は、テクスチャに関する情報を含んでもよい。テクスチャに関する情報とは、例えば整数、浮動小数点数テクスチャフォーマットをサポートするか否か、サポートするテクスチャフォーマットの最大解像度などが挙げられる。
【００５３】
（使用シェーダソース選択処理）
続いて、使用シェーダソース選択処理（Ｓ６００）について、図６を用いて詳細に説明する。
【００５４】
Ｓ６０１にて、ＣＰＵ１０２のシェーダソース選択処理部２０３は、情報処理装置１００に含まれるＧＰＵ１０３のＧＰＵアーキテクチャ属性（以下、「実ＧＰＵアーキテクチャ属性」と呼ぶ）と一致するＧＰＵアーキテクチャ属性に対応するチューニング済シェーダソースを、シェーダソース格納ＤＢ２０８から探索する。ここで、具体的な一致条件としては、シェーダソース格納ＤＢ２０８にて管理するＧＰＵアーキテクチャ属性の項目全てが完全一致する場合としてもよい。また、別の一致条件として、ＧＰＵ１０３のベンダー名およびレンダラ名のみを比較してよい。この条件は、全ての項目が完全一致するか否かという条件に比べて、異なるドライバのバージョンにより、同一のＧＰＵ１０３に対して細かな差が生じてしまうケースでも対応できるという効果がある。実ＧＰＵアーキテクチャ属性と一致するＧＰＵアーキテクチャ属性に対応するチューニング済シェーダソースがシェーダソース格納ＤＢ２０８内に存在する場合（Ｓ６０１にてＹＥＳ）Ｓ６０２に遷移する。一致するＧＰＵアーキテクチャ属性に対応するチューニング済シェーダソースがシェーダソース格納ＤＢ２０８内に存在しない場合（Ｓ６０１にてＮＯ）Ｓ６０３に遷移する。
【００５５】
Ｓ６０２にて、シェーダソース選択処理部２０３は、Ｓ６０１で一致したＧＰＵアーキテクチャ属性に対応するチューニング済シェーダソースをアプリケーション（不図示）で使用するチューニング済シェーダソースとして選択する。そして、本処理フローを終了し、図４のＳ４０２へ遷移する。
【００５６】
Ｓ６０３にて、シェーダソース選択処理部２０３は、チューニング済シェーダソースに対応するＧＰＵアーキテクチャ属性と実ＧＰＵアーキテクチャ属性との類似度を算出する。複数のチューニング済シェーダソースがシェーダソース格納ＤＢ２０８に存在する場合には、それぞれに対応するＧＰＵアーキテクチャ属性と実ＧＰＵアーキテクチャ属性間の類似度が算出される。ここで、ＧＰＵアーキテクチャ属性間の類似度の算出方法としては、相関を算出する方法や、コサイン類似度、ユークリッド距離を算出する方法など、類似度を算出できる方法であればどのような方法でもよい。なお、文字列の類似度算出についても、使っている文字の種類を比較する方法や、編集距離（レーベンシュタイン距離）を求める方法であってもよい。ここでは、詳細な算出方法は省略する。
【００５７】
Ｓ６０４にて、シェーダソース選択処理部２０３は、算出したアーキテクチャ属性間の類似度のうち、最も高い類似度の値が採用最小類似度以上か否かを判定する。ここでの採用類似度の値は、予め規定され、記憶部１１０等に保持されているものとする。採用類似度は、例えば、類似度の算出に用いられる項目数や算出方法に応じて用いられる閾値である。シェーダソース選択処理部２０３は、最も高い類似度の値が採用最小類似度以上である場合（Ｓ６０４にてＹＥＳ）Ｓ６０５に遷移し、採用最小類似度未満である場合（Ｓ６０４にてＮＯ）Ｓ６０６に遷移する。
【００５８】
Ｓ６０５にて、シェーダソース選択処理部２０３は、最も高い類似度に対応するチューニング済シェーダソースをアプリケーションで使用するシェーダソースとして選択する。そして、本処理フローを終了し、図４のＳ４０２へ進む。
【００５９】
Ｓ６０６にて、シェーダソース選択処理部２０３は、チューニング前のシェーダソースをアプリケーションで使用するシェーダソースとして選択する。そして、本処理フローを終了し、図４のＳ４０２へ進む。
【００６０】
なお、本実施形態では、同一の機能を有する一つのシェーダを対象に記述している。アプリケーションが複数のシェーダを使用する場合は、あるシェーダをコンパイルする時に決定したチューニングＩＤを他のシェーダのコンパイル時に使用して、使用シェーダ選択処理（Ｓ６００）をスキップしてもよい。または、各シェーダに対して、使用シェーダ選択処理（Ｓ６００）を行ってもよい。
【００６１】
以上、本実施形態により、アプリケーションの配布先のＧＰＵ特性が特定できない場合でも、ＧＰＵ上の処理の高速化を図ることが可能となる。
【００６２】
＜第２の実施形態＞
第１の実施形態における使用シェーダソース選択処理（Ｓ６００）では、実ＧＰＵアーキテクチャ属性と、同梱された各チューニング済シェーダソースに対応するＧＰＵアーキテクチャ属性との類似度を算出する方法を示した。ここで、算出した類似度を使用してパフォーマンスが向上するとして選択されたチューニング済シェーダソースを使用した場合に、チューニング前シェーダソースを実行した時よりもパフォーマンスが悪化してしまう可能性がある。そこで、本実施形態では、第１の実施形態の手法を用いてパフォーマンスが悪化してしまうケースを防ぎ、かつシェーダソース選択処理に要する時間を短くする方法を示す。
【００６３】
［処理シーケンス］
（シェーダコンパイル処理）
図７を用いて、本実施形態に係るシェーダコンパイル処理について説明する。図７は、第１の実施形態にて説明した図４のシェーダコンパイル処理に対応し、ここでは差異部分のみ説明する。図４と同じ内容の処理については、同じ参照番号を付す。
【００６４】
Ｓ４０１にて実ＧＰＵアーキテクチャ属性を取得後、Ｓ８００にて、シェーダソース選択処理部２０３は、パフォーマンスチェックを伴う使用シェーダソース選択処理を行う。本工程の詳細については、図８を用いて後述する。本工程の処理の後、Ｓ７０１へ進む。
【００６５】
Ｓ７０１にて、シェーダソース選択処理部２０３は、使用シェーダソース選択処理（Ｓ８００）で選択されたシェーダソースがコンパイル済みか否かを判定する。選択されたシェーダソースがコンパイル済みであると判定された場合（Ｓ７０１にてＹＥＳ）Ｓ４０６へ遷移する。一方、選択されたシェーダソースが未だコンパイルされていないと判定された場合（Ｓ７０１にてＮＯ）Ｓ４０２へ遷移する。以降の処理は、第１の実施形態の図４と同等の処理となるため、詳細な説明は省略する。
【００６６】
（使用シェーダソース選択処理）
続いて、本実施形態に係る使用シェーダソース選択処理について、図８を用いて詳細に説明する。図８は、第１の実施形態にて説明した図６のシェーダコンパイル処理に対応し、ここでは差異部分のみ説明する。図８と同じ内容の処理については、同じ参照番号を付している。なお、第１の実施形態の使用シェーダソース選択処理では、ＣＰＵ１０２が処理主体となっていたが、本実施形態では、更にＧＰＵドライバ２０５、ＧＰＵ１０３が連携して本処理を行う。
【００６７】
Ｓ６０３の処理の後、Ｓ８０１にて、シェーダソース選択処理部２０３は、Ｓ６０３にて算出した類似度を使用して、類似度の高い順に一定数チューニング済シェーダソースを選択する。例えば、一定数のチューニング済シェーダソースが類似度の高い順に並べられたリストを生成するような構成であってもよい。また、ここでの一定数として用いられる値は予め規定され、記憶部１１０等に保持されていてよい。なお、チューニング済シェーダソースの類似度が所定の閾値以下である場合には、上記一定数に満たない場合でも、所定の閾値以下の類似度のチューニング済シェーダソースは選択対象としないような構成であってもよい。
【００６８】
Ｓ８０２にて、シェーダソース選択処理部２０３は、Ｓ８０１にて選択したチューニング済シェーダソースとチューニング前シェーダソースを、シェーダコード出力のためにコンパイルするよう、ＧＰＵドライバ２０５に指示する。
【００６９】
Ｓ８０３にて、ＧＰＵドライバ２０５のシェーダソースコンパイル処理部２０６は、シェーダソース選択処理部２０３から指示された全てのシェーダソースをコンパイルする。
【００７０】
Ｓ８０４にて、シェーダソースコンパイル処理部２０６は、Ｓ８０３にて生成したシェーダコードをＧＰＵ１０３に記憶するよう、ＧＰＵ１０３に指示する。このとき、シェーダソースコンパイル処理部２０６は、生成したシェーダコードをＧＰＵ１０３へ渡す。
【００７１】
Ｓ８０５にて、ＧＰＵ１０３は、ＧＰＵドライバ２０５から記憶するよう指示された全てのシェーダコードをＲＡＭ１０５内のＧＰＵアクセス可能領域２０１に記憶する。指示されたシェーダコードの記憶が完了した後、ＧＰＵ１０３は、その旨をＣＰＵ１０２へ通知する。
【００７２】
本実施形態では、チューニング済シェーダソースとチューニング前シェーダソースをまとめてＳ８０３の工程で生成している。しかし、ＧＰＵ１０３が利用可能なＲＡＭ１０５のサイズを鑑みて、以降のパフォーマンスチェックの処理までコンパイルするシェーダソースを分割、または個別にコンパイルしてもよい。
【００７３】
Ｓ８０６にて、シェーダソース選択処理部２０３は、生成したチューニング前およびチューニング後シェーダソースに対応するシェーダコードを使用してパフォーマンスチェックを行う。シェーダソース選択処理部２０３はその中で最もパフォーマンスが好適なシェーダコードを、以降の処理で使用するものとして選択する。ここでのパフォーマンスチェックの方法は特に限定するものではなく、各シェーダソースに適用可能な方法であればよい。例えば、所定の処理を実行させ、その処理に要する時間や消費するリソースなどを基準として判定してよい。また、パフォーマンスに対する評価は、所定の閾値を用いた絶対評価でもよいし、各シェーダソース間の相対評価であってもよい。そして、本処理フローを終了し、図７のＳ７０１へ進む。
【００７４】
ここで、図８に示す使用シェーダソース選択処理の流れについて、主にデータの流れの視点から図９を用いて説明する。図９は、シェーダソース格納ＤＢ２０８内に５つのチューニング済シェーダソースがある例を示している。まず、シェーダソース選択処理部２０３がＳ８０１で類似度の高い順に一定数のチューニング済シェーダソースを選択する。図９では、上位３つのチューニング済シェーダソースを選択している。図９では、類似度の高いチューニング済シェーダソースを選択するためにソート処理を行っているが、必ずしも不要な部分までソートする必要は無く、単に類似度が上位から所定数のチューニング済シェーダソースを取得できれば他の方法でもよい。
【００７５】
図９では、パフォーマンスチェック対象のシェーダソースとして、チューニングＩＤ“５”，“２”，“３”３つのチューニング済シェーダソースに加え、チューニング前シェーダソースを含めている。結果、図９の例であれば、シェーダソース選択処理部２０３は、パフォーマンスチェックで対象となるシェーダソースを４つに絞っている。
【００７６】
なお、チューニング済シェーダソースの選択数の増加は、パフォーマンスチェックに要する時間の増加に繋がる。そのため、使用するシェーダの種類の数や経過時間に応じて、動的にパフォーマンスチェックに用いるシェーダコードの数を増減させてもよい。
【００７７】
以上、本実施形態により、第１の実施形態の効果に加え、パフォーマンスが悪化してしまうケースを防ぐことができる。同時に、パフォーマンスチェックに要する時間を極力短くし、ユーザビリティに与える影響を少なくすることが可能となる。
【００７８】
＜第３の実施形態＞
第１の実施形態に係る使用シェーダソース処理（Ｓ４００）では、実ＧＰＵアーキテクチャ属性と、同梱された各チューニング済シェーダソースに対応するＧＰＵアーキテクチャ属性との類似度を算出する方法を示した。しかし、類似度を使用してパフォーマンスの向上を想定して選択されたチューニング済シェーダソースを使用した場合に、チューニング前シェーダソースを実行した時よりもコンパイル後のシェーダコードの命令長が長くなってしまう場合がある。これは、ソースコードのチューニング処理として行われる、ループ展開やインライン関数展開などがコンパイル後のシェーダコードのサイズを大きくする方向に作用する場合があるためである。
【００７９】
一方、ＧＰＵ１０３は、処理できるシェーダコードの大きさである最大命令長には上限がある。また、シェーダコードの大きさである最大命令長は、ＧＰＵ１０３によって異なる。最大命令長を超えてしまう場合、ＧＰＵドライバ２０５は、シェーダソースコンパイル処理部２０６の処理でコンパイル不可として通知してしまうことが考えられる。また、コンパイルにより生成されたシェーダコードが、ＧＰＵキャッシュ２１２が格納可能な最大キャッシュ長に収まらない場合がある。この場合、動作が極端に遅くなる、または、ＧＰＵ１０３の出力結果が最大キャッシュ長に収まった場合とは異なってしまう可能性がある。
【００８０】
そこで、本実施形態では、最大命令長または最大キャッシュ長を超えた場合を考慮した上で、使用するシェーダソースを選択する方法を示す。以下のフローチャートでは、最大命令長を考慮した例を示すが、命令キャッシュ長についても同様の処理を適用することが可能である。
【００８１】
［処理シーケンス］
（シェーダコンパイル処理）
図１０を用いて、本実施形態に係るシェーダコンパイル処理について説明する。図１０は、第１の実施形態にて説明した図４のシェーダコンパイル処理に対応し、ここでは、差異部分のみ説明する。図４と同じ内容の処理については、同じ参照番号を付す。
【００８２】
Ｓ４０３でシェーダコードを生成した後、Ｓ１００１にて、ＧＰＵドライバ２０５は、生成したシェーダコードの大きさが、ＧＰＵ１０３の最大命令長を超えるか否かを判定する。ここでのＧＰＵ１０３の最大命令長の情報は予め取得していてもよいし、ＧＰＵ１０３に問い合わせを行うような構成であってもよい。シェーダコードの大きさが最大命令長以上の場合には（Ｓ１００１にてＹＥＳ）Ｓ１００２に遷移する。一方、シェーダコードの大きさが最大命令長未満の場合には（Ｓ１００１にてＮＯ）Ｓ４０４に遷移する。Ｓ４０４以降の処理は第１の実施形態にて説明した内容と同じため、ここでの説明は省略する。
【００８３】
Ｓ１００２にて、シェーダソース選択処理部２０３は、Ｓ４０３でコンパイルしたシェーダソースがチューニング前シェーダソースか否かを判定する。シェーダソースがチューニング前シェーダソースである場合（Ｓ１００２にてＹＥＳ）Ｓ１００４に遷移する。一方、シェーダソースがチューニング後シェーダソースである場合（Ｓ１００２にてＮＯ）Ｓ１００３に遷移する。
【００８４】
Ｓ１００３にて、シェーダソース選択処理部２０３は、複数のチューニング前シェーダソースのうち、シェーダコードの大きさがより小さくなると想定されるチューニング前シェーダソースを選択する。つまり、シェーダコードのサイズに対する圧縮効果が高いシェーダソースを選択する。ここでの選択方法は、例えば、コンパイル前のシェーダソースのサイズを比較し、その比較結果に基づいて選択してもよい。未処理のチューニング前シェーダソースが１つしかない場合には、そのシェーダソースコードが選択されることとなる。そして、Ｓ４０２へ遷移する。これにより、シェーダソース選択処理部２０３は、チューニング前シェーダソースを使用して、もう一度、コンパイルを試みることとなる。なお、複数の使用シェーダソースが選択されていた場合、シェーダコードの長さが最大命令長を下回るまで、もしくは、全ての使用シェーダソースに対する処理が完了するまで、チューニング前シェーダソースへの置換が繰り返されることとなる。
【００８５】
Ｓ１００４にて、シェーダソース選択処理部２０３は、選択されたシェーダソースに対してこれ以上命令語長を短くすることはできないものとして、コンパイル不可と判定する。そして、本処理フローを終了し、図３のＳ３０２へ進む。コンパイル不可と判定された場合には、例えば、所定のエラーや警告がユーザに表示されるように構成されてよい。
【００８６】
以上、本実施形態により、シェーダコードが最大命令長または最大キャッシュ長を超えた場合を考慮した上で、使用するシェーダソースを選択することができる。そのため、ＧＰＵ１０３が処理できない命令長のチューニング済シェーダソースであった場合にも、より命令長の短いシェーダソースを選択し、処理を続行可能となる。
【００８７】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣやＦＰＧＡ）によっても実現可能である。
【符号の説明】
【００８８】
１００…情報処理装置、１０１…ＳｏＣ、１０２…ＣＰＵ、１０３…ＧＰＵ、１０４…ＲＯＭ、１０５…ＲＡＭ、１１０…記憶部、１１１…通信部、２０１…ＧＰＵアクセス可能領域、２０２…アプリケーション制御部、２０３…シェーダソース選択処理部、２０４…シェーダコードキャッシュ処理部、２０５…ＧＰＵドライバ、２０６…シェーダソースコンパイル処理部、２０７…ＧＰＵ制御部、２０８…シェーダソース格納ＤＢ、２０９…シェーダコード格納ＤＢ、２１０…シェーダコード実行部、２１１…ＧＰＵキャッシュ管理部、２１２…ＧＰＵキャッシュ
【図１】
2019204348.tif 000003
【図２】
2019204348.tif 000004
【図３】
2019204348.tif 000005
【図４】
2019204348.tif 000006
【図５】
2019204348.tif 000007
【図６】
2019204348.tif 000008
【図７】
2019204348.tif 000009
【図８】
2019204348.tif 000010
【図９】
2019204348.tif 000011
【図１０】
2019204348.tif 000012