以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
まず、本発明の第1の実施の形態としてのアクセラレータ処理実行システム1の構成を図1に示す。図1において、アクセラレータ処理実行システム1は、ホスト装置10と、複数のアクセラレータ20とを備える。ホスト装置10は、マルチコアプロセッサ110と、メモリ領域120と、アクセラレータ処理管理装置130とを含む。
マルチコアプロセッサ110は、複数のプロセッサコア111を含む。以降、プロセッサコア111を、単にコア111とも記載する。メモリ領域120は、複数の専用メモリ領域121を含む。アクセラレータ処理管理装置130は、アクセラレータ使用状況記憶部131と、呼び出しデータ列生成部132と、アクセラレータ選択転送部133と、応答データ列受信部134と、処理結果出力部135とを有する。
なお、図1には、3つのコア111と、4つの専用メモリ領域121と、3つのアクセラレータ20とが示されているが、これらの数は、限定されない。
ここで、アクセラレータ処理実行システム1は、図2に示すようなハードウェア要素によって構成可能である。図2において、ホスト装置10は、マルチコアプロセッサ110と、API(Application Programming Interface)メモリ1002と、メモリコントローラ1003と、コード格納用メモリ1004と、デバイス接続インタフェース1005とを含む。前述のように、マルチコアプロセッサ110は、複数のコア111を含む。APIメモリ1002は、アクセラレータ処理管理装置130によって利用されるデータを記憶する。また、APIメモリ1002は、マルチコアプロセッサ110からメモリコントローラ1003を介してアクセス可能である。メモリコントローラ1003は、APIメモリ1002への入出力やデータの配置を制御する。コード格納用メモリ1004は、アクセラレータ処理管理装置130を動作させるプログラムのコード等を格納する。デバイス接続インタフェース1005は、アクセラレータ20を構成する後述のデバイス接続インタフェース2005に接続する。
この場合、メモリ領域120は、APIメモリ1002によって構成される。また、アクセラレータ処理管理装置130のアクセラレータ使用状況記憶部131は、APIメモリ1002によって構成される。また、アクセラレータ処理管理装置130のその他の各機能ブロックは、コード格納用メモリ1004に格納されるプログラムのコードを読み込んで各ハードウェア要素を制御するマルチコアプロセッサ110によって構成される。
また、アクセラレータ20は、プロセッサ2001と、APIメモリ2002と、メモリコントローラ2003と、コード格納用メモリ2004と、デバイス接続インタフェース2005と、IP(Intellectual property)コアブロック2006とを含む。APIメモリ2002は、ホスト装置10から呼び出される処理をプロセッサ2001が実行する際に利用されるデータを記憶する。APIメモリ2002は、プロセッサ2001からメモリコントローラ2003を介してアクセス可能である。メモリコントローラ2003は、APIメモリ2002への入出力やデータの配置を制御する。コード格納用メモリ2004は、アクセラレータ20のファームウェア等のコードを格納する。デバイス接続インタフェース2005は、ホスト装置10のデバイス接続インタフェース1005に接続する。IPコアブロック2006は、アクセラレータ20特有の機能を実現する処理を実行する。アクセラレータ20は、プロセッサ2001によってコード格納用メモリ2004に記憶されたファームウェアを読み込んで実行し各部を制御する。
なお、アクセラレータ処理実行システム1およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックについて説明する。
各コア111は、他のコア111と並行してタスクを実行可能である。つまり、各コア111で実行されるタスクは、並列に実行され得る。以降、並列して実行され得る複数のタスクを、単に、複数のタスクとも記載する。また、あるタスクに対して、同時に実行され得る他のタスクを、単に、他のタスクとも記載する。各タスクは、アクセラレータ20に実行させるアクセラレータ処理を任意のタイミングで呼び出す。
複数の専用メモリ領域121は、メモリ領域120上に確保される。1つの専用メモリ領域121は、複数のタスクのいずれかによって専有して利用される。以降、あるタスクによって専有して利用される専用メモリ領域121を、そのタスク用の専用メモリ領域121、とも記載する。また、あるタスク用の専用メモリ領域121は、他のタスク用とならないよう定められる。
例えば、複数のタスクのそれぞれに、異なる専用メモリ領域121が関連付けられていてもよい。この場合、各タスクに割り当てられるコア111が動的に切り替わる場合にも、各タスクは、他のタスクとメモリ領域120上の領域を共有することがない。なお、この場合は、複数のタスクの個数分の専用メモリ領域121が、メモリ領域120上に確保される。
あるいは、複数のタスクにいずれかのコア111が静的に割り当てられることを想定する。この場合、複数のコア111のそれぞれに、異なる専用メモリ領域121が関連付けられていてもよい。これにより、この場合も、各タスクは、自身に静的に割り当てられたコア111に関連付けられた専用メモリ領域121を利用するので、他のタスクとメモリ領域120上の領域を共有することがない。なお、この場合は、複数のコア111の個数分の専用メモリ領域121が、メモリ領域120上に確保される。
次に、アクセラレータ処理管理装置130の各機能ブロックの詳細について説明する。
アクセラレータ使用状況記憶部131は、複数のアクセラレータ20のそれぞれについて、タスクによる使用状況を表す使用状況情報を記憶する。使用状況情報は、各アクセラレータ20が使用中であるか否か、すなわち、処理を実行中であるか否かを表す。
呼び出しデータ列生成部132は、タスクからのアクセラレータ20の呼び出し処理に応じて、呼び出し処理を表す呼び出しデータ列を生成する。また、呼び出しデータ列生成部132は、生成した呼び出しデータ列を、当該タスク用の専用メモリ領域121に格納する。
アクセラレータ選択転送部133は、専用メモリ領域121に呼び出しデータ列が格納されている場合、アクセラレータ使用状況記憶部131を参照することにより、使用中でないアクセラレータ20の1つを選択する。また、アクセラレータ選択転送部133は、専用メモリ領域121に格納された呼び出しデータ列を、選択したアクセラレータ20に転送する。また、アクセラレータ選択転送部133は、アクセラレータ使用状況記憶部131において、選択したアクセラレータ20の使用状況情報を、使用中であることを表すよう更新する。
応答データ列受信部134は、アクセラレータ20から呼び出しデータ列の応答として受信した応答データ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域121に格納する。また、応答データ列受信部134は、アクセラレータ使用状況記憶部131において、応答データ列の送信元のアクセラレータ20の使用状況情報を、使用中でないことを表すよう更新する。
処理結果出力部135は、専用メモリ領域121に格納された応答データ列に基づいて、呼び出し元のタスクに呼び出し処理結果を出力する。
アクセラレータ20は、ホスト装置10からの要求に応じて処理を実行し、処理結果をホスト装置10に応答する。具体的には、アクセラレータ20は、ホスト装置10から呼び出しデータ列を受信すると、呼び出しデータ列に基づく処理を実行する。そして、アクセラレータ20は、ホスト装置10に対して、処理結果を含む応答データ列を送信する。
以上のように構成されたアクセラレータ処理実行システム1の動作について、図3を参照して説明する。
図3において、マルチコアプロセッサ110において実行されるタスクは、アクセラレータ処理を呼び出す(ステップS1)。
次に、アクセラレータ処理管理装置130の呼び出しデータ列生成部132は、呼び出し元のタスク用の専用メモリ領域121に、呼び出し処理を表す呼び出しデータ列を生成して格納する(ステップS2)。
次に、アクセラレータ処理管理装置130のアクセラレータ選択転送部133は、アクセラレータ使用状況記憶部131を参照することにより、使用中でないアクセラレータ20の1つを選択する(ステップS3)。
次に、アクセラレータ処理管理装置130のアクセラレータ選択転送部133は、アクセラレータ使用状況記憶部131において、選択したアクセラレータ20の使用状況情報を、使用中であることを表すよう更新する(ステップS4)。
次に、アクセラレータ処理管理装置130のアクセラレータ選択転送部133は、ステップS2で格納された呼び出しデータ列を、ステップS3で選択されたアクセラレータ20に対して転送する(ステップS5)。
次に、アクセラレータ20は、呼び出しデータ列に基づいて処理を実行する(ステップS6)。
次に、アクセラレータ20は、応答データ列をホスト装置10に対して送信する(ステップS7)。
次に、アクセラレータ処理管理装置130の応答データ列受信部134は、アクセラレータ20から応答データ列を受信すると、応答データ列に対応する呼び出し元のタスク用の専用メモリ領域121に、応答データ列を格納する(ステップS8)。
次に、アクセラレータ処理管理装置130の処理結果出力部135は、専用メモリ領域121に格納された応答データ列に基づいて、呼び出し元のタスクに呼び出し処理結果を出力する(ステップS9)。
以上で、アクセラレータ処理実行システム1の動作の説明を終了する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態は、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にする。
その理由について説明する。本実施の形態では、複数のアクセラレータに接続されたホスト装置が、アクセラレータ処理管理装置を備える。アクセラレータ処理管理装置では、アクセラレータ使用状況記憶部が、複数のアクセラレータのそれぞれについて、複数のコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶する。そして、呼び出しデータ列生成部が、タスクからのアクセラレータの呼び出し処理に応じて、呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、当該タスク用の専用メモリ領域に格納する。また、アクセラレータ選択転送部が、専用メモリ領域に前記呼び出しデータ列が格納されている場合、アクセラレータ使用状況記憶部を参照することにより、使用中でないアクセラレータの1つを選択する。そして、アクセラレータ選択転送部が、専用メモリ領域に格納された呼び出しデータ列を、選択したアクセラレータに転送する。加えて、アクセラレータ選択転送部が、アクセラレータ使用状況記憶部における当該アクセラレータの使用状況情報を、使用中であることを表すよう更新するからである。さらに、応答データ列受信部が、アクセラレータから呼び出しデータ列の応答として受信された応答データ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域に格納する。そして、応答データ列受信部が、アクセラレータ使用状況記憶部において、当該アクセラレータの使用状況情報を、使用中でないことを表すよう更新する。そして、処理結果出力部が、専用メモリ領域に格納された応答データ列に基づいて、呼び出し元のタスクに呼び出し処理結果を出力するからである。
このように、本実施の形態は、並列して実行され得るタスク毎に、専用メモリ領域を経由してアクセラレータに処理を要求する。これにより、本実施の形態は、アクセラレータとの送受信に用いられるリソースに対するタスク間またはコア間での排他制御を不要とする。また、本実施の形態は、タスクからのアクセラレータ処理の呼び出し処理を、専用メモリ領域およびアクセラレータ使用状況記憶部を用いて、空いているアクセラレータに対して振り分ける。したがって、本実施の形態を用いれば、アプリケーション側では、リソースやアクセラレータに対する排他制御やアクセラレータの宛先を考慮したプログラミングが不要となる。
(第2の実施の形態)
次に、本発明の第2の実施の形態としてのアクセラレータ処理実行システム2の構成を図4に示す。図4において、アクセラレータ処理実行システム2は、本発明の第1の実施の形態としてアクセラレータ処理実行システム2に対して、ホスト装置10に替えてホスト装置30を備える点が異なる。ホスト装置30は、本発明の第1の実施の形態におけるホスト装置10に対して、メモリ領域120に替えてメモリ領域320を含む点が異なる。メモリ領域320は、複数の専用メモリ領域321を含む。また、アクセラレータ処理管理装置130に替えてアクセラレータ処理管理装置330を含む点が異なる。
アクセラレータ処理管理装置330は、アクセラレータ使用状況記憶部331と、呼び出しデータ列生成部332と、アクセラレータ選択転送部333と、応答データ列受信部334と、処理結果出力部335とを有する。
ここで、アクセラレータ処理実行システム2およびその各機能ブロックは、図2を参照して説明した本発明の第1の実施の形態と同様のハードウェア要素によって構成可能である。ただし、アクセラレータ処理実行システム2およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックのうち、本発明の第1の実施の形態と異なる構成について説明する。
メモリ領域320は、複数の専用メモリ領域321を含む。複数の専用メモリ領域321のそれぞれは、転送用の専用メモリ領域321Tと、応答用の専用メモリ領域321Rとからなる。また、専用メモリ領域321Tおよび320Rには、識別情報として、バッファ番号が付与される。以降、バッファ番号i(iは1〜n:nは専用メモリ領域321の個数)が付された専用メモリ領域321Tおよび320Rを、専用メモリ領域321Tiおよび320Riとも記載する。また、1組の専用メモリ領域321Tiおよび320Riを、まとめて専用メモリ領域321iとも記載する。
なお、1組の専用メモリ領域321iは、いずれか1つのタスク用であり、他のタスク用とならない点は、本発明の第1の実施の形態と同様である。また、複数のタスクのそれぞれに、異なる1組の異なる専用メモリ領域321iが関連付けられる場合、専用メモリ領域321Tiおよび320Riは、タスクの個数分ずつ確保される。また、複数のタスクにいずれかのコア111が静的に割り当てられ、複数のコア111のそれぞれに、異なる1組の専用メモリ領域321iが関連付けられる場合、専用メモリ領域321Tiおよび320Riは、複数のコア111の個数分ずつ確保される。
アクセラレータ処理管理装置330は、コード格納用メモリ1004に格納されたプログラムのコードを実行することにより、例えば、図5に示すようなソフトウェア構成で各機能ブロックを実現する。図5において、アクセラレータ処理管理装置330により実行されるソフトウェアは、APIライブラリと、APIバッファマネージャとからなる。APIライブラリは、コア111によって実行されるホストアプリケーションに、API関数を提供する。また、APIライブラリは、API関数の呼び出しを契機に動作するAPIドライバと、APIドライバから呼び出されるデータリンクレイヤドライバとを含む。APIバッファマネージャは、専用メモリ領域321iのデータをアクセラレータ20との間で送受信するため、デバイス接続インタフェース1005を制御するドライバへのインタフェースを含む。
この場合、呼び出しデータ列生成部332および処理結果出力部335は、APIライブラリによって構成される。また、アクセラレータ選択転送部333および応答データ列受信部334は、APIバッファマネージャによって構成される。ただし、アクセラレータ処理管理装置330が各機能ブロックを実現するソフトウェア構成は、上述の構成に限定されない。
次に、アクセラレータ処理管理装置330の各機能ブロックの詳細について説明する。
アクセラレータ使用状況記憶部331は、複数のアクセラレータ20のそれぞれについて、タスクによる使用状況を表す使用状況情報として、次の情報を記憶する。すなわち、アクセラレータ使用状況記憶部331は、当該アクセラレータ20が使用中である場合には、当該アクセラレータ20に処理を要求したタスク用の専用メモリ領域321iの識別情報(バッファ番号i)を記憶する。また、アクセラレータ使用状況記憶部331は、当該アクセラレータ20が使用中でない場合には、使用中でないことを表す情報を記憶する。例えば、使用状況情報として、使用中の場合に前述のバッファ番号が適用される場合、使用中でないことを表す情報は、いずれの専用メモリ領域321iのバッファ番号にも該当しない値であればよい。例えば、n組の専用メモリ領域321iに対して1〜nのバッファ番号が付与されている場合、使用中でないことを表す情報は、0で表されていてもよい。
呼び出しデータ列生成部332は、タスクからのアクセラレータ20の呼び出し処理に応じて生成する呼び出しデータ列に、当該タスク用の専用メモリ領域321iの識別情報を含める。例えば、呼び出しデータ列は、当該タスク用の専用メモリ領域321iのバッファ番号iと、アクセラレータ20へ処理を要求する要求コマンドと、要求コマンドのパラメータとを含んでいてもよい。
なお、当該タスク用の専用メモリ領域321iの識別情報は、タスクからの呼び出し処理を表す情報に含まれていてもよい。つまり、専用メモリ領域321iの識別情報を引数の一つとして指定するよう定義された呼び出し処理が、API関数として提供されていてもよい。この場合、各タスクは、自身用の専用メモリ領域321iに付与されたバッファ番号iをAPI関数の引数に指定して、アクセラレータ処理を呼び出すことになる。
また、呼び出し処理に、複数の要求コマンドが含まれる場合も想定される。この場合、呼び出しデータ列生成部332は、それぞれの要求コマンドについて、呼び出しデータ列を生成する。
また、呼び出しデータ列生成部332は、生成した呼び出しデータ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域321Tiに格納する。前述のように、呼び出し処理に、複数の要求コマンドが含まれるとする。この場合、呼び出しデータ列生成部332は、呼び出しデータ列を1つ専用メモリ領域321Tiに格納し、当該呼び出しデータ列が転送された後、次の呼び出しデータ列を1つ専用メモリ領域321Tiに格納することを繰り返せばよい。
アクセラレータ選択転送部333は、専用メモリ領域321Tiに呼び出しデータ列が格納されている場合、アクセラレータ使用状況記憶部331において、使用中でないことを表す情報(例えば、上述の0)に関連付けられたアクセラレータ20の1つを選択する。そして、アクセラレータ選択転送部333は、アクセラレータ使用状況記憶部331において、選択したアクセラレータ20の使用状況情報を、呼び出しデータ列が格納されている専用メモリ領域321Tiのバッファ番号iに更新する。これにより、選択されたアクセラレータ20の使用状況情報として、呼び出し元のタスク用の専用メモリ領域321iのバッファ番号iが格納されることになる。
また、アクセラレータ選択転送部333は、専用メモリ領域321Tiに格納された呼び出しデータ列を、選択したアクセラレータ20に転送する。
応答データ列受信部334は、アクセラレータ20から呼び出しデータ列の応答として受信した応答データ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域321Riに格納する。また、応答データ列受信部334は、アクセラレータ使用状況記憶部331において、応答データ列の送信元のアクセラレータ20の使用状況情報を、使用中でないことを表すよう更新する。
ここで、アクセラレータ20からの応答データ列には、呼び出し元のタスク用の専用メモリ領域321iのバッファ番号iが含まれているものとする。すなわち、アクセラレータ20は、呼び出しデータ列に含まれるバッファ番号iを、呼び出しデータ列に応答する応答データ列に含めるよう構成されることが前提である。例えば、応答データ列は、呼び出しデータ列に含まれていたバッファ番号iと、要求コマンドに応答する応答コマンドと、要求コマンドによる処理結果とを含んでいてもよい。
処理結果出力部335は、専用メモリ領域321iに格納された応答データ列に基づいて、呼び出し元のタスクに対して、呼び出し処理結果として正常応答であるか否かを出力する。ここで、呼び出し処理には、1つ以上の要求コマンドが含まれる。そこで、処理結果出力部335は、1つ以上の要求コマンドに対応する応答データ列のそれぞれに含まれる処理結果が全て正常を示す場合に、正常応答である旨を出力すればよい。また、処理結果出力部335は、1つ以上の要求コマンドに対応する応答データ列の少なくとも1つに含まれる処理結果が正常を示さない場合に、正常応答でない旨を出力すればよい。
以上のように構成されたアクセラレータ処理実行システム2の動作について、図面を参照して説明する。ここでは、前述のように、呼び出しデータ列生成部332および処理結果出力部335が、APIライブラリによって構成されるとする。また、アクセラレータ選択転送部333および応答データ列受信部334が、APIバッファマネージャによって構成されるとする。
まず、APIライブラリの動作を図6に示す。
図6において、まず、呼び出しデータ列生成部332は、API関数の呼び出しをトリガに、API関数で定義された最初の要求コマンドについて処理を開始する(ステップS101)。
次に、呼び出しデータ列生成部332は、この要求コマンドを含む呼び出しデータ列を生成する(ステップS102)。
例えば、呼び出しデータ列は、呼び出し元のタスク用の専用メモリ領域321iのバッファ番号i、要求コマンドのID、および、パラメータをそれぞれ表すデータ列からなる。
次に、呼び出しデータ列生成部332は、生成した呼び出しデータ列を、呼び出し元のタスク用の専用メモリ領域321Tiに格納する(ステップS103)。
そして、専用メモリ領域321Tiへの呼び出しデータ列の格納を契機に、APIバッファマネージャが動作する。APIバッファマネージャの動作については後述する。APIバッファマネージャの動作により、専用メモリ領域321Tiの呼び出しデータ列がいずれかのアクセラレータ20に転送され、当該アクセラレータ20から受信された応答データ列が専用メモリ領域321Riに格納される。
次に、処理結果出力部335は、応答データ列の受信がAPIバッファマネージャから通知されたか否かを判断する(ステップS104)。通知されていない場合、ステップS104を繰り返すことにより、受信待ち状態となる。
次に、応答データ列の受信がAPIバッファマネージャから通知されると(ステップS104でYes)、処理結果出力部335は、通知された情報が示す専用メモリ領域321Riから、応答データ列を読み込む(ステップS105)。
次に、処理結果出力部335は、応答データ列に含まれる処理結果が正常であるか否かを判断する(ステップS106)。
ここで、処理結果が正常であると判断した場合(ステップS106でYes)、処理結果出力部335は、実行中のAPI関数において定義された次の要求コマンドがあるか否かを判断する(ステップS107)。
ここで、次の要求コマンドがある場合(ステップS107でYes)、呼び出しデータ列生成部332は、次の要求コマンドについて、処理を開始する(ステップS108)。
そして、呼び出しデータ列生成部332は、ステップS102からの処理を繰り返す。
一方、ステップS106において、処理結果が正常でないと判断された場合について説明する(ステップS106でNo)。この場合、処理結果出力部335は、正常でないことを表す情報を、呼び出し元のタスクに出力して(ステップS109)、動作を終了する。
また、ステップS107において、次の要求コマンドがないと判断された場合について説明する(ステップS107でNo)。この場合、処理結果出力部335は、処理結果が正常であることを表す情報を、呼び出し元のタスクに出力して(ステップS110)、動作を終了する。
以上で、APIライブラリの動作の説明を終了する。
次に、APIバッファマネージャが呼び出しデータ列を転送する動作を図7に示す。
図7において、まず、アクセラレータ選択転送部333は、バッファ番号を示すインデックスiを初期化する(ステップS201)。例えば、n個の専用メモリ領域321に、バッファ番号1〜nまでがそれぞれ付与されている場合、インデックスiは、1に初期化される。
次に、アクセラレータ選択転送部333は、専用メモリ領域321Tiに、呼び出しデータ列が格納されているか否かを判断する(ステップS202)。
ここで、専用メモリ領域321Tiに呼び出しデータ列が格納されている場合、アクセラレータ選択転送部333は、アクセラレータ使用状況記憶部331を参照することにより、使用中でないアクセラレータ20があるか否かを判断する(ステップS203)。
ここで、使用中でないアクセラレータ20がある場合、アクセラレータ選択転送部333は、使用中でないアクセラレータ20を1つ選択する(ステップS204)。
次に、アクセラレータ選択転送部333は、アクセラレータ使用状況記憶部331において、選択したアクセラレータ20の使用状況情報を、バッファ番号iに更新する(ステップS205)。
次に、アクセラレータ選択転送部333は、専用メモリ領域321Tiに格納された呼び出しデータ列を、選択したアクセラレータ20に転送する(ステップS206)。
具体的には、アクセラレータ選択転送部333は、専用メモリ領域321Tiの先頭ポインタアドレス、呼び出しデータ列のサイズおよび選択したアクセラレータ20の識別情報を、デバイス接続インタフェースドライバに通知すればよい。これにより、選択したアクセラレータ20に対し、専用メモリ領域321Tiの呼び出しデータ列が送信される。
一方、ステップS203において、使用中でないアクセラレータ20が無いと判断された場合、アクセラレータ選択転送部333は、使用中でないアクセラレータ20が有ると判断されるまで、ステップS203を繰り返す。
また、ステップS206におけるアクセラレータ20への転送処理が完了した場合、または、ステップS202において専用メモリ領域321Tiに、呼び出しデータ列が格納されていないと判断された場合について説明する。
この場合、アクセラレータ選択転送部333は、インデックスiが、最大値n以下か否かを判断する(ステップS207)。
ここで、iがn以下であれば、アクセラレータ選択転送部333は、iを1だけインクリメントして、ステップS202からの処理を繰り返す。
一方、iがnを超えていれば(ステップS208でNo)、アクセラレータ選択転送部333は、ステップS201からの処理を繰り返す。すなわち、インデックスiが初期化されて、全ての専用メモリ領域321Tiについて再度処理が繰り返される。
以上で、APIバッファマネージャが呼び出しデータ列を転送する動作の説明を終了する。
次に、APIバッファマネージャが応答データ列を受信する動作を図8に示す。
まず、応答データ列受信部334は、アクセラレータ20から受信された応答データ列を、その応答データ列に対応する呼び出し処理の呼び出し元のタスク用の専用メモリ領域321Riに格納する(ステップS301)。
前述のようにアクセラレータ20からの応答データ列は、呼び出し元のタスク用の専用メモリ領域321の識別情報であるバッファ番号iを含む。そこで、応答データ列受信部334は、アクセラレータ20から受信された応答データ列を、その応答データ列に含まれるバッファ番号iに対応する専用メモリ領域321Riに格納すればよい。
次に、応答データ列受信部334は、アクセラレータ使用状況記憶部331において、応答データ列に含まれるバッファ番号iが使用状況情報として記憶されたアクセラレータ20を検索する。そして、応答データ列受信部334は、検索したアクセラレータ20の当該使用状況情報を、使用中でないことを表す情報に更新する(ステップS302)。
次に、応答データ列受信部334は、APIライブラリに対して、専用メモリ領域321Riに応答データ列が受信されたことを通知する(ステップS303)。具体的には、応答データ列受信部334は、専用メモリ領域321Riの先頭アドレスを通知すればよい。これにより、APIライブラリでは、図6のステップS105からの動作が実行される。
以上で、アクセラレータ処理実行システム2の動作の説明を終了する。
次に、アクセラレータ処理実行システム2の動作を具体例で示す。
ここでは、APIライブラリによって、アクセラレータ処理を呼び出すためのAPI関数として、API_Func01関数が定義されているものとする。API_Func01関数は、図9に例示する形式で関数呼び出しを行うよう定義されていることを想定する。すなわち、第一引数には、呼び出し元のタスク用のバッファ番号が指定される。この例では、バッファ番号1を表す「0x0001」が指定されている。また、第二引数には、API_Func01関数固有のパラメータの設定値が指定される。この例では、設定値として「0x0000」が指定されている。また、API_Func01関数では、アクセラレータ20に対して、複数の要求コマンドが送信されるシナリオが定義されている。ここでは、API_Func01関数は、要求コマンド0x0001および要求コマンド0x0011をアクセラレータ20に順次送信するよう定義されているものとする。なお、コマンドIDが「xxxxxx」の要求コマンドを、「要求コマンドxxxxxx」と記載している。
また、ここでは、複数のアクセラレータ20のそれぞれの識別情報は、「#x(xは正の整数)」と表されるものとする。また、識別情報が「#x」のアクセラレータ20を、「アクセラレータ20#x」とも記載する。
また、ここでは、アクセラレータ使用状況記憶部331には、図10に一例を示すように使用状況情報が格納されるものとする。この例では、アクセラレータ20#1の使用状況としては、バッファ番号2を専有するタスクにより使用中であることを表す「0x0002」が使用状況情報として格納されている。また、アクセラレータ20#2の使用状況としては、使用中でない0を表す「0x0000」が使用状況情報として格納されている。
また、ここでは、ホスト装置30およびアクセラレータ20を接続するデバイス接続インタフェース1005および2005は、SPI(Serial Peripheral Interface)であるものとする。
まず、APIライブラリにおいて、呼び出しデータ列生成部332は、API_Func01関数の実行をトリガに、API_Func01関数のシナリオで定義された最初の要求コマンド0x0001について処理を開始する(図6のステップS101)。
次に、呼び出しデータ列生成部332は、要求コマンド0x0001について呼び出しデータ列を生成する(ステップS102)。ここでは、生成される呼び出しデータ列は、図11に示す通りとなる。
次に、呼び出しデータ列生成部332は、生成した呼び出しデータ列を、API_Func01関数の第一引数で指定されたバッファ番号0x0001が示す専用メモリ領域321T1に格納する(ステップS103)。
専用メモリ領域321T1に格納される情報は、図12に示す通りとなる。
そして、専用メモリ領域321T1への呼び出しデータ列の格納を契機に、APIバッファマネージャが動作する。
まず、アクセラレータ選択転送部333は、専用メモリ領域321T1に、呼び出しデータ列が格納されていると判断する(ステップS201、S202でYes)。
次に、アクセラレータ選択転送部333は、アクセラレータ使用状況記憶部331を参照することにより、使用中でないアクセラレータ20#2を選択する(ステップS203でYes、S204)。
次に、アクセラレータ選択転送部333は、アクセラレータ使用状況記憶部331において、アクセラレータ20#2の使用状況情報を、使用中でないことを表す「0x0001」から、バッファ番号1を表す「0x0001」に更新する(ステップS205)。
これにより、アクセラレータ使用状況記憶部331に格納される使用状況情報は、図13に示した通りとなる。
次に、アクセラレータ選択転送部333は、専用メモリ領域321T1の先頭ポインタアドレス、サイズおよび選択したアクセラレータ20の識別情報「#2」を、SPIドライバに通知する(ステップS206)。これにより、選択したアクセラレータ20#2に対し、専用メモリ領域321T1の呼び出しデータ列が送信される。
そして、アクセラレータ20#2において、受信された呼び出しデータ列に含まれる命令コマンド0x0001に応じた処理が行われる。その結果、アクセラレータ20#2から、ホスト装置30に対して、SPIを介して、応答データ列が返却される。この応答データ列は、呼び出し元のタスク用の専用メモリ領域321の識別情報であるバッファ番号1、応答コマンドのID、および、処理結果をそれぞれ表すデータ列を含む。SPIドライバは、APIバッファマネージャに、応答データ列が受信されたことを割り込みにより通知する。
そこで、応答データ列受信部334は、受信された応答データ列を、当該応答データ列に含まれるバッファ番号「0x0001」に対応する専用メモリ領域321R1に格納する。この具体例では、専用メモリ領域321R1に、図14に示すような応答データ列が格納されたとする。
次に、応答データ列受信部334は、アクセラレータ使用状況記憶部331において、応答データ列に含まれるバッファ番号「0x0001」が使用状況情報として関連付けられたアクセラレータ20を検索する。ここでは、アクセラレータ20#2が検索される。そこで、応答データ列受信部334は、検索したアクセラレータ20#2の当該使用状況情報を、使用中でない0を表す「0x0000」に更新する(ステップS302)。
これにより、アクセラレータ使用状況記憶部331に格納される使用状況情報は、図10に示した通りとなる。
次に、応答データ列受信部334は、APIライブラリに、専用メモリ領域321R1の先頭アドレスを通知する(ステップS303)。
そこで、APIライブラリにおいて、処理結果出力部335は、通知されたアドレスの専用メモリ領域321R1から、応答データ列を読み込む(ステップS105)。
次に、処理結果出力部335は、応答データ列に基づいて、処理結果が正常であると判断したとする(ステップS106でYes)。
そこで、次に、処理結果出力部335は、実行中のAPI_Func01関数において定義された次の要求コマンド0x0011があると判断する(ステップS107でYes)。
そこで、呼び出しデータ列生成部332は、次の要求コマンド0x0011について、処理を開始する(ステップS108)。
そして、呼び出しデータ列生成部332は、ステップS102からの処理を繰り返す。
命令コマンド0x0001の場合とほぼ同様に、ステップS102〜S103、S201〜S206、S301〜S303、S105が実行される。ここでは、命令コマンド0x0011に対する応答データ列の処理結果も、正常であったとする(ステップS106でYes)。
そして、次に、処理結果出力部335は、実行中のAPI_Func01関数において定義された次の要求コマンドはないと判断する(ステップS107でNo)。
そこで、処理結果出力部335は、呼び出し元のタスクに、処理結果が正常応答であることを表す情報を出力する(ステップS110)。
以上で、アクセラレータ処理実行システム2の動作の具体例の説明を終了する。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態は、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、より効率的に、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にする。
その理由について説明する。本実施の形態は、本発明の第1の実施の形態と同様の構成に加えて、次のように構成されるからである。すなわち、専用メモリ領域が、転送用の専用メモリ領域および応答用の専用メモリ領域からなる。そして、呼び出しデータ列生成部が、呼び出しデータ列を呼び出し元のタスク用の転送用の専用メモリ領域に格納する。そして、アクセラレータ選択転送部が、転送用の専用メモリ領域に呼び出しデータ列が格納されている場合に動作するからである。また、応答データ列受信部が、応答データ列を、呼び出し元のタスク用の応答用の専用メモリ領域に格納する。そして、処理結果出力部が、応答用の専用メモリ領域に格納された応答データ列に基づいて動作するからである。
このように、本実施の形態は、転送用および応答用のいずれの専用メモリ領域にデータ列が格納されているかに応じて動作するため、リソースの排他制御を不要とする専用メモリ領域を、より効率的に利用することができる。
さらなる理由について説明する。本実施の形態では、呼び出しデータ列生成部が、呼び出しデータ列に、呼び出し元のタスク用の専用メモリ領域の識別情報を含めて生成する。また、アクセラレータ選択転送部が、選択したアクセラレータの使用状況情報を、転送する呼び出しデータ列に含まれる専用メモリ領域の識別情報に更新することにより、使用中であることを表す。また、応答データ列受信部が、応答データ列に含まれる識別情報が示す専用メモリ領域に応答データ列を格納するとともに、当該識別情報が使用状況情報として格納されたアクセラレータの使用状況情報を、使用中でないことを表すよう更新するからである。
これにより、各機能ブロックは、呼び出し処理の呼び出し元のタスクを、呼び出しデータ列、応答データ列、または、使用状況情報に含まれる専用メモリ領域の識別情報に基づいて容易に特定でき、効率的に動作を実行できる。
その結果、本実施の形態は、並列して実行され得るタスク毎に、専用メモリ領域を経由してアクセラレータに処理を要求する際に、メモリに対するタスク間またはコア間での排他制御を不要とする処理を、より効率的に行うことができる。また、本実施の形態は、タスクからのアクセラレータ処理の呼び出し処理を、専用メモリ領域およびアクセラレータ使用状況記憶部を用いて、空いているアクセラレータに対して振り分ける処理を、より効率的に行うことができる。したがって、本実施の形態を用いれば、アプリケーション側では、リソースやアクセラレータに対する排他制御やアクセラレータの宛先を考慮したプログラミングが不要となる。
次に、本発明の実施の形態の最小構成となるアクセラレータ処理管理装置130を、図15に示す。図15において、アクセラレータ処理管理装置130は、アクセラレータ使用状況記憶部131と、呼び出しデータ列生成部132と、アクセラレータ選択転送部133と、応答データ列受信部134と、処理結果出力部135とを含む。
アクセラレータ処理管理装置130は、マルチコアプロセッサを有するホスト装置に含まれる。また、マルチコアプロセッサは、ホスト装置の外部の複数のアクセラレータに接続される。
アクセラレータ処理管理装置130の各機能ブロックは、本発明の第1の実施の形態において説明したように構成され、図3を参照して説明したように動作する。
これにより、本発明の実施の形態の最小構成となるアクセラレータ処理管理装置130は、複数のアクセラレータに接続されたマルチコアプロセッサを含むホスト装置に含まれることにより、次の効果を奏する。すなわち、アクセラレータ処理管理装置130は、複数のコアによって並列に実行され得る複数のタスクによる、並行したアクセラレータ処理の呼び出しを可能とする。しかも、アプリケーション側で、リソースおよびアクセラレータに対する排他制御や振り分け処理を考慮する必要がないという利点がある。
また、本発明の実施の形態の他の最小構成となるホスト装置10を、図16に示す。図16において、ホスト装置10は、複数のコア111と、複数の専用メモリ領域121と、アクセラレータ処理管理装置130とを含む。また、ホスト装置10は、外部の複数のアクセラレータに接続される。
ホスト装置10の各機能ブロックは、本発明の第1の実施の形態において説明したように構成される。そして、ホスト装置10においてアクセラレータ処理管理装置130が、図3を参照して説明したように動作する。
これにより、本発明の実施の形態の他の最小構成となるホスト装置10は、複数のアクセラレータに接続された場合に、次の効果を奏する。すなわち、ホスト装置10は、複数のコアによって並列に実行され得る複数のタスクによる、並行したアクセラレータ処理の呼び出しを可能とする。しかも、アプリケーション側で、リソースおよびアクセラレータに対する排他制御や振り分け処理を考慮する必要がないという利点がある。
なお、上述した本発明の第2の実施の形態において、ホスト装置およびアクセラレータを接続するデバイス接続インタフェースとして、SPIを適用する例について説明したが、これに限られない。例えば、デバイス接続インタフェースは、PCI(Peripheral Component Interconnect)等のシステムバスやEthernet(登録商標)であってもよい。
また、上述した本発明の各実施の形態において、専用メモリ領域を確保するメモリは、例えば、揮発性のRAM(Random Access Memory)等により構成してよい。
また、上述した各実施の形態において、アクセラレータとしては、例えば、無線モジュールなどの特定用途向けIC(Integrated Circuit)が適用可能であるが、これに限られない。例えば、アクセラレータとしては、DSP(Digital Signal Processor)や、FPGA(field-programmable gate array)等が適用されてもよい。
また、上述した本発明の各実施の形態において、アクセラレータ処理管理装置の各機能ブロックが、メモリに記憶されたプログラムを実行するプロセッサによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したアクセラレータ処理管理装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておく。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。