(57)【要約】【課題】再構成処理を簡単にすること。【解決手段】ＣＰＵ１００が、特定回路１０３を集積回路に構成させた場合の特定回路１０３の形状を示す形状情報１１１を取得する。また、ＣＰＵ１００は、形状情報１１１と、特定回路１０３を集積回路に構成可能な特定回路１０３を示すコンフィギュレーションデータ１１２と、特定回路１０３が行う処理と同一処理が記述されたプログラム１１３と、を取得する。ＣＰＵ１００が、複数の分割領域Ａ１〜Ａ２０の各々について使用中か否かを示す管理情報に基づいて、複数の分割領域Ａ１〜Ａ２０のうち少なくともいずれかの分割領域Ａを含む未使用領域であって、取得した形状情報１１１が示す形状に適合する未使用領域を検出する。ＣＰＵ１００が、未使用領域を検出できた場合、集積回路に対して、検出した未使用領域に特定回路１０３を構成させる。【選択図】図１
2015039155.tif 000002
【特許請求の範囲】
【請求項１】
内部の回路を再構成可能な集積回路を区切った同一形状の複数の分割領域の各々にアクセス可能なプロセッサが、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる、
処理を実行することを特徴とする制御方法。
【請求項２】
前記プロセッサが、
前記未使用領域を検出できなかった場合、前記特定回路が行う処理と同一処理が記述されたプログラムであって前記プロセッサが実行可能なプログラムを実行することを特徴とする請求項１に記載の制御方法。
【請求項３】
内部の回路を再構成可能な集積回路であって同一形状の複数の分割領域に区切られた集積回路と、
前記複数の分割領域の各々にアクセス可能なプロセッサと、
前記複数の分割領域の各々が使用中か否かを示す使用情報を記憶する記憶部と、
を有する演算装置であって、
前記プロセッサが、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる処理を実行することを特徴とする演算装置。
【請求項４】
前記プロセッサと前記集積回路とが積層されたことを特徴とする請求項３に記載の演算装置。
【請求項５】
前記複数の分割領域の各々は前記プロセッサとアクセス可能な通信路を前記分割領域内における同一の位置に有することを特徴とする請求項３または４に記載の演算装置。
【請求項６】
内部の回路を再構成可能な集積回路を区切った同一形状の複数の分割領域の各々にアクセス可能なプロセッサに、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる、
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御方法、演算装置、および制御プログラムに関する。
【背景技術】
【０００２】
従来、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）に回路を構成させる場合、ＦＰＧＡの空き領域に応じてコンフィギュレーションデータが作成される。また、従来、ＦＰＧＡに構成される回路について複数通りの形状の各々についてコンフィギュレーションデータを作成しておき、ＦＰＧＡ内の空き領域に合う形状を複数通りの形状から選択して回路を構成させる技術が公知である（例えば、下記特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−１７５２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術では、コンフィギュレーションデータを空き領域に合うように作成するための再構成処理が複雑になるという問題点がある。
【０００５】
１つの側面では、本発明は、再構成処理を簡単にすることができる制御方法、演算装置、および制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、内部の回路を再構成可能な集積回路を区切った同一形状の複数の分割領域の各々にアクセス可能なプロセッサが、特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる制御方法、演算装置、および制御プログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、再構成処理を簡単にすることができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、本発明にかかる再構成処理例を示す説明図である。
【図２】図２は、ＦＰＧＡの分割とアドレスマップ例を示す説明図である。
【図３】図３は、ＦＰＧＡとＣＰＵとが積層された演算装置例を示す説明図である。
【図４】図４は、演算装置の詳細例を示す説明図である。
【図５】図５は、演算装置を有するシステム例を示す説明図である。
【図６】図６は、アプリケーションのバイナリ構造例を示す説明図である。
【図７】図７は、アプリケーションおよびＯＳの動作の記述例を示す説明図（その１）である。
【図８】図８は、アプリケーションおよびＯＳの動作の記述例を示す説明図（その２）である。
【図９】図９は、アプリケーションおよびＯＳの動作の記述例を示す説明図（その３）である。
【図１０】図１０は、アプリケーションおよびＯＳの動作の記述例を示す説明図（その４）である。
【図１１】図１１は、実行結果例を示す説明図である。
【図１２】図１２は、ＣＰＵとバスとの詳細例を示す説明図である。
【図１３】図１３は、アドレス構成例を示す説明図である。
【図１４】図１４は、並列処理のプログラム例を示す説明図である。
【図１５】図１５は、スレッドプログラミング例を示す説明図である。
【図１６】図１６は、システム動作例１を示す説明図である。
【図１７】図１７は、システム動作例２を示す説明図である。
【図１８】図１８は、システムアーキテクチャ例を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、本発明にかかる制御方法、演算装置、および制御プログラムの実施の形態を詳細に説明する。
【００１０】
図１は、本発明にかかる再構成処理例を示す説明図である。ＦＰＧＡ１０１は、内部の回路を再構成可能な集積回路である。ＦＰＧＡ１０１は複数の分割領域Ａ１〜Ａ２０に区切られてある。分割領域Ａ１〜Ａ２０の各々には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００と直接アクセス可能な通信路であるポートｖｉａが分割領域Ａ内における同一の位置に設けられる。分割領域Ａ内における同一の位置は、分割領域の各頂点からの距離が同一の位置である。図１の例では、ポートｖｉａは、分割領域Ａ１〜Ａ２０の各々の右上に設けられる。
【００１１】
ＣＰＵ１００が、特定回路１０３を集積回路に構成させた場合の特定回路１０３の形状を示す形状情報１１１を取得する。また、ＣＰＵ１００は、形状情報１１１と、特定回路１０３を集積回路に構成可能な特定回路１０３を示すコンフィギュレーションデータ１１２と、特定回路１０３が行う処理と同一処理が記述されたプログラム１１３と、を取得する。
【００１２】
つぎに、ＣＰＵ１００が、複数の分割領域Ａ１〜Ａ２０の各々について使用中か否かを示す使用情報に基づいて、複数の分割領域Ａ１〜Ａ２０のうち、未使用領域を検出する。ここで検出される未使用領域は、少なくともいずれかの分割領域Ａを含む未使用領域であって形状情報１１１が示す形状に適合する未使用領域である。ここで、使用情報については、管理テーブル１０２と称する。管理テーブル１０２では、“−１”は未使用であることを示す。また、管理テーブル１０２では、“−１”以外は使用中であることを示し、“−１”以外は構成された回路を示す識別情報である。管理テーブル１０２を参照すると、分割領域Ａ１〜Ａ４には処理Ｐ１を行う回路が構成されてある。また、管理テーブル１０２を参照すると、分割領域Ａ６〜Ａ８には処理Ｐ２を行う回路が構成されてある。図１の例では、形状情報１１１が示す形状は、縦３×横２の領域である。図１の例では、領域Ａ９と、領域Ａ１０と、領域Ａ１３と、領域Ａ１４と、領域Ａ１７と、領域Ａ１８と、が未使用領域として検出される。
【００１３】
ＣＰＵ１００が、未使用領域を検出できた場合、集積回路に対して、検出した未使用領域に特定回路１０３を構成させる。これにより、ＦＰＧＡ１０１への再構成処理を簡単にすることができる。
【００１４】
また、図示していないが、ＣＰＵ１００は、未使用領域を検出できなかった場合、特定回路１０３が行う処理と同一処理が記述された、ＣＰＵ１００が実行可能なプログラム１１３を実行する。ＦＰＧＡ１０１への再構成処理によって特定回路１０３がＦＰＧＡ１０１に構成されなくとも、特定回路１０３が行う処理はＣＰＵ１００によって実行される。このため、ＣＰＵ１００は、未使用領域に応じて、すべての処理をＣＰＵ１００のプログラムとして実行することもできるし、一部分をＦＰＧＡ１０１への再構成を行って処理することもできる。したがって、プログラム１１３よりも高速な特定回路１０３を用意しておくことにより、アプリケーションをＣＰＵ１００だけで実行させるよりも処理性能の向上を図ることができる。
【００１５】
また、ＣＰＵ１００は、ＦＰＧＡ１０１に構成された特定回路１０３へ開始指示を送信すると、特定回路１０３が処理を開始する。これにより、任意のタイミングで特定回路１０３の処理を開始させることができる。そして、特定回路１０３が、処理を完了すると、完了通知をＣＰＵ１００へ送信する。そして、ＣＰＵ１００は、特定回路１０３が構成された分割領域Ａを未使用領域となるように管理テーブル１０２を更新する。これにより、特定回路１０３が構成された分割領域Ａを解放され、あらたに使用可能となる。
【００１６】
また、ＣＰＵ１００とＦＰＧＡ１０１とは積層されていてもよい。これにより、低消費電力化を図ることができる。
【００１７】
また、ＣＰＵ１００は、複数の所定回路の各々にアクセス可能であってもよい。所定回路は、例えば、図１に示した分割領域Ａであってもよいし、特定用途回路であってもよい。所定回路が分割領域Ａの場合、複数の所定回路はＦＰＧＡ１０１となる。特定用途回路は、例えば、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）などが挙げられる。例えば、ＣＰＵ１００は、所定の処理を行うために使用される所定回路を示す領域情報を取得する。所定の処理は、例えば、アプリケーションの複数の処理の一部である。所定回路が分割領域Ａの場合、領域情報は、例えば、所定の処理を行う特定回路１０３をＦＰＧＡ１００に構成させた場合の特定回路１０３の形状を示す形状情報である。所定回路が特定用途回路の場合、領域情報は、例えば、特定の処理を行うことが可能な特定用途回路の機能の種別を示す種別情報である。
【００１８】
そして、ＣＰＵ１００は、複数の所定回路の各々について使用中か否かを示す使用情報に基づいて、複数の所定回路のうち、取得した領域情報が示す所定回路に適合する未使用領域を検出する。そして、ＣＰＵ１００は、検出した未使用領域によって特定の処理を行わせる。例えば、所定回路が分割領域Ａの場合、ＣＰＵ１００による処理は図１に示した処理と同じであるため、詳細な説明を省略する。また、例えば、所定回路が特定用途回路の場合、使用情報は、特定用途回路の各々について使用か否かを示す。または、例えば、所定回路が特定用途回路の場合、使用情報は、特定用途回路の機能の種別の各々について使用か否かを示す。例えば、所定回路が特定用途回路の場合、ＣＰＵ１００は、複数の特定用途回路のうち、領域情報である種別情報が示す種別に適合する種別の特定用途回路の未使用を検出する。そして、ＣＰＵ１００は、検出した未使用の特定用途回路によって所定の処理を行わせる。
【００１９】
図２は、ＦＰＧＡの分割とアドレスマップ例を示す説明図である。図２の例では、ＦＰＧＡ１０１は、４つの分割領域Ａ１〜Ａ４に区切られる。図２の例では、ＦＰＧＡ１０１内のコンフィギュレーションデータメモリが４つの記憶領域に区切られる。ここで、区切られた各記憶領域をセグメントと称する。各セグメントには、ベースアドレスが割り当てられる。各分割領域に対して、セグメントのいずれか一つが割り当てられる。分割領域に割り当てられたセグメントにコンフィギュレーションデータが記憶されると、コンフィギュレーションデータが示す回路が分割領域Ａに構成される。
【００２０】
図２の例では、分割領域Ａ１に対して割り当てられたセグメントのベースアドレスは０であり、分割領域Ａ２に対して割り当てられたセグメントのベースアドレスは５０００である。分割領域Ａ３に対して割り当てられたセグメントのベースアドレスは１００００であり、分割領域Ａ４に対して割り当てられたセグメントのベースアドレスは１５０００である。
【００２１】
また、複数の分割領域Ａ１〜Ａ４の各々には、分割領域Ａ内における同一の位置に物理的なポートｖｉａ１〜ｖｉａ４が設けられる。同一の位置とは、例えば、分割領域の各頂点からの距離が同一の位置である。ポートｖｉａ１〜ｖｉａ４は、例えば、ＦＰＧＡ１０１が通信可能なメモリへの出力、起動レジスタへの出力、終了信号などの出力機能を有する。また、ポートｖｉａ１〜ｖｉａ４には、リセット端子、割り込みベクタ端子、レディ端子などが設けられていてもよい。
【００２２】
図３は、ＦＰＧＡとＣＰＵとが積層された演算装置例を示す説明図である。図３に示すように、演算装置３００は、ＦＰＧＡ層にＦＰＧＡ１０１が設けられ、ＣＰＵ層にＣＰＵ１００が設けられる。ＦＰＧＡ１０１とＣＰＵ１００とは積層される。これにより、ＦＰＧＡ１０１とＣＰＵ１００との間の通信に要する消費電力量を低減させることができる。積層方法については、ワイヤボンディングやＴＳＶ（Ｔｈｒｏｕｇｈ  Ｓｉｌｉｃｏｎ  Ｖｉａ）が挙げられる。
【００２３】
図４は、演算装置の詳細例を示す説明図である。演算装置３００は、ＣＰＵ層において、１または複数のＣＰＵ１００と、周辺回路４０２と、データ転送回路４０１と、を有する。演算装置３００は、ＦＰＧＡ層において、ＦＰＧＡ１０１を有する。データ転送回路４０１は、ＣＰＵ１００と、周辺回路４０２と、ポートｖｉａを介してＦＰＧＡ１０１と、を接続する。データ転送回路４０１は、例えば、バスやＮｏＣなどによって実現される。周辺回路４０２とは、例えば、ＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ  Ｔｒａｎｓｍｉｔｔｅｒ）などが挙げられる。
【００２４】
図５は、演算装置を有するシステム例を示す説明図である。システム５００は、例えば、演算装置３００と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５０１と、ディスクドライブ５０２と、ディスク５０３と、入力装置５０４と、出力装置５０５と、Ｉ／Ｆ（Ｉｎｔｅｒ／Ｆａｃｅ）５０６と、を有する。各部は、バス５０７を介して接続される。
【００２５】
演算装置３００は、全体の制御を司る。演算装置３００内のＣＰＵ１００は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５１１とユーザの指示によってアプリケーション５１２を実行する。ＲＡＭ５０１は、演算装置３００のワークエリアとして使用される。ディスクドライブ５０２は、ＣＰＵ１００の制御にしたがってディスク５０３に対するデータのリード／ライトを制御する。ディスク５０３は、ディスクドライブ５０２の制御で書き込まれたデータを記憶する。ディスク５０３としては、磁気ディスク、光ディスクなどが挙げられる。ここでは、演算装置３００が全体の制御を司る場合を示したが、通常のＣＰＵと同様、演算装置３００をコプロセッサとして利用してもよい。
【００２６】
Ｉ／Ｆ５０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続され、このネットワークＮＥＴを介して他の装置に接続される。そして、Ｉ／Ｆ５０６は、ネットワークＮＥＴと内部のインターフェイスを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ５０６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
入力装置５０４は、キーボード、マウス、タッチパネルなどユーザの操作により、各種データの入力を行うインターフェイスである。また、入力装置５０４は、カメラから画像や動画を取り込むこともできる。また、入力装置５０４は、マイクから音声を取り込むこともできる。出力装置５０５は、ＣＰＵ１００の指示により、データを出力するインターフェイスである。出力装置５０５には、ディスプレイやプリンタが挙げられる。
【００２８】
図６は、アプリケーションのバイナリ構造例を示す説明図である。本実施の形態では、演算装置３００が、アプリケーション５１２のプログラムを実行する例について説明する。アプリケーション５１２のバイナリ６００には、初期部ｉｎｉと、ＣＰＵ部分ｐｒｏｃ＿ｓｗと、コンフィギュレーション部分ｇ＿ｈｗ＿ｓｗ＿ｐｏｉｎｔ＿ｌｉｓｔと、非ＣＰＵ部分ｐｒｏｃ＿ｈｗと、がある。
【００２９】
ここで、ＣＰＵ部分ｐｒｏｃ＿ｓｗは、アプリケーション５１２の処理が記述されたプログラムであり、ＣＰＵ１００が実行可能なプログラムである。ＣＰＵ部分ｐｒｏｃ＿ｓｗは、複数のコードに区切られる。図６の例では、０〜Ｎ（Ｎ＝２）に区切られてある。コードの実行をソフトウェア処理と称し、ＦＰＧＡ１０１に回路を構成させ、当該回路による処理をハードウェア処理と称する。また、ＣＰＵ部分ｐｒｏｃ＿ｓｗは、ソフトウェア処理とハードウェア処理とのいずれを行うかをＯＳ５１１に指示するコードを含む。また、ＣＰＵ部分ｐｒｏｃ＿ｓｗは、ハードウェア処理となった場合に、コンフィギュレーションデータをＦＰＧＡ１０１の指定されたポート番号ｖｉａ＿ｉｄが示すポートｖｉａに送信するためのコードを含む。また、ＣＰＵ部分ｐｒｏｃ＿ｓｗは、ハードウェア処理となった場合に、送信が完了したらＦＰＧＡ１０１に開始指示を送信するためのコードを含む。また、ＣＰＵ部分ｐｒｏｃ＿ｓｗは、ハードウェア処理となった場合に、ＦＰＧＡ１０１からの完了通知を受け付けるためのコードを含む。
【００３０】
コンフィギュレーション部分ｇ＿ｈｗ＿ｓｗ＿ｐｏｉｎｔ＿ｌｉｓｔは、例えば、ＣＰＵ部分ｐｒｏｃ＿ｓｗを区切ったコードごとに、処理情報６０１を有する。処理情報６０１は、ＣＰＵ部分ｐｒｏｃ＿ｓｗと非ＣＰＵ部分ｐｒｏｃ＿ｈｗとの各々が記憶されたアドレスと、非ＣＰＵ部分ｐｒｏｃ＿ｈｗが示す回路をＦＰＧＡ１０１に構成させた場合の回路の形状情報と、を有する。形状情報は、縦方向の領域数と、横方向の領域数と、を有する。例えば、処理情報６０１｛ＣＰＵ部分ｐｒｏｃ＿ｓｗが記憶されたアドレス，非ＣＰＵ部分ｐｒｏｃ＿ｈｗが記憶されたアドレス，縦方向の領域数，横方向の領域数｝である。図６の例では、処理情報６０１−０〜６０１−２がある。ＣＰＵ部分ｐｒｏｃ＿ｓｗを区切るとは、スレッド単位でもよいし、関数単位でもよく、特に限定しない。形状情報は、縦方向に使用する分割領域数と横方向に使用する分割領域数とを含む。
【００３１】
非ＣＰＵ部分ｐｒｏｃ＿ｈｗは、アプリケーション５１２のプログラムを区切った部分プログラムごとに、部分プログラムに記述された処理と同じ処理を行う回路を示すコンフィギュレーションデータである。
【００３２】
（アプリケーション５１２およびＯＳ５１１の動作を示す記述例）
図７〜図１０は、アプリケーションおよびＯＳの動作の記述例を示す説明図である。ここで、ＣＰＵ１００は、ディスク５０３などの記憶装置に記憶されたアプリケーション５１２およびＯＳ５１１のプログラムを読み出す。そして、ＣＰＵ１００は、アプリケーション５１２およびＯＳ５１１のプログラムを実行することにより、各機能を実現する。まず、図７には、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅとポート番号テーブルｇ＿ｖｉａ＿ｉｄ＿ｔａｂｌｅとコンフィギュレーション部分ｇ＿ｈｗ＿ｓｗ＿ｐｏｉｎｔ＿ｌｉｓｔとが記述されてある。ここでは、ＦＰＧＡ１０１は５×５に区切られる。図７中の管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅは、分割領域の各々について、いずれの回路が構成されているか、未使用であるかを示す使用情報である。ここでの管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅには、初期値として、使用中でないこと示す“−１”が設定されてある。ポート番号テーブルｇ＿ｖｉａ＿ｉｄ＿ｔａｂｌｅは、分割領域の各々について、ポートを示す識別情報である。コンフィギュレーション部分ｇ＿ｈｗ＿ｓｗ＿ｐｏｉｎｔ＿ｌｉｓｔは、図６に示した例と同じである。
【００３３】
図８には、実行結果を表示するための関数８０１と、コードの実行とＦＰＧＡ１０１に回路を構成させるか、またはコードを実行するかを決定するための関数ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷと、が記述されてある。
【００３４】
関数ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷは、ハードウェア処理とソフトウェア処理とのいずれにするかを処理情報６０１ごとに決定する処理を行う。具体的には、関数ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷは、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅに基づいて、処理情報６０１に含まれる形状情報が示す形状に適合する未使用領域を検出する処理を行う。図８の例では、関数ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷが行う処理を、コメントなどを用いて簡易的に記述してある。戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅは、処理情報６０１ごとに３つの要素を有する。０番目の要素は、ポート番号ｖｉａ＿ｉｄである。１番目の要素は、検出された未使用領域である矩形の左上座標の縦方向座標である。２番目の要素は、検出された未使用領域である矩形の左上座標の横方向座標である。ここでは、ソフトウェア処理の場合、３つの要素として“−１”が設定されてある。
【００３５】
例えば、処理情報６０１−０については、ＦＰＧＡ１０１が５×５に区切られているため、ＯＳ５１１は１０×１０の未使用領域を検出することができない。そのため、処理情報６０１−１については、ソフトウェア処理となるため、ＯＳ５１１は、戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅの３つの要素として“−１”を設定する。
【００３６】
また、処理情報６０１−１について検出される未使用領域は、｛（０，０），（１，２）｝である。領域は、｛左上座標（縦方向の座標値，横方向の座標値），右下座標（縦方向の座標値，横方向の座標値）｝によって表される。そのため、ＯＳ５１１は、戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅの０番目の要素を領域（０，０）のポート番号にする。領域（０，０）のポート番号は、ポート番号テーブルｇ＿ｖｉａ＿ｉｄ＿ｔａｂｌｅ［０］［０］である。そして、ＯＳ５１１は、１番目の要素を０にし、２番目の要素を０にする。
【００３７】
また、処理情報６０１−２について検出される未使用領域は、｛（０，３）,（２，４）｝である。そのため、ＯＳ５１１は、戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅの０番目の要素を、領域（０，３）のポート番号にする。領域（０，３）のポート番号は、ポート番号テーブルｇ＿ｖｉａ＿ｉｄ＿ｔａｂｌｅ［０］［３］である。そして、ＯＳ５１１は、１番目の要素を０にし、２番目の要素を３にする。
【００３８】
図９には、ＦＰＧＡ１０１内に回路が構成された特定の分割領域を解放させるための関数ｒｅｌｅａｓｅ＿ＨＷと、ＦＰＧＡ１０１内に構成された回路にデータを送信するための関数ｓｅｎｄ＿ｄａｔａと、が記述されてある。また、図９には、ＦＰＧＡ１０１に構成された回路からデータを受信するための関数ｒｅｃｖ＿ｄａｔａが記述されてある。
【００３９】
図１０には、処理情報６０１−０について、ソフトウェア処理となった場合に行われる関数ｐｒｏｃ＿０＿ｓｗと、ハードウェア処理となった場合に行われる関数ｐｒｏｃ＿０＿ｈｗが記述されてある。関数ｐｒｏｃ＿０＿ｈｗは、ハードウェア処理となった場合に、コンフィギュレーションデータをＦＰＧＡ１０１の指定されたポート番号ｖｉａ＿ｉｄが示すポートｖｉａに送信するためのコードを含む。また、関数ｐｒｏｃ＿０＿ｈｗは、ハードウェア処理となった場合に、送信が完了したらＦＰＧＡ１０１に開始指示を送信するためのコードを含む。また、関数ｐｒｏｃ＿０＿ｈｗは、ハードウェア処理となった場合に、ＦＰＧＡ１０１からの完了通知を受け付けるためのコードを含む。図１０の例では、処理情報６０１−１と処理情報６０１−２との各々についてのソフトウェア処理となった場合に行われる関数と、ハードウェア処理となった場合に行われる関数との記述は省略されてある。
【００４０】
また、図１０には、メイン関数が記述されてある。メイン関数では、アプリケーション５１２とアプリケーション５１２が呼び出すＯＳ５１１との処理が記述されてある。メイン関数では、アプリケーション５１２が（１）戻り値テーブル作成および初期化を行う。つぎに、メイン関数では、アプリケーション５１２によって（２）ＯＳ５１１のサービスルーチンが呼ばれると、処理情報６０１ごとに、サービスルーチンの中でソフトウェア処理とハードウェア処理とのいずれかを決定する。そして、決定結果は戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅに記憶する。そして、メイン関数では、（３）戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅに基づいて、ソフトウェア処理とハードウェア処理とのいずれかを実行する。メイン関数では、（４）アプリケーション５１２によってＯＳ５１１のサービスを呼び出し、ＦＰＧＡ１０１内においてハードウェア処理が完了した回路が構成された領域を解放する。
【００４１】
図１１は、実行結果例を示す説明図である。実行結果１１００は、図７から図１０に記述されたプログラムを実行した結果である。例えば、図１１中の０番目の処理は初期値を設定する処理を示し、図１１中の１〜３番目の処理は、それぞれ図１０に示した（１）〜（３）の処理と対応する。１番目の処理によって、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅと戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅとが更新される。
【００４２】
つぎに、アプリケーション５１２において並列処理が行われる場合について説明する。
【００４３】
図１２は、ＣＰＵとバスとの詳細例を示す説明図である。図１３は、アドレス構成例を示す説明図である。上述したように、ＣＰＵ１００と、ＦＰＧＡ１０１内の各領域とは、相互結合網１２０１と領域ごとのバスインターフェイス部１２０２と、によって接続される。ポートには、ポート番号ｖｉａ＿ｉｄが予め付されてある。相互結合網１２０１とバスインターフェイス部１２０２とは上述したデータ転送回路４０１である。
【００４４】
また、ＣＰＵ１００は、バスアクセス部１２１１と、割り込み処理部１２１２と、を有する。ＣＰＵ１００は、バスアクセス部１２１１を介して相互結合網１２０１と接続される。ポートの各々は、開始レジスタ１２２１と、完了レジスタ１２２２と、を有する。
【００４５】
また、バスインターフェイス部１２０２は、ＣＰＵ１００からはメモリのデバイスとして解釈されるため、ＣＰＵ１００からＦＰＧＡ１０１へのアドレス構成を、例えば、図１３のように決めておく。この例では、ＣＰＵ１００からＦＰＧＡ１０１へのアドレス構成では、上位ビットから順に、ＦＰＧＡ１０１を示す識別情報と、ポート番号と、ローカルアドレスと、なっている。図１３の例では、ＦＰＧＡ１０１を示す識別情報が“１１１”である。ローカルアドレスは、開始レジスタ１２２１を示すアドレスと、完了レジスタ１２２２を示すアドレスと、ユーザ領域を示すアドレスと、を有する。ユーザ領域とは、所定のＲＡＭ、またはバスインターフェイス部１２０２に接続される領域を示す。
【００４６】
図１３の例では、開始レジスタ１２２１を示すアドレスは０であり、完了レジスタ１２２２を示すアドレスは１であり、ユーザ領域を示すアドレスは２以上の値である。例えば、ポート番号ｖｉａ＿ｉｄが５ビット、ローカルアドレスが２４ビットであったとすると、バスインターフェイス部１２０２−１（つまり，ポート番号ｖｉａ＿ｉｄ＝０）の開始レジスタ１２２１−１に値を設定する場合、アドレスは“０ｘＥ０００００００”となる。
【００４７】
ＣＰＵ１００からのアクセスは、リードアクセスとライトアクセスとがある。ライトアクセスの場合、ＣＰＵ１００は、アドレスと、ライトを示す情報と、データとを送信する。例えば、バスインターフェイス部１２０２は、ローカルアドレスが０または１の場合に、バスインターフェイス部１２０２内のレジスタに値が設定される。また、例えば、バスインターフェイス部１２０２は、ローカルアドレスが２以上の場合に、ＷＥ信号をアサートし、アドレスの値とデータとをそれぞれバスインターフェイス部１２０２内のポートｖｉａ＿Ａｄｄｒとポートｖｉａ＿Ｗｄａｔａとに転送する。ＦＰＧＡ１０１の各分割領域は、各ポートｖｉａと接続され、分割領域には、各ポートｖｉａに対応するＩ／Ｏが設けられてある。当該Ｉ／Ｏに接続された分割領域へのダウンロードデータを作成しておけば、Ａｄｄｒ，Ｗｄａｔａ，ＷＥ信号によって各データを受け取る。
【００４８】
また、リードアクセスの場合、ＣＰＵ１００は、アドレスと、リードを示す情報と、を送信する。バスインターフェイス部１２０２は、ローカルアドレスが０または１である場合、バスインターフェイス部１２０２の内部レジスタを読み出す。バスインターフェイス部１２０２は、ローカルアドレスが２以上の場合、ＲＥ（Ｒｅａｄ）信号をアサートして、ローカルアドレスをＡｄｄｒ信号とする。バスインターフェイス部１２０２に接続された領域は、該当のデータを読み出し、ポートｖｉａ＿Ｖをアサートして、ポートｖｉａ＿Ｒｄａｔａを介して読み出したデータを送信する。これにより、バスインターフェイス部１２０２は、所望のデータを受け取り、ＣＰＵ１００へ返す。
【００４９】
開始レジスタ１２２１は、回路の処理の開始を示すレジスタである。開始レジスタ１２２１は、ＣＰＵ１００やＦＰＧＡ１０１内に構成された他の回路によって値が設定される。開始レジスタ１２２１の値はポートｖｉａ＿Ｓを介してＦＰＧＡ１０１の領域に接続される。例えば、開始レジスタ１２２１の値が０から１に変化すると、バスインターフェイス部１２０２は、開始指示を受信したと判断し、バスインターフェイス部１２０２に接続された領域に構成された回路が処理を開始する。
【００５０】
完了レジスタ１２２２の値はポートｖｉａ＿Ｄを介してＦＰＧＡ１０１の領域に接続される。ＦＰＧＡ１０１の領域に構成された回路の処理が終了した場合、回路は、完了信号をポートｖｉａ＿Ｄによって送信し、完了レジスタ１２２２に、完了を示す値を設定する。例えば、完了を示す値を１とする。
【００５１】
また、完了レジスタ１２２２は、割り込み処理部１２１２に接続される。そのため、完了レジスタ１２２２に１が設定されると、ＯＳ５１１は、割り込み処理部１２１２によって完了の割り込み処理を検出する。そして、ＯＳ５１１は、割り込み処理があったバスインターフェイス部１２０２の開始レジスタ１２２１に０を設定する。バスインターフェイス部１２０２は、開始レジスタ１２２１の値が１から０に変化した場合、ＦＰＧＡ１０１内の領域において完了信号の出力を完了する。これにより、割り込みが解除される。
【００５２】
図１４は、並列処理のプログラム例を示す説明図である。例えば、プログラム１４００は、処理ＰＡ〜ＰＤに基づいてコードが区切られてある。処理ＰＡの完了後に、処理ＰＢと処理ＰＣとが並列処理され、処理ＰＢと処理ＰＣとの完了後に、処理ＰＤが実行される。
【００５３】
図１５は、スレッドプログラミング例を示す説明図である。スレッド１５００とスレッド１５０１とが並列に処理される。例えば、処理ＰＡの後に、処理ＰＣについてのコンフィギュレーションデータが示す回路をＦＰＧＡ１０１によって構成させ、スレッド１５００は、処理ＰＣを起動させる。そして、スレッド１５０１の処理ＰＣの実行が完了すると、スレッド１５０１はＯＳ５１１に対して終了通知を送信する。
【００５４】
図１６は、システム動作例１を示す説明図である。ここでは、例えば、アプリケーション５１２についての処理ＰＣと処理ＰＢとを実行する例を説明する。また、処理ＰＣと処理ＰＢとは並列処理である。
【００５５】
ＯＳ５１１は、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅを生成する（ステップＳ１６０１）。そして、例えば、ユーザが入力装置５０４を介してアプリケーション５１２の起動指示をＯＳ５１１に通知する（ステップＳ１６０２）。ここでの管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅの各値は初期値である。つぎに、ＯＳ５１１はプロセスを生成する（ステップＳ１６０３）ことにより、アプリケーション５１２の実行が開始される。例えば、アプリケーション５１２は、あらたな実行ポイントとなると、戻り値テーブルを確保する（ステップＳ１６０４）。そして、アプリケーション５１２は、ＦＰＧＡ１０１に構成させるかコードを実行するかの判断通知をＯＳ５１１へ送る（ステップＳ１６０５）。これにより、ＯＳ５１１は、関数ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷを行う。
【００５６】
そして、ＯＳ５１１は、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅを参照して、処理ＰＣについての非ＣＰＵ部分ｐｒｏｃ＿ｈｗが示す回路をＦＰＧＡ１０１に構成可能な未使用領域を検出する（ステップＳ１６０６）。図１６の例では未使用領域が検出されたとする。つぎに、未使用領域が検出された場合、ＯＳ５１１は、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅを更新する（ステップＳ１６０６）。そして、ＯＳ５１１は、戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅを更新する（ステップＳ１６０７）。ＯＳ５１１は、非ＣＰＵ部分ｐｒｏｃ＿ｈｗを取得する（ステップＳ１６０８）。ＯＳ５１１は、検出した未使用領域についてのコンフィギュレーションデータメモリに非ＣＰＵ部分ｐｒｏｃ＿ｈｗを書き込む（ステップＳ１６０９）。これにより、未使用領域を検出できた場合、ＯＳ５１１は、ＦＰＧＡ１０１に対して、検出した未使用領域に非ＣＰＵ部分ｐｒｏｃ＿ｈｗが示す回路を構成させる。ＯＳ５１１は、アプリケーション５１２に対して、完了を通知する（ステップＳ１６１０）。
【００５７】
つぎに、アプリケーション５１２は、スレッド１５００で、処理ＰＡを実行する。つぎに、スレッド１５０１に起動イベントを送る（またはスレッド１５０１を生成する）。これにより、スレッド１５００とスレッド１５０１とが並列に実行され、スレッド１５００では処理ＰＢが、スレッド１５０１では処理ＰＣが、それぞれ実行される。具体的には、スレッド１５００では、処理ＰＢについてのＣＰＵ部分ｐｒｏｃ＿ｓｗが実行される。一方、スレッド１５０１では、戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅに基づいて、処理ＰＣについてＳＷまたはＨＷの実行区別を判定する（ステップＳ１６１１）。この例では、処理ＰＣはＦＰＧＡ１０１に割り当てられているので、戻り値テーブルの該当のポート番号ｖｉａ＿ｉｄは非負整数になっている。アプリケーション５１２は、前記値が非負整数であることより、処理ＰＣはハードウェア処理と判定し、前記値をポート番号ｖｉａ＿ｉｄとして採用する（ステップＳ１６１２）。
【００５８】
つぎに、アプリケーション５１２は、スレッド１５０１で、処理ＰＣに対応する、図１０中ｐｒｏｃ＿０＿ｈｗ相当を実行する。最初に、ｓｅｎｄ＿ｄａｔａ処理を実行する。取得したポート番号ｖｉａ＿ｉｄに基づいて、処理ＰＣについての非ＣＰＵ部分ｐｒｏｃ＿ｈｗが示す回路が構成された領域へ所望のデータ書き込みを行い、開始指示を通知する（ステップＳ１６１３）。上述したように、アプリケーション５１２は、ポート番号ｖｉａ＿ｉｄに基づいて、バスインターフェイス部１２０２内の開始レジスタ１２２１の値を１にする。つぎに、ｒｅｃｖ＿ｄａｔａ処理を実行する。ＦＰＧＡ１０１から処理ＰＢの完了通知の割り込みを待機する（ステップＳ１６１４）。ハードウェア処理は、処理が完了したら、完了通知の割り込みをあげる（ステップＳ１６１５−１）。上述のように、バスインターフェイス部１２０２内の終了レジスタ１２２２の値が１になると、アプリケーション５１２は、完了通知の割り込みを受け付ける。割り込みがあがったら、ｒｅｃｖ＿ｄａｔａの処理が再開され、データ読み込みが行われれ（ステップＳ１６１５−２）、ｒｅｃｖ＿ｄａｔａ処理が終了する。これにより、処理ＰＣに対応する図１０中ｐｒｏｃ＿０＿ｈｗ相当が終了、スレッド１５０１の処理が終了する。
【００５９】
スレッド１５００では、処理ＰＢが終わったら、図１５のように、スレッド１５０１が終わっていなければスレッド１５０１の終了を待ち、スレッド１５０１が終わったら、処理ＰＤを実行する。ここで注目したいのは、スレッドプログラミングを利用すると、ソフトウェア処理部分とハードウェア処理部分の並列実行が自然に扱えていることである。つまり、本発明が提案する仕組みを使えば並列実行が自然に行えるのである。最後に、終了処理を行う。アプリケーション５１２は、処理ＰＣを行う回路が構成された領域の解放指示を行う（ステップＳ１６１６）。解放指示を受け付けると、ＯＳ５１１は、ＦＰＧＡ１０１内の、処理ＰＣを行う回路が構成された領域をリセットする（ステップＳ１６１７）。そして、ＯＳ５１１は、リセットの完了通知をＦＰＧＡ１０１から受け付ける（ステップＳ１６１８）と、リセット後となるように管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅを更新する（Ｓ１６１９）。そして、ＯＳ５１１は、処理ＰＣに関する戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅを削除し（ステップＳ１６２０）、削除の完了通知をアプリケーション５１２へ送信する（ステップＳ１６２１）。そして、アプリケーション５１２は、終了する（ステップＳ１６２２）。
【００６０】
図１７は、システム動作例２を示す説明図である。システム動作例２では、未使用領域が検出されない例を示す。ＯＳ５１１は、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅを生成する（ステップＳ１７０１）。例えば、ユーザが入力装置５０４を介してアプリケーション５１２の起動指示をＯＳ５１１に通知する（ステップＳ１７０２）。ここでの管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅの各値は初期値である。つぎに、ＯＳ５１１はプロセスを生成する（ステップＳ１７０３）ことにより、アプリケーション５１２の実行が開始される。例えば、アプリケーション５１２は、あらたな実行ポイントとなると、戻り値テーブルを確保する（ステップＳ１７０４）。そして、アプリケーション５１２は、ＦＰＧＡ１０１に構成させるかコードを実行するかの判断通知をＯＳ５１１へ送る（ステップＳ１７０５）。これにより、ＯＳ５１１は、関数ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷを行う。
【００６１】
そして、ＯＳ５１１は、管理テーブルｇ＿ｍａｎａｇｅｍｅｎｔ＿ｔａｂｌｅを参照して、処理Ｃについての非ＣＰＵ部分ｐｒｏｃ＿ｈｗが示す回路をＦＰＧＡ１０１に構成可能な未使用領域を検出する（ステップＳ１７０６）。図１７の例では未使用領域が検出されないとする。つぎに、未使用領域が検出されなかった場合、ＯＳ５１１は、戻り値テーブルｒｅｔｕｒｎ＿ｖａｌｕｅ＿ｔａｂｌｅを更新する（ステップＳ１７０７）。そして、ＯＳ５１１は、未使用領域が検出されなかったことをアプリケーション５１２に通知する（ステップＳ１７０８）。そして、アプリケーション５１２は、処理ＣについてのＣＰＵ部分ｐｒｏｃ＿ｓｗを実行する（ステップＳ１７０９）。
【００６２】
図１８は、システムアーキテクチャ例を示す説明図である。従来では、ＣＰＵが、機能が拡張されていないＯＳと、ＣＰＵが実行可能なプログラムのアプリケーションとを実行する。本実施の形態では、ＣＰＵ１００とＦＰＧＡ１０１とを有する演算装置３００が、機能が拡張されたＯＳ５１１と、非ＣＰＵ部分ｐｒｏｃ＿ｈｗとＣＰＵ部分ｐｒｏｃ＿ｓｗとを有するアプリケーション５１２と、を実行する。
【００６３】
以上説明したように、ＣＰＵ１００は、ＦＰＧＡ１０１を同一形状の複数の分割領域に分割しておき、複数の分割領域から、ＦＰＧＡ１０１に特定回路を構成させた場合の形状に適合する未使用領域を検出し、検出した分割領域に特定回路を構成させる。このように、特定回路をＦＰＧＡ１０１に構成させた場合の形状を予め特定しておくことにより、再構成処理を簡単にすることができる。
【００６４】
また、ＣＰＵ１００は、未使用領域を検出できなかった場合、特定回路の処理と同一の処理が記述されたプログラムを実行する。これにより、ＦＰＧＡ１０１を利用しつつＣＰＵ１００による処理性能を維持する。未使用領域が検出されなかった場合に、未使用領域が空くのを待機せずに、直ちに特定回路が行う処理と同一の処理が実現される。
【００６５】
また、コンフィギュレーションデータをＦＰＧＡ１０１の空き領域に基づいて作成しておかなくてよいため、コンフィギュレーションデータの作成が簡単になる。また、異なる種類のＦＰＧＡ１０１であってＦＰＧＡ１０１の各々に同一形状の分割領域を設け、アプリケーションの処理を区切った部分処理の各々についてＣＰＵ部分と非ＣＰＵ部分とを用意する。これにより、非ＣＰＵ部分があるアプリケーションをより多くのシステムで実行可能となる。すなわち、従来であれば、ＦＰＧＡが異なる度に、コンフィギュレーションデータを作成しなければならない。これに対して、ＣＰＵ１００とＯＳ５１１の種類などによって、コンフィギュレーションデータの種類が定まり、同一形状の分割領域が設けられたＦＰＧＡが接続されていれば、あらたにコンフィギュレーションデータを作成しなくてよい。また、ユーザは、ＣＰＵとＯＳの種類などに基づいて、ＣＰＵ部分と非ＣＰＵ部分とを含むアプリケーションをダウンロードサイトからダウンロードして利用すればよい。したがって、アプリケーションプログラムの配布の容易化を図ることができる。さらに、アプリケーションの作成者のアプリケーションの開発効率の向上を図ることができる。
【００６６】
また、演算装置３００は、ＣＰＵ１００とＦＰＧＡ１０１とを有し、ＣＰＵ１００とＦＰＧＡ１０１は積層される。これにより、消費電力量を低減させることができる。
【００６７】
また、ＦＰＧＡ１０１の分割領域の各々は、ＣＰＵ１００とアクセス可能な通信路を分割領域内における同一の位置に有する。これにより、各分割領域が、同一形状であり、同一機能となる。そのため、いずれの分割領域に回路が構成されても、ＣＰＵ１００とのアクセスを同様に行うことができる。
【００６８】
また、ＣＰＵ１００が、検出した未使用領域に構成された特定回路に、処理の開始を示す開始通知を送信する。これにより、特定回路が行う処理の開始タイミングを制御することができる。このように、開始タイミングが制御可能であれば、並列処理を行うことができる。
【００６９】
また、ＣＰＵ１００が、構成された特定回路から処理の終了を示す完了通知を受信すると、特定回路が構成された領域を未使用領域となるように使用情報を更新する。これにより、処理が終了した後に特定回路が構成された領域を解放することができる。ここまでは、説明の簡易化のため、再構成可能な回路をＦＰＧＡに限って説明したが、本発明はＦＰＧＡに限らない。再構成可能な回路を、ＣＰＵ、ＤＳＰなどのプロセッサ・エレメントとしてもよい。この場合、１分割領域に１プロセッサ・エレメントがある構造にしておき、非ＣＰＵ部分ｐｒｏｃ＿ｈｗにプロセッサ・エレメントのコード、コンフィギュレーション部分で形状情報の代わりにコード長を書くとすれば、当然のことながら、同様の効果が得られる。更に、ここまでは、対象を再構成可能な回路としたが、特定用途回路を含めてもよい。特定用途回路の種別を示すＩＤ番号を予め決めておき、コンフィギュレーション部分に必要とする特定用途回路ＩＤを書き、該当する特定用途回路ＩＤに対応する回路が使用可能であれば使用し、使用中または該当の特定用途回路が存在しなければ、ソフトウェア処理またはハードウェア処理（ＦＰＧＡをはじめとする再構成可能な回路を利用）で処理するとしてもよい。もし、特定用途回路ＩＤに対応する回路の利用が必須の場合には、例えば、ｄｅｃｉｄｅ＿ＨＷ＿ｏｒ＿ＳＷの中で、該当の特定用途回路がなければエラーとし、該当の特定用途回路が使用中であれば、未使用になるのを待つ、とすれば対応できる。このように、本発明は、様々な形態で、ＣＰＵで実行する処理と非ＣＰＵで実行する処理が混在したソフトウェアを処理する仕組みを提供しているのである。つまり、ＣＰＵで実行するソフトウェアとその他回路のやり取りを、ハードウェアとＯＳ（の拡張）とソフトウェアの協調で実現する仕組みを提供しているといえる。
【００７０】
なお、本実施の形態で説明した制御方法は、予め用意された制御プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【００７１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００７２】
（付記１）内部の回路を再構成可能な集積回路を区切った同一形状の複数の分割領域の各々にアクセス可能なプロセッサが、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる、
処理を実行することを特徴とする制御方法。
【００７３】
（付記２）前記プロセッサが、
前記未使用領域を検出できなかった場合、前記特定回路が行う処理と同一処理が記述されたプログラムであって前記プロセッサが実行可能なプログラムを実行することを特徴とする付記１に記載の制御方法。
【００７４】
（付記３）内部の回路を再構成可能な集積回路であって同一形状の複数の分割領域に区切られた集積回路と、
前記複数の分割領域の各々にアクセス可能なプロセッサと、
前記複数の分割領域の各々が使用中か否かを示す使用情報を記憶する記憶部と、
を有する演算装置であって、
前記プロセッサが、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる処理を実行することを特徴とする演算装置。
【００７５】
（付記４）前記プロセッサが、
検出した前記未使用領域に構成された前記特定回路に、前記処理の開始を示す開始指示を前記集積回路へ送信する処理を実行し、
前記集積回路は、前記開始指示を受信すると、前記処理を開始することを特徴とする付記３に記載の演算装置。
【００７６】
（付記５）前記プロセッサと前記集積回路とが積層されたことを特徴とする付記３または４に記載の演算装置。
【００７７】
（付記６）前記複数の分割領域の各々は前記プロセッサとアクセス可能な通信路を前記分割領域内における同一の位置に有することを特徴とする付記３〜５のいずれか一つに記載の演算装置。
【００７８】
（付記７）内部の回路を再構成可能な集積回路を区切った同一形状の複数の分割領域の各々にアクセス可能なプロセッサに、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる、
処理を実行させることを特徴とする制御プログラム。
【００７９】
（付記８）内部の回路を再構成可能な集積回路を区切った同一形状の複数の分割領域の各々にアクセス可能なプロセッサに、
特定回路を前記集積回路に構成させた場合の前記特定回路の形状を示す形状情報を取得し、
前記複数の分割領域の各々について使用中か否かを示す使用情報に基づいて、前記複数の分割領域のうち少なくともいずれかの分割領域を含む未使用領域であって、取得した前記形状情報が示す形状に適合する未使用領域を検出し、
前記未使用領域を検出できた場合、前記集積回路に対して、検出した前記未使用領域に前記特定回路を構成させる、
処理を実行させる制御プログラムを記録したことを特徴とする記録媒体。
【符号の説明】
【００８０】
１００  ＣＰＵ
１０１  ＦＰＧＡ
１０２  管理テーブル
１０３  特定回路
１１１  形状情報
１１２  コンフィギュレーションデータ
１１３  プログラム
３００  演算装置
ｖｉａ  ポート
Ａ１〜Ａ２０  分割領域
【図１】
2015039155.tif 000003
【図２】
2015039155.tif 000004
【図３】
2015039155.tif 000005
【図４】
2015039155.tif 000006
【図５】
2015039155.tif 000007
【図６】
2015039155.tif 000008
【図７】
2015039155.tif 000009
【図８】
2015039155.tif 000010
【図９】
2015039155.tif 000011
【図１０】
2015039155.tif 000012
【図１１】
2015039155.tif 000013
【図１２】
2015039155.tif 000014
【図１３】
2015039155.tif 000015
【図１４】
2015039155.tif 000016
【図１５】
2015039155.tif 000017
【図１６】
2015039155.tif 000018
【図１７】
2015039155.tif 000019
【図１８】
2015039155.tif 000020