(57)【特許請求の範囲】
【請求項１】
回路の構成を示すコードがロードされることにより前記回路が構成される再構成可能集積回路と、
前記再構成可能集積回路にコードがロードされていることを示す使用中情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶するメモリと、
所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、前記再構成可能集積回路にロードされているコードについての、該コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられた対応付け情報が格納されているバッファを、前記命令に基づいて検索し、前記所定の仮想アドレスが前記バッファにヒットしたとき、前記所定のコードがロードされていると判定し、前記所定の仮想アドレスが前記バッファにヒットしなかったとき、前記再構成可能集積回路へ前記所定のコードを送信して前記リソース情報が示す前記未使用領域に前記所定のコードをロードさせることによって、前記所定のコードが示す所定の回路を構成すると共に、前記メモリに記憶されている前記使用中情報及び前記リソース情報と前記バッファに格納されている前記対応付け情報とについての、前記所定のコードのロードに応じた更新を行う処理部と、
を備える情報処理装置。
【請求項２】
前記処理部は、前記所定の回路を前記未使用領域に構成したとき、前記所定の仮想アドレスに対応する前記メモリの物理アドレスに、前記所定のコードがロードされていることを示す情報を書き込むことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記処理部は、前記所定の回路を前記未使用領域に構成したとき、前記所定のコードがロードされていることを示す情報を取得し、前記所定の回路を実行することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記処理部は、前記所定の仮想アドレスが前記バッファにヒットしなかったとき、前記再構成可能集積回路内に前記未使用領域がない場合、前記所定の回路が実行する処理と同等の処理を前記処理部により実行することを特徴とする請求項１記載の情報処理装置。
【請求項５】
回路の構成を示すコードがロードされることにより前記回路が構成される再構成可能集積回路と、前記再構成可能集積回路にコードがロードされていることを示す使用中情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶するメモリと、を備える情報処理装置が実行する情報処理方法であって、
所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、
前記再構成可能集積回路にロードされているコードについての、該コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられた対応付け情報が格納されているバッファを、前記命令に基づいて検索し、
前記所定の仮想アドレスが前記バッファにヒットした場合、前記所定のコードがロードされていると判定し、
前記所定の仮想アドレスが前記バッファにヒットしなかった場合、前記再構成可能集積回路へ前記所定のコードを送信して前記リソース情報が示す前記未使用領域に前記所定のコードをロードさせることによって、前記所定のコードが示す所定の回路を構成すると共に、前記メモリに記憶されている前記使用中情報及び前記リソース情報と前記バッファに格納されている前記対応付け情報とについての、前記所定のコードのロードに応じた更新を行う
処理を備える情報処理方法。
【請求項６】
回路の構成を示すコードがロードされることにより前記回路が構成される再構成可能集積回路と、前記再構成可能集積回路にコードがロードされていることを示す使用中情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶するメモリと、を備えるコンピュータに、
所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、
前記再構成可能集積回路にロードされているコードについての、該コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられた対応付け情報が格納されているバッファを、前記命令に基づいて検索し、
前記所定の仮想アドレスが前記バッファにヒットした場合、前記所定のコードがロードされていると判定し、
前記所定の仮想アドレスが前記バッファにヒットしなかった場合、前記再構成可能集積回路へ前記所定のコードを送信して前記リソース情報が示す前記未使用領域に前記所定のコードをロードさせることによって、前記所定のコードが示す所定の回路を構成すると共に、前記メモリに記憶されている前記使用中情報及び前記リソース情報と前記バッファに格納されている前記対応付け情報とについての、前記所定のコードのロードに応じた更新を行う
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、Central Processing Unit（ＣＰＵ）とField-Programmable Gate Array（ＦＰＧＡ）の混載パッケージが発表されるなど、コンピューティングのアクセラレーションとしてＦＰＧＡの重要性が増している。ＣＰＵとＦＰＧＡの混載パッケージでは、ＣＰＵとＦＰＧＡとがメモリコヒーレントバスで接続され、ＣＰＵとＦＰＧＡのメモリ共有が可能になっている。
【０００３】
また、複数のリージョンがあらかじめ用意され、リージョンごとの書き換えが可能なＦＰＧＡが知られている。
【０００４】
アプリケーションの実行中にＦＰＧＡを動的にプログラムする方法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２１５５９２号公報
【特許文献２】特開２０１３−４５２１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１では、ある関数がＦＰＧＡにプログラムされているかどうかのチェックをコプロセッサが行い、その結果を結果レジスタに格納し、プロセッサが結果レジスタをチェックして、ある関数がＦＰＧＡで実行可能か判定している。特許文献１では、ＦＰＧＡで実行可能であるかの判定に際してレジスタをチェックしており、細粒度の処理を行う場合、レジスタのチェックがオーバーヘッドとして表れる。
【０００７】
本発明は、再構成可能集積回路にコードがロードされているか否かを高速に判定することを目的とする。
【課題を解決するための手段】
【０００８】
実施の形態に係る情報処理装置は、再構成可能集積回路と、メモリと、処理部と、を備える。
【０００９】
前記再構成可能集積回路と、回路の構成を示すコードがロードされることにより前記回路が構成される。
【００１０】
前記メモリは、前記再構成可能集積回路にコードがロードされていることを示す使用中情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶する。
【００１１】
前記処理部は、所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、前記再構成可能集積回路にロードされているコードについての、該コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられた対応付け情報が格納されているバッファを、前記命令に基づいて検索する。前記処理部は、前記所定の仮想アドレスが前記バッファにヒットしたとき、前記所定のコードがロードされていると判定する。前記処理部は、前記所定の仮想アドレスが前記バッファにヒットしなかったとき、前記再構成可能集積回路へ前記所定のコードを送信して前記リソース情報が示す前記未使用領域に前記所定のコードをロードさせることによって、前記所定のコードが示す所定の回路を構成すると共に、前記メモリに記憶されている前記使用中情報及び前記リソース情報と前記バッファに格納されている前記対応付け情報とについての、前記所定のコードのロードに応じた更新を行う。
【発明の効果】
【００１２】
実施の形態に係る情報処理装置によれば、再構成可能集積回路にコードがロードされているか否かを高速に判定することが出来る。
【図面の簡単な説明】
【００１３】
【図１】実施の形態に係る情報処理装置の構成図である。
【図２】ＦＰＧＡリソーステーブルの例である。
【図３】マッピングテーブルの例である。
【図４】ＦＰＧＡにコードがロード済みの場合のシーケンス図である。
【図５】ＦＰＧＡにコードがロードされる場合のシーケンス図である。
【図６】ＦＰＧＡにコードがロードされない場合のシーケンス図である。
【図７】情報処理装置（コンピュータ）のハードウェア図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照しながら実施の形態について説明する。
図１は、実施の形態に係る情報処理装置の構成図である。
【００１５】
情報処理装置１０１は、処理部１１１、メモリ１２１、ＦＰＧＡ１３１−ｉ（ｉ＝１，２）、およびフラッシュメモリ１４１を備える。情報処理装置１０１は、例えば、パーソナルコンピュータ（ＰＣ）やサーバ等のコンピュータである。
【００１６】
処理部１１１は、情報処理装置１０１全体を制御する処理装置である。処理部１１１は、ユーザアプリケーション１４２やOperating System（ＯＳ）１４３をメモリ１２１上に読み出して、種々の処理を実行する。処理部１１１は、アプリケーション部１１２、ＯＳ部１１３、リソースマネージャー１１５、およびTranslation Lookaside Buffer（ＴＬＢ）１１６を備える。処理部１１１は、例えば、ＣＰＵである。
【００１７】
アプリケーション部１１２は、フラッシュメモリ１４１からユーザアプリケーション１４２をメモリ１２１上に読み出して、実行する。アプリケーション部１１２は、所定のコード１４５−ｋがＦＰＧＡ１３１−ｉにロードされることにより構成される所定の回路を使用してある処理を行いたい場合、所定のコード１４５−ｋがＦＰＧＡ１３１−ｉにロードされているかチェックする。アプリケーション部１１２は、所定のコード１４５−ｋに対応付けられた仮想アドレスに格納される値を読み出し、読み出した値に応じて、所定のコード１４５−ｋがＦＰＧＡ１３１−ｉにロードされているか判定する。すなわちアプリケーション部１１２は、ＦＰＧＡ１３１−ｉを利用可能であるか（ＦＰＧＡ１３１−ｉを利用したハードウェア処理が可能か）判定する。例えば、アプリケーション部１１２は、所定のコード１４５−ｋに対応付けられた仮想アドレスから読み出した値が１の場合、所定のコード１４５−ｋがＦＰＧＡ１３１−ｉにロードされている（ＦＰＧＡ１３１−ｉを利用可能）と判定する。また、アプリケーション部１１２は、所定のコード１４５−ｋに対応付けられた仮想アドレスから読み出した値が０の場合、所定のコード１４５−ｋがＦＰＧＡ１３１−ｉにロードされていない（ＦＰＧＡ１３１−ｉを利用不可）と判定する。
【００１８】
ＯＳ部１１３は、フラッシュメモリ１４１からＯＳ１４３をメモリ１２１上に読み出して、実行する。ＯＳ部１１３は、ページテーブル１２４の管理を行う。
【００１９】
ＯＳ部は、例外処理部１１４を備える。例外処理部１１４は、ＴＬＢのミスヒット時の例外処理を行う。例外処理部１１４は、ＴＬＢのミスヒット時にリソースマネージャー１１５を呼び出す。
【００２０】
リソースマネージャー１１５は、フラッシュメモリ１４１からリソース管理アプリケーション１４４をメモリ１２１上に読み出して、実行する。リソースマネージャー１１５は、ＦＰＧＡリソーステーブル１２２を参照し、ＦＰＧＡ１３１−ｉの状況に応じて、ＦＰＧＡ１３１−ｉにコード１４５−ｋを書き込む。詳細には、リソースマネージャー１１５は、ＦＰＧＡ１３１−ｉに指示とコード１４５−ｋを送信し、ＦＰＧＡ１３１−ｉの制御部１３２−ｉは、受信したコード１４５−ｋをリージョン１３３−ｉ−ｊにロードする。すなわち、制御部１３２−ｉは、受信したコード１４５−ｋで示される回路をリージョン１３３−ｉ−ｊに構成する。また、リソースマネージャー１１５は、ＦＰＧＡリソーステーブル１２２およびマッピングテーブル１２３の設定を行う。
【００２１】
ＴＬＢ１１６は、仮想アドレスとメモリ１２１の物理アドレスとが対応付けられた情報を格納するキャッシュである。ＴＬＢ１１６には、ページテーブル１２４の情報の一部が格納される。ＴＬＢ１１６の検索は、ハードウェアにより実行される。
【００２２】
メモリ１２１は、情報処理装置１０１で使用されるプログラムやデータを一時的に格納する記憶装置である。メモリ１２１は、例えば、Dynamic Random Access Memory（ＤＲＡＭ）等である。メモリ１２１は、ＦＰＧＡリソーステーブル１２２、マッピングテーブル１２３、およびページテーブル１２４を格納する。
【００２３】
ＦＰＧＡリソーステーブル１２２は、ＦＰＧＡ１３１−ｉの使用状況などの状態が記載されたテーブルである。尚、ＦＰＧＡリソーステーブル１２２の詳細は後述する。
【００２４】
マッピングテーブル１２３は、コード１４５−ｋと仮想アドレスとの対応関係が記載されたテーブルである。尚、マッピングテーブルの１２３の詳細は後述する。マッピングテーブル１２３は、リソースマネージャー１１５により設定され、コード１４５−ｋがフラッシュメモリ１４１に格納またはフラッシュメモリ１４１から削除されると、それに応じて更新される。各コード１４５−ｋに対応付けられる各仮想アドレスは、リソースマネージャー１１５により、重複しないように適当な値が設定される。
【００２５】
ページテーブル１２４は、仮想アドレスとメモリ１２１の物理アドレスとの対応関係が記載されたテーブルである。ページテーブル１２４は、ＯＳ１４３におけるページング方式の仮想記憶システムで使われる。ページテーブル１２４には、仮想アドレス空間を「ページ」と呼ばれる所定のサイズに分割した領域の仮想アドレスとメモリ１２１の物理アドレスとの対応関係が記載されている。尚、ページテーブル１２４の数は一例であり、これに限られるものではない。
【００２６】
ＦＰＧＡ１３１−ｉは、制御部１３２−ｉおよびリージョン１３３−ｉ−ｊ（ｊ＝１〜ｎ）を備える。ＦＰＧＡ１３１−ｉは、再構成可能集積回路の一例である。
【００２７】
制御部１３２−ｉは、処理部１１１から指示とコード１４５−ｋを受信し、リージョン１３３−ｉ−ｊに受信したコード１４５−ｋを書き込む（ロードする）。すなわち、制御部１３２−ｉは、受信したコード１４５−ｋで示される回路をリージョン１３３−ｉ−ｊに構成する。上記処理は、コンフィグレーションとも呼ばれる。
【００２８】
リージョン１３３−ｉ−ｊは、コード１４５−ｋで示される回路が構成される予め設定された領域である。制御部１３２−ｉは、リージョン１３３−ｉ−ｊごとに書き換えが可能である。尚、リージョン１３３−ｉ−ｊは、リージョン＃ｊと表記する場合がある。
【００２９】
尚、ＦＰＧＡ１３１−ｉの数およびリージョン１３３−ｉ−ｊの数は一例であり、これに限られるものではない。
【００３０】
フラッシュメモリ１４１は、情報処理装置１０１で使用されるプログラムやデータを格納する不揮発性の半導体記憶装置である。ユーザアプリケーション１４２、ＯＳ１４３、リソース管理アプリケーション１４４、およびコード１４５−ｋ（ｋ＝１〜Ｍ）を格納する。
【００３１】
ユーザアプリケーション１４２は、ユーザが要求する処理を実行するプログラムである。
【００３２】
ＯＳ１４３は、情報処理装置１０１の制御、ページテーブル１２４の設定、および例外処理などを行うプログラムである。
【００３３】
リソース管理アプリケーション１４４は、ＦＰＧＡ１３１−ｉへのコード１４５−ｋの書き込みやＦＰＧＡリソーステーブル１２２の更新などの管理を行うプログラムである。
【００３４】
コード１４５−ｋは、ＦＰＧＡ１３１−ｉのリージョン１３２−ｉ−ｊに構成される回路を示す情報である。以下、コード１４５−ｋは、コード＃ｋと表記する場合がある。
【００３５】
図２は、ＦＰＧＡリソーステーブルの例である。
ＦＰＧＡリソーステーブル１２２は、項目として、ＩＤ、ＦＰＧＡ番号、リージョン番号、ＩｎＵｓｅ、コード番号、およびプロセスＩＤを有し、これらが関連付けられて記載されている。
【００３６】
ＩＤは、リージョン１３３−ｉ−ｊに割り当てられた通し番号である。
ＦＰＧＡ番号は、ＦＰＧＡ１３１−ｉを識別する番号である。
リージョン番号は、リージョン１３３−ｉ−ｊを識別する番号である。
【００３７】
ＩｎＵｓｅは、リージョン１３３−ｉ−ｊが使用されているか否か、すなわち当該リージョン１３３−ｉ−ｊにコード１４５−ｋがロードされているか否かを示す。“Ｙｅｓ”は使用中を示し、“Ｎｏ”は未使用であることを示す。すなわち、ＩｎＵｓｅが“Ｎｏ”である場合、対応するリージョン１３３−ｉ−ｊにコード１４５−ｋをロードすることにより回路を構成して実行、すなわちハードウェア処理が可能であることを示す。
【００３８】
コード番号は、リージョン１３３−ｉ−ｊにロードされているコード１４５−ｋを示す。実施の形態では、コード番号ｋはコード１４５−ｋを示す。
【００３９】
プロセスＩＤは、リージョン１３３−ｉ−ｊにロードされているコード１４５−ｋにより構成された回路を使用しているＯＳ１４３で使用されているプロセスのＩＤ（識別子）を示す。
【００４０】
リソースマネージャー１１５は、ＦＰＧＡリソーステーブル１２２に含まれるプロセスＩＤが示すプロセスが動作中でない場合、ＩｎＵｓｅを“Ｎｏ”に設定する。また、リソースマネージャー１１５は、動作中でないプロセスＩＤに対応するプロセスに対応するコード番号に対応する仮想アドレスに対応する物理アドレスをＴＬＢ１１６から削除する。
【００４１】
図３は、マッピングテーブルの例である。
マッピングテーブル１２３は、項目として、コード番号およびアドレスを有し、これらが関連付けられて記載されている。
【００４２】
コード番号は、コード１４５−ｋを識別する番号である。実施の形態では、コード番号ｋはコード１４５−ｋを示す。
アドレスは、仮想アドレスを示す。
【００４３】
図４は、ＦＰＧＡにコードがロード済みの場合のシーケンス図である。
図４では、ユーザアプリケーション１４２がある処理をコード＃１を利用して実行する場合について説明する。また、コード＃１に対応する仮想アドレス=0x0001000に対応するメモリ１２１の物理アドレス=0x1000008000には、１が格納されている。
【００４４】
アプリケーション部１１２は、コード＃１に対応する仮想アドレスから情報を読み出すロード（ＬＤ）命令を発行する（ステップＳ５０１）。図３に示すように、コード＃１に対応する仮想アドレスは、0x0001000である。
【００４５】
処理部１１１は、アプリケーション部１１２が発行した仮想アドレスに基づいて、ＴＬＢ１１６を検索する（ステップＳ５０２）。ここでは、仮想アドレス＝0x0001000に対応する物理アドレス=0x1000008000が検索結果として得られるとする（ＴＬＢヒット）。
メモリ１２１の物理アドレス=0x1000008000には、１が格納されおり、処理部１１１は、メモリ１２１から読みだした情報＝１をアプリケーション部１１２に返す（ステップＳ５０３）。
【００４６】
アプリケーション部１１２は、戻り値として１を受信したので、ＦＰＧＡ１３１−ｉは利用可能であると判定する（ステップＳ５０４）。そして、アプリケーション部１１２は、コード＃１に対応するＦＰＧＡ関数をコールする（ステップＳ５０４）。すなわち、アプリケーション部１１２は、コード＃１によりＦＰＧＡ１３１−ｉに構成された回路を実行する。詳細には、アプリケーション部１１２は、コード＃１により構成された回路を有するＦＰＧＡ１３１−ｉに、当該回路の実行を指示する。
【００４７】
ＦＰＧＡ１３１−ｉは、コード＃１により構成された回路を実行し、実行終了すると、コード＃１により構成された回路の実行結果をアプリケーション部１１２に送信する（ステップＳ５０５）。
【００４８】
図５は、ＦＰＧＡにコードがロードされる場合のシーケンス図である。
図５では、ユーザアプリケーション１４２がある処理をコード＃２を利用して実行しようとする場合について説明する。
【００４９】
アプリケーション部１１２は、コード＃１に対応する仮想アドレスから情報を読み出すロード（ＬＤ）命令を発行する（ステップＳ５１１）。図３に示すように、コード＃２に対応する仮想アドレスは、0x0003000である。
【００５０】
処理部１１１は、アプリケーション部１１２が発行した仮想アドレスに基づいて、ＴＬＢ１１６を検索する（ステップＳ５１２）。ここでは、仮想アドレス＝0x0003000に対応する物理アドレスはＴＬＢに格納されていないとする（ＴＬＢミス）。処理部１１１は、割り込みを発生させ、例外処理部１１４を呼び出す（ステップＳ５１２）。そして、例外処理部１１４は、リソースマネージャー１１５を呼び出す（ステップＳ５１３）。
【００５１】
リソースマネージャー１１５は、マッピングテーブル１２３を参照し、仮想アドレス=0x0003000に対応するコード番号＝２を検出する（ステップＳ５１４）。リソースマネージャー１１５は、ＦＰＧＡリソーステーブル１２２を参照し、未使用のリージョンを検索する（ステップＳ５１４）。ここでは、未使用のリージョンとしてＩＤ＝２（ＦＰＧＡ番号＝１、リージョン番号＝２）に対応するリージョン（すなわちＦＰＧＡ１３１−１のリージョン１３３−１−２）が検出されたとする。尚、未使用のリージョンが複数ある場合、例えば、未使用のリージョンのうちＩＤが最小のリージョンを検出する。リソースマネージャー１１５は、コード＃２をＦＰＧＡ１３１−１に送信し、リージョン１３３−１−２への書き込み（ロード）を指示する（ステップＳ５１４）。
【００５２】
ＦＰＧＡ１３１−１の制御部３３２−１は、リージョン１３３−１−２にコード＃２を書き込む（ロードする）（ステップＳ５１５）。それにより、リージョン１３３−１−２には、コード＃２で示される回路が構成される。制御部３３２−１は、書き込みが終了したらリソースマネージャー１１５にロードの完了を通知する（ステップＳ５１５）。
【００５３】
リソースマネージャー１１５は、ページテーブル１２４に仮想アドレス0x0003000を含むページと対応する物理アドレスを設定し、仮想アドレス0x0003000を含むページの仮想アドレスに対応するメモリ１２１の物理アドレスに１を書き込む。リソースマネージャー１１５は、１をアプリケーション部１１２に返す（ステップＳ５１６）。リソースマネージャー１１５は、ＴＬＢ５１６に仮想アドレス0x0003000に対応する物理アドレスを登録する（ステップＳ５１６）。
【００５４】
アプリケーション部１１２は、戻り値として１を受信したので、ＦＰＧＡ１３１−ｉは利用可能であると判定する（ステップＳ５１７）。そして、アプリケーション部１１２は、コード＃２に対応するＦＰＧＡ関数をコールする（ステップＳ５１７）。すなわち、アプリケーション部１１２は、コード＃２によりＦＰＧＡ１３１−ｉに構成された回路を実行する。詳細には、アプリケーション部１１２は、コード＃２により構成された回路を有するＦＰＧＡ１３１−ｉに、当該回路の実行を指示する。
【００５５】
ＦＰＧＡ１３１−ｉは、コード＃２により構成された回路を実行し、実行終了すると、コード＃２により構成された回路の実行結果をアプリケーション部１１２に送信する（ステップＳ５１８）。
【００５６】
図６は、ＦＰＧＡにコードがロードされない場合のシーケンス図である。
図６では、ユーザアプリケーション１４２がある処理をコード＃２を利用して実行しようとする場合について説明する。
【００５７】
アプリケーション部１１２は、コード＃２に対応する仮想アドレスから情報を読み出すロード（ＬＤ）命令を発行する（ステップＳ５２１）。図３に示すように、コード＃２に対応する仮想アドレスは、0x0003000である。
【００５８】
処理部１１１は、アプリケーション部１１２が発行した仮想アドレスに基づいて、ＴＬＢ１１６を検索する（ステップＳ５２２）。ここでは、仮想アドレス＝0x0003000に対応する物理アドレスはＴＬＢに格納されていないとする（ＴＬＢミス）。処理部１１１は、割り込みを発生させ、例外処理部１１４を呼び出す（ステップＳ５２２）。そして、例外処理部１１４は、リソースマネージャー１１５を呼び出す（ステップＳ５２３）。
【００５９】
リソースマネージャー１１５は、マッピングテーブル１２３を参照し、仮想アドレス=0x0003000に対応するコード番号＝２を検出する（ステップＳ５２４）。リソースマネージャー１１５は、ＦＰＧＡリソーステーブル１２２を参照し、未使用のリージョンを検索する（ステップＳ５２４）。ここでは、未使用のリージョンが検出されなかったとする。リソースマネージャー１１５は、ページテーブル１２４に仮想アドレス0x0003000を含むページの仮想アドレスと対応する物理アドレスを設定し、仮想アドレス0x0003000を含むページに対応するメモリ１２１の物理アドレスに０を書き込む。（ステップＳ５２４）。
【００６０】
アプリケーション部１１２は、戻り値として０を受信したので、ＦＰＧＡ１３１−ｉは利用不可であると判定する。そして、アプリケーション部１１２は、ある処理をＦＰＧＡ１３１−ｉによるハードウェア処理を用いずに、ソフトウェア処理により実行する。すなわち、アプリケーション部１１２は、コード＃２により構成される回路が実行する処理（ハードウェア処理）と同等の処理をソフトウェアにより自身で実行する。これにより、コード＃２により構成される回路を使用した場合と同等の処理結果が得られるが、ソフトウェア処理のため、コード＃２により構成される回路を使用した場合よりも時間がかかる。
【００６１】
実施の形態に係る情報処理装置によれば、ＦＰＧＡが利用可能かの判定結果をＴＬＢの検索の結果と連動させており、ＴＬＢの検索は通常アクセスでもＬＤ命令ごとに行われるため、ヒット時のオーバーヘッドは無くなる。
【００６２】
実施の形態に係る情報処理装置によれば、ＦＰＧＡが利用可能かをチェックするためのオーバーヘッドを小さくすることが出来る。
【００６３】
ＦＰＧＡのリソースを複数のユーザアプリケーションで共有して使う場合、リソース待ちが発生すると、ＦＰＧＡを使ったハードウェア処理を行うより、ＣＰＵ（処理部）によるソフトウェア処理の方が速い場合がある。
【００６４】
実施の形態に係る情報処理装置によれば、ＦＰＧＡの利用状況に応じて、ＦＰＧＡによるハードウェア処理を使うかＣＰＵによるソフトウェア処理を使うか判断できる。
【００６５】
図７は、情報処理装置（コンピュータ）のハードウェア図である。
実施の形態の情報処理装置１０１は、例えば、図７に示すような情報処理装置（コンピュータ）１によって実現可能である。
【００６６】
情報処理装置１は、ＣＰＵ２、メモリ３、入力装置４、出力装置５、フラッシュメモリ６、記録媒体駆動部７、及びＦＰＧＡ８−ｉを備え、それらはバスにより互いに接続されている。
【００６７】
ＣＰＵ２は、情報処理装置１全体を制御する中央処理装置である。ＣＰＵ２は、コア１１、キャッシュ１２、メモリコントローラ１３、Ｉ／Ｏハブ１４を備える。コア１１は、各種処理を行う演算装置である。コア１１は、アプリケーション部１１２、ＯＳ部１１３、およびリソースマネージャー１１５として動作する。
【００６８】
メモリ３は、プログラム実行の際に、フラッシュメモリ６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ＲＯＭ)やRandom Access Memory(ＲＡＭ)等のメモリである。ＣＰＵ２は、メモリ３を利用してプログラムを実行することにより、上述した各種処理を実行する。メモリ３は、メモリ１２１に対応する。
【００６９】
この場合、可搬記録媒体１０等から読み出されたプログラムコード自体が実施の形態の機能を実現する。
【００７０】
入力装置４は、ユーザ又はオペレータからの指示や情報の入力、情報処理装置１で用いられるデータの取得等に用いられる。入力装置４は、例えば、キーボード、マウス、タッチパネル、カメラ、またはセンサ等である。
【００７１】
出力装置５は、ユーザ又はオペレータへの問い合わせや処理結果を出力したり、ＣＰＵ２による制御により動作する装置である。出力装置５は、例えば、ディスプレイ、またはプリンタ等である。
【００７２】
フラッシュメモリ６は、プログラムやデータを記憶する記憶装置である。情報処理装置１は、フラッシュメモリ６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。フラッシュメモリ６は、フラッシュメモリ１４１に対応する。フラッシュメモリ６は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等でもよい。
【００７３】
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(ＣＤ−ＲＯＭ)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【００７４】
ＦＰＧＡ８−ｉは、再構成可能な集積回路である。ＦＰＧＡ８−ｉは、ＦＰＧＡ１３１−ｉに対応する。ＦＰＧＡ８−１は、Staticモジュール１６とリージョン１７−ｊを備える。Staticモジュール１６は、制御部１３２−１に対応する。リージョン１７−ｊはリージョン１３３−ｉ−ｊに対応する。ＦＰＧＡ８−２もＦＰＧＡ８−１と同様の構成である。
【００７５】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
回路の構成を示すコードがロードされることにより前記回路が構成される再構成可能集積回路と、
前記再構成可能集積回路にコードがロードされていることを示す情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶するメモリと、
所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、前記命令に基づいて、コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられたトランスレーション・ルックアサイド・バッファ（ＴＬＢ）を検索し、前記所定の仮想アドレスが前記ＴＬＢにヒットしたとき、前記所定のコードがロードされていると判定し、前記所定の仮想アドレスが前記ＴＬＢにヒットしなかったとき、前記リソース情報が示す前記未使用領域に、前記所定のコードが示す所定の回路を構成する処理部と、
を備える情報処理装置。
（付記２）
前記処理部は、前記所定の回路を前記未使用領域に構成したとき、前記所定の仮想アドレスに対応する前記メモリの物理アドレスを前記ＴＬＢに設定し、前記所定の仮想アドレスに対応する前記メモリの物理アドレスに、前記所定のコードがロードされていることを示す情報を書き込むことを特徴とする付記１記載の情報処理装置。
（付記３）
前記処理部は、前記所定の回路を前記未使用領域に構成したとき、前記所定のコードがロードされていることを示す情報を取得し、前記所定の回路を実行することを特徴とする付記２記載の情報処理装置。
（付記４）
前記処理部は、前記所定の仮想アドレスが前記ＴＬＢにヒットしなかったとき、前記再構成可能集積回路内に前記未使用領域がない場合、前記所定の回路が実行する処理と同等の処理を前記処理部により実行することを特徴とする付記１記載の情報処理装置。
（付記５）
回路の構成を示すコードがロードされることにより前記回路が構成される再構成可能集積回路と、前記再構成可能集積回路にコードがロードされていることを示す情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶するメモリと、を備える情報処理装置が実行する情報処理方法であって、
所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、
前記命令に基づいて、コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられたトランスレーション・ルックアサイド・バッファ（ＴＬＢ）を検索し、
前記所定の仮想アドレスが前記ＴＬＢにヒットした場合、前記所定のコードがロードされていると判定し、
前記所定の仮想アドレスが前記ＴＬＢにヒットしなかった場合、前記リソース情報が示す前記未使用領域に、前記所定のコードが示す所定の回路を構成する
処理を備える情報処理方法。
（付記６）
前記所定の回路を前記未使用領域に構成したとき、前記所定の仮想アドレスに対応する前記メモリの物理アドレスを前記ＴＬＢに設定し、前記所定の仮想アドレスに対応する前記メモリの物理アドレスに、前記所定のコードがロードされていることを示す情報を書き込む処理をさらに備える付記５記載の情報処理方法。
（付記７）
前記所定の回路を前記未使用領域に構成したとき、前記所定のコードがロードされていることを示す情報を取得し、前記所定の回路を実行する処理をさらに備える付記６記載の情報処理方法。
（付記８）
前記所定の仮想アドレスが前記ＴＬＢにヒットしなかったとき、前記再構成可能集積回路内に前記未使用領域がない場合、前記所定の回路が実行する処理と同等の処理を処理部により実行する処理をさらに備える付記４記載の情報処理方法。
（付記９）
回路の構成を示すコードがロードされることにより前記回路が構成される再構成可能集積回路と、前記再構成可能集積回路にコードがロードされていることを示す情報と、前記再構成可能集積回路内で回路が構成可能な未使用領域を示すリソース情報と、を記憶するメモリと、を備えるコンピュータに、
所定のコードに対応付けられた所定の仮想アドレスから情報を読み出す命令を発行し、
前記命令に基づいて、コードに対応付けられた仮想アドレスと前記メモリの物理アドレスとが対応付けられたトランスレーション・ルックアサイド・バッファ（ＴＬＢ）を検索し、
前記所定の仮想アドレスが前記ＴＬＢにヒットした場合、前記所定のコードがロードされていると判定し、
前記所定の仮想アドレスが前記ＴＬＢにヒットしなかった場合、前記リソース情報が示す前記未使用領域に、前記所定のコードが示す所定の回路を構成する
処理を実行させるプログラム。
（付記１０）
前記所定の回路を前記未使用領域に構成したとき、前記所定の仮想アドレスに対応する前記メモリの物理アドレスを前記ＴＬＢに設定し、前記所定の仮想アドレスに対応する前記メモリの物理アドレスに、前記所定のコードがロードされていることを示す情報を書き込む処理をさらに備える付記９記載の情報処理方法。
（付記１１）
前記所定の回路を前記未使用領域に構成したとき、前記所定のコードがロードされていることを示す情報を取得し、前記所定の回路を実行する処理をさらに備える付記１０記載の情報処理方法。
（付記１２）
前記所定の仮想アドレスが前記ＴＬＢにヒットしなかったとき、前記再構成可能集積回路内に前記未使用領域がない場合、前記所定の回路が実行する処理と同等の処理を処理部により実行する処理をさらに備える付記５記載のプログラム。
【符号の説明】
【００７６】
１０１    情報処理装置
１１１    処理部
１１２    アプリケーション部
１１３    ＯＳ部
１１４    例外処理部
１１５    リソースマネージャー
１１６    ＴＬＢ
１２１    メモリ
１２２    ＦＰＧＡリソーステーブル
１２３    マッピングテーブル
１２４    ページテーブル
１３１    ＦＰＧＡ
１３２    制御部
１３３    リージョン
１４１    フラッシュメモリ
１４２    ユーザアプリケーション
１４３    ＯＳ
１４４    リソース管理アプリケーション
１４５    コード
【図１】
0006740719.tif 000002
【図２】
0006740719.tif 000003
【図３】
0006740719.tif 000004
【図４】
0006740719.tif 000005
【図５】
0006740719.tif 000006
【図６】
0006740719.tif 000007
【図７】
0006740719.tif 000008