(57)【要約】【課題】ハードウェアアクセラレータの規模を考慮してオフロードする機能を決定する必要性がなくなる上に、オフロードする機能を効率的に決定できるようにする。【解決手段】情報処理装置１は、アプリケーションのソースプログラムをプロセッサ用のプログラムに変換し、ソースプログラムにおける指令されたオフロード可能なプログラムからハードウェアアクセラレータ用のプログラムを生成するソースプログラム変換手段４と、プログラムの実行状況を監視する実行状況監視手段５と、ハードウェアアクセラレータの余裕能力を判定するアクセラレータ判定手段６と、実行状況監視手段の監視結果とアクセラレータ判定手段の判定結果とに基づいて、アプリケーションプログラムの実行中に、ハードウェアアクセラレータにオフロードするプログラムを決定するオフロード決定手段７とを備える。【選択図】図７
2018132981.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと内部構成を再構築可能なハードウェアアクセラレータとを備えたアクセラレータを有する情報処理装置であって、
アプリケーションのソースプログラムをプロセッサ用のプログラムに変換し、該ソースプログラムにおける指令されたオフロード可能なプログラムからハードウェアアクセラレータ用のプログラムを生成するソースプログラム変換手段と、
プログラムの実行状況を監視する実行状況監視手段と、
前記ハードウェアアクセラレータの余裕能力を判定するアクセラレータ判定手段と、
前記実行状況監視手段の監視結果と前記アクセラレータ判定手段の判定結果とに基づいて、前記アプリケーションプログラムの実行中に、前記ハードウェアアクセラレータにオフロードするプログラムを決定するオフロード決定手段と
を備えたことを特徴とする情報処理装置。
【請求項２】
ハードウェアアクセラレータは、ＦＰＧＡで実現され、
前記ハードウェアアクセラレータの余裕能力は、前記ＦＰＧＡの空き容量である
請求項１記載の情報処理装置。
【請求項３】
ソースプログラムにおける指令は、プラグマである
請求項１または請求項２記載の情報処理装置。
【請求項４】
実行状況監視手段は、プログラムの実行状況として、プログラムの実行頻度を監視する
請求項１から請求項３のうちのいずれか１項に記載の情報処理装置。
【請求項５】
プロセッサ用のプログラムとハードウェアアクセラレータ用のプログラムとのいずれを使用するのかを特定するためのテーブルを備えた
請求項１から請求項４のうちのいずれか１項に記載の情報処理装置。
【請求項６】
プロセッサと内部構成を再構築可能なハードウェアアクセラレータとを備えた情報処理装置で実行される情報処理方法であって、
アプリケーションのソースプログラムをプロセッサ用のプログラムに変換し、該ソースプログラムにおける指令されたオフロード可能なプログラムからハードウェアアクセラレータ用のプログラムを生成し、
プログラムの実行状況を監視し、
前記ハードウェアアクセラレータの余裕能力を判定し、
前記プログラムの実行状況の監視結果と前記ハードウェアアクセラレータの余裕能力の判定結果とに基づいて、前記アプリケーションプログラムの実行中に、前記ハードウェアアクセラレータにオフロードするプログラムを決定する
ことを特徴とする情報処理方法。
【請求項７】
ＦＰＧＡで実現されている前記ハードウェアアクセラレータの余裕能力として、前記ＦＰＧＡの空き容量を判定する
請求項６記載の情報処理方法。
【請求項８】
ソースプログラムにおける指令は、プラグマである
請求項６または請求項７記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアアクセラレータを用いる情報処理装置および情報処理方法に関する。
【背景技術】
【０００２】
データセンタなどのＨＰＣ（High Performance Computing）が求められる分野において、コンピュータの高性能化と低消費電力を実現するために、プロセッサ（以下、ＣＰＵ：Central Processing Unit という。）とハードウェアアクセラレータとを組み合わせる技術が採用されている。ビッグデータ解析や画像処理の分野において、ＣＰＵとＧＰＵ（Graphics Processing Unit）とを結合して高速のデータ処理が実現される。
【０００３】
ＦＰＧＡ（Field Programmable Gate Array ）は、任意の論理機能を実装できるデバイスである。ＦＰＧＡの機能は、ＦＰＧＡが実装された製品の出荷後でも更新可能である。そのような特長を生かして、ハードウェアアクセラレータとしてＦＰＧＡが使用されることがある（例えば、特許文献１参照）。
【０００４】
ＣＰＵとハードウェアアクセラレータとしてのＦＰＧＡとを含むシステムにおいて、ＦＰＧＡは、例えば、ＣＰＵの負荷が大きくなる特定の処理をＣＰＵに代わって処理する。処理の肩代わりは、オフロードと呼ばれる。負荷が大きくなる処理があらかじめ想定可能である場合、例えば特許文献１に記載されているように、ＦＰＧＡの規模（容量）を考慮して、特定の処理を実行するためのＦＰＧＡの機能があらかじめ選定される。
【０００５】
一例として、ＣＰＵとＦＰＧＡとを含むシステムの外部で、アプリケーションプログラムをテスト的に実行し、実行結果に基づいてオフロードすべき特定の処理の選定が行われる。そして、選定された特定の処理のＦＰＧＡ用のプログラムが作成され、ＦＰＧＡにロードされる。その後、ＣＰＵとＦＰＧＡとを含むシステムにおいて、アプリケーションプログラムが実際に実行される。
【０００６】
特許文献２および特許文献３には、ＣＰＵとＦＰＧＡとを含むシステムに入力されるデータの処理内容およびデータ処理量に応じて動的にＦＰＧＡを再構成することが記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−２４１９７５号公報
【特許文献２】特開２００７−１８３７２６号公報
【特許文献３】特開２０１３−１７１４３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献２に記載された装置は、使用頻度が高いソフトウェアモジュール（ＣＰＵで実行されている機能）を、ハードウェアモジュール（ＦＰＧＡで実行されている機能）に割り当てるように構成されている（特許文献２の段落００１９，００２０等参照）。上述したように、オフロード対象の特定の処理があらかじめ選定される方式では、特定の処理を選定するための処理（例えば、テスト的なプログラムの実行）が求められるので手間がかかる反面、ＣＰＵとＦＰＧＡとを含むシステムは、簡便にオフロード対象を決定できるという利点がある。しかし、特許文献２に記載された装置では、そのような効果は考慮されていない。特許文献２に記載された装置は、動的なハードウェアモジュールの割り当てを行っているが、ハードウェアモジュールの割り当ては、モジュールの使用頻度のみに基づいて行われている。
【０００９】
特許文献３に記載された装置は、ＣＰＵで実現される機能をソフトウェア（ＳＷ）機能とし、ＦＰＧＡで実現される機能をハードウェア（ＨＷ）機能とする。そして、リソースマネージャは、ＳＷリソースおよびＨＷリソースの利用状況の情報と処理内容の情報とを管理する。すなわち、リソースマネージャは、どのソフトウェア資源がどの程度利用されているかを把握できる。また、リソースマネージャは、どのハードウェア資源がどの程度利用されているかを把握できる。よって、アプリケーションを実行するために必要な処理機能に対して、効率的な機能の割り当てを行うことができるとされている（特許文献３の段落００２６等参照）。
【００１０】
しかし、特許文献３に記載された装置でも、あらかじめ特定の処理を選定するための処理が実行されることによる効果は考慮されていない。
【００１１】
本発明は、ハードウェアアクセラレータを用いる場合に、ハードウェアアクセラレータの規模を考慮してオフロードする機能を決定する必要性がなくなる上に、オフロードする機能を効率的に決定できるようにすることを目的とする。
【課題を解決するための手段】
【００１２】
本発明によるアクセラレータを有する情報処理装置は、プロセッサと内部構成を再構築可能なハードウェアアクセラレータとを備えたアクセラレータを有する情報処理装置であって、アプリケーションのソースプログラムをプロセッサ用のプログラムに変換し、ソースプログラムにおける指令されたオフロード可能なプログラムからハードウェアアクセラレータ用のプログラムを生成するソースプログラム変換手段と、プログラムの実行状況を監視する実行状況監視手段と、ハードウェアアクセラレータの余裕能力を判定するアクセラレータ判定手段と、実行状況監視手段の監視結果とアクセラレータ判定手段の判定結果とに基づいて、アプリケーションプログラムの実行中に、ハードウェアアクセラレータにオフロードするプログラムを決定するオフロード決定手段とを備えたことを特徴とする。
【００１３】
本発明による情報処理方法は、プロセッサと内部構成を再構築可能なハードウェアアクセラレータとを備えた情報処理装置で実行される情報処理方法であって、アプリケーションのソースプログラムをプロセッサ用のプログラムに変換し、ソースプログラムにおける指令されたオフロード可能なプログラムからハードウェアアクセラレータ用のプログラムを生成し、プログラムの実行状況を監視し、ハードウェアアクセラレータの余裕能力を判定し、プログラムの実行状況の監視結果とハードウェアアクセラレータの余裕能力の判定結果とに基づいて、アプリケーションプログラムの実行中に、ハードウェアアクセラレータにオフロードするプログラムを決定することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、ハードウェアアクセラレータの規模を考慮してオフロードする機能を決定する必要性をなくし、かつ、オフロードする機能を効率的に決定できる。
【図面の簡単な説明】
【００１５】
【図１】情報処理装置の第１の実施形態を示すブロック図である。
【図２】コンパイラの処理を説明するための模式図である。
【図３】ＯＳの処理と、ＦＰＧＡアクセラレータを含むハードウェアの処理とを説明するための説明図である。
【図４】ＦＰＧＡ用プログラムがＦＰＧＡアクセラレータに組み込まれる様子を示す説明図である。
【図５】アプリケーションプログラムに基づいて実行されるアプリケーションの実行中の情報処理装置の動作の一例を示すフローチャートである。
【図６】アプリケーションプログラムの実行中にＦＰＧＡ用プログラムを生成する情報処理装置の動作の一例を示すフローチャートである。
【図７】本発明による情報処理装置の主要部を示すブロック図である。
【発明を実施するための形態】
【００１６】
実施形態１．
以下、本発明の実施形態を図面を参照して説明する。
【００１７】
図１は、本発明による情報処理装置の第１の実施形態を示すブロック図である。図１に示すように、情報処理装置は、ＣＰＵ１１とＦＰＧＡアクセラレータ１２とを有する。ＦＰＧＡアクセラレータ１２は、ハードウェアアクセラレータとなるＦＰＧＡであるが、複数のＦＰＧＡ素子を含んでいてもよい。ＣＰＵ１１とＦＰＧＡアクセラレータ１２とは、例えば、PCI Express （登録商標）規格のバスでデータの送受信を行う。
【００１８】
情報処理装置は、さらに、コンパイラ１３、実行状況監視部２１、ＦＰＧＡプログラム管理テーブル２２、関数テーブル３１、関数テーブル管理部３２、ＦＰＧＡ資源管理部４１、ＦＰＧＡ資源管理テーブル４２、ＦＰＧＡプログラム管理部４３、および動的オフロード部５１を含む。
【００１９】
コンパイラ１３は、アプリケーションプログラムのソースプログラムをＣＰＵ１１が実行可能なＣＰＵ用プログラム（ＣＰＵ用のオブジェクトプログラム）に変換する。さらに、本実施形態では、コンパイラ１３は、ソースコードの構文解析によってＦＰＧＡアクセラレータ１２にオフロード可能な処理であると判断した場合には、ＦＰＧＡ用プログラム（ＦＰＧＡ用のオブジェクトプログラム）を生成する。ＦＰＧＡ用プログラムは、対応するＣＰＵ用プログラムが実現する機能と同じ機能をＦＰＧＡアクセラレータ１２が実現するように、ＦＰＧＡアクセラレータ１２の構成を再構築するためのデータの集まりである。
【００２０】
実行状況監視部２１は、関数群の実行状況を監視し、実行状況をＦＰＧＡプログラム管理テーブル２２に記録する。関数は、アプリケーションプログラムにおけるひとまとまりの処理（ルーチン）である。実行状況として、例えば、オフロード状態（オフロードされているか否か）、実行頻度、関数のＦＰＧＡ用プログラムの容量、優先度等がある。なお、優先度については、例えば、実行頻度が高い関数に対して高い優先度が設定されたり、実行頻度が高い関数が暗黙的に優先度が高いと見なされたり、ソースプログラムに埋め込まれているデータに基づいてコンパイル時に優先度の設定がなされたりする。
【００２１】
関数テーブル３１は、アプリケーションプログラムを構成する関数へのジャンプテーブルである。関数テーブル３１に記録されるデータ（エントリ）は、一般に、コンパイラ１３やリンカーによって作成され、情報処理装置の主記憶などに記憶される。具体的には、関数テーブル３１には、それぞれの関数について、ＣＰＵ用プログラムとＦＰＧＡ用プログラムとのうちのいずれを使用すべきかを示すデータがエントリとして設定される。図１には、関数Func1,Func2,Func3,Func4 が例示されている。なお、矢印の先のFuncx-y （ｘ：１〜４）の"y" が"C"になっているものは、ＣＰＵ用プログラムを示し、"F" になっているものは、ＦＰＧＡ用プログラムを示す。
【００２２】
関数テーブル管理部３２は、ＦＰＧＡ用プログラムとＣＰＵ用プログラムのどちらを呼び出すかを管理する。
【００２３】
ＦＰＧＡ資源管理部４１は、ＦＰＧＡアクセラレータ１２の未使用ゲートアレイ数（空き容量）などを監視し、監視結果をＦＰＧＡ資源管理テーブル４２に記録する。
【００２４】
ＦＰＧＡプログラム管理部４３は、ＦＰＧＡプログラム管理テーブル２２に記録されているデータとＦＰＧＡ資源管理テーブル４２に記録されているデータとに基づいて動的オフロード部５１および関数テーブル管理部３２を制御する。
【００２５】
動的オフロード部５１は、指定されたＦＰＧＡ用プログラムなどをＦＰＧＡアクセラレータ１２にロードし、必要なデバイスドライバをＯＳ（Operating System：図１において図示せず）に組み込むための制御を行う。
【００２６】
次に、情報処理装置の動作を説明する。図２は、コンパイラ１３の処理を説明するための模式図である。本実施形態では、ソースプログラム１０１には、ＦＰＧＡアクセラレータ１２にオフロード可能な処理かどうかを特定可能な構文が含まれる。例えば、図２に示すように、オフロード可能な処理に対して、"#FPGA_OFFLOAD"といったプラグマ （pragma：コンパイラに特定の情報を渡すために使用する識別子（指令））が付されている。なお、オフロード可能な処理かどうかを特定可能であることを指定できれば、他のコンパイラオプションを使用してもよい。
【００２７】
コンパイラ１３は、ソースプログラム１０１を入力し、構文解析を行う（ステップＳ１１）。
【００２８】
オフロード可能な処理であることを示す指令等を見いだすと（ステップＳ１２）、ソースコードからＦＰＧＡ用プログラム（ＦＰＧＡ用オブジェクト）を生成し（ステップＳ１３）、ＦＰＧＡ用プログラム１０２を、情報処理装置の補助記憶などに格納する。なお、本実施形態では、関数Func1 は、オフロード不能な処理である。オフロード不能な処理は、一例として、オフロードしても処理の高速化が見込めないような処理や、ＦＰＧＡアクセラレータ１２の資源を大量消費するような処理である。
【００２９】
その後、コンパイラ１３は、ソースコードをＣＰＵ用プログラムに変換し（ステップＳ１４）、ＣＰＵ用プログラム１０３を、情報処理装置の主記憶や補助記憶などに格納する。
【００３０】
図３は、ＣＰＵ１１によって実行されるＯＳ６１の処理と、ＦＰＧＡアクセラレータ１２を含むハードウェア８１の処理とを説明するための説明図である。
【００３１】
ハードウェア８１には、ＦＰＧＡ用プログラム１０２をＦＰＧＡアクセラレータ１２に組み込むための機構であるＦＰＧＡプログラム組み込み機能部８２（図１において図示せず）が含まれている。ＦＰＧＡプログラム組み込み機能部８２は、動的オフロード部５１からのＦＰＧＡ用プログラム組み込み要求に応じて、補助記憶等の記憶部９１に格納されているＦＰＧＡ用プログラム１０２をＦＰＧＡアクセラレータ１２に組み込む。具体的には、ＦＰＧＡアクセラレータ１２の構成を再構築する。
【００３２】
また、ＯＳ６１は、デバイスドライバ組み込み機能６２を備えている。ＯＳ６１は、例えば動的オフロード部５１からのＣＰＵ用プログラム組み込み要求に応じて、デバイスドライバ組み込み機能６２を用いて、ＯＳ６１に、記憶部７１に格納されているデバイスドライバ７２を組み込む。
【００３３】
図４は、ＦＰＧＡ用プログラムがＦＰＧＡアクセラレータ１２に組み込まれる（ロードされる）様子を示す説明図である。図４に示す例では、動的オフロード部５１は、実行状況監視部２１の監視結果等に基づく所定の条件が成立したので、関数Func2 および関数Func4 のＦＰＧＡ用プログラムに相当するFunc2-F およびFunc4-F が、ＦＰＧＡアクセラレータ１２にロードされることが例示されている。なお、同時に、対応するデバイスドライバがＯＳ６１に組み込まれる。
【００３４】
図５は、アプリケーションプログラムに基づいて実行されるアプリケーションの実行中の情報処理装置の動作の一例を示すフローチャートである。
【００３５】
アプリケーションの実行中に、実行状況監視部２１は、各関数の実行頻度（ＣＰＵ１１での実行頻度およびＦＰＧＡアクセラレータ１２での実行頻度）を判定する（ステップＳ１０１）。実行頻度は、例えば、所定時間あたりの実行回数であるが、単純に実行回数の累積値であってもよい。さらに、実行状況監視部２１は、関数の実行時間を測定してもよい。実行状況監視部２１は、実行頻度を更新したら、更新後の実行頻度をＦＰＧＡプログラム管理テーブル２２に記録する（ステップＳ１０２）。
【００３６】
なお、例えば、関数の実行頻度が所定のしきい値以下になったときに、動的オフロード部５１は、その関数に関してオフロードを解除する。その結果、ＦＰＧＡアクセラレータ１２の空き容量（未使用のゲートアレイ数）が増加する。
【００３７】
ＦＰＧＡ資源管理部４１は、例えば、関数のオフロードが行われたとき、および、オフロード解除が行われたときに、ＦＰＧＡアクセラレータ１２の空き容量を算出する（ステップＳ１０３）．そして、実行状況監視部２１は、空き容量をＦＰＧＡ資源管理テーブル４２に記録する（ステップＳ１０４）。
【００３８】
なお、ＦＰＧＡ資源管理部４１は、空き容量の監視を常時行ったり、所定時間ごとに空き容量の算出を行ってもよい。
【００３９】
ＦＰＧＡプログラム管理部４３は、関数に関して所定の条件が成立したら（ステップＳ１０５）、その関数をオフロードすることに決定する。所定の条件は、例えば、実行頻度が所定のしきい値を越え、かつ、その関数のＦＰＧＡ用プログラムの実行に必要とされるゲートアレイ数が空き容量以下であることである。実行頻度が所定のしきい値を越えていなくても、その関数の実行時間が所定時間よりも長く、かつ、その関数のＦＰＧＡ用プログラムの実行に必要とされるゲートアレイ数が空き容量以下であれば、ＦＰＧＡプログラム管理部４３は、その関数をオフロードすることに決定してもよい。また、ＦＰＧＡプログラム管理部４３は、あらかじめ決められている時間以上オフロードが実行されず、空き容量が十分である場合に、実行頻度が高い関数や実行時間が長い関数をオフロードすることに決定してもよい。
【００４０】
ＦＰＧＡプログラム管理部４３は、オフロードすることに決定した場合、動的オフロード部５１に、その関数のオフロードを要求する。動的オフロード部５１は、要求に応じて、その関数のオフロードを実行する（ステップＳ１０６）。具体的には、動的オフロード部５１は、ＦＰＧＡプログラム組み込み機能部８２に対して、ＦＰＧＡ用プログラム組み込み要求を出す（図３参照）。オフロード対象の関数が例えばFunc2 であれば、ＦＰＧＡプログラム組み込み機能部８２は、ＦＰＧＡ用プログラムFunc2-F をＦＰＧＡアクセラレータ１２にロードする。また、動的オフロード部５１は、ＯＳ６１に、ＦＰＧＡ用プログラムFunc2-F に対応するデバイスドライバについてデバイスドライバ組み込み要求を行う（図３参照）。
【００４１】
また、ＦＰＧＡプログラム管理部４３は、関数テーブル管理部３２に、例えばFunc2 についてのエントリ変更を要求する。関数テーブル管理部３２は、エントリを、Func2 についてはＦＰＧＡ用プログラムFunc2-F が呼び出されるように変更する。
【００４２】
本実施形態では、あらかじめＦＰＧＡの規模に応じてオフロードする機能を定義する必要はない。換言すれば、ソフトウェアとは独立して、ＦＰＧＡの規模を設計したり、ＦＰＧＡ素子を選定できる。
【００４３】
また、開発者（設計者）は、ハードウェアアクセラレータの有無やハードウェアアクセラレータの規模を意識せずにアプリケーションの開発ができる。
【００４４】
さらに、オフロードの効果が高い処理を優先的にオフロードできるようになる。
【００４５】
なお、本実施形態では、ＦＰＧＡがプロセッサのハードウェアアクセラレータとして使用される場合を例にしたが、ＧＰＵ（Graphics Processing Unit）やＤＳＰ（Digital Signal Processor）などがハードウェアアクセラレータとして使用される場合にも本実施形態を適用できる。ただし、その場合には、一般にＧＰＵやＤＳＰは、内部構成を再構築可能な（reconfigurable）デバイスではないので、上記の実施形態における「空き容量」は、ゲートアレイ数ではなく、余裕能力等で表現される。なお、余裕能力は、「空き容量」を含む上位概念でもある。
【００４６】
また、ハードウェアアクセラレータとしてＦＰＧＡが使用されることが好ましいが、内部構成を再構築可能な他のデバイス（例えば、ＣＰＬＤ：Complex Programmable Logic Device ）を用いた場合でも、本実施形態を適用することができる。
【００４７】
実施形態２．
第１の実施形態では、アプリケーションプログラムの実行前に、コンパイラによってＦＰＧＡ用プログラムが生成されたが、アプリケーションプログラムの実行中にＦＰＧＡ用プログラムを生成するようにしてもよい。
【００４８】
図６は、アプリケーションプログラムの実行中にＦＰＧＡ用プログラムを生成する情報処理装置の動作の一例を示すフローチャートである。なお、情報処理装置の構成は、図１に示された第１の実施形態の構成と同じである。
【００４９】
図６（Ａ）には、情報処理装置が、ＣＰＵ用プログラムで処理＃１を実行し（ステップＳ２０１）、ＣＰＵ用プログラムで処理＃２を繰り返し実行し（ステップＳ２０２，Ｓ２０４）、その後、ＣＰＵ用プログラムで処理＃３を実行する（ステップＳ２０５）例が示されている。
【００５０】
図６（Ｂ）には、処理＃２がＦＰＧＡ用プログラムで実行される（ステップＳ２０３）例が示されている。具体的には、情報処理装置において、ＦＰＧＡプログラム管理部４３が関数をオフロードすることに決定したときに、動的オフロード部５１は、コンパイラに対して、処理＃２のソースコードのコンパイル（ＦＰＧＡ用プログラムの生成）を要求する。生成されたＦＰＧＡ用プログラムは、第１の実施形態の場合と同様に、情報処理装置の補助記憶などに格納される。
【００５１】
そして、動的オフロード部５１は、ＦＰＧＡプログラム組み込み機能部８２に対して、ＦＰＧＡ用プログラム組み込み要求を出す（図３参照）。ＦＰＧＡプログラム組み込み機能部８２は、ＦＰＧＡ用プログラムをＦＰＧＡアクセラレータ１２にロードする。また、動的オフロード部５１は、ＯＳ６１に、ＦＰＧＡ用プログラムに対応するデバイスドライバのデバイスドライバ組み込み要求を行う（図３参照）。
【００５２】
また、ＦＰＧＡプログラム管理部４３は、関数テーブル管理部３２に、ＦＰＧＡ用プログラムについてのエントリ変更を要求する。関数テーブル管理部３２は、エントリを、ＦＰＧＡ用プログラムが呼び出されるように変更する。
【００５３】
図７は、本発明による情報処理装置の主要部を示すブロック図である。図７に示すように、情報処理装置１は、プロセッサ２（例えば、ＣＰＵ１１）と内部構成を再構築可能なハードウェアアクセラレータ３（（例えば、ＦＰＧＡアクセラレータ１２）とを備え、アプリケーションのソースプログラムをプロセッサ用のプログラム（例えば、ＣＰＵ用プログラム）に変換し、ソースプログラムにおける指令されたオフロード可能なプログラムからハードウェアアクセラレータ用のプログラム（例えば、ＦＰＧＡ用プログラム）を生成するソースプログラム変換手段４（例えば、コンパイラ１３で実現される。）と、プログラムの実行状況を監視する実行状況監視手段５（例えば、実行状況監視部２１で実現される。）と、ハードウェアアクセラレータの余裕能力（例えば、ＦＰＧＡの空き容量）を判定するアクセラレータ判定手段６（例えば、ＦＰＧＡ資源管理部４１で実現される。）と、実行状況監視手段５の監視結果とアクセラレータ判定手段６の判定結果とに基づいて、アプリケーションプログラムの実行中に、ハードウェアアクセラレータ３にオフロードするプログラム（例えば関数）を決定するオフロード決定手段７（例えば、ＦＰＧＡプログラム管理部４３で実現される。）とを備えている。
【００５４】
情報処理装置は、プロセッサ用のプログラムとハードウェアアクセラレータ用のプログラムとのいずれを使用するのかを特定するためのテーブル（例えば、関数テーブル３１）を備えていてもよい。
【符号の説明】
【００５５】
１      情報処理装置
２      プロセッサ
３      ハードウェアアクセラレータ
４      ソースプログラム変換手段
５      実行状況監視手段
６      アクセラレータ判定手段
７      オフロード決定手段
１１    ＣＰＵ
１２    ＦＰＧＡアクセラレータ
１３    コンパイラ
２１    実行状況監視部
２２    ＦＰＧＡプログラム管理テーブル
３１    関数テーブル
３２    関数テーブル管理部
４１    ＦＰＧＡ資源管理部
４２    ＦＰＧＡ資源管理テーブル
４３    ＦＰＧＡプログラム管理部
５１    動的オフロード部
６１    ＯＳ
６２    デバイスドライバ組み込み機能
７１    記憶部
７２    デバイスドライバ
８１    ハードウェア
８２    ＦＰＧＡプログラム組み込み機能部
９１    記憶部
１０１  ソースプログラム
１０２  ＦＰＧＡ用プログラム
１０３  ソースプログラム
【図１】
2018132981.tif 000003
【図２】
2018132981.tif 000004
【図３】
2018132981.tif 000005
【図４】
2018132981.tif 000006
【図５】
2018132981.tif 000007
【図６】
2018132981.tif 000008
【図７】
2018132981.tif 000009