(57)【特許請求の範囲】
【請求項１】
命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、前記レジスタに配置される変数を最適化する方法であって、
プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルを参照し、前記変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又はメモリに決定し、
前記決定された変数の配置先を、前記変換テーブルに含まれる前記変数の配置先の情報に反映し、
前記変換テーブルに含まれる前記変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、前記プロセッサコアが実行可能な命令コードに変換し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の使用頻度の情報を更新する、
ことを特徴とするレジスタ配置最適化方法。
【請求項２】
前記変換テーブルに含まれる前記変数の使用頻度の情報は、変数の平均使用頻度及び過去の使用頻度の情報を含み、
前記決定では、前記変換テーブルに含まれる前記変数の平均使用頻度の情報に基づいて、平均使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又は前記メモリに決定し、
前記更新では、前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の過去の使用頻度の情報を更新すると共に、前記変数の過去の使用頻度の情報に基づいて前記変換テーブルに含まれる前記変数の平均使用頻度の情報を更新する、
ことを特徴とする請求項１記載のレジスタ配置最適化方法。
【請求項３】
前記変換テーブルは、複数の変換テーブルの中から、前記プロセッサが処理する入力データの特徴に応じて選択された変換テーブルである、
ことを特徴とする請求項１又は２記載のレジスタ配置最適化方法。
【請求項４】
前記入力データは画像データであり、
前記選択された変換テーブルは、前記画像データのフレーム内差分又はフレーム間差分に応じて選択された変換テーブルである、
ことを特徴とする請求項３記載のレジスタ配置最適化方法。
【請求項５】
命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、前記レジスタに配置される変数を最適化するプログラムであって、
プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルを参照し、前記変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又はメモリに決定し、
前記決定された変数の配置先を、前記変換テーブルに含まれる前記変数の配置先の情報に反映し、
前記変換テーブルに含まれる前記変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、前記プロセッサコアが実行可能な命令コードに変換し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の使用頻度の情報を更新する、
という処理をコンピュータに実行させるレジスタ配置最適化プログラム。
【請求項６】
命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、前記レジスタに配置される変数を最適化する装置であって、
プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルと、
前記変換テーブルに含まれる前記変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、前記プロセッサコアが実行可能な命令コードに変換する命令変換部と、
を備え、
前記命令変換部は、
前記変換テーブルに含まれる前記変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又はメモリに決定し、
前記決定された変数の配置先を、前記変換テーブルに含まれる前記変数の配置先の情報に反映し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の使用頻度の情報を更新する、
ことを特徴とするレジスタ配置最適化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置の高速化技術に関する。
【背景技術】
【０００２】
画像符号化装置等のデータ処理装置では高速な動作が要求されている。そのため、そのようなデータ処理装置のプロセッサで実行されるプログラムでは、目標性能を満足させるために、次のようにして処理の高速化を図っている。例えば、使用頻度の高い変数や再利用タイミングが時間的に近い変数をレジスタに割り当てる（配置する）等して処理の最適化（チューニング作業）を行い、処理の高速化を図っている。一方、プロセッサ毎の違いはあるものの、使用可能なレジスタ数には制限があるため、レジスタに配置しきれない変数については、レジスタよりもアクセス速度が遅いメモリに配置されることになる。
【０００３】
なお、処理の高速化に関する技術として、次のような技術が知られている。
例えば、プロセッサの命令フェッチ部からデコード部への命令伝達経路において、命令フェッチ部にフェッチされた命令がバイトコードのときに、それがバイトコードアクセレータに供給されてネイティブコードに変換され、後段へ出力されるようにした技術がある。
【０００４】
また、例えば、プログラム変換装置において、ソースプログラム中における変数への値の設定・参照位置等の解析を行い、その解析結果に基づいて、各々の変数にレジスタやメモリ等のハードウェア資源を割り当てるようにした技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−４４３３６号公報
【特許文献２】特開平１１−１７５３５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述のように、使用頻度の高い変数や再利用タイミングが時間的に近い変数をレジスタに割り当てる等して処理の最適化を行って高速化を図る技術においては、次のような課題がある。
【０００７】
プログラムにおいて、例えば分岐処理等のように、入力データに応じて異なる処理が行われる関数では、入力データに応じて処理ルートが異なる。この場合、使用頻度の高い変数や再利用タイミングが時間的に近い変数も処理ルートによって異なることになる。そこで、上記の技術では、平均的な入力データに応じた処理ルート等に基づいて処理の最適化が行われている。しかしながら、これでは、入力データが変化して処理ルートが異なってしまうと、使用頻度の高い変数や再利用タイミングが時間的に近い変数も異なってしまうため、処理速度の高速化を図るどころか処理速度の低下を招く虞がある。
【０００８】
本発明は、上記実情に鑑み、入力データが変化しても処理の高速化を図ることができる、レジスタ配置最適化方法、レジスタ配置最適化プログラム、及びレジスタ配置最適化装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
方法の一観点によれば、命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、レジスタに配置される変数を最適化する方法が提供される。この方法では、プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルを参照し、その変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的にレジスタに配置されるように、変数の配置先をレジスタ又はメモリに決定する。決定された変数の配置先を、変換テーブルに含まれる変数の配置先の情報に反映する。変換テーブルに含まれる変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、プロセッサコアが実行可能な命令コードに変換する。変換された命令コードをプロセッサコアが実行する際に使用される変数に応じて、変換テーブルに含まれる変数の使用頻度の情報を更新する。
【００１０】
プログラムの一観点によれば、命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、レジスタに配置される変数を最適化するプログラムが提供される。このプログラムは、次のような処理をコンピュータに実行させる。プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルを参照し、その変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的にレジスタに配置されるように、変数の配置先をレジスタ又はメモリに決定する。決定された変数の配置先を、変換テーブルに含まれる変数の配置先の情報に反映する。変換テーブルに含まれる変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、プロセッサコアが実行可能な命令コードに変換する。変換された命令コードをプロセッサコアが実行する際に使用される変数に応じて、変換テーブルに含まれる変数の使用頻度の情報を更新する。
【００１１】
装置の一観点によれば、命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、レジスタに配置される変数を最適化する装置が提供される。この装置は、変換テーブルと命令変換部とを含む。変換テーブルは、プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む。命令変換部は、変換テーブルに含まれる変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、プロセッサコアが実行可能な命令コードに変換する。また、命令変換部は、変換テーブルに含まれる変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的にレジスタに配置されるように、変数の配置先をレジスタ又はメモリに決定する。また、決定された変数の配置先を、変換テーブルに含まれる変数の配置先の情報に反映する。また、変換された命令コードをプロセッサコアが実行する際に使用される変数に応じて、変換テーブルに含まれる変数の使用頻度の情報を更新する。
【発明の効果】
【００１２】
開示の方法、プログラム、及び装置は、入力データが変化しても処理の高速化を図ることができる、という効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】データ処理装置の一例を示す図である。
【図２】処理プログラムの構成例を模式的に示す図である。
【図３】レジスタ、内部メモリ、及びメインメモリ部でのアクセス速度の一例を模式的に示す図である。
【図４】変数の配置方法についての課題の一例を示す図である。
【図５】技術例１における変数の配置動作の一例を示す図である。
【図６】技術例１の課題の一例を示す図である。
【図７】技術例２における変数の配置動作の一例を示す図である。
【図８】技術例２の課題の一例を示す図である。
【図９】技術例１と技術例２とを組み合わせた場合の課題の一例を示す図である。
【図１０】実施例１に係るレジスタ配置最適化装置を含むデータ処理装置の一例を示す図である。
【図１１】擬似命令コードの変換例を示す図である。
【図１２】変換マップテーブルの一例を示す図である。
【図１３】変換マップテーブルに含まれる過去の使用頻度の情報の更新に係る動作の一例を示すフローチャートである。
【図１４】処理プログラムの実行に伴って行われる変換マップテーブルの更新手順の一例を説明する図である。
【図１５】再配置処理（Ｓ２０１）の処理例を示すフローチャートである。
【図１６】(a) は手法１による変数の配置例を示す図、(b) は手法２による変数の配置例を示す図である。
【図１７】実施例１に係るレジスタ配置最適化装置を含む画像符号化装置の構成例を示す図である。
【図１８】図１７に示した画像符号化装置の処理の流れの概要を模式的に示す図である。
【図１９】図１７に示した画像符号化装置の動作シーケンスの一例を示す図である。
【図２０】従来の場合のプログラム開発期間と、実施例１に係るレジスタ配置最適化装置を採用した場合のプログラム開発期間との一例を示す図である。
【図２１】(a) は入力データ特徴算出部の基本的な処理例を示すフローチャート、(b),(c) はその具体例を示すフローチャートである。
【図２２】実施例２に係るレジスタ配置最適化装置を含む画像符号化装置の構成例を示す図である。
【図２３】図２２に示した画像符号化装置の処理の流れの概要を模式的に示す図である。
【図２４】図２２に示した画像符号化装置の動作シーケンスの一例を示す図である。
【図２５】各々が変換マップテーブル選択値の情報を含む複数の変換マップテーブルの例を示す図である。
【図２６】コンピュータシステムの構成例を示す図である。
【発明を実施するための形態】
【００１４】
＜実施例１＞
図１は、データ処理装置の一例を示す図である。
図１に示したデータ処理装置は、プロセッサＣＰＵ（Central Processing Unit）部１１０、メインメモリ部１２０、メモリコントローラ部１３０、周辺入出力Ｉ／Ｆ（InterFace）部１４０、通信Ｉ／Ｆ（InterFace）部１５０、及びシステムバス１６０を含む。
【００１５】
プロセッサＣＰＵ部１１０は、プロセッサコア（演算・制御ユニット）１１１、レジスタ１１２、命令キャッシュ１１３、データキャッシュ１１４、システムバスコントローラ１１５、及び内部メモリ１１６を含む。プロセッサコア１１１は、処理プログラム（命令コード）の実行を行う。レジスタ１１２は、プロセッサコア１１１がアクセスする高速レジスタである。命令キャッシュ１１３は、命令コード用のキャッシュメモリである。データキャシュ１１４は、データコード用のキャッシュメモリである。システムバスコントローラ１１５は、各部を接続するシステムバス１６０のコントローラである。内部メモリ１１６は、プロセッサＣＰＵ部１１０内で使用される小容量のメモリである。
【００１６】
メインメモリ部１２０は、処理プログラム格納領域１２１、処理データ格納領域１２２、及び処理結果格納領域１２３を含む。
メモリコントローラ部１３０は、メインメモリ部１２０のRead/Write制御を行う。
【００１７】
周辺入出力Ｉ／Ｆ部１４０は、外部機器との間で入出力Ｉ／Ｆ処理を行う。通信Ｉ／Ｆ部１５０は、通信回線を介して外部機器との間でＩ／Ｆ処理を行う。
システムバス１６０は、プロセッサＣＰＵ部１１０、メモリコントローラ部１３０、周辺入出力Ｉ／Ｆ部１４０、及び通信Ｉ／Ｆ部１５０等と接続されるアドレス／データバスである。
【００１８】
図１に示したデータ処理装置において、処理対象データは、外部機器から周辺入出力Ｉ／Ｆ部１４０を介して又は通信回線から通信Ｉ／Ｆ部１５０を介して入力される。入力された処理対象データは、システムバス１６０及びメモリコントローラ部１３０を経由してメインメモリ部１２０の処理データ格納領域１２２に格納される。格納された処理対象データは、メインメモリ部１２０にロードされた処理プログラムがプロセッサＣＰＵ部１１０により実行されることによって処理される。処理プログラムは、例えば、フィルタリングや画像圧縮等の処理を行う画像処理プログラムである。処理プログラムにおいて、プロセッサＣＰＵ部１１０の処理内容を実現するための命令コードは、メインメモリ部１２０又は内部メモリ１１６に格納される。命令コードは、直接アセンブラ言語で記述されたものであるか、又は、Ｃ言語等の高級言語で記述された上でコンパイラにより変換されたものである。プロセッサＣＰＵ部１１０には、メモリアクセス高速化の為に、キャッシュメモリ(命令キャッシュ１１３及びデータキャッシュ１１４)が設けられており、適宜プロセッサコア１１１で実行される命令コードが事前に命令キャッシュ１１３にコピーされる。また、プロセッサＣＰＵ部１１０には、演算対象データを格納又は一時的に記憶するために、レジスタ１１２が設けられている。プロセッサコア１１１により実行される演算命令は、レジスタ１１２やメモリ（内部メモリ１１６又はメインメモリ部１２０）のデータを演算対象（オペランド）として実行される。演算結果は、システムバス１６０及びメモリコントローラ部１３０を介して、メインメモリ部１２０の処理結果格納領域１２３に格納される。最終結果は、必要に応じて、周辺入出力Ｉ／Ｆ部１４０を介して外部機器へ又は通信Ｉ／Ｆ部１５０を介して通信回線へ出力される。
【００１９】
図２は、処理プログラムの構成例を模式的に示す図である。
命令コードとして処理順序が記述されている処理プログラムは、図２に示したように、関数やサブルーチンモジュール（例えば関数[1]〜関数[n]）に分割されており、これらを連携させて全体機能を実現する。各関数内で使用される変数は、レジスタ１１２又はメモリ（内部メモリ１１６又はメインメモリ部１２０）に配置され、演算命令のオペランドとして指定される。図２に示した例では、例えば関数[1]において、演算命令のオペランドとして指定される変数[1]〜変数[6]は、レジスタ（レジスタ−１〜レジスタ−５）１１２に配置されることを示している。また、変数[7]及び変数[8]は、メモリ（内部メモリ１１６又はメインメモリ部１２０）に配置されることを示している。
【００２０】
図３は、レジスタ１１２、内部メモリ１１６、及びメインメモリ部１２０でのアクセス速度の一例を模式的に示す図である。なお、ここでは、メインメモリ部１２０をＤＲＡＭ（Dynamic Random Access Memory）とした場合の例を示す。
【００２１】
図３に示したように、レジスタ１１２とメモリ（内部メモリ１１６及びＤＲＡＭ）では、アクセス速度が異なる。レジスタ１１２に対して、プロセッサＣＰＵ部１１０の外部に設けられるＤＲＡＭでは数十〜数百倍のアクセス時間を要し、プロセッサＣＰＵ部１１０の内部メモリ１１６でも２〜４倍のアクセス時間を要する。従って、関数内で使用される変数は可能な限りレジスタ１１２に配置した方が、より高速な処理が可能となる。しかしながら、使用できるレジスタ数には制限があるため、レジスタ１１２に配置しきれない変数については、メモリ（内部メモリ１１６又はメインメモリ部１２０）に配置されてしまう。なお、制限されるレジスタ数は、例えばプロセッサ毎に異なる。
【００２２】
そこで、高速な動作が要求されるプログラムでは、目標性能を満足させるために、より使用頻度の高い変数や再利用タイミングが時間的に近い変数をレジスタに割り当てる等して処理の最適化を行い、処理の高速化を図っている。この場合、例えば、レジスタを使用して動作させるために命令コードの変換を行うことにより処理の高速化を図る技術がある（以下「技術例１」という）。また、例えば、アセンブラコードを読み込み、変数の存在区間の長さや変数の存在するループレベルの総和に基づいて変数の割付優先度を算出し、その結果に基づいて変数の配置先を変換することにより高速化を図る技術がある（以下「技術例２」という）。
【００２３】
一方、変数の配置方法については、次のような課題がある。
図４は、変数の配置方法についての課題の一例を示す図である。
図４に示したように、変数の使用頻度や使用順は、関数内の何れの処理ルート（処理ルートＡ〜Ｃ）を通ったかにより異なる。これは、関数内では入力されるデータの特徴に応じた処理が行われるため、入力データが変化すると処理ルートが異なってしまうからである。従って、平均点なデータが入力される場合の処理ルート（例えば処理ルートＣ）で使用される変数をメインにレジスタに配置する等してレジスタ配置を最適化し、総合的に最適となるような変数の配置を行う必要がある。しかしながら、これでは、平均的でないデータが入力された場合の処理ルート(例えば処理ルートＡ又はＢ）では、レジスタが適正に使用されず、処理速度が低下する要因となってしまう。
【００２４】
図５は、上記の技術例１における変数の配置動作の一例を示す図である。
図５に示したように、技術例１では、プロセッサの命令伝達経路において、次のような動作が行われる。まず、命令キャッシュ（CASHE)１７１から読み出された命令コードが命令フェッチ部(FETc)１７２において分別され、それが浮動小数点バイトコードである場合には、それがバイトコードアクセラレータ部(BCA)１７３へ出力される。そして、そこでレジスタ間転送命令に変換され、それがセレクター１７４を介してデコード部（DECc、DECf）１７５へ出力される。技術例１では、このような動作により、処理の高速化を図っている。なお、デコード部１７５において、DECc は全ての命令をデコードし、DECf は浮動小数点命令を認識してデコードする。
【００２５】
図６は、上記の技術例１の課題の一例を示す図である。
技術例１では、上述のように、一部の命令コードに対して変換を行う方式である。そのため、図６に示したように、例えば、入力データＡの場合は、浮動小数点演算が有りとなって配置先の変換が行われ、有効な方式となる。しかしながら、入力データが変化した入力データＢの場合は、処理ルートが変更され浮動小数点演算が無しとなり、この場合は高速化の効果はない。このように、技術例１では、入力データによって浮動少数点演算の有無が固定的に決まるものであり、それを動的に変更することはできない。
【００２６】
図７は、上記の技術例２における変数の配置動作の一例を示す図である。
図７に示したように、技術例２では、プログラム変換装置において、次のような動作が行われる。まず、処理プログラム(アセンブラコード)が読み込まれて解析され、変数の存在区間の長さや変数の存在するループレベルの総和が算出され、その算出結果に基づいて各変数の割付優先度が算出される。そして、その算出結果に基づいて変数の配置先が変換される。技術例２では、このような動作により、処理の高速化を図っている。
【００２７】
図８は、上記の技術例２の課題の一例を示す図である。
技術例２では、上述のように、処理プログラム（アセンブラコード）の解析が行われ、そのコード上での変数の存在区間の長さや変数の存在するループレベルの総和に基づいて配置が決定され、処理プログラムが実行される。そのため、図８に示したように、例えば、処理プログラムの中で最も多く使用されている変数が変数Ｘと判断され（図８のＡ参照）、変数Ｘの配置先がレジスタとされたとする。しかしながら、その後、入力データが変更され、その処理を行う実行ルートにおいて最も多く使用されている変数が、変数Ｘではなく変数Ｙになる場合がある(図８のＢの網掛け部参照)。このように、入力データが変更され、処理プログラムの実行ルートが変更された場合に、技術例２では、使用される変数の存在区間やループ回数の変更に対応できない。
【００２８】
図９は、上記の技術例１と技術例２とを組み合わせた場合の課題の一例を示す図である。
図９に示したように、この場合には、処理プログラム(アセンブラコード等)が読み込まれて、その命令の種類(浮動小数点)や、変数の存在区間の長さや変数の存在するループレベルの総和に基づいて配置先の変換が行われる。しかしながら、この場合には、入力データに応じて変化する関数内の変数の使用頻度によってレジスタとメモリの割り振りを変更（最適化）することができない。
【００２９】
そこで、上述した変数の配置方法に関する課題に鑑み、実施例１に係るレジスタ配置最適化装置を含むデータ処理装置は、以下のような構成を有する。
図１０は、本実施例に係るレジスタ配置最適化装置を含むデータ処理装置の一例を示す図である。
【００３０】
なお、図１０において、図１に示した要素と同一の要素については、同一の符号を付している。また、図１０に示したデータ処理装置において、本実施例に係るレジスタ配置最適化装置は、命令変換ユニット１１７と変換マップテーブル１１８を含む。命令変換ユニット１１７は命令変換部の一例であり、変換マップテーブル１１８は変換テーブルの一例である。
【００３１】
図１０に示したデータ処理装置では、プロセッサＣＰＵ部１１０が、更に、命令変換ユニット１１７と変換マップテーブル１１８を含み、それらが命令キャッシュ１１３とシステムバスコントローラ１１５との間に設けられる。なお、変換マップテーブル１１８は、命令変換ユニット１１７の内部又は外部に設けることが可能であり、例えば、プロセッサＣＰＵ部１１０内の図示しない記憶部に記憶される。
【００３２】
また、メインメモリ部１２０の処理プログラム格納領域１２１に格納される処理プログラム中の命令コードは、演算命令のオペランドが明示されていない（演算命令のオペランドの配置先が指定されていない）抽象化された擬似命令コードとなる。すなわち、擬似命令コードは、演算命令のオペランドがレジスタ１１２に配置されているのかメモリ（内部メモリ１１６又はメインメモリ部１２０）に配置されているのかが明示されていない。なお、このような擬似命令コードを含む処理プログラムは、予め生成されて、処理プログラム格納領域１２１に格納される。
【００３３】
変換マップテーブル１１８は、詳しくは後述するように、処理プログラム内の各関数に定義されている各変数の配置先、平均使用頻度、及び過去の使用頻度等の情報を含む。
命令変換ユニット１１７は、変換マップテーブル１１８に含まれる各変数の配置先の情報に基づいて、擬似命令コードを、プロセッサコア１１１が解釈可能な（実行可能な）命令コード（以下「通常の命令コード」ともいう）に変換する。すなわち、演算命令のオペランドの配置先がレジスタ１１２であるのかメモリ（内部メモリ１１６又はメインメモリ部１２０）であるのかが明示されていない抽象化された擬似命令コードを、それが明示された通常の命令コードに変換する。そして、変換された命令コードを命令キャッシュ１１３にロードする。また、命令変換ユニット１１７は、詳しくは後述するように、変換マップテーブル１１８の更新等の処理も行う。
【００３４】
図１１は、擬似命令コードの変換例を示す図である。
図１１に示した例は、命令変換ユニット１１７が、変換マップテーブル１１８に含まれる各変数の配置先の情報に基づいて、擬似命令コードである加算命令「ADD  val0, val1」を、通常の命令コードである加算命令「add  r0, r1」又は「add  (mem0), r1」に変換した例である。
【００３５】
ここで、擬似命令コードである加算命令「ADD  val0, val1」は、変数１(val0)と変数２(val1)の加算命令を示している。このように、擬似命令コードは、演算命令のオペランドの配置先がレジスタ１１２であるのかメモリ（内部メモリ１１６又はメインメモリ部１２０）であるのかが明示されていない。
【００３６】
一方、変換後の命令コードである加算命令「add  r0, r1」は、変数１がレジスタ０(r0)に配置され、変数２がレジスタ１(r1)に配置されている場合の変換例であり、レジスタ０(r0)に配置されている変数１とレジスタ１(r1)に配置されている変数２の加算命令を示している。なお、レジスタ０(r0)及びレジスタ１(r1)は、レジスタ１１２に含まれる領域である。
【００３７】
また、変換後の命令コードである加算命令「add  (mem0), r1」は、変数１がメモリ(mem0)に配置され、変数２がレジスタ１(r1)に配置されている場合の変換例であり、メモリ(mem0)に配置されている変数１とレジスタ１(r1)に配置されている変数２の加算命令を示している。なお、メモリ(mem0)は、内部メモリ１１６又はメインメモリ部１２０に含まれる領域である。
【００３８】
図１２は、変換マップテーブル１１８の一例を示す図である。
図１２に示したように、変換マップテーブル１１８は、処理プログラム内の各関数に定義されている各変数の配置先、平均使用頻度、過去の使用頻度等の情報を含む。但し、図１２では、過去の使用頻度の情報を省略して示している。
【００３９】
変換マップテーブル１１８に含まれる情報は、処理プログラムの実行に伴って、次のようにして動的に更新（変更）される。
まず、処理プログラム起動時において、各変数の配置先の情報は、例えば、処理プログラム中の各関数内での変数の定義順等によって優先度を設け、その優先度に応じてレジスタ１１２又はメモリ（内部メモリ１１６又はメインメモリ部１２０）に決定される。また、各変数の平均使用頻度及び過去の使用頻度の情報は０とされる。
【００４０】
その後、処理プログラムの処理対象となるデータが入力され、処理プログラムの実行が開始されると、処理プログラム中の擬似命令コードは、命令変換ユニット１１７により変換されて命令キャッシュ１１３へロードされる。命令変換ユニット１１７による変換の際には、変換マップテーブル１１８が参照され、次のような変換（オペランド変換ともいう）が行われる。変換マップテーブル１１８において配置先がレジスタ（レジスタ−１〜レジスタ−５）１１２となっている変数は、命令コードのオペランドの配置先が該当するレジスタ１１２となるような命令列に変換される。一方、変換マップテーブル１１８において配置先がメモリ（内部メモリ１１６又はメインメモリ部１２０）となっている変数は、命令コードのオペランドの配置先が該当するメモリとなるような命令列に変換される。
【００４１】
そして、このようにして変換された命令コードがプロセッサコア１１１に実行されて変数が使用されると、その変数毎に、変換マップテーブル１１８に含まれる過去の使用頻度の情報が更新されると共に、平均使用頻度の情報が更新される。
【００４２】
例えば、図１２に示した変換マップテーブル１１８において、関数[1]の変数[2]の平均使用頻度は「５０」であることを示し、関数[1]に定義されている変数の中で平均使用頻度が最も高いことを示している。このような平均使用頻度の情報は、変数の配置先の変更に使用される。例えば、図１２に示した変換マップテーブル１１８において、関数[2]の変数[1]は平均使用頻度が「７」であり、関数[2]の変数[5]は平均使用頻度が「２０」であることを示している。この場合には、関数[2]において、メモリ（内部メモリ１１６又はメインメモリ部１２０）に配置されている変数[5]が、レジスタ１１２に配置されている変数[1]よりも平均使用頻度が高くなっている為、変換マップテーブル１１８において、変数の配置先の入れ替えが行われる。すなわち、変数[5]の配置先がレジスタ１１２となり、変数[1]の配置先がメモリ（内部メモリ１１６又はメインメモリ部１２０）となるように、変換マップテーブル１１８において、変数の配置先の入れ替えが行われる。このようにして変数の配置先の入れ替えが行われることにより、変数の配置先を動的に変更（最適化）することが可能となる。また、このようにして変数の配置先の入れ替えが行われた後の変換マップテーブル１１８に含まれる各変数の配置先の情報に基づいて命令変換ユニット１１７による変換が行われることにより、処理の高速化を図ることができる。
【００４３】
なお、変換マップテーブル１１８において、プログラム起動時の各変数の配置先の情報は、例えば、それを予め内部メモリ１１６又はメインメモリ部１２０に格納しておき、プログラム起動時に読み出して変換マップテーブル１１８に格納するようにすることも可能である。この場合、プログラム起動時の各変数の配置先の情報は、例えば、処理プログラムの静的な解析結果に基づいて決定される。
【００４４】
図１３は、変換マップテーブル１１８に含まれる過去の使用頻度の情報の更新に係る動作の一例を示すフローチャートである。
図１３に示したように、図示しない命令キャッシュ１１３のコントローラによってリード要求（命令コードのロード指示）が行われると（Ｓ１０１）、次のような動作が行われる。まず、このリード要求に応じて、プロセッサコア１１１が命令コードを実行するために必要な擬似命令コードがメインメモリ部１２０の処理プログラム格納領域１２１からリードされ、命令変換ユニット１１７へ転送される（Ｓ１０２）。命令変換ユニット１１７では、変換マップテーブル１１８に含まれる各変数の配置先の情報に基づいて、オペランド変換により、転送された擬似命令コードが通常の命令コードに変換される（Ｓ１０３）。また、変換された命令コードがプロセッサコア１１１により実行されて変数が使用されると、その変数についての過去の使用頻度がインクリメントされるように、変換マップテーブル１１８に含まれる過去の使用頻度の情報が更新される（Ｓ１０４）。なお、変換マップテーブル１１８において、このようにしてインクリメントされた過去の使用頻度の情報は、詳しくは後述するように、平均使用頻度の情報を更新する際に使用される。
【００４５】
図１４は、処理プログラムの実行に伴って行われる変換マップテーブル１１８の更新手順の一例を説明する図である。
処理プログラムの実行によって行われるデータ処理は、連続するデータ処理を含む場合がある。一般的に、連続するデータ処理では、一定の処理の区切りを１単位（１処理ユニット）として、それを繰返し実行することで全体処理を実現する。例えば、動画像処理では１画面分の処理を１単位としてこれを繰り返し実行することで、物体認識処理や画像圧縮処理等といった画像処理を実現している。ここでは、そのような連続するデータ処理が行われる場合における変換マップテーブル１１８の更新手順の一例を説明する。
【００４６】
図１４に示したように、処理プログラムの実行中に行われる１処理ユニット毎の処理では、まず、再配置処理が行われる（Ｓ２０１）。この再配置処理では、詳しくは後述するように、変換マップテーブル１１８に含まれる各変数の平均使用頻度の情報に基づいて各変数の配置先が決定され、それを反映させるように、変換マップテーブル１１８に含まれる各変数の配置先の情報が更新（変更）される。
【００４７】
次に、処理プログラムの１処理ユニットが実行される（Ｓ２０２）。ここでは、上述のように、命令変換ユニット１１７によって変換マップテーブル１１８が参照され、擬似命令コードから通常の命令コードへの変換が行われ、変換された命令コードがプロセッサコア１１１によって実行される。
【００４８】
次に、頻度平均更新処理が行われる（Ｓ２０３）。この頻度平均更新処理では、Ｓ２０２においてプロセッサコア１１１により命令コードが実行されたときに使用された変数の使用頻度の情報が、１処理ユニット分の過去の使用頻度の情報として、変換マップテーブル１１８に追加される。なお、変換マップテーブル１１８は、図１４に示したように、過去の使用頻度の情報として、現在から過去所定数回（Ｎ回）分の各々の１処理ユニットの実行において使用された変数の使用頻度の情報を含むことができる。例えば、図１４の「過去データ１」は、今回（直近）の１処理ユニットの実行において使用された変数の使用頻度の情報を示し、「過去データＮ」は、（Ｎ−１）処理ユニット前の処理ユニットの実行において使用された変数の使用頻度の情報を示す。このように、プロセッサコア１１１により命令コードが実行されたときに使用される変数に応じて、変換マップテーブル１１８に含まれる過去の使用頻度の情報が更新される。
【００４９】
また、Ｓ２０３の頻度平均更新処理では、更に、変換マップテーブル１１８において、過去の使用頻度の情報に基づいて、各関数に定義されている各変数の使用頻度の平均値が求められ、平均使用頻度の情報が更新される。この場合、例えば、現在から過去Ｍ（但し、Ｍ≦Ｎ）回分の使用頻度の情報に基づいて、各関数に定義されている各変数の使用頻度の平均値が求められる。例えば、図１４に示した変換マップテーブル１１８に含まれる関数[2]の変数[3]の平均使用頻度「８」（網掛け部分参照）の情報は、現在から過去６回分の使用頻度（「１２」、「６」、「６」、「８」、「８」、「８」）の平均値から求められたものである。このようにして求められる平均使用頻度の情報を用いることにより、突発的（一時的）な使用頻度の変動による影響を軽減させることができる。
【００５０】
図１５は、上述の再配置処理（Ｓ２０１）の処理例を示すフローチャートである。
図１５に示した処理は、上述の再配置処理（Ｓ２０１）において、１処理ユニット内の各関数に対して行われる処理である。
【００５１】
図１５に示した処理において、Ｒｍは、変数の再配置済レジスタを示す。Ｒｎ＿ｍａｘは、関数内の変数を配置可能な最大レジスタ数を示す。ＶＳｉは、関数内の変数を平均使用頻度順に並べたときのｉ番目の変数を示す。
【００５２】
図１５に示したように、この処理では、まず、変換マップテーブル１１８に含まれる対象となる関数内に定義されている各変数の平均使用頻度の情報が参照される（Ｓ３０１）。なお、本処理が、処理プログラムの起動後２回目以降の１処理ユニットで行われる場合には、Ｓ３０１で参照される情報は、前回の１処理ユニットにおけるＳ２０３で更新された平均使用頻度の情報となる。次に、対象となる関数内に定義されている各変数の平均使用頻度の情報に基づいて平均使用頻度が高い順に並べられた変数ＶＳｉの配置先が、順次レジスタ１１２に決定される（Ｓ３０２）。そして、変数の配置先がレジスタ１１２に決定されたレジスタ数がＲｎ＿ｍａｘに達したら（Ｓ３０３がＹｅｓ）、残りの変数ＶＳｉの配置先がメモリ（内部メモリ１１６又はメインメモリ部１２０）に決定される（Ｓ３０４）。このような処理が、１処理ユニットに含まれる各関数に対して繰り返し行われる。これにより、変換マップテーブル１１８に含まれる各変数の平均使用頻度の情報に基づいて、平均使用頻度の高い変数を優先的にレジスタ１１２に再配置するように、変数の配置先を決定することができる。
【００５３】
なお、静的なコンパイルにおいて、レジスタ割り付けを最適化する手法として、例えば、PolettoとSarkarの“linear scan allocation”という手法が知られている（以下「手法１」という）。この手法１において、例えば、レジスタの使用期間に、上述の動的な情報（変換マップテーブル１１８に含まれる情報）を更に加味するようにすることで、より効率の良い変数の配置が可能となる（以下「手法２」という）。
【００５４】
図１６(a) は、手法１による変数の配置例を示す図である。図１６(b) は、手法２による変数の配置例を示す図である。
なお、図１６に示した例は、変数Ａのソースコード上の使用終了タイミングが全変数中で最長となっているものの、実際の実行時には判定文のfalse側の処理ルートで使用されておりtrue側の処理ルートでは使用されていない場合の例である。また、図１６において、Ｒ０、Ｒ１は、レジスタに含まれる領域を示す。
【００５５】
図１６(a) に示したように、動的な情報を加味しない手法１では、変数Ａをレジスタからメモリへ追い出すspill動作が行われている。これに対し、図１６(b) に示したように、動的な情報を加味した手法２では、例えば、実行される処理ルートの予測が行われ、判定文で実行されない処理ルートが判断される。その結果、変数Ａのspill動作は行われず、より最適な変数の配置とすることができる。
【００５６】
次に、本実施例に係るレジスタ配置最適化装置を含むデータ処理装置の具体例として、本実施例に係るレジスタ配置最適化装置を画像符号化装置に適用した例を説明する。
図１７は、本実施例に係るレジスタ配置最適化装置を含む画像符号化装置の構成例を示す図である。
【００５７】
なお、図１７において、図１０に示した要素と同一の要素については、同一の符号を付している。また、図１７に示した画像符号化装置において、本実施例に係るレジスタ配置最適化装置は、図１０に示したデータ処理装置の場合と同様に、命令変換ユニット１１７と変換マップテーブル１１８を含む。
【００５８】
図１７に示した画像符号化装置において、画像処理プロセッサ２１０の構成は、図１０に示したプロセッサＣＰＵ部１１０と基本的に同じである。また、ビデオ（Video）入力Ｉ／Ｆ（InterFace）部２２０は、外部のカメラ等から入力されるデータの入力処理を行う。ビデオ（Video）出力Ｉ／Ｆ（InterFace）部２３０は、外部のディスプレイ等への出力処理を行う。その他の構成については、図１０に示したデータ処理装置と基本的に同じである。
【００５９】
続いて、図１７に示した画像符号化装置の動作を、図１８及び図１９を用いて説明する。
図１８は、図１７に示した画像符号化装置の処理の流れの概要を模式的に示す図である。
【００６０】
図１８に示したように、カメラ等からの入力画像データは、ビデオ入力Ｉ／Ｆ部２２０、システムバス１６０、及びメモリコントローラ部１３０を介して、メインメモリ部１２０の処理データ格納領域１２２に蓄積される（図１８の矢印Ａ参照）。蓄積された画像データは、処理画像単位に、メモリコントローラ部１３０、システムバス１６０、及びシステムバスコントローラ１１５を介してデータキャッシュ１１４に読み出される（図１８の矢印Ｂ参照）。一方、メインメモリ部１２０の処理プログラム格納領域１２１に格納されている処理プログラム（擬似命令コードを含む）は、メモリコントローラ部１３０、システムバス１６０、及びシステムバスコントローラ１１５を介して命令変換ユニット１１７にロードされる（図１８の矢印Ｃ参照）。命令変換ユニット１１７では、変換マップテーブル１１８が参照され（図１８の矢印Ｄ参照）、その内容に基づいて擬似命令コードが通常の命令コードに変換されて命令キャッシュ１１３へ転送される（図１８の矢印Ｅ参照）。転送された命令コードは、プロセッサコア１１１により読み出され（図１８の矢印Ｆ参照）、その命令コードの実行が、例えばレジスタ１１２に配置されている変数が使用される等して行われる（図１８の矢印Ｇ参照）。このようにして処理プログラムが実行されると、それにより出力データが作成される。そして、その出力データが、データキャッシュ１１４、システムバスコントローラ１１５、及びシステムバス１６０を経由した後、例えば、通信Ｉ／Ｆ部１５０又はビデオ出力Ｉ／Ｆ部２３０を介して出力される（図１８の矢印Ｈ参照）。出力データは、例えば、画像圧縮データ等である。
【００６１】
図１９は、図１７に示した画像符号化装置の動作シーケンスの一例を示す図である。
図１９に示したように、カメラ等からの入力画像データは、ビデオ入力Ｉ／Ｆ部２２０等を介して、メインメモリ部１２０の処理データ格納領域１２２に蓄積され、画像保存が行われる（Ｓ４０１）。次に、メインメモリ部１２０の処理プログラム格納領域１２１に格納されている処理プログラム（擬似命令コードを含む）が処理画像単位で起動し（Ｓ４０２）、命令変換ユニット１１７にロードされる。命令変換ユニット１１７では、変換マップテーブル１１８が参照され（Ｓ４０３）、処理プログラム内の各関数に定義されている各変数の配置先が決定される（Ｓ４０４）。また、擬似命令コードが通常の命令コードに変換される（Ｓ４０５）。変換された命令コードは命令キャッシュ１１３へ転送され、その後、プロセッサコア１１１により読み出されて、その命令コードの実行が行われる（Ｓ４０６）。一方、命令変換ユニット１１７では、プロセッサコア１１１により命令コードが実行されて変数が使用されると、その変数の使用頻度がインクリメントされる（Ｓ４０７）等して変換マップテーブル１１８に含まれる情報が更新される。そして、このようにして処理プログラムが実行され、それにより作成された出力データ（画像データ等）は、例えば、通信Ｉ／Ｆ部１５０又はビデオ出力Ｉ／Ｆ部２３０を介して、通信回線や外部のディスプレイ等に出力される（Ｓ４０８）。
【００６２】
以上のように、本実施例に係るレジスタ配置最適化装置によれば、プログラム内の関数に定義されている変数の使用頻度に基づいて、使用頻度の高い変数が優先的にレジスタに配置されるように変数の配置先を動的に決定することができる。従って、変数の配置先を動的に最適化することができ、処理の高速化を図ることができる。また、このような最適化を、例えば動作モードの指定等といったユーザの特別な操作無しに、行うことができる。
【００６３】
また、プログラムの開発期間を、次のような理由により、短縮することもできる。
図２０は、従来の場合のプログラム開発期間と、本実施例に係るレジスタ配置最適化装置を採用した場合のプログラム開発期間との一例を示す図である。
【００６４】
図２０に示したように、例えば、従来の場合において、設計期間に１ヶ月、高速化のための修正期間（チューニング作業）に２ヶ月を要していたとする。この場合、本実施例に係るレジスタ配置最適化装置を採用した場合には、高速化のための修正期間が不要になるため、その分（２ヶ月）の開発期間の短縮を図ることができる。
【００６５】
また、本実施例に係るレジスタ配置最適化装置を含む画像処理装置においては、例えば、複数フレームの画像が入力された場合に、その複数フレームの画像に対する画像処理に応じた高速化が可能になる。
【００６６】
＜実施例２＞
実施例２に係るレジスタ配置最適化装置は、入力データ特徴算出部を更に含むと共に、変換マップテーブル１１８として複数の変換マップテーブルを含むことが、実施例１に係るレジスタ配置最適化装置と異なる。なお、入力データ特徴算出部はテーブル選択部の一例である。
【００６７】
本実施例に係るレジスタ配置最適化装置において、入力データ特徴算出部は、入力データの特徴を算出し、その算出結果に応じて、複数の変換マップテーブルの中から、対応する変換マップテーブルを選択する等の処理を行う。
【００６８】
図２１(a),(b),(c) は、入力データ特徴算出部の処理例を示すフローチャートである。図２１(a) は、その基本的な処理例を示すフローチャートであり、図２１(b),(c) は、その具体例を示すフローチャートである。
【００６９】
図２１(a) に示したように、入力データ特徴算出部の基本的な処理は、次のようになる。まず、入力データが受信されると（Ｓ５０１）、その入力データの差分が算出される（Ｓ５０２）。次に、複数の変換マップテーブルから、その差分に応じた変換マップテーブルが選択され（Ｓ５０３）、その旨が命令変換ユニット１１７に通知される（Ｓ５０４）。これにより、命令変換ユニット１１７では、入力データ特徴算出部により選択された変換マップテーブルを用いて擬似命令コードの変換が行われる。
【００７０】
具体的には、例えば、図２１(b) に示したように、入力データ（画像データ）が受信されると（Ｓ６０１）、その入力データのフレーム内差分が算出され（Ｓ６０２）、そのフレーム内差分の値が所定値よりも大きいか否かが判定される（Ｓ６０３）。ここで、その判定結果がＹｅｓの場合には、フレーム内処理用の変換マップテーブルが選択され、その旨が命令変換ユニット１１７に通知される（Ｓ６０４）。これにより、命令変換ユニット１１７では、入力データ特徴算出部により選択されたフレーム内処理用の変換マップテーブルを用いて擬似命令コードの変換が行われる。一方、Ｓ６０３の判定結果がＮｏの場合には、変換マップテーブルを変更しない旨が命令変換ユニット１１７に通知される（Ｓ６０５）。これにより、命令変換ユニット１１７では、デフォルトとして設定されている変換マップテーブルを用いて擬似命令コードの変換が行われる。
【００７１】
或いは、例えば、図２１(c) に示したように、入力データ（画像データ）が受信されると（Ｓ７０１）、その入力データのフレーム間差分が算出され（Ｓ７０２）、そのフレーム間差分の値が所定値よりも大きいか否かが判定される（Ｓ７０３）。ここで、その判定結果がＹｅｓの場合には、フレーム間処理用の変換マップテーブルが選択され、その旨が命令変換ユニット１１７に通知される（Ｓ７０４）。これにより、命令変換ユニット１１７では、入力データ特徴算出部により選択されたフレーム間処理用の変換マップテーブルを用いて擬似命令コードの変換が行われる。一方、Ｓ７０３の判定結果がＮｏの場合には、変換マップテーブルを変更しない旨が命令変換ユニット１１７に通知される（Ｓ７０５）。これにより、命令変換ユニット１１７では、デフォルトとして設定されている変換マップテーブルを用いて擬似命令コードの変換が行われる。
【００７２】
このような図２１(b) 又は図２１(c) に示した処理により、フレーム内差分又はフレーム間差分が大きい画像においては、変換マップテーブルが切り替えられ、その切り替えられた変換マップテーブルを用いて擬似命令コードの変換が行われる。このようにすることで、例えば、動画像におけるシーンチェンジ等において、画像データに揺らぎが発生したとしても変換マップテーブルに含まれる情報に影響を与えずに変数の配置先を切り替えることができる。
【００７３】
次に、本実施例に係るレジスタ配置最適化装置を画像符号化装置に適用した例を説明する。
図２２は、本実施例に係るレジスタ配置最適化装置を含む画像符号化装置の構成例を示す図である。
【００７４】
なお、図２２において、図１７に示した要素と同一の要素については、同一の符号を付している。また、図２２に示した画像符号化装置において、本実施例に係るレジスタ配置最適化装置は、命令変換ユニット１１７と複数の変換マップテーブル１１８と入力画像特徴算出ユニット３１１を含む。
【００７５】
図２２に示した画像符号化装置において、画像処理プロセッサ２１０の構成は、入力画像特徴算出ユニット３１１を更に含むと共に、複数の変換マップテーブル１１８を含む以外は、図１７に示した画像処理プロセッサ２１０と基本的に同じである。なお、入力画像特徴算出ユニット３１１は、上記の入力データ特徴算出部の一例である。その他の構成については、図１７に示した画像符号化装置と基本的に同じである。
【００７６】
続いて、図２２に示した画像符号化装置の動作を、図２３及び図２４を用いて説明する。
図２３は、図２２に示した画像符号化装置の処理の流れの概要を模式的に示す図である。
【００７７】
図２３に示したように、カメラ等からの入力画像データは、ビデオ入力Ｉ／Ｆ部２２０、システムバス１６０、及びメモリコントローラ部１３０を介して、メインメモリ部１２０の処理データ格納領域１２２に蓄積される（図２３の矢印Ａ参照）。蓄積された画像データは、処理画像単位に、メモリコントローラ部１３０、システムバス１６０、及びシステムバスコントローラ１１５を介してデータキャッシュ１１４に読み出される（図２３の矢印Ｂ参照）。また、これと共に、それが入力画像特徴算出ユニット３１１に入力される（図２３の矢印Ｃ参照）。入力画像特徴算出ユニット３１１では、入力された画像データのフレーム内差分又はフレーム間差分が算出される。そして、その算出結果に応じて、対応する変換マップテーブル１１８の選択又は変換マップテーブル１１８の変更無しの通知が、命令変換ユニット１１７に対して行われる（図２３の矢印Ｄ参照）。一方、メインメモリ部１２０の処理プログラム格納領域１２１に格納されている処理プログラム（擬似命令コードを含む）は、メモリコントローラ部１３０、システムバス１６０、及びシステムバスコントローラ１１５を介して命令変換ユニット１１７にロードされる（図２３の矢印Ｅ参照）。命令変換ユニット１１７では、入力画像特徴算出ユニット３１１からの通知に応じて、対応する変換マップテーブル１１８が選択、参照される（図２３の矢印Ｆ参照）。そして、その変換マップテーブル１１８の内容に基づいて擬似命令コードが通常の命令コードに変換されて命令キャッシュ１１３へ転送される（図２３の矢印Ｇ参照）。転送された命令コードは、プロセッサコア１１１により読み出され（図２３の矢印Ｈ参照）、その命令コードの実行が、例えばレジスタ１１２に配置されている変数が使用される等して行われる（図２３の矢印Ｉ参照）。このようにして処理プログラムが実行されると、それにより出力データが作成される。そして、その出力データが、データキャッシュ１１４、システムバスコントローラ１１５、及びシステムバス１６０を経由した後、例えば、通信Ｉ／Ｆ部１５０又はビデオ出力Ｉ／Ｆ部２３０を介して出力される（図２３の矢印Ｊ参照）。出力データは、例えば、画像圧縮データ等である。
【００７８】
図２４は、図２２に示した画像符号化装置の動作シーケンスの一例を示す図である。
図２４に示したように、カメラ等からの入力画像データは、ビデオ入力Ｉ／Ｆ部２２０等を介して、メインメモリ部１２０の処理データ格納領域１２２に蓄積され、画像保存が行われる（Ｓ８０１）。次に、メインメモリ部１２０の処理プログラム格納領域１２１に格納されている処理プログラム（擬似命令コードを含む）が処理画像単位で起動し（Ｓ８０２）、命令変換ユニット１１７にロードされる。入力画像特徴算出ユニット３１１では、入力画像データの差分（フレーム内差分又はフレーム間差分）が算出される（Ｓ８０３）。また、その算出結果に応じて、対応する変換マップテーブル１１８の選択又は変換マップテーブル１１８の変更無しの通知が命令変換ユニット１１７に対して行われる（Ｓ８０４）。命令変換ユニット１１７では、入力画像特徴算出ユニット３１１からの通知に応じて、対応する変換マップテーブル１１８が選択、参照され（Ｓ８０５）、処理プログラム内の各関数に定義されている各変数の配置先が決定される（Ｓ８０６）。また、擬似命令コードが通常の命令コードに変換される（Ｓ８０７）。変換された命令コードは命令キャッシュ１１３へ転送され、その後、プロセッサコア１１１により読み出されて、その命令コードの実行が行われる（Ｓ８０８）。一方、命令変換ユニット１１７では、プロセッサコア１１１により命令コードが実行されて変数が使用されると、その変数の使用頻度がインクリメントされる（Ｓ８０９）等して変換マップテーブル１１８に含まれる情報が更新される。そして、このようにして処理プログラムが実行され、それにより作成された出力データ（画像データ等）は、例えば、通信Ｉ／Ｆ部１５０又はビデオ出力Ｉ／Ｆ部２３０を介して、通信回線や外部のディスプレイ等に出力される（Ｓ８１０）。
【００７９】
なお、入力画像特徴算出ユニット３１１が、選択した変換マップテーブル１１８を命令変換ユニット１１７に通知する方法としては、次のような方法がある。
例えば、入力画像特徴算出ユニット３１１は、選択した変換マップテーブル１１８に対応する変換マップテーブル選択値の情報を命令変換ユニット１１７へ通知する。これを受けた命令変換ユニットは、その変換マップテーブル選択値の情報に基づいて、対応する変換マップテーブル１１８を選択する。なお、この場合、複数の変換マップテーブル１１８の各々には、対応する変換マップテーブル選択値の情報が含まれている。
【００８０】
図２５は、各々が変換マップテーブル選択値の情報を含む複数の変換マップテーブル１１８の例を示す図である。
図２５に示したように、複数の変換マップテーブル１１８の各々は、対応する変換マップテーブル選択値の情報を含む。例えば、変換マップテーブル１１８ａは、変換マップテーブル選択値が「１」である情報を含み、変換マップテーブル１１８ｂは、変換マップテーブル選択値が「２」である情報を含む。なお、図２５に示した変換マップテーブル１１８ａ、１１８ｂでは、過去の使用頻度の情報を省略して示している。
【００８１】
以上のように、本実施例に係るレジスタ配置最適化装置によれば、命令変換ユニット１１７が使用する（参照、更新する）変換マップテーブル１１８を、入力データの特徴に応じた変換マップテーブル１１８とすることができる。従って、例えば、入力画像のシーンに応じて、適応的に変換マップテーブル１１８が使用されるようになるので、画像処理の高速化を図ることができる。
【００８２】
また、上述の実施例１に係るレジスタ配置最適化装置と同様に、プログラムの開発期間を短縮することもできる。
また、本実施例に係るレジスタ配置最適化装置を含む画像処理装置においては、例えば、複数フレームの画像が入力された場合に、その複数フレームの画像の特徴に応じた高速化が可能になる。
【００８３】
なお、上述の実施例１及び２に係るレジスタ配置最適化装置では、プロセッサコア１１１により命令コードが実行されたときに使用された変数に応じて、変換マップテーブル１１８に含まれる、変数の過去の使用頻度及び平均使用頻度の情報が更新されるものであった。これを、例えば、命令変換ユニット１１７により擬似命令コードが変換された際に使用された変数に応じて、行うようにすることも可能である。
【００８４】
また、上述の実施例１及び２に係るレジスタ配置最適化装置は、例えば、次のようなコンピュータシステムによって実現することも可能である。
図２６は、そのコンピュータシステムの構成例を示す図である。
【００８５】
図２６に示したように、このコンピュータシステムは、ＣＰＵ４０１、ＲＯＭ４０２、ＲＡＭ４０３、通信インタフェース４０４、記憶装置４０５、入出力装置４０６、可搬型記憶媒体の読取り装置４０７、及び、これらの全てが接続されたバス４０８を含む。なお、ＲＯＭは Read Only Memory である。
【００８６】
記憶装置３０５としてはハードディスク、磁気ディスクなど様々な形式の記憶装置を使用することができる。
例えば、実施例１に係るレジスタ配置最適化装置を本コンピュータシステムにより実現する場合には、記憶装置４０５、またはＲＯＭ４０２に、命令変換ユニット１１７等が行う動作（処理）のためのプログラム等が格納される。また、ＲＡＭ４０３には、変換マップテーブル１１８等が格納される。そして、そのプログラムがＣＰＵ４０１によって実行されることにより、実施例１に係るレジスタ配置最適化装置が実現される。
【００８７】
また、例えば、実施例２に係るレジスタ配置最適化装置を本コンピュータシステムにより実現する場合には、記憶装置４０５、またはＲＯＭ４０２に、命令変換ユニット１１７及び入力データ特徴算出部等が行う動作（処理）のためのプログラム等が格納される。また、ＲＡＭ４０３には、複数の変換マップテーブル１１８等が格納される。そして、そのプログラムがＣＰＵ４０１によって実行されることにより、実施例２に係るレジスタ配置最適化装置が実現される。
【００８８】
このようなプログラムは、プログラム提供者４０９からネットワーク４１０、および通信インタフェース４０４を介して、例えば記憶装置４０５に格納されて、ＣＰＵ４０１によって実行されることも可能である。また、市販され、流通している可搬型記憶媒体４１１に格納され、読取り装置４０７にセットされて、ＣＰＵ４０１によって実行されることも可能である。可搬型記憶媒体４１１としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＤＶＤディスク、ＵＳＢメモリなど様々な形式の記憶媒体を使用することができる。
【００８９】
なお、本コンピュータシステムにおいて、通信インターフェース４０４、記憶装置４０５、入出力装置４０６、及び読み取り装置４０７は無くても良い。
以上、実施例を説明したが、本発明は、上述した実施例に限定されることなく、本発明の要旨を逸脱しない範囲内で種々の改良・変更が可能である。
【００９０】
以上の実施の形態に関し、更に以下の付記を開示する。
（付記１）
命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、前記レジスタに配置される変数を最適化する方法であって、
プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルを参照し、前記変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又はメモリに決定し、
前記決定された変数の配置先を、前記変換テーブルに含まれる前記変数の配置先の情報に反映し、
前記変換テーブルに含まれる前記変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、前記プロセッサコアが実行可能な命令コードに変換し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の使用頻度の情報を更新する、
ことを特徴とするレジスタ配置最適化方法。
（付記２）
前記変換テーブルに含まれる前記変数の使用頻度の情報は、変数の平均使用頻度及び過去の使用頻度の情報を含み、
前記決定では、前記変換テーブルに含まれる前記変数の平均使用頻度の情報に基づいて、平均使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又は前記メモリに決定し、
前記更新では、前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の過去の使用頻度の情報を更新すると共に、前記変数の過去の使用頻度の情報に基づいて前記変換テーブルに含まれる前記変数の平均使用頻度の情報を更新する、
ことを特徴とする付記１記載のレジスタ配置最適化方法。
（付記３）
前記変換テーブルは、複数の変換テーブルの中から、前記プロセッサが処理する入力データの特徴に応じて選択された変換テーブルである、
ことを特徴とする付記１又は２記載のレジスタ配置最適化方法。
（付記４）
前記入力データは画像データであり、
前記選択された変換テーブルは、前記画像データのフレーム内差分又はフレーム間差分に応じて選択された変換テーブルである、
ことを特徴とする付記３記載のレジスタ配置最適化方法。
（付記５）
命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、前記レジスタに配置される変数を最適化するプログラムであって、
プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルを参照し、前記変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又はメモリに決定し、
前記決定された変数の配置先を、前記変換テーブルに含まれる前記変数の配置先の情報に反映し、
前記変換テーブルに含まれる前記変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、前記プロセッサコアが実行可能な命令コードに変換し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の使用頻度の情報を更新する、
という処理をコンピュータに実行させるレジスタ配置最適化プログラム。
（付記６）
前記変換テーブルに含まれる前記変数の使用頻度の情報は、変数の平均使用頻度及び過去の使用頻度の情報を含み、
前記決定では、前記変換テーブルに含まれる前記変数の平均使用頻度の情報に基づいて、平均使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又は前記メモリに決定し、
前記更新では、前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の過去の使用頻度の情報を更新すると共に、前記変数の過去の使用頻度の情報に基づいて前記変換テーブルに含まれる前記変数の平均使用頻度の情報を更新する、
ことを特徴とする付記５記載のレジスタ配置最適化プログラム。
（付記７）
前記変換テーブルは、複数の変換テーブルの中から、前記プロセッサが処理する入力データの特徴に応じて選択された変換テーブルである、
ことを特徴とする付記５又は６記載のレジスタ配置最適化プログラム。
（付記８）
前記入力データは画像データであり、
前記選択された変換テーブルは、前記画像データのフレーム内差分又はフレーム間差分に応じて選択された変換テーブルである、
ことを特徴とする付記７記載のレジスタ配置最適化プログラム。
（付記９）
命令コードを実行するプロセッサコアとレジスタとを含むプロセッサにおいて、前記レジスタに配置される変数を最適化する装置であって、
プログラム内の関数に定義されている変数の配置先及び使用頻度の情報を含む変換テーブルと、
前記変換テーブルに含まれる前記変数の配置先の情報に基づいて、演算命令のオペランドの配置先が指定されていない擬似命令コードを、前記プロセッサコアが実行可能な命令コードに変換する命令変換部と、
を備え、
前記命令変換部は、
前記変換テーブルに含まれる前記変数の使用頻度の情報に基づいて、使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又はメモリに決定し、
前記決定された変数の配置先を、前記変換テーブルに含まれる前記変数の配置先の情報に反映し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の使用頻度の情報を更新する、
ことを特徴とするレジスタ配置最適化装置。
（付記１０）
前記変換テーブルに含まれる前記変数の使用頻度の情報は、変数の平均使用頻度及び過去の使用頻度の情報を含み、
前記命令変換部は、
前記変換テーブルに含まれる前記変数の平均使用頻度の情報に基づいて、平均使用頻度の高い変数が優先的に前記レジスタに配置されるように、変数の配置先を前記レジスタ又は前記メモリに決定し、
前記変換された命令コードを前記プロセッサコアが実行する際に使用される変数に応じて、前記変換テーブルに含まれる前記変数の過去の使用頻度の情報を更新すると共に、前記変数の過去の使用頻度の情報に基づいて前記変換テーブルに含まれる前記変数の平均使用頻度の情報を更新する、
ことを特徴とする付記９記載のレジスタ配置最適化装置。
（付記１１）
複数の変換テーブルの中から、前記プロセッサが処理する入力データの特徴に応じた変換テーブルを選択するテーブル選択部を更に備え、
前記命令変換部が参照、更新する変換テーブルは、前記テーブル選択部により選択された変換テーブルである、
ことを特徴とする付記９又は１０記載のレジスタ配置最適化装置。
（付記１２）
前記入力データは画像データであり、
前記テーブル選択部は、前記複数の変換テーブルの中から、前記プロセッサが処理する画像データのフレーム内差分又はフレーム間差分に応じた変換テーブルを選択する、
ことを特徴とする付記１１記載のレジスタ配置最適化装置。
【符号の説明】
【００９１】
１１０      プロセッサＣＰＵ部
１１１      プロセッサコア
１１２      レジスタ
１１３      命令キャッシュ
１１４      データキャッシュ
１１５      システムバスコントローラ
１１６      内部メモリ
１１７      命令変換ユニット
１１８      変換マップテーブル
１２０      メインメモリ部
１２１      処理プログラム格納領域
１２２      処理データ格納領域
１２３      処理結果格納領域
１３０      メモリコントローラ部
１４０      周辺入出力ＩＦ部
１５０      通信ＩＦ部
１６０      システムバス
１７１      命令キャッシュ
１７２      命令フェッチ部
１７３      バイトコードアクセレータ部１７３
１７４      セレクター
１７５      デコード部
２１０      画像処理プロセッサ
２２０      ビデオ入力Ｉ／Ｆ部
２３０      ビデオ出力Ｉ／Ｆ部
３１１      入力画像特徴算出ユニット
【図１】
0005630352.tif 000002
【図２】
0005630352.tif 000003
【図３】
0005630352.tif 000004
【図４】
0005630352.tif 000005
【図５】
0005630352.tif 000006
【図６】
0005630352.tif 000007
【図７】
0005630352.tif 000008
【図９】
0005630352.tif 000009
【図１０】
0005630352.tif 000010
【図１１】
0005630352.tif 000011
【図１２】
0005630352.tif 000012
【図１３】
0005630352.tif 000013
【図８】
0005630352.tif 000014
【図１４】
0005630352.tif 000015
【図１５】
0005630352.tif 000016
【図１６】
0005630352.tif 000017
【図１７】
0005630352.tif 000018
【図１８】
0005630352.tif 000019
【図１９】
0005630352.tif 000020
【図２０】
0005630352.tif 000021
【図２１】
0005630352.tif 000022
【図２２】
0005630352.tif 000023
【図２３】
0005630352.tif 000024
【図２４】
0005630352.tif 000025
【図２５】
0005630352.tif 000026
【図２６】
0005630352.tif 000027