(57)【特許請求の範囲】
【請求項１】
内部の回路構成を任意に変更可能なプログラマブル集積回路を制御する演算処理装置であって、
前記プログラマブル集積回路が、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、
前記プログラマブル集積回路によって実行される演算要求を認識する認識部と、
前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する選択部と、
選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する演算回路生成部と、
前記演算回路生成部によって生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる演算制御部と、
前記演算回路による前記処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる接続回路生成部と
を備えることを特徴とする、演算処理装置。
【請求項２】
前記認識部が、同一の演算要求を再度受信すると、
前記演算回路生成部が、
通信処理部として機能する前記第２の領域を、前記演算処理部として機能させることで、前記演算回路を復活させる
ことを特徴とする、請求項１記載の演算処理装置。
【請求項３】
前記プログラマブル集積回路における前記複数の第１の領域および前記複数の第２の領域の使用状態を第１管理情報を用いて管理する第１管理部と、
前記プログラマブル集積回路において実行中の処理を第２管理情報を用いて管理する、第２管理部とを備え、
前記第１管理情報および前記第２管理情報を参照して、前記プログラマブル集積回路において、前記演算要求に対応する演算回路であって、当該演算回路において前記第１の領域が不使用状態ものが存在する場合に、前記接続回路生成部が、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、請求項１又は２記載の演算処理装置。
【請求項４】
前記接続回路生成部が、
前記演算制御部による前記処理の終了後であって、前記演算回路生成部が前記演算要求とは異なる他の演算要求にかかる演算回路を生成する際に、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、請求項１又は２記載の演算処理装置。
【請求項５】
演算を処理するプロセッサと、
内部の回路構成を任意に変更可能に構成され、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、演算回路が形成されて演算を処理するプログラマブル集積回路と、
前記プログラマブル集積回路によって実行される演算要求を認識する認識部と、
前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する選択部と、
選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する演算回路生成部と、
前記演算回路生成部によって生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる演算制御部と、
前記演算回路による前記処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる接続回路生成部と
を備えることを特徴とする、演算処理システム。
【請求項６】
内部の回路構成を任意に変更可能なプログラマブル集積回路を制御して演算を処理する演算処理方法であって、
前記プログラマブル集積回路が、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、
前記プログラマブル集積回路によって実行される演算要求を認識する処理と、
前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する処理と、
選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する処理と、
生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる処理と、
前記演算要求にかかる処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる処理と
を備えることを特徴とする、演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、演算処理システムおよび演算処理方法に関する。
【背景技術】
【０００２】
近年、データセンターにおけるデータ処理の高速化や低電力化を目的として、ＣＰＵ（Central Processing Unit）とＦＰＧＡ（Field Programmable Gate Array）とをプロセッサとして混載した演算処理システムが実現されている。
ＦＰＧＡは、プログラミングすることができる集積回路（ＬＳＩ：Large Scale Integration）であり、上述の如き演算処理システムにおいて、アルゴリズムの修正、拡張が可能なハードウェアという位置づけで用いられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−２６８７０号公報
【特許文献２】特開２００６−２３６１０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このような従来の演算処理システムにおいては、ＦＰＧＡを１種類のタスクの実行に使用しており、有効に活用できていない。
１つの側面では、本発明は、演算処理装置の処理性能を向上させることを目的とする。
【課題を解決するための手段】
【０００５】
このため、この演算処理装置は、内部の回路構成を任意に変更可能なプログラマブル集積回路を制御する演算処理装置であって、前記プログラマブル集積回路が、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、前記プログラマブル集積回路によって実行される演算要求を認識する認識部と、前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する選択部と、選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する演算回路生成部と、前記演算回路生成部によって生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる演算制御部と、前記演算回路による前記処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる接続回路生成部とを備える。
【発明の効果】
【０００６】
一実施形態によれば、演算処理装置の処理性能を向上させることができる。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態の一例としての演算処理装置のハードウェア構成を示す図である。
【図２】第１実施形態の一例としての演算処理装置に備えられるＦＰＧＡを説明するための図である。
【図３】第１実施形態の一例としての演算処理装置において用いられる演算情報のデータ構造を例示する図である。
【図４】第１実施形態の一例としての演算処理装置におけるＦＰＧＡに形成される演算回路を説明するための図である。
【図５】第１実施形態の一例としての演算処理装置において用いられるＦＰＧＡ管理情報のデータ構造を例示する図である。
【図６】第１実施形態の一例としての演算処理装置において用いられる実行中処理情報のデータ構造を例示する図である。
【図７】第１実施形態の一例としての演算処理装置におけるＦＰＧＡの初期化手法を例示する図である。
【図８】第１実施形態の一例としての演算処理装置における実行中処理情報を例示する図である。
【図９】第１実施形態の一例としての演算処理装置の機能構成を示す図である。
【図１０】第１実施形態の一例としての演算処理装置における演算回路生成部の機能を説明するための図である。
【図１１】第１実施形態の一例としての演算処理装置における接続回路生成部の機能を説明するための図である。
【図１２】第１実施形態の一例としての演算処理装置におけるＦＰＧＡへの演算回路の形成方法を説明するための図である。
【図１３】第１実施形態の一例としての演算処理装置における演算要求に対する処理の概要を説明するためのフローチャートである。
【図１４】第１実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図１５】第１実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図１６】第１実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図１７】第１実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図１８】第１実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図１９】第１実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図２０】第２実施形態の一例としての演算処理装置におけるＦＰＧＡへの演算回路の形成方法を説明するための図である。
【図２１】第２実施形態の一例としての演算処理装置における接続回路生成部による通信網復元処理の概要を説明するためのフローチャートである。
【図２２】第２実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図２３】第２実施形態の一例としての演算処理装置における演算要求に対する処理の詳細を説明するためのフローチャートである。
【図２４】第１実施形態の変形例としての演算処理装置における演算要求に対する処理の概要を説明するフローチャートである。
【発明を実施するための形態】
【０００８】
以下、図面を参照して本演算処理装置、演算処理システムおよび演算処理方法に係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形（実施形態及び各変形例を組み合わせる等）して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【０００９】
（Ａ）第１実施形態
（Ａ−１）ハードウェア構成
図１は第１実施形態の一例としての演算処理装置１のハードウェア構成を示す図である。
演算処理装置１は、例えばサーバ機能を備えたコンピュータ（情報処理装置）であり、図１に示すように、プロセッサ１１とＦＰＧＡ１９とを備え、これらの処理装置（処理部）を用いて演算等の情報処理を実行する。
【００１０】
まず、図１を参照しながら、本第１実施形態の演算処理装置１のハードウェア構成について説明する。
演算処理装置１は、例えば、プロセッサ１１，ＲＡＭ（Random Access Memory）１２，ＨＤＤ（Hard Disk Drive）１３，グラフィック処理装置１４，入力インタフェース１５，光学ドライブ装置１６，機器接続インタフェース１７，ネットワークインタフェース１８およびＦＰＧＡ１９を構成要素として有する。これらの構成要素１１〜１９は、バス２０を介して相互に通信可能に構成される。
【００１１】
プロセッサ１１は、演算処理装置１全体を制御する。プロセッサ１１は、マルチプロセッサであってもよい。プロセッサ１１は、例えばＣＰＵ（Central Processing Unit），ＭＰＵ（Micro Processing Unit），ＤＳＰ（Digital Signal Processor），ＡＳＩＣ（Application Specific Integrated Circuit），ＰＬＤ（Programmable Logic Device）のいずれか一つであってもよい。また、プロセッサ１１は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤのうちの２種類以上の要素の組み合わせであってもよい。以下、プロセッサ１１がＣＰＵである例について示すものとし、プロセッサ１１をＣＰＵ１１と表す。
【００１２】
ＲＡＭ（記憶部）１２は、演算処理装置１の主記憶装置として使用される。ＲＡＭ１２には、プロセッサ１１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１２には、プロセッサ１１による処理に必要な各種データが格納される。アプリケーションプログラムには、コンピュータである演算処理装置１によって本第１実施形態の演算処理機能を実現するためにＣＰＵ１１によって実行される演算処理プログラムが含まれてもよい。
【００１３】
また、ＲＡＭ１２には、後述の如く、ＦＰＧＡ１９に演算回路を形成するための構成情報（部分構成情報）がＨＤＤ１３等から適宜読み出されて格納される。
ＨＤＤ（記憶部）１３は、内蔵したディスクに対して、磁気的にデータの書き込み及び読み出しを行なう。ＨＤＤ１３は、演算処理装置１の補助記憶装置として使用される。ＨＤＤ１３には、ＯＳプログラム，アプリケーションプログラム、及び各種データが格納される。なお、補助記憶装置としては、フラッシュメモリ等の半導体記憶装置（ＳＳＤ：Solid State Drive）を使用することもできる。
【００１４】
グラフィック処理装置１４には、モニタ１４ａが接続されている。グラフィック処理装置１４は、プロセッサ１１からの命令に従って、画像をモニタ１４ａの画面に表示させる。モニタ１４ａとしては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置等が挙げられる。
入力インタフェース１５には、キーボード１５ａおよびマウス１５ｂが接続されている。入力インタフェース１５は、キーボード１５ａやマウス１５ｂから送られてくる信号をＣＰＵ１１に送信する。なお、マウス１５ｂは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル，タブレット，タッチパッド，トラックボール等が挙げられる。
【００１５】
光学ドライブ装置１６は、レーザ光等を利用して、光ディスク１６ａに記録されたデータの読み取りを行なう。光ディスク１６ａは、光の反射によって読み取り可能にデータを記録された可搬型の非一時的な記録媒体である。光ディスク１６ａには、ＤＶＤ（Digital Versatile Disc），ＤＶＤ−ＲＡＭ，ＣＤ−ＲＯＭ（Compact Disc Read Only Memory），ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等が挙げられる。
【００１６】
機器接続インタフェース１７は、演算処理装置１に周辺機器を接続するための通信インタフェースである。例えば、機器接続インタフェース１７には、メモリ装置１７ａやメモリリーダライタ１７ｂを接続することができる。メモリ装置１７ａは、機器接続インタフェース１７との通信機能を搭載した非一時的な記録媒体、例えばＵＳＢ（Universal Serial Bus）メモリである。メモリリーダライタ１７ｂは、メモリカード１７ｃへのデータの書き込み、またはメモリカード１７ｃからのデータの読み出しを行なう。メモリカード１７ｃは、カード型の非一時的な記録媒体である。
【００１７】
ネットワークインタフェース１８は、図示しないネットワークに接続される。ネットワークインタフェース１８は、ネットワークを介して、他のコンピュータまたは通信機器との間でデータの送受信を行なう。
ＦＰＧＡ１９は、プログラミングすることができるＬＳＩ（プログラマブル集積回路）である。ＦＰＧＡ１９は、演算回路をＮｏＣ（Network On Chip）によってＦＰＧＡ外部と接続するアーキテクチャを有する。演算回路とＮｏＣは、ともにプログラマブルな論理回路上に構築されるものであり、製造時に作りこまれ変更不可能なＮｏＣを持つアーキテクチャではない。
【００１８】
図２は第１実施形態の一例としての演算処理装置１に備えられるＦＰＧＡ１９を説明するための図である。
ＦＰＧＡ１９は、図２に示すように、第１共用領域３１，第２共用領域３２および演算回路領域３３を、それぞれ複数備える。
演算回路領域３３は、演算処理を実行させるための演算回路として用いられる領域である。ＦＰＧＡ１９において備えられる複数の演算回路領域３３は互いに同一な矩形形状を有する。本第１実施形態においては、各演算回路領域３３は正方形状を有する。
【００１９】
これらの演算回路領域３３は、図２に示すように、ＦＰＧＡ１９において上下左右方向のそれぞれの方向において等間隔に配置されている。すなわち、複数の演算回路領域３３はＦＰＧＡ１９においてマトリクス状に配置されている。すなわち、ＦＰＧＡ１９においては、演算回路領域３３がグリッド単位配置されている。
各演算回路領域３３は、後述するＣＰＵ１１により演算回路を構成する構成情報（演算回路構成情報）が設定されることにより、演算回路として機能する。
【００２０】
従って、演算回路領域３３は、ＦＰＧＡ１９を分割して形成された領域であって、内部の回路を再構成可能な同一形状を有する複数の第１の領域（演算回路配置領域）に相当する。以下、演算回路用領域３３を演算回路として機能させるための構成情報（演算回路構成情報）を、第１の部分構成情報という場合がある。
また、ＦＰＧＡ１９において、隣り合う演算回路領域３３間の隙間は、第１共用領域３１を構成する。すなわち、第１共用領域３１は、ＦＰＧＡ１９において演算回路領域３３を縦方向および横方向に等間隔に区画する格子状に配置されている。
【００２１】
さらに、格子状に配列された第１共用領域３１の各交点部分には、第２共用領域３２が配置されている。
第１共用領域３１は、ＣＰＵ１１により配線回路を構成する構成情報（配線回路構成情報）が設定されることにより配線領域（接続回路）として機能する。以下、配線回路を構成する構成情報が設定されたことにより配線領域として機能している第１共用領域３１を配線３１という場合がある。
【００２２】
配線３１は、演算回路領域３３と他の要素 とをアクセス可能に接続するものであり、例えば、演算回路領域３３に対して、ＣＰＵ１１やＲＡＭ１２等を接続する。なお、配線３１が演算回路領域３３に接続する対象はこれらのＣＰＵ１１やＲＡＭ１２に限定されるものではない。例えば、ＦＰＧＡ１９を備えるボードを汎用サーバに搭載する場合には、演算回路領域３３に対して、当該ボード上に搭載されたＲＡＭ１２の他、イーサネット（登録商標）モジュール等種々の要素が多岐にわたって接続される。以下、演算回路領域３３が配線３１によりＣＰＵ１１に接続される例について説明する。
【００２３】
また、以下、配線３１のうち、縦方向に沿って形成されたものを縦配線３１ｂといい、横方向に沿って形成されたものを横配線３１ａという場合がある。
第２共用領域３２は、ＣＰＵ１１によりルータ回路を構成する構成情報（ルータ回路構成情報）が設定されることによりルータとして機能する。以下、ルータ回路を構成する構成情報が設定されたことによりルータとして機能している第２共用領域３２をルータ３２という場合がある。
【００２４】
ルータ３２は、演算回路領域３３をＣＰＵ１１とアクセス可能に接続するものである。本第１実施形態においては、演算回路領域３３は、当該演算回路領域３３の左上隅に位置するルータ３２を介して配線３１に接続される。
そして、ＦＰＧＡ１９において、１つ以上の演算回路領域３３等を用いて形成された演算回路は、配線３１およびルータ３２を連結して形成された接続回路（通信網）を介して、外部インタフェース（Ｉ／Ｆ）１９１ に接続され、バス２０を介してＣＰＵ１１に接続される。
【００２５】
外部Ｉ／Ｆ１９１は、ＦＰＧＡ１９において外部との通信を行なうためのインタフェース回路であり、ＦＰＧＡ１９に形成された演算回路は、この外部Ｉ／Ｆ１９１を介して、ＦＰＧＡ１９の外部（例えば、ＣＰＵ１１）と通信を行なう。
第１共用領域３１および第２共用領域３２は、演算回路領域３３とＣＰＵ１１とを接続する接続回路（通信網）として機能する。以下、第１共用領域３１および第２共用領域３２を接続回路として機能させるための構成情報を、接続回路構成情報という場合がある。
【００２６】
さらに、第１共用領域３１および第２共用領域３２は、ＣＰＵ１１により演算回路を構成する構成情報（演算回路構成情報）が設定されることにより、演算回路領域３３と同様に演算回路としても機能する。すなわち、ＦＰＧＡ１９は、非固定的なＮｏＣ構成を有する。
従って、第１共用領域３１および第２共用領域３２は、接続回路として機能する一方で、演算回路としてもそれぞれ機能する。以下、第１共用領域３１および第２共用領域３２を演算回路として機能させるための構成情報（演算回路構成情報）を、第２の部分構成情報という場合がある。
【００２７】
そして、第１共用領域３１および第２共用領域３２は、それぞれ、ＦＰＧＡ１９を分割して形成された領域であって、内部の回路を再構成可能な同一形状を有する複数の第２の領域（接続回路配置領域）に相当する。
以下、第１共用領域３１，第２共用領域３２および演算回路領域３３をまとめて、部分領域３０という場合がある。
【００２８】
さらに、以下、一つの演算回路を構成する複数の部分領域３０（第１共用領域３１，第２共用領域３２および演算回路領域３３）の集合を演算回路用リソース群という場合がある。また、以下、例えばアルファベット（Ａ，Ｂ，・・・）を演算種別の識別子として用い、例えば、演算種別Ａを実現する演算回路を演算回路Ａと表す。そして、演算回路Ａを構成する複数の部分領域３０を演算回路用リソース群Ａという場合がある。
【００２９】
以上のようなハードウェア構成を有する演算処理装置（コンピュータ）１によって、本第１実施形態の演算処理機能を実現することができる。
なお、演算処理装置１は、例えばコンピュータ読み取り可能な非一時的な記録媒体に記録されたプログラム（演算処理プログラム等）を実行することにより、本第１実施形態の演算処理機能を実現する。演算処理装置１に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、演算処理装置１に実行させるプログラムをＨＤＤ１３に格納しておくことができる。ＣＰＵ１１は、ＨＤＤ１３内のプログラムの少なくとも一部をＲＡＭ１２にロードし、ロードしたプログラムを実行する。
【００３０】
また、演算処理装置１（ＣＰＵ１１）に実行させるプログラムを、光ディスク１６ａ，メモリ装置１７ａ，メモリカード１７ｃ等の非一時的な可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１１からの制御により、ＨＤＤ１３にインストールされた後、実行可能になる。また、プロセッサ１１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００３１】
（Ａ−２）各種情報等
次に、本演算処理装置１において用いられる各種情報等について説明する。
以下においては、データ構造やコマンド等をＣ言語に準じた形式を用いて記述する例を示す。ただし、これに限定されるものではなく、Ｃ言語以外のプログラミング言語に準じた形式で表してもよく種々変形して実施することができる。 
【００３２】
図３は第１実施形態の一例としての演算処理装置１において用いられる演算情報のデータ構造を例示する図であり、ＦＰＧＡ１９で実行可能な演算に関する情報およびＦＰＧＡ１９の部分構成情報のデータ構造を示す。
例えば、config_ptr_t はＲＡＭ１２に格納された各構成情報（部分構成情報）の格納場所を示すポインタである。
【００３３】
area_type_routerはルータ３２を実現するための構成情報である。また、area_type_path_horiは横配線３１ａを実現するための構成情報であり、area_type_path_vert は縦配線３１ｂを実現するための構成情報である。
以下、これらのルータ３２，縦配線３１ｂおよび横配線３１ａを実現するための各構成情報を通信網構成情報という場合がある。
【００３４】
noc_config_data[3] は接続回路を実現するための構成情報であり、上述したルータ３２，横配線３１ａおよび縦配線３１ｂのそれぞれに対応した構成情報へのポインタを列挙することにより構成されるポインタ配列である。
このように、本演算処理装置１においては、ＦＰＧＡ１９の回路構成情報が、横配線３１ａ，縦配線３１ｂ，ルータ３２をそれぞれ構成する複数のモジュール（部分構成情報）に分割して構成されている。そして、これらの部分構成情報は、各部分領域３０に対して個別に設定することで、部分的に（部分領域３０毎に）回路設定を行なうことができる。
【００３５】
calc_type_info_tは演算についての情報（演算情報１２２）であって、ＦＰＧＡ１９において当該演算を実現するために使用する部分領域３０の数を示す。calc_type_info_tは、calc_sizexおよびcalc_sizeyを備える。
calc_sizexは、当該演算に使用する部分領域３０の横方向（ｘ方向）の数（列数）を示し、calc_sizeyは、当該演算に使用する部分領域３０の縦方向（ｙ方向）の数（行数）を示す。
【００３６】
config_data[calc_sizex][calc_sizey]は、演算回路を構成する構成情報へのポインタの２次元配列であり、上述したcalc_sizex/yを用いて表す。
例えば、後述する図４の符号（２）に示す例において、演算種別Ｂの演算回路は、“config_data[1][3]”であり、これは、この演算回路がＦＰＧＡ１９において、横方向に１列、縦方向に３行の部分領域３０を用いて形成されることを示す。
【００３７】
また、演算配列のindexが、calc_type_idとなる。calc_type_info[演算種別数]は、演算種別の数を示す、本第１実施形態においては、演算種別数は2（演算種別Ａ，Ｂ）である。
図４は第１実施形態の一例としての演算処理装置１におけるＦＰＧＡ１９に形成される演算回路を説明するための図である。
【００３８】
図４中において、符号（１）は、演算種別Ａの演算要求を処理するための演算回路を模式的に示す。また、符号（２）は、演算種別Ｂの演算要求を処理するための演算回路を模式的に示す。
以下、演算種別Ａの演算要求を処理するための演算回路を演算回路Ａといい、演算種別Ｂの演算要求を処理するための演算回路を演算回路Ｂという。
【００３９】
なお、ＦＰＧＡ１９に配置された、実行可能な状態にある演算回路を演算インスタンスもしくは単にインスタンスという場合がある。また、以下、ＦＰＧＡ１９に演算回路を形成することを、演算回路をロードするという場合がある。
また、図４中において、符号（３）は、演算回路Ｂを実現するための構成情報（部分構成情報）がＲＡＭ１２に格納された状態を示すメモリマップである。
【００４０】
ＲＡＭ１２における所定の領域には、演算回路を形成するための構成情報が格納されており、ＦＰＧＡ１９によって実現される演算処理の種類に応じて複数種類の構成情報が格納されている。
前述の如く、ＦＰＧＡ１９に形成される演算回路には、第１共用領域３１，第２共用領域３２および演算回路領域３３が含まれる。従って、ＲＡＭ１２には、これらの第１共用領域３１，第２共用領域３２および演算回路領域３３の各領域を設定するための別々の構成情報（部分構成情報）がそれぞれ格納されている。
【００４１】
図４の符号（３）に示すＲＡＭ１２のメモリマップにおいては、演算種別Ｂの演算回路を構成するための３つの部分領域３０（図４の符号（２）参照）に対応する３つの部分構成情報が格納され、各格納位置がポインタ（ptr00，ptr01，ptr02）によって示されている。
また、これらのポインタが、config_data[1][3]に格納されることで、演算種別Ｂの演算回路を構成する部分構成情報として、演算種別Ｂと関連づけられている例が示されている。 
【００４２】
図５は第１実施形態の一例としての演算処理装置１において用いられるＦＰＧＡ管理情報１２１のデータ構造を例示する図である。
ＦＰＧＡ管理情報１２１は、ＦＰＧＡ１９上の各部分領域３０が、どのように用いられているかを示す情報であり、図５においては、ＦＰＧＡ管理情報１２１をarea_infoとして記述した例を示す。
【００４３】
この図５に示す例において、area_type_routerは、ルータ３２を表し、“0”によって選択される。area_type_path_hori は、水平の配線領域（横配線３１ａ）を表し、“1”によって選択される。area_type_path_vert は、垂直の配線領域（縦配線３１ｂ）を表し、“2”によって選択される。area_type_calcは、演算用領域（演算回路領域３３）を表し、“3”によって選択される。
【００４４】
また、area_info_tは１つの部分領域に関する情報 であって、area_type ，used，calc_type_id，calc_posxおよびcalc_posyを備える。
area_type は、領域の種別を示す。このarea_typeの値は、初期化後に変化することはない。usedは、領域が演算回路として使われているかを示すフラグである。また、calc_type_idは、領域上にある演算種別を識別するＩＤ（identification）を示す。なお、図４に示す例において、演算種別Ａの演算のＩＤは“0”であり、演算種別Ｂの演算のＩＤは“1”である。
【００４５】
また、calc_posxおよびcalc_posyは、演算内のどの領域に使用中かを示すものであり、calc_posxはｘ方向における位置を、calc_posyはｙ方向における位置を、それぞれ示す。
area_info[FPGA_SIZE_X][FPGA_SIZE_Y]は、ＦＰＧＡ１９の全ての部分回路について、どのように用いられているかを管理する。FPGA_SIZE_X、FPGA_SIZE_YはそれぞれFPGAの横方向と縦方向の大きさを部分領域の個数で表したものである。
【００４６】
図６は第１実施形態の一例としての演算処理装置１において用いられる実行中処理情報１２３のデータ構造を例示する図である。
演算情報１２３は、ＦＰＧＡ１９上における演算回路（演算インスタンス）についての情報である。図６においては、１つの演算回路（演算インスタンス）に対応する演算情報のデータ構造をcalc_instance_info_tとして記述した例を示す。
【００４７】
この図６に示す例において、calc_instance_info_tは、calc_type_id ，posx およびposy を備える。
calc_type_idは、演算種別の識別情報（ＩＤ）であり、演算種別ごとに一意の値が設定される。
posxは、演算インスタンスの基準位置（本第１実施形態においては左上領域）が配置される部分領域３０のｘ座標を示す。posyは、演算インスタンスの基準位置（本第１実施形態においては左上領域）が配置される部分領域３０のｙ座標を示す。
【００４８】
また、本演算処理装置１においては、executing_calc_instance_info_list（図８参照）を用いて、不定数のcalc_instance_info_tのインスタンスを管理する。なお、このexecuting_calc_instance_info_list は、例えば、C++の標準テンプレートライブラリ （ＳＴＬ：Standard Template Library）のlistやvectorのイメージである。
図７は第１実施形態の一例としての演算処理装置１におけるＦＰＧＡ１９の初期化手法を例示する図であり、Ｃ言語に準じたプログラムの形式で表したものである。
【００４９】
システムの起動時にはＦＰＧＡ１９には何も書き込まれていない。そこで、演算回路生成部１１２は、初期化処理において、area_infoに対して接続回路（配線３１，ルータ３２）および演算回路領域３３を設定する。
図７に示す例においては、各部分領域３０に対して、ルータ３２，横配線３１ａ，縦配線３１ｂおよび演算回路用領域３３のいずれかが設定される（符号Ｐ１参照）。その後、ルータ３２に対応する部分領域３０にルータ３２を構成するための構成情報noc_config_info[0]の書き込みが行なわれる。また、同様に、横配線３１ａに対応する部分領域３０に横配線３１ａを構成するための構成情報noc_config_info[1]の書き込みが、また、縦配線３１ｂに対応する部分領域３０に縦配線３１ｂを構成するための構成情報noc_config_info[2]の書き込みが、それぞれ行なわれる（符号Ｐ２参照）。
【００５０】
また、各部分領域３０に対して使用されていないことを示すフラグの設定が行なわれる（符号Ｐ３参照）。また、executing_calc_instance_info_listが要素なしの状態にされる（符号Ｐ４参照）。
以上の処理により、ＦＰＧＡ１９が初期化される。この図７に示したＦＰＧＡ１９の初期化は、例えば、後述する演算回路生成部１１２によって実施される。
【００５１】
図８は第１実施形態の一例としての演算処理装置１における実行中処理情報１２３を例示する図である。
この図８中において、符号（２）はＦＰＧＡ１９に設定された複数の演算インスタンスを例示する。また、符号（１）は、符号（２）に示した実行中の演算インスタンスに関する情報についてのexecuting_calc_instance_info_listの詳細を例示する。
【００５２】
図８に示す例においては、符号（２）に示すように、ＦＰＧＡ１９には３つの実行集の演算インスタンスＡ１，Ｂ１，Ａ２と、演算実行後に他の演算回路等による上書きがされずに残っている領域Ｂ０とが形成されている。
なお、演算インスタンスＡ１，Ａ２は演算種別Ａについてのものであり、演算インスタンスＢ１および領域Ｂ０は、演算種別Ｂについてのものである。また、符号（１）に示すように、executing_calc_instance_info_listには、実行中の演算インスタンスのみが登録される。従って、executing_calc_instance_info_listには、演算実行後であって上書きされずに残っている演算処理にかかる領域Ｂ０は登録されていない。
【００５３】
また、executing_calc_instance_info_listには、実行中の各演算インスタンスについて、calc_instance_info_list[n].calc_type_id，calc_instance_info_list[n].posx およびcalc_instance_info_list[n].posyが登録されている。（n=0, 1, 2）
すなわち、このexecuting_calc_instance_info_list（実行中処理情報１２３）を参照することで、ＦＰＧＡ１９における、実行中の演算インスタンスの位置を把握することができる。
【００５４】
（Ａ−３）機能構成
次に、図９を参照しながら、本第１実施形態の演算処理機能を有する演算処理装置１の機能構成について説明する。図９は第１実施形態の一例としての演算処理装置１の機能構成を示す図である。
演算処理装置１は、ＦＰＧＡ１９の回路構成を書き換え、また、ＦＰＧＡ１９に演算処理を割り当て、さらには演算を実行する、演算処理機能を果たす。
【００５５】
このため、演算処理装置１は、図９に示すように、少なくとも演算認識部１１０，選択部１１１，演算回路生成部１１２，演算制御部１１３，接続回路生成部１１４，演算実行部１１５，ＦＰＧＡ状態管理部１１６および演算情報管理部１１７としての機能を有している。
演算認識部１１０は、ＦＰＧＡ１９に処理させるべき演算要求の発生を認識する。本演算処理装置１においては、ＦＰＧＡ１９に実行させる２種類以上（例えば、演算種別Ａ，Ｂ）の演算が予め決定されている。演算認識部１１０は、ＣＰＵ１１における何らかの処理の実行中に、ＦＰＧＡ１９に処理させるべき演算要求が発生した場合に、これを認識する。
【００５６】
選択部１１１は、ＦＰＧＡ１９によって処理されるべき演算要求の発生が演算認識部１１０によって認識されると、ＦＰＧＡ１９中において演算要求を割り当てる領域を選択する。
例えば、選択部１１１は、ＦＰＧＡ１９において、演算要求に対応する演算回路であって演算回路領域３３が使用可能な状態であるものが存在するかを確認する。ＦＰＧＡ１９に、演算要求に対応する演算回路であって、演算回路領域３３が使用可能であり、 且つ不使用状態（他の演算処理を実行中ではない状態）のものが存在する場合には、選択部１１１は、この演算回路領域３３を含む演算回路用リソース群を、演算要求を割り当てる領域として選択する。
【００５７】
また、選択部１１１は、ＦＰＧＡ１９において、演算要求に対応する演算回路であって演算回路領域３３が使用可能な状態であるものが存在しない場合であっても、演算要求に対応する演算回路を割り当て可能な領域が存在するかを確認する。選択部１１１は、ＦＰＧＡ１９において、実行中の他の演算要求にかかる演算回路の領域と重複することなく、演算要求に対応する演算回路を形成することができるかを検討する。検討の結果、実行中の他の演算要求にかかる演算回路の領域と重複することなく、演算要求に対応する演算回路を形成することができる場合には、選択部１１１は、その演算回路領域３３を含む演算回路用リソース群を、演算回路を形成可能な領域として選択する。
【００５８】
演算回路生成部１１２は、選択部１１１によって選択された領域に演算要求に対応する演算回路を形成する。
図１０は第１実施形態の一例としての演算処理装置１における演算回路生成部１１２の機能を説明するための図である。この図１０中において、符号（１）は、ＦＰＧＡ１９に演算回路を形成する前の状態を示し、選択部１１１が、ＦＰＧＡ１９に演算要求に対応する演算回路であって、演算回路領域３３が使用可能であり、且つ不使用状態（演算を実行中ではない状態）ものが存在すると判断した状態を示す。
【００５９】
後述の如く、接続回路生成部１１４は、演算回路による演算処理の終了後に、演算回路として機能していた第１共用領域３１および第２共用領域３２に対して、配線回路を構成する構成情報やルータ回路を構成する構成情報を設定することにより、接続回路として機能させる制御を行なう。すなわち、接続回路生成部１１４は、演算処理の終了後の演算回路において、接続回路を復元（形成）させる制御を行なう。
【００６０】
演算回路生成部１１２は、このように接続回路 が復元されただけで、演算回路用領域３３が他の演算回路により書き換えられていない演算回路（図１０の符号（１）参照）に対して、接続回路に相当する部分領域３０に対してだけ演算回路を構成する構成情報を設定する。これにより、図１０の符号（２）に示すように、その演算回路を再現させる。
演算制御部１１３は、ＦＰＧＡ１９に形成された演算回路に演算要求にかかる処理を実行させる。なお、ＦＰＧＡ１９に演算処理を実行させる手法は既知であり、その詳細な説明は省略する。
【００６１】
ＦＰＧＡ１９によって実行された演算処理の結果は、ＣＰＵ１１に受け渡されて使用される。
ＦＰＧＡ状態管理部１１６は、ＦＰＧＡ１９の状態を管理する。このＦＰＧＡ状態管理部１１６は、ＦＰＧＡ１９上の各部分領域３０が、どのように用いられているかをＦＰＧＡ管理情報１２１を用いて管理する。
【００６２】
演算情報管理部１１７は、演算情報１２２を管理する。例えば、演算情報管理部１１７は、前述したcalc_type_infoやcalc_instance_infoを用いて、演算に関する情報を管理する。
接続回路生成部１１４は、演算処理の終了後に、演算回路として機能していた部分領域３０のうち、第１共用領域３１および第２共用領域３２に対して、配線回路を構成する構成情報やルータ回路を構成する構成情報（通信網構成情報）を設定することにより、接続回路として機能させる制御を行なう。
【００６３】
図１１は第１実施形態の一例としての演算処理装置１における接続回路生成部１１４の機能を説明するための図である。この図１１中において、符号（１）はＦＰＧＡ１９に演算回路が形成され、演算処理を実行中の状態を例示する。また、符号（２）は演算処理が完了した後の状態を示す。
接続回路生成部１１４は、図１１の符号（２）に示すように、演算処理の実行が終了した演算回路において、第１共用領域３１および第２共用領域３２に対して、配線回路を構成する構成情報を設定することにより配線領域として機能させる。
【００６４】
接続回路生成部１１４は、例えば演算認識部１１０が次の演算要求の発生を認識する前に第１共用領域３１および第２共用領域３２を配線領域にすることが望ましい。従って、接続回路生成部１１４は、例えば、演算回路における演算処理の実行の終了直後に、第１共用領域３１および第２共用領域３２を配線領域にすることが望ましい。
演算実行部１１５は、演算要求にかかる演算回路をＦＰＧＡ１９に割り当てることができなかった場合、すなわち、選択部１１１が演算回路を設定する領域を選択できなかった場合に、特定回路が行なう処理と同一処理が既述された、ＣＰＵ１１が実行可能なプログラムを実行する。これにより、ＦＰＧＡ１９に特定回路が構成されなくとも、特定回路が行なう処理をＣＰＵ１１によって実行される。
【００６５】
（Ａ−４）動作
先ず、上述の如く構成された第１実施形態の一例としての演算処理装置１におけるＦＰＧＡ１９への演算回路の形成方法を、図１２を用いて説明する。
初期状態においては、ＦＰＧＡ１９に演算回路が設定されていない（符号（１）参照）。演算認識部１１０が演算Ａの実行要求が認識すると、選択部１１１が、この演算Ａを処理（実行）させることが可能な演算回路ＡがＦＰＧＡ１９上に不使用の状態で存在するかを確認する。
【００６６】
本例においては、ＦＰＧＡ１９上に演算回路Ａが存在しないので、選択部１１１は、ＦＰＧＡ１９における空き領域を、演算回路を形成可能な領域として選択する。
演算回路生成部１１２は、選択部１１１によって選択された領域に演算要求に対応する演算回路Ａを形成する（符号（２）参照）。演算回路Ａは、ＦＰＧＡ１９上において、隣り合う複数の部分領域３０（第１共用領域３１，第２共用領域３２および演算回路用領域３３）を用いて構成される。
【００６７】
ここで、ＦＰＧＡ１９上に演算回路Ａが形成された状態において、演算回路Ａに隣接する位置に演算回路Ｃが形成された場合について考える。この演算回路Ｃの左上に位置するルータ３２と外部Ｉ／Ｆ１９１との間が、演算回路Ａを迂回するように、演算回路Ａの外周に沿う配線経路で接続される。
演算回路Ａによる処理が終了すると、接続回路生成部１１４は、演算回路として機能していた第１共用領域３１および第２共用領域３２に対して、配線回路を構成する構成情報やルータ回路を構成する構成情報（通信網構成情報）を設定することにより、接続回路（ＮｏＣ）を復活させる（符号（３）参照）。
【００６８】
これにより、演算回路Ａに隣接する位置に形成された演算回路Ｃは、その左上に位置するルータ３２と外部Ｉ／Ｆ１９１との間が、演算回路Ａの領域内に形成された接続回路を介して接続される。すなわち、演算回路Ｃと外部Ｉ／Ｆ１９１とが最短経路で接続される。
その後、演算認識部１１０が、再度、演算Ａの実行要求を受信すると、演算回路生成部１１２は、演算回路において、接続回路となっている領域（配線回路部分）に演算回路を構成する構成情報を設定する。これにより、演算回路生成部１１２は演算回路Ａを再現させる（符号（４）参照）。
【００６９】
また、これにより、演算回路Ａに隣接する位置に形成された演算回路Ｃの左上に位置するルータ３２と外部Ｉ／Ｆ１９１との間が、再度、演算回路Ａを迂回するように、演算回路Ａの外周に沿う配線経路で接続される。
この演算回路Ａによる処理が終了すると、接続回路生成部１１４は、演算回路として機能していた第１共用領域３１および第２共用領域３２に対して、配線回路を構成する構成情報やルータ回路を構成する構成情報（通信網構成情報）を設定することにより、接続回路（ＮｏＣ）を復活させる（符号（５）参照）。
【００７０】
これにより、演算回路Ａに隣接する位置に形成された演算回路Ｃは、その左上に位置するルータ３２と外部Ｉ／Ｆ１９１との間が、演算回路Ａの領域内に形成された接続回路を介して接続される。すなわち、演算回路Ｃと外部Ｉ／Ｆ１９１とが最短経路で接続される。
その後、他の演算要求が行なわれ、演算回路Ａの構成に用いられていた一部の演算回路用領域３３は、他の演算回路によって書き換えられたものとする（符号（６）参照）。
【００７１】
この状態において、演算認識部１１０が、再度、演算Ａの実行要求を受信すると、演算回路生成部１１２は、演算回路Ａを構成する全領域３０に対して、演算回路Ａを構成する構成情報を設定する。これにより、演算回路生成部１１２は演算回路Ａを再現させる（符号（７）参照）。
（Ａ−４−１）演算処理の概要
次に、上述の如く構成された第１実施形態の一例としての演算処理装置１における演算要求に対する処理の概要を、図１３に示すフローチャート（ステップＡ１〜Ａ１０）に従って説明する。
【００７２】
ＦＰＧＡ１９に処理させるべき演算要求（以下、演算要求Ａとする）の発生を演算認識部１１０が認識すると、ステップＡ１において、選択部１１１は、ＦＰＧＡ１９において、その全ての演算回路用領域３３（演算回路用リソース群）が他の演算回路によって書き換えられていない演算回路の演算回路用リソース群（Ａ）があるかを確認する。
確認の結果、該当する演算回路の演算回路用リソース群ＡがＦＰＧＡ１９上にある場合には（ステップＡ１のＹｅｓルート参照）、ステップＡ２に移行する。
【００７３】
本演算処理装置１においては、演算回路において演算処理が終了した時点で、演算回路を構成していた部分領域３０のうち第１共用領域３１および第２共用領域３２が、接続回路生成部１１４によって接続回路（配線領域）に戻されている。ステップＡ２において、接続回路生成部１１４が、ＦＰＧＡ１９上における演算回路の演算回路用リソース群Ａのうち接続回路部分だけに演算回路構成情報（第２の部分構成情報）を設定する。これにより、演算回路用リソース群Ａを用いてＦＰＧＡ１９上に演算回路が再現される。
【００７４】
ステップＡ３において、演算制御部１１３は、ＦＰＧＡ１９に再現された演算回路に演算要求にかかる処理を実行させる。
ステップＡ４において、接続回路生成部１１４は、ＦＰＧＡ１９上における演算回路の演算回路用リソース群Ａのうち配線回路部分だけに接続回路構成情報を設定する。これにより、演算回路を構成していた部分領域３０のうち第１共用領域３１および第２共用領域３２が、接続回路生成部１１４によって接続回路（配線領域）に戻される。その後、処理を終了する。
【００７５】
一方、ステップＡ１における確認の結果、該当する演算回路の演算回路用リソース群ＡがＦＰＧＡ１９上にない場合には（ステップＡ１のＮｏルート参照）、ステップＡ５に移行する。
ステップＡ５において、選択部１１１は、ＦＰＧＡ１９において、その全ての演算回路用領域３３（演算回路用リソース群）を書き込み可能な、他の演算回路によって使用されていない演算回路用リソース群（Ｂ）があるかを確認する。
【００７６】
確認の結果、該当する演算回路の演算回路用リソース群ＢがＦＰＧＡ１９上にある場合には（ステップＡ５のＹｅｓルート参照）、ステップＡ６に移行する。
ステップＡ６において、演算回路生成部１１２が、ＦＰＧＡ１９上における演算回路の演算回路用リソース群Ｂのうち演算回路用領域３３に演算回路構成情報（第１の部分構成情報）を設定する。
【００７７】
ステップＡ７において、接続回路生成部１１４が、ＦＰＧＡ１９上における演算回路の演算回路用リソース群Ｂのうち接続回路部分だけに演算回路構成情報（第２の部分構成情報）を設定する。これにより、演算回路用リソース群Ｂを用いてＦＰＧＡ１９上に演算回路が再現される。
ステップＡ８において、演算制御部１１３は、ＦＰＧＡ１９に再現された演算回路に演算要求にかかる処理を実行させる。
【００７８】
ステップＡ９において、接続回路生成部１１４は、ＦＰＧＡ１９上における演算回路の演算回路用リソース群Ｂのうち配線回路部分だけに接続回路構成情報を設定する。これにより、演算回路を構成していた部分領域３０のうち第１共用領域３１および第２共用領域３２が、接続回路生成部１１４によって接続回路（配線領域）に戻される。その後、処理を終了する。
【００７９】
また、ステップＡ５における確認の結果、該当する演算回路の演算回路用リソース群ＢがＦＰＧＡ１９上にない場合には（ステップＡ５のＮｏルート参照）、当該演算要求をＦＰＧＡ１９で処理することができない。
そこで、ステップＡ１０において、演算実行部１１５が、当該演算要求を処理する。その後、処理は終了する。
【００８０】
（Ａ−４−２）演算要求に対する処理の詳細
次に、上述の如く構成された第１実施形態の一例としての演算処理装置１における演算要求に対する処理の詳細を、図１４〜図１９に示すフローチャートに従って説明する。
なお、図１４はその演算要求に対する処理の全体の流れを説明するためのフローチャート（ステップＢ１〜Ｂ１７）であり、引数として、演算要求にかかる演算種別Xが引数として用いられる。
【００８１】
図１５および図１６は、演算後不使用領域発見処理の詳細を示すフローチャートであり、図１５はステップＣ１〜Ｃ８を、図１６はステップＣ９〜Ｃ１７を、それぞれ示す。
図１７は演算構成情報書き込み処理の詳細を示すフローチャート（ステップＤ１〜Ｄ５）である。図１８は通信網復元処理の詳細を示すフローチャート（ステップＥ１〜Ｅ５）である。図１９は使用可能領域発見処理を示すフローチャート（ステップＦ１〜Ｆ１３）である。
【００８２】
まず、図１４のステップＢ１において、演算後不使用領域発見処理が行なわれる。演算後不使用領域発見処理は、演算後不使用領域を発見する処理であり、主に選択部１１１によって実行される。ここで、演算後不使用領域とは、演算要求にかかる演算回路の演算回路用領域３３が維持された状態の領域（演算回路用リソース群）であり、実行中の他の演算処理に、使用されていない（不使用）領域である。なお、この演算後不使用領域発見処理の詳細は、図１５および図１６を用いて後述する。
【００８３】
演算後不使用領域発見処理を実行するに際して、引数として演算種別Ｘが用いられる。演算後不使用領域発見処理を実行することにより、戻り値としてbool Yおよび座標x,yが得られる。
なお、bool Yは、真か偽かを表す値であり、ＦＰＧＡ１９上に演算回路を割り当て可能な不使用領域が発見された場合にtrueが設定され、発見出来なかった場合にfalseが設定される。また、座標x,yは、ＦＰＧＡ１９上に演算回路を割り当て可能な不使用領域が発見された場合に、その位置を表す。
【００８４】
図１４のステップＢ２において、ステップＢ１における戻り値Yがtrueであるか、すなわち、演算回路を割り当て可能な領域が発見されたかが確認される。
ステップＢ２における確認の結果、演算回路を割り当て可能な領域が発見された場合、すなわち、Y=trueである場合に（ステップＢ２のＹｅｓルート参照）、図１４のステップＢ３に移行する。
【００８５】
ステップＢ３において、書き込み情報種別ｔとして通信網相当部分が設定される。ステップＢ４において、演算構成情報の書き込み処理が行なわれる。なお、この演算構成情報の書き込み処理の詳細は、図１７を用いて後述する。また、この演算構成情報の書き込み処理を実行するに際して、引数として、演算種別Ｘ、座標x,yおよび書き込み情報種別ｔが用いられる。
【００８６】
その後、図１４のステップＢ５において、executing_calc_instance_info_listに実行中の演算の情報として、calc_type_id=X，posx=x，posy=yの要素を追加する。
図１４のステップＢ６において、２つ前のステップ、すなわち、ステップＢ４において書き込みを行なった情報で演算を実行する。
演算の終了後、ステップＢ７において、ステップＢ５でexecuting_calc_instance_info_listに追加した、calc_type_id=X，posx=x，posy=yの要素を削除する。
【００８７】
図１４のステップＢ８において、通信網復元処理が行なわれる。なお、この通信網復元処理の詳細は、図１７を用いて後述する。また、この通信網復元処理を実行するに際して、引数として演算種別Ｘおよび座標x,yが用いられる。その後処理を終了する。
一方、ステップＢ２における確認の結果、演算回路を割り当て可能な領域が発見されなかった場合、すなわち、Y=falseである場合に（ステップＢ２のＮｏルート参照）、図１４のステップＢ９に移行する。
【００８８】
ステップＢ９においては、使用可能領域発見処理が行なわれる。この使用可能領域発見処理は、主に選択部１１１によって実行される。なお、この使用可能領域発見処理の詳細は、図１９を用いて後述する。
なお、この使用可能領域発見処理を実行するに際して、引数として演算種別Ｘが用いられる。また、使用可能領域発見処理を実行することにより、戻り値としてbool Yおよび座標x,yが得られる。
【００８９】
図１４のステップＢ１０において、戻り値Yがtrueであるか、すなわち、演算回路を割り当て可能な領域が発見されたかが確認される。
ステップＢ１０における確認の結果、演算回路を割り当て可能な領域が発見された場合、すなわち、Y=trueである場合に（ステップＢ１０のＹｅｓルート参照）、図１４のステップＢ１１に移行する。
【００９０】
ステップＢ１１において、書き込み情報種別ｔとして演算回路に含まれる部分領域３０全体が設定される。ステップＢ１２において、演算構成情報の書き込み処理が行なわれる。なお、この演算構成情報の書き込み処理の詳細は、図１７を用いて後述する。また、この演算構成情報の書き込み処理を実行するに際して、引数として、演算種別Ｘ、座標x,yおよび書き込み情報種別ｔが用いられる。
【００９１】
その後、図１４のステップＢ１３において、executing_calc_instance_info_listに実行中の演算の情報として、calc_type_id=X，posx=x，posy=yの要素を追加する。
図１４のステップＢ１４において、２つ前のステップ、すなわち、ステップＢ１２において書き込みを行なった情報で演算を実行する。
演算の終了後、図１４のステップＢ１５において、ステップＢ１３でexecuting_calc_instance_info_listに追加した、calc_type_id=X，posx=x，posy=yの要素を削除する。
【００９２】
図１４のステップＢ１６において、通信網復元処理が行なわれる。なお、この通信網復元処理の詳細は、図１７を用いて後述する。また、この通信網復元処理を実行するに際して、引数として演算種別Ｘおよび座標x,yが用いられる。その後処理を終了する。
また、ステップＢ１０における確認の結果、演算回路を割り当て可能な領域が発見されなかった場合、すなわち、Y=falseである場合に（ステップＢ１０のＮｏルート参照）、当該演算要求をＣＰＵ１１において実行し（図１４のステップＢ１７）、処理を終了する。
【００９３】
（Ａ−４−３）演算後不使用領域発見処理
次に、第１実施形態の一例としての演算処理装置１における演算後不使用領域発見処理を、図１５および図１６に示すフローチャート（ステップＣ１〜Ｃ１７）に従って説明する。
図１５のステップＣ１において、mx = FPGA_SIZE_X - calc_type_info[X].sizexおよびmy = FPGA_SIZE_Y - calc_type_info[x].sizeyを設定する。これにより、演算種別Xを実行するための演算回路として検証する演算回路用リソース群の左上位置として使われる領域を設定する。
【００９４】
図１５のステップＣ２では、area_info内の、“area_type==area_type_calc且つ、0≦ax<mx && 0≦ay<my”の全ての要素に対して、ステップＦ８までの制御を繰り返し実施するループ処理を開始する。なお、ax,ayは、対象領域のarea_infoの配列添え字である。
図１５のステップＣ３では、area_info[ax][ay].used ==1且つ、area_info[ax][ay].calc_type_id==X且つ、area_info[ax][ay].calc_posx==0且つ、area_info[ax][ay].calc_posy==0であるかを確認する。
【００９５】
すなわち、その演算回路領域３３が、演算要求にかかる演算種別Ｘについて演算回路であり、その演算回路における左上隅の基準位置に相当する領域（０，０）であるかを確認する。
上記要件を満たさない場合には（ステップＣ３のＮｏルート参照）、ステップＣ１６に移行する。
【００９６】
一方、上記要件が満たされる場合には（ステップＣ３のＹｅｓルート参照）、図１５のステップＣ４において、変数ＮＧにfalseが設定される。その後、図１５のステップＣ５に移行する。
ステップＣ５では、演算種別Ｘ内の全部分領域３０に対して、ステップＣ６，Ｃ７の制御を繰り返し実施するループ処理を開始する。
【００９７】
なお、ｘ，ｙは、演算種別Ｘ内の領域の座標であり、それぞれ、0〜calc_type_info[X]/sizex-1、0〜calc_type_info[X]/sizey-1の範囲で変化する。
図１５のステップＣ６において、選択部１１１は、対象演算種別（本例においては演算種別Ｘ）の演算回路に相当する領域（以下、対象領域という）内において、演算回路領域３３が全て揃っているかをチェックする。
【００９８】
すなわち、条件（１）area_info[ax+x][ay+y].area_type!=area_type_calc、または、条件（２）area_info[ax+x][ay+y].used==1 且つ、area_info[ax+x][ay+y].calc_type_id==X且つ、area_info[ax+x][ay+y].calc_posx==x且つ、area_info[ax+x][ay+y].calc_posy==yのいずれかを満たすかを判断する。
ここで条件（１）は、対象領域内に含まれるに全ての部分領域３０が演算回路用領域３３であるかを確認する。
【００９９】
また、条件（２）は、対象領域内に含まれる各部分領域３０が、演算種別Ｘの演算回路であり、なおかつ演算回路中における期待する位置の部分演算回路であるかを確認する。
ステップＣ６における確認の結果、条件（１），（２）のいずれも満たされない場合には（ステップＣ６のＮｏルート参照）、図１５のステップＣ７において、変数ＮＧにtrueを設定する。その後、図１５のステップＣ８において、ステップＣ５に対応するループ端処理が実施される。ここで、演算種別Ｘ内の全部分領域３０に対して、演算種別Xの演算回路の演算回路領域３３が全て揃っているかの確認処理が完了すると、制御がステップＣ９に進む。
【０１００】
また、ステップＣ６における確認の結果、条件（１），（２）の少なくともいずれか一方が満たされた場合には（ステップＣ６のＹｅｓルート参照）、ステップＣ７をスキップしてステップＣ８に移行する。
図１６のステップＣ９において、ＮＧにtrueが設定されているかが確認される。ＮＧにfalseが設定されている場合には（ステップＣ９のＮｏルート参照）、図１６のステップＣ１０に移行する。また、ＮＧにtrueが設定されている場合には（ステップＣ９のＹｅｓルート参照）、図１６のステップＣ１４に移行する。
【０１０１】
ステップＣ１０では、execute_calc_instance_info_list中に登録されている全ての実行中の演算処理に対して、図１６のステップＣ１１〜Ｃ１３の制御を繰り返し実施するループ処理を開始する。すなわち、見つけた領域が実行中の他の演算インスタンス（演算回路）で使用中でないかを確認する。
ステップＣ１１では、i.calc_type_info==X 且つ、i.x_pos=ax且つ、i.y_pos=ayであるかを確認する。これにより、対象領域がexecute_calc_instance_info_listに登録されていないことを確認する。
【０１０２】
確認の結果、対象領域がexecute_calc_instance_info_listに登録されている場合、すなわち、対象領域が実行中の他の演算インスタンスによって使用されている場合には（ステップ（Ｃ１１のＹｅｓルート参照）、ステップＣ１２に移行する。ステップＣ１２においては、フラグＮＧにtrueを設定する。その後、ステップＣ１３に移行する。
ステップＣ１３では、ステップＣ１０に対応するループ端処理が実施される。ここで、execute_calc_instance_info_list中に登録されている全ての実行中の演算処理についての処理が完了すると、制御がステップＣ１４に進む。
【０１０３】
一方、対象領域がexecute_calc_instance_info_listに登録されていない場合には（ステップＣ１１のＮｏルート参照）、ステップＣ１２をスキップしてステップＣ１３に移行する。
図１６のステップＣ１４において、ＮＧにtrueが設定されているかを確認する。ＮＧにtrueが設定されていない場合、すなわち、ＮＧにfalseが設定されている場合には（ステップＣ１４のＮｏルート参照）、図１６のステップＣ１５に移行する。ステップＣ１５においては、Y（bool Y）にtrueを設定するとともに、x=ax，y=ayを設定する。その後、処理を終了し、図１４のフローチャートのステップＢ２に移行する。
【０１０４】
すなわち、ステップＣ１１における確認の結果、他の演算インスタンスによって使用されていない演算回路用リソース群が検出された場合には、早急に演算後不使用領域発見処理を終了するのである。
ステップＣ１４における確認の結果、ＮＧにtrueが設定されている場合には（ステップＣ１４のＹｅｓルート参照）、図１６のステップＣ１６に移行する。ステップＣ１６では、ステップＣ２に対応するループ端処理が実施される。ここで、ＦＰＧＡ１９における全ての演算回路領域３３についての処理が完了すると、制御が図１６のステップＣ１７に進む。
【０１０５】
ステップＣ１７においては、Y（bool Y）にfalseが設定される。その後、処理を終了し、図１４のフローチャートのステップＢ２に移行する。
（Ａ−４−４）演算構成情報書き込み処理
次に、第１実施形態の一例としての演算処理装置１における演算構成情報書き込み処理を、図１７に示すフローチャート（ステップＤ１〜Ｄ５）に従って説明する。  
【０１０６】
図１７のステップＤ１では、演算種別Xの演算回路内に含まれる全ての部分領域３０に対して、ステップＤ４までの制御を繰り返し実施するループ処理を開始する。
なお、cx,cyは演算種別X内の領域の座標で、それぞれ0〜calc_type_info[X].sizex-1、0〜calc_type_info[x].sizey-1の範囲で変化する。
図１７のステップＤ２では、area_infoを更新する。すなわち、area_info[x+cx][y+cy].usedにtrueを、area_info[x+cx][y+cy].calc_type_id にXを、area_info[x+cx][y+cy].calc_posx にcxを、area_info[x+cx][y+cy].calc_posx にcyを、それぞれ設定する。
【０１０７】
図１７のステップＤ３では、条件（１）t==全体、または、条件（２）area_info[x+cx][y+cy].area_typeがarea_type_calcでない、のいずれかを満たすかを判断する。
条件（１），（２）の少なくともいずれか一方が満たされる場合には（ステップＤ３のＹｅｓルート参照）、図１７のステップＤ４に移行する。
ステップＤ４においては、area_info[x+cx][y+cy]に対応する位置に、calc_type_info.config_data[cx][cy]が書き込まれる。
【０１０８】
また、条件（１），（２）のいずれも満たされない場合には（ステップＤ３のＮｏルート参照）、図１７のステップＤ５に移行する。
図１７のステップＤ５では、ステップＤ１に対応するループ端処理が実施される。演算回路内に含まれる全ての部分領域３０に対しての処理が完了すると、本フローが終了し、図１４に示すフローチャートのステップＢ５またはステップＢ１３に移行する。
【０１０９】
（Ａ−４−５）通信網復元処理
次に、第１実施形態の一例としての演算処理装置１における通信網復元処理を、図１８に示すフローチャート（ステップＥ１〜Ｅ５）に従って説明する。以下の処理は、主に接続回路生成部１１４によって行なわれる。  
図１８のステップＥ１では、演算種別Xの演算回路内に含まれる全ての部分領域３０に対して、ステップＥ４までの制御を繰り返し実施するループ処理を開始する。
【０１１０】
なお、cx,cyは演算種別X内の領域の座標で、それぞれ0〜calc_type_info[X].sizex-1、0〜calc_type_info[x].sizey-1の範囲で変化する。
図１８のステップＥ２では、area_info[x+cx][y+cy].area_typeがarea_type_calcであるかを確認する。確認の結果、area_info[x+cx][y+cy].area_typeがarea_type_calcでない場合には（ステップＥ２のＮｏルート参照）、図１８のステップＥ３に移行する。
【０１１１】
ステップＥ３においては、area_info[x+cx][y+cy].used = falseを設定する。
その後、図１８のステップＥ４において、area_info[x+cx][y+cy]に対応する位置に、noc_config_data[area_info[x+cx][y+cy].area_type]を書き込む。これにより、演算回路における、第１共用領域３１および第２共用領域３２に第１配線３１やルータ３２が形成され、接続回路が復元される。
【０１１２】
また、ステップＥ２における確認の結果、area_info[x+cx][y+cy].area_typeがarea_type_calcと一致する場合には（ステップＥ２のＹｅｓルート参照）、図１８のステップＥ５に移行する。
図１８のステップＥ５では、ステップＥ１に対応するループ端処理が実施される。演算回路内に含まれる全ての部分領域３０に対しての処理が完了すると、本フローが終了し、図１４に示すフローチャートにおける処理が終了する。
【０１１３】
（Ａ−４−６）使用可能領域発見
次に、第１実施形態の一例としての演算処理装置１における使用可能領域発見処理を、図１９に示すフローチャート（ステップＦ１〜Ｆ１３）に従って説明する。  
図１９のステップＦ１において、mx = FPGA_SIZE_X - calc_type_info[X].sizexおよびmy = FPGA_SIZE_Y - calc_type_info[x].sizeyを設定する。これにより、演算種別Xを実行するための演算回路として検証する演算回路用リソース群の左上位置として使われる領域を設定する。
【０１１４】
図１９のステップＦ２では、area_info内の、“area_type==area_type_calc且つ、0≦ax<mx && 0≦ay<my”の全ての要素に対して、ステップＦ８までの制御を繰り返し実施するループ処理を開始する。なお、ax,ayは、対象領域のarea_infoの配列添え字である。
図１９のステップＦ３において、bool NG＝falseを設定する。
図１９のステップＦ４では、execute_calc_instance_info_listの全要素に対して、ステップＦ５〜Ｆ８までの制御を繰り返し実施するループ処理を開始する。すなわち、確保したい領域（部分領域３０）が既に実行中の演算インスタンスと重なっていないかを確認する。なお、iは、リストの要素であって、calc_instance_info_t型である。
【０１１５】
図１９のステップＦ５において、t＝i.calc_type_idを設定する。
図１９のステップＦ６において、
ax_start = ax 
ax_end = ax + calc_type_info[X].sizex - 1
ay_start = ay
ay_end = ay + calc_type_info[X].sizey - 1
ex_start = i.x_pos,
ex_end = ex_start + calc_type_info[t].sizex - 1
ey_start = i.y_pos,
ey_end = ey_start + calc_type_info[t].sizey - 1
をそれぞれ設定する。
【０１１６】
なお、ax_startは、検証対象の演算回路用リソース群の左端位置、ax_endは、検証対象の回路用リソース群の右端位置、ay_startは、検証対象の回路用リソース群の上端位置、ay_endは、検証対象の回路用リソース群の下端位置である。
また、ex_start は、演算を実行中の演算回路用リソース群の左端位置、ex_endは演算を実行中の演算回路用リソース群の右端位置、ey_startは演算を実行中の演算回路用リソース群の上端位置、ey_endは演算を実行中の演算回路用リソース群の下端位置である。
【０１１７】
これらの検証対象の演算回路用リソース群と演算を実行中の演算回路用リソース群との各端部位置の大小を比較することで、検証対象の演算回路用リソース群と演算を実行中の演算回路用リソース群との重合関係を判断する。
そして、ステップＦ７において、条件（１）ax_end<ex_start、または、条件（２）ex_end<ay_start、または、条件（３）ay_end<ey_start、または、条件（４）ey_end<ay_startのうち、少なくともいずれかが１つが満たされたかを確認する。これにより、execute_calc_instance_info_list中に登録された実行中の演算によって使用されている部分領域３０との重なりが生じていないことを確認する。
【０１１８】
確認の結果、条件（１）〜（４）のいずれも満たされていない場合には（ステップＦ７のＮｏルート参照）、重なりが生じていると判断され、図１９のステップＦ８において、NG=trueを設定する。
また、ステップＦ７における確認の結果、少なくとも条件（１）〜（４）のいずれかが満たされている場合には（ステップＦ７のＹｅｓルート参照）、ステップＦ８をスキップして図１９のステップＦ９に移行する。x方向またはy方向のいずれかにおいて重なりがなければ、領域の重合は生じていないからである。
【０１１９】
ステップＦ９では、ステップＦ４に対応するループ端処理が実施される。ここで、execute_calc_instance_info_listの全要素に対する処理が完了すると、制御がステップＦ１０に進む。
図１９のステップＦ１０において、ＮＧにtrueが設定されているかを確認する。ＮＧにtrueが設定されていない場合、すなわち、ＮＧにfalseが設定されている場合には（ステップＦ１０のＮｏルート参照）、図１９のステップＦ１１に移行する。ステップＦ１１においては、Y（bool Y）にtrueを設定するとともに、x=ax，y=ayを設定する。その後、処理を終了し、図１４のフローチャートのステップＢ１０に移行する。
【０１２０】
すなわち、ステップＦ７における確認の結果、実行中の演算回路用リソース群と重合していない、演算回路を設定可能な演算回路用リソース群が検出された場合には、早急に使用可能領域発見処理を終了するのである。
ステップＦ１０における確認の結果、ＮＧにtrueが設定されている場合（ステップＦ１０のＹｅｓルート参照）、図１９のステップＦ１２に移行する。ステップＦ１２では、ステップＦ２に対応するループ端処理が実施される。ここで、area_info内の、“area_type==area_type_calc且つ、0≦ax<mx && 0≦ay<my”の全ての要素についての処理が完了すると、制御が図１９のステップＦ１３に進む。
【０１２１】
ステップＦ１３においては、Y（bool Y）にfalseが設定される。その後、処理を終了し、図１４のフローチャートのステップＢ１０に移行する。
（Ａ−５）効果
このように、第１実施形態の一例としての演算処理装置１においては、演算回路を用いた演算処理の終了後に、接続回路生成部１１４が、演算回路として機能していた部分領域３０のうち、第１共用領域３１および第２共用領域３２を接続回路として機能させる制御を行なう。すなわち、演算回路による演算処理の終了後に演算回路における接続回路部分を復活させる。
【０１２２】
これにより、ＦＰＧＡ１９上における他の演算回路が、演算回路において復活された接続回路を用いて外部Ｉ／Ｆ１９１に対してアクセスすることができ、ＦＰＧＡ１９上に形成された演算回路からのＩＯ（Input Output）性能を向上させることができる。すなわち、ＦＰＧＡ１９における処理性能を向上させることができる。
また、演算要求にかかる演算回路と同一の演算回路の演算回路用領域３３がＦＰＧＡ１９上に残っている場合に、演算回路生成部１１２が、その演算回路における配線回路部分だけに演算回路を構成する構成情報を設定する。
【０１２３】
これにより、演算回路用領域３３について構成情報の書き込みを行なうことなく、ＦＰＧＡ１９上に演算回路を形成することができ、演算回路全体を短時間で復元させることができる。すなわち、演算回路の形成に要する時間を短縮することができ、これによってもＦＰＧＡ１９における処理性能を向上させることができる。
（Ｂ）第２実施形態
上述した第１実施形態の演算処理装置１においては、接続回路生成部１１４が、演算回路を用いた演算処理の終了後に、演算回路における接続回路部分を復活させている。
【０１２４】
これに対して、第２実施形態の演算処理装置１においては、接続回路生成部１１４は、演算回路を用いた演算処理の終了直後の時点では接続回路部分の復活は行なわず、その後、他の演算回路を形成する際に、当該演算回路と外部Ｉ／Ｆ１９１とを接続する経路上にある配線回路部分だけを復活させる。
このように、第２実施形態の演算処理装置１は、主に第１実施形態の接続回路生成部１１４と接続回路部分を復活させるタイミングにおいて異なり、その他の部分は第１実施形態の演算処理装置１と同様に構成されている。
【０１２５】
（Ｂ−１）動作
上述の如く構成された第２実施形態の一例としての演算処理装置１におけるＦＰＧＡ１９への演算回路の形成方法を、図２０を用いて説明する。
初期状態においては、ＦＰＧＡ１９に演算回路が設定されていない（符号（１）参照）。なお、ＦＰＧＡ１９には外部Ｉ／Ｆ１９１が備えられており、ＦＰＧＡ１９に形成された演算回路は、この外部Ｉ／Ｆ１９１を介して、ＦＰＧＡ１９の外部（例えば、ＣＰＵ１１）と通信を行なう。
【０１２６】
演算認識部１１０が演算Ａの実行要求が認識すると、選択部１１１が、この演算Ａを処理（実行）させることが可能な演算回路ＡがＦＰＧＡ１９上に不使用の状態で存在するかを確認する。
本例においては、ＦＰＧＡ１９上に演算回路Ａが存在しないので、選択部１１１は、ＦＰＧＡ１９における空き領域を、演算回路を形成可能な領域として選択する。
【０１２７】
演算回路生成部１１２は、選択部１１１によって選択された領域に演算要求に対応する演算回路Ａを形成する（符号（２）参照）。
演算回路Ａは、ＦＰＧＡ１９上において、隣り合う複数の部分領域３０（第１共用領域３１，第２共用領域３２および演算回路用領域３３）を用いて構成される。
ここで、ＦＰＧＡ１９上に演算回路Ａによる処理が終了した時点において、演算回路Ａに隣接する位置に演算回路Ｃが形成された場合について考える。
【０１２８】
本第２実施形態の演算処理装置１においては、この演算回路Ｃと外部Ｉ／Ｆ１９１とを最短で接続する配線経路が形成される。すなわち、接続回路生成部１１４は、演算回路Ａを構成していた演算回路用リソース群のうち、この配線経路上に位置する第１共用領域３１および第２共用領域３２に対して配線回路を構成する構成情報（通信網構成情報）を設定することにより、接続回路（ＮｏＣ）を復活させる（符号（３）参照）。
【０１２９】
これにより、演算回路Ａに隣接する位置に形成された演算回路Ｃは、その左上に位置するルータ３２と外部Ｉ／Ｆ１９１との間が、演算回路Ａの領域内に形成された接続回路を介して接続される。すなわち、演算回路Ｃと外部Ｉ／Ｆ１９１とが最短経路で接続される。
従って、演算回路Ｃが、演算回路において復活された接続回路を用いて外部Ｉ／Ｆ１９１に対して最短経路でアクセスすることができ、ＦＰＧＡ１９上に形成された演算回路からのＩＯ性能を向上させることができる。
【０１３０】
その後、演算認識部１１０が、再度、演算Ａの実行要求を受信すると、演算回路生成部１１２は、演算回路において、接続回路となっている領域（配線回路部分）に演算回路を構成する構成情報を設定する。これにより、演算回路生成部１１２は演算回路Ａを再現させる（符号（４）参照）。
本第２実施形態においては、この演算回路Ａによる処理が終了した時点では、接続回路生成部１１４は、演算回路Ａにおける接続回路（ＮｏＣ）の復活は行なわない（符号（５）参照）。
【０１３１】
その後、他の演算要求が行なわれ、演算回路Ａの構成に用いられていた一部の演算回路用領域３３は、他の演算回路によって書き換えられたものとする（符号（６）参照）。
この状態において、演算認識部１１０が、再度、演算Ａの実行要求を受信すると、演算回路生成部１１２は、演算回路Ａを構成する全領域３０に対して、演算回路Ａを構成する構成情報を設定する。これにより、演算回路生成部１１２は演算回路Ａを再現させる（符号（７）参照）。
【０１３２】
（Ｂ−２−１）演算処理の概要
次に、上述の如く構成された第２実施形態の一例としての演算処理装置１における接続回路生成部１１４による通信網復元処理の概要を、図２１に示すフローチャート（ステップＧ１〜Ｇ５）に従って説明する。
以下に示す例においては、図２１中の符号（１）に示すように、ＦＰＧＡ１９上に演算Ｂ，Ｃを実行する演算回路Ｂ，Ｃがそれぞれ配置され実行中の状態で、演算Ｄの実行要求
が生じた場合について示す。
【０１３３】
また、演算Ｄを実行する演算回路Ｄは、図２１中の符号（２）に示すように、ＦＰＧＡ１９上において、演算回路Ｂ，Ｃと離隔した位置に形成されるものとする。
ステップＧ１において、接続回路生成部１１４は、ルーティングアルゴリズムに基づいて、ＦＰＧＡ１９上において、演算回路Ｄが使用するルータ３２と外部Ｉ／Ｆ１９１とを連絡する全ての経路を列挙する。そして、接続回路生成部１１４は、これらの全ての経路を構成する配線３１およびルータ３２についての部分領域３０（管理単位，要素）を全て列挙し、集合Ｌとする。
【０１３４】
なお、演算回路が使用するルータ３２は、当該演算回路の演算回路用領域３３に設定された演算回路構成情報（第１の部分構成情報）によって特定される。
また、ルーティングアルゴリズムとしては、例えば、ＸＹルーティング（次元順ルーティング）を用いることができる。なお、ルーティングアルゴリズムはこれに限定されるものではなく、固定型ルーティングやランダム型ルーティング、適応型ルーティング、ディペンダブル・ルーティング等の他の手法を用いてもよく、種々変形して実施することができる。
【０１３５】
ステップＧ２では、集合Ｌ中に存在する全ての部分領域３０に対して、ステップＧ４までの制御を繰り返し実施するループ処理を開始する。
ステップＧ３においては、その部分領域３０に通信網がマッピング済みであるかを確認する。
確認の結果、その部分領域３０に通信網がマッピング済みでない場合には（ステップＧ３のＮｏルート参照）、ステップＧ４に移行する。
【０１３６】
ステップＧ４においては、通信網構成情報を用いて、その部分領域３０に通信網を形成（復元）する。
その後、制御がステップＧ５に進む。ステップＧ５では、ステップＧ２に対応するループ端処理が実施される。ここで、集合Ｌ中に存在する全ての部分領域３０についての処理が完了すると、本フローが終了する。
【０１３７】
また、ステップＧ３における確認の結果、その部分領域３０に通信網がマッピング済みである場合には（ステップＧ３のＹｅｓルート参照）、ステップＧ５に移行する。
（Ｂ−２−２）演算要求に対する処理の詳細
次に、上述の如く構成された第２実施形態の一例としての演算処理装置１における演算要求に対する処理の詳細を、図１５〜図１７および図１９を参照しながら、図２２および図２３に示すフローチャートに従って説明する。
【０１３８】
なお、図２２はその演算要求に対する処理の全体の流れを説明するためのフローチャート（ステップＢ１〜Ｂ４，Ｂ５，Ｂ７，Ｂ９〜Ｂ１３，Ｂ１５，Ｂ１７，Ｈ１〜Ｈ４）であり、引数として、演算要求にかかる演算種別Xが引数として用いられる。
また、図２３は第２実施形態の一例としての演算処理装置１における通信網復元処理の詳細を示すフローチャート（ステップＪ１〜Ｊ５）である。
【０１３９】
なお、図２２中において、図１４に示したフローチャートと同じ符号が付されたステップは同様の処理を示しており、その詳細な説明は省略する。
図２２のステップＢ４において、演算構成情報の書き込み処理が行なわれた後に、ステップＨ１において、通信網復元処理が行なわれる。なお、この通信網復元処理の詳細は、図２３を用いて後述する。また、この通信網復元処理を実行するに際して、引数として演算種別Ｘおよび座標x,yが用いられる。その後、図２２のステップＢ５に移行する。
【０１４０】
ステップＢ５において、executing_calc_instance_info_listに実行中の演算の情報として、calc_type_id=X，posx=x，posy=yの要素を追加する。
図２２のステップＨ２において、３つ前のステップ、すなわち、ステップＢ４において書き込みを行なった情報で演算を実行する。
図２２のステップＢ７において、２つ前のステップ、すなわち、ステップＢ５においてexecuting_calc_instance_info_listに追加した、calc_type_id=X，posx=x，posy=yの要素を削除する。その後、処理を終了する。
【０１４１】
また、図２２のステップＢ１２において、演算構成情報の書き込み処理が行なわれた後に、ステップＨ３において、通信網復元処理が行なわれる。なお、この通信網復元処理の詳細は、図２３を用いて後述する。また、この通信網復元処理を実行するに際して、引数として演算種別Ｘおよび座標x,yが用いられる。その後、図２２のステップＢ１３に移行する。
【０１４２】
ステップＢ１３において、executing_calc_instance_info_listに実行中の演算の情報として、calc_type_id=X，posx=x，posy=yの要素を追加する。
図２２のステップＨ４において、３つ前のステップ、すなわち、ステップＢ１２において書き込みを行なった情報で演算を実行する。
図２２のステップＢ１５において、２つ前のステップ、すなわち、ステップＢ１３においてexecuting_calc_instance_info_listに追加した、calc_type_id=X，posx=x，posy=yの要素を削除する。その後、処理を終了する。
【０１４３】
（Ｂ−２−３）通信網復元処理
次に、第２実施形態の一例としての演算処理装置１における通信網復元処理を、図２３に示すフローチャート（ステップＪ１〜Ｊ６）に従って説明する。以下の処理は、主に接続回路生成部１１４によって行なわれる。  
図２３のステップＪ１において、ルーティングアルゴリズムに基づいて、x-1, y-1の領域のルータ３２から接続が必要な外部Ｉ／Ｆ１９１への経路を構成する配線回路に含まれる各部分領域３０のx,y座標組を列挙して、集合Ｌとする。
【０１４４】
図２３のステップＪ２では、集合Ｌに含まれる全ての部分領域３０（要素）に対して、ステップＪ５までの制御を繰り返し実施するループ処理を開始する。なお、集合Ｌの各要素のx,y座標をax,ayとする。
図２３のステップＪ３において、area_info[ax][ay].used==trueであるかを確認する。確認の結果、area_info[ax][ay].used==trueでない場合には（ステップＪ３のＮｏルート参照）、図２３のステップＪ６に移行する。
【０１４５】
一方、確認の結果、area_info[ax][ay].used==trueである場合には（ステップＪ３のＹｅｓルート参照）、図２３のステップＪ４に移行する。ステップＪ４においては、area_info[ax][ay].usedにfalseが設定される。
その後、図２３のステップＪ５において、area_info[ax][ay]に対応する位置に、noc_config_data[area_info[ax][ay].area_type]が書き込まれる。
【０１４６】
図２３のステップＪ６では、ステップＪ２に対応するループ端処理が実施される。集合Ｌに含まれる全ての部分領域３０に対しての処理が完了すると、本フローが終了し、図２２に示すフローチャートにおけるステップＢ５またはステップＢ１３に移行する。
（Ｂ−３）効果
このように、第２実施形態の一例としての演算処理装置１においては、演算回路を用いた演算処理の終了後において、他の演算回路を形成する際に、接続回路生成部１１４が当該演算回路と外部Ｉ／Ｆ１９１とを接続する経路上にある配線回路部分を復活させる。
【０１４７】
これにより、ＦＰＧＡ１９上における他の演算回路が、演算回路において復活された接続回路を用いて外部Ｉ／Ｆ１９１に対してアクセスすることができ、ＦＰＧＡ１９上に形成された演算回路からのＩＯ（Input Output）性能を向上させることができる。すなわち、ＦＰＧＡ１９における処理性能を向上させることができる。
また、この際、接続回路生成部１１４は、新たに形成される演算回路と外部Ｉ／Ｆ１９１とを接続する経路上にある配線回路部分だけを復活させることにより、負荷を軽減し、処理の高速化を図ることができる。
【０１４８】
接続回路生成部１１４は、演算回路を用いた演算処理の終了の時点では接続回路部分の復活は行なわないので、これによっても、負荷を軽減し、処理の高速化を図ることができる。
（Ｃ）その他
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１４９】
例えば、上述した各実施形態においては、ＦＰＧＡ１９に演算回路を形成することができなかった場合に、当該演算要求をＣＰＵ１１において実行しているが、これに限定されるものではない。すなわち、ＦＰＧＡ１９に演算回路を形成できるまで待つ等、種々変形して実施することができる。
図２４は、第１実施形態の変形例としての演算処理装置１における演算要求に対する処理の概要を説明するフローチャート（ステップＡ１〜Ａ９）である。
【０１５０】
なお、図２４中において、図１３に示したフローチャートと同じ符号が付されたステップは同様の処理を示しており、その詳細な説明は省略する。
本変形例においては、ステップＡ５における確認の結果、該当する演算回路の演算回路用リソース群ＢがＦＰＧＡ１９上にない場合には（ステップＡ５のＮｏルート参照）、ステップＡ１に戻る。これにより、ＦＰＧＡ１９に演算回路を割り当て可能な演算回路用リソース群が生じるまで、処理を繰り返し実行することで待ち合わせるのである。
【０１５１】
また、本変形例は第２実施形態の演算処理装置１に適用してもよい。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
（Ｄ）付記
（付記１）
内部の回路構成を任意に変更可能なプログラマブル集積回路を制御する演算処理装置であって、
前記プログラマブル集積回路が、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、
前記プログラマブル集積回路によって実行される演算要求を認識する認識部と、
前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する選択部と、
選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する演算回路生成部と、
前記演算回路生成部によって生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる演算制御部と、
前記演算制御部による前記処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる接続回路生成部と
を備えることを特徴とする、演算処理装置。
【０１５２】
（付記２）
前記認識部が、同一の演算要求を再度受信すると、
前記演算回路生成部が、
前記通信処理部として機能する前記第２の領域を、前記演算処理部として機能させることで、前記演算回路を復活させる
ことを特徴とする、付記１記載の演算処理装置。
【０１５３】
（付記３）
前記プログラマブル集積回路における前記複数の第１の領域および前記複数の第２の領域の使用状態を第１管理情報を用いて管理する第１管理部と、
前記プログラマブル集積回路において実行中の処理を第２管理情報を用いて管理する、第２管理部とを備え、
前記第１管理情報および前記第２管理情報を参照して、前記プログラマブル集積回路において、前記演算要求に対応する演算回路であって、当該演算回路において前記第１の領域が不使用状態ものが存在する場合に、前記接続回路生成部が、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、付記１又は２記載の演算処理装置。
【０１５４】
（付記４）
前記接続回路生成部が、
前記演算制御部による前記処理の終了後であって、前記演算回路生成部が前記演算要求とは異なる他の演算要求にかかる演算回路を生成する際に、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、付記１又は２記載の演算処理装置。
【０１５５】
（付記５）
演算を処理するプロセッサと、
内部の回路構成を任意に変更可能に構成され、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、演算回路が形成されて演算を処理するプログラマブル集積回路と、
前記プログラマブル集積回路によって実行される演算要求を認識する認識部と、
前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する選択部と、
選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する演算回路生成部と、
前記演算回路生成部によって生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる演算制御部と、
前記演算制御部による前記処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる接続回路生成部と
を備えることを特徴とする、演算処理システム。
【０１５６】
（付記６）
前記認識部が、同一の演算要求を再度受信すると、
前記演算回路生成部が、
前記通信処理部として機能する前記第２の領域を、前記演算処理部として機能させることで、前記演算回路を復活させる
ことを特徴とする、付記５記載の演算処理システム。
【０１５７】
（付記７）
前記プログラマブル集積回路における前記複数の第１の領域および前記複数の第２の領域の使用状態を第１管理情報を用いて管理する第１管理部と、
前記プログラマブル集積回路において実行中の処理を第２管理情報を用いて管理する、第２管理部とを備え、
前記第１管理情報および前記第２管理情報を参照して、前記プログラマブル集積回路において、前記演算要求に対応する演算回路であって、当該演算回路において前記第１の領域が不使用状態ものが存在するか場合に、前記接続回路生成部が、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、付記５又は６記載の演算処理システム。
【０１５８】
（付記８）
前記接続回路生成部が、
前記演算制御部による前記処理の終了後であって、前記演算回路生成部が前記演算要求とは異なる他の演算要求にかかる演算回路を生成する際に、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、付記５又は６記載の演算処理システム。
【０１５９】
（付記９）
内部の回路構成を任意に変更可能なプログラマブル集積回路を制御して演算を処理する演算処理方法であって、
前記プログラマブル集積回路が、同一形状を有する複数の第１の領域と、前記第１の領域の間に形成された複数の第２の領域とを備え、
前記プログラマブル集積回路によって実行される演算要求を認識する処理と、
前記複数の第１の領域および前記複数の第２の領域の中から、前記演算要求にかかる処理を実行させる演算回路の構成に用いる第１の領域および第２の領域を選択する処理と、
選択された前記第１の領域および第２の領域を演算処理部として機能させることで演算回路を生成する処理と、
生成された前記演算回路に対して、前記演算要求にかかる処理を実行させる処理と、
前記演算要求にかかる処理の終了後に、前記演算回路に含まれる前記第２の領域を通信路として機能させる処理と
を備えることを特徴とする、演算処理方法。
【０１６０】
（付記１０）
前記認識部が、同一の演算要求を再度受信すると、
前記通信処理部として機能する前記第２の領域を、前記演算処理部として機能させることで、前記演算回路を復活させる
ことを特徴とする、付記９記載の演算処理方法。
【０１６１】
（付記１１）
前記プログラマブル集積回路における前記複数の第１の領域および前記複数の第２の領域の使用状態を第１管理情報を用いて管理する処理と、
前記プログラマブル集積回路において実行中の処理を第２管理情報を用いて管理する処理と、
前記第１管理情報および前記第２管理情報を参照して、前記プログラマブル集積回路において、前記演算要求に対応する演算回路であって、当該演算回路において前記第１の領域が不使用状態ものが存在するか場合に、前記接続回路生成部が、前記演算回路に含まれる前記第２の領域を通信路として機能させる処理と
を備えることを特徴とする、付記９又は１０記載の演算処理方法。
【０１６２】
（付記１２）
前記処理の終了後であって、前記演算要求とは異なる他の演算要求にかかる演算回路を生成する際に、前記演算回路に含まれる前記第２の領域を通信路として機能させる
ことを特徴とする、付記９又は１０記載の演算処理方法。
【符号の説明】
【０１６３】
１    演算処理装置
１１    ＣＰＵ
１２    ＲＡＭ
１３    ＨＤＤ
１４    グラフィック処理装置
１４ａ    モニタ
１５    入力インタフェース
１５ａ    キーボード
１５ｂ    マウス
１６    光学ドライブ装置
１６ａ    光ディスク
１７    機器接続インタフェース
１７ａ    メモリ装置
１７ｂ    メモリリーダライタ
１７ｃ    メモリカード
１８    ネットワークインタフェース
１９    ＦＰＧＡ
３０    部分領域
３１    第１共用領域
３１ａ    横配線
３１ｂ    縦配線
３２    第２共用領域
３３    演算回路領域
２０    バス
１１０    演算認識部
１１１    選択部
１１２    演算回路生成部
１１３    演算制御部
１１４    接続回路生成部
１１５    演算実行部
１１６    ＦＰＧＡ状態管理部
１１７    演算情報管理部
１２１    ＦＰＧＡ管理情報
１２２    演算情報
１２３    実行中処理情報
１９１    外部Ｉ／Ｆ
【図１】
0006638362.tif 000002
【図２】
0006638362.tif 000003
【図３】
0006638362.tif 000004
【図４】
0006638362.tif 000005
【図５】
0006638362.tif 000006
【図６】
0006638362.tif 000007
【図７】
0006638362.tif 000008
【図８】
0006638362.tif 000009
【図９】
0006638362.tif 000010
【図１０】
0006638362.tif 000011
【図１１】
0006638362.tif 000012
【図１２】
0006638362.tif 000013
【図１３】
0006638362.tif 000014
【図１４】
0006638362.tif 000015
【図１５】
0006638362.tif 000016
【図１６】
0006638362.tif 000017
【図１７】
0006638362.tif 000018
【図１８】
0006638362.tif 000019
【図１９】
0006638362.tif 000020
【図２０】
0006638362.tif 000021
【図２１】
0006638362.tif 000022
【図２２】
0006638362.tif 000023
【図２３】
0006638362.tif 000024
【図２４】
0006638362.tif 000025