(57)【要約】  ＰＬＤ管理システムが、１以上のＰＬＤの各々の使用状況を管理するＰＬＤ管理部を備える。ＰＬＤ管理部は、１以上のＰＬＤの各々を共有する複数の処理モジュールのいずれかである要求元モジュールからＰＬＤの利用要求を受け付ける。ＰＬＤ管理部は、利用要求を受け付けたときに、その利用要求に該当するＰＬＤの現在の使用状況と、その利用要求の内容に基づき、要求元モジュールを含む２以上の処理モジュールが同一のＰＬＤを同時に使用しないように制御する。
2017199383.tif 000002
【特許請求の範囲】
【請求項１】
１以上のＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）に接続されたインターフェース部と、
前記インターフェース部に接続されたプロセッサ部と、
前記１以上のＰＬＤの各々の使用状況を管理するコンピュータプログラムであり前記プロセッサ部により実行されるＰＬＤ管理部と
備え、
前記ＰＬＤ管理部は、
前記１以上のＰＬＤの各々を共有する複数の処理モジュールのいずれかである要求元モジュールからＰＬＤの利用要求を受け付け、
前記利用要求を受け付けたときに、前記利用要求に該当するＰＬＤである該当ＰＬＤの現在の使用状況と、前記利用要求の内容とに基づき、前記要求元モジュールを含む２以上の処理モジュールが同一のＰＬＤを同時に使用しないように制御する
ことを特徴とするＰＬＤ管理システム。
【請求項２】
請求項１に記載のＰＬＤ管理システムであって、
前記制御は、前記受け付けた利用要求に対し、前記該当ＰＬＤの使用可否を表す情報である使用可否情報と、前記該当ＰＬＤへのアクセスを制御するための情報である対象デバイス情報とが関連付けられた利用要求返答を、前記要求元モジュールに返すことである
ことを特徴とするＰＬＤ管理システム。
【請求項３】
請求項２に記載のＰＬＤ管理システムであって、
前記ＰＬＤ管理部は、
前記該当ＰＬＤが使用可の場合、前記対象デバイス情報に、前記該当ＰＬＤへアクセスするための情報を含め、
前記該当ＰＬＤが使用不可の場合、前記対象デバイス情報に、前記該当ＰＬＤへアクセスするための情報を含めない
ことを特徴とする方法。
【請求項４】
請求項２に記載のＰＬＤ管理システムであって、
前記受け付けた利用要求に、前記該当ＰＬＤのコンフィグデータの格納位置が関連付けられており、
前記該当ＰＬＤが使用可の場合、前記格納位置から前記該当ＰＬＤに前記コンフィグデータをロードした後に、前記ＰＬＤ管理部が、前記利用要求返答を前記要求元モジュールに返す
ことを特徴とするＰＬＤ管理システム。
【請求項５】
請求項２に記載のＰＬＤ管理システムであって、
前記該当ＰＬＤが使用不可の場合、前記ＰＬＤ管理部は、前記受け付けた利用要求を、待ち状態の利用要求として管理し、
前記使用不可を意味する前記使用可否情報が関連付けられた前記利用要求応答を受けた前記要求元モジュールからキャンセル要求を受け付けた場合、前記ＰＬＤ管理部は、前記受け付けたキャンセル要求に対応する前記待ち状態の利用要求をキャンセルする、
ことを特徴とするＰＬＤ管理システム。
【請求項６】
請求項５に記載のＰＬＤ管理システムであって、
前記該当ＰＬＤが使用不可の場合、前記ＰＬＤ管理部は、前記利用要求返答に、前記受け付けた利用要求の終了予測時間、又は、待ち状態の利用要求の数を関連付ける、
ことを特徴とするＰＬＤ管理システム。
【請求項７】
請求項２に記載のＰＬＤ管理システムであって、
前記受け付けた利用要求に、前記要求元モジュールが同時に使用したいＰＬＤの数である希望ＰＬＤ数が関連付けられており、
前記ＰＬＤ管理部は、使用可の前記該当ＰＬＤの数である未利用ＰＬＤ数と、前記希望ＰＬＤ数とに基づき決定されたＰＬＤ数分の前記該当ＰＬＤの各々に対応した前記対象デバイス情報を、前記利用要求返答に関連付ける
ことを特徴とするＰＬＤ管理システム。
【請求項８】
請求項７に記載のＰＬＤ管理システムであって、
前記決定されたＰＬＤ数は、前記ＰＬＤ管理部が前記利用要求を受け付けた頻度に基づいている
ことを特徴とするＰＬＤ管理システム。
【請求項９】
請求項７に記載のＰＬＤ管理システムであって、
前記ＰＬＤ管理部は、待ち状態の利用要求を、優先度の高い順に処理するようになっており、
前記受け付けた利用要求に、その利用要求の優先度が関連付けられており、
前記決定されたＰＬＤ数は、前記受け付けた利用要求に関連付けられている優先度に基づいている
ことを特徴とするＰＬＤ管理システム。
【請求項１０】
請求項１に記載のＰＬＤ管理システムであって、
前記受け付けた利用要求に、前記要求元モジュールが同時に使用したいＰＬＤの数である希望ＰＬＤ数が関連付けられている、
ことを特徴とするＰＬＤ管理システム。
【請求項１１】
請求項１に記載のＰＬＤ管理システムであって、
前記ＰＬＤ管理部は、待ち状態の利用要求を、優先度の高い順に処理するようになっており、
前記受け付けた利用要求に、その利用要求の優先度が関連付けられている、
ことを特徴とするＰＬＤ管理システム。
【請求項１２】
請求項１に記載のＰＬＤ管理システムであって、
前記受け付けた利用要求に、前記該当ＰＬＤのコンフィグデータの格納位置と前記該当ＰＬＤを実行するときに必要な設定値とが関連付けられており、
前記ＰＬＤ管理部は、
前記格納位置から使用可の前記該当ＰＬＤに前記コンフィグデータがロードされた後に、前記設定値を用いて前記該当ＰＬＤを実行し、
前記該当ＰＬＤを用いて処理した結果データを、前記要求元モジュールに返す
ことを特徴とするＰＬＤ管理システム。
【請求項１３】
請求項１２に記載のＰＬＤ管理システムであって、
前記ＰＬＤ管理部は、ロードされたことのあるコンフィグデータ毎の使用頻度を管理し、
前記ＰＬＤ管理部は、使用可のＰＬＤがあれば、最も高い使用頻度に対応したコンフィグデータをその使用可のＰＬＤにロードしておく
ことを特徴とするＰＬＤ管理システム。
【請求項１４】
請求項１２に記載のＰＬＤ管理システムであって、
前記必要な設定は、前記該当ＰＬＤの起動に関する引数、または、実行関数及びその引数である
ことを特徴とするＰＬＤ管理システム。
【請求項１５】
請求項１２に記載のＰＬＤ管理システムであって、
前記受け付けた利用要求に、前記該当ＰＬＤを使用した処理を分割するための情報である分割用情報が関連付けられており、
前記該当ＰＬＤが使用不可の場合、前記ＰＬＤ管理部は、前記受け付けた利用要求を、待ち状態の利用要求として管理し、
前記ＰＬＤ管理部は、前記該当ＰＬＤを使用した処理の最中に、待ち状態の利用要求があれば、前記分割用情報を基に当該処理を中断し、その待ち状態の利用要求に該当するＰＬＤを使用した処理を実行する
ことを特徴とするＰＬＤ管理システム。
【請求項１６】
請求項１に記載のＰＬＤ管理システムであって、
前記該当ＰＬＤは、
複数のコンフィグデータ格納領域と、
前記複数のコンフィグデータ格納領域のうち利用対象とするコンフィグデータ格納領域の切り替えを制御するコンフィグ制御部と
を備え、
前記コンフィグ制御部が、一定時間毎に、利用対象とするコンフィグデータ格納領域を切り替える
ことを特徴とするＰＬＤ管理システム。
【請求項１７】
１以上のＰＬＤの各々を共有する複数の処理モジュールのいずれかである要求元モジュールからＰＬＤの利用要求を受け付け、
前記利用要求を受け付けたときに、前記利用要求に該当するＰＬＤである該当ＰＬＤの現在の使用状況と、前記利用要求の内容とに基づき、前記要求元モジュールを含む２以上の処理モジュールが同一のＰＬＤを同時に使用しないように制御する
ことを特徴とするＰＬＤ管理方法。
【請求項１８】
請求項１７に記載のＰＬＤ管理方法であって、
前記制御は、前記受け付けた利用要求に対し、前記該当ＰＬＤの使用可否を表す情報である使用可否情報と、前記該当ＰＬＤへのアクセスを制御するための情報である対象デバイス情報とが関連付けられた利用要求返答を、前記要求元モジュールに返すことである
ことを特徴とするＰＬＤ管理方法。
【請求項１９】
請求項１７に記載のＰＬＤ管理方法であって、
前記該当ＰＬＤのコンフィグデータの格納位置から、使用可の前記該当ＰＬＤに前記コンフィグデータをロードした後に、前記該当ＰＬＤを実行するときに必要な設定値を用いて前記該当ＰＬＤを実行し、
前記該当ＰＬＤを用いて処理した結果データを、前記要求元モジュールに返す
ことを特徴とするＰＬＤ管理方法。
【請求項２０】
請求項１７に記載のＰＬＤ管理方法であって、
一定時間毎に、複数のコンフィグデータ格納領域のうちの利用対象とするコンフィグデータ格納領域を切り替える
ことを特徴とするＰＬＤ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明が、概して、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）を管理する方法及びシステムに関する。
【背景技術】
【０００２】
近年、ＣＰＵの性能向上が鈍化傾向にあり、ＣＰＵだけでなく、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）を利用して高速に計算する計算装置に関する研究が盛んに行われている。ＦＰＧＡは、ＰＬＤの一例である。【０００３】
ＦＰＧＡの使い方としては、電源投入時にＦＰＧＡコンフィグデータをＦＰＧＡにロードして、専用ハードウェアとして使う方法が一般的である。この方法では、電源起動時のみにＦＰＧＡコンフィグデータをロードするので、複数アプリケーションでＦＰＧＡをシェアしたい場合は、使用する可能性のある全てのアプリケーションの機能に対応したＦＰＧＡコンフィグデータをロードする必要がある。しかし、１つのアプリケーションでは、一部の機能のみしか使用できず、また、全てのアプリケーションが使用されるとは限らないため、ＦＰＧＡを効率的に利用できていない。【０００４】
特許文献１には「ＣＰＵのバスラインにＦＰＧＡボード（プログラマブル論理回路）を設け、フロッピィディスク装置などの外部記憶装置からアプリケーションプログラムとともにＦＰＧＡボードに書き込むべき回路データをロードし、ＦＰＧＡボードに回路データを書き込むことによって、ＦＰＧＡボードをそのアプリケーションにおける専用の論理回路として用いる。」という技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−１５０９４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の処理を行うと、アプリケーション毎に最適なＦＰＧＡコンフィグデータをロードすることができる。【０００７】
しかし、複数アプリケーションが同時動作した時、または１つのアプリケーションでも複数の指示を受けて並列に動作する時に、同時に同一ＦＰＧＡを使ってしまうと正しい結果が得られなくなるが、その回避方法については特許文献１に記載されていない。また、効率よく同一ＦＰＧＡをシェアする方法についても特許文献１に記載されていない。【０００８】
同様の課題は、ＦＰＧＡ以外のＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）が利用される場合にも発生し得る。
【課題を解決するための手段】
【０００９】
ＰＬＤ管理システムが、１以上のＰＬＤの各々の使用状況を管理するＰＬＤ管理部を備える。ＰＬＤ管理部は、１以上のＰＬＤの各々を共有する複数の処理モジュールのいずれかである要求元モジュールからＰＬＤの利用要求を受け付ける。ＰＬＤ管理部は、利用要求を受け付けたときに、その利用要求に該当するＰＬＤの現在の利用状況と、その利用要求の内容とに基づき、要求元モジュールを含む２以上の処理モジュールが同一のＰＬＤを同時に使用しないように制御する。
【発明の効果】
【００１０】
本発明によれば、複数の処理モジュールが同時に同一のＰＬＤを使用することを回避でき、且つ、効率良く同一ＰＬＤを使用することが可能となる。更に、複数のＰＬＤが存在しても、複数の処理モジュールに対してはＰＬＤ管理部によりＰＬＤが複数存在することを隠蔽することが可能となるため、複数の処理モジュールがあることを意識しない設計（例えばプログラム設計又は装置設計）が可能となる。
【図面の簡単な説明】
【００１１】
【図１】実施例１に係る計算装置の構成を示す。
【図２】実施例１においてアプリ＃１及び＃２が同時に動作したときの動作フローの例を示す。
【図３】アプリ＃１及び＃２の各々を単体で動作させたときの動作時間の例を示す。
【図４】実施例１に係るメモリのメモリマップの概念図を示す。
【図５】実施例１に係るＦＰＧＡ管理情報、利用要求及び利用要求返答の一例を示す。
【図６】実施例１に係る利用要求を受けたＦＰＧＡ管理部が行う処理のフローチャートを示す。
【図７】実施例１に係る利用完了通知プロセスのフローチャートを示す。
【図８】比較例の効果の一例と実施例１の効果の一例を示す。
【図９】実施例１の概念図を示す。
【図１０】実施例２に係るクラウドの構成を示す。
【図１１】実施例２に係るメモリのメモリマップの概念図を示す。
【図１２】実施例２に係るＦＰＧＡ管理情報の一例を示す。
【図１３】実施例３の概念図を示す。
【図１４】実施例３においてアプリ＃１及び＃２が同時に動作したときの動作フローの例を示す。
【図１５】実施例３に係るＦＰＧＡ管理情報、利用要求及び利用要求返答の一例を示す。
【図１６】実施例３に係る利用要求を受けたＦＰＧＡ管理部が行う処理のフローチャートを示す。
【図１７】実施例３に係る利用完了通知プロセスのフローチャートを示す。
【図１８】実施例４の概念図を示す。
【発明を実施するための形態】
【００１２】
以下、本発明の実施例について、図面を用いて説明する。なお、以下に説明する実施例は、請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
また、以後の説明では「プログラム」（例えばアプリケーション）を主語として説明を行う場合があるが、実際にはプログラムはプロセッサによって実行されることで、定められた処理が行われる。ただし説明が冗長になることを防ぐため、プログラムを主語として説明することがある。また、プログラムの一部または全ては、専用ハードウェアによって実現されてもよい。記憶デバイスとしては、例えば、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）カード、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）カード、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ストレージ装置等であってもよい。
【００１４】
また、本発明は、ＰＬＤ全般に適用可能であるが、実施例では、ＰＬＤの一例としてＦＰＧＡが採用される。
【００１５】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合は、参照符号に代えて要素の識別符号を使用することがある。例えば、アプリを特に区別しないで説明する場合には、「アプリ１０１」と記載し、個々のアプリを区別して説明する場合には、「アプリ＃１」、「アプリ＃２」のように記載することがある。
【実施例１】
【００１６】
図１は、実施例１に係る計算装置の構成を示す。【００１７】
計算装置１は、プロセッサ１０、メモリ１１、ＦＰＧＡ１２、ＦＰＧＡメモリ１３、記憶デバイス１４、及びＩ／Ｆ（インターフェース）２０を有する。プロセッサ１０は、ユーザが業務などで使用するプログラムを実行する。図１ではプロセッサ１０は１つだけ記載されているが、複数のプロセッサ１０が存在してもよい。またプロセッサ１０がマルチコアプロセッサであってもよい。本実施例を、４コアのマルチコアプロセッサを用いている例で説明する。【００１８】
メモリ１１はプロセッサ１０の主記憶として用いられる。プロセッサ１０がプログラムを実行する際、メモリ１１にプログラム及びデータがロードされ、プロセッサ１０はメモリ１１からプログラムを読み出して実行する。メモリ１１には、プログラムとして、例えば、複数のアプリケーション（アプリ）と、ＦＰＧＡ管理部１０３とが格納されている。図１には、複数のアプリとして、２つのアプリ＃１（１０１）及びアプリ＃２（１０２）が代表的に図示されている。これらのプログラムがプロセッサ１０により実行される。【００１９】
ＦＰＧＡ１２は、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）の一例であり、機能を書きかえることができるハードウェアである。ＦＰＧＡコンフィグデータをＦＰＧＡ１２の中のコンフィグデータ格納領域１２１にロードすることによって、ＦＰＧＡ１２の中の動作を柔軟に変更することが可能である。そのため、装置構成を変更することなく、機能をバージョンアップしていくことが可能となる。また、ＦＰＧＡメモリ１３は、ＦＰＧＡ１２だけがアクセスできる専用のメモリ（例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））である。図１では、ＦＰＧＡ１２が専用でアクセスできるメモリを用いているが、メモリ１１を共有して用いるなど、ＦＰＧＡ１２だけがアクセスできる専用のメモリである必要はない。【００２０】
記憶デバイス１４は、プロセッサ１０からのライトデータを格納する不揮発性の記憶デバイスであり、例えばＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）あるいはＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）が用いられる。【００２１】
Ｉ／Ｆ２０は、プロセッサ１０と、周辺デバイス（非図示のネットワークデバイス等も周辺デバイスの一種である）との間でデータ転送するためのコンポーネントである。本実施例では、プロセッサ１０とＦＰＧＡ１２との間、及び、プロセッサ１０と記憶デバイス１４との間では、ＰＣＩ−Ｅｘｐｅｓｓ（以下、「ＰＣＩｅ」と呼ぶ）規格に従って通信が行われる。しかし、このＩ／Ｆ２０は、ＰＣＩｅに限定されずに、デバイス間の転送を目的とした他の規格や、独自Ｉ／Ｆでもよい。【００２２】
図２は、ＦＰＧＡ１２を利用する異なる２つのアプリ＃１及び＃２が同時に動作したときの動作フローの例を示す。【００２３】
縦軸は、計算装置１の各コンポーネントを表している。アプリ＃１、アプリ＃２、及びＦＰＧＡ管理部１０３は、上述したように、プロセッサ１０によって実行されるプログラムである。アプリ＃１とアプリ＃２は両方とも、ＦＰＧＡ１２を使用するプログラムであり、図３は、アプリ＃１及び＃２の各々を単体で動作させたときの動作時間の例を示す。それぞれのアプリの動作を比べるために、両アプリとも時刻Ｔ０で開始したとして、上下に並べて記載している。各アプリの下の「ＦＰＧＡ」という箱は、ＦＰＧＡ１２を使用している時間を示している。図３より、アプリ＃１は、時刻Ｔ１〜時刻Ｔ３の時間でＦＰＧＡ１２を使用し、終了時刻はＴ６となる。一方、アプリ＃２は、時刻Ｔ２〜時刻Ｔ４の時間でＦＰＧＡ１２を使用し、終了時刻はＴ５となる。また、ＦＰＧＡ１２以外は、プロセッサ１０での処理を意味する。なお、ＦＰＧＡ１２が処理している最中のそれぞれのアプリは、ＦＰＧＡ１２の処理が終わるまでＦＰＧＡ１２の処理完了待ちをしてもよいし、並列で別の処理をしていてもよい。【００２４】
図４は、プロセッサ１０が使用するメモリ１１のメモリマップの概念図を示す。【００２５】
それぞれの領域に対するサイズについては、使用するアプリによって異なるため、図４には具体的には記載しない。例えば、アプリ１０１毎に、プログラム１１００、ＦＰＧＡコンフィグ情報１１０１及びＦＰＧＡコンフィグデータ１１０２がある。具体的には、例えば、アプリ＃１に関しては、アプリ＃１プログラム＃１、アプリ＃１が使用する機能が入った、ＦＰＧＡコンフィグデータ＃１及びＦＰＧＡコンフィグ情報＃１（対応するＦＰＧＡデバイス情報、ＦＰＧＡコンフィグデータのサイズ及び格納アドレスなど）が必要になる。また、アプリ＃２に関しても、アプリ＃２プログラム＃２、ＦＰＧＡコンフィグ情報＃２、及びＦＰＧＡコンフィグデータ＃２が必要になる。ここで、それぞれのアプリのプログラム１１００とＦＰＧＡコンフィグデータ１１０２は、計算装置１でコンパイルしてデータを作成してもよいし、同一環境でコンパイル済みのデータを持ってきてもよい。【００２６】
その他に、メモリ１１には、ＦＰＧＡ１２にアプリの処理の一部をオフロードするときに使うＦＰＧＡライトデータ格納領域１１２０、具体的には、アプリ＃１及び＃２にそれぞれ対応したＦＰＧＡライトデータ格納領域＃１及び＃２がある。これらは、それぞれ、ＦＰＧＡ１２に転送する入力データを格納する領域である。また、メモリ１１には、ＦＰＧＡリードデータ格納領域１１２２、具体的には、アプリ＃１及び＃２にそれぞれ対応したＦＰＧＡリードデータ格納領域＃１及び＃２がある。これらは、それぞれ、ＦＰＧＡ１２が処理し終わった結果データを格納する領域である。これらのデータ格納領域は、必要なときに動的に確保されてもよいし、予め静的に確保されておいてもよい。また、ライトデータ格納領域とリードデータ格納領域は同一領域（つまり一体）であってもよい。【００２７】
さらに、メモリ１１には、ＦＰＧＡ管理部１０３のみがアクセスできるＦＰＧＡ管理情報格納領域１１３０がある。ＦＰＧＡ管理情報格納領域１１３０には、ＦＰＧＡ管理情報が格納される。図５は、ＦＰＧＡ管理情報５００の一例を示す。このＦＰＧＡ管理情報５００は、大きく分けて、ＦＰＧＡ１２のＦＰＧＡデバイス情報５０２と、ＦＰＧＡ使用状況５０１の２つがある。ＦＰＧＡデバイス情報５０２は、ＦＰＧＡ型番５０４（ＦＰＧＡ１２の型番を表す情報）、接続先ＰＣＩｅのバス番号、ＤＲＡＭアドレス５０７（ＦＰＧＡメモリ１３のアドレスを表す情報）、コンフィグ格納領域アドレス５０５（コンフィグデータ格納領域１２１のアドレスを表す情報）、及びレジスタアドレス５０（ＦＰＧＡレジスタのアドレスを表す情報）など、ＦＰＧＡ１２にアクセスするために必要な情報を含む。また、ＦＰＧＡデバイス情報５０２は、デバイスＩＤ５０３（ＦＰＧＡ１２毎につけられるユニークな識別子であるデバイスＩＤを表す情報）も含む。本実施例では、ＦＰＧＡ管理情報５００は、ＦＰＧＡ１２毎に存在する。ＦＰＧＡ１２の型番だけでＦＰＧＡ管理情報５００を管理するとなると、同一型番のＦＰＧＡ１２が複数あった場合、いずれのＦＰＧＡ１２といずれのＦＰＧＡ管理情報５００とが対応するかわからなくなるので、本実施例では、ＦＰＧＡ１２の型番に加えて、ＦＰＧＡ１２を一意に識別するためのデバイスＩＤが使用される。なお、ＦＰＧＡ１２は、同一型番であるか異なる型番であるかに関わらず複数存在してよいが、本実施例では、ＦＰＧＡ１２は１つであるとする。【００２８】
ＦＰＧＡデバイス情報５０２は、計算装置１の起動時、または、新たにデバイスが計算装置１に挿入されたことを検知した時に、接続されているＦＰＧＡを探し、接続されているＦＰＧＡデバイス情報を取得することにより得られる。これにより、計算装置１に接続されているＦＰＧＡを使用することができるようになる。本実施例では、ＦＰＧＡデバイス情報５０２を具体的に記載したが、その情報だけに限定されず、ＦＰＧＡ１２にアクセスできる情報であることが条件であり、本形式にとらわれず、別の形式でもよい。また、ＦＰＧＡ使用状況５０１は、主に、このＦＰＧＡ管理情報５００に対応したＦＰＧＡ１２が使用中か未使用かを表す情報である。実施例によって、その他の情報も管理するが、実施例毎に必要な情報が異なるため、以降、具体的に例を挙げて説明していく。【００２９】
図２に戻り、図３の処理時間で動作をするアプリ＃１及び＃２を同時に動作させたときの動作フローを説明する。本実施例のプロセッサ１０はマルチコアプロセッサのため、それぞれのコアで同時に動き出すことが可能である。【００３０】
まず、図３の時刻Ｔ１で、アプリ＃１が、ＦＰＧＡ管理部１０３にＦＰＧＡ１２の利用要求を送信する。図５に示すように、利用要求５１０は、ＦＰＧＡ型番５１１（ＦＰＧＡ１２の型番を表す情報）を含む。利用要求５１０に対する返答である利用要求返答５２０は、使用可否情報５２１と、対象デバイス情報５２２とを含む（これらの情報５２１及び５２２については後述する）。【００３１】
図６は、利用要求５１０を受けたＦＰＧＡ管理部１０３の動作フローのフローチャートを示す。【００３２】
まず、ＦＰＧＡ管理部１０３は、受けた利用要求５１０内のＦＰＧＡ型番５１１から、利用可能なＦＰＧＡ１２があるか否かを判断する（Ｓ１００）。すなわち、ＦＰＧＡ管理部１０３は、ＦＰＧＡ型番５１１と一致するＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００の有無を判断する。【００３３】
ＦＰＧＡ型番５１１と一致するＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００が無い場合、ＦＰＧＡ管理部１０３は、使用可否情報５２１に“デバイス未対応”をセットし（Ｓ１０１）、要求元アプリに、“デバイス未対応”を含んだ利用要求返答５２０を返す（Ｓ１０７）。【００３４】
ＦＰＧＡ型番５１１と一致するＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００がある場合、ＦＰＧＡ管理部１０３は、その一致したＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００内のＦＰＧＡ使用状況５０１の値が“使用中”か否か、つまり、対象ＦＰＧＡ１２が使用中か否かを判断する（Ｓ１０２）。本明細書において、「対象ＦＰＧＡ」とは、上記一致したＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００内のデバイスＩＤ５０３に対応するＦＰＧＡ１２である。なお、本実施例では、ＦＰＧＡ１２は１つなので、対象ＦＰＧＡ１２は、上述のＦＰＧＡ１２である。【００３５】
対象ＦＰＧＡ１２が未使用の場合は、ＦＰＧＡ管理部１０３は、ＦＰＧＡ使用状況５０１を“使用中”に変更してから、使用可否情報５２１に“利用ＯＫ”をセットする（Ｓ１０５）。次に、ＦＰＧＡ管理部１０３は、対象デバイス情報５２２に、上記一致したＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００内のＦＰＧＡデバイス情報５０２が有する情報、すなわち、対象ＦＰＧＡ１２にアクセスするための情報をセットする（Ｓ１０６）。ここで、対象デバイス情報５２２は、コンフィグ格納領域アドレス５２４（対象ＦＰＧＡ１２のコンフィグデータ格納領域１２１のアドレスを表す情報）、レジスタアドレス５２５（対象ＦＰＧＡ１２のレジスタのアドレスを表す情報）、ＤＲＡＭアドレス５２６（対象ＦＰＧＡ１２のＦＰＧＡメモリ１３のアドレスを表す情報）を含む。対象デバイス情報５２２は、デバイスＩＤ５２３（対象ＦＰＧＡ１２を一意に識別するデバイスＩＤを表す情報）を含んでもよい。情報５２３〜５２６は、対象ＦＰＧＡ１２に対応したＦＰＧＡ管理情報５００内の情報５０３、５０５〜５０７の複製でよい。最後に、ＦＰＧＡ管理部１０３は、要求元アプリに、“利用ＯＫ”を含んだ利用要求返答５２０を返す（Ｓ１０７）。【００３６】
一方、対象ＦＰＧＡ１２が使用中の場合は、ＦＰＧＡ管理部１０３は、使用可否情報５２１に“利用ＮＧ”をセットする（Ｓ１０３）。“利用ＮＧ”を含んだ利用要求返答５０２には、対象デバイス情報５２２として、対象ＦＰＧＡ１２にアクセスするための情報はセットされない。その後、ＦＰＧＡ管理部１０３は、対象ＦＰＧＡ１２の利用待ちを管理するＦＰＧＡ利用待ちキュー（図示せず）にリクエスト（利用要求５１０）を積んだ後、要求元アプリに、“利用ＮＧ”を含んだ利用要求返答５２０を返す（Ｓ１０７）。【００３７】
以上が、利用要求５１０を受けたＦＰＧＡ管理部１０３の動作フローになる。【００３８】
図２の例では、アプリ＃１が利用要求５０１を出したＴ１の時点で（Ｓ２１）、ＦＰＧＡ１２は未使用なので、アプリ＃１は、“利用ＯＫ”と対象デバイス情報５２２とを含んだ利用要求返答５２０を受ける（Ｓ２２）。“利用ＯＫ”を含んだ利用要求返答５２０を受けたアプリ＃１（１０１）は、利用要求返答５２０内のコンフィグ格納領域アドレス５２４を基に、使用するＦＰＧＡコンフィグデータ＃１を、ＦＰＧＡ１２のコンフィグデータ格納領域１２１にロードする（Ｓ２３）。この際、プロセッサ１０がＦＰＧＡコンフィグデータ＃１を数バイトずつ転送してもよいが、プロセッサ１０内やＦＰＧＡ１２内、または別デバイスにある図示しないＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｅ）回路を用いて、ＦＰＧＡコンフィグデータ＃１をバースト転送してもよい。ＦＰＧＡコンフィグデータ＃１のロードが完了した後、ＦＰＧＡ管理部１０３は、入力データをＦＰＧＡライトデータ格納領域＃１に格納し、利用要求返答５２０内のＤＲＡＭアドレス５２６を基に、ＦＰＧＡメモリ１３の領域を確保し、確保した領域に入力データをライトする（Ｓ２４）。その後、アプリ＃１は、入力データのＦＰＧＡメモリ１３上のアドレスと、結果データを格納するＦＰＧＡメモリ１３上のアドレスと、ＦＰＧＡ１２の図示しないカーネル部（ＦＰＧＡ１２の中の処理実行部（アプリ毎に動作が異なる））の引数とを指定しＦＰＧＡ１２のカーネル部を起動すると（Ｓ２５）、ＦＰＧＡ１２のカーネル部は、ＦＰＧＡメモリ１３にある入力データを読み込んで、カーネル部の処理を行い、結果をＦＰＧＡメモリ１３に書き戻す（Ｓ２８）。カーネル部の処理が完了したら、ＦＰＧＡ１２のカーネル部は、アプリ＃１に完了通知を発行する（Ｓ２９）。【００３９】
完了通知を受信したアプリ＃１は、ＦＰＧＡメモリ１３から結果データをリードして（Ｓ３０）、メモリ１１のリードデータ格納領域＃１に格納する。その後、アプリ＃１は、ＦＰＧＡ管理部１０３に、ＦＰＧＡ１２の利用完了通知を出して（Ｓ３１）、アプリ＃１の残りのソフト処理を続ける。【００４０】
次にアプリ＃１と同時に動いているアプリ＃２の動作について説明する。アプリ＃１と同時に起動されたアプリ＃２は、時刻Ｔ２で、ＦＰＧＡ管理部１０３に利用要求５１０を送信する（Ｓ２６）。しかし、時刻Ｔ２より早い時刻Ｔ１からアプリ＃１がＦＰＧＡ１２を使用中のため、ＦＰＧＡ管理部１０３は、ＦＰＧＡ利用待ちキューにリクエスト（利用要求５１０）をセットする（図６のＳ１０２〜Ｓ１０４）。つまり、ＦＰＧＡ管理部１０３は、そのリクエスト（利用要求５１０）を、待ち状態の利用要求として管理する。そして、ＦＰＧＡ管理部１０３は、“利用ＮＧ”を含んだ利用要求返答５２０をアプリ＃２に返す（Ｓ２７）。“利用ＮＧ”を含んだ利用要求返答５２０を受信したアプリ＃２は、ＦＰＧＡ１２が利用可能になるまで待ち状態に入る。ここで、時刻がＴ３になり、アプリ＃１が、ＦＰＧＡ１２の利用が終わってＦＰＧＡ管理部１０３に利用完了通知をすると（Ｓ３１）、ＦＰＧＡ管理部１０３は、図７に記載の利用完了通知プロセスを行う。まず、ＦＰＧＡ管理部１０３は、ＦＰＧＡ使用状況５０１（使用中フラグ）を“未使用”に変更する。次に、ＦＰＧＡ管理部１０３は、ＦＰＧＡ利用待ちキューをみて、利用待ちのリクエスト（利用要求５１０）がある場合は、ＦＰＧＡ使用状況５０１を“使用中”にして、そのリクエストの要求元アプリ＃２（１０２）に、使用許可の割り込みを発行する（図２のＳ３２及び図７のＳ２０２）。なお、図７では、各ステップを記載したが、例えば、Ｓ２００とＳ２０１が逆でもかまわないし、全てを一発で判定してもよい。また、使用許可の割り込みの例を記載したが、メッセージを送る、共有メモリ上のフラグで通知するなど、アプリに通知できれば手段は問わない。【００４１】
使用許可割り込みを受けたアプリ＃２は、ＦＰＧＡコンフィグデータ＃２をＦＰＧＡ１２のコンフィグデータ格納領域１２１に格納し（Ｓ３３）、入力データをＦＰＧＡメモリ１３にライトする（Ｓ３４）。その後、アプリ＃２（１０２）は、カーネル部に引数をセットし、ＦＰＧＡ１２のカーネル部を起動する（Ｓ３５）。ＦＰＧＡ１２のカーネル部は、ＦＰＧＡメモリ１３にある入力データを読み込んで、カーネル部の処理を行い、結果をＦＰＧＡメモリ１３に書き戻す（Ｓ３６）。アプリ＃２は、カーネルの完了通知を受けたら（Ｓ３７）、結果データをリードして（Ｓ３８）、ＦＰＧＡ管理部１０３に利用完了を通知する。その後、アプリ＃２は、ソフト処理を続ける。【００４２】
以上、ＦＰＧＡ管理部１０３は、複数の利用要求５１０を受け付けるインタフェースを持ち、同一時刻に同一ＦＰＧＡ１２を使用しないように排他制御を行うことで、あるアプリがＦＰＧＡ１２を利用しているときに、他のアプリがＦＰＧＡ１２を勝手に利用してしまうというエラー状態を防ぐことが可能となり、且つ、割り込みまたはキュー管理しているので、ＦＰＧＡリソースを効率よく使用することが可能である。【００４３】
また、図８に効果を記載する。【００４４】
図８の上側は、比較例（本実施例を使わない場合の例）の効果の一例を示す。比較例は、アプリを実行するユーザがＦＰＧＡの利用状況を判断して、２つのアプリを実行する例である。この場合、ユーザがまずアプリ＃１を実行し、アプリ＃１の処理が完了したのをユーザが確認してから、ユーザがアプリ＃２を起動する。このため、合計で、アプリ＃１の実行時間＋アプリ＃２の実行時間がかかる。【００４５】
一方、図８の下側は、本実施例の効果の一例を示す。本実施例では、アプリ＃１は単体で動作したときと同様に理想的な状態で終了する。また並列で動作しているアプリ＃２は、時刻Ｔ２から時刻Ｔ５の間だけＦＰＧＡ１２の待ち時間が生じ、アプリ＃２の理想の実行時間の終了時刻Ｔ３より遅く終わる。ただし、アプリ＃１の終了時刻Ｔ４より早く終わっており、ＦＰＧＡ１２をアプリ＃１とアプリ＃２で時分割して有効に使うことができていることがわかる。【００４６】
図９は、本実施例の概念図を示す。【００４７】
アプリ＃１とアプリ＃２は、ＦＰＧＡ１２を使用するときにＦＰＧＡ管理部１０３に利用要求５１０を出す。ここで、ＦＰＧＡ管理部１０３は、ＦＰＧＡ１２の現在の使用状況に応じて、ＦＰＧＡ１２が未使用であれば、“利用ＯＫ”を含んだ利用要求返答５２０を返し、使用中であれば“利用ＮＧ”を含んだ利用要求返答５２０を返す。このように、ＦＰＧＡ１２を使うときにＦＰＧＡ管理部１０３に必ず問い合わせることで、同一時刻に異なる２以上のアプリがＦＰＧＡ１２を使用してしまうという、エラー状態になるのを防ぐことが可能となる。【００４８】
以上が、実施例１の説明である。なお、実施例１について、例えば、下記のような幾つかの変形例が考えられる。【００４９】
＜実施例１の変形例１＞【００５０】
実施例１の変形例１では、利用要求５１０が、ＦＰＧＡ型番５１１のほかに、要求元アプリが管理しているＦＰＧＡコンフィグデータのアドレスも含んでよい。具体的には、例えば、アプリ＃１が要求元の場合、利用要求５１０が、アプリ＃１に対応したコンフィグアドレス（ＦＰＧＡコンフィグデータ＃１のアドレスを表す情報）含んでよい。このような利用要求５１０を受けたＦＰＧＡ管理部１０３は、ＦＰＧＡ１２が未使用ならば、受けた利用要求５１０が表すコンフィグアドレス（メモリ１１のアドレス）からＦＰＧＡ１２のコンフィグデータ格納領域１２１にＦＰＧＡコンフィグデータ＃１をロードし、その後に、アプリ＃１に利用要求返答５２０を返すことになる。ＦＰＧＡ１２が使用中の場合も、ＦＰＧＡ１２が未使用になってから、ＦＰＧＡ管理部１０３は、ＦＰＧＡ１２のコンフィグデータ格納領域１２１にＦＰＧＡコンフィグデータ＃１をロードしてから、アプリ＃１に割り込みを上げればよい。よって、コンフィグ格納領域アドレス５２４を利用要求返答５２０に含める必要がなくなる。これにより、アプリ１０１は、ＦＰＧＡ１２のコンフィグデータ格納領域１２１のアドレスを意識しなくても良くなるという利点がある。【００５１】
＜実施例１の変形例２＞【００５２】
実施例１の変形例２では、“利用ＮＧ”を含んだ利用要求返答５２０を受けたアプリ１０１は、ＦＰＧＡ管理部１０３に、ＦＰＧＡ利用のキャンセル要求を出してもよい。そのようなキャンセル要求を受けたＦＰＧＡ管理部１０３は、待ちキューにあるリクエスト（利用要求５１０）のうち、キャンセル要求に対応したリクエストを待ちキューから削除する。こうすることにより、アプリ１０１は、ソフトウエアで処理する（すなわち、ＦＰＧＡ１２に処理をオフロードするのではなくアプリ１０１自身が処理を実行する）という選択をすることも可能になる。【００５３】
＜実施例１の変形例３＞【００５４】
アプリ１０１がＦＰＧＡ利用をキャンセルするか否かを、アプリ１０１がどのぐらい待つか分かると、決めやすい。そこで、実施例１の変形例３では、利用要求５１０が、入力データサイズ（入力データのサイズを表す情報）を含んでよい。すなわち、ＦＰＧＡ管理部１０３は、ＦＰＧＡ使用状況だけでなく、受けた利用要求５１０内の入力データサイズから処理予測時間を計算して、処理予測時間（受け付けた利用要求５１０の処理に要すると入力データサイズに基づき予測された時間）と、スタート時間とを保存しておいてもよい。これにより、ＦＰＧＡ１２を使用中に利用要求５１０があった場合に、ＦＰＧＡ管理部１０３は、処理予測時間、スタート時間、及び現在の時間から、終了予測時間を計算して、“利用ＮＧ”とともに終了予測時間を含んだ利用要求返答５２０を返すことができる。これにより、アプリ１０１は、終了予測時間を基に、ソフトウエアで処理するかＦＰＧＡ１２が使えるまで待つかを選択可能となり、アプリ１０１毎に最も早く終了する方法で処理することが可能となる。
【実施例２】
【００５５】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【００５６】
実施例２として、クラウドの例を記載する。なお、本明細書において「クラウド」とは、１以上の計算装置で構成された計算システムの一例である。【００５７】
図１０は、実施例２に係るクラウドの構成を示す。【００５８】
計算装置１と同一のコンポーネントは、同一の参照符号をつけたので説明を省略する。コンポーネントの観点での図１との違いは、ＦＰＧＡ１２が２つある点である。つまり、ＦＰＧＡ＃１及び＃２が存在する。また、クラウド２が採用されているため、ネットワーク１００１を介してクライアント３が複数台つながっている。クライアント３は、例えば、パーソナルコンピュータのような計算装置である。また、プロセッサ１０は、実施例１と同様に４コアのマルチコアプロセッサの例を考える。【００５９】
実施例２では、クラウド２で実行するアプリとして、プロセッサ１０上では、ミドルウエアのデータベースプログラム（以降ＤＢプログラム）８００を実行する場合について述べる。この場合、ＤＢプログラム８００は、複数のクライアント３からＳＱＬを受け付けることができる。また、ＤＢプログラム８００は、マルチスレッドに対応しており、複数のＳＱＬが来た場合に複数のスレッドに分けて、複数のコアで並列に処理できるとする。なお、本実施例において、「ＳＱＬ」とは、Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅで記述された命令である。ＳＱＬに代えて他種言語で記述された命令が採用されてもよい。【００６０】
図１１は、実施例２に係るメモリ１１のメモリマップの概念図を示す。【００６１】
メモリ１１は、ＤＢプログラム８００と、ＳＱＬの機能毎のＦＰＧＡコンフィグデータ８０２を持っている。具体的には、例えば、Ｊｏｉｎ処理用のＦＰＧＡコンフィグデータ＃Ａ、シーケンシャルスキャン用のＦＰＧＡコンフィグデータ＃Ｂ、及び、集約演算用のＦＰＧＡコンフィグデータ＃Ｃの３つのＦＰＧＡコンフィグデータ８０２が存在するとする。また、メモリ１１は、これらのコンフィグデータ＃Ａ〜＃Ｃの情報を示すＦＰＧＡコンフィグ情報８０１を持つ。ここで、ＦＰＧＡコンフィグ情報８０１は１つの領域にまとめて、３個分の情報を格納する例を示したが、ＦＰＧＡコンフィグデータ毎にＦＰＧＡコンフィグ情報８０１の領域が存在してもかまわない。【００６２】
図１２は、実施例２に係るＦＰＧＡ管理情報の例を示す。【００６３】
本実施例では、ＦＰＧＡ１２が２つあるため、ＦＰＧＡ使用状況５０１もＦＰＧＡデバイス情報５０２もそれぞれＦＰＧＡ１２毎に存在する。すなわち、ＦＰＧＡ＃１及び＃２にそれぞれ対応するＦＰＧＡ使用状況＃１及び＃２がある。また、ＦＰＧＡ＃１及び＃２にそれぞれ対応するＦＰＧＡデバイス情報＃１及び＃２がある。本実施例では、ＦＰＧＡ１２が２つの例を記載しているが、ＦＰＧＡ１２は何個であっても良い。その場合は、ＦＰＧＡ１２の個数分だけＦＰＧＡ使用状況５０１とＦＰＧＡデバイス情報５０２が存在すればよい。【００６４】
ここで、クライアント３からＳＱＬ＃１（Ｊｏｉｎ処理）、ＳＱＬ＃２（シーケンシャルスキャン処理）、ＳＱＬ＃３（集約演算処理）が来た場合は、ＤＢプログラム８００は、３つのスレッド（ＤＢ処理＃１、ＤＢ処理＃２、ＤＢ処理＃３）を立てて、それぞれのコアで並列に処理する。ＤＢ処理＃１〜＃３の各々は、ＦＰＧＡ１２を使用するときに、利用要求５１０をＦＰＧＡ管理部１０３に出す。ＦＰＧＡ管理部１０３は、図６のＳ１００〜Ｓ１０６の処理を最大でＦＰＧＡ１２の数の回数分ループしてから、未使用のＦＰＧＡ１２が見つかったか、または、全てのＦＰＧＡ１２が使用中だった場合に、Ｓ１０７の利用要求返答を返せばよい。以下に具体的な例を記載する。【００６５】
例えば、ＤＢ処理＃１→ＤＢ処理＃２→ＤＢ処理＃３の順番で利用要求５１０が発行されたとする。ＤＢ処理＃１からの利用要求５１０について、ＦＰＧＡ管理部１０３は、まず、ＦＰＧＡ＃１が使用中か否かの判断を行う。ＦＰＧＡ＃１が未使用なので、ＦＰＧＡ管理部１０３は、ＦＰＧＡ＃１のＦＰＧＡ使用状況＃１を“使用中”にして、ＦＰＧＡデバイス情報＃１に対応した対象デバイス情報５２２を含んだ利用要求返答５２０をＤＢ処理＃１に返す。次に、ＤＢ処理＃２からの利用要求５１０について、ＦＰＧＡ管理部１０３は、まずＦＰＧＡ＃１が使用中か否かを判断するが、ＦＰＧＡ＃１が使用中なので、次にＦＰＧＡ＃２が使用中か否かを判断する。ＦＰＧＡ＃２は未使用なので、ＦＰＧＡ管理部１０３は、ＦＰＧＡ＃２のＦＰＧＡ使用状況＃２を“使用中”にして、ＦＰＧＡデバイス情報＃２に対応した対象デバイス情報５２２を含んだ利用要求返答５２０をＤＢ処理＃２に返す。最後に、ＤＢ処理＃３からの利用要求５１０について、ＦＰＧＡ管理部１０３は、両方のＦＰＧＡ＃１及び＃２共に使用中なので、“利用ＮＧ”を含んだ利用要求応答５２０をＤＢ処理＃３に返す。【００６６】
以上、ＦＰＧＡ１２が複数になった場合でもＦＰＧＡデバイス情報５０２とＦＰＧＡ使用状況５０１をＦＰＧＡ数分保存し、いずれかのスレッドから利用要求を受けたＦＰＧＡ管理部１０３は、未使用のＦＰＧＡ１２が見つかるまで全てのＦＰＧＡに対して使用中か否かの判断を行うことで、実施例１と同等の効果が得られる。また、複数のＦＰＧＡ１２がある構成の場合、ＦＰＧＡ管理部１０３で複数のアクセラレータの管理を隠蔽することが可能となるため、アプリのプログラマは、複数のＦＰＧＡ１２があることを意識しないでプログラムすることが可能となる。実施例１の構成においても、同等の効果が得られる。すなわち、仮に実施例１の構成において複数のＦＰＧＡ１２が存在したとしても、アプリのプログラマは、複数のＦＰＧＡ１２があることを意識しないでプログラムすることが可能となる。【００６７】
＜実施例２の変形例１＞【００６８】
実施例２の変形例１では、利用要求５１０が、ＦＰＧＡ型番５１１のほかに、要求元アプリが利用したいＦＰＧＡ１２の数である希望ＦＰＧＡ数を含んでも良い。これにより、利用要求５１０を受けたＦＰＧＡ管理部１０３は、その利用要求５１０から希望ＦＰＧＡ数を特定できる。ＦＰＧＡ管理部１０３は、ＦＰＧＡ１２の空き状況（複数のＦＰＧＡ１２の各々に対応したＦＰＧＡ使用状況５０１）から特定される未使用ＦＰＧＡ数（未使用のＦＰＧＡ１２の数）と、利用要求５１０から特定された希望ＦＰＧＡ数とを基に、例えば、（式１）のように、割当てＦＰＧＡ数（割り与えられるＦＰＧＡ数）を決めて、割当てＦＰＧＡ数と、割当てＦＰＧＡ数分の対象デバイス情報５２２とを含んだ利用要求返答５２０を返答すればよい。
（未使用ＦＰＧＡ数＜希望ＦＰＧＡ数）のとき、割当てＦＰＧＡ数は、未使用ＦＰＧＡ数
（未使用ＦＰＧＡ数＞＝希望ＦＰＧＡ数）のとき、割当てＦＰＧＡ数は、希望ＦＰＧＡ数
・・・（式１）【００６９】
＜実施例２の変形例２＞【００７０】
割当てＦＰＧＡ数は、（式１）に限定されない。例えば、Ｎ個（例えばＮ＝１０）のＦＰＧＡ１２があるクラウド２において、割当てＦＰＧＡ数の最大値を閾値ｎ（ｎは２以上の整数）として予め設定しておき、ＦＰＧＡ管理部１０３は、希望ＦＰＧＡ数＝Ｍ（ｎ＜Ｍ＝＜Ｎ）を含んだ利用要求５１０を受けた場合、ＦＰＧＡ１２の使用状況にかかわらず（例えば、未使用ＦＰＧＡ数がｎより大きくても）、最大値がｎである割当てＦＰＧＡ数を含んだ利用要求返答５２０を返すとしてもよい。【００７１】
＜実施例２の変形例３＞【００７２】
ＦＰＧＡ管理部１０３は、利用要求５１０の頻度を学習して、割当てＦＰＧＡ数は、利用要求５１０の頻度に基づいてよい。例えば、利用要求５１０の頻度が低頻度（例えば閾値ｐ未満）と判断された場合は、ＦＰＧＡ管理部１０３は、ＦＰＧＡを積極的に割り与えてよい。一方、利用要求５１０の頻度が高頻度（例えば閾値ｐ以上）と判断された場合は、ＦＰＧＡ管理部１０３は、複数のＦＰＧＡが未使用の状況でも、１つまでしかＦＰＧＡの利用を許可しないとしても良い。【００７３】
＜実施例２の変形例４＞【００７４】
ＦＰＧＡ管理部１０３は、待ちキューにある利用要求５１０を、利用要求５１０の優先度の高い順に処理するようになっていて、スレッド（またはアプリ）が、希望ＦＰＧＡ数と共に優先度を含んだ利用要求５１０をＦＰＧＡ管理部１０３に渡しても良い。例えば、ＦＰＧＡ管理部１０３は、優先度が高い利用要求５１０については、未使用なＦＰＧＡがある限りＦＰＧＡ数を割り当ててよい（すなわち、希望ＦＰＧＡ数より未使用ＦＰＧＡ数が大きくても、割当てＦＰＧＡ数を、未使用ＦＰＧＡ数としてもよい）。また、例えば、ＦＰＧＡ管理部１０３は、優先度が低い利用要求５１０については、希望ＦＰＧＡ数分のＦＰＧＡの利用を許可しても、まだ未使用のＦＰＧＡがある場合に複数のＦＰＧＡの使用を許可するなどの制御を入れてもよい（例えば、希望ＦＰＧＡ数を割当てＦＰＧＡ数としても少なくとも１つの未使用のＦＰＧＡがある場合に、割当てＦＰＧＡ数＝希望ＦＰＧＡ数としてもよい）。【００７５】
＜実施例２の変形例５＞【００７６】
また、実施例２では、同一ＦＰＧＡ型番のＦＰＧＡが２つ搭載されていが、それに限定されず、実施例２の変形例５では、ＦＰＧＡ型番が異なる複数のＦＰＧＡ１２が搭載されていてもよい。その場合、図６のＳ１００で、利用可能でないので、次のデバイスの判定に移ればよい。また、アプリが、複数のＦＰＧＡ型番の各々についてのＦＰＧＡコンフィグデータを持っていたら、そのアプリからの利用要求５１０が、複数のＦＰＧＡ型番の各々についての情報（例えば、ＦＰＧＡコンフィグデータのアドレス）を含んでもかまわない。この場合は、ＦＰＧＡ管理部１０３が、複数のＦＰＧＡ型番のうちのどのＦＰＧＡ型番のＦＰＧＡを使うかを決めることができる。
【実施例３】
【００７７】
実施例３を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【００７８】
図１３は、実施例３の概念図を示す。【００７９】
本実施例では、ＦＰＧＡ管理部１０３に代えてＦＰＧＡ管理部１０４が採用される。ＦＰＧＡ管理部１０４は、ＦＰＧＡ１２のアクセスを全て行い、アプリ＃１及び＃２は、仮想化された世界でＦＰＧＡ１２を利用する。すなわち、本実施例では、アプリ＃１及び＃２は、ＦＰＧＡ１２に直接アクセスしない。なお、本実施例では、図１の計算装置１を用いて説明するが、図１０のようなクラウドでも応用可能である。【００８０】
図１４は、本実施例の動作フローを示す。【００８１】
実施例１と同様のアプリ＃１及び＃２が同時に動作する場合で説明する。【００８２】
まず、アプリ＃１が、時刻Ｔ１で、図１５に記載の利用要求１５１０をＦＰＧＡ管理部１０４に送信する（Ｓ６１）。利用要求１５１０は、ＦＰＧＡ型番５１１の他に、コンフィグデータ格納アドレス１５１２及びＦＰＧＡ起動用引数１５１３を含む。コンフィグデータ格納アドレス１５１２は、ＦＰＧＡコンフィグデータ＃１（図４参照）のアドレスを表す情報である。ＦＰＧＡ起動用引数１５１３は、ＦＰＧＡ起動に関する引数であり、例えば、入力データのアドレス、ＦＰＧＡ１２のカーネル部の引数、結果データの格納アドレスデータ転送、などを含む。なお、図１５に示すように、ＦＰＧＡ管理情報５００は実施例１と同様の情報である。利用要求返答１５２０は、ステータス１５２１を含む。ステータス１５２１は、利用要求１５１０のステータスを表す情報である。【００８３】
図１６は、利用要求１５１０を受けたＦＰＧＡ管理部１０４の動作フローのフローチャートを示す。【００８４】
まず、ＦＰＧＡ管理部１０４は、図６と同様に、ＦＰＧＡ型番５１１と一致するＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００の有無を判断する（Ｓ３００）。一致するＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００が無い場合は、ＦＰＧＡ管理部１０４は、ステータス１５２１に“デバイス未対応”をセットして（Ｓ３０１）、“デバイス未対応”を含んだ利用要求返答１５２０を、要求元アプリに返す（Ｓ３１３）。【００８５】
一致するＦＰＧＡ型番５０４を含んだＦＰＧＡ管理情報５００がある場合は、ＦＰＧＡ管理部１０４は、そのＦＰＧＡ管理情報５００内のＦＰＧＡ使用状況５０１が“使用中”か否かを判断する（Ｓ３０２）。【００８６】
ＦＰＧＡ使用状況５０１が“使用中”の場合は、ＦＰＧＡ管理部１０４は、ステータス１５２１に“待ち中”をセットし（Ｓ３０３）、ＦＰＧＡ利用待ちキューにリクエスト（利用要求１５１０）を積む（Ｓ３０４）。ＦＰＧＡ管理部１０５は、要求元アプリに、“待ち中”を含んだ利用要求返答１５２０を返す（Ｓ３１３）。【００８７】
一方、ＦＰＧＡ使用状況５０１が“未使用”の場合、ＦＰＧＡ管理部１０４は、ステータス１５２１に“処理中”をセットして、“処理中”を含んだ利用要求返答１５２０を要求元アプリに返す（Ｓ３１３）。それと共に、ＦＰＧＡ管理部１０４は、要求元アプリに対応したＦＰＧＡコンフィグデータをコンフィグデータ格納領域１２１にロードして（Ｓ３０８）、ＦＰＧＡ１２に入力データを転送する（Ｓ３０９）。その後、ＦＰＧＡ管理部１０４は、ＦＰＧＡ１２のカーネル部の引数をセットして、カーネル部を起動する（Ｓ３１０）。その後、ＦＰＧＡ管理部１０４は、結果データをリードして（Ｓ３１１）、要求元アプリにＦＰＧＡ処理完了応答を返す（Ｓ３１２）。なお、図１６では、Ｓ３０２の判断でＹｅｓの場合に、すぐに“待ち中”を返すが、ＦＰＧＡ１２が未使用になるまでループし、ＦＰＧＡ１２の利用が完了するまで、ＦＰＧＡ管理部１０４は利用要求返答１５２０を返さないとしても良い。また、図１６では、Ｓ２０２でＮｏと判断したときに要求元アプリに“処理中”を返すが、ＦＰＧＡ管理部１０４は、“処置中”を返さなくてもよい。また、利用要求返答１５２０は、実施例１の変形例３と同様の終了予想時刻（又は待ちの利用要求数）などの情報を含んでもよい。そうすることにより、ステータス１５２１を含んだ利用要求返答を受けたアプリは、ＦＰＧＡ管理部１０４からの処理完了通知を受け取るまで他の処理をしても良いし、処理待ちをしても良い。【００８８】
ここで、図１４の例に戻ると、アプリ＃１が利用要求１５１０を出したＴ１の時点で、ＦＰＧＡ１２は未使用なので、ＦＰＧＡ管理部１０４は、“処理中”を含んだ利用要求返答１５２０をアプリ＃１に返す（Ｓ６２）。ＦＰＧＡ管理部１０４は、ＦＰＧＡコンフィグデータ＃１をメモリ１１からＦＰＧＡ１２のコンフィグデータ領域１２１にロードすること（Ｓ６３）、入力データをＦＰＧＡメモリ１３にライトすること（Ｓ６４）、及び、ＦＰＧＡ起動用引数１５１３を用いてＦＰＧＡ１２を起動すること（Ｓ６５）を行う。それにより、入力データのリードと書き戻しがＦＰＧＡ１２のカーネル部により行われ（Ｓ６８）、ＦＰＧＡ１２が、完了通知をＦＰＧＡ管理部１０４に送る（Ｓ６９）。ＦＰＧＡ１０４は、結果データをＦＰＧＡメモリ１３からリードして（Ｓ７０）、完了通知をアプリ＃１（１０１）に送信するようになっている。【００８９】
“処理中”を含んだ利用要求返答１５２０を受けたアプリ＃１は、完了通知を受けるまで、待機するか別の処理をしていても良い。しばらくすると、アプリ＃１はＦＰＧＡ管理部１０４から完了通知を受信する（Ｓ７１）。完了通知を受信したアプリ＃１は、残りのソフト処理を続ける。【００９０】
次にアプリ＃１と同時に動いているアプリ＃２の動作について説明する。アプリ＃１と同時に起動されたアプリ＃２は、時刻Ｔ２で、ＦＰＧＡ管理部１０４に利用要求１５１０を送信する。しかし、時刻Ｔ２より早い時刻Ｔ１からアプリ＃１がＦＰＧＡ１２を使用中のため、ＦＰＧＡ管理部１０４はＳ３０２でＹｅｓと判断し、ＦＰＧＡ利用待ちキューにリクエスト（利用要求１５１０）をセットして、“待ち中”を含んだ利用要求返答１５２０をアプリ＃２（１０２）に返す。“待ち中”を含んだ利用要求返答１５２０を受信したアプリ＃２は、待ち状態に入る。ここで、時刻がＴ３になり、アプリ＃１がＦＰＧＡ１２の利用が終わると、ＦＰＧＡ管理部１０４は、図１７のＦＰＧＡの利用完了通知プロセスを行う。まず、ＦＰＧＡ管理部１０４は、ＦＰＧＡ使用状況５０１（使用中フラグ）を“未使用”に変更する（Ｓ４００）。次に、ＦＰＧＡ管理部１０４は、ＦＰＧＡ利用待ちキューをみて、利用待ちのリクエスト（利用要求１５１０）がある場合は、ＦＰＧＡ使用状況５０１を“使用中”にして、図１６のＳ３０８〜Ｓ３１２の処理を行う。なお、図１７では、各ステップを記載したが、例えば、Ｓ４００とＳ４０１が逆でもかまわないし、全てを一発で判定してもよい。また、使用許可の割り込みの例を記載したが、メッセージを送る、共有メモリ上のフラグで通知するなど、アプリケーションに通知できれば手段は問わない。【００９１】
本実施例では、ＦＰＧＡ管理部１０４が、ＦＰＧＡ１２へのアクセスを全て行い、アプリ＃１及び＃２は、仮想化された世界でＦＰＧＡ１２を利用する。すなわち、本実施例では、アプリ＃１及び＃２は、ＦＰＧＡ１２に直接アクセスしない。言い換えれば、ＦＰＧＡ管理部１０４がＦＰＧＡ１２のドライバとして機能する。このため、アプリはＦＰＧＡ１２を一切意識せずにアプリの処理の一部をオフロードできる。つまり、ＦＰＧＡ１２のアドレスを意識しないでアプリを設計可能である。【００９２】
＜実施例３の変形例１＞【００９３】
実施例３の変形例１では、ＦＰＧＡ管理部１０４が、一度使ったＦＰＧＡコンフィグデータ１１０２をキャッシュし、そのＦＰＧＡコンフィグデー１１０２タ毎の使用頻度を取得し、その情報を解析して、ＦＰＧＡ１２を使用していないときに、次に使用される可能性が高いＦＰＧＡコンフィグデータ１１０２を予めＦＰＧＡ１２にロードしておいてもよい。この場合、もし、予測が当たれば、ＦＰＧＡ１２の使用時に既に使用対象のＦＰＧＡコンフィグデータ１１０２がロードされていることになるので、ロード時間を短縮できる。予測が外れても、必要なＦＰＧＡコンフィグデータ１１０２をロードすればよく、デメリットは特にない。【００９４】
＜実施例３の変形例２＞【００９５】
実施例３の変形例２では、ＦＰＧＡ管理部１０４は、ＦＰＧＡ起動用引数１５１３に代えて実行関数とその引数とのセットを含んだ利用要求を受け付けてもよい。この場合、共有メモリや、カーネルが管理するメモリなどを用いて、アプリ１０１とＦＰＧＡ管理部１０４間で、実行関数のプログラムデータを受け渡す必要があるが、ＦＰＧＡ管理部１０４で予め決められた制御だけでなく、アプリ１０１毎に柔軟なＦＰＧＡ制御が可能となるという利点がある。なお、実行関数とその引数とのセットは、利用要求に含まれる設定値の一例である。【００９６】
＜実施例３の変形例３＞【００９７】
実施例３の変形例３では、利用要求１５１０は、分割用情報を含んでもよい。分割用情報は、ＦＰＧＡ１２を使用した処理を分割するための情報である。分割用情報は、例えば、処理の繰り返し数と、分割した入力データとを含み、この分割情報を基に、ＦＰＧＡ管理部１０４は、利用要求１５１０に対応した処理の一部を１回実行するたびにＦＰＧＡ利用待ちキューを確認し、もし他のリクエスト（利用要求１５１０）がある場合は、そのリクエストの処理を実行してから、利用要求１５１０に対応した処理の別の一部を実行するなど、インタリーブして処理することが可能となる。これにより、例えば、ＦＰＧＡ１２を長時間使うアプリがあった場合に、これまでは、ＦＰＧＡ１２を長時間使うアプリ（以下、アプリ＃Ａ）が終わるまで、他のアプリ（以下、アプリ＃Ｂ）がＦＰＧＡ１２を使用することができなかったが、アプリ＃ＡのＦＰＧＡ１２の利用を途中で止めて、アプリ＃ＢがＦＰＧＡ１２を使用してから、再度アプリ＃Ａの利用要求１５１０の処理をすることが可能となり、効率的にＦＰＧＡ１２を使うことが可能となる。
【実施例４】
【００９８】
実施例４を説明する。その際、実施例３との相違点を主に説明し、実施例３との共通点については説明を省略又は簡略する。【００９９】
最後に、ＦＰＧＡ内部で２つのコンフィグデータ領域を持ち、コンフィグ制御部が時分割で処理を切り替える例について記載する。【０１００】
図１８は、実施例４の概念図を示す。【０１０１】
ＦＰＧＡ１２００が、２つのコンフィグデータ格納領域＃Ａ及び＃Ｂと、このどちらを使用するかを制御するコンフィグ制御部１２３とを有する。なお、説明の都合上、コンフィグデータ領域１２１は２つであるが、コンフィグデータ領域１２１は３つ以上でも良い。【０１０２】
まず、ＦＰＧＡ管理部１０５は、ＦＰＧＡ１２００内のコンフィグデータ格納領域＃Ａ及び＃Ｂの使用状況を管理しており、アプリ＃１から利用要求１５１０を受け付けたら、未使用のコンフィグデータ格納領域＃Ａにアプリ＃１のＦＰＧＡコンフィグデータ＃１をロードして、さらに、アプリ＃２から利用要求１５１０を受け付けたら、未使用のコンフィグデータ格納領域＃Ｂにアプリ＃２のＦＰＧＡコンフィグデータ＃２をロードする。その後、ＦＰＧＡ管理部１０５は、ある一定時間で（つまり周期的に）、コンフィグ制御部１２３に、切り替えを指示する。コンフィグ制御部１２３は、切り替えの指示を受けたら、入力データをＦＰＧＡメモリ１０３から読み出す制御を止め、ＦＰＧＡ１２００のカーネル部の処理が全て終わったことを確認した後（特にＦＰＧＡ１２００の外部のデバイスへの要求がないことも確認した後）、フリップフロップの値をＦＰＧＡ１２００内または、ＦＰＧＡメモリ１０３に格納し、使用対象のＦＰＧＡコンフィグデータをコンフィグデータ格納領域＃Ａから＃Ｂに切り替えて、別のカーネル処理を行う。このようにすることで、時分割で処理が可能となり、一定の時間毎に平等にリソースを使うことが可能となる。なお、アプリ１０１とＦＰＧＡ管理部１０５とのインタフェースは、実施例３と同じインタフェース（図１５）でよいため、本実施例では説明を省略する。【０１０３】
本実施例では、ＦＰＧＡ１２００内部にコンフィグデータ領域１２１がある例を記載したが、コンフィグデータ領域１２１は、ＦＰＧＡ１２００内部にある必要はない。例えば、コンフィグデータ領域１２１は、ＦＰＧＡメモリ１０３にあって、コンフィグ制御部１２３がＦＰＧＡメモリ１０３からＦＰＧＡコンフィグデータを読み出すなど、ＦＰＧＡコンフィグデータを自分からロードできるところであればどこでも良い。また、ＦＰＧＡ管理部１０５から切り替えを指示する例を記載したが、コンフィグ制御部１２３に切り替え時間（周期）を設定するレジスタのような領域がＦＰＧＡ１２００にあり、その領域にＦＰＧＡ管理部１０５が切り替え時間をセットするとその切り替え時間で自動で（コンフィグ制御部１２３により）コンフィグデータ領域が切り替わるようにしても良い。【０１０４】
本実施例では、コンフィグデータ格納領域の切り替えが可能である。つまり、時分割で処理が可能である。このため、ＦＰＧＡを長時間使うアプリがあっても、平等にＦＰＧＡリソースを使うことができる。【０１０５】
なお、本実施例を実行する際は、初期化時に、デバイス情報として、ＦＰＧＡ管理部１０５が、ＦＰＧＡ１２００に対し、複数コンフィグ対応の可否を問い合わせ、その問い合わせに対する回答を基に、制御する必要がある。【０１０６】
以上、幾つかの実施例及び変形例を説明したが、本発明は、それらの実施例及び変形例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。【０１０７】
例えば、実施例１〜４では、機能を切り替えるときに、１つのＦＰＧＡを全て利用するが、パーシャルリコンフィグ技術を用いて、ＦＰＧＡ内を論理的に分割していた場合も本発明は有効である。この場合も、複数のＦＰＧＡが接続されていた例と同様に、ＦＰＧＡ内の論理分割毎にＦＰＧＡデバイス情報とＦＰＧＡ使用状況をＦＰＧＡ管理部が管理すればよい。【０１０８】
また、例えば、実施例１〜４では、アプリが直接利用要求を出すが、ＶＭ（Ｖｅｒｔｕａｌ  Ｍａｃｈｉｎｅ）上でアプリが動作しており、ＶＭから利用要求を出す場合でも本発明を適用可能である。【０１０９】
また、例えば、計算装置やクラウドは図１や図１０の構成に限定されない。例えば、プロセッサとＦＰＧＡが独立した構成で記載したが、ＦＰＧＡの中にプロセッサが入っており、独自バスでＦＰＧＡのロジック部分と接続されている構成でもかまわなし、プロセッサの中にＦＰＧＡが搭載されており、プロセッサの内部バスで構成されている構成でもかまわない。【０１１０】
また、例えば、実施例１〜４では、説明を簡単にするために複数のアプリを同時にスタートさせたが、起動開始は当然異なっていてもかまわない。【０１１１】
また、例えば、実施例１〜４では、ＦＰＧＡ管理情報、利用要求及び利用返答要求など、実施例ごとに様々な情報をやり取りする例を記載したが、これらの情報を個別ではなく、複数を組み合わせてもよい。また、本明細書では、アプリとＦＰＧＡ管理部のやり取りを詳しく記載したが、やりとりはこれに限定されず、一回の問い合わせで複数の機能を行ってしまっても良いし、複数回に分けて実装してもよく、実装するときに細かいやり取りが異なっていてもよい。【０１１２】
また、例えば実施例１において、ＦＰＧＡ１２は、計算装置１に内蔵されている必要はなく、通信ネットワークを介して計算装置１に接続されてよい。また、１つのＦＰＧＡ１２が、複数の計算装置１に共有されてもよい。すなわち、１以上のＦＰＧＡ１２の各々を共有する複数の処理モジュールの各々の一例として、アプリ、スレッド、ＶＭ及び計算装置のうちのいずれかが採用されてよい。【０１１３】
また、本発明は、ＦＰＧＡ以外のＰＬＤ、例えばＣＰＬＤ（Ｃｏｍｐｌｅｘ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）に提供されてもよい。【０１１４】
また、上述のＩ／Ｆ２０は、インターフェース部の一例である。インターフェース部は、１以上のインターフェースである。インターフェースとＦＰＧＡ１２が１：１、多：１、１：多、または多：多で接続されてもよい。ＦＰＧＡ１２は、ＰＬＤの一例である。【０１１５】
また、上述のプロセッサ１０は、プロセッサ部の一例である。プロセッサ部は、１以上のプロセッサである。プロセッサとインターフェースが１：１、多：１、１：多、または多：多で接続されてもよい。【０１１６】
また、例えば、プロセッサ、Ｉ／Ｆ及びＦＰＧＡ管理部を含んだシステムを、ＦＰＧＡ管理システムと言うことができる。このため、例えば、実施例１では、計算装置１が、ＦＰＧＡ管理システムを含む。また、例えば、実施例２では、クラウド２が、ＦＰＧＡ管理システムを含む。ＦＰＧＡ管理システムは、ＦＰＧＡを含んでいてもいなくてもよい。ＦＰＧＡはＰＬＤの一例である。このため、ＦＰＧＡ管理システムは、ＰＬＤ管理システムの一例である。具体的には、例えば、ＦＰＧＡ管理部は、ＰＬＤ管理部の一例であり、Ｉ／Ｆは、インターフェース部の一例であり、プロセッサは、プロセッサ部の一例であり、このため、ＰＬＤ管理システムは、１以上のＰＬＤに接続されたインターフェース部と、インターフェース部に接続されたプロセッサ部と、プロセッサ部により実行されるＰＬＤ管理部とを有する。【０１１７】
また、図５及び図１５に例示したように、ＦＰＧＡ利用要求は、ＦＰＧＡ型番５１１のような１種類以上の情報要素を含む。ＦＰＧＡ利用要求は、ＰＬＤの利用要求の一例である。ＰＬＤの利用要求の内容が、当該利用要求が含む１種類以上の情報要素、例えば、ＰＬＤの型番や、ＰＬＤのコンフィグデータの格納位置（アドレス）のうちの少なくとも１つに相当する。【０１１８】
また、実施例１〜４では、ＦＰＧＡ利用要求も利用要求返答も、それぞれ１種類以上の情報を含むが、情報を含むことは、情報が関連付けられることの一例である。例えば、少なくとも１種類の情報について、ＦＰＧＡ利用要求または利用要求返答には、情報それ自体ではなく、情報へのポインタが含まれていてもよい。【０１１９】
上述した実施例及び変形例のうちの２以上を適宜に組み合わせることが可能である。例えば、実施例２の変形例１（利用要求５１０が、ＦＰＧＡ型番５１１のほかに、要求元アプリが利用したいＦＰＧＡ１２の数である希望ＦＰＧＡ数を含むこと）は、いずれの実施例及び変形例にも適用可能である。また、例えば、実施例２の変形例４の一部（ＦＰＧＡ管理部１０３は、待ちキューにある利用要求５１０を、利用要求５１０の優先度の高い順に処理するようになっていて、スレッド（またはアプリ）が、優先度を含んだ利用要求５１０をＦＰＧＡ管理部１０３に渡すこと）も、いずれの実施例及び変形例にも適用可能である。
【符号の説明】
【０１２０】
１  計算装置
１０  プロセッサ
１１  メモリ
１２  ＦＰＧＡ
１３  ＦＰＧＡメモリ
１４  記憶デバイス
２０  Ｉ／Ｆ
１２１  コンフィグデータ格納領域
【図１】
2017199383.tif 000003
【図２】
2017199383.tif 000004
【図３】
2017199383.tif 000005
【図４】
2017199383.tif 000006
【図５】
2017199383.tif 000007
【図６】
2017199383.tif 000008
【図７】
2017199383.tif 000009
【図８】
2017199383.tif 000010
【図９】
2017199383.tif 000011
【図１０】
2017199383.tif 000012
【図１１】
2017199383.tif 000013
【図１２】
2017199383.tif 000014
【図１３】
2017199383.tif 000015
【図１４】
2017199383.tif 000016
【図１５】
2017199383.tif 000017
【図１６】
2017199383.tif 000018
【図１７】
2017199383.tif 000019
【図１８】
2017199383.tif 000020
【国際調査報告】
2017199383.tif 000021
2017199383.tif 000022
2017199383.tif 000023
2017199383.tif 000024