以下、本発明の実施形態について、図面を参照して説明する。図1は、本実施形態における演算装置の概略構成の一例を示したブロック図である。図1に示した演算装置10は、n個の処理演算部11a〜処理演算部11nと、タスク制御部12と、メモリ制御部13と、n個のデータ記憶部14a〜データ記憶部14nと、を備えている。また、演算装置10には、外部記憶部20が接続されている。演算装置10は、要求された演算処理を、処理演算部11a〜処理演算部11nのそれぞれで分担して行う、分散並列処理型の演算装置である。
なお、以下の説明においては、処理演算部11a〜処理演算部11nのそれぞれを区別せずに表す場合には、「処理演算部11」という。また、データ記憶部14a〜データ記憶部14nのそれぞれを区別せずに表す場合には、「データ記憶部14」という。
外部記憶部20は、処理演算部11a〜処理演算部11nのそれぞれで共有される、例えば、DRAM(Dynamic Random Access Memory)などのメモリである。外部記憶部20には、処理演算部11a〜処理演算部11nのそれぞれが起動するためのプログラムや、処理演算部11a〜処理演算部11nのそれぞれが演算処理を実行するために用いるデータが格納されている。また、外部記憶部20には、処理演算部11a〜処理演算部11nのそれぞれが演算処理の途中で生成したデータなどが、一時的に格納される。
処理演算部11a〜処理演算部11nのそれぞれは、同じ処理機能を持ったプロセッサである。処理演算部11a〜処理演算部11nのそれぞれは、演算装置10に接続された外部記憶部20へのデータの書き込みや、外部記憶部20からのデータの読み出しを行いながら、タスク制御部12から入力された、演算装置10に対して要求された演算処理におけるそれぞれのタスクを実行する。ただし、演算装置10では、外部記憶部20へのデータの書き込みや、外部記憶部20からのデータの読み出しを、処理演算部11a〜処理演算部11nのそれぞれが直接行わない。そして、処理演算部11a〜処理演算部11nのそれぞれがタスクを実行する際には、外部記憶部20へのデータの書き込みや、外部記憶部20からのデータの読み出しの代わりに、データ記憶部14へのデータの書き込みや、データ記憶部14からのデータの読み出しを行いながら、タスク制御部12から入力されたそれぞれのタスクを実行する。
また、処理演算部11a〜処理演算部11nのそれぞれは、自身がタスクを実行した後に引き続き別の処理演算部11または自身に、次のタスクを実行させるための情報や、次に実行するタスクの内容を表す情報を、次のタスクの実行要求として、タスク制御部12に出力する。ここで、処理演算部11がタスク制御部12に出力する次のタスクの実行要求の情報には、タスクを実行する際に使用するデータが保持されている外部記憶部20のアドレスやデータ記憶部14を指定する情報が含まれている。また、処理演算部11がタスク制御部12に出力する次のタスクの実行要求の情報には、次のタスクの実行に必要な様々なパラメータのデータが含まれている。なお、以下の説明においては、処理演算部11がタスク制御部12に出力する、次のタスクの実行要求も、タスクという。
また、処理演算部11a〜処理演算部11nのそれぞれは、タスク制御部12から入力された、別の処理演算部11または自身が前回のタスクを実行した結果である、次のタスクを実行する。なお、処理演算部11a〜処理演算部11nのそれぞれは、さらに別の処理演算部11または自身が引き続き実行するタスクがある場合には、引き続き別の処理演算部11または自身に、次のタスクを実行させるための情報や、次に実行するタスクの内容を表す情報を、次のタスクとして再度、タスク制御部12に出力する。
また、処理演算部11a〜処理演算部11nのそれぞれは、次のタスクを受け付けられる状態であるか否かを表す信号を、タスク制御部12に出力する。処理演算部11a〜処理演算部11nのそれぞれは、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次に実行するタスクを受け付けられる状態であることを表す信号を、タスク制御部12に出力する。
タスク制御部12は、処理演算部11a〜処理演算部11nのそれぞれから入力されたそれぞれのタスクを受け付け、処理演算部11a〜処理演算部11nのそれぞれから入力された、次のタスクを受け付けられる状態であるか否かを表す信号に基づいて、受け付けたタスクを、処理演算部11a〜処理演算部11nのいずれか1つに割り当てる。
より具体的には、タスク制御部12は、処理演算部11a〜処理演算部11nのそれぞれから入力されたそれぞれのタスクに基づいて、次のタスクを受け付けられる状態であることを表す信号を入力している処理演算部11の中から、次のタスクを実行させる、いずれか1つ処理演算部11を選択する。そして、タスク制御部12は、選択したいずれか1つの処理演算部11にタスクを出力することによって、演算装置10に対して要求された演算処理におけるそれぞれのタスクを、処理演算部11a〜処理演算部11nのそれぞれに分配する。
タスク制御部12は、処理演算部11a〜処理演算部11nのそれぞれからのタスクを受け付けるための構成として、タスクキュー121を備えている。タスクキュー121は、入力されたタスクを格納する待ち行列のメモリである。タスクキュー121には、処理演算部11a〜処理演算部11nのそれぞれから入力されたそれぞれのタスクが、入力された順番で順次格納される。タスクキュー121に格納されたそれぞれのタスクは、基本的に、格納された順番で出力されるが、演算装置10では、タスク制御部12が、タスクキュー121に格納されたタスクを出力する処理演算部11や、タスクの出力順番を制御する。
また、タスク制御部12は、タスクキュー121に格納されたそれぞれのタスクを実行するタイミングに基づいて、外部記憶部20にアクセスするための指示(以下、「アクセス指示」という)を、メモリ制御部13に出力する。例えば、タスク制御部12は、DMA(Direct Memory Access)によって外部記憶部20へのデータの書き込み、および外部記憶部20からのデータの読み出しを行うアクセス指示を、メモリ制御部13に出力する。
より具体的には、タスク制御部12は、タスクキュー121に順次格納されたそれぞれのタスクに基づいて、タスクを実行する際に使用する外部記憶部20に格納されているデータを、このタスクが割り当てられた処理演算部11が実際にタスクを実行するタイミングまでに、事前に取得する(読み出す)ためのDMAのアクセス指示を、メモリ制御部13に出力する。また、タスク制御部12は、タスクキュー121に順次格納されたそれぞれのタスクに基づいて、それぞれの処理演算部11が割り当てられたタスクを実行する際に使用しないデータを、事前に外部記憶部20に退避する(書き込む)ためのDMAのアクセス指示を、メモリ制御部13に出力する。ここで、タスク制御部12がメモリ制御部13に出力するアクセス指示には、外部記憶部20のアドレスや、読み出しまたは書き込みを行うデータの量(大きさ)などを表す情報が含まれている。
なお、タスク制御部12によるタスクを出力する処理演算部11やタスクの出力順番の制御方法、およびメモリ制御部13に出力する外部記憶部20へのアクセス指示に関する詳細な説明は、後述する。
メモリ制御部13は、タスク制御部12から入力されたアクセス指示に応じて、演算装置10に接続された外部記憶部20からのデータの読み出しや、外部記憶部20へのデータの書き込みを行う。
より具体的には、メモリ制御部13は、タスク制御部12から入力された、外部記憶部20に格納されているデータを事前に取得する(読み出す)ためのアクセス指示に応じて、アクセス指示によって指定された外部記憶部20のアドレスから、アクセス指示によって指定された量のデータを読み出し、読み出したデータを、アクセス指示によって指定されたデータ記憶部14に格納する。メモリ制御部13は、タスク制御部12から入力された、データを外部記憶部20に退避する(書き込む)ためのアクセス指示に応じて、アクセス指示によって指定されたデータ記憶部14に格納されているデータを読み出し、読み出したデータを、アクセス指示によって指定された外部記憶部20のアドレスの記憶領域に書き込む。
また、メモリ制御部13は、タスク制御部12から入力されたアクセス指示に応じて、処理演算部11a〜処理演算部11nのそれぞれから入力された次のタスクの実行要求の情報に含まれる、タスクの実行に必要な様々なパラメータのデータを、データ記憶部14に格納、または外部記憶部20に退避する。
より具体的には、メモリ制御部13は、タスク制御部12から入力された、パラメータのデータを格納する(書き込む)ためのアクセス指示に応じて、アクセス指示によって指定されたデータ記憶部14a〜データ記憶部14nのいずれかに、アクセス指示によって指定されたパラメータのデータを格納する。メモリ制御部13は、タスク制御部12から入力された、パラメータのデータを外部記憶部20に退避する(書き込む)ためのアクセス指示に応じて、アクセス指示によって指定されたパラメータのデータを、アクセス指示によって指定された外部記憶部20のアドレスの記憶領域に書き込む。ここで外部記憶部20に退避されたパラメータのデータは、タスク制御部12から必要に応じて入力されるパラメータのデータを読み出すためのアクセス指示に応じて、外部記憶部20から読み出され、アクセス指示によって指定されたデータ記憶部14に再び格納される。
データ記憶部14a〜データ記憶部14nのそれぞれは、処理演算部11a〜処理演算部11nのそれぞれに対応し、対応する処理演算部11がタスクを実行する際に使用するデータや、次のタスクを実行する際に使用するデータ(例えば、現在のタスクを実行した結果のデータ)を格納する、例えば、SRAM(Static Random Access Memory)などのメモリ、いわゆる、キャッシュメモリである。
なお、図1では、演算装置10内に、処理演算部11のそれぞれに対応したn個のデータ記憶部14を備えた構成を示しているが、データ記憶部14の構成は、本実施形態の構成のみに限定されるものではない。例えば、演算装置内に1つのデータ記憶部を備え、このデータ記憶部の記憶領域を、処理演算部11のそれぞれに対応する数に分割した構成であっても、同様に考えることができる。ただし、複数の処理演算部11が同時にデータ記憶部の別の領域に対してデータの書き込みや読み出しを行うことを考慮すると、データ記憶部は、図1に示したように、処理演算部11のそれぞれに対応した構成であることが望ましいと考えられる。
このように、演算装置10では、いずれの処理演算部11から出力されたタスクも、タスク制御部12を経由してから、次のタスクを実行する処理演算部11に入力される。そして、演算装置10では、次のタスクが割り当てられた処理演算部11が、外部記憶部20に格納されているデータを使用するタイミングよりも早いタイミングで、タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておく。また、演算装置10では、処理演算部11がタスクを実行する際にデータを使用しない場合には、対応するデータ記憶部14に格納されたデータを、外部記憶部20に退避しておく。
次に、演算装置10の動作について説明する。なお、以下の説明においては、演算装置10に備えている処理演算部11とデータ記憶部14とは、それぞれ4つずつである、すなわち、演算装置10には、処理演算部11a〜処理演算部11dと、データ記憶部14a〜データ記憶部14dとを備えているものとして説明する。また、演算装置10に備えた4つの処理演算部11a〜処理演算部11dは、想定される以下の10種類のタスクをそれぞれ実行することができ、それぞれのタスクを実行する際の実行時間(サイクル数)は、以下のサイクル数であるものとする。ここで、10種類のタスクの平均のサイクル数は、100サイクルである。
タスク0=110サイクル
タスク1=120サイクル
タスク2=130サイクル
タスク3=140サイクル
タスク4=150サイクル
タスク5=90サイクル
タスク6=80サイクル
タスク7=70サイクル
タスク8=60サイクル
タスク9=50サイクル
なお、タスク制御部12は、それぞれのタスクを実行する際の上記のサイクル数が事前にわかっているものとする。また、メモリ制御部13が外部記憶部20に格納されているデータを事前に取得する(読み出す)、または外部記憶部20にデータを退避する(書き込む)際には、DMAによって外部記憶部20にアクセスするものとする。なお、メモリ制御部13がDMAによって外部記憶部20にアクセスする際のデータ転送時間(サイクル数)は、100サイクルであるものとする。
<第1の動作>
まず、演算装置10の動作において、タスク制御部12が、タスクキュー121に格納されたタスクの順番に基づいて、外部記憶部20に格納されているデータをDMAによって事前に取得する(読み出す)ためのアクセス指示(以下「DMAリードアクセス指示」を、メモリ制御部13に出力する第1の動作について説明する。図2は、本実施形態の演算装置10に備えたタスク制御部12の概略構成、およびタスク制御部12に格納されたタスクの一例を説明する図である。
上述したように、タスク制御部12は、DMAによって外部記憶部20にアクセスするためのDMAリードアクセス指示を、メモリ制御部13に出力する。このため、タスク制御部12には、図2に示したように、DMAリクエスト発生部122を備えている。DMAリクエスト発生部122は、タスクキュー121に順次格納されたそれぞれのタスクに基づいて決定されたタイミングのときに、DMAリードアクセス指示をメモリ制御部13に出力する。
また、図2には、タスク制御部12に備えたタスクキュー121のそれぞれにタスクが格納されている状態を示している。なお、図2においてタスクキュー121内に示した“#(シャープ)”に続く数字は、タスクキュー121にそれぞれのタスクが格納された順番を表すタスク番号を示し、“#0”が最初に格納されたタスク(図2では、タスク6)であり、“#1”が2番目に格納されたタスク(図2では、タスク3)であることを示している。また、タスク番号は、それぞれのタスクが処理演算部11に出力される順番も示している。
タスク制御部12は、基本的に、タスクキュー121にそれぞれのタスクが格納された順番で、それぞれのタスクを処理演算部11に出力する。このとき、最初に格納された“#0”のタスク6が処理演算部11に出力されると、“#1”〜“#9”のそれぞれのタスクは、タスク番号が1つずつ小さくなる。すなわち、図2における“#1”のタスク3が“#0”のタスク3になり、同様に、“#2”〜“#9”のそれぞれのタスクも“#1”〜“#8”のそれぞれのタスクとなる。これにより、タスク制御部12は、常に“#0”のタスクを処理演算部11に出力するタスクとすることにより、タスクの出力順番の制御を容易に行うことができる。
しかし、以下の説明においては、説明を容易にするため、“#0”のタスクが処理演算部11に出力される毎にタスク番号が変わるのではなく、タスク制御部12が、タスクキュー121に格納されているタスク番号が小さいタスクから、すなわち、#0”のタスク6からタスク番号が大きくなっていく順番で、それぞれのタスクを処理演算部11に出力するものとして説明する。そして、以下の説明においては、“#8”のタスク0および“#9”のタスク1を処理演算部11に出力する前に、タスク制御部12が、“#8”のタスク0および“#9”のタスク1を実行する際に使用するデータを事前に取得する(読み出す)場合の動作について説明する。なお、“#0”〜“#7”のそれぞれのタスクでは、外部記憶部20に格納されているデータを使用しない、すなわち、“#0”〜“#7”のそれぞれのタスクを実行するためのDMAリードアクセス指示は出力しないものとする。
ここで、タスク制御部12が、DMAリードアクセス指示をメモリ制御部13に出力するタイミングを決定する際の考え方について説明する。タスク制御部12は、外部記憶部20に格納されているデータを使用するタスクの実行が開始されるタイミングよりも前に、外部記憶部20へのアクセスが終了し、タスクを実行する際に使用するデータがデータ記憶部14に格納されている状態にしておく。
このため、タスク制御部12は、外部記憶部20に格納されているデータを使用するタスク(以下、「対象タスク」という)よりも前に実行するタスク(以下、「先行タスク」という)の実行時間(以下、「実行サイクル数」という)が、外部記憶部20にアクセスする際のデータ転送時間(以下、「転送サイクル数」という)よりも長いタイミングとなるように、DMAリードアクセス指示をメモリ制御部13に出力するタイミングに決定する。このタイミングは、下式(1)の関係を満足する必要がある。
((データ転送開始順番+コア数)×最短タスク実行時間÷コア数)≧データ転送時間
・・・(1)
そして、上式(1)を満足するデータ転送開始順番は、下式(2)となる。
データ転送開始順番≧(コア数×(データ転送時間÷最短タスク実行時間−1))
・・・(2)
第1の動作における演算装置10の構成では、上式(2)におけるコア数は“4”、データ転送時間は100サイクルであり、10種類のタスクにおける最短タスク実行時間、すなわち、10種類のタスクの内最小の実行サイクル数は50サイクルである。従って、第1の動作の演算装置10におけるデータ転送開始順番は、下式(3)となる。
データ転送開始順番≧(4×(100÷50−1))=4 ・・・(3)
タスク制御部12は、対象タスクが上式(3)のデータ転送開始順番となったタイミングを、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミングに決定する。より具体的には、図2に示した“#8”のタスク0を対象タスクとした場合、対象タスクを出力する順番が4番目、すなわち、“#4”となったタイミングを、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミングに決定する。また、図2に示した“#9”のタスク1を対象タスクとした場合、対象タスクを出力する順番が4番目、すなわち、“#4”となったタイミングを、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミングに決定する。
そして、タスク制御部12は、決定したタイミングのときに、DMAリードアクセス指示をメモリ制御部13に出力させるための指示を、DMAリクエスト発生部122に出力する。この指示に応じて、DMAリクエスト発生部122は、DMAリードアクセス指示をメモリ制御部13に出力し、メモリ制御部13は、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、外部記憶部20からのデータの読み出しを行う。
なお、タスク制御部12は、上式(3)のデータ転送開始順番=4を予め記憶しておく。しかし、データ転送開始順番を記憶しておく構成は、タスク制御部12内に記憶しておく構成に限定されるものではなく、例えば、演算装置10を制御する不図示の制御部内に記憶しておき、制御部が、記憶しているデータ転送開始順番をタスク制御部12に出力する構成であってもよい。
図3は、本実施形態の演算装置10に備えたタスク制御部12による第1の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。図3に示したタイミングチャートでは、演算装置10に備えた4つの処理演算部11a〜処理演算部11dにおける前のタスクの実行が同時に完了し、その後、タスク制御部12が、それぞれの処理演算部11に順次タスクを出力する場合を示している。
より具体的には、最初の“#0”のタスク6を処理演算部11aに、2番目の“#1”のタスク3を処理演算部11bに、3番目の“#2”のタスク4を処理演算部11cに、4番目の“#3”のタスク0を処理演算部11dに、それぞれ出力する。このとき、“#8”のタスク0が、4番目(“#4”)のタスクとなるため、タスク制御部12は、図2に示した“#8”のタスク0に対応したDMAリードアクセス指示をメモリ制御部13に出力させるための指示を、DMAリクエスト発生部122に出力する。これにより、DMAリクエスト発生部122は、“#8”のタスク0に対応したDMAリードアクセス指示をメモリ制御部13に出力し、メモリ制御部13は、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、“#8”のタスク0に対応したデータを外部記憶部20から読み出して、“#8”のタスク0を実行する処理演算部11dに対応したデータ記憶部14dに格納する。
その後、処理演算部11aが最初の“#0”のタスク6の実行が完了したとき、タスク制御部12は、5番目の“#4”のタスク3を処理演算部11aに出力する。このとき、“#9”のタスク1が、4番目(“#4”)のタスクとなるため、タスク制御部12は、図2に示した“#9”のタスク1に対応したDMAリードアクセス指示をメモリ制御部13に出力させるための指示を、DMAリクエスト発生部122に出力する。これにより、DMAリクエスト発生部122は、“#9”のタスク1に対応したDMAリードアクセス指示をメモリ制御部13に出力する。そして、メモリ制御部13は、“#8”のタスク0に対応したデータの外部記憶部20からの読み出しが終了した後、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、“#9”のタスク1に対応したデータを外部記憶部20から読み出して、“#9”のタスク1を実行する処理演算部11bに対応したデータ記憶部14bに格納する。
このように、タスク制御部12は、対象タスクが割り当てられる処理演算部11が、外部記憶部20に格納されているデータを使用するタイミングよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておく。
なお、対象タスクを実行する際に使用するデータを、対応するデータ記憶部14に事前に格納する際には、このデータ記憶部14に演算処理に必要な前のデータが格納されていないか、すなわち、演算処理に必要なデータが残っていないかを確認し、演算処理に必要な前のデータが格納されていない場合にのみ、対象タスクを実行する際に使用するデータを事前に格納する。従って、対応するデータ記憶部14に演算処理に必要な前のデータが格納されている、すなわち、演算処理に必要なデータが残っている場合には、現在格納されているデータを、外部記憶部20にデータを退避しておく(書き込んでおく)必要がある。このため、タスク制御部12は、決定したデータ転送開始順番よりも前のタイミングを、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミングに決定することが望ましい。この場合には、例えば、上式(2)におけるデータ転送時間を2倍にして、データ転送開始順番を決定するなどの方法が考えられる。
次に、対象タスクが実行される前に、対象タスクが使用するデータを事前にデータ記憶部14に格納しておく、タスク制御部12の処理手順について説明する。図4は、本実施形態の演算装置10に備えたタスク制御部12による第1の動作における処理手順を示したフローチャートである。なお、以下の説明においては、説明を容易にするため、DMAリクエスト発生部122が、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミングを決定するものとして説明する。また、対象タスクにおけるデータ転送開始順番は“4”であるものとする。
DMAリクエスト発生部122は、タスク制御部12がタスクキュー121に格納されたタスクを処理演算部11に出力する毎に、図4に示したDMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理を実行する。まず、タスク制御部12が、タスクキュー121に格納された最初の“#0”のタスク6を処理演算部11aに出力すると、DMAリクエスト発生部122は、ステップS1においてタスク番号iを“0”にクリアし、タスクキュー121に格納されている“#0”のタスク(図2に示した2番目の“#1”のタスク3)から、DMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理を開始する。なお、図4において、QUEUE−MAXは、タスク番号の最大値である。
DMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理において、DMAリクエスト発生部122は、“#0”のタスク(図2に示した2番目の“#1”のタスク3)が、外部記憶部20に格納されているデータを使用する対象タスクであるか否かを確認する(ステップS11)。ステップS11において、外部記憶部20に格納されているデータを使用する対象タスクでない場合(ステップS11の“NO”)には、ステップS1においてタスク番号iに1を加えて、すなわち、タスク番号i=1として、タスクキュー121に格納された2番目の“#1”のタスク(図2に示した3番目の“#2”のタスク4)に対する確認を繰り返す。
なお、図2に示した2番目の“#1”のタスク3〜8番目の“#7”のタスク6は、外部記憶部20に格納されているデータを使用する対象タスクではないため、ステップS11における確認の結果は、“NO”の結果を繰り返す。そして、タスク番号i=7のとき、8番目の“#7”のタスク(図2に示した9番目の“#8”のタスク0)は対象タスクであるため、ステップS11において、外部記憶部20に格納されているデータを使用する対象タスクである場合(ステップS11の“YES”)となる。
ステップS11における確認の結果が“YES”の結果である場合、DMAリクエスト発生部122は、対象タスクにおけるデータ転送開始順番=4を取得する(ステップS12)。
続いて、DMAリクエスト発生部122は、取得したデータ転送開始順番=4が、タスク番号iと同じであるか否か、すなわち、対象タスクが4番目の“#4”であるか否かを確認する(ステップS13)。ステップS13において、対象タスクが4番目の“#4”でない場合(ステップS13の“NO”)には、ステップS1においてタスク番号iに1を加えて、タスクキュー121に格納された次のタスク(図2に示した10番目の“#9”のタスク1)に対する確認を行う。
また、ステップS13において、対象タスクが4番目の“#4”である場合(ステップS13の“YES”)には、DMAリクエスト発生部122は、4番目の“#4”のタスク(図2に示した9番目の“#8”のタスク0)が使用するデータを外部記憶部20から事前に取得するためのDMAリードアクセス指示を、メモリ制御部13に出力する(ステップS14)。これにより、メモリ制御部13は、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、“#8”のタスク0に対応したデータを外部記憶部20から読み出して、“#8”のタスク0を実行する処理演算部11dに対応したデータ記憶部14dに格納する。
以降、同様に、タスク制御部12がタスクキュー121に格納されたタスクを処理演算部11に出力する毎に、図4に示したDMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理が実行される。これにより、メモリ制御部13は、“#8”のタスク0に対応したデータの外部記憶部20からの読み出しが終了した後、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、“#9”のタスク1に対応したデータを外部記憶部20から読み出して、“#9”のタスク1を実行する処理演算部11bに対応したデータ記憶部14bに格納する。
このように、タスク制御部12における第1の動作では、タスクキュー121に格納されたタスクを処理演算部11に出力する毎に、外部記憶部20に格納されているデータを使用する対象タスクが処理演算部11に出力される順番を確認することによって、対象タスクが割り当てられる処理演算部11が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておく。これにより、演算装置10では、それぞれの処理演算部11が使用するデータのキャッシュミスを防止することができる。
なお、上述したように、対象タスクを実行する際に使用するデータを、対応するデータ記憶部14に事前に格納する際には、このデータ記憶部14に演算処理に必要な前のデータが格納されていないかを確認し、データ記憶部14に演算処理に必要な前のデータが格納されている場合には、現在格納されているデータを、外部記憶部20にデータを退避しておく(書き込んでおく)必要がある。このため、例えば、図4に示したフローチャートのステップS11とステップS12との間に、データ記憶部14に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップS12以降の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部14に現在格納されているデータを外部記憶部20にデータを退避してから(書き込んでから)、ステップS12以降の処理を実行することになる。
<第2の動作>
次に、演算装置10の動作、特にタスク制御部12の第2の動作について説明する。第2の動作は、タスクキュー121に格納されたそれぞれのタスクからタスク制御部12が予測した先行タスクの実行時間に基づいて、外部記憶部20に格納されているデータをDMAによって事前に取得する(読み出す)ためのDMAリードアクセス指示を、メモリ制御部13に出力する動作である。なお、本第2の動作の説明においても、タスク制御部12の概略構成は、図2に示したタスク制御部12の概略構成と同様である。また、タスク制御部12に格納されたタスクも、図2に示したタスクが格納されているものとして説明を行う。
図5は、本実施形態の演算装置10に備えたタスク制御部12による第2の動作における処理手順を示したフローチャートである。なお、以下の説明においても、説明を容易にするため、DMAリクエスト発生部122が、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミングを決定するものとして説明する。また、対象タスクに対応したDMAリードアクセス指示をメモリ制御部13に出力するタイミング(以下、「データ転送開始タイミング」という)は、外部記憶部20にアクセスする際の転送サイクル数と同じタイミング、すなわち、100サイクルであるものとする。
なお、タスク制御部12は、データ転送開始タイミング=100を予め記憶しておく構成であっても、例えば、演算装置10を制御する不図示の制御部内にデータ転送開始タイミングを記憶しておき、制御部が、記憶しているデータ転送開始タイミングをタスク制御部12に出力する構成であってもよい。
DMAリクエスト発生部122は、タスク制御部12がタスクキュー121に格納されたタスクを処理演算部11に出力する毎に、図5に示したDMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理を実行する。まず、DMAリクエスト発生部122は、ステップS2においてタスク番号iを“0”にクリアする。そして、DMAリクエスト発生部122は、タスクキュー121に格納されている最初の“#0”のタスク6から、DMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理を開始する。
DMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理において、DMAリクエスト発生部122は、最初の“#0”のタスク6が、外部記憶部20に格納されているデータを使用する対象タスクであるか否かを確認する(ステップS21)。ステップS21において、最初の“#0”のタスク6が、外部記憶部20に格納されているデータを使用する対象タスクでない場合(ステップS21の“NO”)には、ステップS2においてタスク番号iに1を加えてタスク番号i=1とし、タスクキュー121に格納された2番目の“#1”のタスク3に対する確認を繰り返す。
なお、図2に示した最初の“#0”のタスク6〜8番目の“#7”のタスク6は、外部記憶部20に格納されているデータを使用する対象タスクではないため、ステップS21における確認の結果は、“NO”の結果を繰り返す。そして、タスク番号i=8のとき、9番目の“#8”のタスク0は対象タスクであるため、ステップS21において、外部記憶部20に格納されているデータを使用する対象タスクである場合(ステップS21の“YES”)となる。
ステップS21における確認の結果が“YES”の結果である場合、DMAリクエスト発生部122は、対象タスクが実行されるよりも前に実行される先行タスク(最初の“#0”のタスク6〜8番目の“#7”のタスク6)のそれぞれが処理演算部11に割り当てられることを想定した場合に、それぞれの処理演算部11に幾つの先行タスクが割り当てられるか、すなわち、処理演算部11あたりの先行タスク数NUM−OF−MINを算出する(ステップS22)。例えば、図2に示したタスクキュー121の状態では、処理演算部11あたりの先行タスク数NUM−OF−MINは“2”となる。また、それぞれの処理演算部11に割り当てられた先行タスクを実行する際の、処理演算部11あたりの実行サイクル数の最小値MIN[NUM−OF−MIN]の値を、“最大値(図5においては0xFF)”にクリアする。
続いて、DMAリクエスト発生部122は、ステップS23において処理演算部11あたりの先行タスク数kを“0”にクリアし、それぞれの処理演算部11に先行タスク数NUM−OF−MINのタスクが割り当てられた場合に想定される最小の実行サイクル数を求める。このため、DMAリクエスト発生部122は、先行タスクをそれぞれの処理演算部11が実行する際の、処理演算部11あたりの実行サイクル数の最小値MIN[NUM−OF−MIN]の値を、先行タスクの実行サイクル数に応じた値に更新する処理を開始する。
処理演算部11あたりの実行サイクル数の最小値MIN[NUM−OF−MIN]の値の更新処理では、DMAリクエスト発生部122は、まず、ステップS24において先行タスク番号jを“0”にクリアする。そして、DMAリクエスト発生部122は、最初の先行タスクである“#0”のタスク6の実行サイクル数が、実行サイクル数の最小値MIN[k]の値よりも小さいか否かを確認する(ステップS25)。
ここでは、ステップS22において、実行サイクル数の最小値MIN[NUM−OF−MIN]を“最大値”にしているため、ステップS25における確認の結果が“YES”となり、“#0”のタスク6の実行サイクル数=80を、実行サイクル数の最小値MIN[0]の値にする(ステップS26)。なお、ステップS25における確認の結果が“NO”の結果である場合には、ステップS24において先行タスク番号jに1を加えて先行タスク番号j=1とし、ステップS25において、タスクキュー121に格納された2番目の“#1”のタスク3の実行サイクル数が、実行サイクル数の最小値MIN[0]の値よりも小さいか否かの確認を繰り返す。
同様に、ステップS24のループによって、先行タスクの中の最小の実行サイクル数が、実行サイクル数の最小値MIN[0]の値となる。全ての先行タスクに対するステップS24のループの処理が完了すると、DMAリクエスト発生部122は、ステップS23において先行タスク数kに1を加えて先行タスク数k=1とする。そして、同様に、ステップS24のループによる、処理演算部11あたりの実行サイクル数の最小値MIN[1]の値の更新処理を行う。
なお、2回目以降の実行サイクル数の最小値MIN[NUM−OF−MIN]の更新処理においては、その前の回の実行サイクル数の最小値MIN[NUM−OF−MIN]の更新処理において使用した先行タスクの実行サイクル数とならないように、1度採用した先行タスクは、2回目以降の実行サイクル数の最小値MIN[NUM−OF−MIN]の更新処理に使用しないようにする。例えば、図2に示したタスクキュー121の状態では、“#5”のタスク7の実行サイクル数=70が、実行サイクル数の最小値MIN[0]の値となるため、実行サイクル数の最小値MIN[1]の値の更新処理では、“#5”のタスク7の実行サイクル数の確認を行わないようにする。これにより、図2に示したタスクキュー121の状態では、“#6”のタスク7の実行サイクル数=70が、実行サイクル数の最小値MIN[1]の値となる。
このステップS23のループによって、処理演算部11あたりの実行サイクル数の最小値MIN[NUM−OF−MIN]の値が、先行タスクの実行サイクル数が最小である値に、順次更新される。
続いて、DMAリクエスト発生部122は、実行サイクル数の最小値MIN[k]の値を全て合算した、合計値MIN−SUMを算出する(ステップS27)。続いて、DMAリクエスト発生部122は、合計値MIN−SUMに基づいて、現在がデータ転送開始タイミングであるか否かを判定する(ステップS28)。DMAリクエスト発生部122におけるステップS28の判定は、例えば、データ転送開始タイミングの値が合計値MIN−SUMの値よりも小さく(データ転送開始タイミング<合計値MIN−SUM)、かつ、データ転送開始タイミングの値が1つの処理演算部11が実行する先行タスクの実行サイクル数の平均値よりも大きい(データ転送開始タイミング>合計値MIN−SUM−合計値MIN−SUM/先行タスク数NUM−OF−MIN)場合に、現在がデータ転送開始タイミングである(ステップS28の“YES”)と判定する。
例えば、図2に示したタスクキュー121の状態では、先行タスク数NUM−OF−MIN=2、実行サイクル数の最小値MIN[0]=70、実行サイクル数の最小値MIN[1]=70であり、合計値MIN−SUM=140である。従って、DMAリクエスト発生部122は、データ転送開始タイミングが、140>データ転送開始タイミング>140−140/2(=70)の条件を満足するときに、現在がデータ転送開始タイミングであると判定する。
ステップS28において、現在がデータ転送開始タイミングでないと判定された場合(ステップS28の“NO”)には、ステップS2においてタスク番号iに1を加えて、タスクキュー121に格納された次のタスク(図2に示した10番目の“#9”のタスク1)に対する確認を行う。
また、ステップS28において、現在がデータ転送開始タイミングであると判定された場合(ステップS28の“YES”)には、DMAリクエスト発生部122は、9番目の“#8”のタスク0が使用するデータを外部記憶部20から事前に取得するためのDMAリードアクセス指示を、メモリ制御部13に出力する(ステップS29)。これにより、メモリ制御部13は、例えば、図3に示した第1の動作におけるタスクの分配とデータ転送とのタイミングと同様に、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、“#8”のタスク0に対応したデータを外部記憶部20から読み出して、“#8”のタスク0を実行する処理演算部11dに対応したデータ記憶部14dに格納する。
以降、同様に、タスク制御部12がタスクキュー121に格納されたタスクを処理演算部11に出力する毎に、図5に示したDMAリードアクセス指示をメモリ制御部13に出力するタイミングの決定処理が実行される。これにより、メモリ制御部13は、図3に示した第1の動作におけるタスクの分配とデータ転送とのタイミングと同様に、“#8”のタスク0に対応したデータの外部記憶部20からの読み出しが終了した後、DMAリクエスト発生部122から入力されたDMAリードアクセス指示に応じて、“#9”のタスク1に対応したデータを外部記憶部20から読み出して、“#9”のタスク1を実行する処理演算部11bに対応したデータ記憶部14bに格納する。
このように、タスク制御部12における第2の動作では、タスクキュー121に格納されたタスクを処理演算部11に出力する毎に、先行タスクの実行時間を予測し、予測した先行タスクの実行時間とデータ転送開始タイミングとに基づいて、対象タスクが使用するデータを取得するためのDMAリードアクセス指示をメモリ制御部13に出力するタイミングを決定する。これにより、タスク制御部12における第2の動作でも、対象タスクが割り当てられる処理演算部11が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておくことができる。このことにより、演算装置10では、それぞれの処理演算部11が使用するデータのキャッシュミスを防止することができる。
なお、対象タスクを実行する際に使用するデータを、対応するデータ記憶部14に事前に格納する際には、このデータ記憶部14に演算処理に必要な前のデータが格納されていないかを確認し、データ記憶部14に演算処理に必要な前のデータが格納されている場合には、現在格納されているデータを、外部記憶部20にデータを退避しておく(書き込んでおく)必要がある。このため、例えば、図5に示したフローチャートのステップS28とステップS29との間に、データ記憶部14に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップS29の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部14に現在格納されているデータを外部記憶部20にデータを退避してから(書き込んでから)、ステップS29の処理を実行することになる。このため、ステップS28において判定されるデータ転送開始タイミングは、例えば、外部記憶部20にアクセスする際の転送サイクル数を2倍にしておくなど、メモリ制御部13がDMAによって外部記憶部20にアクセスする際の転送サイクル数に対して余裕を持っておくことが望ましい。
<第3の動作>
次に、演算装置10の動作、特にタスク制御部12の第3の動作について説明する。第3の動作は、タスクキュー121に格納されたそれぞれのタスクの優先度に基づいて、外部記憶部20に格納されているデータをDMAによって事前に取得する(読み出す)ためのDMAリードアクセス指示を、メモリ制御部13に出力する動作である。
図6は、本実施形態の演算装置10に備えたタスク制御部12の概略構成、およびタスク制御部12に格納されたタスクの別の一例を説明する図である。本第3の動作の説明においても、タスク制御部12の概略構成は、図2に示したタスク制御部12の概略構成と同様である。ただし、本第3の動作の説明においては、図6に示したように、タスク制御部12に格納されたタスクが、図2に示したタスクと異なるものとする。
なお、図6に示したタスクにおいても、図2に示したタスクと同様に、タスクキュー121内に示した“#(シャープ)”に続く数字は、タスクキュー121にそれぞれのタスクが格納された順番を表すタスク番号を示している。また、本第3の動作においては、タスクに続く数字が大きいほど優先度が高い、つまり、優先度は、タスク9>タスク8>タスク7>タスク6>タスク5>タスク4>タスク3>タスク2>タスク1>タスク0であるものとする。
図7は、本実施形態の演算装置10に備えたタスク制御部12による第3の動作における処理手順を示したフローチャートである。なお、以下の説明においては、“#0”〜“#7”のそれぞれのタスクは対象タスクではなく、優先度に応じて処理演算部11に出力する順番の並び替えが完了しているものとし、“#8”のタスク0および“#9”のタスク1を処理演算部11に出力する順番を、優先度に応じて並び替える場合について説明する。
DMAリクエスト発生部122は、タスク制御部12がタスクキュー121に格納されたタスクを処理演算部11に出力する毎に、図7に示したタスクを処理演算部11に出力する順番を優先度に応じて並び替える処理を実行する。まず、DMAリクエスト発生部122は、ステップS3において最高優先度PRI−MAXを“−1”に、最高優先度のタスク番号PRI−MAX−IDXを“0”にクリアする。
続いて、DMAリクエスト発生部122は、ステップS31においてタスク番号iを“8”とし、タスクキュー121に格納されている9番目の“#8”のタスク0から、処理演算部11に出力する順番の並び替え処理を開始する。
処理演算部11に出力する順番の並び替え処理において、DMAリクエスト発生部122は、“#8”のタスク0が、処理演算部11に出力済みであるか否かを確認する(ステップS32)。ステップS32において、“#8”のタスク0が処理演算部11に出力済みである場合(ステップS32の“YES”)には、ステップS31においてタスク番号iに1を加えて、すなわち、タスク番号i=9として、タスクキュー121に格納された10番目の“#9”のタスク1に対する確認を繰り返す。
ステップS32における確認の結果が、“#8”のタスク0が処理演算部11に出力済みでない場合(ステップS32の“NO”)、DMAリクエスト発生部122は、ステップS33において、“#8”のタスク0の優先度が、最高優先度PRI−MAXよりも高いか否かを確認する。ステップS33において、“#8”のタスク0の優先度が、最高優先度PRI−MAXよりも高くない、すなわち、“#8”のタスク0の優先度が最高優先度PRI−MAXよりも低い場合(ステップS33の“NO”)には、ステップS31においてタスク番号iに1を加えて、タスクキュー121に格納された10番目の“#9”のタスク1に対する確認を繰り返す。
ステップS33における確認の結果が、“#8”のタスク0の優先度が最高優先度PRI−MAXよりも高い場合(ステップS33の“YES”)、DMAリクエスト発生部122は、ステップS34において、最高優先度PRI−MAXを“#8”のタスク0の優先度の値とする。また、DMAリクエスト発生部122は、最高優先度のタスク番号PRI−MAX−IDXを、“#8”にする。そして、DMAリクエスト発生部122は、ステップS31においてタスク番号iに1を加えて、タスクキュー121に格納された10番目の“#9”のタスク1に対する処理演算部11に出力する順番の並び替え処理を開始する。
続いて、DMAリクエスト発生部122は、ステップS31のループの処理が完了すると、すなわち、タスクキュー121に格納された全てのタスクに対して、処理演算部11に出力する順番の並び替え処理を完了すると、最後に、最高優先度のタスク番号PRI−MAX−IDXのタスクが使用するデータを外部記憶部20から事前に取得するためのDMAリードアクセス指示を、メモリ制御部13に出力する(ステップS35)。
上述したように、本第3の動作においては、タスクに続く数字が大きいほど優先度が高い、つまり、優先度は、“#9”のタスク1>“#8”のタスク0である。従って、ステップS31のループの処理が完了したとき、すなわち、“#9”のタスク1に対する処理演算部11に出力する順番の並び替え処理が完了したときには、最高優先度PRI−MAXは“#9”のタスク1の優先度となり、最高優先度のタスク番号PRI−MAX−IDXは“#9”となっている。このため、タスク制御部12は、9番目の“#8”のタスク0に対応したDMAリードアクセス指示よりも先に、10番目の“#9”のタスク1に対応したDMAリードアクセス指示を、メモリ制御部13に出力する。
図8は、本実施形態の演算装置10に備えたタスク制御部12による第3の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。図8に示したタイミングチャートには、タスク制御部12が、演算装置10に備えた4つの処理演算部11a〜処理演算部11dのそれぞれに、“#0”のタスク7〜“#7”のタスク0を順次出力し、その後、“#8”のタスク0よりも先に“#9”のタスク1を処理演算部11dに出力する場合を示している。
より具体的には、“#4”のタスク4を処理演算部11aに、“#5”のタスク3を処理演算部11bに、“#6”のタスク3を処理演算部11cに、“#7”のタスク0を処理演算部11dに、それぞれ出力する。そして、処理演算部11a〜処理演算部11dの内、割り当てられたタスクの実行が最も早く完了した処理演算部11dに、次にタスクキュー121に格納された“#8”のタスク0よりも優先度が高い“#9”のタスク1を出力し、その後に、割り当てられたタスクの実行が最も早く完了した処理演算部11bに、“#9”のタスク1よりも優先度が低い“#8”のタスク0を出力する場合を示している。
この場合であっても、タスク制御部12は、本第3の動作によって、優先度が低い“#8”のタスク0に対応したDMAリードアクセス指示よりも先に、優先度が高い“#9”のタスク1に対応したDMAリードアクセス指示をメモリ制御部13に出力している。これにより、メモリ制御部13は、タスク制御部12から入力されたDMAリードアクセス指示に応じて、“#9”のタスク1に対応したデータを外部記憶部20から読み出して、“#9”のタスク1を実行する処理演算部11dに対応したデータ記憶部14dに格納する。その後、メモリ制御部13は、タスク制御部12から入力されたDMAリードアクセス指示に応じて、“#8”のタスク0に対応したデータを外部記憶部20から読み出して、“#8”のタスク0を実行する処理演算部11bに対応したデータ記憶部14bに格納する。
このように、タスク制御部12における第3の動作では、タスクキュー121に格納されたタスクを処理演算部11に出力する毎に、タスクキュー121内の対象タスクの優先度を確認することによって、対象タスクが割り当てられる処理演算部11が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておくことができる。
また、タスク制御部12における第3の動作では、それぞれのタスクの優先度に応じて処理演算部11に出力するタスクの順番を並び替えることができる。
ここで、それぞれのタスクの優先度に応じて処理演算部11に出力するタスクの順番を並び替える場合の一例について説明する。図9〜図11は、本実施形態の演算装置10に備えたタスク制御部12による第3の動作において処理演算部11に出力するタスクの順番を入れ替える場合の一例を説明する図である。図9には、本一例におけるそれぞれのタスクの優先度の関係を示し、図10には、タスクの順番を入れ替える前のタスクキュー121に格納されたそれぞれのタスクの状態と処理演算部11がそれぞれのタスクを実行するタイミングを示し、図11には、タスクの順番を入れ替えた後のタスクキュー121に格納されたそれぞれのタスクの状態と処理演算部11がそれぞれのタスクを実行するタイミングを示している。なお、以下の説明においては、説明を容易にするため、演算装置10内に1つの処理演算部11のみを備えている場合について説明する。
まず、図9を参照して、本一例におけるそれぞれのタスクの優先度の関係を説明する。本一例では、処理演算部11がそれぞれのタスクを実行した際に、図9に示したような、ぞれぞれのタスクに関連する下位のタスクが発生するものとする。より具体的には、処理演算部11がタスク0を実行した結果として、タスク0−0とタスク0−1との下位のタスクが発生し、さらに、処理演算部11がタスク0−0を実行した結果として、タスク0−0−0とタスク0−0−1との下位のタスクが発生するものとする。また、処理演算部11がタスク1を実行した結果として、タスク1−0の下位のタスクが発生するものとする。
また、本一例では、それぞれのタスクの優先度の関係は、図9に示したように、タスクに続く数字が大きいほど優先度が低く、同じ系列のタスクでは、上位のタスクほど優先度が低く、同じ階層のタスクでは、タスクに続く数字の階層が大きいほど優先度が低いものとする。より具体的には、タスク0とタスク1との優先度はタスク0>タスク1であり、タスク0と、タスク0−0と、タスク0−0−0との優先度はタスク0−0−0>タスク0−0>タスク0であり、タスク0−0とタスク0−1との優先度はタスク0−0>タスク0−1であるものとする。つまり、図9に示したそれぞれのタスクの優先度は、タスク0−0−0>タスク0−0−1>タスク0−0>タスク0−1>タスク1−0>タスク0>タスク1であるものとする。
図9に示したような関係にあるタスクが発生した順番でタスクキュー121に順次格納されると、例えば、図10(a)に示したように、タスクキュー121の“#0”にタスク0が、“#1”にタスク1が、“#2”にタスク0−0が、“#3”にタスク1−0が、“#4”にタスク0−0−0が、“#5”にタスク0−0−1が、“#6”にタスク0−1がそれぞれ格納される。このような順番でタスクキュー121に格納されたそれぞれタスクを、1つの処理演算部11が順次実行すると、図10(b)に示したように、“#3”にタスク1−0の実行が完了した時点で、タスク1の系列の全てのタスクが完了し、その後、“#6”にタスク0−1の実行が完了した時点で、タスク0の系列の全てのタスクが完了することになる。これは、上述したタスク0とタスク1との優先度(タスク0>タスク1)の関係にある優先順位通りにそれぞれの系列のタスクが完了していないことになる。
しかし、演算装置10では、タスク制御部12における第3の動作によって、タスクキュー121に格納されたタスクの優先度を確認し、それぞれのタスクの優先度に応じて処理演算部11に出力するタスクの順番を並び替えることによって、タスク0とタスク1とのそれぞれの系列のタスクを、優先順位通りに完了させることができる。
より具体的には、図9に示したような関係にあるタスクが発生した順番でタスクキュー121に順次格納された後に、処理演算部11に出力するタスクの順番を並び替える。これにより、例えば、図11(a)に示したように、タスクキュー121の“#0”にタスク0が、“#1”にタスク1が、“#2”にタスク0−0が、“#3”にタスク0−0−0が、“#4”にタスク0−0−1が、“#5”にタスク0−1が、“#6”にタスク1−0がそれぞれ格納された状態と同様の順番で、それぞれのタスクが処理演算部11に出力される。このような順番でタスクキュー121に格納されたそれぞれタスクを、1つの処理演算部11が順次実行すると、図11(b)に示したように、“#5”にタスク0−1の実行が完了した時点で、タスク0の系列の全てのタスクが完了し、その後、“#6”にタスク1−0の実行が完了した時点で、タスク1の系列の全てのタスクが完了することになる。これは、上述したタスク0とタスク1との優先度(タスク0>タスク1)の関係にある優先順位通りにそれぞれの系列のタスクが完了している。
このように、タスク制御部12は、それぞれのタスクの優先度に応じて処理演算部11に出力するタスクの順番を並び替えることによって、優先順位通りにそれぞれのタスクの実行を完了させることができる。
このように、タスク制御部12における第3の動作では、タスクキュー121に格納されたタスクを処理演算部11に出力する毎に、タスクキュー121内の対象タスクの優先度を確認することによって、対象タスクが割り当てられる処理演算部11が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておくことができる。これにより、演算装置10では、それぞれのタスクの優先度に応じて処理演算部11に出力するタスクの順番を並び替えると共に、それぞれの処理演算部11が使用するデータのキャッシュミスを防止することができる。
なお、対象タスクを実行する際に使用するデータを、対応するデータ記憶部14に事前に格納する際には、このデータ記憶部14に演算処理に必要な前のデータが格納されていないかを確認し、データ記憶部14に演算処理に必要な前のデータが格納されている場合には、現在格納されているデータを、外部記憶部20にデータを退避しておく(書き込んでおく)必要がある。このため、例えば、図7に示したフローチャートのステップS31のループとステップS35との間に、データ記憶部14に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップS35の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部14に現在格納されているデータを外部記憶部20にデータを退避してから(書き込んでから)、ステップS35の処理を実行することになる。このため、ステップS35においてDMAリードアクセス指示をメモリ制御部13に出力するタイミングは、例えば、外部記憶部20にアクセスする際の転送サイクル数を2倍にしておくなどの対応によって、余裕を持ったタイミングにしておくことが望ましい。なお、DMAリードアクセス指示をメモリ制御部13に出力するタイミングの考え方は、第1の動作および第2の動作と同様であるため、詳細な説明は省略する。
なお、優先度の高いタスクを処理演算部11に出力するときに、このタスクを実行する際に使用するデータのデータ記憶部14への事前の格納が終了していない場合には、例えば、優先度は低いが外部記憶部20に格納されているデータを使用しないタスクを、このタスクよりも先に処理演算部11に出力することもできる。これにより、優先度の高いタスクを処理演算部11に出力するタイミングを、データ記憶部14へのデータの格納が終了するタイミングまで遅らせることができる。
<第4の動作>
次に、演算装置10の動作、特にタスク制御部12の第4の動作について説明する。図12は、本実施形態の演算装置10に備えたタスク制御部12による第4の動作における処理手順を示したフローチャートである。第4の動作は、第3の動作と同様に、タスクキュー121に格納されたそれぞれのタスクの優先度に基づいて、外部記憶部20に格納されているデータをDMAによって事前に取得する(読み出す)ためのDMAリードアクセス指示を出力する前に、データ記憶部14に演算処理に必要な前のデータが格納されているか否かの確認を行う動作である。そして、第4の動作は、データ記憶部14に演算処理に必要な前のデータが格納されている場合に、データ記憶部14に現在格納されているデータを、DMAによって外部記憶部20に退避する(書き込む)ためのアクセス指示(以下「DMAライトアクセス指示」を、メモリ制御部13に出力する動作である。
すなわち、第4の動作は、図7に示したタスク制御部12の第3の動作の処理手順に、データ記憶部14に演算処理に必要な前のデータが格納されているか否かを確認するステップを設けた動作である。従って、本第4の動作の説明においては、図7に示したタスク制御部12の第3の動作の処理手順と同様の手順に同じステップ番号を付与して説明を省略し、図7に示したタスク制御部12の第3の動作の処理手順と異なる手順のみを説明する。
なお、図12に示したタスク制御部12の第4の動作の処理手順では、ステップS31のループにおいてタスク番号iを“0”にクリアしている。しかし、ステップS31のループにおいてクリアしたタスク番号iが異なっている場合でも、ステップS31のループ内の処理は同様に考えることができるため、同様に、詳細な説明は省略する。
DMAリクエスト発生部122は、タスク制御部12がタスクキュー121に格納されたタスクを処理演算部11に出力する毎に、図12に示したタスクを処理演算部11に出力する順番を優先度に応じて並び替える処理を実行する。図12に示したタスクを処理演算部11に出力する順番を優先度に応じて並び替える処理では、DMAリクエスト発生部122は、図7に示したタスク制御部12の第3の動作の処理手順と同様に、ステップS3において最高優先度PRI−MAXを“−1”に、最高優先度のタスク番号PRI−MAX−IDXを“0”にクリアする。
続いて、DMAリクエスト発生部122は、図7に示したタスク制御部12の第3の動作の処理手順と同様に、ステップS32〜ステップS34を含むステップS31のループにおいて、処理演算部11に出力する順番の並び替え処理を行い、最高優先度PRI−MAXと最高優先度のタスク番号PRI−MAX−IDXとの値を、最も優先度が高いタスクに応じた値にする。
続いて、DMAリクエスト発生部122は、ステップS31のループの処理が完了すると、すなわち、タスクキュー121に格納された全てのタスクに対して、処理演算部11に出力する順番の並び替え処理を完了すると、最高優先度のタスク番号PRI−MAX−IDXのタスクが使用するデータを外部記憶部20から事前に取得して格納するデータ記憶部14が空きの状態であるか否かを確認する(ステップS4)。つまり、最も優先度が高いタスクを実行する処理演算部11に対応したデータ記憶部14に、演算処理に必要な前のデータが格納されているか否かを確認する。
ステップS4において、データ記憶部14が空きの状態であると確認された場合(ステップS4の“YES”)には、図7に示したタスク制御部12の第3の動作の処理手順と同様に、ステップS35において、最高優先度のタスク番号PRI−MAX−IDXのタスクが使用するデータを外部記憶部20から事前に取得するためのDMAリードアクセス指示を、メモリ制御部13に出力する。
ステップS4において、データ記憶部14が空きの状態でないと確認された場合(ステップS4の“NO”)には、ステップS5において、最高優先度のタスク番号PRI−MAX−IDXのタスクに対応した処理演算部11が使用するデータ記憶部14に現在格納されているデータを、外部記憶部20に事前に退避しておく、データ退避の処理を行う。
そして、DMAリクエスト発生部122は、ステップS5におけるデータ記憶部14に現在格納されているデータのデータ退避処理を完了すると、図7に示したタスク制御部12の第3の動作の処理手順と同様に、ステップS35において、最高優先度のタスク番号PRI−MAX−IDXのタスクが使用するデータを外部記憶部20から事前に取得するためのDMAリードアクセス指示を、メモリ制御部13に出力する。
ここで、ステップS5におけるデータ退避処理について説明する。図13は、本実施形態の演算装置10に備えたタスク制御部12が、データ記憶部14に格納されているデータを退避する処理手順を示したフローチャートである。タスク制御部12によるデータ退避処理は、タスクキュー121に格納されたそれぞれのタスクの優先度に基づいて、最も優先度が低いタスクを実行する処理演算部11に対応するデータ記憶部14に格納されたデータを、DMAによって外部記憶部20に退避する(書き込む)ためのDMAライトアクセス指示を、メモリ制御部13に出力する処理である。
DMAリクエスト発生部122は、図12に示したタスクを処理演算部11に出力する順番を優先度に応じて並び替える処理のステップS4において、データ記憶部14が空きの状態でないと確認された場合(ステップS4の“NO”)に、図13に示したデータ退避処理を実行する。まず、DMAリクエスト発生部122は、ステップS51において最低優先度PRI−MINを“最大値(図13においては0xFF)”に、最低優先度のタスク番号PRI−MIN−IDXを“0”にクリアする。
続いて、DMAリクエスト発生部122は、ステップS52においてタスク番号iを“0”にクリアし、タスクキュー121に格納されている“#0”のタスクから、処理演算部11に出力するタスクにおいて、最も優先度が低いタスクを選択する処理を開始する。
処理演算部11に出力する最も優先度が低いタスクの選択処理において、DMAリクエスト発生部122は、“#0”のタスクが、処理演算部11に出力済みであるか否かを確認する(ステップS53)。ステップS53において、“#0”のタスクが処理演算部11に出力済みである場合(ステップS53の“YES”)には、ステップS52においてタスク番号iに1を加えて、すなわち、タスク番号i=1として、タスクキュー121に格納された2番目の“#1”のタスクに対する確認を繰り返す。
ステップS53における確認の結果が、“#0”のタスクが処理演算部11に出力済みでない場合(ステップS53の“NO”)、DMAリクエスト発生部122は、ステップS54において、“#0”のタスクの優先度が、最低優先度PRI−MINよりも低いか否かを確認する。ステップS54において、“#0”のタスクの優先度が、最低優先度PRI−MINよりも低くない、すなわち、“#0”のタスクの優先度が最低優先度PRI−MINよりも高い場合(ステップS54の“NO”)には、ステップS52においてタスク番号iに1を加えて、タスクキュー121に格納された2番目の“#1”のタスクに対する確認を繰り返す。
ステップS54における確認の結果が、“#0”のタスクの優先度が最低優先度PRI−MINよりも低い場合(ステップS54の“YES”)、DMAリクエスト発生部122は、ステップS55において、最低優先度PRI−MINを“#0”のタスクの優先度の値とする。また、DMAリクエスト発生部122は、最低優先度のタスク番号PRI−MIN−IDXを、“#0”にする。そして、DMAリクエスト発生部122は、ステップS52においてタスク番号iに1を加えて、タスクキュー121に格納された2番目の“#1”のタスクに対する最も優先度が低いタスクの選択処理を開始する。
続いて、DMAリクエスト発生部122は、ステップS52のループの処理が完了すると、すなわち、タスクキュー121に格納された全てのタスクに対して、最も優先度が低いタスクの選択処理を完了すると、最後に、最低優先度のタスク番号PRI−MIN−IDXのタスクで使用するデータ記憶部14のデータを、外部記憶部20に事前に退避するためのDMAライトアクセス指示を、メモリ制御部13に出力する(ステップS56)。
このように、データ退避処理では、タスクキュー121に格納されたタスクの内、処理演算部11によって実行がされていないタスクの優先度を確認し、最も優先度が低いタスクに対応したデータ記憶部14が格納しているデータを、事前に外部記憶部20に退避するためのDMAライトアクセス指示を、メモリ制御部13に出力する。なお、図12に示したタスクを処理演算部11に出力する順番を優先度に応じて並び替える処理のステップS4において、データ記憶部14が空きの状態でないと確認されたタスクが複数ある場合には、タスクキュー121に格納された優先度が低いタスクに対応したデータ記憶部14から順次、データを外部記憶部20に退避する。
このように、タスク制御部12における第4の動作では、タスクキュー121に格納されたタスクを処理演算部11に出力する毎に、タスクキュー121内のタスクの優先度を確認する。さらに、最も優先度が高い対象タスクを実行する処理演算部11に対応したデータ記憶部14に、演算処理に必要なデータが格納されているか否かを確認する。そして、データ記憶部14に演算処理に必要なデータが格納されている場合には、データ記憶部14に現在格納されているデータを外部記憶部20にデータを退避してから(書き込んでから)、最も優先度が高い対象タスクが使用するデータを取得するためのDMAリードアクセス指示をメモリ制御部13に出力する。これにより、タスク制御部12における第4の動作でも、対象タスクが割り当てられる処理演算部11が対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部14に格納しておくことができる。このことにより、演算装置10では、それぞれのタスクの優先度に応じて処理演算部11に出力するタスクの順番を並び替えると共に、それぞれの処理演算部11が使用するデータのキャッシュミスを防止することができる。
上記に述べたとおり、本発明を実施するための形態によれば、複数の処理演算部(プロセッサ)が連携して処理を行う演算装置において、それぞれの処理演算部が実際にデータを使用するタスクを実行するよりも早いタイミングで、タスクを実行する際に使用するデータを、事前に外部記憶部から取得してデータ記憶部に格納しておく。これにより、本発明を実施するための形態では、それぞれの処理演算部が他のタスクを実行している期間に、外部記憶部からデータを取得する処理の期間を隠蔽することができる。このことにより、本発明を実施するための形態では、それぞれの処理演算部がタスクを実行する際に使用するデータのキャッシュミスを防止することができる演算装置を提供することができる。
また、本発明を実施するための形態によれば、外部記憶部から取得したデータを格納するデータ記憶部に、演算処理に必要な前のデータが格納されている場合には、このデータを、事前に外部記憶部に退避しておく。これにより、本発明を実施するための形態では、それぞれの処理演算部が他のタスクを実行している期間に、外部記憶部にデータを退避する処理の期間を隠蔽することができる。このことにより、本発明を実施するための形態では、それぞれの処理演算部がタスクを実行する際に使用するデータを外部記憶部から取得するための期間を、十分に確保することができる。
これらにより、本発明を実施するための形態では、演算装置を備えたシステムにおける処理時間の短縮を図ることができ、演算装置を備えたシステムの性能を向上させることができる。
なお、本実施形態においては、外部記憶部20が演算装置10に接続されている構成について説明したが、演算装置10と外部記憶部20との接続は、本発明を実施するための形態のように、演算装置10と外部記憶部20とが直接接続されている構成に限定されるものではない。例えば、外部記憶部20が、ネットワーク上に構成されたサーバであり、演算装置10とサーバとが、ネットワークを介して接続される構成であっても、同様に、本発明の考え方を適用することができる。この場合、例えば、メモリ制御部13は、通信部を介して、サーバからのデータの読み出し(受信)や、サーバへのデータの書き込み(送信)を行うと考えることができる。
また、本実施形態においては、タスク制御部12が、それぞれのタスクを実行する際の実行時間(サイクル数)など、外部記憶部20にアクセスするタイミングを決定するための情報が事前にわかっているものとして説明したが、タスク制御部12は、本発明を実施するための形態に限定されるものではない。例えば、タスクキュー121に格納されたタスクに含まれるプログラムのサイズや、データ量またはループ回数などのパラメータに基づいて、タスクを実行する際の実行時間(サイクル数)などの、外部記憶部20にアクセスするタイミングを決定するための情報を算出する構成であってもよい。
また、本実施形態においては、それぞれの処理演算部11の処理機能に関して説明していないが、例えば、演算装置10を、撮像装置などの撮像システム内に備えている場合には、それぞれの処理演算部11は、撮像システムにおける画像処理を行う処理機能を持っていると考えることができる。
また、本実施形態においては、演算装置10に備えたそれぞれの処理演算部11が持っている処理機能について説明していない。しかし、例えば、演算装置10が、撮像装置などの撮像システムに備えた画像処理装置である場合には、それぞれの処理演算部11の処理機能は、YC変換処理、ノイズ除去処理、歪み補正処理、キズ補正処理、画像圧縮処理など、撮像システムにおける様々な画像処理を行うことができる処理機能であると考えられる。また、例えば、演算装置10が、撮像装置などの撮像システムに備えた画像処理装置内の画像認識部など、撮像システムにおける画像処理の一部の処理部である場合には、それぞれの処理演算部11の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための処理機能であると考えられる。
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。