(57)【要約】【課題】共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にすること。【解決手段】複数のコアに接続された各アクセラレータの使用状況情報を記憶するアクセラレータ使用状況記憶部１３１と、タスクからのアクセラレータ処理の呼び出しに応じて呼び出しデータ列を生成し、当該タスク用の専用メモリ領域に格納する呼び出しデータ列生成部１３２と、使用状況情報に基づき使用中でないアクセラレータを選択して呼び出しデータ列を転送し、当該アクセラレータの使用状況情報を更新するアクセラレータ選択転送部１３３と、アクセラレータからの応答データ列を呼び出し元のタスク用の専用メモリ領域に格納し、当該アクセラレータの使用状況情報を更新する応答データ列受信部１３４と、処理結果出力部１３５とを備える。【選択図】図１
2018120307.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアを含むマルチコアプロセッサに接続された複数のアクセラレータのそれぞれについて、前記複数のプロセッサコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶するアクセラレータ使用状況記憶手段と、
前記タスクからの前記アクセラレータの呼び出し処理に応じて、前記呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、複数の専用メモリ領域のうち当該タスク用の専用メモリ領域に格納する呼び出しデータ列生成手段と、
前記専用メモリ領域に前記呼び出しデータ列が格納されている場合、前記アクセラレータ使用状況記憶手段を参照することにより使用中でないアクセラレータの１つを選択し、選択したアクセラレータに対して、前記専用メモリ領域に格納された前記呼び出しデータ列を転送するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中であることを表すよう更新するアクセラレータ選択転送手段と、
前記アクセラレータから前記呼び出しデータ列の応答として受信された応答データ列を、前記呼び出し処理の呼び出し元のタスク用の前記専用メモリ領域に格納するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中でないことを表すよう更新する応答データ列受信手段と、
前記専用メモリ領域に格納された前記応答データ列に基づいて、前記呼び出し元の前記タスクに対して呼び出し処理結果を出力する処理結果出力手段と、
を備えたアクセラレータ処理管理装置。
【請求項２】
前記専用メモリ領域が、転送用の専用メモリ領域および応答用の専用メモリ領域からなるとき、
前記呼び出しデータ列生成手段は、生成した前記呼び出しデータ列を、前記呼び出し元のタスク用の前記転送用の専用メモリ領域に格納し、
前記アクセラレータ選択転送手段は、前記転送用の専用メモリ領域に前記呼び出しデータ列が格納されている場合に動作し、
前記応答データ列受信手段は、前記応答データ列を、前記呼び出し元のタスク用の前記応答用の専用メモリ領域に格納し、
前記処理結果出力手段は、前記応答用の前記専用メモリ領域に格納された応答データ列に基づいて動作することを特徴とする請求項１に記載のアクセラレータ処理管理装置。
【請求項３】
前記呼び出しデータ列生成手段は、前記呼び出しデータ列に、前記呼び出し元のタスク用の前記専用メモリ領域の識別情報を含めて生成し、
前記応答データ列受信手段は、前記応答データ列に前記呼び出し元のタスクの前記専用メモリ領域の識別情報が含まれる場合に、当該応答データ列に含まれる識別情報が示す専用メモリ領域に前記応答データ列を格納することを特徴とする請求項１または請求項２に記載のアクセラレータ処理管理装置。
【請求項４】
前記アクセラレータ使用状況記憶手段は、使用中の前記アクセラレータのそれぞれについて、当該アクセラレータが実行中の処理の呼び出し元のタスク用の前記専用メモリ領域の識別情報を、前記使用状況情報として記憶し、
前記アクセラレータ選択転送手段は、選択したアクセラレータの前記使用状況情報を、選択したアクセラレータに転送される呼び出しデータ列が格納された前記専用メモリ領域の識別情報に更新し、
前記応答データ列受信手段は、前記応答データ列が格納された前記専用メモリ領域の識別情報が前記使用状況情報として記憶されたアクセラレータの当該使用状況情報を、使用中でないことを表す情報に更新することを特徴とする請求項１から請求項３のいずれか１項に記載のアクセラレータ処理管理装置。
【請求項５】
請求項１から請求項４のいずれか１項に記載のアクセラレータ処理管理装置と、
前記複数の専用メモリ領域を含むメモリ領域と、
前記複数のプロセッサコアを含むマルチコアプロセッサと、
を備えたホスト装置。
【請求項６】
請求項５に記載のホスト装置と、
前記複数のアクセラレータと、
を備えたアクセラレータ処理実行システム。
【請求項７】
コンピュータ装置が、
複数のプロセッサコアを含むマルチコアプロセッサに接続された複数のアクセラレータのそれぞれについて、前記複数のプロセッサコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶するアクセラレータ使用状況記憶手段を用いて、
前記タスクからの前記アクセラレータの呼び出し処理に応じて、前記呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、複数の専用メモリ領域のうち当該タスク用の専用メモリ領域に格納し、
前記専用メモリ領域に前記呼び出しデータ列が格納されている場合、前記アクセラレータ使用状況記憶手段を参照することにより使用中でないアクセラレータの１つを選択し、選択したアクセラレータに対して、前記専用メモリ領域に格納された前記呼び出しデータ列を転送するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中であることを表すよう更新し、
前記アクセラレータから前記呼び出しデータ列の応答として受信された応答データ列を、前記呼び出し処理の呼び出し元のタスク用の前記専用メモリ領域に格納するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中でないことを表すよう更新し、
前記専用メモリ領域に格納された前記応答データ列に基づいて、前記呼び出し元の前記タスクに対して呼び出し処理結果を出力する方法。
【請求項８】
複数のプロセッサコアを含むマルチコアプロセッサに接続された複数のアクセラレータのそれぞれについて、前記複数のプロセッサコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶するアクセラレータ使用状況記憶手段を用いて、
前記タスクからの前記アクセラレータの呼び出し処理に応じて、前記呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、複数の専用メモリ領域のうち当該タスク用の専用メモリ領域に格納する呼び出しデータ列生成ステップと、
前記専用メモリ領域に前記呼び出しデータ列が格納されている場合、前記アクセラレータ使用状況記憶手段を参照することにより使用中でないアクセラレータの１つを選択し、選択したアクセラレータに対して、前記専用メモリ領域に格納された前記呼び出しデータ列を転送するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中であることを表すよう更新するアクセラレータ選択転送ステップと、
前記アクセラレータから前記呼び出しデータ列の応答として受信された応答データ列を、前記呼び出し処理の呼び出し元の前記タスク用の前記専用メモリ領域に格納するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中でないことを表すよう更新する応答データ列受信ステップと、
前記専用メモリ領域に格納された前記応答データ列に基づいて、前記呼び出し元の前記タスクに対して呼び出し処理結果を出力する処理結果出力ステップと、
をコンピュータ装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサおよび複数のアクセラレータを含むシステムに関する。
【背景技術】
【０００２】
マルチコアプロセッサおよび複数のアクセラレータを含むシステムが知られている。マルチコアプロセッサは、複数のプロセッサコアを有する。以下、プロセッサコアを、単にコアとも称する。マルチコアプロセッサは、複数のコアにおいて異なるタスクを並行して動作させることが可能である。なお、マルチコアプロセッサで動作するプロセスやスレッドをまとめてタスクと称する。マルチコアプロセッサに複数のアクセラレータを接続した場合、複数のタスクが複数のアクセラレータを共有することにより、負荷分散が可能となる。
【０００３】
そのようなアクセラレータの一例としては、無線などのアナログ信号処理やベースバンド信号などのディジタル信号処理がＩＣ（Integrated Circuit）化されてセットになったモジュールがある。このようなモジュールは、ＣＰＵ（Central Processing Unit）の外部バスや内部バスに接続され、ハードウェアアクセラレータとして動作する。
【０００４】
このように、複数のアクセラレータがマルチコアプロセッサにバスを介して接続されるシステムでは、複数のコアにおいて並列に実行され得るタスクは、処理単位ごとにアクセラレータを呼び出し、データ転送を行う必要がある。データ転送の際には、メモリ等の主記憶装置（以下、メモリ領域とも称する）が、一時的な出力領域として使用される。このとき、データ転送を行うために使用されるメモリ領域等のリソースは、各タスクによって共有されるのが一般的である。そのため、共有のリソースに対して、排他制御が必要になる。
【０００５】
このようなシステムにおいて共有のリソースに対する排他制御を実装した場合、特定のタスクがリソースを占有している間、他のタスクが当該リソースにアクセスできないため、全体として処理性能が低下する場合がある。また、排他制御処理に関連して発生する処理のオーバーヘッドも、処理能力が低下する要因となる。
【０００６】
このようなマルチコアプロセッサによるリソースアクセスに関連する技術の一例が、特許文献１〜２に開示されている。
【０００７】
特許文献１に記載された関連技術は、コア毎に専用メモリ領域を用意し、専用メモリ領域の空き状況によりタスクを動的にコアに割り当てる。これにより、この関連技術は、複数のタスクによって並行して行われるリソースアクセスを効率化する。
【０００８】
また、特許文献２に記載された関連技術は、それぞれ別々のコアで動作するスレッドが共用リソースに対するアクセス競合を発生させる競合周期を算出する。そして、この関連技術は、算出された競合周期にて割り当てられるスレッドのうち、いずれか一方のスレッドが割り当てられる時刻と、当該スレッドが割り当てられるコアにおける競合周期前後のいずれかの時刻に割り当てられるスレッドの時刻とを入れ替える。これにより、この関連技術は、リソースに対するアクセス競合を回避し、排他処理のオーバーヘッドを最小限にする。
【０００９】
さらに、複数のアクセラレータがマルチコアプロセッサにバスを介して接続されるシステムでは、アクセラレータに対する排他制御および振り分け処理が必要である。これは、各アクセラレータが、ある要求に対する処理の実行中には、他の要求を受け付けることができないからである。そして、並行して実行され得る各タスクからアクセラレータに要求される処理を、そのような複数のアクセラレータのいずれに振り分けるかという振り分け処理が必要となる。
【００１０】
アクセラレータに処理を実行させる方法に関連する技術が、特許文献３〜４に開示されている。
【００１１】
特許文献３に記載された関連技術は、汎用プロセッサ及びアクセラレータを持つシステムにおいて、同期フラグ領域を設ける。そして、アクセラレータは、汎用プロセッサによる処理の完了を示すフラグが同期フラグ領域に書き込まれると、汎用プロセッサが他の処理を実行中であっても、フラグに対応するアクセラレーション処理を開始する。また、汎用プロセッサは、アクセラレーション処理の完了を示すフラグが同期フラグ領域に書き込まれると、アクセラレータが他の処理を実行中であっても、フラグに対応する処理を開始する。このように、この関連技術は、汎用プロセッサおよびアクセラレータによって互いに同期フラグの設定およびチェックを行うことにより、同期制御を効率的に行う。また、この関連技術は、並列化コンパイラによってソースコードを解析し、プロセッサおよびアクセラレータが並列に動作可能な区間を決定する。そして、この関連技術は、並列に動作可能な区間に関して、同期フラグを用いたプログラムをプロセッサ用およびアクセラレータ用に別々に生成する。もしくは、プログラマによって、上記のようなソースコードの解析およびプログラムの生成が行われる。
【００１２】
また、特許文献４に記載された関連技術は、ＧＰＵ（Graphics Processing Unit）等のアクセラレータで実行されるプログラムデータとプログラム実行順序を示すシナリオデータとを統合したプログラムデータを記憶領域に保存し、アクセラレータに入力する。これにより、この関連技術は、ＣＰＵとアクセラレータ間で実施されるデータのやりとりを削減し、効率的な処理を実現する。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１５−１７０２７０号公報
【特許文献２】国際公開第２０１２／０１４３１３号
【特許文献３】国際公開第２０１３／０６５６８７号
【特許文献４】特開２０１５−１８３７９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、特許文献１〜４に記載された関連技術を、マルチコアプロセッサおよび複数のアクセラレータを含むシステムに適用するには、以下の課題がある。
【００１５】
特許文献1に記載された関連技術は、専用メモリ領域のデータを特定のファイルシステムやデータベースに出力する。もし、出力先となるファイルシステムやデータベースが複数ある場合、最終的な出力先の振り分けは、アプリケーション側で実施する必要がある。したがって、この関連技術における出力先として複数のアクセラレータを適用した場合、各タスクから呼び出されるアクセラレータ処理にいずれのアクセラレータを振り分けるかを、アプリケーション側でプログラミングする必要がある。その結果、アプリケーションプログラムが複雑になるという課題がある。
【００１６】
また、特許文献２に記載された関連技術は、結局のところ、複数のコアで１つのリソースを共有している。そのため、リソースに対するアクセス競合を回避するための複雑な計算が必要となり、実装容易性に課題がある。また、複数の出力先がある場合、最終的な出力先の振り分けをアプリケーション側で実施する必要があるという点で、特許文献１と同様の課題がある。
【００１７】
また、特許文献３に記載された関連技術では、汎用プロセッサ用のプログラムとアクセラレータ用のプログラムとが密に連携する必要がある。例えば、これらのプログラムは、共通のアルゴリズムでプログラミングされる必要がある。または、これらのプログラムは、共通のコンパイラで生成される必要がある。例えば、サードパーティ製品のアクセラレータ上で動作するプログラムがサードパーティ側で実装され、ＡＰＩ（Application Programming Interface）のみが提供される場合がある。この場合、そのような複数のアクセラレータおよびマルチコアプロセッサを含むシステムにおいて、この関連技術を適用することは難しい。
【００１８】
また、特許文献４に記載された関連技術は、ＣＰＵおよびアクセラレータ間で実施されるデータのやりとりを削減するものの、マルチコアやマルチタスクでの実施についてはなんら考慮していない。
【００１９】
このように、これらの関連技術は、複数のタスクによって並行してアクセラレータ処理を呼び出し可能にするためには、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理を、アプリケーション側で考慮しなければならない、という課題がある。
【００２０】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【００２１】
本発明のアクセラレータ処理管理装置は、複数のプロセッサコアを含むマルチコアプロセッサに接続された複数のアクセラレータのそれぞれについて、前記複数のプロセッサコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶するアクセラレータ使用状況記憶手段と、前記タスクからの前記アクセラレータの呼び出し処理に応じて、前記呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、複数の専用メモリ領域のうち当該タスク用の専用メモリ領域に格納する呼び出しデータ列生成手段と、前記専用メモリ領域に前記呼び出しデータ列が格納されている場合、前記アクセラレータ使用状況記憶手段を参照することにより使用中でないアクセラレータの１つを選択し、選択したアクセラレータに対して、前記専用メモリ領域に格納された前記呼び出しデータ列を転送するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中であることを表すよう更新するアクセラレータ選択転送手段と、前記アクセラレータから前記呼び出しデータ列の応答として受信された応答データ列を、前記呼び出し処理の呼び出し元のタスク用の前記専用メモリ領域に格納するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中でないことを表すよう更新する応答データ列受信手段と、前記専用メモリ領域に格納された前記応答データ列に基づいて、前記呼び出し元の前記タスクに対して呼び出し処理結果を出力する処理結果出力手段と、を備える。
【００２２】
また、本発明のホスト装置は、上述のアクセラレータ処理管理装置と、前記複数の専用メモリ領域を含むメモリ領域と、前記複数のプロセッサコアを含むマルチコアプロセッサと、を備える。
【００２３】
また、本発明のアクセラレータ処理実行システムは、上述のホスト装置と、前記複数のアクセラレータと、を備える。
【００２４】
また、本発明の方法は、コンピュータ装置が、複数のプロセッサコアを含むマルチコアプロセッサに接続された複数のアクセラレータのそれぞれについて、前記複数のプロセッサコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶するアクセラレータ使用状況記憶手段を用いて、前記タスクからの前記アクセラレータの呼び出し処理に応じて、前記呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、複数の専用メモリ領域のうち当該タスク用の専用メモリ領域に格納し、前記専用メモリ領域に前記呼び出しデータ列が格納されている場合、前記アクセラレータ使用状況記憶手段を参照することにより使用中でないアクセラレータの１つを選択し、選択したアクセラレータに対して、前記専用メモリ領域に格納された前記呼び出しデータ列を転送するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中であることを表すよう更新し、前記アクセラレータから前記呼び出しデータ列の応答として受信された応答データ列を、前記呼び出し処理の呼び出し元のタスク用の前記専用メモリ領域に格納するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中でないことを表すよう更新し、前記専用メモリ領域に格納された前記応答データ列に基づいて、前記呼び出し元の前記タスクに対して呼び出し処理結果を出力する。
【００２５】
また、本発明のプログラムは、複数のプロセッサコアを含むマルチコアプロセッサに接続された複数のアクセラレータのそれぞれについて、前記複数のプロセッサコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶するアクセラレータ使用状況記憶手段を用いて、前記タスクからの前記アクセラレータの呼び出し処理に応じて、前記呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、複数の専用メモリ領域のうち当該タスク用の専用メモリ領域に格納する呼び出しデータ列生成ステップと、前記専用メモリ領域に前記呼び出しデータ列が格納されている場合、前記アクセラレータ使用状況記憶手段を参照することにより使用中でないアクセラレータの１つを選択し、選択したアクセラレータに対して、前記専用メモリ領域に格納された前記呼び出しデータ列を転送するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中であることを表すよう更新するアクセラレータ選択転送ステップと、前記アクセラレータから前記呼び出しデータ列の応答として受信された応答データ列を、前記呼び出し処理の呼び出し元の前記タスク用の前記専用メモリ領域に格納するとともに、前記アクセラレータ使用状況記憶手段における当該アクセラレータの前記使用状況情報を、使用中でないことを表すよう更新する応答データ列受信ステップと、前記専用メモリ領域に格納された前記応答データ列に基づいて、前記呼び出し元の前記タスクに対して呼び出し処理結果を出力する処理結果出力ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００２６】
本発明は、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にする技術を提供することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の第１の実施の形態としてのアクセラレータ処理実行システムの構成を示すブロック図である。
【図２】本発明の第１の実施の形態としてのアクセラレータ処理実行システムのハードウェア構成の一例を示す図である。
【図３】本発明の第１の実施の形態としてのアクセラレータ処理実行システムの動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としてのアクセラレータ処理実行システムの構成を示すブロック図である。
【図５】本発明の第２の実施の形態におけるアクセラレータ処理管理装置を実現するソフトウェア構成の一例を示す図である。
【図６】本発明の第２の実施の形態のアクセラレータ処理管理装置におけるＡＰＩライブラリの動作を説明するフローチャートである。
【図７】本発明の第２の実施の形態のアクセラレータ処理管理装置におけるＡＰＩバッファマネージャが呼び出しデータ列を転送する際の動作を説明するフローチャートである。
【図８】本発明の第２の実施の形態のアクセラレータ処理管理装置におけるＡＰＩバッファマネージャが応答データ列を受信する際の動作を説明するフローチャートである。
【図９】本発明の第２の実施の形態におけるＡＰＩ関数の呼び出し形式の具体例を説明する図である。
【図１０】本発明の第２の実施の形態における使用状況情報の具体例を説明する図である。
【図１１】本発明の第２の実施の形態における呼び出しデータ列の具体例を説明する図である。
【図１２】本発明の第２の実施の形態における転送用の専用メモリ領域に格納される情報の具体例を説明する図である。
【図１３】本発明の第２の実施の形態における使用状況情報の更新後の具体例を説明する図である。
【図１４】本発明の第２の実施の形態における受信用の専用メモリ領域に格納される情報の具体例を説明する図である。
【図１５】本発明の実施の形態の最小構成であるアクセラレータ処理管理装置の構成を示すブロック図である。
【図１６】本発明の実施の形態の他の最小構成であるホスト装置の構成を示すブロック図である。
【発明を実施するための形態】
【００２８】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２９】
（第１の実施の形態）
まず、本発明の第１の実施の形態としてのアクセラレータ処理実行システム１の構成を図１に示す。図１において、アクセラレータ処理実行システム１は、ホスト装置１０と、複数のアクセラレータ２０とを備える。ホスト装置１０は、マルチコアプロセッサ１１０と、メモリ領域１２０と、アクセラレータ処理管理装置１３０とを含む。
【００３０】
マルチコアプロセッサ１１０は、複数のプロセッサコア１１１を含む。以降、プロセッサコア１１１を、単にコア１１１とも記載する。メモリ領域１２０は、複数の専用メモリ領域１２１を含む。アクセラレータ処理管理装置１３０は、アクセラレータ使用状況記憶部１３１と、呼び出しデータ列生成部１３２と、アクセラレータ選択転送部１３３と、応答データ列受信部１３４と、処理結果出力部１３５とを有する。
【００３１】
なお、図１には、３つのコア１１１と、４つの専用メモリ領域１２１と、３つのアクセラレータ２０とが示されているが、これらの数は、限定されない。
【００３２】
ここで、アクセラレータ処理実行システム１は、図２に示すようなハードウェア要素によって構成可能である。図２において、ホスト装置１０は、マルチコアプロセッサ１１０と、ＡＰＩ（Application Programming Interface）メモリ１００２と、メモリコントローラ１００３と、コード格納用メモリ１００４と、デバイス接続インタフェース１００５とを含む。前述のように、マルチコアプロセッサ１１０は、複数のコア１１１を含む。ＡＰＩメモリ１００２は、アクセラレータ処理管理装置１３０によって利用されるデータを記憶する。また、ＡＰＩメモリ１００２は、マルチコアプロセッサ１１０からメモリコントローラ１００３を介してアクセス可能である。メモリコントローラ１００３は、ＡＰＩメモリ１００２への入出力やデータの配置を制御する。コード格納用メモリ１００４は、アクセラレータ処理管理装置１３０を動作させるプログラムのコード等を格納する。デバイス接続インタフェース１００５は、アクセラレータ２０を構成する後述のデバイス接続インタフェース２００５に接続する。
【００３３】
この場合、メモリ領域１２０は、ＡＰＩメモリ１００２によって構成される。また、アクセラレータ処理管理装置１３０のアクセラレータ使用状況記憶部１３１は、ＡＰＩメモリ１００２によって構成される。また、アクセラレータ処理管理装置１３０のその他の各機能ブロックは、コード格納用メモリ１００４に格納されるプログラムのコードを読み込んで各ハードウェア要素を制御するマルチコアプロセッサ１１０によって構成される。
【００３４】
また、アクセラレータ２０は、プロセッサ２００１と、ＡＰＩメモリ２００２と、メモリコントローラ２００３と、コード格納用メモリ２００４と、デバイス接続インタフェース２００５と、ＩＰ（Intellectual property）コアブロック２００６とを含む。ＡＰＩメモリ２００２は、ホスト装置１０から呼び出される処理をプロセッサ２００１が実行する際に利用されるデータを記憶する。ＡＰＩメモリ２００２は、プロセッサ２００１からメモリコントローラ２００３を介してアクセス可能である。メモリコントローラ２００３は、ＡＰＩメモリ２００２への入出力やデータの配置を制御する。コード格納用メモリ２００４は、アクセラレータ２０のファームウェア等のコードを格納する。デバイス接続インタフェース２００５は、ホスト装置１０のデバイス接続インタフェース１００５に接続する。ＩＰコアブロック２００６は、アクセラレータ２０特有の機能を実現する処理を実行する。アクセラレータ２０は、プロセッサ２００１によってコード格納用メモリ２００４に記憶されたファームウェアを読み込んで実行し各部を制御する。
【００３５】
なお、アクセラレータ処理実行システム１およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００３６】
次に、各機能ブロックについて説明する。
【００３７】
各コア１１１は、他のコア１１１と並行してタスクを実行可能である。つまり、各コア１１１で実行されるタスクは、並列に実行され得る。以降、並列して実行され得る複数のタスクを、単に、複数のタスクとも記載する。また、あるタスクに対して、同時に実行され得る他のタスクを、単に、他のタスクとも記載する。各タスクは、アクセラレータ２０に実行させるアクセラレータ処理を任意のタイミングで呼び出す。
【００３８】
複数の専用メモリ領域１２１は、メモリ領域１２０上に確保される。１つの専用メモリ領域１２１は、複数のタスクのいずれかによって専有して利用される。以降、あるタスクによって専有して利用される専用メモリ領域１２１を、そのタスク用の専用メモリ領域１２１、とも記載する。また、あるタスク用の専用メモリ領域１２１は、他のタスク用とならないよう定められる。
【００３９】
例えば、複数のタスクのそれぞれに、異なる専用メモリ領域１２１が関連付けられていてもよい。この場合、各タスクに割り当てられるコア１１１が動的に切り替わる場合にも、各タスクは、他のタスクとメモリ領域１２０上の領域を共有することがない。なお、この場合は、複数のタスクの個数分の専用メモリ領域１２１が、メモリ領域１２０上に確保される。
【００４０】
あるいは、複数のタスクにいずれかのコア１１１が静的に割り当てられることを想定する。この場合、複数のコア１１１のそれぞれに、異なる専用メモリ領域１２１が関連付けられていてもよい。これにより、この場合も、各タスクは、自身に静的に割り当てられたコア１１１に関連付けられた専用メモリ領域１２１を利用するので、他のタスクとメモリ領域１２０上の領域を共有することがない。なお、この場合は、複数のコア１１１の個数分の専用メモリ領域１２１が、メモリ領域１２０上に確保される。
【００４１】
次に、アクセラレータ処理管理装置１３０の各機能ブロックの詳細について説明する。
【００４２】
アクセラレータ使用状況記憶部１３１は、複数のアクセラレータ２０のそれぞれについて、タスクによる使用状況を表す使用状況情報を記憶する。使用状況情報は、各アクセラレータ２０が使用中であるか否か、すなわち、処理を実行中であるか否かを表す。
【００４３】
呼び出しデータ列生成部１３２は、タスクからのアクセラレータ２０の呼び出し処理に応じて、呼び出し処理を表す呼び出しデータ列を生成する。また、呼び出しデータ列生成部１３２は、生成した呼び出しデータ列を、当該タスク用の専用メモリ領域１２１に格納する。
【００４４】
アクセラレータ選択転送部１３３は、専用メモリ領域１２１に呼び出しデータ列が格納されている場合、アクセラレータ使用状況記憶部１３１を参照することにより、使用中でないアクセラレータ２０の１つを選択する。また、アクセラレータ選択転送部１３３は、専用メモリ領域１２１に格納された呼び出しデータ列を、選択したアクセラレータ２０に転送する。また、アクセラレータ選択転送部１３３は、アクセラレータ使用状況記憶部１３１において、選択したアクセラレータ２０の使用状況情報を、使用中であることを表すよう更新する。
【００４５】
応答データ列受信部１３４は、アクセラレータ２０から呼び出しデータ列の応答として受信した応答データ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域１２１に格納する。また、応答データ列受信部１３４は、アクセラレータ使用状況記憶部１３１において、応答データ列の送信元のアクセラレータ２０の使用状況情報を、使用中でないことを表すよう更新する。
【００４６】
処理結果出力部１３５は、専用メモリ領域１２１に格納された応答データ列に基づいて、呼び出し元のタスクに呼び出し処理結果を出力する。
【００４７】
アクセラレータ２０は、ホスト装置１０からの要求に応じて処理を実行し、処理結果をホスト装置１０に応答する。具体的には、アクセラレータ２０は、ホスト装置１０から呼び出しデータ列を受信すると、呼び出しデータ列に基づく処理を実行する。そして、アクセラレータ２０は、ホスト装置１０に対して、処理結果を含む応答データ列を送信する。
【００４８】
以上のように構成されたアクセラレータ処理実行システム１の動作について、図３を参照して説明する。
【００４９】
図３において、マルチコアプロセッサ１１０において実行されるタスクは、アクセラレータ処理を呼び出す（ステップＳ１）。
【００５０】
次に、アクセラレータ処理管理装置１３０の呼び出しデータ列生成部１３２は、呼び出し元のタスク用の専用メモリ領域１２１に、呼び出し処理を表す呼び出しデータ列を生成して格納する（ステップＳ２）。
【００５１】
次に、アクセラレータ処理管理装置１３０のアクセラレータ選択転送部１３３は、アクセラレータ使用状況記憶部１３１を参照することにより、使用中でないアクセラレータ２０の１つを選択する（ステップＳ３）。
【００５２】
次に、アクセラレータ処理管理装置１３０のアクセラレータ選択転送部１３３は、アクセラレータ使用状況記憶部１３１において、選択したアクセラレータ２０の使用状況情報を、使用中であることを表すよう更新する（ステップＳ４）。
【００５３】
次に、アクセラレータ処理管理装置１３０のアクセラレータ選択転送部１３３は、ステップＳ２で格納された呼び出しデータ列を、ステップＳ３で選択されたアクセラレータ２０に対して転送する（ステップＳ５）。
【００５４】
次に、アクセラレータ２０は、呼び出しデータ列に基づいて処理を実行する（ステップＳ６）。
【００５５】
次に、アクセラレータ２０は、応答データ列をホスト装置１０に対して送信する（ステップＳ７）。
【００５６】
次に、アクセラレータ処理管理装置１３０の応答データ列受信部１３４は、アクセラレータ２０から応答データ列を受信すると、応答データ列に対応する呼び出し元のタスク用の専用メモリ領域１２１に、応答データ列を格納する（ステップＳ８）。
【００５７】
次に、アクセラレータ処理管理装置１３０の処理結果出力部１３５は、専用メモリ領域１２１に格納された応答データ列に基づいて、呼び出し元のタスクに呼び出し処理結果を出力する（ステップＳ９）。
【００５８】
以上で、アクセラレータ処理実行システム１の動作の説明を終了する。
【００５９】
次に、本発明の第１の実施の形態の効果について述べる。
【００６０】
本発明の第１の実施の形態は、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にする。
【００６１】
その理由について説明する。本実施の形態では、複数のアクセラレータに接続されたホスト装置が、アクセラレータ処理管理装置を備える。アクセラレータ処理管理装置では、アクセラレータ使用状況記憶部が、複数のアクセラレータのそれぞれについて、複数のコアによって並列に実行され得るタスクによる使用状況を表す使用状況情報を記憶する。そして、呼び出しデータ列生成部が、タスクからのアクセラレータの呼び出し処理に応じて、呼び出し処理を表す呼び出しデータ列を生成し、生成した呼び出しデータ列を、当該タスク用の専用メモリ領域に格納する。また、アクセラレータ選択転送部が、専用メモリ領域に前記呼び出しデータ列が格納されている場合、アクセラレータ使用状況記憶部を参照することにより、使用中でないアクセラレータの１つを選択する。そして、アクセラレータ選択転送部が、専用メモリ領域に格納された呼び出しデータ列を、選択したアクセラレータに転送する。加えて、アクセラレータ選択転送部が、アクセラレータ使用状況記憶部における当該アクセラレータの使用状況情報を、使用中であることを表すよう更新するからである。さらに、応答データ列受信部が、アクセラレータから呼び出しデータ列の応答として受信された応答データ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域に格納する。そして、応答データ列受信部が、アクセラレータ使用状況記憶部において、当該アクセラレータの使用状況情報を、使用中でないことを表すよう更新する。そして、処理結果出力部が、専用メモリ領域に格納された応答データ列に基づいて、呼び出し元のタスクに呼び出し処理結果を出力するからである。
【００６２】
このように、本実施の形態は、並列して実行され得るタスク毎に、専用メモリ領域を経由してアクセラレータに処理を要求する。これにより、本実施の形態は、アクセラレータとの送受信に用いられるリソースに対するタスク間またはコア間での排他制御を不要とする。また、本実施の形態は、タスクからのアクセラレータ処理の呼び出し処理を、専用メモリ領域およびアクセラレータ使用状況記憶部を用いて、空いているアクセラレータに対して振り分ける。したがって、本実施の形態を用いれば、アプリケーション側では、リソースやアクセラレータに対する排他制御やアクセラレータの宛先を考慮したプログラミングが不要となる。
【００６３】
（第２の実施の形態）
次に、本発明の第２の実施の形態としてのアクセラレータ処理実行システム２の構成を図４に示す。図４において、アクセラレータ処理実行システム２は、本発明の第１の実施の形態としてアクセラレータ処理実行システム２に対して、ホスト装置１０に替えてホスト装置３０を備える点が異なる。ホスト装置３０は、本発明の第１の実施の形態におけるホスト装置１０に対して、メモリ領域１２０に替えてメモリ領域３２０を含む点が異なる。メモリ領域３２０は、複数の専用メモリ領域３２１を含む。また、アクセラレータ処理管理装置１３０に替えてアクセラレータ処理管理装置３３０を含む点が異なる。
【００６４】
アクセラレータ処理管理装置３３０は、アクセラレータ使用状況記憶部３３１と、呼び出しデータ列生成部３３２と、アクセラレータ選択転送部３３３と、応答データ列受信部３３４と、処理結果出力部３３５とを有する。
【００６５】
ここで、アクセラレータ処理実行システム２およびその各機能ブロックは、図２を参照して説明した本発明の第１の実施の形態と同様のハードウェア要素によって構成可能である。ただし、アクセラレータ処理実行システム２およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００６６】
次に、各機能ブロックのうち、本発明の第１の実施の形態と異なる構成について説明する。
【００６７】
メモリ領域３２０は、複数の専用メモリ領域３２１を含む。複数の専用メモリ領域３２１のそれぞれは、転送用の専用メモリ領域３２１Ｔと、応答用の専用メモリ領域３２１Ｒとからなる。また、専用メモリ領域３２１Ｔおよび３２０Ｒには、識別情報として、バッファ番号が付与される。以降、バッファ番号ｉ（ｉは１〜ｎ：ｎは専用メモリ領域３２１の個数）が付された専用メモリ領域３２１Ｔおよび３２０Ｒを、専用メモリ領域３２１Ｔｉおよび３２０Ｒｉとも記載する。また、１組の専用メモリ領域３２１Ｔｉおよび３２０Ｒｉを、まとめて専用メモリ領域３２１ｉとも記載する。
【００６８】
なお、１組の専用メモリ領域３２１ｉは、いずれか１つのタスク用であり、他のタスク用とならない点は、本発明の第１の実施の形態と同様である。また、複数のタスクのそれぞれに、異なる１組の異なる専用メモリ領域３２１ｉが関連付けられる場合、専用メモリ領域３２１Ｔｉおよび３２０Ｒｉは、タスクの個数分ずつ確保される。また、複数のタスクにいずれかのコア１１１が静的に割り当てられ、複数のコア１１１のそれぞれに、異なる１組の専用メモリ領域３２１ｉが関連付けられる場合、専用メモリ領域３２１Ｔｉおよび３２０Ｒｉは、複数のコア１１１の個数分ずつ確保される。
【００６９】
アクセラレータ処理管理装置３３０は、コード格納用メモリ１００４に格納されたプログラムのコードを実行することにより、例えば、図５に示すようなソフトウェア構成で各機能ブロックを実現する。図５において、アクセラレータ処理管理装置３３０により実行されるソフトウェアは、ＡＰＩライブラリと、ＡＰＩバッファマネージャとからなる。ＡＰＩライブラリは、コア１１１によって実行されるホストアプリケーションに、ＡＰＩ関数を提供する。また、ＡＰＩライブラリは、ＡＰＩ関数の呼び出しを契機に動作するＡＰＩドライバと、ＡＰＩドライバから呼び出されるデータリンクレイヤドライバとを含む。ＡＰＩバッファマネージャは、専用メモリ領域３２１ｉのデータをアクセラレータ２０との間で送受信するため、デバイス接続インタフェース１００５を制御するドライバへのインタフェースを含む。
【００７０】
この場合、呼び出しデータ列生成部３３２および処理結果出力部３３５は、ＡＰＩライブラリによって構成される。また、アクセラレータ選択転送部３３３および応答データ列受信部３３４は、ＡＰＩバッファマネージャによって構成される。ただし、アクセラレータ処理管理装置３３０が各機能ブロックを実現するソフトウェア構成は、上述の構成に限定されない。
【００７１】
次に、アクセラレータ処理管理装置３３０の各機能ブロックの詳細について説明する。
【００７２】
アクセラレータ使用状況記憶部３３１は、複数のアクセラレータ２０のそれぞれについて、タスクによる使用状況を表す使用状況情報として、次の情報を記憶する。すなわち、アクセラレータ使用状況記憶部３３１は、当該アクセラレータ２０が使用中である場合には、当該アクセラレータ２０に処理を要求したタスク用の専用メモリ領域３２１ｉの識別情報（バッファ番号ｉ）を記憶する。また、アクセラレータ使用状況記憶部３３１は、当該アクセラレータ２０が使用中でない場合には、使用中でないことを表す情報を記憶する。例えば、使用状況情報として、使用中の場合に前述のバッファ番号が適用される場合、使用中でないことを表す情報は、いずれの専用メモリ領域３２１ｉのバッファ番号にも該当しない値であればよい。例えば、ｎ組の専用メモリ領域３２１ｉに対して１〜ｎのバッファ番号が付与されている場合、使用中でないことを表す情報は、０で表されていてもよい。
【００７３】
呼び出しデータ列生成部３３２は、タスクからのアクセラレータ２０の呼び出し処理に応じて生成する呼び出しデータ列に、当該タスク用の専用メモリ領域３２１ｉの識別情報を含める。例えば、呼び出しデータ列は、当該タスク用の専用メモリ領域３２１ｉのバッファ番号ｉと、アクセラレータ２０へ処理を要求する要求コマンドと、要求コマンドのパラメータとを含んでいてもよい。
【００７４】
なお、当該タスク用の専用メモリ領域３２１ｉの識別情報は、タスクからの呼び出し処理を表す情報に含まれていてもよい。つまり、専用メモリ領域３２１ｉの識別情報を引数の一つとして指定するよう定義された呼び出し処理が、ＡＰＩ関数として提供されていてもよい。この場合、各タスクは、自身用の専用メモリ領域３２１ｉに付与されたバッファ番号ｉをＡＰＩ関数の引数に指定して、アクセラレータ処理を呼び出すことになる。
【００７５】
また、呼び出し処理に、複数の要求コマンドが含まれる場合も想定される。この場合、呼び出しデータ列生成部３３２は、それぞれの要求コマンドについて、呼び出しデータ列を生成する。
【００７６】
また、呼び出しデータ列生成部３３２は、生成した呼び出しデータ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域３２１Ｔｉに格納する。前述のように、呼び出し処理に、複数の要求コマンドが含まれるとする。この場合、呼び出しデータ列生成部３３２は、呼び出しデータ列を１つ専用メモリ領域３２１Ｔｉに格納し、当該呼び出しデータ列が転送された後、次の呼び出しデータ列を１つ専用メモリ領域３２１Ｔｉに格納することを繰り返せばよい。
【００７７】
アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔｉに呼び出しデータ列が格納されている場合、アクセラレータ使用状況記憶部３３１において、使用中でないことを表す情報（例えば、上述の０）に関連付けられたアクセラレータ２０の１つを選択する。そして、アクセラレータ選択転送部３３３は、アクセラレータ使用状況記憶部３３１において、選択したアクセラレータ２０の使用状況情報を、呼び出しデータ列が格納されている専用メモリ領域３２１Ｔｉのバッファ番号ｉに更新する。これにより、選択されたアクセラレータ２０の使用状況情報として、呼び出し元のタスク用の専用メモリ領域３２１ｉのバッファ番号ｉが格納されることになる。
【００７８】
また、アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔｉに格納された呼び出しデータ列を、選択したアクセラレータ２０に転送する。
【００７９】
応答データ列受信部３３４は、アクセラレータ２０から呼び出しデータ列の応答として受信した応答データ列を、呼び出し処理の呼び出し元のタスク用の専用メモリ領域３２１Ｒｉに格納する。また、応答データ列受信部３３４は、アクセラレータ使用状況記憶部３３１において、応答データ列の送信元のアクセラレータ２０の使用状況情報を、使用中でないことを表すよう更新する。
【００８０】
ここで、アクセラレータ２０からの応答データ列には、呼び出し元のタスク用の専用メモリ領域３２１ｉのバッファ番号ｉが含まれているものとする。すなわち、アクセラレータ２０は、呼び出しデータ列に含まれるバッファ番号ｉを、呼び出しデータ列に応答する応答データ列に含めるよう構成されることが前提である。例えば、応答データ列は、呼び出しデータ列に含まれていたバッファ番号ｉと、要求コマンドに応答する応答コマンドと、要求コマンドによる処理結果とを含んでいてもよい。
【００８１】
処理結果出力部３３５は、専用メモリ領域３２１ｉに格納された応答データ列に基づいて、呼び出し元のタスクに対して、呼び出し処理結果として正常応答であるか否かを出力する。ここで、呼び出し処理には、１つ以上の要求コマンドが含まれる。そこで、処理結果出力部３３５は、１つ以上の要求コマンドに対応する応答データ列のそれぞれに含まれる処理結果が全て正常を示す場合に、正常応答である旨を出力すればよい。また、処理結果出力部３３５は、１つ以上の要求コマンドに対応する応答データ列の少なくとも１つに含まれる処理結果が正常を示さない場合に、正常応答でない旨を出力すればよい。
【００８２】
以上のように構成されたアクセラレータ処理実行システム２の動作について、図面を参照して説明する。ここでは、前述のように、呼び出しデータ列生成部３３２および処理結果出力部３３５が、ＡＰＩライブラリによって構成されるとする。また、アクセラレータ選択転送部３３３および応答データ列受信部３３４が、ＡＰＩバッファマネージャによって構成されるとする。
【００８３】
まず、ＡＰＩライブラリの動作を図６に示す。
【００８４】
図６において、まず、呼び出しデータ列生成部３３２は、ＡＰＩ関数の呼び出しをトリガに、ＡＰＩ関数で定義された最初の要求コマンドについて処理を開始する（ステップＳ１０１）。
【００８５】
次に、呼び出しデータ列生成部３３２は、この要求コマンドを含む呼び出しデータ列を生成する（ステップＳ１０２）。
【００８６】
例えば、呼び出しデータ列は、呼び出し元のタスク用の専用メモリ領域３２１ｉのバッファ番号ｉ、要求コマンドのＩＤ、および、パラメータをそれぞれ表すデータ列からなる。
【００８７】
次に、呼び出しデータ列生成部３３２は、生成した呼び出しデータ列を、呼び出し元のタスク用の専用メモリ領域３２１Ｔｉに格納する（ステップＳ１０３）。
【００８８】
そして、専用メモリ領域３２１Ｔｉへの呼び出しデータ列の格納を契機に、ＡＰＩバッファマネージャが動作する。ＡＰＩバッファマネージャの動作については後述する。ＡＰＩバッファマネージャの動作により、専用メモリ領域３２１Ｔｉの呼び出しデータ列がいずれかのアクセラレータ２０に転送され、当該アクセラレータ２０から受信された応答データ列が専用メモリ領域３２１Ｒｉに格納される。
【００８９】
次に、処理結果出力部３３５は、応答データ列の受信がＡＰＩバッファマネージャから通知されたか否かを判断する（ステップＳ１０４）。通知されていない場合、ステップＳ１０４を繰り返すことにより、受信待ち状態となる。
【００９０】
次に、応答データ列の受信がＡＰＩバッファマネージャから通知されると（ステップＳ１０４でＹｅｓ）、処理結果出力部３３５は、通知された情報が示す専用メモリ領域３２１Ｒｉから、応答データ列を読み込む（ステップＳ１０５）。
【００９１】
次に、処理結果出力部３３５は、応答データ列に含まれる処理結果が正常であるか否かを判断する（ステップＳ１０６）。
【００９２】
ここで、処理結果が正常であると判断した場合（ステップＳ１０６でＹｅｓ）、処理結果出力部３３５は、実行中のＡＰＩ関数において定義された次の要求コマンドがあるか否かを判断する（ステップＳ１０７）。
【００９３】
ここで、次の要求コマンドがある場合（ステップＳ１０７でＹｅｓ）、呼び出しデータ列生成部３３２は、次の要求コマンドについて、処理を開始する（ステップＳ１０８）。
【００９４】
そして、呼び出しデータ列生成部３３２は、ステップＳ１０２からの処理を繰り返す。
【００９５】
一方、ステップＳ１０６において、処理結果が正常でないと判断された場合について説明する（ステップＳ１０６でＮｏ）。この場合、処理結果出力部３３５は、正常でないことを表す情報を、呼び出し元のタスクに出力して（ステップＳ１０９）、動作を終了する。
【００９６】
また、ステップＳ１０７において、次の要求コマンドがないと判断された場合について説明する（ステップＳ１０７でＮｏ）。この場合、処理結果出力部３３５は、処理結果が正常であることを表す情報を、呼び出し元のタスクに出力して（ステップＳ１１０）、動作を終了する。
【００９７】
以上で、ＡＰＩライブラリの動作の説明を終了する。
【００９８】
次に、ＡＰＩバッファマネージャが呼び出しデータ列を転送する動作を図７に示す。
【００９９】
図７において、まず、アクセラレータ選択転送部３３３は、バッファ番号を示すインデックスｉを初期化する（ステップＳ２０１）。例えば、ｎ個の専用メモリ領域３２１に、バッファ番号１〜ｎまでがそれぞれ付与されている場合、インデックスｉは、１に初期化される。
【０１００】
次に、アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔｉに、呼び出しデータ列が格納されているか否かを判断する（ステップＳ２０２）。
【０１０１】
ここで、専用メモリ領域３２１Ｔｉに呼び出しデータ列が格納されている場合、アクセラレータ選択転送部３３３は、アクセラレータ使用状況記憶部３３１を参照することにより、使用中でないアクセラレータ２０があるか否かを判断する（ステップＳ２０３）。
【０１０２】
ここで、使用中でないアクセラレータ２０がある場合、アクセラレータ選択転送部３３３は、使用中でないアクセラレータ２０を１つ選択する（ステップＳ２０４）。
【０１０３】
次に、アクセラレータ選択転送部３３３は、アクセラレータ使用状況記憶部３３１において、選択したアクセラレータ２０の使用状況情報を、バッファ番号ｉに更新する（ステップＳ２０５）。
【０１０４】
次に、アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔｉに格納された呼び出しデータ列を、選択したアクセラレータ２０に転送する（ステップＳ２０６）。
【０１０５】
具体的には、アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔｉの先頭ポインタアドレス、呼び出しデータ列のサイズおよび選択したアクセラレータ２０の識別情報を、デバイス接続インタフェースドライバに通知すればよい。これにより、選択したアクセラレータ２０に対し、専用メモリ領域３２１Ｔｉの呼び出しデータ列が送信される。
【０１０６】
一方、ステップＳ２０３において、使用中でないアクセラレータ２０が無いと判断された場合、アクセラレータ選択転送部３３３は、使用中でないアクセラレータ２０が有ると判断されるまで、ステップＳ２０３を繰り返す。
【０１０７】
また、ステップＳ２０６におけるアクセラレータ２０への転送処理が完了した場合、または、ステップＳ２０２において専用メモリ領域３２１Ｔｉに、呼び出しデータ列が格納されていないと判断された場合について説明する。
【０１０８】
この場合、アクセラレータ選択転送部３３３は、インデックスｉが、最大値ｎ以下か否かを判断する（ステップＳ２０７）。
【０１０９】
ここで、ｉがｎ以下であれば、アクセラレータ選択転送部３３３は、ｉを１だけインクリメントして、ステップＳ２０２からの処理を繰り返す。
【０１１０】
一方、ｉがｎを超えていれば（ステップＳ２０８でＮｏ）、アクセラレータ選択転送部３３３は、ステップＳ２０１からの処理を繰り返す。すなわち、インデックスｉが初期化されて、全ての専用メモリ領域３２１Ｔｉについて再度処理が繰り返される。
【０１１１】
以上で、ＡＰＩバッファマネージャが呼び出しデータ列を転送する動作の説明を終了する。
【０１１２】
次に、ＡＰＩバッファマネージャが応答データ列を受信する動作を図８に示す。
【０１１３】
まず、応答データ列受信部３３４は、アクセラレータ２０から受信された応答データ列を、その応答データ列に対応する呼び出し処理の呼び出し元のタスク用の専用メモリ領域３２１Ｒｉに格納する（ステップＳ３０１）。
【０１１４】
前述のようにアクセラレータ２０からの応答データ列は、呼び出し元のタスク用の専用メモリ領域３２１の識別情報であるバッファ番号ｉを含む。そこで、応答データ列受信部３３４は、アクセラレータ２０から受信された応答データ列を、その応答データ列に含まれるバッファ番号ｉに対応する専用メモリ領域３２１Ｒｉに格納すればよい。
【０１１５】
次に、応答データ列受信部３３４は、アクセラレータ使用状況記憶部３３１において、応答データ列に含まれるバッファ番号ｉが使用状況情報として記憶されたアクセラレータ２０を検索する。そして、応答データ列受信部３３４は、検索したアクセラレータ２０の当該使用状況情報を、使用中でないことを表す情報に更新する（ステップＳ３０２）。
【０１１６】
次に、応答データ列受信部３３４は、ＡＰＩライブラリに対して、専用メモリ領域３２１Ｒｉに応答データ列が受信されたことを通知する（ステップＳ３０３）。具体的には、応答データ列受信部３３４は、専用メモリ領域３２１Ｒｉの先頭アドレスを通知すればよい。これにより、ＡＰＩライブラリでは、図６のステップＳ１０５からの動作が実行される。
【０１１７】
以上で、アクセラレータ処理実行システム２の動作の説明を終了する。
【０１１８】
次に、アクセラレータ処理実行システム２の動作を具体例で示す。
【０１１９】
ここでは、ＡＰＩライブラリによって、アクセラレータ処理を呼び出すためのＡＰＩ関数として、ＡＰＩ＿Ｆｕｎｃ０１関数が定義されているものとする。ＡＰＩ＿Ｆｕｎｃ０１関数は、図９に例示する形式で関数呼び出しを行うよう定義されていることを想定する。すなわち、第一引数には、呼び出し元のタスク用のバッファ番号が指定される。この例では、バッファ番号１を表す「０ｘ０００１」が指定されている。また、第二引数には、ＡＰＩ＿Ｆｕｎｃ０１関数固有のパラメータの設定値が指定される。この例では、設定値として「０ｘ００００」が指定されている。また、ＡＰＩ＿Ｆｕｎｃ０１関数では、アクセラレータ２０に対して、複数の要求コマンドが送信されるシナリオが定義されている。ここでは、ＡＰＩ＿Ｆｕｎｃ０１関数は、要求コマンド０ｘ０００１および要求コマンド０ｘ００１１をアクセラレータ２０に順次送信するよう定義されているものとする。なお、コマンドＩＤが「ｘｘｘｘｘｘ」の要求コマンドを、「要求コマンドｘｘｘｘｘｘ」と記載している。
【０１２０】
また、ここでは、複数のアクセラレータ２０のそれぞれの識別情報は、「＃ｘ（ｘは正の整数）」と表されるものとする。また、識別情報が「＃ｘ」のアクセラレータ２０を、「アクセラレータ２０＃ｘ」とも記載する。
【０１２１】
また、ここでは、アクセラレータ使用状況記憶部３３１には、図１０に一例を示すように使用状況情報が格納されるものとする。この例では、アクセラレータ２０＃１の使用状況としては、バッファ番号２を専有するタスクにより使用中であることを表す「０ｘ０００２」が使用状況情報として格納されている。また、アクセラレータ２０＃２の使用状況としては、使用中でない０を表す「０ｘ００００」が使用状況情報として格納されている。
【０１２２】
また、ここでは、ホスト装置３０およびアクセラレータ２０を接続するデバイス接続インタフェース１００５および２００５は、ＳＰＩ（Serial Peripheral Interface）であるものとする。
【０１２３】
まず、ＡＰＩライブラリにおいて、呼び出しデータ列生成部３３２は、ＡＰＩ＿Ｆｕｎｃ０１関数の実行をトリガに、ＡＰＩ＿Ｆｕｎｃ０１関数のシナリオで定義された最初の要求コマンド０ｘ０００１について処理を開始する（図６のステップＳ１０１）。
【０１２４】
次に、呼び出しデータ列生成部３３２は、要求コマンド０ｘ０００１について呼び出しデータ列を生成する（ステップＳ１０２）。ここでは、生成される呼び出しデータ列は、図１１に示す通りとなる。
【０１２５】
次に、呼び出しデータ列生成部３３２は、生成した呼び出しデータ列を、ＡＰＩ＿Ｆｕｎｃ０１関数の第一引数で指定されたバッファ番号０ｘ０００１が示す専用メモリ領域３２１Ｔ１に格納する（ステップＳ１０３）。
【０１２６】
専用メモリ領域３２１Ｔ１に格納される情報は、図１２に示す通りとなる。
【０１２７】
そして、専用メモリ領域３２１Ｔ１への呼び出しデータ列の格納を契機に、ＡＰＩバッファマネージャが動作する。
【０１２８】
まず、アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔ１に、呼び出しデータ列が格納されていると判断する（ステップＳ２０１、Ｓ２０２でＹｅｓ）。
【０１２９】
次に、アクセラレータ選択転送部３３３は、アクセラレータ使用状況記憶部３３１を参照することにより、使用中でないアクセラレータ２０＃２を選択する（ステップＳ２０３でＹｅｓ、Ｓ２０４）。
【０１３０】
次に、アクセラレータ選択転送部３３３は、アクセラレータ使用状況記憶部３３１において、アクセラレータ２０＃２の使用状況情報を、使用中でないことを表す「０ｘ０００１」から、バッファ番号１を表す「０ｘ０００１」に更新する（ステップＳ２０５）。
【０１３１】
これにより、アクセラレータ使用状況記憶部３３１に格納される使用状況情報は、図１３に示した通りとなる。
【０１３２】
次に、アクセラレータ選択転送部３３３は、専用メモリ領域３２１Ｔ１の先頭ポインタアドレス、サイズおよび選択したアクセラレータ２０の識別情報「＃２」を、ＳＰＩドライバに通知する（ステップＳ２０６）。これにより、選択したアクセラレータ２０＃２に対し、専用メモリ領域３２１Ｔ１の呼び出しデータ列が送信される。
【０１３３】
そして、アクセラレータ２０＃２において、受信された呼び出しデータ列に含まれる命令コマンド０ｘ０００１に応じた処理が行われる。その結果、アクセラレータ２０＃２から、ホスト装置３０に対して、ＳＰＩを介して、応答データ列が返却される。この応答データ列は、呼び出し元のタスク用の専用メモリ領域３２１の識別情報であるバッファ番号１、応答コマンドのＩＤ、および、処理結果をそれぞれ表すデータ列を含む。ＳＰＩドライバは、ＡＰＩバッファマネージャに、応答データ列が受信されたことを割り込みにより通知する。
【０１３４】
そこで、応答データ列受信部３３４は、受信された応答データ列を、当該応答データ列に含まれるバッファ番号「０ｘ０００１」に対応する専用メモリ領域３２１Ｒ１に格納する。この具体例では、専用メモリ領域３２１Ｒ１に、図１４に示すような応答データ列が格納されたとする。
【０１３５】
次に、応答データ列受信部３３４は、アクセラレータ使用状況記憶部３３１において、応答データ列に含まれるバッファ番号「０ｘ０００１」が使用状況情報として関連付けられたアクセラレータ２０を検索する。ここでは、アクセラレータ２０＃２が検索される。そこで、応答データ列受信部３３４は、検索したアクセラレータ２０＃２の当該使用状況情報を、使用中でない０を表す「０ｘ００００」に更新する（ステップＳ３０２）。
【０１３６】
これにより、アクセラレータ使用状況記憶部３３１に格納される使用状況情報は、図１０に示した通りとなる。
【０１３７】
次に、応答データ列受信部３３４は、ＡＰＩライブラリに、専用メモリ領域３２１Ｒ１の先頭アドレスを通知する（ステップＳ３０３）。
【０１３８】
そこで、ＡＰＩライブラリにおいて、処理結果出力部３３５は、通知されたアドレスの専用メモリ領域３２１Ｒ１から、応答データ列を読み込む（ステップＳ１０５）。
【０１３９】
次に、処理結果出力部３３５は、応答データ列に基づいて、処理結果が正常であると判断したとする（ステップＳ１０６でＹｅｓ）。
【０１４０】
そこで、次に、処理結果出力部３３５は、実行中のＡＰＩ＿Ｆｕｎｃ０１関数において定義された次の要求コマンド０ｘ００１１があると判断する（ステップＳ１０７でＹｅｓ）。
【０１４１】
そこで、呼び出しデータ列生成部３３２は、次の要求コマンド０ｘ００１１について、処理を開始する（ステップＳ１０８）。
【０１４２】
そして、呼び出しデータ列生成部３３２は、ステップＳ１０２からの処理を繰り返す。
【０１４３】
命令コマンド０ｘ０００１の場合とほぼ同様に、ステップＳ１０２〜Ｓ１０３、Ｓ２０１〜Ｓ２０６、Ｓ３０１〜Ｓ３０３、Ｓ１０５が実行される。ここでは、命令コマンド０ｘ００１１に対する応答データ列の処理結果も、正常であったとする（ステップＳ１０６でＹｅｓ）。
【０１４４】
そして、次に、処理結果出力部３３５は、実行中のＡＰＩ＿Ｆｕｎｃ０１関数において定義された次の要求コマンドはないと判断する（ステップＳ１０７でＮｏ）。
【０１４５】
そこで、処理結果出力部３３５は、呼び出し元のタスクに、処理結果が正常応答であることを表す情報を出力する（ステップＳ１１０）。
【０１４６】
以上で、アクセラレータ処理実行システム２の動作の具体例の説明を終了する。
【０１４７】
次に、本発明の第２の実施の形態の効果について述べる。
【０１４８】
本発明の第２の実施の形態は、共有のリソースや複数のアクセラレータに対する排他制御や振り分け処理をアプリケーション側で考慮せずに、より効率的に、複数のコアで実行される複数のタスクにより並行してアクセラレータ処理を呼び出し可能にする。
【０１４９】
その理由について説明する。本実施の形態は、本発明の第１の実施の形態と同様の構成に加えて、次のように構成されるからである。すなわち、専用メモリ領域が、転送用の専用メモリ領域および応答用の専用メモリ領域からなる。そして、呼び出しデータ列生成部が、呼び出しデータ列を呼び出し元のタスク用の転送用の専用メモリ領域に格納する。そして、アクセラレータ選択転送部が、転送用の専用メモリ領域に呼び出しデータ列が格納されている場合に動作するからである。また、応答データ列受信部が、応答データ列を、呼び出し元のタスク用の応答用の専用メモリ領域に格納する。そして、処理結果出力部が、応答用の専用メモリ領域に格納された応答データ列に基づいて動作するからである。
【０１５０】
このように、本実施の形態は、転送用および応答用のいずれの専用メモリ領域にデータ列が格納されているかに応じて動作するため、リソースの排他制御を不要とする専用メモリ領域を、より効率的に利用することができる。
【０１５１】
さらなる理由について説明する。本実施の形態では、呼び出しデータ列生成部が、呼び出しデータ列に、呼び出し元のタスク用の専用メモリ領域の識別情報を含めて生成する。また、アクセラレータ選択転送部が、選択したアクセラレータの使用状況情報を、転送する呼び出しデータ列に含まれる専用メモリ領域の識別情報に更新することにより、使用中であることを表す。また、応答データ列受信部が、応答データ列に含まれる識別情報が示す専用メモリ領域に応答データ列を格納するとともに、当該識別情報が使用状況情報として格納されたアクセラレータの使用状況情報を、使用中でないことを表すよう更新するからである。
【０１５２】
これにより、各機能ブロックは、呼び出し処理の呼び出し元のタスクを、呼び出しデータ列、応答データ列、または、使用状況情報に含まれる専用メモリ領域の識別情報に基づいて容易に特定でき、効率的に動作を実行できる。
【０１５３】
その結果、本実施の形態は、並列して実行され得るタスク毎に、専用メモリ領域を経由してアクセラレータに処理を要求する際に、メモリに対するタスク間またはコア間での排他制御を不要とする処理を、より効率的に行うことができる。また、本実施の形態は、タスクからのアクセラレータ処理の呼び出し処理を、専用メモリ領域およびアクセラレータ使用状況記憶部を用いて、空いているアクセラレータに対して振り分ける処理を、より効率的に行うことができる。したがって、本実施の形態を用いれば、アプリケーション側では、リソースやアクセラレータに対する排他制御やアクセラレータの宛先を考慮したプログラミングが不要となる。
【０１５４】
次に、本発明の実施の形態の最小構成となるアクセラレータ処理管理装置１３０を、図１５に示す。図１５において、アクセラレータ処理管理装置１３０は、アクセラレータ使用状況記憶部１３１と、呼び出しデータ列生成部１３２と、アクセラレータ選択転送部１３３と、応答データ列受信部１３４と、処理結果出力部１３５とを含む。
【０１５５】
アクセラレータ処理管理装置１３０は、マルチコアプロセッサを有するホスト装置に含まれる。また、マルチコアプロセッサは、ホスト装置の外部の複数のアクセラレータに接続される。
【０１５６】
アクセラレータ処理管理装置１３０の各機能ブロックは、本発明の第１の実施の形態において説明したように構成され、図３を参照して説明したように動作する。
【０１５７】
これにより、本発明の実施の形態の最小構成となるアクセラレータ処理管理装置１３０は、複数のアクセラレータに接続されたマルチコアプロセッサを含むホスト装置に含まれることにより、次の効果を奏する。すなわち、アクセラレータ処理管理装置１３０は、複数のコアによって並列に実行され得る複数のタスクによる、並行したアクセラレータ処理の呼び出しを可能とする。しかも、アプリケーション側で、リソースおよびアクセラレータに対する排他制御や振り分け処理を考慮する必要がないという利点がある。
【０１５８】
また、本発明の実施の形態の他の最小構成となるホスト装置１０を、図１６に示す。図１６において、ホスト装置１０は、複数のコア１１１と、複数の専用メモリ領域１２１と、アクセラレータ処理管理装置１３０とを含む。また、ホスト装置１０は、外部の複数のアクセラレータに接続される。
【０１５９】
ホスト装置１０の各機能ブロックは、本発明の第１の実施の形態において説明したように構成される。そして、ホスト装置１０においてアクセラレータ処理管理装置１３０が、図３を参照して説明したように動作する。
【０１６０】
これにより、本発明の実施の形態の他の最小構成となるホスト装置１０は、複数のアクセラレータに接続された場合に、次の効果を奏する。すなわち、ホスト装置１０は、複数のコアによって並列に実行され得る複数のタスクによる、並行したアクセラレータ処理の呼び出しを可能とする。しかも、アプリケーション側で、リソースおよびアクセラレータに対する排他制御や振り分け処理を考慮する必要がないという利点がある。
【０１６１】
なお、上述した本発明の第２の実施の形態において、ホスト装置およびアクセラレータを接続するデバイス接続インタフェースとして、ＳＰＩを適用する例について説明したが、これに限られない。例えば、デバイス接続インタフェースは、ＰＣＩ（Peripheral Component Interconnect）等のシステムバスやＥｔｈｅｒｎｅｔ（登録商標）であってもよい。
【０１６２】
また、上述した本発明の各実施の形態において、専用メモリ領域を確保するメモリは、例えば、揮発性のＲＡＭ（Random Access Memory）等により構成してよい。
【０１６３】
また、上述した各実施の形態において、アクセラレータとしては、例えば、無線モジュールなどの特定用途向けＩＣ（Integrated Circuit）が適用可能であるが、これに限られない。例えば、アクセラレータとしては、ＤＳＰ（Digital Signal Processor）や、ＦＰＧＡ（field-programmable gate array）等が適用されてもよい。
【０１６４】
また、上述した本発明の各実施の形態において、アクセラレータ処理管理装置の各機能ブロックが、メモリに記憶されたプログラムを実行するプロセッサによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１６５】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したアクセラレータ処理管理装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１６６】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０１６７】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【０１６８】
１、２    アクセラレータ処理実行システム
１０、３０    ホスト装置
２０    アクセラレータ
１１０    マルチコアプロセッサ
１１１    コア
１２０、３２０    メモリ領域
１２１、３２１    専用メモリ領域
１３０、３３０    アクセラレータ処理管理装置
１３１、３３１    アクセラレータ使用状況記憶部
１３２、３３２    呼び出しデータ列生成部
１３３、３３３    アクセラレータ選択転送部
１３４、３３４    応答データ列受信部
１３５、３３５    処理結果出力部
２００１    プロセッサ
１００２、２００２    ＡＰＩメモリ
１００３、２００３    メモリコントローラ
１００４、２００４    コード格納用メモリ
１００５、２００５    デバイス接続インタフェース
２００６    ＩＰコアブロック
【図１】
2018120307.tif 000003
【図２】
2018120307.tif 000004
【図３】
2018120307.tif 000005
【図４】
2018120307.tif 000006
【図５】
2018120307.tif 000007
【図６】
2018120307.tif 000008
【図７】
2018120307.tif 000009
【図８】
2018120307.tif 000010
【図９】
2018120307.tif 000011
【図１０】
2018120307.tif 000012
【図１１】
2018120307.tif 000013
【図１２】
2018120307.tif 000014
【図１３】
2018120307.tif 000015
【図１４】
2018120307.tif 000016
【図１５】
2018120307.tif 000017
【図１６】
2018120307.tif 000018