次に、本発明を実施する形態について図面を参照して詳細に説明する。以下の実施の形態に記載されている構成は単なる例示であり、本願発明の技術範囲はそれらには限定されない。
<第1の実施形態>
以下、本発明の第1の実施形態について説明する。
まず、図1を参照して、本実施形態における演算装置について説明する。図1は本実施形態における演算装置の機能的な構成を例示する、ブロック図である。
図1に例示するように、本実施形態における演算装置100は、演算制御部101と、演算対象であるデータを保持する第1のメモリ部102と、演算結果を保持する第2のメモリ部103とを備える。また、本実施形態における演算装置100は、入力データと、上記演算制御部101から入力される各種制御信号(例えば、後述するタスクコマンド等)とに基づいて各種演算処理を実行する演算部(演算ブロック)104乃至演算部106を備える。
本実施形態における演算制御部101は、演算部(104乃至106)に対して、あるタスクの実行を指示する制御信号を入力する。より具体的には、演算制御部101は、演算部(104乃至106)における一連の演算処理をタスクとしてまとめて、当該タスクの実行を指定するコマンド(タスクコマンド)を生成する。そして、演算制御部101は、係るタスクコマンドを演算部(104乃至106)に対して入力する。
本実施形態における演算部104乃至演算部105は、上記説明した演算ブロックに相当する。係る演算部(104乃至106)は、特定の処理を実行する専用の演算処理ハードウェア(DSP)等であってもよい。演算部(104乃至106)は、あるいは、汎用のCPU(Central Processing Unit)や、MPU(Micro Processing Unit)であってもよい。係る演算部(104乃至106)においてどのような演算処理を実行するかは、任意に定めてよい。
また、本実施形態における演算装置100は、上記演算制御部101から上記演算部(104乃至106)へ入力される制御信号を蓄えるコマンドバッファ(コマンドバッファ107、コマンドバッファ108、及び、コマンドバッファ109)を備える。係るコマンドバッファ(107乃至109)は、例えば、FIFO(First IN First OUT)構成を実現可能な、任意の一時記憶装置に構成されてもよい。以下、本実施形態においては、係るコマンドバッファ107、コマンドバッファ108、及び、コマンドバッファ109を、それぞれ、FIFO107、FIFO108、及び、FIFO109と称する場合がある。本実施形態は上記には限定されず、コマンドバッファ107乃至コマンドバッファ109は、FIFO構成以外の構成を採用してもよい。
本実施形態におけるコマンドバッファ(107乃至109)は、例えば、周知の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)等)と、当該メモリを制御するコントローラ等とにより実現可能である。当該メモリは、デュアルポートメモリとして構成されてもよい。
また、本実施形態における演算装置100は、各演算部(104乃至106)の間に介在するデータバッファ110、データバッファ111を備える。
データバッファ110は、前段の演算部104の出力側と、後段の演算部105の入力側との間に接続され、演算部104における演算結果を保持する。データバッファ110は、前段の演算部104における演算結果を、後段の演算部105に転送可能である。
データバッファ111は、前段の演算部105の出力側と、後段の演算部106の入力側との間に接続され、演算部105における演算結果を保持する。データバッファ111は、前段の演算部105における演算結果を後段の演算部106に転送可能である。本実施形態におけるデータバッファ110乃至データバッファ111は、例えば、周知の揮発性メモリ(例えばDRAMやSRAM等)と、当該メモリを制御するコントローラ等により実現可能である。当該メモリは、デュアルポートメモリとして構成されてもよい。
また、本実施形態における演算装置100は、FIFO(107乃至109)、及び、データバッファ(110、111)からの各種データ等の出力を制御可能な、タスク制御部(タスク制御部112、タスク制御部113、及び、タスク制御部114)を備える。タスク制御部(112乃至114)の具体的な構成と動作については、後述する。
以下、上記それぞれの構成要素間の接続態様について説明する。
演算制御部101はFIFO(107乃至109)、並びに、タスク制御部(112乃至114)と通信可能に接続される。
演算部104は、FIFO107と通信可能に接続され、FIFO107から各種制御信号(例えば、上記コマンド等)等を取得する(受信する)。
また、演算部104は、第1のメモリ部102と通信可能に接続される。演算部104は、当該第1のメモリ部102から、演算処理の対象となるデータを取得してもよい。
また、演算部104は、データバッファ110と通信可能に接続され、データバッファ110の状態を取得可能である。演算部104は、データバッファ110に対して、演算部104における演算処理の結果等を出力する。
また、演算部104は、タスク制御部(112乃至114)のそれぞれに対して通信可能に接続される。演算部104は、あるタスクに関する演算処理の実行状態を表すステータス情報を、タスク制御部(112乃至114)に通知する。この場合、演算部104は、例えば、当該演算部104と、各タスク制御部(112乃至114)との間を接続する任意の通信バスにおける信号線を用いて、当該ステータス情報を表す信号を通知してもよい。
演算部105は、FIFO108と通信可能に接続される。演算部105は、FIFO108から各種制御信号(例えば、上記コマンド等)を取得する(受信する)。
また、演算部105は、データバッファ110と通信可能に接続され、当該データバッファ110から、演算処理の対象となるデータを取得する。
また、演算部105は、データバッファ111と通信可能に接続され、データバッファ111の状態を取得可能である。演算部105は、データバッファ111に対して、演算部105における演算処理の結果等を出力する。
また、演算部105は、タスク制御部(112乃至114)のそれぞれに対して通信可能に接続される。演算部105は、上記ステータス情報を、タスク制御部(112乃至114)に通知する。この場合、演算部105は、例えば、各タスク制御部(112乃至114)との間を接続する任意の通信バスにおける信号線を用いて、当該ステータス情報を表す信号を通知してもよい。
演算部106は、FIFO109と通信可能に接続される。演算部106は、FIFO109から各種制御信号(例えば、上記コマンド等)を取得する(受信する)。
また、演算部106は、データバッファ111と通信可能に接続され、当該データバッファ111から、演算処理の対象となるデータを取得する。
また、演算部106は、第2のメモリ部103と通信可能に接続され、第2のメモリ部103に対して、演算部106における演算処理の結果等を出力する。
また、演算部106は、タスク制御部(112乃至114)のそれぞれに対して通信可能に接続される。演算部106は、上記ステータス情報を、タスク制御部(112乃至114)に通知する。この場合、演算部106は、例えば、各タスク制御部(112乃至114)との間を接続する任意の通信バスにおける信号線を用いて、当該ステータス情報を表す信号を通知してもよい。
なお、演算部104は、第2のメモリ部103に通信可能に接続されていてもよい。演算部105は、第1のメモリ部102及び第2のメモリ部103に通信可能に接続されていてもよい。演算部106は、第1のメモリ部102に通信可能に接続されていてもよい。
タスク制御部(112乃至114)は、上記したように、演算制御部101と通信可能に接続され、演算制御部101から、各種制御信号(例えば、上記コマンド等)を受け付ける。
また、タスク制御部(112乃至114)は、上記したように各演算部(104乃至106)とそれぞれ通信可能に接続され、各演算部における演算処理のステータス情報を取得する。この場合、タスク制御部(112乃至114)は、各演算部(104乃至106)から上記ステータス情報に関する通知を受け付けてもよく、各演算部(104乃至106)に対して上記ステータス情報を問い合わせてもよい。
タスク制御部112は、FIFO107と通信可能に接続され、FIFO107からの演算部104に対するデータの出力を制御可能である。
タスク制御部113は、FIFO108と通信可能に接続され、FIFO108からの演算部105に対するデータの出力を制御可能である。
また、タスク制御部113は、データバッファ110と通信可能に接続され、データバッファ110からの演算部105に対するデータの出力を制御可能である。タスク制御部113は、データバッファ110に対する演算部105のアクセスを制御してもよい。
タスク制御部114は、FIFO109と通信可能に接続され、FIFO109からの演算部106に対するデータの出力を制御可能である。
タスク制御部114は、データバッファ111と通信可能に接続され、データバッファ111からの演算部106に対するデータの出力を制御可能である。タスク制御部114は、データバッファ111に対する演算部106のアクセスを制御してもよい。
図1に例示する具体例においては、説明の便宜上、第1のメモリ部102と第2のメモリ部103とを、別の機能ブロックとして記述しているが、本実施形態はこれには限定されない。即ち、第1のメモリ部102及び第2のメモリ部103は、書き込み、読み出しポートが個別に存在するメモリ部として一つに統合されていてもよい。また、第1のメモリ部102及び第2のメモリ部103は、調停により書き込み、読み出しが独立して実行可能なメモリを用いて一つに統合されていてもよい。
また、本実施形態において、演算装置100を構成する上記各構成要素の間を接続する通信回線としては、任意の通信バスや、通信ネットワークを適宜採用してよい。係る通信バスや、通信ネットワークについては、周知の技術を採用してよいので、詳細な説明は省略する。
図1は、演算部の数が3個の場合の具体例を例示するが、本実施形態はこれには限定されない。演算部、データバッファ、コマンドバッファ(FIFO)、及びタスク制御部をいくつ設けるかは、演算装置に求められる処理性能や必要とされる演算処理の種類等に応じて、適宜選択されてよい。
次にタスク制御部(112乃至114)について詳細に説明する。図1に示すようにタスク制御部(112乃至114)は、それぞれ、タスク実行判定部(タスク実行判定部112a、タスク実行判定部113a、及び、タスク実行判定部114a)を有する。また、タスク制御部(112乃至114)は、それぞれ、タスク設定テーブル(タスク設定テーブル112b、タスク設定テーブル113b、及び、タスク設定テーブル114b)を有する。
以下、図2を参照して、タスク設定テーブル(112b乃至114b)について説明する。
タスク設定テーブル(112b乃至114b)は、あるタスクに関する演算処理が実行される演算部(104乃至106のいずれか)を特定可能な情報を有する。
より具体的には、タスク設定テーブル(112b乃至114b)には、実行されるタスク毎に、開始演算ノード番号201と、終了演算ノード番号202とが設定される。即ち、タスク設定テーブル(112b乃至114b)には、実行されるタスクの数(タスクの種類の数)に相当する数の開始演算ノード番号201と、終了演算ノード番号202との組が設定される。タスク設定テーブル(112b乃至114b)においては、上記開始演算ノード番号201と、終了演算ノード番号202とが、タスクの種類を識別可能なタスク識別符号203に関連付けて保持(設定)されてもよい。図2に例示する具体例においては、タスクA乃至タスクNについて、それぞれ開始演算ノード番号201と、終了演算ノード番号202とが、設定される。
開始演算ノード番号201は、あるタスクに関する最初の演算処理を実行する演算部(以下、「開始演算部」と称する場合がある)を特定可能な情報である。また、終了演算ノード番号202は、あるタスクに関する最後の演算処理を実行する演算部(以下、「終了演算部」と称する場合がある)を特定可能な情報である。
換言すると、開始演算ノード番号201は、あるタスクに関する演算処理が開始される演算部(開始演算部)を示す情報である。また、終了演算ノード番号は、あるタスクに関する演算処理が終了される演算部(終了演算部)を示す情報である。即ち、開始演算ノード番号により指定された開始演算部から、終了演算ノード番号により指定された終了演算部まで、当該タスクに関する演算処理が実行される。
各演算ノード番号と、実際の演算部(104乃至106)との関係は、例えば、タスク設定テーブル(112b乃至114b)や、タスク制御部(112乃至114)に予め設定されていてもよい。
タスク設定テーブル(112b乃至114b)は、タスク実行判定部(タスク実行判定部112a、タスク実行判定部113a、及び、タスク実行判定部114a)とそれぞれ接続されてもよい。
タスク設定テーブル(112b乃至114b)は、それぞれ開始演算ノード番号201と終了演算ノード番号202とを、タスク実行判定部(112a乃至114a)に提供する。この場合、タスク実行判定部(112a乃至114a)が、それぞれ、タスク設定テーブル(112b乃至114b)を参照してもよい。
タスク設定テーブル(112b乃至114b)は、例えば、タスク実行判定部(112a乃至114a)から上記タスク識別符号を受け付けてもよい。そして、タスク設定テーブル(112b乃至114b)は、当該識別符号に該当するタスクに関する開始演算ノード番号201と終了演算ノード番号202とを、タスク実行判定部(112a乃至114a)に提供してもよい。
各タスク実行判定部(112a乃至114a)は、当該タスク実行判定部を有するタスク制御部(112乃至114)が制御対象とする上記演算部(104乃至106)において、タスクを実行可能であるか否かを判定する。より具体的には、各タスク実行判定部(112a乃至114a)は、制御対象である上記演算部が、タスクを実行可能なタイミングを判定する。
本実施形態において、タスク制御部112が制御対象とする上記演算部は、演算部104である。同様に、タスク制御部113が制御対象とする上記演算部は、演算部105である。同様に、タスク制御部114が制御対象とする上記演算部は、演算部106である。
上記各タスク実行判定部(112a乃至114a)は、各演算部(演算部104乃至106)のステータス情報と、上記タスク設定テーブルから提供された開始演算ノード番号及び終了演算ノード番号とに基づいて、各演算部(演算部104乃至106)がタスクを実行可能なタイミングを判定する。係るタイミングの具体的な判定方法については、後述する。なお、本実施形態における各タスク実行判定部(112a乃至114a)は、タスク制御部(112乃至114)と通信可能に接続されている各構成要素と、通信可能である。
次に、上記のように構成された本実施形態における演算装置100の動作について説明する。以下の説明においては、上記第1のメモリ部102に、演算部(104乃至106)における演算処理の対象となるデータが格納されていることを想定する。
また、以下の説明においては、説明の便宜上、実行されるタスクの数が2つである場合を想定する。2つのタスクのうち、第1のタスク(以下「タスクA」と称する場合がある)は、演算部104、105、及び、106において実行されることを想定する。また、2つのタスクのうち、第2のタスク(以下「タスクB」と称する場合がある)は、演算部105、及び演算部106において実行されることを想定する。
また、以下の説明においては、演算制御部101から出力される、特定のタスクの実行を指定するコマンドを「タスクコマンド」と称する。演算制御部101から出力される、タスクAの実行を指定する上記コマンドを、タスクコマンドAと称する。同様に、演算制御部101から出力される、タスクBの実行を指定する上記コマンドを、タスクコマンドBと称する。
上記タスクコマンドは、図3に例示するように、当該タスクコマンドより実行されるタスク(この場合はタスクAまたはタスクB)を判別可能なタスク識別符号(インデックス等)301を有する。
また、上記タスクコマンドは、当該タスクコマンドにより実行が指定されたタスク(この場合はタスクAまたはタスクB)と実行順序において依存関係がある他のタスクを指定するタスク依存関係情報を有する。より具体的には、タスク依存関係情報は、図3に例示する前タスク依存情報302と、後タスク依存情報303とを含む。
前タスク依存情報302は、上記コマンドにおいて指定されたタスクと、係るタスクより前に実行されるタスクとの間に依存関係が存在するか否かを表す情報である。また、後タスク依存情報は、上記コマンドにおいて指定されたタスクと、係るタスクより後に実行されるタスクとの間に依存関係が存在するか否かを表す情報である。
以下、上記タスクコマンドにおいて指定されたタスクに対して、前タスク依存情報が設定されたタスクを「前依存タスク」と称する場合がある。また、上記コマンドにおいて指定されたタスクに対して、後タスク依存情報が設定されたタスクを「後依存タスク」と称する場合がある。上記タスクコマンドには、タスク識別符号301、前タスク依存情報302、後タスク依存情報303以外に、タスクの実行に関する任意のデータが含まれてもよい。
以下の説明においては、図4または図5に例示するタスクコマンドA、タスクコマンドBが、演算制御部101より出力されること想定とする。
図4に例示する具体例においては、タスクコマンドA(401)には、タスク識別符号として「タスクA」が設定され、タスクコマンドB(402)には、タスク識別符号として「タスクB」が設定される。そして、図4に例示する具体例においては、これらのタスクコマンドA、タスクコマンドBには、タスク依存関係情報が設定されていない。これより、各演算部(104乃至106)は、タスクAに関する演算処理とタスクBに関する演算処理とを独立して実行可能である。
図5に例示する具体例においては、タスクコマンドA(501)には、タスク識別符号として「タスクA」が設定され、タスクコマンドB(502)には、タスク識別符号として「タスクB」が設定される。そして、タスクコマンドAには、後タスク依存情報303として「タスクB」が設定されており、タスクコマンドBには、前タスク依存情報302として「タスクA」が設定されている。この場合、各演算部(104乃至106)は、タスクAに関する演算処理の実行が完了した後に、タスクBに関する演算処理を実行する必要がある。
また、上記タスク設定テーブル(112b乃至114b)には、図6に例示するように、タスクAに対する開始演算ノード番号として、「#0」が、終了演算ノード番号として「#2」が格納されていることを想定する。また、上記タスク設定テーブル(112b乃至114b)には、図6に例示するように、タスクBに対する開始演算ノード番号として、「#1」が、終了演算ノード番号として「#2」が予め格納されていることを想定する。
演算ノード番号「#0」、「#1」、及び、「#2」は、それぞれ、演算部104、演算部105、及び、演算部106を示す。演算ノード番号と、各演算部との関係は、予めタスク設定テーブル(112b乃至114b)や、タスク制御部(112乃至114)に設定されていてもよい。
また、以下においては、開始演算ノード番号に該当する開始演算部から、演算ノード番号が増大する順に、順次終了演算ノード番号に該当する終了演算部まで、タスクに関する演算処理が実行されることを前提とする。即ち、タスクAについては、演算ノード番号が「#0」、「#1」、「#2」の順に、それぞれの演算ノード番号に該当する演算部における処理が実行される。また、タスクBについては、演算ノード番号が、「#1」、「#2」の順に、それぞれの演算ノード番号に該当する演算部における処理が実行される。
それぞれのタスク(タスクA及びタスクB)について、各演算部(104乃至106)において実行される処理の具体的な内容は、適宜定められてよい。
また、以下の説明においては、各演算部(104乃至106)における演算処理の実行状態を表すステータス情報が各演算部(104乃至106)から、それぞれタスク制御部(112乃至114)に入力される。係るステータス情報は、「待機中」、「処理実行中」、及び、「処理終了」を表す情報である。下記説明においては、「待機中」を表すステータス情報に「0」が、「処理実行中」を表すステータス情報に「1」が、「処理終了」を表すステータス情報に「2」が、それぞれ割り当てられることを想定する。なお、本実施形態はこれには限定されず、ステータス情報を表現する形式は、適宜定められてよい。また、本実施形態においては、各演算部(104乃至106)に関して、「待機中」、「処理実行中」、及び、「処理終了」以外の状態を表すステータス情報が、タスク制御部(112乃至114)に入力されてもよい。
以下、主に各タスク制御部(112乃至114)の動作を中心に、本実施形態における演算装置100の動作について説明する。
まず、演算制御部101が、タスクAとタスクBとの実行を指定するコマンド(タスクコマンドA、タスクコマンドB)をそれぞれ生成する。そして、演算制御部101は、タスクコマンドA、及び、タスクコマンドBを、FIFO107乃至109、並びに、タスク制御部(112乃至114)に入力する。
各FIFO107乃至109は、入力されたタスクコマンドA及びタスクコマンドBを保持する。同様に、各タスク制御部(112乃至114)は、入力されたタスクコマンドA及びタスクコマンドBを保持してもよい。
各タスク制御部(112乃至114)は、タスクコマンドAが入力された場合、下記ステップ(図7乃至図9に例示)に従って、各タスク制御部(112乃至114)が制御対象とする演算部(104乃至106)において、タスクAが実行可能であるか否かを判定する。
タスクコマンドAが入力された場合、各タスク制御部(112乃至114)は、それぞれが有するタスク設定テーブル(112b乃至114b)を参照し、タスクAに関して設定された情報を取得する(ステップS701)。より具体的には、各タスク制御部(112乃至114)はそれぞれ、タスク設定テーブル(112b乃至114b)から、タスクAに対する開始演算ノード番号と、終了演算ノード番号とを読み出す。この場合、図6に例示するように、タスクAに対する開始演算ノード番号201には「#0」(演算部104に対応)が、終了演算ノード番号には「#2」(演算部106に対応)が設定されている。
次に、各タスク制御部(112乃至114)は、タスク設定テーブル(112b乃至114b)の設定に基づいて、各演算部(104乃至106)が、タスクコマンドにおいて指定されたタスクの処理に含まれるか否かを確認する(ステップS702)。より具体的には、各タスク制御部(112乃至114)は、例えば、それぞれの制御対象である各演算部(104乃至106)が、タスクAに関する演算処理を実行する演算部として指定されているか否かを確認する。
上記ステップS702における確認の結果、制御対象である演算部がタスク(例えばタスクA)に関する演算処理を実行しない場合(ステップS703においてNO)、各タスク制御部(112乃至114)は、ステップS701に戻って処理を実行する。この場合、例えば、次のタスク(この場合はタスクB)についてステップS701から処理を実行してもよい。また、全てのタスクについて処理を実行した場合は、演算制御部101からの次のタスクコマンドの入力を待ってもよい。
タスクAについては、各演算部(104乃至106)が、タスクA処理に関する演算処理を実行する演算部として指定されている。よって、各タスク制御部(112乃至114)によるステップS703における確認結果は、「YES」(「含まれる」)となる。
上記ステップS703における確認結果がYESの場合、各タスク制御部(112乃至114)は、演算部(104乃至106)のステータス情報を取得する(ステップS704)。この場合、タスクコマンドAが入力された時点では、各演算部(104乃至106)は演算処理を実行していないので、各演算部(104乃至106)のステータス情報は「待機中(0)」を表す。
次に、各タスク制御部(112乃至114)は、ステップS704において取得したステータス情報を用いて、各演算部(104乃至106)がタスクを実行可能であるか否かを判定する(ステップS705)。より具体的には、各タスク制御部(112乃至114)は、それぞれの制御対象である各演算部(104乃至106)が、タスクAに関する演算処理を実行可能であるか否かを判定する。
以下、図8に例示するフローチャートを参照してステップS705における処理について説明する。まず、各タスク制御部(112乃至114)は、それぞれの制御対象である演算部(104乃至106)に関するステータス情報が、「処理実行中(1)」であるか否かを確認する(ステップS801)。この場合、上記ステップS704の結果から、各演算部(104乃至106)に関するステータス情報は「待機中(0)」を表し、ステップS802における確認結果は「NO」となる。ステップS801における確認の結果、ステップS802において「YES」と判定された場合、当該制御対象である演算部は、何らかのタスクに関する演算処理を実行中である。よって、各タスク制御部(112乃至114)は、それぞれの制御対象である演算部(104乃至106)に対するタスクの投入(入力)は不可であると判定する(ステップS809)。
ステップS802においてNOの場合、タスク制御部(112乃至114)は、それぞれの制御対象である演算部(104乃至106)が、タスクコマンドにより指定されたタスクの開始演算部に該当するか否かを確認する(ステップS803)。この場合、タスク制御部(112乃至114)は、それぞれの制御対象である演算部(104乃至106)がタスクAの開始演算部に該当するか否かを判定する。
タスク設定テーブル(112b乃至114b)には、タスクAの開始演算ノード番号が「#0」と設定されている。これより、開始演算部は演算部104である。よって、ステップS802における確認の結果、タスク制御部112は制御対象である演算部104が、タスクAの開始演算部に該当すると判定する(ステップS804においてYES)。
また、この場合、他のタスク制御部113、及び、タスク制御部114は、ステップS803における確認の結果、制御対象である演算部(演算部105、演算部106)が、タスクAの開始演算部に該当しないと判定する(ステップS804においてNO)。
この場合、タスク制御部113及び114は、各演算部(演算部105及び106)の前段の演算部において、タスクAに関する処理が完了しているか否かを確認する(ステップS806)。
より具体的には、タスク制御部113は、例えば、タスク設定テーブル113bを参照することにより、制御対象である演算部105の前段となる演算部(演算部104)を特定する。タスク制御部113は、演算部105の演算ノード番号(「#1」)を参照し、係る演算ノード番号より一つ前の演算ノード番号(「#0」)に対応する演算部104を特定してもよい。
そして、タスク制御部113は、当該演算部104のステータス情報を参照することにより、タスクAに関する演算処理が終了しているか否かを確認する。この場合、演算部104におけるタスクAに関する演算処理は終了していないので、タスク制御部113は、ステップS807においてNOと判定する。
同様に、タスク制御部114は、演算部106に対する前段の演算部(演算部105)において、タスクAに関する演算処理が終了していないので、ステップS807においてNOと判定する。
これにより、タスク制御部113、及び、タスク制御部114は、制御対象である演算部(演算部105及び106)に対するタスクAの投入は不可であると判定する(ステップS809)。
図7に戻って、上記ステップS809の結果、タスク制御部113、及び、タスク制御部114は、演算部105及び106におけるタスクAの処理を抑制する(ステップS710)。
再び図8に戻って、次に、タスク制御部112は、タスクコマンドより指定されたタスク(この場合はタスクA)に関して、依存関係にあるタスクを確認する(ステップS805)。以下、図9を参照して、ステップS805における処理について説明する。
まず、タスク制御部112は、演算制御部101から入力されたタスクコマンド(この場合タスクコマンドA)に設定されたタスク依存関係情報(図3における302、303)を参照する。そして、タスク制御部112は、タスクAと依存関係があるタスクが存在するか否かを確認する(ステップS901)。
この場合、タスクコマンドAには前タスク依存情報が設定されていないことから、タスク制御部112は依存関係にある前依存タスクが無いと判定する(ステップS902においてNO)。
そして、タスク制御部112は、制御対象である演算部104に対してタスク(この場合はタスクA)を投入可能であると判定する(ステップS903)。即ち、タスク制御部112は、制御対象である演算部104においてタスクAを実行可能であると判定する。ステップS902においてYESの場合の動作については、後述する。
再び図7に戻り、ステップS903の判定結果から、タスク制御部112は、ステップS705において、制御対象である演算部104に対してタスクAを投入可能であると判定する(ステップS706においてYES)。
次に、タスク制御部112は、演算部104に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部112は、FIFO107を制御して、FIFO107が保持するタスクコマンドAを演算部104に出力する。タスク制御部112は、必要に応じて、第1のメモリ部102から、タスクAの実行に必要なデータを読み込むよう、演算部104を制御してもよい。
ステップS708における処理の結果、演算部104において、タスクAに関する演算処理が実行される。演算部104における、タスクAに関する演算処理の結果は、データバッファ110に一旦格納される。データバッファ110がほぼ演算部104の演算結果で満たされた場合(空き容量が少なくなった場合)は、データバッファ110が、特定の信号(「AlmostFull」信号)を演算部104に出力する。この場合、演算部104における演算処理はストールする。データバッファ110が「AlmostFull」信号を出力する空き容量のサイズは、適宜設定可能としてよい。
タスク制御部112は、ステップS708の後、次のタスクの制御へ遷移する(ステップS709)。より具体的には、タスク制御部112は、例えば、演算部104のステータス情報を確認し、この場合はタスクAに関する演算処理の終了を待機する。そして、タスク設定テーブル112bと、入力されたタスクコマンドとを参照し、ステップS701から次のタスク(この場合はタスクB)に関する制御を開始する。
演算部104において、タスクAに関する処理が終了すると、演算部104のステータス情報が「処理終了(2)」となる。
上記ステップS710において制御対象である演算部105に対するタスクAの投入を抑制したタスク制御部113は、再びステップS704において、演算部104のステータス情報を取得する。この場合、係るステータス情報は「処理終了(2)」である。
次に、タスク制御部113は、ステップS705(ステップS801乃至S806)の処理を実行する。その結果、タスク制御部113は、前段の演算部104においてタスクAに関する演算処理が終了していることから、演算部105にタスクAを投入可能であると判定する(ステップS808)。即ち、この場合、ステップS706における判定結果がYESとなる。
この際、タスク制御部114は、再びステップS704乃至S706を実行する。この場合、演算部106に対する前段の演算部105において、タスクAに関する演算処理が終了していない。よってタスク制御部114は、演算部106に対するタスクAの投入は不可であると判定する。
次に、タスク制御部113は、制御対象である演算部105に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部113は、FIFO108を制御して、FIFO108が保持するタスクコマンドAを演算部105に出力する。また、タスク制御部113は、データバッファ110を制御して、演算部104の出力(演算結果)を、演算部105に出力する。タスク制御部113は、必要に応じて、第1のメモリ部102から、タスクAの実行に必要なデータを読み込むよう、演算部105を制御してもよい。
ステップS708における処理の結果、演算部105において、タスクAに関する演算処理が実行される。演算部105におけるタスクAに関する演算処理の結果は、データバッファ111に一旦格納される。データバッファ111がほぼ演算部105の演算結果で満たされた場合(空き容量が少なくなった場合)は、データバッファ111が「AlmostFull」の信号を演算部105に出力する。この場合、演算部105における演算処理はストールする。データバッファ111が「AlmostFull」信号を出力する空き容量のサイズは、適宜設定可能である。
タスク制御部113は、ステップS708の後、次のタスクの制御へ遷移する(ステップS709)。より具体的には、タスク制御部113は、例えば、演算部105のステータス情報を確認し、この場合はタスクAに関する演算処理の終了を待機する。そして、タスク設定テーブル113bと、入力されたタスクコマンドとを参照し、ステップS701から次のタスク(この場合はタスクB)に関する制御を開始する。
演算部104におけるタスクAに関する演算処理が終了した際、タスク制御部112は、ステップS701から処理を開始する。この場合、タスク制御部112は、タスク設定テーブル112bを参照する(ステップS701)。タスク制御部112は、タスク設定テーブル112bの内容と、演算制御部101から出力されたタスクコマンドとに基づいて、次のタスクは「タスクB」であると確認する。
次に、タスク制御部112は、制御対象である演算部104が、タスクBの処理に含まれるか確認する(ステップS702)。タスク設定テーブル112bを参照すると、タスクBの開始演算ノード番号は「#1」である。演算ノード番号「#1」は、演算部105を示す。このため、タスク制御部112は、制御対象である演算部104が「タスクB」の処理に含まれないと判定する(ステップS703においてNO)。この場合、タスク制御部112と、演算部104とは、演算制御部101から次のタスクが出力されるまで、待機状態となる。
演算部105においてタスクAに関する処理が終了すると、演算部105のステータス情報が「処理終了(2)」を表すように更新される。
上記ステップS710において制御対象である演算部106に対するタスクAの投入を抑制したタスク制御部114は、再びステップS704において、演算部105のステータス情報を取得する。この場合、係るステータス情報は「処理終了(2)」を表す。
次に、タスク制御部114は、ステップS705(ステップS801乃至S807)の処理を実行する。その結果、タスク制御部114は、前段の演算部105においてタスクAに関する演算処理が終了していることから、演算部106にタスクAを投入可能であると判定する(ステップS808)。
次に、タスク制御部114は、制御対象である演算部106に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部114は、FIFO109を制御して、FIFO109が保持するタスクコマンドAを演算部106に出力する。また、タスク制御部114は、データバッファ111を制御して、演算部105の出力(演算結果)を、演算部106に出力する。タスク制御部114は、必要に応じて、第1のメモリ部102から、タスクAの実行に必要なデータを読み込むよう、演算部106を制御してもよい。
ステップS708における処理の結果、演算部106において、タスクAに関する演算処理が実行される。演算部106におけるタスクAに関する演算処理の結果は、第2のメモリ部103に出力されてもよい。
タスク制御部114は、ステップS708の後、次のタスクの制御へ遷移する(ステップS709)。より具体的には、タスク制御部114は、例えば、演算部106のステータス情報を確認し、この場合はタスクAに関する演算処理の終了を待機する。そして、タスク設定テーブル114bと、入力されたタスクコマンドとを参照し、ステップS701から次のタスク(この場合はタスクB)に関する制御を開始する。
演算部105におけるタスクAに関する演算処理が終了した際、タスク制御部113は、ステップS701から処理を開始する。この場合、タスク制御部113は、タスク設定テーブル113bを参照する(ステップS701)。タスク制御部113は、タスク設定テーブル113bの内容と、演算制御部101から出力されたタスクコマンドとに基づいて、次のタスクは「タスクB」であると確認する。
次に、タスク制御部113は、制御対象である演算部105が、タスクBの処理に含まれるか否かを確認する(ステップS702)。タスク設定テーブル113bを参照すると、タスクBの開始演算ノード番号は「#1」である。演算ノード番号「#1」は、演算部105を示す。このため、タスク制御部113は、制御対象である演算部105が「タスクB」の処理に含まれると判定する(ステップS703においてYES)。
次に、タスク制御部113は、ステップS704及びS705を実行する。この際、タスク制御部113は、ステップS803において、制御対象である演算部105が、タスクBの開始演算部であることを確認する(ステップS804においてYES)。
次に、タスク制御部113は、ステップS805を実行する。この際、タスク制御部113は、タスクコマンドBのタスク依存関係情報(図3における302、303)を参照し、依存関係があるタスクが存在するか否か確認する(ステップS901)。
まず、図4に示すタスクコマンドA(401)、タスクコマンドB(402)のように、タスク依存関係情報が設定されていない場合について説明する。この場合、タスクBとタスクAは独立して実行可能である。この場合、タスク制御部113は依存関係にあるタスクが無いと判定する(ステップS902においてNO)。
そして、タスク制御部113は、制御対象である演算部105に対してタスク(この場合はタスクB)を投入可能(即ち、演算部105がタスクBを実行可能)であると判定する(ステップS903)。
この場合、タスク制御部113は、制御対象である演算部105に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部113は、FIFO108を制御して、FIFO108が保持するタスクコマンドBを演算部105に出力する。タスク制御部113は、必要に応じて、第1のメモリ部102から、タスクBの実行に必要なデータを読み込むよう、演算部105を制御してもよい。
ステップS708における処理の結果、演算部105において、タスクBに関する演算処理が実行される。以降の処理は、上記説明した演算部105におけるタスクAに関する演算処理と同様である。
次に、仮に、図5に示すタスクコマンドA(501)、タスクコマンドB(502)のように、タスク依存関係情報が設定された場合について説明する。この場合、タスクBとタスクAとの間に依存関係が存在することから、タスクBは、タスクAの終了後に実行される必要がある。この場合、タスク制御部113がステップS901を実行した結果、ステップS902における確認結果がYESとなる。
タスク制御部113は、タスク設定テーブル113bを参照し、タスクBと依存関係があるタスク(タスクA)の終了演算部を特定する(ステップS904)。タスクAの終了演算部は、演算部106(終了演算ノード番号が「#2」)である。
次に、タスク制御部113は、ステップS904において特定した演算部(演算部106)のステータス情報を確認する。そして、当該演算部106のステータス情報に基づいて、演算部106において、タスクBと依存関係のあるタスク(タスクA)に関する演算処理が終了しているか確認する(ステップS905)。
この段階では、上記の通り、演算部105においてタスクAに関する演算処理が終了しているものの、演算部106におけるタスクAに関する処理は終了していない場合がある。演算部106におけるタスクAに関する処理は終了していない場合、ステップS906における確認結果はNOとなる。この場合、タスク制御部113は、演算部105に対するタスクBの投入は不可であると判定する(ステップS907)。この場合、タスク制御部113は、タスクBの実行を抑制する(ステップS710)。より具体的には、タスク制御部113は、例えば、FIFO108からのタスクコマンドBの出力等を抑制してもよい。
次に、演算部106においてタスクAに関する処理が終了すると、演算部106のステータス情報が「処理終了(2)」となる。
再び、図5に示すタスクコマンドA(501)、タスクコマンドB(502)のように、タスク依存関係情報が設定された場合について説明する。
上記ステップS710において、制御対象である演算部106に対するタスクBの投入を抑制したタスク制御部113は、ステップS704において、演算部106のステータス情報を取得する。この場合、係るステータス情報は「処理終了(2)」である。
次に、タスク制御部113は、ステップS705(ステップS801乃至S805)の処理を実行する。その結果、タスク制御部113は、タスクBと依存関係のあるタスクAに関する演算処理が終了している(ステップS901乃至ステップS905)と判定する。これより、タスク制御部113は、演算部105にタスクBを投入可能であると判定する(ステップS906においてYES)。即ち、この場合、ステップS706における判定結果がYESとなる。
次に、タスク制御部113は、制御対象である演算部105に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部113は、FIFO108を制御して、FIFO108が保持するタスクコマンドBを演算部105に出力する。また、タスク制御部113は、データバッファ110を制御して、データバッファ110の内容を、演算部105に出力してもよい。タスク制御部113は、必要に応じて、第1のメモリ部102から、タスクBの実行に必要なデータを読み込むよう、演算部105を制御してもよい。
ステップS708における処理の結果、演算部105において、タスクBに関する演算処理が実行される。演算部105におけるタスクBに関する演算処理の結果は、データバッファ111に一旦格納される。以下の処理は、上記説明した演算部105におけるタスクAの処理と同様である。
演算部106におけるタスクAに関する演算処理が終了した際、タスク制御部114は、ステップS701から処理を開始する。この場合、タスク制御部114は、タスク設定テーブル114bを参照する(ステップS701)。タスク制御部114は、タスク設定テーブル114bの内容と、演算制御部101から出力されたタスクコマンドに基づいて、次のタスクは「タスクB」であると確認する。
次に、タスク制御部114は、制御対象である演算部106が、タスクBの処理に含まれるか確認する(ステップS702)。タスク設定テーブル112bを参照すると、タスクBの終了演算ノード番号は「#2」である。このため、タスク制御部114は、制御対象である演算部106が「タスクB」の処理に含まれると判定する(ステップS703においてYES)。
次に、タスク制御部114は、ステップS704及びS705を実行する。この際、タスク制御部114は、ステップS803において、制御対象である演算部106がタスクBの開始演算部では無いことを確認する(ステップS804においてNO)。
この場合、タスク制御部114及は、演算部106の前段の演算部105において、タスクBに関する処理が完了しているか確認する(ステップS806)。この場合、演算部105におけるタスクBに関する演算処理は終了していないので、タスク制御部114は、ステップS807においてNOと判定する。これにより、タスク制御部114は、制御対象である演算部106に対するタスクBの投入は不可であると判定する(ステップS809)。
図7に戻って上記ステップS809の結果、演算部106におけるタスクBの処理は抑制される(ステップS710)。
次に、演算部105においてタスクBに関する処理が終了すると、演算部105のステータス情報が「処理終了(2)」となる。
上記ステップS710において制御対象である演算部106に対するタスクBの投入を抑制したタスク制御部114は、再びステップS704において、演算部105のステータス情報を取得する。この場合、係るステータス情報は「処理終了(2)」である。
次に、タスク制御部114は、ステップS705(ステップS801乃至S807)の処理を実行する。その結果、タスク制御部114は、前段の演算部105においてタスクBに関する演算処理が終了していることから、演算部106にタスクBを投入可能であると判定する(ステップS808)。
次に、タスク制御部114は、制御対象である演算部106に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部114は、FIFO109を制御して、FIFO109が保持するタスクコマンドBを演算部106に出力する。また、タスク制御部114は、データバッファ111を制御して、演算部105の出力(演算結果)を、演算部106に出力する。タスク制御部114は、必要に応じて、第1のメモリ部102から、タスクBの実行に必要なデータを読み込むよう、演算部106を制御してもよい。
ステップS708における処理の結果、演算部106において、タスクBに関する演算処理が実行される。演算部106におけるタスクBに関する演算処理の結果は、第2のメモリ部103に出力されてもよい。
演算部106において、タスクBの処理が終了すると、演算部106のステータス「処理終了(2)」となり、演算制御部101から投入されたタスクA、タスクBに関する演算処理が終了する。
以上説明したように、本実施形態によれば、演算装置100において、各演算部(104乃至106)が効率的に稼働するようにタスクの実行が制御される。ここで、係る演算装置100は、複数の演算部(104乃至106)が、データバッファ(110乃至111)を介してパイプライン状に接続された構成を有する。即ち、本実施形態における演算装置100は、複数の演算部(104乃至106)を用いてパイプライン的に演算処理を実行するタスクを実行する際、各演算部におけるアイドル状態やレイテンシを削減することが可能である。これにより、本実施形態における演算装置100は、パイプラインのオーバーヘッドを低減可能である。
より具体的には、本実施形態における演算装置100は、特定のタスクに関する全ての演算処理の終了を待たずに、一部の演算部において、当該特定のタスクと依存関係の無い他のタスクに関する演算処理を実行可能である。
上記説明した具体例においては、演算装置100は、例えば、タスクAとタスクBとの間に依存関係が存在しない場合、タスクAの処理が終了する前に、一部の演算部においてタスクBに関する演算処理を実行可能である。より具体的には、演算装置100は、演算部106におけるタスクAに関する演算処理が終了する前に、一部の演算部(例えば、演算部105)において、タスクBに関する演算処理を実行可能である。この場合、演算装置100は、図18に例示するように、タスクAに関する演算処理が完了する前に、タスクBに関する演算処理を開始可能である。これより、本実施形態における演算装置100は、全体の処理時間を短縮可能であり、また、各演算部がアイドル状態となる期間を短くすることができる。
また、本実施形態における各タスク制御部(112乃至114)は、各演算部(104乃至106)においてタスクに関する演算処理が実行されるか否かを制御する。即ち、各タスク制御部が詳細なタスク制御を実行されることから、上位の制御系(例えば、演算制御部101等)におけるタスク制御に関する負荷が増大しない。
以上より、本実施形態における演算装置100は、タスクに関する演算処理の効率を向上し、演算処理を高速化可能である。その理由は、各演算部(104乃至106)の実行状態(ステータス)と、各タスクの設定情報(各タスク設定テーブル(112b乃至114b)、及びタスクコマンド等)とに基づいて、演算部毎に、タスクの実行が制御されるからである。
<第2の実施形態>
次に、本願発明の第2の実施形態について説明する。以下の説明においては、本実施形態に係る特徴的な構成を中心に説明する。上述した第1の実施形態と同様な構成に関する重複する説明は省略される。
本実施形態は、上記第1の実施形態と、各タスク設定テーブル(112b乃至114b)に設定される情報の種類のみ異なり、その他は同様である。このため、本実施形態における演算装置100の構成は、上記第1の実施形態における演算装置100と同様としてよい。
上記第1の実施形態においては、図2に例示するように、タスク設定テーブル(112b乃至114b)には、実行されるタスク毎に、各タスクに対する開始演算ノード番号201と、終了演算ノード番号202とが設定される。
これに対して、本実施形態におけるタスク設定テーブル(112b乃至114b)には、図10に例示するように、実行されるタスク毎に、各タスクに対する開始演算ノード番号201と、各タスクが使用する演算部の個数を表す使用演算ノード数1002とが設定される。
各タスク制御部は、特定のタスクに関して、上記開始演算ノード番号201と、使用演算ノード数1002とに基づいて、当該タスクの終了演算部を特定する。この場合、各タスク制御部は、上記開始演算ノード番号201と、使用演算ノード数1002とに基づいて、上記第1の実施形態における終了演算ノード番号を算出してもよい。
本実施形態における各タスク制御部は、上記説明したステップS904において、上記開始演算ノード番号201と、使用演算ノード数1002とに基づいて、当該タスクの終了演算部を特定する。その他の動作については、上記第1の実施形態と同様である。
以上より、本実施形態における演算装置100は、上記第1の実施形態における演算装置100と同様の効果を奏する。また、本実施形態における演算装置100は、終了演算部を直接指定する必要が無く、使用する演算部の個数のみを指定することにより、各演算部においてタスクに関する演算処理の実行を制御可能である。
<第3の実施形態>
次に、本願発明の第3の実施形態について説明する。以下の説明においては、本実施形態に係る特徴的な部分を中心に説明する。上述した各実施形態と同様な構成についての重複する説明は省略される。
以下、本実施形態について、図11を参照して説明する。
本実施形態は、上記説明した第1の実施形態の変形例である。上記第1の実施形態における演算装置100と、本実施形態における演算装置1100との差分は、データバッファ(図11における1104、1105)と、タスク制御部(図11における1101、1102、及び、1103)とが接続されない点である。
上記第1の実施形態においては、タスク制御部(例えば、タスク制御部113)が、データバッファ(例えばデータバッファ110)を制御することにより、各演算部(例えば演算部105)におけるタスクの実行に必要なデータがデータバッファから出力される。または、タスク制御部(例えば、タスク制御部113)が、各演算部におけるタスクの実行に必要なデータが格納されたデータバッファの領域(アドレス等)を各演算部に通知することにより、各演算部が、係る領域からデータを取得する。
これに対して、本実施形態における演算装置1100は、タスク制御部(1101乃至1103)は、データバッファ(1104、1105)を直接的に制御しない点において、上記第1の実施形態における演算装置100と異なる。
本実施形態においては、各データバッファ(1104、1105)に接続された前段の演算部(104、105)から、特殊なコマンドがデータバッファに出力される。
具体的には、データバッファ1104の前段の演算部104は、あるタスクに関する処理を終了した際に、特殊コマンド「Sync」をデータバッファ1104に出力(投入)する。同様に、データバッファ1105の前段の演算部105は、あるタスクに関する処理を終了した際に、特殊コマンド「Sync」をデータバッファ1105に出力(投入)する。
各データバッファ(1104、1105)は、特殊コマンド(「Sync」)の投入より前に投入されたデータが全て読み出されるまで、特殊コマンドが投入された後に投入されたデータの読み出しを禁止する。より具体的には、本実施形態においては、図12に例示するように、演算部105は、前段のデータバッファ1104から、特殊コマンド(「Sync」)が投入されるより前に投入されたデータを取得可能である。図12には例示していないが、演算部106についても同様である。
上記のように構成された本実施形態における演算装置1100は、上記説明した第1の実施形態と同様の演算処理を実行可能である。その理由は、各データバッファ(1104,1105)が、特殊コマンドが投入された後に投入されたデータへのアクセスを禁止することにより、タスク間におけるデータへのアクセスを排他制御することが可能であるからである。
なお、上記説明した特殊コマンドは「Sync」に限定されない。本実施形態における演算装置1100は、「Sync」以外の任意の識別符号をコマンドとして採用してよい。
<第4の実施形態>
次に、本願発明の第4の実施形態について説明する。以下の説明においては、本実施形態に係る特徴的な部分を中心に説明する。上述した各実施形態と同様な構成についての重複する説明は省略される。
以下、図13を参照して、本実施形態における演算装置1300について説明する。
演算制御部1301は、コマンドバッファ1302と接続されている。以下においてコマンドバッファ1302を、「FIFO1302」と称する場合がある。FIFO1302は、演算部1307と接続されている。他の演算部(1308、1309)に対しては、演算制御部1301から制御信号(タスクコマンド)が直接的には入力されない。
演算部(演算部1307、演算部1308、及び、演算部1309)は、あるタスクに関する演算処理を終了する際、当該タスクに関するタスクコマンドを、後段の演算部に受け渡す(転送する)。即ち、本実施形態においては、後段の演算部に対して、前段の演算部から、タスクコマンドがデータバッファを介して転送される。
より具体的には、演算部1308に対しては、前段の演算部1307から、データバッファ1305を介して、タスクコマンドが受け渡される(転送される)。また、演算部1309に対しては、前段の演算部1308から、データバッファ1306を介して、タスクコマンドが受け渡される。本実施形態における演算部(1307乃至1309)のその他の構成は、上記各実施形態と同様としてよい。
本実施形態におけるタスク制御部1303は、制御対象である演算部1307におけるステータスを確認して、後段の演算部1308に対してタスクを投入可能か否か判断する。同様に、本実施形態におけるタスク制御部1304は、制御対象である演算部1308におけるステータスを確認して、後段の演算部1309に対してタスクを投入可能か否か判断する。
本実施形態においては、開始演算部が演算部1307に固定される。このため、各タスク制御部(1303、1304)が有するタスク設定テーブル(1303b、1304b)には、終了演算ノード番号、あるいは、使用演算ノード数のみが格納されてもよい。
本実施形態におけるデータバッファ(1305、1306)は、上記各実施形態におけるデータバッファと同様としてもよい。
以下、上記のように構成された本実施形態における演算装置1300の動作について説明する。
まず、第1のメモリ部102には、演算部(1307乃至1309)における演算処理の対象となるデータが格納されていることを想定する。
説明の便宜上、実行されるタスクは2つ(タスクA、タスクB)とする。係る2つのタスクの内、第1のタスク(タスクA)は、演算部1307、演算部1308、及び、演算部1309において実行される。第2のタスク(タスクB)は、演算部1307、演算部1308、及び、演算部1309において実行される。
タスクA、及び、タスクBは、任意の演算処理を実行してよい。タスクAに関するコマンドをタスクコマンドA、タスクBに関するコマンドをタスクコマンドBとする。タスクコマンドA、タスクコマンドBは、上記第1の実施形態と同様、タスク識別符号301と、前タスク依存情報302と、後タスク依存情報303とを含む。
各タスク制御部(1303、1304)におけるタスク設定テーブル(1303b、1304b)には、タスクA、及び、タスクBに対する終了演算ノード番号(図2に例示する符号202)として「#2」が格納されている。終了演算ノード番号の「#2」は、演算部1309を表す。
上記各実施形態と同様、各演算部(1307乃至1309)のステータスとして、待機中(「0」)、処理実行中(「1」)、処理終了(「2」)のいずれかが、各タスク制御部(1303、1304)に入力される。
以下、各演算部(1307乃至1309)におけるタスクA、及び、タスクBの具体的な処理について、図14及び図15に例示するフローチャートを参照して説明する。
図14に例示するフローチャートには、図7に例示するフローチャートに対して、本実施形態におけるタスク制御部(1303、1304)に特有の処理が追加されている。上記第1の実施形態における演算装置100と同様の処理については、上記第1の実施形態において説明したフローチャート(図7乃至図9)を適宜参照して説明する。
まず、演算制御部1301が、タスクA、及び、タスクBの実行を指示するコマンド(タスクコマンドA、タスクコマンドB)を生成する。そして、生成されたタスクコマンドが、FIFO1302、タスク制御部1303、及び、タスク制御部1304に入力される。
FIFO1302にタスクコマンドA、タスクコマンドBが入力された場合、FIFO1302は、それらのタスクコマンドを蓄積する。
タスクコマンドAが入力された場合、タスク制御部(1303、1304)は、まず、上記第1の実施形態におけるタスク制御部(112、113、及び、114)と同様、投入されたタスク(タスクA)の実行可否を判定する。
タスクコマンドAが投入されると、タスク制御部(1303、1304)は、タスク設定テーブル(1303b、1304b)を参照する(ステップS701)。より具体的には、タスク制御部(1303、1304)は、タスク設定テーブル(1303b、1304b)から、終了演算ノード番号(この場合は「#2」)を読み出す。本実施形態においては、上記したように、タスクA、及び、タスクBに対する開始演算部は演算部1307である(開始演算ノード番号は「#0」である)。
そして、タスク制御部(1303、1304)は、制御対象である演算部がタスク(タスクA、タスクB)の処理に含まれるか確認する(ステップS702)。タスク制御部(1303、1304)は、タスク設定テーブル(1303b、1304b)を参照することにより、タスクA、及び、タスクBに関する処理を実行する演算部を表す演算ノード番号を確認してもよい。
この場合、タスクA、タスクB共に全ての演算部(1307乃至1309)を使用して処理されることから、ステップS703における確認結果はYESとなる。
次に、タスク制御部(1303、1304)は、各演算部(1307乃至1309)のステータス(ステータス信号)を取得する。タスク制御部(1303、1304)は、取得したステータスを元に、各演算部(1307乃至1309)における演算処理の状態を確認する(ステップS704)。タスク制御部(1303、1304)は、上記確認した演算ノード番号に相当する演算部に対するステータス信号を確認する。
次に、タスク制御部(1303、1304)は、取得したステータスに基づいて、制御対象である演算部において、タスク(タスクA)に関する演算処理を実行可能か否か判定する(ステップS705)。
タスクコマンドAが投入されたタイミングでは、演算部(1307乃至1309)のステータスは待機中(「0」)である。よって、これらの演算部は、タスクAに関する演算処理を実行可能である。
以下、この場合における、タスク制御部1303の動作について説明する。
開始演算ノード番号の値が「#0」であることから、タスク制御部1303は、演算部1307においてタスクAに関する演算処理を実行可能であると判定する(ステップS706においてYES)。
次に、タスク制御部1303は、演算部1307に対してタスク実行制御信号(タスクコマンド)及び、タスク実行に必要なデータを出力する(ステップS708)。より具体的には、タスク制御部1303は、FIFO1302を制御して、FIFO1302が保持するタスクコマンドAを演算部1307に出力する。タスク制御部1303は、必要に応じて、第1のメモリ部102から、タスクAの実行に必要なデータを読み込むよう、演算部1307を制御してもよい。ステップS708における処理の結果、演算部1307において、タスクAに関する演算処理が実行される。
演算部1307における、タスクAに関する演算処理の結果は、データバッファ1305に保持される。データバッファ1305がほぼ演算部1307の演算結果で満たされた場合(空き容量が少なくなった場合)は、データバッファ1305は、「AlmostFull」の信号を演算部1307に出力する。この場合、演算部1307における演算処理はストールする。データバッファ1305が「AlmostFull」信号を出力する空き容量は、適宜設定可能である。
以下、演算部1307における演算処理について図15を参照して説明する。
まず、FIFO1302からタスクコマンド(タスクコマンドA)が演算部1307に入力された際、演算部1307は、ステータスを実行中(「1」)に変更する(ステップS1501)。係るステータスの変更は、後述するステップS1503において実行してもよい。
次に、演算部1307は、タスクコマンドにより指定されたタスク(タスクA)の実行に必要なデータを読み出す(ステップS1502)。この場合、演算部1307は、第1のメモリ部102から、タスクAの実行に必要なデータを読み出してもよい。
次に、演算部1307は、タスクコマンド(タスクコマンドA)により指定されたタスクに関する演算処理を実行する(ステップS1503)。
タスクコマンド(タスクコマンドA)により指定されたタスクに関する演算処理が終了する際、演算部1307は、データバッファ1305に対して、タスクコマンドを発行する(ステップS1504)。この場合、演算部1307は、データバッファ1305に対して、タスクコマンドAを出力してもよい。
また、タスクに関する演算処理が終了する際、演算部1307は、ステータスを処理終了(「2」)に変更する(ステップS1505)。この場合、演算部1307は、係るステータスを、タスク制御部(1303、1304)に通知してもよい。
次に、タスク制御部1303は、後段の演算部1308に対するタスクAの投入を制御する(ステップS1401)。
より具体的には、演算部1307のステータスが処理終了(「2」)となると、タスク制御部1303は、後段の演算部1308に対して、タスクAを投入可能であると判定する。
この場合、タスク制御部1303は、タスクコマンドAを演算部1308に出力するよう、データバッファ1305を制御する。なお、タスク制御部1303は、データバッファ1305からタスクコマンドA及び演算部1307における演算部結果を取得するよう、演算部1308を制御してもよい。
データバッファ1305からタスクコマンドAが演算部1308に投入されると、演算部1308において、タスクAに関する演算処理が実行される。演算部1308における演算処理の結果は、データバッファ1306に格納される。データバッファ1306がほぼ演算部1308の演算結果で満たされた場合(空き容量が少なくなった場合)は、データバッファ1306は、「AlmostFull」の信号を演算部1308に出力する。この場合、演算部1308における演算処理はストールする。
次に、タスク制御部1303は、ステップS709から処理を続行し、ステップS701乃至S705を実行する。そして、タスク制御部1303は、タスクBが実行可能であるか否かを判定する(ステップS705)。
仮に、タスクコマンドAにおいて、タスクAに対する後タスク依存情報(タスクB)が設定されており、タスクコマンドBにおいて、タスクBに対する前タスク依存情報(タスクA)が設定されている場合、タスクAの演算結果がタスクBにおいて使用される。
この場合、タスク制御部1303は、依存関係があるタスク(タスクBに対するタスクA)が終了していないことから、演算部1307に対するタスクBの投入は不可であると判定する(ステップS706においてNO)。即ち、この場合、演算部1307におけるタスクBに関する演算処理の実行は、タスクAの完了まで抑制される(ステップS710)。
また、仮に、タスクコマンドAに後タスク依存情報が設定されておらず、タスクコマンドBに前タスク依存情報が設定されていない場合、タスクAとタスクBとは独立して処理可能である。
この場合、タスク制御部1303は、上記第1の実施形態において説明したように、演算部1307に対してタスクBを投入可能であると判定する(ステップS706においてYES)。タスク制御部1303は、ステップS708から処理を続行し、演算部1307に対してタスクBが投入される。
タスク制御部1303は、FIFO1302を制御して、FIFO1302が保持するタスクコマンドBを演算部1307に出力する。タスク制御部1303は、必要に応じて、第1のメモリ部102から、タスクBの実行に必要なデータを読み込むよう、演算部1307を制御してもよい。ステップS708における処理の結果、演算部1307において、タスクBに関する演算処理が実行される。この場合、演算部1307は、ステップS1501乃至ステップS1505を実行することにより、タスクBに関する演算処理を実行する。
演算部1307における演算処理の結果は、データバッファ1305に格納される。データバッファ1305がほぼ演算部1307の演算結果で満たされた場合(空き容量が少なくなった場合)は、データバッファ1305は、「AlmostFull」の信号を演算部1307に出力する。この場合、演算部1307における演算処理はストールする。
再度、演算部1308におけるタスクAに関する演算処理に戻って説明する。
演算部1308は、まず、ステータスを実行中(「1」)に変更する(ステップS1501)。係るステータスの変更は、後述するステップS1503において実行してもよい。
次に、演算部1308は、データバッファ1305から取得したタスクコマンドにより指定されたタスク(タスクA)の実行に必要なデータを読み出す(ステップS1502)。この場合、演算部1307は、第1のメモリ部102あるいはデータバッファ1305から、タスクAの実行に必要なデータを読み出してもよい。
次に、演算部1308は、タスクコマンド(タスクコマンドA)により指定されたタスクに関する演算処理を実行する(ステップS1503)。
タスクコマンド(タスクコマンドA)により指定されたタスクに関する演算処理が終了する際、演算部1308は、データバッファ1306に対して、タスクコマンドを発行する(ステップS1504)。この場合、演算部1308は、データバッファ1306に対して、タスクコマンドAを出力してもよい。
また、タスクに関する演算処理が終了する際、演算部1308は、ステータスを処理終了(「2」)に変更する(ステップS1505)。この場合、演算部1308は、係るステータスを、タスク制御部(1303、1304)に通知してもよい。
次に、タスク制御部1304は、後段の演算部1309に対するタスクAの投入を制御する(ステップS1401)。
より具体的には、演算部1308のステータスが処理終了(「2」)となると、タスク制御部1304は、後段の演算部1309に対して、タスクAを投入可能であると判定する。
タスク制御部1304は、タスクコマンドAを演算部1309に出力するよう、データバッファ1306を制御する。なお、この場合、タスク制御部1304は、データバッファ1306からタスクコマンドA及び演算部1308における演算部結果を取得するよう、演算部1309を制御してもよい。
データバッファ1306からタスクコマンドAが演算部1309に投入されると、演算部1309において、タスクAに関する演算処理が実行される。
再度、このタイミングにおけるタスク制御部1303の処理に戻って説明する。
上記説明したように、タスクAとタスクBとの間に依存関係が無い場合、このタイミングにおいて、演算部1307におけるタスクBの処理が完了している可能性がある。この場合、演算部1307は、データバッファ1305にタスクコマンドBを出力する。そして、演算部1307は、自身のステータスを処理終了(「2」)に変更する。
この場合、タスク制御部1303は、ステップS1401において、後段の演算部1308に対するタスクBの投入を制御する(ステップS1401)。
より具体的には、演算部1307のステータスが処理終了(「2」)となると、タスク制御部1303は、後段の演算部1308に対して、タスクBを投入可能であると判定する。
タスク制御部1303は、タスクコマンドBを演算部1308に出力するよう、データバッファ1305を制御する。なお、この場合、タスク制御部1303は、データバッファ1305からタスクコマンドB及び演算部1307における演算部結果を取得するよう、演算部1308を制御してもよい。
データバッファ1305からタスクコマンドBが演算部1308に投入されると、演算部1308において、タスクBに関する演算処理が実行される。演算部1308における演算結果は、データバッファ1306に格納される。データバッファ1306がほぼ演算部1308の演算結果で満たされた場合、データバッファ1306は、「AlmostFull」の信号を演算部1308に出力する。この場合、演算部1308はストールする。
演算部1309におけるタスクAの処理に戻って説明する。
演算部1309は、タスクAに関する演算処理を実行する(ステップS1501乃至S1505)。そして、演算部1309は、自身のステータスを処理終了(「2」)に変更する。
ここで、タスクAとタスクBとの間に依存関係が存在する場合、タスク制御部1303は、ステップS710において、演算部1307におけるタスクBの実行を抑制している。
演算部1309のステータスが処理終了(「2」)になった場合、タスクBと依存関係にあるタスクAに関する処理が終了する。よって、この場合、タスク制御部1303は、演算部1307においてタスクBに関する演算処理を実行可能と判定する(ステップS706においてYES)。タスク制御部1303は、ステップS708から処理を続行し、演算部1307に対してタスクBが投入される。
この場合、タスク制御部1303は、FIFO1302を制御して、FIFO1302が保持するタスクコマンドBを演算部1307に出力する。タスク制御部1303は、必要に応じて、第1のメモリ部102から、タスクBの実行に必要なデータを読み込むよう、演算部1307を制御してもよい。ステップS708における処理の結果、演算部1307において、タスクBに関する演算処理が実行される。この場合、演算部1307は、ステップS1501乃至ステップS1505を実行することにより、タスクBに関する演算処理を実行する。以下、上記説明と同様にして、演算部1308、演算部1309においてタスクBに関する演算処理が実行される。
一方、タスクAとタスクBとの間に依存関係が存在しない場合、このタイミングにおいて、演算部1308におけるタスクBの処理が完了している可能性がある。この場合、演算部1308は、データバッファ1306にタスクコマンドBを出力する。そして、演算部1308は、自身のステータスを処理終了(「2」)に変更する。
この場合、タスク制御部1304は、ステップS1401において、後段の演算部1309に対するタスクBの投入を制御する(ステップS1401)。以下、演算部1309において、タスクBの演算処理が実行される。
以上のように構成された本実施形態における演算装置1300は、タスクの実行を開始する先頭の演算部が固定されるものの、より少ない数のタスク制御部(1303、1304)により、各演算部(1307乃至1309)を制御可能である。また、本実施形態における演算装置1300は、コマンドバッファ(FIFO)1302の数も削減可能である。よって、このため、本実施形態における演算装置1300は、よりシンプルな構成により、上記各実施形態における演算装置と同様の効果を奏することが可能である。
<第5の実施形態>
次に、本願発明の第5の実施形態について、図16、及び、図17を参照して説明する。
図16に例示するように、本実施形態における演算装置1600は、演算制御部1601と、複数の演算部(図16における1602、1603、及び、1604)と、データバッファ(図16における1608、1609)と、タスク制御部(図16における1610、1611、及び、1612)と、を備える。本実施形態における演算装置1600は、コマンドバッファ(図16における1605、1606、及び、1607)を更に備えてもよい。以下、各構成要素について説明する。
演算部(1602乃至1604)は、それぞれデータに対する特定の演算処理を実行する、演算処理装置である。演算部(1602乃至1604)において実行される係る演算処理は任意であり、例えば、FFTやフィルタリング等、各種信号処理に関する演算でもよい。演算部(1602乃至1604)は、上記第1の実施形態における演算部(104、105、及び、106)と同様としてもよい。
データバッファ(1608、1609)は、複数の上記演算部の内、第1の演算部(前段の演算部)と、第2の演算部(後段の演算部)との間に接続される。データバッファ(1608、1609)は、上記第1の演算部から出力されるデータと、上記第2の演算部に入力されるデータとを保持可能である。データバッファ(1608、1609)は、例えば、上記第1の演算部における出力側と、第2の上記演算部における入力側との間に接続されてもよい。
より具体的には、データバッファ1608は、演算部1602と、演算部1603との間に接続され、演算部1602からの出力データと、演算部1603に対する入力データとを保持する。この場合、例えば、演算部1602が第1の演算部、演算部1603が第2の演算部に相当すると考えられる。
同様に、データバッファ1609は、演算部1603と、演算部1604との間に接続され、演算部1603からの出力データと、演算部1604に対する入力データとを保持する。この場合、例えば、演算部1603が第1の演算部、演算部1604が第2の演算部に相当すると考えられる。
上記したように、あるデータバッファ(例えば、1608)に対する第2の演算部(例えば、演算部1603)が、他のデータバッファ(例えば、1609)に対する第1の演算部であってもよい。
データバッファ(1608、1609)は、上記第1の実施形態におけるデータバッファ(110、111)と同様としてもよい。
演算制御部1601は、1以上の上記第1の演算部、及び、1以上の上記第2の演算部の少なくともいずれかにおいて実行されるタスクの実行を指定する、タスクコマンドを生成する。なお、係るタスクは、上記データに対して実行される一連の演算処理である。
演算制御部1601は、係るタスクコマンドを、後述する各コマンドバッファ(1605乃至1607)及び、各タスク制御部(1610乃至1612)に対して入力してもよい。演算制御部1601は、上記第1の実施形態における演算制御部101と同様としてもよい。
コマンドバッファ(1605乃至1607)は、上記演算制御部1601から出力される上記タスクコマンドを、上記少なくともいずれかの演算部(1602乃至1604)に対して出力可能に保持する。
本実施形態におけるコマンドバッファは、図16に例示するように、上記各演算部(1602乃至1604)に対して通信可能に接続されてもよい。また、本実施形態におけるコマンドバッファは、図17に例示するように、特定の上記演算部(例えば、1602)に対して接続されてもよい。
コマンドバッファ(1605乃至1607)は、上記第1の実施形態におけるコマンドバッファ(107乃至109)と同様としてもよい。
タスク制御部(1610乃至1612)は、上記タスクコマンドと、タスク設定情報と、各演算部(1602乃至1604)のステータス情報と、に基づいて、上記少なくともいずれかの演算部において実行される、上記タスクに関する演算処理を制御する。
タスク設定情報は、あるタスクに関して、当該タスクが実行される上記演算部(1602乃至1604)を特定可能な情報である。ステータス情報は、各演算部(1602乃至1604)における演算処理の状態を表す情報である。タスク制御部1610は、複数の上記演算部(1602乃至1604)のそれぞれから、上記ステータス情報を取得する。
タスク制御部(1610乃至1612)は、上記第1の実施形態におけるタスク制御部(112、113、及び、114)と同様としてもよい。
以上のように構成された、本実施形態における演算装置1600によれば、複数の演算部(1602乃至1604)が、データバッファ(1608乃至1609)を介してパイプライン状に接続された構成を有する演算装置1600において、各演算部(1602乃至1604)が効率的に稼働するようにタスクの実行が制御される。即ち、演算装置1600は、複数の演算部(1602乃至1604)を用いてパイプライン的に処理を実行するようなタスクを実行する場合、各演算部におけるアイドル状態やレイテンシを削減することが可能である。
より具体的には、演算装置1600は、あるタスクに関する特定の演算部における演算処理が終了する前に、他の一部の演算部において、他のタスクに関する演算処理を実行可能である。その理由は、各演算部(1602乃至1604)の実行状態(ステータス)と、各タスクの設定情報に基づいて、演算部毎に、タスクの実行が制御されるからである。
図16及び図17に例示する構成は、本実施形態における演算装置を実現可能な一具体例であり、本実施形態はこれには限定されない。即ち、本実施形態における演算部の数は任意に定めてよい。また、演算部の数に応じて、データバッファ、タスク制御部の数も適宜選択されてよい。
<ハードウェア及びソフトウェア・プログラム(コンピュータ・プログラム)の構成>
以下、上記説明した各実施形態を実現可能なハードウェア構成について説明する。以下においては、特にタスク制御部(112乃至114、1101乃至1103、1303及び1304、並びに、1610乃至1612)の構成について説明する。以下、これらをまとめて「タスク制御部」と称する場合がある。
上記各実施形態において説明した演算装置(100、1100、1300、1600)におけるタスク制御部は、専用のハードウェア装置により構成してもよい。その場合、上記各図に示した各部は、一部または全部を統合したハードウェア(処理ロジックを実装した集積回路等)として実現してもよい。
また、上記タスク制御部は、図19に例示するようなハードウェアと、係るハードウェアによって実行される各種ソフトウェア・プログラム(コンピュータ・プログラム)とによって構成してもよい。
図19における演算装置1901は、汎用のCPU(Central Processing Unit)やマイクロプロセッサ等の演算処理装置である。演算装置1901は、例えば後述する不揮発性記憶装置1903に記憶された各種ソフトウェア・プログラムを記憶装置1902に読み出し、係るソフトウェア・プログラムに従って処理を実行してもよい。
記憶装置1902は、演算装置1901から参照可能な、RAM(Random Access Memory)等のメモリ装置であり、ソフトウェア・プログラムや各種データ等を記憶する。記憶装置1902は、揮発性のメモリ装置であってもよい。
不揮発性記憶装置1903は、例えば半導体記憶装置によるROM(Read Only Memory)や、フラッシュメモリのような、不揮発性の記憶装置であり、各種ソフトウェア・プログラムやデータ等を記録してもよい。
外部記憶装置1904は、例えば、後述する記憶媒体1905に対するデータの読み込みや書き込みを処理する装置である。
記憶媒体1905は、例えば光ディスク、光磁気ディスク、半導体フラッシュメモリ等、データを記録可能な任意の記録媒体である。
入出力インタフェース1906は、タスク制御部と、上記各実施形態において説明した演算装置(100、1100、1300、1600)における他の構成要素との間の入出力を制御する装置である。係る入出力インタフェース1906は、各種通信ネットワークに接続可能な、ネットワークインタフェースであってもよい。
例えば、上記各実施形態においては、タスク制御部と、上記各実施形態において説明した演算装置(100、1100、1300、1600)における他の構成要素との間は、入出力インタフェース1906を介して任意の通信バスにより接続されてもよい。
上述した各実施形態を例に説明した本発明は、例えば、図19に例示したハードウェア装置によりタスク制御部を構成し、係るタスク制御部に対して、上記各実施形態において説明した機能を実現可能なソフトウェア・プログラムを供給することにより実現してもよい。この場合、係るタスク制御部に対して供給したソフトウェア・プログラムを、演算装置1901が実行することによって、本願発明が達成されてもよい。
上述した各実施形態において、上記各図に示した各部は、上述したハードウェアにより実行されるソフトウェア・プログラムの機能(処理)単位である、ソフトウェアモジュールとして実現することができる。但し、これらの図面に示した各ソフトウェアモジュールの区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。
例えば、図1、図11、図13、及び、図16に例示したタスク制御部をソフトウェアモジュールとして実現する場合、これらのソフトウェアモジュールを不揮発性記憶装置1903に記憶しておき、演算装置1901がそれぞれの処理を実行する際に、これらのソフトウェアモジュールを記憶装置1902に読み出すよう構成してもよい。
また、これらのソフトウェアモジュール間は、共有メモリやプロセス間通信等の適宜の方法により、相互に各種データを伝達できるように構成してもよい。このような構成により、これらのソフトウェアモジュール間は、相互に通信可能に接続可能である。
更に、上記各ソフトウェア・プログラムを記憶媒体1905に記録しておき、上記演算装置(100、1100、1300、1600)の出荷段階、あるいは運用段階等において、適宜外部記憶装置1904を通じて当該ソフトウェア・プログラムが不揮発性記憶装置1903に格納されるよう構成してもよい。
なお、上記の場合において、タスク制御部への各種ソフトウェア・プログラムの供給方法は、出荷前の製造段階、あるいは出荷後のメンテナンス段階等において、適当な治具を利用して当該演算装置(100、1100、1300、1600)内にインストールする方法を採用してもよい。また、各種ソフトウェア・プログラムの供給方法は、インターネット等の通信回線を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用してもよい。
そして、このような場合において、本発明は、係るソフトウェア・プログラムを構成するコード、あるいは係るコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
以上、本発明を、上述した模範的な実施形態に適用した例として説明した。しかしながら、本発明の技術的範囲は、上述した各実施形態に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更または改良を加えることが可能であることは明らかである。そのような場合、係る変更または改良を加えた新たな実施形態も、本発明の技術的範囲に含まれ得る。そしてこのことは、請求の範囲に記載した事項から明らかである。