(57)【要約】【課題】ホスト部とアクセラレータ部との負荷を均衡にし、データ転送によるオーバーヘッドが少ないデータ処理装置を提供する。【解決手段】本発明の一態様に係るデータ処理装置は、ホスト部と、アクセラレータ部とを備え、前記ホスト部は、前記ホスト部と前記アクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当手段と、前記データ割当手段の割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定手段と、前記データ割当手段が前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行う第１の処理手段と、を備え、前記アクセラレータ部は、前記データ範囲決定手段が決定した範囲のデータの集合に対し、データ処理を行う第２の処理手段を備える。【選択図】      図１６
2014222473.tif 000002
【特許請求の範囲】
【請求項１】
ホスト部と、アクセラレータ部とを備え、
前記ホスト部は、
前記ホスト部と前記アクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当手段と、
前記データ割当手段の割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定手段と、
前記データ割当手段が前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行う第１の処理手段と、を備え、
前記アクセラレータ部は、
前記データ範囲決定手段が決定した範囲のデータの集合に対し、データ処理を行う第２の処理手段を備えることを特徴とするデータ処理装置。
【請求項２】
前記データ範囲決定手段は、前記割当結果と、前記第２の処理手段がデータ処理に使用するデータとに基づき前記データの集合の範囲を決定する、ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記第１の処理手段および前記第２の処理手段は、複数のデータ処理の夫々を行う複数のサブ処理手段を夫々有し、
前記ホスト部および前記アクセラレータ部は、夫々、前記複数のサブ処理手段の少なくとも何れかの処理後のデータと依存関係を有するサブ処理手段の当該依存関係に基づき、前記ホスト部と前記アクセラレータ部との間で転送するデータの範囲を決定する第１の依存範囲決定手段と第２の依存範囲決定手段とを備え、
前記第１の処理手段における、前記依存関係を有するサブ処理手段は、前記データ割当手段が前記ホスト部に割り当てた前記入力データの集合と、前記第２の依存範囲決定手段が決定した範囲のデータとを用いてデータ処理を行い、
前記第２の処理手段における、前記依存関係を有するサブ処理手段は、前記データ範囲決定手段が決定した範囲のデータと、前記第１の依存範囲決定手段が決定した範囲のデータとを用いてデータ処理を行う、ことを特徴とする請求項１または２に記載のデータ処理装置。
【請求項４】
前記サブ処理手段が依存関係を有する処理後のデータは、当該サブ処理手段がデータ処理を行うデータに対応する入力データとは異なる入力データに対応する処理後のデータであることを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記ホスト部および前記アクセラレータ部は、夫々、受信したデータの種類によって、前記複数のサブ処理部のうち、何れのサブ処理手段でデータ処理を行うかを選択する処理選択手段を更に備えることを特徴とする請求項３または４に記載のデータ処理装置。
【請求項６】
前記データ割当手段は、前記第１の処理手段および前記第２の処理手段におけるデータ処理時間と、前記第１の処理手段および前記第２の処理手段で同時に実行可能なデータの数とに基づいて、前記入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てる、ことを特徴とする請求項１から５の何れか１項に記載のデータ処理装置。
【請求項７】
ホスト部とアクセラレータ部とを備えたデータ処理装置のデータ処理方法であって、
前記ホスト部と、前記アクセラレータ部との負荷が均衡するように、前記入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当て、
前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行い、
割当結果に基づき、前記アクセラレータ部に転送するデータの範囲を決定し、
前記決定した範囲のデータの集合に対し、データ処理を行う、ことを特徴とするデータ処理方法。
【請求項８】
アクセラレータに接続されたデータ処理制御装置であって、
該データ処理制御装置と連続して入力される入力データに対しデータ処理を行う前記アクセラレータとの負荷が均衡するように、前記入力データの集合を該データ処理制御装置と前記アクセラレータとに割り当てるデータ割当手段と、
前記データ割当手段の割当結果に基づき、前記アクセラレータに転送するデータの範囲を決定するデータ範囲決定手段と、
前記データ割当手段が該データ処理制御装置に割り当てた前記入力データの集合に対し、データ処理を行う処理手段と、を備えることを特徴とするデータ処理制御装置。
【請求項９】
ホスト部とアクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当処理と、
前記割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定処理と、
前記ホスト部に割り当てた前記入力データの集合に対するデータ処理を、前記ホスト部で行う第１の処理と、
前記決定された範囲のデータの集合に対するデータ処理を、前記アクセラレータ部で行う第２の処理と、をコンピュータに実行させることを特徴とするプログラム。
【請求項１０】
請求項９に記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置、データ処理方法、データ処理制御装置、プログラムおよび記録媒体に関する。
【背景技術】
【０００２】
データ処理の高速化を実現するために、データ処理装置に、アクセラレータを用いる場合がある。例えば、特許文献１には、並行して描画処理を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と描画アクセラレータとを備えた画像出力装置が記載されている。
【０００３】
また、特許文献２には、入力される画像フレームを分割したブロックごとに、一つ以上の画像処理を記述する画像データ形式に基づく画像処理を、マルチコアＣＰＵとＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、を含むプロセッサで並列して実行する画像処理装置が記載されている。
【０００４】
また、画像データに対して画像処理ユニットにより複数の処理を連続してかける際、メモリ部上で各処理に割り当てられた入出力バッファ間で画像を入出力して複数の処理を連続して行う画像処理装置が特許文献３に記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−２１１０５０号公報
【特許文献２】特開２０１１−１２８９０９号公報
【特許文献３】特開２０１２−１４２７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載の画像出力装置は、ＣＰＵと描画アクセラレータとの負荷が均衡せず、一方に処理が偏ってしまうという問題点がある。
【０００７】
また、特許文献２の技術では、次に説明するデータ転送処理のオーバーヘッドによって性能が低下するという問題点がある。一般に、アクセラレータは、データ処理装置に備えられたメモリとはメモリ空間が異なるメモリを備えている。そのため、アクセラレータは、データ処理装置の処理部を含むホスト部との間でデータ転送を行う。しかし、特許文献２に記載のデータ処理装置は、ＣＰＵとＧＰＵとが同じブロックに対して並列して画像処理を行っているため、ＣＰＵとＧＰＵとの間でデータを転送する必要がある。
【０００８】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、ホスト部とアクセラレータ部との負荷を均衡にし、データ転送によるオーバーヘッドが少ないデータ処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の一態様に係るデータ処理装置は、ホスト部と、アクセラレータ部とを備え、前記ホスト部は、前記ホスト部と前記アクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当手段と、前記データ割当手段の割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定手段と、前記データ割当手段が前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行う第１の処理手段と、を備え、前記アクセラレータ部は、前記データ範囲決定手段が決定した範囲のデータの集合に対し、データ処理を行う第２の処理手段を備える。
【００１０】
本発明の一態様に係るデータ処理方法は、ホスト部とアクセラレータ部とを備えたデータ処理装置のデータ処理方法であって、前記ホスト部と、前記アクセラレータ部との負荷が均衡するように、前記入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当て、前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行い、割当結果に基づき、前記アクセラレータ部に転送するデータの範囲を決定し、前記決定した範囲のデータの集合に対し、データ処理を行う。
【００１１】
本発明の一態様に係るデータ処理制御装置は、アクセラレータに接続されたデータ処理制御装置であって、該データ処理制御装置と連続して入力される入力データに対しデータ処理を行う前記アクセラレータとの負荷が均衡するように、前記入力データの集合を該データ処理制御装置と前記アクセラレータとに割り当てるデータ割当手段と、前記データ割当手段の割当結果に基づき、前記アクセラレータに転送するデータの範囲を決定するデータ範囲決定手段と、前記データ割当手段が該データ処理制御装置に割り当てた前記入力データの集合に対し、データ処理を行う処理手段と、を備える。
【００１２】
本発明の一態様に係るプログラムは、ホスト部とアクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当処理と、前記割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定処理と、前記ホスト部に割り当てた前記入力データの集合に対するデータ処理を、前記ホスト部で行う第１の処理と、前記決定された範囲のデータの集合に対するデータ処理を、前記アクセラレータ部で行う第２の処理と、をコンピュータに実行させる。
【発明の効果】
【００１３】
本発明の一実施形態に係るデータ処理装置は、ホスト部とアクセラレータ部との負荷を均衡にし、データ転送によるオーバーヘッドを少なくすることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施の形態に係るデータ処理装置のハードウェア構成を示す図である。
【図２】第１の実施の形態に係るデータ処理装置の機能構成を示す機能ブロック図である。
【図３】ホスト部の処理部およびアクセラレータ部の処理部がデータ処理する入力データの一例を説明するための図である。
【図４】ホスト部の処理部およびアクセラレータ部の処理部がデータ処理する入力データの他の例を説明するための図である。
【図５】第１の実施の形態に係るデータ処理装置の動作の流れを示すフローチャートである。
【図６】第１の実施の形態に係るデータ処理装置の効果の一例を説明するためのイメージ図である。
【図７】変形例に係るデータ処理装置の機能構成を示す機能ブロック図である。
【図８】ホスト部の処理部およびアクセラレータ部の処理部がデータ処理する入力データの一例を説明するための図である。
【図９】第２の実施の形態に係るデータ処理装置の機能構成を示す機能ブロック図である。
【図１０】第２の実施の形態に係るデータ処理装置の動作の流れを示すフローチャートである。
【図１１】ホスト部の処理部およびアクセラレータ部の処理部がデータ処理する入力データの一例を説明するための図である。
【図１２】第２の実施の形態に係るデータ処理装置の効果の一例を説明するためのイメージ図である。
【図１３】第３の実施の形態に係るデータ処理装置の機能構成を示す機能ブロック図である。
【図１４】第３の実施の形態に係るデータ処理装置のホスト部の動作の流れを示すフローチャートである。
【図１５】第３の実施の形態に係るデータ処理装置のアクセラレータ部の動作の流れを示すフローチャートである。
【図１６】第４の実施の形態に係るデータ処理装置の機能構成を示す機能ブロック図である。
【図１７】実施例に係る計算機システムの機能構成を示す機能ブロック図である。
【図１８】ホスト部の処理部およびアクセラレータ部の処理部が画像処理する入力フレームの一例を説明するための図である。
【図１９】ホスト部およびアクセラレータの夫々のコア数および処理時間を示す図である。
【図２０】割当フレームと当該割当フレームの画像処理後のフレームのイメージを示す図である。
【図２１】フレーム割当部における入力フレームの割当の一例を示す図である。
【図２２】ホスト部およびアクセラレータにおける時間軸に対する画像処理の動作を示すイメージ図である。
【図２３】フレーム割当部における入力フレームの割当の他の例を示す図である。
【発明を実施するための形態】
【００１５】
＜実施の形態１＞
以下に、本発明の第１の実施の形態について、図面を参照して詳細に説明する。
【００１６】
（データ処理装置の構成）
図１は、本発明の一実施の形態に係るデータ処理装置のハードウェア構成を示す図である。
【００１７】
図１に示すように、データ処理装置１は、メインＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０、メインメモリ１２０、ＣＰＵ１３０、メモリ１４０、通信Ｉ／Ｆ（通信インタフェース）１５０および通信Ｉ／Ｆ１６０を備えている。
【００１８】
メインＣＰＵ１１０は、データ処理装置１の全体を制御する。メインメモリ１２０は、メインＣＰＵ１１０が直接的に使用する記憶装置である。メインメモリ１２０は、例えば、光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク、又は半導体メモリ等である。記憶装置の一部の記録媒体は、不揮発性記憶装置であり、そこにプログラムを記録する。また、プログラムは、通信網に接続されている図示しない外部コンピュータからダウンロードされてもよい。
【００１９】
メインＣＰＵ１１０、メインメモリ１２０および通信Ｉ／Ｆ１５０は、内部バス１８０を介して接続している。メインＣＰＵ１１０、メインメモリ１２０および通信Ｉ／Ｆ１５０により、ホスト部２０が構成される。
【００２０】
ＣＰＵ１３０は、アクセラレータ部３０を制御する。メモリ１４０は、ＣＰＵ１３０が直接的に使用する記憶装置である。メモリ１４０は、例えば、半導体メモリ等である。記憶装置の一部の記録媒体は、不揮発性記憶装置であり、そこにプログラムを記録する。また、プログラムは、通信網に接続されている図示しない外部コンピュータからダウンロードされてもよい。
【００２１】
ＣＰＵ１３０、メモリ１４０および通信Ｉ／Ｆ１６０は、内部バス１９０を介して接続している。ＣＰＵ１３０、メモリ１４０および通信Ｉ／Ｆ１６０により、アクセラレータ部３０が構成される。
【００２２】
ホスト部２０の通信Ｉ／Ｆ１５０と、アクセラレータ部３０の通信Ｉ／Ｆ１６０とは、外部バス９０を介して接続している。
【００２３】
なお、図１に示すデータ処理装置１は、１つのアクセラレータ部を備えた構成であるが、本発明はこれに限定されるものではなく、複数のアクセラレータ部を備える構成であってもよい。また、図１に示すデータ処理装置１は、本発明に特有な構成について表現したものであり、データ処理装置１が、例えば、入出力装置など、図１に示されていない構成を有していてもよいことは言うまでもない。
【００２４】
また、本実施の形態では、アクセラレータ部３０が、データ処理装置１に内蔵される構成について説明を行うが、本発明はこれに限定されるものではない。アクセラレータ部３０は、データ処理装置１に外付けされる構成であってもよい。
【００２５】
なお、以下の実施の形態において、ホスト部２０およびアクセラレータ部３０の夫々を特定せずに、ホスト部２０およびアクセラレータ部３０の何れかを指す場合、単に「ノード」と呼ぶ場合もある。また、以下では、ホスト部２０をデータ処理制御装置と呼び、アクセラレータ部３０をアクセラレータと呼ぶ場合もある。
【００２６】
次に、データ処理装置１の機能について、図２を参照して説明する。図２は、本実施の形態に係るデータ処理装置１の機能構成を示す機能ブロック図である。図２に示すとおり、データ処理装置１は、ホスト部２０とアクセラレータ部３０とを備えている。
【００２７】
（ホスト部２０の構成）
図２に示すとおり、データ処理装置１のホスト部２０は、入力部２１、データ割当部２２、データ範囲決定部２３、入力データ送信部２４、処理部２５、出力データ受信部２６および出力部２７を備えている。
【００２８】
入力部２１は、データ処理装置１に入力された入力データを読み込む。入力データは、データ処理装置１に連続して入力される。入力データの例としては、例えば、画像データなどが挙げられるが、これに限定されるものではない。入力部２１は、データ処理装置１の外部から入力データを受け取ってもよい。または、入力部２１は、データ処理装置１の内部の記憶装置等（図示しない）から入力データを読み出してもよい。入力部２１は、入力データを読み込むと、読み込んだことをデータ割当部２２に通知する。なお、入力部２１は、読み込んだ入力データをデータ割当部２２に供給してもよい。また、入力部２１は、読み込んだ入力データを記憶装置（例えば、メインメモリ１２０）に記録してもよい。
【００２９】
データ割当部２２は、入力部２１が入力データを読み込んだことを示す通知を入力部２１から受け取ると、入力部２１が読み込んだ入力データを、ホスト部２０とアクセラレータ部３０とに割り当てる。具体的には、データ割当部２２は、ホスト部２０とアクセラレータ部３０との負荷が均衡するように、入力データの集合をホスト部２０とアクセラレータ部３０とに割り当てる。データ割当部２２は、入力データの集合をホスト部２０に割り当てた結果（割当結果）を、処理部２５に通知する。また、データ割当部２２は、アクセラレータ部３０に割り当てた割当結果を、データ範囲決定部２３に通知する。
【００３０】
なお、データ割当部２２は、割当結果を図示しない記憶装置に記録してもよい。また、データ割当部２２は、各ノードに割り当てた割当結果とともに、入力部２１が読み込んだ入力データを処理部２５およびデータ範囲決定部２３に供給してもよい。
【００３１】
データ範囲決定部２３は、データ割当部２２の割当結果に基づき、アクセラレータ部３０に転送する入力データの集合の範囲を決定する。データ範囲決定部２３は、決定した入力データの集合の範囲を入力データ送信部２４に通知する。なお、データ範囲決定部２３は、決定した範囲の入力データの集合を、入力データ送信部２４に供給してもよい。
【００３２】
入力データ送信部２４は、データ範囲決定部２３が決定した範囲の入力データの集合をアクセラレータ部３０に転送する。
【００３３】
処理部２５は、データ割当部２２の割当結果に基づき、ホスト部２０に割り当てられた入力データの集合に対して、データ処理を行う。処理部２５は、図２に示すように、１または複数のデータ処理の夫々を行う１または複数のサブ処理部（処理部（１）、処理部（２）、・・・、処理部（Ｎ））を有している。本実施の形態においては、処理部２５は、Ｎ個のサブ処理部を有しているとするが、これに限定されるものではない。
【００３４】
出力データ受信部２６は、アクセラレータ部３０から送信されたデータであって、アクセラレータ部３０がデータ処理を行ったデータを受信する。出力データ受信部２６は、受信したデータを出力部２７に供給する。
【００３５】
出力部２７は、ホスト部２０の処理部２５がデータ処理を行ったデータと、アクセラレータ部３０から受信したデータとを、出力データとして出力する。出力部２７は、例えば、入力データに対応する順番で出力データを出力することが好ましい。
【００３６】
（アクセラレータ部３０の構成）
図２に示すとおり、データ処理装置１のアクセラレータ部３０は、入力データ受信部３４、処理部３５および出力データ送信部３６を備えている。
【００３７】
入力データ受信部３４は、ホスト部２０から転送された入力データの集合を受信する。入力データ受信部３４は、受信した入力データの集合を処理部３５に供給する。
【００３８】
処理部３５は、入力データ受信部３４から供給された入力データの集合に対して、データ処理を行う。処理部３５は、上述した処理部２５と同様に、１または複数のサブ処理部を有している。本実施の形態においては、処理部３５は、Ｎ個のサブ処理部を有しているとするが、これに限定されるものではない。
【００３９】
出力データ送信部３６は、処理部３５がデータ処理を行ったデータを、ホスト部２０に送信する。
【００４０】
以降、処理部２５および処理部３５が備える複数のサブ処理部を、図２に示すとおり、処理部（１）、処理部（２）、・・・、処理部（Ｎ）と表現する。また、処理部２５の処理部（１）を、処理部２５（１）と示し、処理部３５の処理部（１）を処理部３５（１）と示す。また、例えば、処理部２５の処理部（１）と処理部３５の処理部（１）の夫々を特定しない場合、単に処理部（１）と示す。
【００４１】
（入力データの処理について）
次に、図３および図４を参照して、処理部２５および処理部３５のデータ処理に使用する入力データについて説明を行う。図３および図４は、処理部２５および処理部３５がデータ処理する入力データの一例を説明するための図である。
【００４２】
図３に示すとおり、本実施の形態では、処理部２５および処理部３５は、入力データ毎に独立して、データ処理を行うことができるとする。つまり、入力データｉに対し、処理部２５および処理部３５のサブ処理部（処理部（１）、処理部（２）、・・・、処理部（Ｎ））の各々は、入力データｉに対する各サブ処理部の結果を使用し、入力データｉ以外に対する各サブ処理部の結果を使用しない。このように、各サブ処理部は、当該サブ処理部がデータ処理する入力データとは異なる入力データをデータ処理するサブ処理部の処理後のデータの何れに対しても、依存関係を有していない。したがって、各サブ処理部は、各入力データに対して並列にデータ処理を実行することができる。
【００４３】
また、本実施の形態における入力データは、図４に示すように、処理部２５および処理部３５の各サブ処理部のうち、最初のサブ処理部（処理部（１））のみが、二つの入力データを使用する構成であってもよい。図４に示すように、処理部（１）が入力データｉに対するデータ処理を行うとき、処理部（１）は、入力データｉと入力データｉ−１とを使用する。また、その他のサブ処理部（処理部（２）、・・・、処理部（Ｎ））は、入力データｉに対する各サブ処理部の結果のみを使用している。このように、本実施の形態においては、最初のサブ処理部で、複数の入力データを用いた場合であっても、その他の各サブ処理部が、当該サブ処理部がデータ処理する入力データとは異なる入力データをデータ処理するサブ処理部の処理後のデータの何れに対しても、依存関係を有していない構成である。
【００４４】
（データ処理装置の動作）
次に、図５を参照して、本実施の形態に係るデータ処理装置１の動作について説明する。図５は、本実施の形態に係るデータ処理装置１の動作の流れを示すフローチャートである。なお、ホスト部２０の動作の流れを図５の左側に示し、アクセラレータ部３０の動作の流れを図５の右側に示している。
【００４５】
まず、ホスト部２０の入力部２１が、データ処理装置１に入力された入力データを読み込む（Ｓ５１）。その後、データ割当部２２は、入力データを読み込んだことを示す通知を入力部２１から受け取ると、入力部２１が所定の数の入力データを読み込んだか否かを確認する（Ｓ５２）。
【００４６】
所定の数の入力データが読み込まれていない場合（Ｓ５２にてＮＯ）、Ｓ５１に戻り、入力部２１は、再び入力データを読み込む。
【００４７】
所定の数の入力データが読み込まれた場合（Ｓ５２にてＹＥＳ）、データ割当部２２は、読み込まれた入力データの集合から、ホスト部２０とアクセラレータ部３０とに割り当てる入力データの数を決定する（Ｓ５３）。上記所定の数の入力データを各ノードに割り当てる際の、各ノードにおける入力データの数は、各ノードの処理の負荷を考慮して、各ノードの負荷が均衡するように決定する。各ノードの負荷が均衡しない場合、何れかのノードに処理を実行しない空き時間が発生する可能性がある。そのため、負荷が均衡するように入力データを割り当てることにより、負荷が均衡しない場合に比べ、処理性能が向上する。
【００４８】
一般には、アクセラレータ部３０のほうが、ホスト部２０より高い演算性能を持つ。したがって、ホスト部２０より、アクセラレータ部３０に、より多数の入力データを割り当てることが好ましい。データ割当部２２は、例えば、各ノードにおける、各サブ処理部の処理時間、各ノードのプロセッサのコア数等を考慮して、各ノードにおける処理の負荷が均衡するように、入力データを割り当ててもよい。データ割当部２２は、入力データをホスト部２０とアクセラレータ部３０とに割り当てると、当該割当結果をデータ範囲決定部２３と処理部２５とに通知する。
【００４９】
その後、データ範囲決定部２３は、割当結果と、アクセラレータ部３０の処理部３５がデータ処理に使用するデータとに基づき、アクセラレータ部３０に転送する入力データの集合の範囲を決定する（Ｓ５４）。処理部３５の各サブ処理部が、図４に示すように、１つの入力データのみを必要とする場合、アクセラレータ部３０に割り当てられた入力データの集合の範囲が、転送する入力データの集合の範囲となる。
【００５０】
一方、図５に示すように、処理部３５の処理部（１）が２つの入力データを使用する場合、データ範囲決定部２３は、処理部３５がデータ処理に使用する入力データに基づいて、転送する入力データの集合の範囲を決定する。図５の例では、処理部３５は、入力データｉに対するデータ処理を実行する際に、入力データｉと入力データｉ−１とを使用する。したがって、例えば、データ割当部２２がアクセラレータ部３０に割り当てた入力データの集合が、入力データｉ〜入力データｊである場合、データ範囲決定部２３は、転送する入力データの集合の範囲を、入力データｉ−１〜入力データｊの範囲であると決定する。そして、データ範囲決定部２３は、決定した入力データの集合の範囲を入力データ送信部２４に通知する。
【００５１】
その後、入力データ送信部２４は、データ範囲決定部２３が決定した範囲の入力データの集合をアクセラレータ部３０に転送する（Ｓ５５）。
【００５２】
アクセラレータ部３０の入力データ受信部３４は、ホスト部２０から転送された入力データの集合を受信し（Ｓ６１）、受信した入力データの集合を処理部３５に供給する。
【００５３】
そして、ホスト部２０の処理部２５は、データ割当部２２から入力データの集合の割当結果を受け取ると、処理部（１）の処理（処理１）から処理部（Ｎ）の処理（処理Ｎ）を実行する（Ｓ５６〜Ｓ５７）。
【００５４】
一方、アクセラレータ部３０の処理部３５は、処理１から処理Ｎを実行する（Ｓ６２〜Ｓ６３）。
【００５５】
ここで、各サブ処理部の動作について説明する。処理部（１）は、各ノードに割り当てられた入力データの集合に対して処理１を実行する。このとき処理部（１）は、各ノード上の複数のプロセッサコア（以下、単に「コア」とも呼ぶ）を利用し、入力データの集合に含まれる各入力データに対して並列にデータ処理することが好ましい。なお、各入力データに対する処理１内で、入力データを分割して並列にデータ処理するなどの階層的な並列化を行ってもよい。
【００５６】
そして、処理部（１）は、処理１が終了すると、当該処理１が終了したことを処理部（２）に通知する。なお、処理部（１）は、データ割当部２２がホスト部２０およびアクセラレータ部３０に割り当てた入力データの集合に含まれる、全ての入力データに対して、処理１が終了した後に、処理１の終了を処理部（２）に通知してもよい。
【００５７】
また、処理部（１）は、上記入力データの集合に含まれる入力データの各々に対して処理１が終了する度に、処理１の終了を処理部（２）に通知してもよい。これにより、処理部（２）は、上記入力データの集合に含まれる全ての入力データに対する処理１の終了を待つことなく、処理２を開始できる。このような処理を行うことができるのは、上述したとおり、あるサブ処理部がデータ処理するデータとは異なるデータをデータ処理するサブ処理部の処理後のデータの何れに対しても、依存関係を有していないからである。
【００５８】
なお、上記通知には、処理部（１）の処理後のデータ（中間データ１と呼ぶ）を含むデータであって、処理部（２）がデータ処理を行う際に使用するデータが含まれていてもよい。また、処理部（１）は、処理部（２）に対し、処理後のデータを示す情報（例えば、番号など）を通知し、処理部（２）がデータ処理を行う際に使用するデータを別の手段で供給してもよい。
【００５９】
その後、処理部（２）は、入力データの集合に含まれる入力データの各々に対し、処理２を行い後続のサブ処理部に通知する。そして、処理Ｎが終了すると、処理部２５は、処理が全て終了したことを、出力部２７に通知する。また、処理部３５は、処理が全て終了したことを、出力データ送信部３６に通知する。
【００６０】
その後、出力データ送信部３６は、処理部３５のデータ処理後のデータの集合を、ホスト部２０に送信する（Ｓ６４）。
【００６１】
ホスト部２０の出力データ受信部２６は、アクセラレータ部３０から出力データを受信すると（Ｓ５８）、出力部２７に供給する。出力部２７は、処理部２５の処理後のデータと、アクセラレータ部３０から送信された処理後のデータとを出力データとして出力する（Ｓ５９）。なお、出力部２７は、典型的には、入力データに対応する順番で出力データを出力することが好ましい。
【００６２】
なお、図５では、Ｓ５４およびＳ５５の後に、処理部２５の処理（Ｓ５６、Ｓ５）を実行するとしているが、本発明はこれに限定されるものではない。ホスト部２０が複数のコアを備える場合、Ｓ５４と同時に処理部２５の処理（Ｓ５６）を実行してもよい。また、ホスト部２０が複数のコアを備えない場合、時分割処理により、Ｓ５４とＳ５６とを並列して行ってもよい。
【００６３】
（効果）
図６を参照して、本実施の形態に係るデータ処理装置１の効果について説明する。図６は、本実施の形態に係るデータ処理装置１の効果の一例を説明するためのイメージ図である。図６において、横軸は時間を示している。図６に示す例では、所定の数の入力データの数を（ｍ＋ｎ）個とし、（ｍ＋ｎ）個の入力データを１つの集合としている。そして、データ割当部２２が、ホスト部２０に対し、ｍ個の入力データを割り当て、アクセラレータ部３０に対し、ｎ個の入力データを割り当てているとする。ｍおよびｎは、各ノードの負荷が均衡するように決定されている。具体的には、各ノード上の処理部２５および処理部３５の処理時間が均衡するように決定されている。また、処理部２５および処理部３５は、２つのサブ処理部（処理部（１）、処理部（２））を有しているとする。
【００６４】
図６に示すように、ホスト部２０とアクセラレータ部３０とは、処理時間が均衡しており、両ノードにおける空き時間は少なくなっている。
【００６５】
以上のように、本実施の形態に係るデータ処理装置１において、ホスト部２０のデータ割当部２２が、両ノードの負荷が均衡するように連続して当該データ処理装置１に入力される入力データを割り当てる。そして、ホスト部２０の処理部２５は、入力データのうち、データ割当部２２がホスト部２０に割り当てた入力データのデータ処理を行う。一方、アクセラレータ部３０の処理部３５は、データ割当部２２がアクセラレータ部３０に割り当てた結果および当該処理部３５がデータ処理に使用するデータに基づいてデータ範囲決定部２３が決定した範囲の入力データの集合に対し、データ処理を行う。
【００６６】
このように、本実施の形態に係るデータ処理装置１は、データ割当部２２が両ノードの負荷が均衡するように入力データを割り当てるため、各ノードのプロセッサの空き時間を少なくすることができるという効果がある。
【００６７】
また、処理部２５および処理部３５は、異なる入力データに対してデータ処理を行う。したがって、各ノード間のデータ転送は、処理部３５に入力する際と、処理部３５の処理後のデータをホスト部２０に受信する際のみ行われる。つまり、サブ処理部毎に処理後のデータの転送は不要である。このため、データ転送によるオーバーヘッドを低く抑えられるという効果がある。したがって、本実施の形態に係るデータ処理装置１は、データ処理を高速に行うことができる。
【００６８】
（変形例）
次に、図７を参照して、本実施の形態の変形例について説明を行う。図７は、本実施の形態の変形例に係るデータ処理装置１の機能構成を示した機能ブロック図である。なお、説明の便宜上、図２に示すデータ処理装置１に含まれる部材と同じ機能を有する部材については、同じ符号を付し、その説明を省略する。
【００６９】
図７に示すとおり、本変形例に係るデータ処理装置１のホスト部２０は、入力部２１、データ割当部２２、データ範囲決定部２３、入力データ送信部２４、出力データ受信部２６、出力部２７および処理部４５を備えている。また、本変形例に係るデータ処理装置１のアクセラレータ部３０は、入力データ受信部３４、出力データ送信部３６および処理部５５を備えている。なお、本変形例に係るデータ処理装置１のハードウェア構成は、図１に示すデータ処理装置１のハードウェア構成と同様である。
【００７０】
図７に示すデータ処理装置１が、図２に示すデータ処理装置１と異なる点は、処理部（１）がホスト部２０のみに含まれる点である。
【００７１】
入力部２１は、読み込んだ入力データを処理部４５の処理部（１）に供給する。処理部（１）は、処理１を行い、処理１の終了後、当該処理１が終了したこと、データ割当部２２に通知する。その後、データ割当部２２は、上記通知を受け取ると、ホスト部２０とアクセラレータ部３０とに、入力データを割り当てる。このとき、データ割当部２２は、処理１がホスト部２０で実行されていることを考慮し、ホスト部２０とアクセラレータ部３０との負荷が均衡するように、入力データを、ホスト部２０とアクセラレータ部３０とに割り当てる。具体的には、データ割当部２２は、アクセラレータ部３０に割り当てられる入力データの数が、処理１が両ノードで行われる場合にアクセラレータ部３０に割り当てられる入力データの数に比べ、多くなるように割り当てる。
【００７２】
そして、データ範囲決定部２３は、割当結果と、アクセラレータ部３０の処理部５５がデータ処理に使用するデータとに基づき、アクセラレータ部３０に転送するデータの集合の範囲を決定する。つまり、データ範囲決定部２３は、処理１がホスト部２０のみで実行されることを考慮し、アクセラレータ部３０に転送するデータの集合の範囲を、入力データおよび処理部（１）の処理後のデータ（中間データ１）の中から決定する。例えば、アクセラレータ部３０の処理部５５の処理部（２）以降のデータ処理において、入力データを用いない場合、データ範囲決定部２３は、当該入力データを転送しないように、転送するデータの範囲を決定する。
【００７３】
そして、入力データ送信部２４は、データ範囲決定部２３が決定した範囲のデータをアクセラレータ部３０に転送する。
【００７４】
アクセラレータ部３０の入力データ受信部３４は、受信したデータの集合を処理部５５に供給する。処理部５５は、処理部（１）でのデータ処理が、既にホスト部２０で行われているため、処理部（２）以降のデータ処理を行う。
【００７５】
以上により、処理部（１）がホスト部２０上にのみ含まれる機能を利用する場合など、処理部（１）がホスト部２０上でしか実行できない場合にも、本変形例に係るデータ処理装置１を適用できるという効果がある。
【００７６】
なお、処理部（１）での実行時間が、全体の実行時間と比較して極めて短く、ホスト部２０およびアクセラレータ部３０の負荷のばらつきが無視できるほどである場合、処理部（１）がホスト部２０でのみ実行されることを考慮しなくてもよい。
【００７７】
また、図７に示すデータ処理装置１は、処理部（１）の処理１をホスト部２０のみで実行する構成であることを例に説明を行ったが、本発明はこれに限定されるものではない。本変形例に係るデータ処理装置１は、他のサブ処理部のデータ処理をホスト部２０のみで実行する構成であってもよい。また、本変形例に係るデータ処理装置１は、複数のサブ処理部のデータ処理をホスト部２０のみで実行する構成であってもよい。さらに、本変形例に係るデータ処理装置１は、任意の数のサブ処理部のデータ処理をアクセラレータ部３０のみで実行する構成であってもよい。
【００７８】
また、データ割当部２２は、ホスト部２０とアクセラレータ部３０とに割り当てる入力データの数を、サブ処理部ごとに変更してもよい。これは、各サブ処理部によって、ホスト部２０とアクセラレータ部３０との実行時間の比率が変わる場合などに、より柔軟に負荷の均衡が図れるという効果がある。一方で、ホスト部２０とアクセラレータ部３０とに割り当てる入力データの数が変わる際には、ホスト部２０とアクセラレータ部３０との間でデータ転送を行うことに注意する。この場合、データ処理装置１は、割り当てるデータの数が変わる前後の各サブ処理部の間に、データ範囲決定部２３と入力データ送信部２４とを備える。
【００７９】
なお、複数のサブ処理部の各々のデータ処理を、ホスト部２０およびアクセラレータ部３０の何れか一方に、全て行うように構成することは、好ましくない。例えば、処理部（１）〜処理部（３）の処理は、ホスト部２０のみで行い、処理部（４）〜処理部（Ｎ）の処理は、アクセラレータ部３０のみで行うように構成することは、好ましくない。なぜならば、この場合、各ノードが異なるデータ処理を実行することになるからである。したがって、入力データをホスト部２０とアクセラレータ部３０とに割り当てても、ホスト部２０とアクセラレータ部３０との間の負荷を均衡することができなくなる。また、各ノードが実行する各サブ処理部の処理時間が均衡しない場合に、何れかのノードで空き時間が発生し、両ノードの性能を最大限に利用することができなくなる。
【００８０】
＜実施の形態２＞
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。本実施の形態では、前述の第１の実施の形態と同様に、データ処理装置が１つのアクセラレータ部を備えた構成について説明するが、本発明はこれに限定されるものではなく、複数のアクセラレータ部を備える構成であってもよい。なお、説明の便宜上、前述した第１の実施の形態で説明した図面に記載のデータ処理装置１に含まれる部材と同じ機能を有する部材については、同じ符号を付し、その説明を省略する。
【００８１】
（入力データの処理について）
まず、図８を参照して、処理部２５および処理部３５のデータ処理に使用する入力データについて説明を行う。図８は、処理部２５および処理部３５がデータ処理する入力データの一例を説明するための図である。なお、本実施の形態においては、処理部２５および処理部３５は、Ｎ個のサブ処理部を有しているとするが、これに限定されるものではない。
【００８２】
図８に示すとおり、本実施の形態では、処理部（２）は、以下の（ａ）および（ｂ）を利用する。
（ａ）処理部２５および処理部３５がデータ処理する対象の入力データ（例えば、入力データｉ）（処理対象データとも呼ぶ）に対する処理部（１）の処理後のデータ。
（ｂ）処理対象データに先行する入力データ（例えば、入力データｉ−１）（先行データとも呼ぶ）の処理１の処理後のデータ。
【００８３】
つまり、処理部（２）は、以下の（ｉ）および（ｉｉ）に対して、依存関係を有している。
（ｉ）当該処理部（２）の処理対象データに対する処理部（１）の処理後のデータ。
（ｉｉ）当該処理部（２）の処理対象データとは異なる入力データであって、当該処理対象データに先行する入力データに対する処理部（１）の処理後のデータ。
【００８４】
以降、処理部（１）の入力データｉに対する処理後のデータを中間データ１（ｉ）と呼び、処理部（１）の入力データｉ−１に対する処理後のデータを中間データ１（ｉ−１）と呼ぶ。
【００８５】
説明の便宜上、図８では、処理対象データの中間データと、処理対象データに先行する１つ先行データの中間データとに対する処理部（２）の依存関係を矢印で示しているが、本発明はこれに限定されるものではない。処理部（２）は、複数の先行データの中間データに対して、依存関係を有していてもよい。
【００８６】
また、処理部（２）に依存関係を有する中間データの数が、当該処理部（２）がデータ処理する処理対象データ毎に異なっていてもよい。また、処理部（２）以外のサブ処理部が、先行データの中間データに対して、依存関係を有していてもよい。また、各サブ処理部は、各データ処理の実行中に、依存する中間データの数を変更してもよい。
【００８７】
（データ処理装置の構成）
次に、図９を参照して、本実施の形態に係るデータ処理装置１の機能について、説明する。図９は、本実施の形態に係るデータ処理装置１の機能構成を示した機能ブロック図である。図９に示すとおり、データ処理装置１は、ホスト部２０とアクセラレータ部３０とを備えている。
【００８８】
ホスト部２０は、入力部２１、データ割当部２２、データ範囲決定部２３、入力データ送信部２４、処理部２５、出力データ受信部２６、出力部２７、依存範囲決定部６３および依存データ送受信部６４を備えている。また、アクセラレータ部３０は、入力データ受信部３４、処理部３５、出力データ送信部３６、依存範囲決定部７３および依存データ送受信部７４を備えている。なお、本実施の形態に係るデータ処理装置１のハードウェア構成は、図１に示すデータ処理装置１のハードウェア構成と同様である。
【００８９】
図９に示すデータ処理装置１が、前述の第１の実施の形態のデータ処理装置１と異なる点は、ホスト部２０が依存範囲決定部６３および依存データ送受信部６４を備え、アクセラレータ部３０が依存範囲決定部７３および依存データ送受信部７４を備える点である。
【００９０】
依存範囲決定部６３は、処理部（１）のデータ処理後のデータ（中間データ１）と依存関係を有する処理部（２）の当該依存関係に基づき、アクセラレータ部３０に転送するデータの集合の範囲を決定する。なお、依存範囲決定部６３の依存範囲の決定の方法については、後述する。依存範囲決定部６３は、決定したデータの集合の範囲を依存データ送受信部６４に通知する。なお、依存範囲決定部６３は、決定した範囲のデータの集合を、依存データ送受信部６４に供給してもよい。
【００９１】
依存データ送受信部６４は、依存範囲決定部６３が決定した範囲のデータの集合をアクセラレータ部３０に転送する。また、依存データ送受信部６４は、アクセラレータ部３０から転送されたデータの集合を受信し、処理部２５（２）に供給する。
【００９２】
依存範囲決定部７３は、処理部（１）の中間データ１と依存関係を有する処理部（２）の当該依存関係に基づき、ホスト部２０に転送するデータの集合の範囲を決定する。なお、依存範囲決定部７３の依存範囲の決定の方法については、後述する。依存範囲決定部７３は、決定したデータの集合の範囲を依存データ送受信部７４に通知する。なお、依存範囲決定部７３は、決定した範囲のデータの集合を、依存データ送受信部７４に供給してもよい。
【００９３】
依存データ送受信部７４は、依存範囲決定部７３が決定した範囲のデータの集合をホスト部２０に転送する。また、依存データ送受信部７４は、ホスト部２０から転送されたデータの集合を受信し、処理部３５（２）に供給する。
【００９４】
全ての入力データは、ホスト部２０上に存在するため、前述した第１の実施の形態では、データ処理に使用する入力データを、ホスト部２０からアクセラレータ部３０へ転送した。しかし、本実施の形態に係るデータ処理装置１では、処理部（１）の処理後のデータを使用して、処理部（２）以降の処理を行うため、ホスト部２０とアクセラレータ部３０との間で中間データを送受信する。なお、処理部（２）が依存関係を有する中間データの数、中間データの割当結果等によっては、片方向にデータ転送を行う構成であってもよい。
【００９５】
なお、本実施の形態に係るデータ処理装置１のデータ割当部２２は、ホスト部２０とアクセラレータ部３０との負荷の均衡に加えて、処理部（２）が依存関係を有する中間データがあることを考慮して、入力データを割り当てることが好ましい。データ割当部２２は、例えば、各ノードに対し、連続する入力データを割り当ててもよい。つまり、データ割当部２２は、各ノードに割り当てる入力データの数だけを考慮するのではなく、入力データの順番も考慮することが好ましい。
【００９６】
（データ処理装置の動作）
次に、図１０を参照して、本実施の形態に係るデータ処理装置１の動作について説明する。図１０は、本実施の形態に係るデータ処理装置１の動作の流れを示すフローチャートである。なお、ホスト部２０の動作の流れを図１０の左側に示し、アクセラレータ部３０の動作の流れを図１０の右側に示している。
【００９７】
図１０に示すＳ１０１〜Ｓ１０５およびＳ１２１は、夫々、図５に示すＳ５１〜Ｓ５５およびＳ６１と同様の処理であるため、説明を省略する。
【００９８】
Ｓ１０５の後、ホスト部２０の処理部２５は、データ割当部２２から入力データの集合の割当結果を受け取ると、処理部（１）の処理（処理１）を実行する（Ｓ１０６）。処理部（１）は、処理１が終了すると、当該処理１が終了したことを依存範囲決定部６３および処理部（２）に通知する。なお、上記通知には、中間データ１が含まれていてもよい。また、処理部（１）は、処理部（２）に対し、処理後のデータを示す情報（例えば、番号など）を通知し、処理部（２）がデータ処理を行う際に使用するデータを別の手段で供給してもよい。
【００９９】
依存範囲決定部６３は、処理１が終了したことを示す通知を受信すると、中間データ（本実施の形態においては、中間データ１）と依存関係を有する処理部（２）の当該依存関係に基づき、アクセラレータ部３０に転送するデータの集合の範囲を決定する（Ｓ１０７）。そして、依存データ送受信部６４は、依存範囲決定部６３が決定した範囲のデータの集合をアクセラレータ部３０に転送する（Ｓ１０８）。
【０１００】
一方、アクセラレータ部３０の処理部３５は、Ｓ１２１の後、処理１を実行する（Ｓ１２２）。アクセラレータ部３０の処理部（１）は、処理１が終了すると、当該処理１が終了したことを依存範囲決定部７３および処理部（２）に通知する。なお、上記通知には、中間データ１が含まれていてもよい。また、処理部（１）は、処理部（２）に対し、処理後のデータを示す情報（例えば、番号など）を通知し、処理部（２）がデータ処理を行う際に使用するデータを別の手段で供給してもよい。
【０１０１】
依存範囲決定部７３は、処理１が終了したことを示す通知を受信すると、中間データ１と依存関係を有する処理部（２）の当該依存関係に基づき、ホスト部２０に転送する中間データの集合の範囲を決定する（Ｓ１２３）。そして、依存データ送受信部７４は、依存範囲決定部７３が決定した範囲の中間データの集合をホスト部２０に転送する（Ｓ１２４）。
【０１０２】
ここで、図８および図１１を参照して、依存範囲決定部６３および依存範囲決定部７３における、データの集合の範囲の決定方法について説明する。図１１は、ホスト部２０の処理部２５およびアクセラレータ部３０の処理部３５がデータ処理する入力データの一例を説明するための図である。
【０１０３】
まず、入力データｉに対してデータ処理を行う処理部（２）が、図８に示すように、中間データ１（ｉ）と中間データ１（ｉ−１）と、に対して、依存関係を有している場合の、データの集合の範囲の決定方法について説明する。ここで、入力データの１つの集合における入力データの数を、入力データｉ〜入力データｉ＋２９の３０個とする。また、ホスト部２０とアクセラレータ部３０との負荷を均衡させるために、データ割当部２２が、ホスト部２０に１０個（入力データｉ〜入力データｉ＋９）の入力データを割り当て、アクセラレータ部３０に２０個（入力データｉ＋１０〜入力データｉ＋２９）の入力データを割り当てるとする。
【０１０４】
このとき、依存範囲決定部６３は、中間データ１（ｉ＋９）を、アクセラレータ部３０に転送するデータの集合の範囲として決定する。なぜならば、入力データｉ＋１０に対してデータ処理を行うアクセラレータ部３０の処理部３５（２）は、中間データ１（ｉ＋９）を利用するためである。
【０１０５】
また、依存範囲決定部７３は、中間データ１（ｉ＋２９）を、ホスト部２０に転送するデータの集合の範囲として決定する。なぜならば、入力データの次の集合に含まれる入力データｉ＋３０に対してデータ処理を行うホスト部２０の処理部２５（２）は、中間データ１（ｉ＋２９）を利用するためである。
【０１０６】
次に、入力データｉに対してデータ処理を行う処理部（２）が、図１１に示すように、中間データ１（ｉ）、中間データ１（ｉ−１）、および、入力データｉ−１に対して依存関係を有している場合の、データの集合の範囲の決定方法について説明する。
【０１０７】
このとき、依存範囲決定部６３は、中間データ１（ｉ＋９）と、入力データｉ＋９とを、アクセラレータ部３０に転送するデータの集合の範囲として決定する。なぜならば、入力データｉ＋１０に対して処理を行うアクセラレータ部３０の処理部３５（２）は、中間データ１（ｉ＋９）と入力データｉ＋９とを利用するためである。
【０１０８】
また、図８の場合と同様に、依存範囲決定部７３は、中間データ１（ｉ＋２９）を、ホスト部２０に転送するデータの集合の範囲として決定する。
【０１０９】
なお、アクセラレータ部３０の処理部（２）が利用する入力データの範囲（上述の例では、入力データｉ＋９）は、データ範囲決定部２３が決定してもよい。
【０１１０】
図１０に戻り、Ｓ１０８およびＳ１２４の処理後について説明を行う。Ｓ１０８後、ホスト部２０の依存データ送受信部６４は、アクセラレータ部３０から転送されたデータを受信する（Ｓ１０９）。依存データ送受信部６４は、受信したデータを処理部２５（２）に供給する。処理部２５（２）は、依存データ送受信部６４から供給されたデータを用いて、処理２を行う（Ｓ１１０）。
【０１１１】
なお、ある入力データに対する処理部２５（２）が、当該ノード（即ち、ホスト部２０）にあるデータを用いてデータ処理を行う場合、当該処理部２５（２）の処理２を、別のノード（本実施の形態においては、アクセラレータ部３０）からのデータを用いる処理２より先に開始してもよい。例えば、上述の例の場合では、入力データｉ＋１〜入力データｉ＋９に対するホスト部２０の処理部２５（２）のデータ処理は、ホスト部２０上にある処理１の処理後のデータに依存する。従って、入力データｉ＋１〜入力データｉ＋９に対して、処理部２５（２）は、アクセラレータ部３０からの転送されるデータを待たずにデータ処理を開始することができる。
【０１１２】
処理部２５の処理部（２）の処理２が終了すると、処理部２５は後続の処理（処理３〜処理Ｎ）を行う（Ｓ１１１）。そして、処理Ｎが終了すると、処理部２５は、処理が全て終了したことを、出力部２７に通知する。
【０１１３】
一方、アクセラレータ部３０の依存データ送受信部７４は、Ｓ１２４後、ホスト部２０から転送されたデータを受信する（Ｓ１２５）。そして、処理部３５は、上述したＳ１１０、Ｓ１１１と同様に処理２〜処理Ｎを行う（Ｓ１２６、Ｓ１２７）。また、処理部３５は、処理が全て終了したことを、出力データ送信部３６に通知する。
【０１１４】
その後、出力データ送信部３６は、データ処理後のデータの集合を、ホスト部２０に送信する（Ｓ１２８）。
【０１１５】
ホスト部２０の出力データ受信部２６は、アクセラレータ部３０から出力データを受信すると（Ｓ１１２）、出力部２７に供給する。出力部２７は、処理部２５の処理後のデータと、アクセラレータ部３０から送信された処理後のデータとを出力データとして出力する（Ｓ１１３）。なお、出力部２７は、典型的には、入力データに対応する順番で出力データを出力することが好ましい。
【０１１６】
（効果）
図１２を参照して、本実施の形態に係るデータ処理装置１の効果について説明する。図１２は、本実施の形態に係るデータ処理装置１の効果の一例を説明するためのイメージ図である。図１２において、横軸は時間を示している。図１２に示す例では、第１の実施の形態で説明した図６と同様に、所定の数の入力データの数を（ｍ＋ｎ）個とし、（ｍ＋ｎ）個の入力データを１つの集合としている。また、ホスト部２０に対し、ｍ個のデータを割り当て、アクセラレータ部３０に対し、ｎ個のデータを割り当てている。また、処理部２５および処理部３５は、２つのサブ処理部（処理部（１）、処理部（２））を夫々有しているとする。
【０１１７】
本実施の形態に係るデータ処理装置１の依存範囲決定部６３および依存範囲決定部７３は、夫々、処理部（１）の処理後のデータと依存関係を有する処理部（２）の当該依存関係に基づき、ホスト部２０とアクセラレータ部３０との間で転送するデータの範囲を決定する。そして、図１２に示すとおり、本実施の形態に係るデータ処理装置１では、ホスト部２０とアクセラレータ部３０との間で中間データの転送が行われる。
【０１１８】
ホスト部２０の処理部（２）は、データ割当部２２がホスト部２０に割り当てた入力データの集合と、アクセラレータ部３０から受信したデータであって、依存範囲決定部７３が決定した範囲のデータと、を用いてデータ処理を行う。また、アクセラレータ部３０の処理部（２）は、データ範囲決定部２３が決定した範囲のデータと、依存範囲決定部前記第１の依存範囲決定部６３が決定した範囲のデータとを用いてデータ処理を行う。
【０１１９】
これにより、本実施の形態に係るデータ処理装置１は、第１の実施の形態の効果に加え、各サブ処理部が中間データに対し依存関係を有している場合にも適用できるという効果がある。
【０１２０】
（変形例）
本実施の形態の別形態に係るデータ処理装置１は、処理部（２）以外のサブ処理部が、他のサブ処理部の中間データに対して依存関係を有する構成であってもよい。
【０１２１】
また、あるサブ処理部が複数の中間データに対して、依存関係を有する構成であってもよい。この場合、本変形例に係るデータ処理装置１は、当該サブ処理部が依存関係を有する中間データの各々を出力するサブ処理部に対して、依存範囲決定部と依存データ送受信部とを備える構成とすることができる。
【０１２２】
また、本変形例に係るデータ処理装置１は、あるサブ処理部に対する複数の依存関係をまとめて、依存範囲を決定し、当該サブ処理部がデータ処理を行うように構成してもよい。何れの場合の構成および動作は本実施の形態から明らかである。
【０１２３】
＜実施の形態３＞
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。本実施の形態では、前述した第１および第２の実施の形態と同様に、データ処理装置１が１つのアクセラレータ部を備えた構成について説明するが、本発明はこれに限定されるものではなく、複数のアクセラレータ部を備える構成であってもよい。なお、説明の便宜上、前述した第１および第２の実施の形態で説明した図面に記載のデータ処理装置１に含まれる部材と同じ機能を有する部材については、同じ符号を付し、その説明を省略する。
【０１２４】
前述した第２の実施の形態では、処理１と処理２との間に中間データの転送が生じるが、中間データのデータサイズが大きい場合、転送待ちの時間が発生する場合がある。本実施の形態においては、中間データの転送にかかる時間を考慮し、両ノードにおける空き時間をより少なくするデータ処理装置１について説明する。
【０１２５】
（データ処理装置の構成）
図１３を参照して、本実施の形態に係るデータ処理装置１の機能について、説明する。図１３は、本実施の形態に係るデータ処理装置１の機能構成を示した機能ブロック図である。図１３に示すとおり、データ処理装置１は、ホスト部２０とアクセラレータ部３０とを備えている。
【０１２６】
ホスト部２０は、入力部２１、データ割当部２２、データ範囲決定部２３、入力データ送信部２４、出力データ受信部２６、出力部２７、依存範囲決定部６３、依存データ送受信部６４、処理部８５および処理選択部８８を備えている。また、アクセラレータ部３０は、入力データ受信部３４、出力データ送信部３６、依存範囲決定部７３、依存データ送受信部７４、処理部９５および処理選択部９８を備えている。なお、本実施の形態に係るデータ処理装置１のハードウェア構成は、図１に示すデータ処理装置１のハードウェア構成と同様である。
【０１２７】
また、本実施の形態に係るデータ処理装置１の処理部（２）は、第２の実施の形態と同様であるとする。つまり、処理部（２）は、（ｉ）当該処理部（２）の処理対象データに対する処理部（１）の処理後のデータと、（ｉｉ）当該処理部（２）の処理対象データとは異なる入力データであって、当該処理対象データに先行する入力データに対する処理部（１）の処理後のデータと、に対して、依存関係を有しているとする。
【０１２８】
なお、本実施の形態においても、前述した第２の実施の形態と同様に、処理部（２）が、複数の先行データの中間データに対して、依存関係を有していてもよい。また、処理部（２）に依存関係を有する中間データの数が、当該処理部（２）がデータ処理する処理対象データ毎に異なっていてもよい。また、処理部（２）以外のサブ処理部が、先行データの中間データに対して、依存関係を有していてもよい。また、各サブ処理部は、各データ処理の実行中に、依存する中間データの数を変更してもよい。
【０１２９】
処理部８５は、処理選択部８８からの指示およびデータ割当部２２の割当結果に基づき、ホスト部２０に割り当てられた入力データの集合に対して、データ処理を行う。処理部８５は、図１３に示すように、１または複数のデータ処理の夫々を行う１または複数のサブ処理部（処理部（１）、処理部（２）、・・・、処理部（Ｎ））を有している。本実施の形態においては、処理部８５は、Ｎ個のサブ処理部を有しているとするが、これに限定されるものではない。
【０１３０】
処理選択部８８は、処理部８５（１）を実行するか、処理部８５（２）を実行するかを選択し、選択した方のサブ処理部に対し、データ処理を実行するよう指示する。処理選択部８８は、データ割当部２２からの通知を受信すると、処理部８５（１）に対し、処理１を実行するよう指示する。また、処理選択部８８は、依存データ送受信部６４からデータを受信したことを示す通知を受け取ると、処理部８５（２）に処理２を実行するよう指示する。
【０１３１】
なお、処理選択部８８は、各処理の実行指示とともに、データ処理に用いるデータを各サブ処理部に供給してもよい。また、処理選択部８８は、各サブ処理部に対し、使用するデータの場所を示す情報（例えば、番号など）を通知し、各サブ処理部がデータ処理を行う際に使用するデータを別の手段で供給してもよい。
【０１３２】
処理部９５は、処理選択部９８からの指示に基づき、入力データ受信部３４から供給された入力データの集合に対して、データ処理を行う。処理部９５は、上述した処理部８５と同様に、１または複数のサブ処理部を有している。本実施の形態においては、処理部９５は、Ｎ個のサブ処理部を有しているとするが、これに限定されるものではない。
【０１３３】
処理選択部９８は、処理部９５（１）を実行するか、処理部９５（２）を実行するかを選択し、選択した方のサブ処理部に対し、データ処理を実行するよう指示する。処理選択部９８は、入力データ受信部３４から入力データを受信すると、処理部９５（１）に対し、処理１を実行するよう指示する。また、処理選択部９８は、依存データ送受信部７４からデータを受信したことを示す通知を受け取ると、処理部９５（２）に処理２を実行するよう指示する。
【０１３４】
なお、処理選択部９８は、各処理の実行指示とともに、データ処理に用いるデータを各サブ処理部に供給してもよい。また、処理選択部９８は、各サブ処理部に対し、使用するデータの場所を示す情報（例えば、番号など）を通知し、各サブ処理部がデータ処理を行う際に使用するデータを別の手段で供給してもよい。
【０１３５】
（データ処理装置の動作）
次に、図１４および図１５を参照して、本実施の形態に係るデータ処理装置１の動作について説明する。図１４は、本実施の形態に係るデータ処理装置１におけるホスト部２０の動作の流れを示すフローチャートである。また、図１５は、本実施の形態に係るデータ処理装置１におけるアクセラレータ部３０の動作の流れを示すフローチャートである。
【０１３６】
まず、ホスト部２０の動作について説明する。ホスト部２０の入力部２１が、データ処理装置１に入力された入力データを読み込む（Ｓ１４１）。その後、データ割当部２２は、入力データを読み込んだことを示す通知を入力部２１から受け取ると、入力部２１が所定の数の入力データを読み込んだか否かを確認する（Ｓ１４２）。
【０１３７】
所定の数の入力データが読み込まれた場合（Ｓ１４２にてＹＥＳ）、データ割当部２２は、読み込まれた入力データの集合から、ホスト部２０とアクセラレータ部３０とに割り当てる入力データの数を決定する（Ｓ１４３）。このとき、データ割当部２２は、所定の数の入力データが読み込まれたことを示す通知を処理選択部８８に通知する。
【０１３８】
上記所定の数の入力データを各ノードに割り当てる際の、各ノードにおける入力データの数は、各ノードの処理の負荷を考慮して、各ノードの負荷が均衡するように決定する。データ割当部２２は、入力データをホスト部２０とアクセラレータ部３０とに割り当てると、当該割当結果をデータ範囲決定部２３に通知する。また、データ割当部２２は、当該割当結果を通知処理選択部８８に通知してもよい。
【０１３９】
その後、データ範囲決定部２３は、割当結果と、アクセラレータ部３０の処理部９５がデータ処理に使用するデータとに基づき、アクセラレータ部３０に転送する入力データの集合の範囲を決定する（Ｓ１４４）。そして、データ範囲決定部２３は、決定した入力データの集合の範囲を入力データ送信部２４に通知する。
【０１４０】
その後、入力データ送信部２４は、データ範囲決定部２３が決定した範囲の入力データの集合をアクセラレータ部３０に転送する（Ｓ１４５）。
【０１４１】
Ｓ１４５の後、処理選択部８８は、データ割当部２２から所定の数の入力データが読み込まれたことを示す通知を受信すると、処理１を実行するよう、処理部８５（１）に指示する（Ｓ１４６）。なお、処理選択部８８は、データ割当部２２から入力データの集合の割当結果を示す通知を受信し、当該通知の受信後に、処理１を実行するよう、処理部８５（１）に指示してもよい。
【０１４２】
処理部８５（１）は、上記指示を受信すると、処理１を実行する（Ｓ１４７）。処理部８５（１）は、処理１が終了すると、当該処理１が終了したことを依存範囲決定部６３および処理選択部８８に通知する。なお、上記通知には、中間データ１が含まれていてもよい。
【０１４３】
依存範囲決定部６３は、処理１が終了したことを示す通知を受信すると、中間データ（本実施の形態においては、中間データ１）と依存関係を有する処理部（２）の当該依存関係に基づき、アクセラレータ部３０に転送するデータの集合の範囲を決定する（Ｓ１４８）。そして、依存データ送受信部６４は、依存範囲決定部６３が決定した範囲のデータの集合をアクセラレータ部３０に転送する（Ｓ１４９）。
【０１４４】
Ｓ１４９の終了後、または、Ｓ１４２にて所定の数の入力データが読み込まれていない場合（Ｓ１４２にてＮＯ）、処理選択部８８は、中間データを受信したか否かを確認する（Ｓ１５０）。なお、処理選択部８８は、処理部８５（１）から処理１が終了したことを示す通知を受信した後に、Ｓ１５０を実行してもよい。
【０１４５】
ここで、依存データ送受信部６４は、アクセラレータ部３０から中間データを受信すると、中間データを受信したことを示す通知を処理選択部８８に通知する。処理選択部８８は、当該通知の有無を確認することにより、中間データを受信したか否かを確認する。なお、依存データ送受信部６４は、受信した中間データを処理部８５に供給してもよい。
【０１４６】
中間データを受信していない場合（Ｓ１５０にてＮＯ）、Ｓ１４１に戻り、入力部２１は、再び入力データを読み込む。中間データを受信している場合（Ｓ１５０にてＹＥＳ）、処理選択部８８は、処理２を実行するよう、処理部８５（２）に指示する（Ｓ１５１）。処理部８５（２）は、上記指示を受信すると、依存データ送受信部６４が受信したデータを用いて、処理２を行う（Ｓ１５２）。
【０１４７】
処理部８５の処理部（２）の処理２が終了すると、処理部８５は後続の処理（処理３〜処理Ｎ）を行う（Ｓ１５３）。そして、処理Ｎが終了すると、処理部８５は、処理が全て終了したことを、出力部２７に通知する。
【０１４８】
その後、ホスト部２０の出力データ受信部２６は、アクセラレータ部３０から出力データを受信すると（Ｓ１５４）、出力部２７に供給する。出力部２７は、処理部８５の処理後のデータと、アクセラレータ部３０から送信された処理後のデータとを出力データとして出力する（Ｓ１５５）。なお、出力部２７は、典型的には、入力データに対応する順番で出力データを出力することが好ましい。
【０１４９】
次に、アクセラレータ部３０の動作について説明する。アクセラレータ部３０の入力データ受信部３４は、ホスト部２０から転送された入力データの集合を受信し（Ｓ１６１）、受信した入力データの集合を処理選択部９８に供給する。
【０１５０】
処理選択部９８は、入力データ受信部３４から入力データを受信すると、処理部９５（１）に対し、処理１を実行するよう指示する（Ｓ１６２）。処理部９５（１）は、上記指示を受信すると、処理１を実行する（Ｓ１６３）。処理部９５（１）は、処理１が終了すると、当該処理１が終了したことを依存範囲決定部７３および処理選択部９８に通知する。なお、上記通知には、中間データ１が含まれていてもよい。
【０１５１】
依存範囲決定部７３は、処理１が終了したことを示す通知を受信すると、中間データ１と依存関係を有する処理部（２）の当該依存関係に基づき、ホスト部２０に転送する中間データの集合の範囲を決定する（Ｓ１６４）。そして、依存データ送受信部７４は、依存範囲決定部７３が決定した範囲の中間データの集合をホスト部２０に転送する（Ｓ１６５）。
【０１５２】
その後、処理選択部９８は、中間データを受信したか否かを確認する（Ｓ１６６）。なお、処理選択部９８は、処理部９５（１）から処理１が終了したことを示す通知を受信した後に、Ｓ１６６を実行してもよい。
【０１５３】
ここで、依存データ送受信部７４は、ホスト部２０から中間データを受信すると、中間データを受信したことを示す通知を処理選択部９８に通知する。処理選択部９８は、当該通知の有無を確認することにより、中間データを受信したか否かを確認する。なお、依存データ送受信部７４は、受信した中間データを処理部９５に供給してもよい。
【０１５４】
中間データを受信していない場合（Ｓ１６６にてＮＯ）、Ｓ１６１に戻る。中間データを受信している場合（Ｓ１６６にてＹＥＳ）、処理選択部９８は、処理２を実行するよう、処理部９５（２）に指示する（Ｓ１６７）。処理部９５（２）は、上記指示を受信すると、依存データ送受信部７４が受信したデータを用いて、処理２を行う（Ｓ１６８）。処理部９５の処理部（２）の処理２が終了すると、処理部９５は後続の処理（処理３〜処理Ｎ）を行う（Ｓ１６９）。そして、処理部９５は、処理が全て終了したことを、出力データ送信部３６に通知する。
【０１５５】
その後、出力データ送信部３６は、データ処理後のデータの集合を、ホスト部２０に送信する（Ｓ１７０）。
【０１５６】
なお、以上の動作の説明は、全体の処理が逐次的に行われるように説明したが、複数のスレッドを用いて並列もしくは平行して処理してもよい。
【０１５７】
（効果）
以上のように、本実施の形態に係るデータ処理装置１の処理選択部８８および処理選択部９８は、夫々、受信した通知の種類、即ち、各ノードが受信したデータの種類によって、複数のサブ処理部のうち、何れのサブ処理手段でデータ処理を行うかを選択する。処理選択部８８は、例えば、ホスト部２０が受信したデータが中間データの場合は、処理部（２）のデータ処理を行い、中間データではない場合、処理部（１）のデータ処理を行う。また、処理選択部９８は、例えば、アクセラレータ部３０が受信したデータが中間データの集合の場合、処理部（２）のデータ処理を行い、中間データではない場合、処理部（１）のデータ処理を行う。
【０１５８】
したがって、ホスト部２０とアクセラレータ部３０との間で中間データの集合のデータ転送を行っている間に、処理部（１）のデータ処理を実行することができる。これにより、データの割当によってホスト部２０とアクセラレータ部３０との間の負荷を均衡させながら、両ノードにおける空き時間をより少なくすることができる。よって、データ転送によるオーバーヘッドをより削減することができる。
【０１５９】
＜実施の形態４＞
以下に、本発明の第４の実施の形態について、図面を参照して詳細に説明する。なお、説明の便宜上、前述した第１〜第３の実施の形態で説明した図面に記載のデータ処理装置１に含まれる部材と同じ機能を有する部材については、同じ符号を付している。また、本実施の形態に係るデータ処理装置１のハードウェア構成は、図１に示すデータ処理装置１のハードウェア構成と同様である。
【０１６０】
（データ処理装置の構成）
図１６を参照して、本実施の形態に係るデータ処理装置１の機能について、説明する。図１６は、本実施の形態に係るデータ処理装置１の機能構成を示した機能ブロック図である。図１６に示すとおり、データ処理装置１は、ホスト部２０とアクセラレータ部３０とを備えている。
【０１６１】
ホスト部２０は、データ割当部２２と、データ範囲決定部２３と、処理部２５とを備えている。また、アクセラレータ部３０は、処理部３５を備えている。
【０１６２】
データ割当部２２は、ホスト部２０とアクセラレータ部３０との負荷が均衡するように、連続して入力される入力データの集合を、ホスト部２０とアクセラレータ部３０とに割り当てる。
【０１６３】
データ範囲決定部２３は、データ割当部２２の割当結果に基づき、アクセラレータ部３０に転送するデータの集合の範囲を決定する。
【０１６４】
処理部２５は、データ割当部２２がホスト部２０に割り当てた入力データの集合に対し、データ処理を行う。
【０１６５】
処理部３５は、データ範囲決定部２３が決定した範囲のデータの集合に対し、データ処理を行う。
【０１６６】
このように、本実施の形態に係るデータ処理装置１は、データ割当部２２が両ノードの負荷が均衡するように入力データを割り当てる。したがって、各ノードのプロセッサの空き時間を少なくすることができるという効果がある。
【０１６７】
また、処理部２５は、データ割当部２２が割り当てた入力データに対してデータ処理を行う。また、処理部３５は、データ範囲決定部２３が決定した範囲のデータを用いてデータ割当部２２が割り当てた入力データに対してデータ処理を行う。つまり、処理部２５および処理部３５は、異なる入力データに対してデータ処理を行う。したがって、処理部３５がデータ処理に使用する入力データの集合のデータ転送は、当該集合に含まれる入力データの処理を開始する際に行われる。したがって、入力データ毎にデータの転送を行う場合に比べ、データ転送によるオーバーヘッドを少なくすることができる。よって、本実施の形態に係るデータ処理装置１は、データ処理を高速に行うことができる。
【０１６８】
（実施例）
次に、具体的な実施例を用いて本発明を実施するための形態の動作を説明する。
【０１６９】
以下では、画像処理を、アクセラレータを備えた計算機システムで高速に実行する実施例について説明する。本実施例に係る計算機システムは、計算機システムに入力される映像に対して、一連の画像処理を行う。映像は、連続する画像フレーム（以下、単にフレームとも呼ぶ）で構成される。また、映像は、例えば、３３ｍｓ間隔で計算機システムに入力される。当該画像処理は、例えば、ビデオカメラから入力された映像に対して適用することができる。
【０１７０】
図１７を参照して、本実施例に係る計算機システム１０の機能について、説明する。図１７は、本実施例に係る計算機システム１０の機能構成を示した機能ブロック図である。
【０１７１】
なお、本実施例に係る計算機システム１０において、アクセラレータは前述した第１〜第４の実施の形態に係るアクセラレータ部３０に相当する。また、フレーム割当部がデータ割当部２２に相当し、フレーム範囲決定部がデータ範囲決定部２３に相当し、入力フレーム送信部が入力データ送信部２４に相当する。また、出力フレーム受信部が出力フレーム受信部２６に相当し、ホスト部２０の中間結果送受信部が依存データ送受信部６４に相当する。更に、入力フレーム受信部が入力データ受信部３４に相当し、出力フレーム送信部が出力フレーム送信部３６に相当し、アクセラレータの中間結果送受信部が依存データ送受信部７４に相当する。このように、前述した第１〜第４の実施の形態で説明した図面に記載のデータ処理装置１に含まれる部材と同じ機能を有する部材については、同じ符号を付している。
【０１７２】
本実施形態に係る計算機システム１０の処理部１０５および処理部１１５は、図１７に示すとおり、２つの画像処理部（画像処理部（１）、画像処理部（２））を備えている。各画像処理部の画像処理の処理内容については、本発明に特有なものではないため、説明を省略する。
【０１７３】
ここで、図１８を参照して、処理部１０５および処理部１１５の画像処理に使用する入力フレームについて説明を行う。図１８は、処理部１０５および処理部１１５が画像処理する入力フレームの一例を説明するための図である。なお、図１８において、簡略化のため、フレームの入力を表すいくつかの線の記載を省略している。
【０１７４】
図１８に示すとおり、本実施例における処理部１０５および処理部１１５は、入力フレームｉに対して画像処理を行う際、画像処理部（１）で入力フレームｉと入力フレームｉ−１を利用する。また、入力フレームｉに対する画像処理部（２）は、入力フレームｉ−２、入力フレームｉ−１および入力フレームｉに加え、以下の（ａ）〜（ｃ）を利用する。
（ａ）処理部１０５および処理部１１５が画像処理の対象とする入力フレーム（入力フレームｉ）（処理対象フレームとも呼ぶ）に対する、画像処理部（１）における画像処理後のフレーム（中間結果１（ｉ）と呼ぶ）。
（ｂ）処理対象フレームの１つ前の入力フレーム（入力フレームｉ−１）に対する、画像処理部（１）における画像処理後のフレーム（中間結果１（ｉ−１）と呼ぶ）。
（ｃ）処理対象フレームの２つ前の入力フレーム（入力フレームｉ−２）に対する、画像処理部（１）における画像処理後のフレーム（中間結果１（ｉ−２）と呼ぶ）。
【０１７５】
つまり、画像処理部（２）は、以下の（ｉ）〜（ｖｉ）に対して、依存関係を有している。
（ｉ）当該画像処理部（２）の処理対象フレーム。
（ｉｉ）当該処理対象フレームの１つ前の入力フレーム。
（ｉｉｉ）当該処理対象フレームの２つ前の入力フレーム。
（ｉｖ）当該画像処理部（２）の処理対象フレームに対する画像処理部（１）の画像処理後のフレーム。
（ｖ）当該画像処理部（２）の処理対象フレームとは異なる入力フレームであって、当該処理対象フレームの１つ前の入力フレームに対する画像処理部（１）の画像処理後のフレーム。
（ｖｉ）当該画像処理部（２）の処理対象フレームとは異なる入力フレームであって、当該処理対象フレームの２つ前の入力フレームに対する画像処理部（１）の画像処理後のフレーム。
【０１７６】
次に、本実施例の計算機システム１０の動作について説明する。なお、図１８に示すように、処理部１０５および処理部１１５の画像処理部（１）は、他の画像処理部の結果に対し依存関係を有していないので、複数のフレームに対し、画像処理１を同時に実行することができる。
【０１７７】
また、１フレームに対する処理部１０５および処理部１１５の画像処理は、各ノードが備えるプロセッサコアのうち４コアを用いて実行した。これは、１フレームに対する画像処理部（１）の画像処理に並列性（たとえば画像をブロックに分割したブロック間の並列性）があることを示している。画像処理に並列性がない場合は、１コアで実行することが望ましいが、当該コア数は本発明に特有なものではないため、説明を省略する。
【０１７８】
入力部２１が入力フレームを読み込むと、フレーム割当部２２は、読み込まれた入力フレームの集合を所定の数蓄積し、当該入力フレームの集合を、ホスト部２０とアクセラレータ３０との負荷が均衡するように、ホスト部２０とアクセラレータ３０とに割り当てる。
【０１７９】
ここで、図１９を参照して、ホスト部２０およびアクセラレータ３０の処理時間について説明する。図１９は、ホスト部２０およびアクセラレータ３０の夫々のコア数および処理時間を示す図である。図１９における各ノードの処理時間は、４コアでの処理時間である。
【０１８０】
図１９に示すとおり、本実施例におけるホスト部２０のコア数は８であり、アクセラレータ３０のコア数は３２である。また、本実施例におけるアクセラレータ３０の４コアでの各画像処理部の処理時間は、ホスト部２０の４コアでの各画像処理部の処理時間の２倍である。
【０１８１】
処理部１０５および処理部１１５は、４コアで実行される。そのため、ホスト部２０の全８コアにフレームを割り当てるためには、２フレームが必要となる。一方、アクセラレータ３０の全３２コアにフレームを割り当てるために、８フレームが必要となる。ここで、図１９に示したとおり、ホスト部２０の各画像処理部は、アクセラレータ３０の各画像処理部よりも、半分の処理時間で画像処理を行う。そのため、フレーム割当部２２は、ホスト部２０とアクセラレータ３０との負荷を均衡させるために、１：２の比率で、ホスト部２０とアクセラレータ３０とに入力フレームを割り当てる。したがって、フレーム割当部２２は、ホスト部２０に４フレーム単位、アクセラレータ３０に８フレーム単位で、入力フレームを割り当てる。
【０１８２】
図２０に、上記割り当てを行った場合の割当フレームのイメージを示す。図２０は、割当フレームと当該割当フレームの画像処理後のフレームのイメージを示す図である。図２０において、フレーム割当部２２は、フレーム０〜フレーム１１までの１２フレームをホスト部２０とアクセラレータ３０とに割り当てている。
【０１８３】
図２０における数字は、フレームの番号を示している。図２０に示すとおり、ホスト部２０に４フレーム（フレーム０〜フレーム３）、アクセラレータ３０に８フレーム（フレーム４〜フレーム１１）が割り当てられている。ホスト部２０は８コアであるため、まず、最初の２フレーム（フレーム０およびフレーム１）に対し、画像処理を行い、その後、次の２フレーム（フレーム２およびフレーム３）に対して、画像処理を行う。
【０１８４】
図２１を参照して、フレーム割当部２２における入力フレームの割当例について説明する。図２１は、フレーム割当部２２における入力フレームの割当の一例を示す図である。図２１に示す割当例では、１２フレーム毎に、先頭の４フレームをホスト部２０に、次の８フレームをアクセラレータ３０に割り当てている。そして、次の４フレームをホスト部２０に、更に次の８フレームをアクセラレータ３０に割り当てている。
【０１８５】
フレーム範囲決定部２３は、上記のようにアクセラレータ３０に割り当てられた入力フレームの集合と、処理部１１５が当該入力フレームの集合の画像処理に使用する入力フレームとに基づき、アクセラレータ３０に転送する入力フレームの範囲を決定する。したがって、上述のようにフレーム４〜フレーム１１の入力フレームが割り当てられたとき、画像処理部（１）は、フレーム４に対する画像処理を行う場合、フレーム４とフレーム３とを利用する。また、画像処理部（２）は、フレーム４に対する画像処理を行う場合、フレーム２〜４を利用する。したがって、フレーム範囲決定部２３は、アクセラレータ３０に転送する入力フレームの範囲として、フレーム２〜フレーム１１の範囲を決定する。そして、入力フレーム送信部２４は、フレーム範囲決定部２３が決定した範囲の入力フレームの集合を、アクセラレータ３０に転送する。なお、フレーム範囲決定部２３は、動作を簡略化するために、全部のフレームをアクセラレータ３０に送ってもよい。
【０１８６】
処理選択部８８は、フレーム割当部２２から入力フレームの集合の割当結果を示す通知を受信し、当該通知の受信後に、処理部１０５の画像処理部（１）の画像処理（画像処理１と呼ぶ）を実行するよう、画像処理部（１）に指示する。
【０１８７】
また、入力フレーム受信部３４は、ホスト部２０から転送された入力フレームの集合を受信し、処理選択部９８に供給する。処理選択部９８は、入力フレーム受信部３４から入力フレームを受信すると、処理部１１５の画像処理部（１）に対し、画像処理１を実行するよう指示する。
【０１８８】
ホスト部２０の画像処理部（１）は、２フレームの画像処理を同時に行うことができるため、例えば、フレーム０〜フレーム３に対する画像処理１を実行するよう指示されると、フレーム０とフレーム１とに対する画像処理１を行う。
【０１８９】
同様に、アクセラレータ３０の画像処理部（１）は、８フレームの画像処理を同時に行うことができる。そのため、アクセラレータ３０の画像処理部（１）は、例えば、フレーム４〜フレーム１１に対する画像処理１を実行するよう指示されると、フレーム４〜フレーム１１に対する画像処理１を行う。
【０１９０】
ホスト部２０の画像処理部（１）は、フレーム０とフレーム１とに対する画像処理１が終わると、フレーム２とフレーム３とに対する画像処理１を行う。
【０１９１】
ホスト部２０の画像処理１が終了すると、依存範囲決定部６３は、画像処理１の処理後のフレーム（中間結果１）と依存関係を有する画像処理部（２）の当該依存関係に基づき、アクセラレータ３０に転送するフレームの集合の範囲を決定する。
【０１９２】
図１８に示すように、本実施例において、画像処理部（２）は、中間結果１のうち、処理対象フレームの２つ前までのフレーム対する、中間結果１を利用する。また、上述したように、入力フレームの集合に含まれる１２フレームのうち、先頭４フレームがホスト部２０に割り当てられており、後続の８フレームがアクセラレータ３０に割り当てられている。したがって、依存範囲決定部６３は、２フレーム分の中間結果１を、ホスト部２０からアクセラレータ３０に転送するフレームの範囲として決定する。
【０１９３】
そして、中間結果送受信部６４は、依存範囲決定部６３が決定した範囲のフレームの集合をアクセラレータ３０に転送する。
【０１９４】
一方、アクセラレータ３０の画像処理１が終了すると、依存範囲決定部７３は、画像処理１の処理後のフレーム（中間結果１）と依存関係を有する画像処理部（２）の当該依存関係に基づき、ホスト部２０に転送するフレームの集合の範囲を決定する。ホスト部２０の依存範囲決定部６３と同様に、依存範囲決定部７３は、２フレーム分の中間結果１を、アクセラレータ３０からホスト部２０に転送するフレームの範囲として決定する。
【０１９５】
そして、中間結果送受信部７４は、依存範囲決定部７３が決定した範囲のフレームの集合をホスト部２０に転送する。
【０１９６】
ここで、フレーム割当部２２によって、ホスト部２０にフレーム０〜フレーム３が割り当てられ、アクセラレータ３０にフレーム４〜フレーム１１が割り当てられた場合における、依存範囲決定部６３および依存範囲決定部７３が決定するフレームの範囲について、更に説明する。
【０１９７】
アクセラレータ３０の処理部１１５の画像処理部（２）における画像処理２で利用される中間結果１は、フレーム２およびフレーム３に対する画像処理部（１）の中間結果（中間結果１（２）および中間結果１（３））である。したがって、依存範囲決定部６３は、アクセラレータ３０に転送するフレームの範囲を、中間結果１（２）および中間結果１（３）の範囲であると決定する。
【０１９８】
一方、アクセラレータ３０の依存範囲決定部７３は、ホスト部２０に転送するフレームの範囲を、フレーム１０およびフレーム１１に対する画像処理部（１）の中間結果（中間結果１（１０）および中間結果１（１１））の範囲であると決定する。これは、上記中間結果１が、次にホスト部２０に割り当てられたフレーム（フレーム１２〜フレーム１５）に対する画像処理２で利用されるからである。
【０１９９】
その後、中間結果送受信部６４は、アクセラレータ３０から中間結果を受信すると、中間結果を受信したことを示す通知を処理選択部８８に通知する。処理選択部８８は、当該通知を受け取ると、割り当てられたフレームの集合（フレーム０〜フレーム３）に対し、処理部１０５の画像処理部（２）の画像処理（画像処理２と呼ぶ）を実行するよう、画像処理部（２）に指示する。中間結果送受信部６４が中間結果をアクセラレータ３０から受信しているため、画像処理２で利用するフレームは、全て、ホスト部２０上に存在する。そのため、画像処理部（２）は、上記フレームを用いて画像処理２を行うことができる。
【０２００】
同様に、中間結果送受信部７４は、ホスト部２０から中間結果を受信すると、中間結果を受信したことを示す通知を処理選択部９８に通知する。処理選択部９８は、当該通知を受け取ると、割り当てられたフレームの集合（フレーム４〜フレーム１１）に対し、処理部１１５の画像処理部（２）の画像処理２を実行するよう、画像処理部（２）に指示する。
【０２０１】
その後、出力フレーム送信部３６は、アクセラレータ３０に割り当てられたフレームの集合に対する処理部１１５の画像処理後のフレームの集合をホスト部２０に転送する。そして、出力フレーム受信部２６は、出力フレーム送信部３６から転送されたフレームの集合を受信する。
【０２０２】
出力部２７は、ホスト部２０に割り当てられたフレームの集合に対する処理１０５の画像処理後のフレームの集合と、出力フレーム受信部２６が受信したフレームの集合とを合わせ、出力フレームの集合として出力する。
【０２０３】
本実施例の特徴的な動作として、処理選択部８８および処理選択部９８が、中間結果を受信したことを示す通知を受け取る前に、入力フレームを所定の数読み込んだことを示す通知を受け取る場合の動作がある。これは、画像処理部（１）１の画像処理時間と、中間結果の転送に要する時間との間に、次の入力フレーム集合が入力された場合に起こる。この場合、処理選択部８８および処理選択部９８は、夫々、先行する入力フレームの集合に対する画像処理１が完了すると、次の入力フレームの集合に対する画像処理１を行うように画像処理部１に指示をする。これにより中間結果の転送中に、次のフレームの集合に対する画像処理が開始されるため、中間結果の受信待ちのためにプロセッサがアイドルとなる時間を削減することができる。
【０２０４】
本動作を繰り返す場合の、ホスト部２０およびアクセラレータ３０の画像処理のイメージを図２２に示す。図２２は、ホスト部２０およびアクセラレータ３０における時間軸に対する画像処理の動作を示すイメージ図である。
【０２０５】
図２２において、ハッチングの部分はフレームの転送による待ち時間を示している。また、図２２における実線は入力フレーム送信部２４による入力フレームの転送を示し、破線は中間結果送受信部６４または中間結果送受信部７４による中間結果の転送を示している。図２２に示すように、フレームの転送は、画像処理とオーバーラップして行われるため、データ転送によるオーバーヘッドを削減することができる。
【０２０６】
（変形例）
次に、本実施例の変形例について説明する。
【０２０７】
フレーム割当部２２における入力フレームの割当例の他の例について、図２３に説明する。図２３は、フレーム割当部２２における入力フレームの割当の他の例を示す図である。図２３に示す割当例では、１２フレーム毎に、ホスト部２０に４フレームを割り当て、アクセラレータ３０に８フレームを割り当てている。
【０２０８】
図２３にハッチングの部分は、図２１のフレームの割当例と異なる点である。図２３では、フレーム割当部２２は、２つ目の集合のうち、１つ目の集合のフレームに続く８フレーム（フレーム１２〜フレーム１９）をアクセラレータ３０に割り当て、その次の４フレーム（フレーム２０〜フレーム２３）をホスト部２０に割り当てている。
【０２０９】
このように折り返す様に割り当てることによって、連続するフレームを異なるノードに割り当てる回数を削減することができる。したがって、フレームの転送量を削減することができる。
【０２１０】
また、フレーム割当部２２が上述のようなフレームの割当を行うことにより、依存範囲決定部６３および依存範囲決定部７３の動作が変わる。例えば、フレーム０〜フレーム１１のフレームの集合に対して、アクセラレータ３０は、ホスト部２０へ中間結果を送る必要がない。なぜならば、フレーム４〜フレーム１１に対するアクセラレータ３０での画像処理１の中間結果１を利用するフレーム１２〜フレーム１９は、アクセラレータ３０で画像処理されるためである。
【０２１１】
なお、上述の実施例では、画像処理部（２）のみが必要とする入力フレーム（上記の例では、フレーム２）をフレーム送信部２４で転送したが、当該入力フレームは、中間結果送受信部６４で送信するようにしてもよい。この場合、入力フレームの転送を、当該入力フレームを利用する直前まで遅らせることができる。従って、画像処理部（２）が必要とするフレーム数が変更になった場合に余分なフレームを転送せずにすむという効果がある。
【０２１２】
また、本実施例の更に別の例として、フレーム割当部２２が、１２フレームが入力されるのを待たずに、フレームの割り当てを行うという例がある。この場合、フレーム割当部２２がホスト部２０とアクセラレータ３０とに割り当てる入力フレームの集合は上述した実施例と同様であるとする。これにより、先行するフレームに対する画像処理を早く開始することができる。そのため、処理全体のレイテンシを小さくすることができる。また、この場合、中間結果の転送も、１２フレーム分を待たずに行うといった方式をとることができる。
【０２１３】
また，本実施例の処理選択部８８および処理選択部９８は、通知を受けた際に対応する画像処理部に対し画像処理の実行を指示したが、常に一定の順番で画像処理部の画像処理を実行するように指示してもよい。処理選択部８８および処理選択部９８は、例えば、常に、次の（１）〜（４）の順番を繰り返すように、対応する画像処理部に指示してもよい。
（１）ある入力フレームの集合（集合１と呼ぶ）に対する画像処理１
（２）次の入力フレームの集合（集合２と呼ぶ）に対する画像処理１
（３）集合１に対する画像処理２
（４）集合２に対する画像処理２
なお、通知を受けた順番がこの順番と異なる場合、処理選択部８８および処理選択部９８は，通知を受けても画像処理の実行を指示せずに、順番通りの画像処理を開始できる通知が来るまで待つ。この方法は、何らかの理由で通知の順序が変わった場合にも、常に一定の順序で実行することができる。したがって、常にデータ転送と処理をオーバーラップさせることができるといった効果がある。
【０２１４】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない
（付記１）ホスト部と、アクセラレータ部とを備え、前記ホスト部は、前記ホスト部と前記アクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当手段と、前記データ割当手段の割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定手段と、前記データ割当手段が前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行う第１の処理手段と、を備え、前記アクセラレータ部は、前記データ範囲決定手段が決定した範囲のデータの集合に対し、データ処理を行う第２の処理手段を備えることを特徴とするデータ処理装置。
【０２１５】
（付記２）前記データ範囲決定手段は、前記割当結果と、前記第２の処理手段がデータ処理に使用するデータとに基づき前記データの集合の範囲を決定する、ことを特徴とする付記１に記載のデータ処理装置。
【０２１６】
（付記３）前記第１の処理手段は、複数のデータ処理の夫々を行う複数のサブ処理手段を有し、前記データ範囲決定手段は、前記割当結果、並びに、前記複数のサブ処理手段の少なくとも何れかと前記第２の処理手段とがデータ処理に使用するデータに基づき、前記データの範囲を決定する、ことを特徴とする付記１または付記２に記載のデータ処理装置。
【０２１７】
（付記４）前記第１の処理手段および前記第２の処理手段は、複数のデータ処理の夫々を行う複数のサブ処理手段を夫々有し、前記ホスト部および前記アクセラレータ部は、夫々、前記複数のサブ処理手段の少なくとも何れかの処理後のデータと依存関係を有するサブ処理手段の当該依存関係に基づき、前記ホスト部と前記アクセラレータ部との間で転送するデータの範囲を決定する第１の依存範囲決定手段と第２の依存範囲決定手段とを備え、前記第１の処理手段における、前記依存関係を有するサブ処理手段は、前記データ割当手段が前記ホスト部に割り当てた前記入力データの集合と、前記第２の依存範囲決定手段が決定した範囲のデータとを用いてデータ処理を行い、前記第２の処理手段における、前記依存関係を有するサブ処理手段は、前記データ範囲決定手段が決定した範囲のデータと、前記第１の依存範囲決定手段が決定した範囲のデータとを用いてデータ処理を行う、ことを特徴とする請求項１または２に記載のデータ処理装置。
【０２１８】
（付記５）前記サブ処理手段が依存関係を有する処理後のデータは、当該サブ処理手段がデータ処理を行うデータに対応する入力データとは異なる入力データに対応する処理後のデータであることを特徴とする付記４に記載のデータ処理装置。
【０２１９】
（付記６）前記第１の依存範囲決定手段および前記第２の依存範囲決定手段は、更に、前記サブ処理手段が依存関係を有する入力データの数に基づいて、前記ホスト部と前記アクセラレータ部との間で転送するデータの範囲を決定することを特徴とする付記４または５に記載のデータ処理装置。
【０２２０】
（付記７）前記ホスト部および前記アクセラレータ部は、夫々、受信したデータの種類によって、前記複数のサブ処理部のうち、何れのサブ処理手段でデータ処理を行うかを選択する処理選択手段を更に備えることを特徴とする付記４から６の何れかに記載のデータ処理装置。
【０２２１】
（付記８）前記データ割当手段は、前記第１の処理手段および前記第２の処理手段におけるデータ処理時間と、前記第１の処理手段および前記第２の処理手段で同時に実行可能なデータの数とに基づいて、前記入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てる、ことを特徴とする付記１から付記７の何れかに記載のデータ処理装置。
【０２２２】
（付記９）前記データ割当手段は、前記ホスト部および前記アクセラレータ部のうち、少なくとも一方のノードにおけるサブ処理手段が依存関係を有する処理後のデータが、他方のノードで処理されたデータであるか否かに基づき、当該他方のノードで処理されたデータが少なくなるように、前記入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てる、ことを特徴とする付記４から付記７、並びに、付記４から付記７の何れかを従属する付記８の何れかに記載のデータ処理装置。
【０２２３】
（付記１０）前記データ割当手段は、前記ホスト部および前記アクセラレータ部のうち、一方のノードに、前記入力データの集合に含まれる入力データを入力順に所定の数割り当て、他方のノードに、前記入力データの集合に含まれる入力データのうち、当該所定の数割り当てた入力データ以外の入力データを割り当て、更に、前記他方のノードに、前記入力データの集合の次に前記データ処理装置に入力された入力データの集合に含まれる入力データを入力順に所定の数割り当て、前記一方のノードに、前記次の入力データの集合に含まれる入力データのうち、当該他方のノードに所定の数割り当てた入力データ以外の入力データを割り当てることを特徴とする付記４から付記７、付記９、並びに、付記４から付記７の何れかを従属する付記８の何れかに記載のデータ処理装置。
【０２２４】
（付記１１）前記入力データは、画像フレームであることを特徴とする付記１から付記１０の何れかに記載のデータ処理装置。
【０２２５】
（付記１１）ホスト部とアクセラレータ部とを備えたデータ処理装置のデータ処理方法であって、前記ホスト部と、前記アクセラレータ部との負荷が均衡するように、前記入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当て、前記ホスト部に割り当てた前記入力データの集合に対し、データ処理を行い、割当結果に基づき、前記アクセラレータ部に転送するデータの範囲を決定し、前記決定した範囲のデータの集合に対し、データ処理を行うことを特徴とするデータ処理方法。
【０２２６】
（付記１２）アクセラレータに接続されたデータ処理制御装置であって、該データ処理制御装置と連続して入力される入力データに対しデータ処理を行う前記アクセラレータとの負荷が均衡するように、前記入力データの集合を該データ処理制御装置と前記アクセラレータとに割り当てるデータ割当手段と、前記データ割当手段の割当結果に基づき、前記アクセラレータに転送するデータの範囲を決定するデータ範囲決定手段と、前記データ割当手段が該データ処理制御装置に割り当てた前記入力データの集合に対し、データ処理を行う処理手段と、を備えることを特徴とするデータ処理制御装置。
【０２２７】
（付記１３）ホスト部とアクセラレータ部との負荷が均衡するように、連続して入力される入力データの集合を前記ホスト部と前記アクセラレータ部とに割り当てるデータ割当処理と、前記割当結果に基づき、前記アクセラレータ部に転送するデータの集合の範囲を決定するデータ範囲決定処理と、前記ホスト部に割り当てた前記入力データの集合に対するデータ処理を、前記ホスト部で行う第１の処理と、前記決定された範囲のデータの集合に対するデータ処理を、前記アクセラレータ部で行う第２の処理と、をコンピュータに実行させることを特徴とするプログラム。
【０２２８】
（付記１４）付記１３に記載のプログラムを記録した記録媒体。
【０２２９】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されたものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０２３０】
１  データ処理装置
１０  計算機システム
２０  ホスト部
２１  入力部
２２  データ割当部
２３  データ範囲決定部
２４  入力データ送信部
２５  処理部
２６  出力データ受信部
２７  出力部
３０  アクセラレータ部
３４  入力データ受信部
３５  処理部
３６  出力データ送信部
４５  処理部
５５  処理部
６３  依存範囲決定部
６４  依存データ送受信部
７３  依存範囲決定部
７４  依存データ送受信部
８５  処理部
８８  処理選択部
９５  処理部
９８  処理選択部
９０  外部バス
１０５  処理部
１１５  処理部
１１０  メインＣＰＵ
１２０  メインメモリ
１３０  ＣＰＵ
１４０  メモリ
１５０  通信Ｉ／Ｆ
１６０  通信Ｉ／Ｆ
１８０  内部バス
１９０  内部バス
【図１】
2014222473.tif 000003
【図２】
2014222473.tif 000004
【図３】
2014222473.tif 000005
【図４】
2014222473.tif 000006
【図５】
2014222473.tif 000007
【図６】
2014222473.tif 000008
【図７】
2014222473.tif 000009
【図８】
2014222473.tif 000010
【図９】
2014222473.tif 000011
【図１０】
2014222473.tif 000012
【図１１】
2014222473.tif 000013
【図１２】
2014222473.tif 000014
【図１３】
2014222473.tif 000015
【図１４】
2014222473.tif 000016
【図１５】
2014222473.tif 000017
【図１６】
2014222473.tif 000018
【図１７】
2014222473.tif 000019
【図１８】
2014222473.tif 000020
【図１９】
2014222473.tif 000021
【図２０】
2014222473.tif 000022
【図２１】
2014222473.tif 000023
【図２２】
2014222473.tif 000024
【図２３】
2014222473.tif 000025