(57)【要約】【課題】複数のプロセッサが連携して処理を行う演算装置において、それぞれのプロセッサがデータを使用するタイミングまでに必要なデータを準備しておくことができる演算装置を提供する。【解決手段】入力されたタスクに応じた演算処理を行い、次の演算処理に関する情報をタスクとして出力する複数の処理演算部と、それぞれの処理演算部が演算処理に使用するデータまたは演算処理した結果のデータを格納するデータ記憶部と、演算処理に使用するデータの外部記憶部からの読み出しまたはデータ記憶部に格納されているデータの外部記憶部への書き込みを行うメモリ制御部と、タスクキューを具備し、格納されたタスクをいずれか１つの処理演算部に出力すると共に、それぞれのタスクの演算処理を処理演算部が実行する際のタイミングに基づいて、外部記憶部へのアクセスをメモリ制御部に指示するアクセス指示を出力するタスク制御部と、を備える。【選択図】図１
2014225088.tif 000002
【特許請求の範囲】
【請求項１】
入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、
それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納するデータ記憶部と、
前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、
前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか１つの前記処理演算部に出力すると共に、前記タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を前記処理演算部が実行する際のタイミングに基づいて、前記外部記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、
を備えることを特徴とする演算装置。
【請求項２】
前記タスク制御部は、
前記タスクキューに格納された前記タスクを前記処理演算部に出力する毎に、該タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を、それぞれの前記処理演算部が実行するタイミングを確認し、該確認したタイミングに基づいて、それぞれの前記タスクに対応した前記外部記憶部へのアクセスが、それぞれの前記タスクを前記処理演算部に出力するタイミングまでに完了するように、それぞれの前記タスクに対応する前記アクセス指示を出力する、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記タスク制御部は、
前記タスクキューに格納されたそれぞれの前記タスクの中から、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクを選択し、該対象タスクを前記処理演算部に出力する順番に基づいて、該対象タスクに応じた演算処理を前記処理演算部が実行するタイミングを確認し、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力する、
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
前記タスク制御部は、
前記タスクキューに格納された前記対象タスクを前記処理演算部に出力する順番が、当該演算装置に備えた前記処理演算部の数と、前記タスクキューに格納されることが想定されるそれぞれの前記タスクにおいて、該タスクに応じた演算処理を実行する際の処理時間が最小である実行時間と、前記メモリ制御部が前記外部記憶部にアクセスしてデータの転送を行う際の転送時間とに基づいて予め定めたデータ転送開始順番になったときに、該対象タスクに対応した前記アクセス指示を出力する、
ことを特徴とする請求項３に記載の演算装置。
【請求項５】
前記タスク制御部は、
前記タスクキューに格納されたそれぞれの前記タスク内の、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクよりも前に該タスクキューに格納された、前記外部記憶部に格納されているデータを使用しない演算処理を行う前記タスクである先行タスクに応じた演算処理を実行するそれぞれの実行時間に基づいて、該対象タスクに応じた演算処理を前記処理演算部が実行するタイミングを確認し、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力する、
ことを特徴とする請求項２に記載の演算装置。
【請求項６】
前記タスク制御部は、
前記先行タスクのそれぞれを前記処理演算部のそれぞれに出力することを想定し、それぞれの前記処理演算部が入力された前記先行タスクに応じた演算処理を実行した際の最小の実行時間を算出し、該算出した最小の実行時間と、前記メモリ制御部が前記外部記憶部にアクセスしてデータの転送を行う際の転送時間とに基づいて、前記対象タスクに対応した前記アクセス指示を出力する、
ことを特徴とする請求項５に記載の演算装置。
【請求項７】
前記タスク制御部は、
前記タスクキューに格納されたそれぞれの前記タスク内の、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクの優先度に基づいて、前記対象タスクを前記処理演算部に出力する順番を並び替え、最も優先度が高い前記対象タスクから、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力する、
ことを特徴とする請求項２に記載の演算装置。
【請求項８】
前記タスク制御部は、
前記対象タスクに対応した前記アクセス指示に応じて前記外部記憶部に格納されているデータを読み出して格納する前記データ記憶部に、前記タスクに応じた演算処理で使用するデータが格納されている場合には、該データ記憶部に格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を、前記対象タスクに対応した前記アクセス指示を出力するよりも前に出力する、
ことを特徴とする請求項３から請求項７のいずれか１の項に記載の演算装置。
【請求項９】
前記タスク制御部は、
前記タスクキューに格納されたそれぞれの前記タスク内の、前記データ記憶部に格納されているデータを使用した演算処理を行う前記タスクの優先度に基づいて、最も優先度が低い前記タスクが使用するデータを格納している前記データ記憶部から、格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を出力する、
ことを特徴とする請求項８に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に関する。
【背景技術】
【０００２】
従来から、プログラムに応じた演算処理を実行するプロセッサを備えた演算装置がある。このような演算装置では、プロセッサが実行するそれぞれの演算処理を複数のタスクに分割し、プロセッサは、分割したそれぞれのタスクを順次実行することによって演算処理を行う。演算装置における演算処理では、外部のメモリにアクセスしながら実行する、すなわち、演算処理で使用するデータを、外部のメモリから読み出したり、外部のメモリに書き込んだりしながら実行する演算処理もある。しかし、外部のメモリへのアクセスには多くの時間を要してしまうため、外部のメモリへのアクセスを伴う演算処理は、内部のみで行うことができる演算処理に比べて多くの時間を要する。このため、従来の演算装置では、演算装置の処理速度を向上させるため、演算処理に使用するデータを予め外部のメモリから読み出して、外部のメモリよりも高速なメモリ、いわゆる、キャッシュメモリに一時記憶しておく構成のものが多く見受けられる。
【０００３】
しかしながら、キャッシュメモリを備えた演算装置であっても、演算装置の回路規模の観点から、演算処理に必要な全てのデータを保持しておくことができるだけの記憶容量を持ったキャッシュメモリを備えることはできない。このため、演算処理に必要なデータがキャッシュメモリに事前に保持されていない場合、いわゆる、キャッシュミスの状態である場合には、やはり外部のメモリに対するアクセスが発生し、演算装置の処理速度を向上させることができない場合もある。
【０００４】
このことから、プロセッサがメモリからデータを読み出すロード命令およびメモリにデータを書き込むストア命令を含む演算命令（以下、「ロード・ストア命令」という）を抽出し、抽出したロード・ストア命令によってアクセスするメモリのアドレスに対するプリフェッチ命令を、データを使用する演算命令よりも早いタイミングで実行することによって、キャッシュミスを防止するようにした演算装置がある（特許文献１参照）。
【０００５】
また、プロセッサを複数備え、それぞれのプロセッサが、例えば、画像処理などの一連の処理を分担して並列に演算処理を行う、いわゆる、分散並列処理型の演算装置がある。分散並列処理型の演算装置では、要求された演算命令を複数個のプロセッサが分担して行うことによって、演算処理に要する時間の短縮を図ることができる。
【０００６】
このような分散並列処理型の演算装置において、プロセッサ同士でのそれぞれのタスクの処理の待ち合わせやラインバッファ処理など、データを一定時間保持する必要がある処理、あるいは演算装置に搭載しているプロセッサの数よりも多くのタスクからなる処理を行うために、特許文献１で開示された、キャッシュミスを防止する技術を適用することも考えられる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−７６３１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、演算装置に備えたプロセッサによる実際の演算処理においては、プリフェッチ命令が発行されてから、プリフェッチ命令によって事前に取得したデータを実際に使用する演算命令が実行されるまでのサイクル数が、プログラムの組み方によって変動する。そして、プリフェッチ命令の発行からデータを使用するまでのサイクル数を制御することはできない。このため、特許文献１で開示された技術を適用した演算装置であっても、演算命令に応じてデータを使用するときまでに、必要なデータの準備が必ず完了していることが保証されるものではない。
【０００９】
例えば、データを使用する今回の演算命令の１サイクル前にプリフェッチ命令を実行したとしても、プリフェッチ命令に応じたデータを取得するための外部のメモリのアクセスに３０サイクルを要し、前の演算命令の実行が１サイクルで完了してしまうような場合には、プリフェッチ命令によって事前にデータを準備しておくことができず、２９サイクルの間、今回の演算命令の実行が待たされることになる。この演算命令の実行が待たされている時間、つまり、キャッシュミスの状態になっている時間は、プロセッサが演算処理を行うことができず、演算装置の処理速度が低下する要因となってしまう。
【００１０】
このように、特許文献１で開示された技術を適用した演算装置であっても、常にキャッシュメモリへのデータのプリフェッチが間に合うということを保証することができず、必ずしもキャッシュミスを防止することができるとはいえない、という問題がある。
【００１１】
本発明は、上記の課題認識に基づいてなされたものであり、複数のプロセッサが連携して処理を行う演算装置において、それぞれのプロセッサが実際にデータを使用するタイミングまでに、必要なデータを準備しておくことにより、キャッシュミスを防止することができる演算装置を提供することを目的としている。
【課題を解決するための手段】
【００１２】
上記の課題を解決するため、本発明の演算装置は、入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納するデータ記憶部と、前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか１つの前記処理演算部に出力すると共に、前記タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を前記処理演算部が実行する際のタイミングに基づいて、前記外部記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、を備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複数のプロセッサが連携して処理を行う演算装置において、それぞれのプロセッサが実際にデータを使用するタイミングまでに、必要なデータを準備しておくことにより、キャッシュミスを防止することができる演算装置を提供することができるという効果が得られる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図２】本実施形態の演算装置に備えたタスク制御部の概略構成、およびタスク制御部に格納されたタスクの一例を説明する図である。
【図３】本実施形態の演算装置に備えたタスク制御部による第１の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。
【図４】本実施形態の演算装置に備えたタスク制御部による第１の動作における処理手順を示したフローチャートである。
【図５】本実施形態の演算装置に備えたタスク制御部による第２の動作における処理手順を示したフローチャートである。
【図６】本実施形態の演算装置に備えたタスク制御部の概略構成、およびタスク制御部に格納されたタスクの別の一例を説明する図である。
【図７】本実施形態の演算装置に備えたタスク制御部による第３の動作における処理手順を示したフローチャートである。
【図８】本実施形態の演算装置に備えたタスク制御部による第３の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。
【図９】本実施形態の演算装置に備えたタスク制御部による第３の動作において処理演算部に出力するタスクの順番を入れ替える場合の一例を説明する図である。
【図１０】本実施形態の演算装置に備えたタスク制御部による第３の動作において処理演算部に出力するタスクの順番を入れ替える場合の一例を説明する図である。
【図１１】本実施形態の演算装置に備えたタスク制御部による第３の動作において処理演算部に出力するタスクの順番を入れ替える場合の一例を説明する図である。
【図１２】本実施形態の演算装置に備えたタスク制御部による第４の動作における処理手順を示したフローチャートである。
【図１３】本実施形態の演算装置に備えたタスク制御部が、データ記憶部に格納されているデータを退避する処理手順を示したフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態について、図面を参照して説明する。図１は、本実施形態における演算装置の概略構成の一例を示したブロック図である。図１に示した演算装置１０は、ｎ個の処理演算部１１ａ〜処理演算部１１ｎと、タスク制御部１２と、メモリ制御部１３と、ｎ個のデータ記憶部１４ａ〜データ記憶部１４ｎと、を備えている。また、演算装置１０には、外部記憶部２０が接続されている。演算装置１０は、要求された演算処理を、処理演算部１１ａ〜処理演算部１１ｎのそれぞれで分担して行う、分散並列処理型の演算装置である。
【００１６】
なお、以下の説明においては、処理演算部１１ａ〜処理演算部１１ｎのそれぞれを区別せずに表す場合には、「処理演算部１１」という。また、データ記憶部１４ａ〜データ記憶部１４ｎのそれぞれを区別せずに表す場合には、「データ記憶部１４」という。
【００１７】
外部記憶部２０は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれで共有される、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリである。外部記憶部２０には、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが起動するためのプログラムや、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが演算処理を実行するために用いるデータが格納されている。また、外部記憶部２０には、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが演算処理の途中で生成したデータなどが、一時的に格納される。
【００１８】
処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、同じ処理機能を持ったプロセッサである。処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、演算装置１０に接続された外部記憶部２０へのデータの書き込みや、外部記憶部２０からのデータの読み出しを行いながら、タスク制御部１２から入力された、演算装置１０に対して要求された演算処理におけるそれぞれのタスクを実行する。ただし、演算装置１０では、外部記憶部２０へのデータの書き込みや、外部記憶部２０からのデータの読み出しを、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが直接行わない。そして、処理演算部１１ａ〜処理演算部１１ｎのそれぞれがタスクを実行する際には、外部記憶部２０へのデータの書き込みや、外部記憶部２０からのデータの読み出しの代わりに、データ記憶部１４へのデータの書き込みや、データ記憶部１４からのデータの読み出しを行いながら、タスク制御部１２から入力されたそれぞれのタスクを実行する。
【００１９】
また、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、自身がタスクを実行した後に引き続き別の処理演算部１１または自身に、次のタスクを実行させるための情報や、次に実行するタスクの内容を表す情報を、次のタスクの実行要求として、タスク制御部１２に出力する。ここで、処理演算部１１がタスク制御部１２に出力する次のタスクの実行要求の情報には、タスクを実行する際に使用するデータが保持されている外部記憶部２０のアドレスやデータ記憶部１４を指定する情報が含まれている。また、処理演算部１１がタスク制御部１２に出力する次のタスクの実行要求の情報には、次のタスクの実行に必要な様々なパラメータのデータが含まれている。なお、以下の説明においては、処理演算部１１がタスク制御部１２に出力する、次のタスクの実行要求も、タスクという。
【００２０】
また、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、タスク制御部１２から入力された、別の処理演算部１１または自身が前回のタスクを実行した結果である、次のタスクを実行する。なお、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、さらに別の処理演算部１１または自身が引き続き実行するタスクがある場合には、引き続き別の処理演算部１１または自身に、次のタスクを実行させるための情報や、次に実行するタスクの内容を表す情報を、次のタスクとして再度、タスク制御部１２に出力する。
【００２１】
また、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、次のタスクを受け付けられる状態であるか否かを表す信号を、タスク制御部１２に出力する。処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次に実行するタスクを受け付けられる状態であることを表す信号を、タスク制御部１２に出力する。
【００２２】
タスク制御部１２は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力されたそれぞれのタスクを受け付け、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力された、次のタスクを受け付けられる状態であるか否かを表す信号に基づいて、受け付けたタスクを、処理演算部１１ａ〜処理演算部１１ｎのいずれか１つに割り当てる。
【００２３】
より具体的には、タスク制御部１２は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力されたそれぞれのタスクに基づいて、次のタスクを受け付けられる状態であることを表す信号を入力している処理演算部１１の中から、次のタスクを実行させる、いずれか１つ処理演算部１１を選択する。そして、タスク制御部１２は、選択したいずれか１つの処理演算部１１にタスクを出力することによって、演算装置１０に対して要求された演算処理におけるそれぞれのタスクを、処理演算部１１ａ〜処理演算部１１ｎのそれぞれに分配する。
【００２４】
タスク制御部１２は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれからのタスクを受け付けるための構成として、タスクキュー１２１を備えている。タスクキュー１２１は、入力されたタスクを格納する待ち行列のメモリである。タスクキュー１２１には、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力されたそれぞれのタスクが、入力された順番で順次格納される。タスクキュー１２１に格納されたそれぞれのタスクは、基本的に、格納された順番で出力されるが、演算装置１０では、タスク制御部１２が、タスクキュー１２１に格納されたタスクを出力する処理演算部１１や、タスクの出力順番を制御する。
【００２５】
また、タスク制御部１２は、タスクキュー１２１に格納されたそれぞれのタスクを実行するタイミングに基づいて、外部記憶部２０にアクセスするための指示（以下、「アクセス指示」という）を、メモリ制御部１３に出力する。例えば、タスク制御部１２は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によって外部記憶部２０へのデータの書き込み、および外部記憶部２０からのデータの読み出しを行うアクセス指示を、メモリ制御部１３に出力する。
【００２６】
より具体的には、タスク制御部１２は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて、タスクを実行する際に使用する外部記憶部２０に格納されているデータを、このタスクが割り当てられた処理演算部１１が実際にタスクを実行するタイミングまでに、事前に取得する（読み出す）ためのＤＭＡのアクセス指示を、メモリ制御部１３に出力する。また、タスク制御部１２は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて、それぞれの処理演算部１１が割り当てられたタスクを実行する際に使用しないデータを、事前に外部記憶部２０に退避する（書き込む）ためのＤＭＡのアクセス指示を、メモリ制御部１３に出力する。ここで、タスク制御部１２がメモリ制御部１３に出力するアクセス指示には、外部記憶部２０のアドレスや、読み出しまたは書き込みを行うデータの量（大きさ）などを表す情報が含まれている。
【００２７】
なお、タスク制御部１２によるタスクを出力する処理演算部１１やタスクの出力順番の制御方法、およびメモリ制御部１３に出力する外部記憶部２０へのアクセス指示に関する詳細な説明は、後述する。
【００２８】
メモリ制御部１３は、タスク制御部１２から入力されたアクセス指示に応じて、演算装置１０に接続された外部記憶部２０からのデータの読み出しや、外部記憶部２０へのデータの書き込みを行う。
【００２９】
より具体的には、メモリ制御部１３は、タスク制御部１２から入力された、外部記憶部２０に格納されているデータを事前に取得する（読み出す）ためのアクセス指示に応じて、アクセス指示によって指定された外部記憶部２０のアドレスから、アクセス指示によって指定された量のデータを読み出し、読み出したデータを、アクセス指示によって指定されたデータ記憶部１４に格納する。メモリ制御部１３は、タスク制御部１２から入力された、データを外部記憶部２０に退避する（書き込む）ためのアクセス指示に応じて、アクセス指示によって指定されたデータ記憶部１４に格納されているデータを読み出し、読み出したデータを、アクセス指示によって指定された外部記憶部２０のアドレスの記憶領域に書き込む。
【００３０】
また、メモリ制御部１３は、タスク制御部１２から入力されたアクセス指示に応じて、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力された次のタスクの実行要求の情報に含まれる、タスクの実行に必要な様々なパラメータのデータを、データ記憶部１４に格納、または外部記憶部２０に退避する。
【００３１】
より具体的には、メモリ制御部１３は、タスク制御部１２から入力された、パラメータのデータを格納する（書き込む）ためのアクセス指示に応じて、アクセス指示によって指定されたデータ記憶部１４ａ〜データ記憶部１４ｎのいずれかに、アクセス指示によって指定されたパラメータのデータを格納する。メモリ制御部１３は、タスク制御部１２から入力された、パラメータのデータを外部記憶部２０に退避する（書き込む）ためのアクセス指示に応じて、アクセス指示によって指定されたパラメータのデータを、アクセス指示によって指定された外部記憶部２０のアドレスの記憶領域に書き込む。ここで外部記憶部２０に退避されたパラメータのデータは、タスク制御部１２から必要に応じて入力されるパラメータのデータを読み出すためのアクセス指示に応じて、外部記憶部２０から読み出され、アクセス指示によって指定されたデータ記憶部１４に再び格納される。
【００３２】
データ記憶部１４ａ〜データ記憶部１４ｎのそれぞれは、処理演算部１１ａ〜処理演算部１１ｎのそれぞれに対応し、対応する処理演算部１１がタスクを実行する際に使用するデータや、次のタスクを実行する際に使用するデータ（例えば、現在のタスクを実行した結果のデータ）を格納する、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリ、いわゆる、キャッシュメモリである。
【００３３】
なお、図１では、演算装置１０内に、処理演算部１１のそれぞれに対応したｎ個のデータ記憶部１４を備えた構成を示しているが、データ記憶部１４の構成は、本実施形態の構成のみに限定されるものではない。例えば、演算装置内に１つのデータ記憶部を備え、このデータ記憶部の記憶領域を、処理演算部１１のそれぞれに対応する数に分割した構成であっても、同様に考えることができる。ただし、複数の処理演算部１１が同時にデータ記憶部の別の領域に対してデータの書き込みや読み出しを行うことを考慮すると、データ記憶部は、図１に示したように、処理演算部１１のそれぞれに対応した構成であることが望ましいと考えられる。
【００３４】
このように、演算装置１０では、いずれの処理演算部１１から出力されたタスクも、タスク制御部１２を経由してから、次のタスクを実行する処理演算部１１に入力される。そして、演算装置１０では、次のタスクが割り当てられた処理演算部１１が、外部記憶部２０に格納されているデータを使用するタイミングよりも早いタイミングで、タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておく。また、演算装置１０では、処理演算部１１がタスクを実行する際にデータを使用しない場合には、対応するデータ記憶部１４に格納されたデータを、外部記憶部２０に退避しておく。
【００３５】
次に、演算装置１０の動作について説明する。なお、以下の説明においては、演算装置１０に備えている処理演算部１１とデータ記憶部１４とは、それぞれ４つずつである、すなわち、演算装置１０には、処理演算部１１ａ〜処理演算部１１ｄと、データ記憶部１４ａ〜データ記憶部１４ｄとを備えているものとして説明する。また、演算装置１０に備えた４つの処理演算部１１ａ〜処理演算部１１ｄは、想定される以下の１０種類のタスクをそれぞれ実行することができ、それぞれのタスクを実行する際の実行時間（サイクル数）は、以下のサイクル数であるものとする。ここで、１０種類のタスクの平均のサイクル数は、１００サイクルである。
【００３６】
タスク０＝１１０サイクル
タスク１＝１２０サイクル
タスク２＝１３０サイクル
タスク３＝１４０サイクル
タスク４＝１５０サイクル
タスク５＝９０サイクル
タスク６＝８０サイクル
タスク７＝７０サイクル
タスク８＝６０サイクル
タスク９＝５０サイクル
【００３７】
なお、タスク制御部１２は、それぞれのタスクを実行する際の上記のサイクル数が事前にわかっているものとする。また、メモリ制御部１３が外部記憶部２０に格納されているデータを事前に取得する（読み出す）、または外部記憶部２０にデータを退避する（書き込む）際には、ＤＭＡによって外部記憶部２０にアクセスするものとする。なお、メモリ制御部１３がＤＭＡによって外部記憶部２０にアクセスする際のデータ転送時間（サイクル数）は、１００サイクルであるものとする。
【００３８】
＜第１の動作＞
まず、演算装置１０の動作において、タスク制御部１２が、タスクキュー１２１に格納されたタスクの順番に基づいて、外部記憶部２０に格納されているデータをＤＭＡによって事前に取得する（読み出す）ためのアクセス指示（以下「ＤＭＡリードアクセス指示」を、メモリ制御部１３に出力する第１の動作について説明する。図２は、本実施形態の演算装置１０に備えたタスク制御部１２の概略構成、およびタスク制御部１２に格納されたタスクの一例を説明する図である。
【００３９】
上述したように、タスク制御部１２は、ＤＭＡによって外部記憶部２０にアクセスするためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する。このため、タスク制御部１２には、図２に示したように、ＤＭＡリクエスト発生部１２２を備えている。ＤＭＡリクエスト発生部１２２は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて決定されたタイミングのときに、ＤＭＡリードアクセス指示をメモリ制御部１３に出力する。
【００４０】
また、図２には、タスク制御部１２に備えたタスクキュー１２１のそれぞれにタスクが格納されている状態を示している。なお、図２においてタスクキュー１２１内に示した“＃（シャープ）”に続く数字は、タスクキュー１２１にそれぞれのタスクが格納された順番を表すタスク番号を示し、“＃０”が最初に格納されたタスク（図２では、タスク６）であり、“＃１”が２番目に格納されたタスク（図２では、タスク３）であることを示している。また、タスク番号は、それぞれのタスクが処理演算部１１に出力される順番も示している。
【００４１】
タスク制御部１２は、基本的に、タスクキュー１２１にそれぞれのタスクが格納された順番で、それぞれのタスクを処理演算部１１に出力する。このとき、最初に格納された“＃０”のタスク６が処理演算部１１に出力されると、“＃１”〜“＃９”のそれぞれのタスクは、タスク番号が１つずつ小さくなる。すなわち、図２における“＃１”のタスク３が“＃０”のタスク３になり、同様に、“＃２”〜“＃９”のそれぞれのタスクも“＃１”〜“＃８”のそれぞれのタスクとなる。これにより、タスク制御部１２は、常に“＃０”のタスクを処理演算部１１に出力するタスクとすることにより、タスクの出力順番の制御を容易に行うことができる。
【００４２】
しかし、以下の説明においては、説明を容易にするため、“＃０”のタスクが処理演算部１１に出力される毎にタスク番号が変わるのではなく、タスク制御部１２が、タスクキュー１２１に格納されているタスク番号が小さいタスクから、すなわち、＃０”のタスク６からタスク番号が大きくなっていく順番で、それぞれのタスクを処理演算部１１に出力するものとして説明する。そして、以下の説明においては、“＃８”のタスク０および“＃９”のタスク１を処理演算部１１に出力する前に、タスク制御部１２が、“＃８”のタスク０および“＃９”のタスク１を実行する際に使用するデータを事前に取得する（読み出す）場合の動作について説明する。なお、“＃０”〜“＃７”のそれぞれのタスクでは、外部記憶部２０に格納されているデータを使用しない、すなわち、“＃０”〜“＃７”のそれぞれのタスクを実行するためのＤＭＡリードアクセス指示は出力しないものとする。
【００４３】
ここで、タスク制御部１２が、ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングを決定する際の考え方について説明する。タスク制御部１２は、外部記憶部２０に格納されているデータを使用するタスクの実行が開始されるタイミングよりも前に、外部記憶部２０へのアクセスが終了し、タスクを実行する際に使用するデータがデータ記憶部１４に格納されている状態にしておく。
【００４４】
このため、タスク制御部１２は、外部記憶部２０に格納されているデータを使用するタスク（以下、「対象タスク」という）よりも前に実行するタスク（以下、「先行タスク」という）の実行時間（以下、「実行サイクル数」という）が、外部記憶部２０にアクセスする際のデータ転送時間（以下、「転送サイクル数」という）よりも長いタイミングとなるように、ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングに決定する。このタイミングは、下式（１）の関係を満足する必要がある。
【００４５】
（（データ転送開始順番＋コア数）×最短タスク実行時間÷コア数）≧データ転送時間
・・・（１）
【００４６】
そして、上式（１）を満足するデータ転送開始順番は、下式（２）となる。
【００４７】
データ転送開始順番≧（コア数×（データ転送時間÷最短タスク実行時間−１））
・・・（２）
【００４８】
第１の動作における演算装置１０の構成では、上式（２）におけるコア数は“４”、データ転送時間は１００サイクルであり、１０種類のタスクにおける最短タスク実行時間、すなわち、１０種類のタスクの内最小の実行サイクル数は５０サイクルである。従って、第１の動作の演算装置１０におけるデータ転送開始順番は、下式（３）となる。
【００４９】
データ転送開始順番≧（４×（１００÷５０−１））＝４  ・・・（３）
【００５０】
タスク制御部１２は、対象タスクが上式（３）のデータ転送開始順番となったタイミングを、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングに決定する。より具体的には、図２に示した“＃８”のタスク０を対象タスクとした場合、対象タスクを出力する順番が４番目、すなわち、“＃４”となったタイミングを、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングに決定する。また、図２に示した“＃９”のタスク１を対象タスクとした場合、対象タスクを出力する順番が４番目、すなわち、“＃４”となったタイミングを、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングに決定する。
【００５１】
そして、タスク制御部１２は、決定したタイミングのときに、ＤＭＡリードアクセス指示をメモリ制御部１３に出力させるための指示を、ＤＭＡリクエスト発生部１２２に出力する。この指示に応じて、ＤＭＡリクエスト発生部１２２は、ＤＭＡリードアクセス指示をメモリ制御部１３に出力し、メモリ制御部１３は、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、外部記憶部２０からのデータの読み出しを行う。
【００５２】
なお、タスク制御部１２は、上式（３）のデータ転送開始順番＝４を予め記憶しておく。しかし、データ転送開始順番を記憶しておく構成は、タスク制御部１２内に記憶しておく構成に限定されるものではなく、例えば、演算装置１０を制御する不図示の制御部内に記憶しておき、制御部が、記憶しているデータ転送開始順番をタスク制御部１２に出力する構成であってもよい。
【００５３】
図３は、本実施形態の演算装置１０に備えたタスク制御部１２による第１の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。図３に示したタイミングチャートでは、演算装置１０に備えた４つの処理演算部１１ａ〜処理演算部１１ｄにおける前のタスクの実行が同時に完了し、その後、タスク制御部１２が、それぞれの処理演算部１１に順次タスクを出力する場合を示している。
【００５４】
より具体的には、最初の“＃０”のタスク６を処理演算部１１ａに、２番目の“＃１”のタスク３を処理演算部１１ｂに、３番目の“＃２”のタスク４を処理演算部１１ｃに、４番目の“＃３”のタスク０を処理演算部１１ｄに、それぞれ出力する。このとき、“＃８”のタスク０が、４番目（“＃４”）のタスクとなるため、タスク制御部１２は、図２に示した“＃８”のタスク０に対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力させるための指示を、ＤＭＡリクエスト発生部１２２に出力する。これにより、ＤＭＡリクエスト発生部１２２は、“＃８”のタスク０に対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力し、メモリ制御部１３は、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、“＃８”のタスク０に対応したデータを外部記憶部２０から読み出して、“＃８”のタスク０を実行する処理演算部１１ｄに対応したデータ記憶部１４ｄに格納する。
【００５５】
その後、処理演算部１１ａが最初の“＃０”のタスク６の実行が完了したとき、タスク制御部１２は、５番目の“＃４”のタスク３を処理演算部１１ａに出力する。このとき、“＃９”のタスク１が、４番目（“＃４”）のタスクとなるため、タスク制御部１２は、図２に示した“＃９”のタスク１に対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力させるための指示を、ＤＭＡリクエスト発生部１２２に出力する。これにより、ＤＭＡリクエスト発生部１２２は、“＃９”のタスク１に対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力する。そして、メモリ制御部１３は、“＃８”のタスク０に対応したデータの外部記憶部２０からの読み出しが終了した後、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、“＃９”のタスク１に対応したデータを外部記憶部２０から読み出して、“＃９”のタスク１を実行する処理演算部１１ｂに対応したデータ記憶部１４ｂに格納する。
【００５６】
このように、タスク制御部１２は、対象タスクが割り当てられる処理演算部１１が、外部記憶部２０に格納されているデータを使用するタイミングよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておく。
【００５７】
なお、対象タスクを実行する際に使用するデータを、対応するデータ記憶部１４に事前に格納する際には、このデータ記憶部１４に演算処理に必要な前のデータが格納されていないか、すなわち、演算処理に必要なデータが残っていないかを確認し、演算処理に必要な前のデータが格納されていない場合にのみ、対象タスクを実行する際に使用するデータを事前に格納する。従って、対応するデータ記憶部１４に演算処理に必要な前のデータが格納されている、すなわち、演算処理に必要なデータが残っている場合には、現在格納されているデータを、外部記憶部２０にデータを退避しておく（書き込んでおく）必要がある。このため、タスク制御部１２は、決定したデータ転送開始順番よりも前のタイミングを、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングに決定することが望ましい。この場合には、例えば、上式（２）におけるデータ転送時間を２倍にして、データ転送開始順番を決定するなどの方法が考えられる。
【００５８】
次に、対象タスクが実行される前に、対象タスクが使用するデータを事前にデータ記憶部１４に格納しておく、タスク制御部１２の処理手順について説明する。図４は、本実施形態の演算装置１０に備えたタスク制御部１２による第１の動作における処理手順を示したフローチャートである。なお、以下の説明においては、説明を容易にするため、ＤＭＡリクエスト発生部１２２が、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングを決定するものとして説明する。また、対象タスクにおけるデータ転送開始順番は“４”であるものとする。
【００５９】
ＤＭＡリクエスト発生部１２２は、タスク制御部１２がタスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、図４に示したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理を実行する。まず、タスク制御部１２が、タスクキュー１２１に格納された最初の“＃０”のタスク６を処理演算部１１ａに出力すると、ＤＭＡリクエスト発生部１２２は、ステップＳ１においてタスク番号ｉを“０”にクリアし、タスクキュー１２１に格納されている“＃０”のタスク（図２に示した２番目の“＃１”のタスク３）から、ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理を開始する。なお、図４において、ＱＵＥＵＥ−ＭＡＸは、タスク番号の最大値である。
【００６０】
ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理において、ＤＭＡリクエスト発生部１２２は、“＃０”のタスク（図２に示した２番目の“＃１”のタスク３）が、外部記憶部２０に格納されているデータを使用する対象タスクであるか否かを確認する（ステップＳ１１）。ステップＳ１１において、外部記憶部２０に格納されているデータを使用する対象タスクでない場合（ステップＳ１１の“ＮＯ”）には、ステップＳ１においてタスク番号ｉに１を加えて、すなわち、タスク番号ｉ＝１として、タスクキュー１２１に格納された２番目の“＃１”のタスク（図２に示した３番目の“＃２”のタスク４）に対する確認を繰り返す。
【００６１】
なお、図２に示した２番目の“＃１”のタスク３〜８番目の“＃７”のタスク６は、外部記憶部２０に格納されているデータを使用する対象タスクではないため、ステップＳ１１における確認の結果は、“ＮＯ”の結果を繰り返す。そして、タスク番号ｉ＝７のとき、８番目の“＃７”のタスク（図２に示した９番目の“＃８”のタスク０）は対象タスクであるため、ステップＳ１１において、外部記憶部２０に格納されているデータを使用する対象タスクである場合（ステップＳ１１の“ＹＥＳ”）となる。
【００６２】
ステップＳ１１における確認の結果が“ＹＥＳ”の結果である場合、ＤＭＡリクエスト発生部１２２は、対象タスクにおけるデータ転送開始順番＝４を取得する（ステップＳ１２）。
【００６３】
続いて、ＤＭＡリクエスト発生部１２２は、取得したデータ転送開始順番＝４が、タスク番号ｉと同じであるか否か、すなわち、対象タスクが４番目の“＃４”であるか否かを確認する（ステップＳ１３）。ステップＳ１３において、対象タスクが４番目の“＃４”でない場合（ステップＳ１３の“ＮＯ”）には、ステップＳ１においてタスク番号ｉに１を加えて、タスクキュー１２１に格納された次のタスク（図２に示した１０番目の“＃９”のタスク１）に対する確認を行う。
【００６４】
また、ステップＳ１３において、対象タスクが４番目の“＃４”である場合（ステップＳ１３の“ＹＥＳ”）には、ＤＭＡリクエスト発生部１２２は、４番目の“＃４”のタスク（図２に示した９番目の“＃８”のタスク０）が使用するデータを外部記憶部２０から事前に取得するためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する（ステップＳ１４）。これにより、メモリ制御部１３は、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、“＃８”のタスク０に対応したデータを外部記憶部２０から読み出して、“＃８”のタスク０を実行する処理演算部１１ｄに対応したデータ記憶部１４ｄに格納する。
【００６５】
以降、同様に、タスク制御部１２がタスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、図４に示したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理が実行される。これにより、メモリ制御部１３は、“＃８”のタスク０に対応したデータの外部記憶部２０からの読み出しが終了した後、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、“＃９”のタスク１に対応したデータを外部記憶部２０から読み出して、“＃９”のタスク１を実行する処理演算部１１ｂに対応したデータ記憶部１４ｂに格納する。
【００６６】
このように、タスク制御部１２における第１の動作では、タスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、外部記憶部２０に格納されているデータを使用する対象タスクが処理演算部１１に出力される順番を確認することによって、対象タスクが割り当てられる処理演算部１１が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておく。これにより、演算装置１０では、それぞれの処理演算部１１が使用するデータのキャッシュミスを防止することができる。
【００６７】
なお、上述したように、対象タスクを実行する際に使用するデータを、対応するデータ記憶部１４に事前に格納する際には、このデータ記憶部１４に演算処理に必要な前のデータが格納されていないかを確認し、データ記憶部１４に演算処理に必要な前のデータが格納されている場合には、現在格納されているデータを、外部記憶部２０にデータを退避しておく（書き込んでおく）必要がある。このため、例えば、図４に示したフローチャートのステップＳ１１とステップＳ１２との間に、データ記憶部１４に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部１４に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップＳ１２以降の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部１４に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部１４に現在格納されているデータを外部記憶部２０にデータを退避してから（書き込んでから）、ステップＳ１２以降の処理を実行することになる。
【００６８】
＜第２の動作＞
次に、演算装置１０の動作、特にタスク制御部１２の第２の動作について説明する。第２の動作は、タスクキュー１２１に格納されたそれぞれのタスクからタスク制御部１２が予測した先行タスクの実行時間に基づいて、外部記憶部２０に格納されているデータをＤＭＡによって事前に取得する（読み出す）ためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する動作である。なお、本第２の動作の説明においても、タスク制御部１２の概略構成は、図２に示したタスク制御部１２の概略構成と同様である。また、タスク制御部１２に格納されたタスクも、図２に示したタスクが格納されているものとして説明を行う。
【００６９】
図５は、本実施形態の演算装置１０に備えたタスク制御部１２による第２の動作における処理手順を示したフローチャートである。なお、以下の説明においても、説明を容易にするため、ＤＭＡリクエスト発生部１２２が、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングを決定するものとして説明する。また、対象タスクに対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミング（以下、「データ転送開始タイミング」という）は、外部記憶部２０にアクセスする際の転送サイクル数と同じタイミング、すなわち、１００サイクルであるものとする。
【００７０】
なお、タスク制御部１２は、データ転送開始タイミング＝１００を予め記憶しておく構成であっても、例えば、演算装置１０を制御する不図示の制御部内にデータ転送開始タイミングを記憶しておき、制御部が、記憶しているデータ転送開始タイミングをタスク制御部１２に出力する構成であってもよい。
【００７１】
ＤＭＡリクエスト発生部１２２は、タスク制御部１２がタスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、図５に示したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理を実行する。まず、ＤＭＡリクエスト発生部１２２は、ステップＳ２においてタスク番号ｉを“０”にクリアする。そして、ＤＭＡリクエスト発生部１２２は、タスクキュー１２１に格納されている最初の“＃０”のタスク６から、ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理を開始する。
【００７２】
ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理において、ＤＭＡリクエスト発生部１２２は、最初の“＃０”のタスク６が、外部記憶部２０に格納されているデータを使用する対象タスクであるか否かを確認する（ステップＳ２１）。ステップＳ２１において、最初の“＃０”のタスク６が、外部記憶部２０に格納されているデータを使用する対象タスクでない場合（ステップＳ２１の“ＮＯ”）には、ステップＳ２においてタスク番号ｉに１を加えてタスク番号ｉ＝１とし、タスクキュー１２１に格納された２番目の“＃１”のタスク３に対する確認を繰り返す。
【００７３】
なお、図２に示した最初の“＃０”のタスク６〜８番目の“＃７”のタスク６は、外部記憶部２０に格納されているデータを使用する対象タスクではないため、ステップＳ２１における確認の結果は、“ＮＯ”の結果を繰り返す。そして、タスク番号ｉ＝８のとき、９番目の“＃８”のタスク０は対象タスクであるため、ステップＳ２１において、外部記憶部２０に格納されているデータを使用する対象タスクである場合（ステップＳ２１の“ＹＥＳ”）となる。
【００７４】
ステップＳ２１における確認の結果が“ＹＥＳ”の結果である場合、ＤＭＡリクエスト発生部１２２は、対象タスクが実行されるよりも前に実行される先行タスク（最初の“＃０”のタスク６〜８番目の“＃７”のタスク６）のそれぞれが処理演算部１１に割り当てられることを想定した場合に、それぞれの処理演算部１１に幾つの先行タスクが割り当てられるか、すなわち、処理演算部１１あたりの先行タスク数ＮＵＭ−ＯＦ−ＭＩＮを算出する（ステップＳ２２）。例えば、図２に示したタスクキュー１２１の状態では、処理演算部１１あたりの先行タスク数ＮＵＭ−ＯＦ−ＭＩＮは“２”となる。また、それぞれの処理演算部１１に割り当てられた先行タスクを実行する際の、処理演算部１１あたりの実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の値を、“最大値（図５においては０ｘＦＦ）”にクリアする。
【００７５】
続いて、ＤＭＡリクエスト発生部１２２は、ステップＳ２３において処理演算部１１あたりの先行タスク数ｋを“０”にクリアし、それぞれの処理演算部１１に先行タスク数ＮＵＭ−ＯＦ−ＭＩＮのタスクが割り当てられた場合に想定される最小の実行サイクル数を求める。このため、ＤＭＡリクエスト発生部１２２は、先行タスクをそれぞれの処理演算部１１が実行する際の、処理演算部１１あたりの実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の値を、先行タスクの実行サイクル数に応じた値に更新する処理を開始する。
【００７６】
処理演算部１１あたりの実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の値の更新処理では、ＤＭＡリクエスト発生部１２２は、まず、ステップＳ２４において先行タスク番号ｊを“０”にクリアする。そして、ＤＭＡリクエスト発生部１２２は、最初の先行タスクである“＃０”のタスク６の実行サイクル数が、実行サイクル数の最小値ＭＩＮ［ｋ］の値よりも小さいか否かを確認する（ステップＳ２５）。
【００７７】
ここでは、ステップＳ２２において、実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］を“最大値”にしているため、ステップＳ２５における確認の結果が“ＹＥＳ”となり、“＃０”のタスク６の実行サイクル数＝８０を、実行サイクル数の最小値ＭＩＮ［０］の値にする（ステップＳ２６）。なお、ステップＳ２５における確認の結果が“ＮＯ”の結果である場合には、ステップＳ２４において先行タスク番号ｊに１を加えて先行タスク番号ｊ＝１とし、ステップＳ２５において、タスクキュー１２１に格納された２番目の“＃１”のタスク３の実行サイクル数が、実行サイクル数の最小値ＭＩＮ［０］の値よりも小さいか否かの確認を繰り返す。
【００７８】
同様に、ステップＳ２４のループによって、先行タスクの中の最小の実行サイクル数が、実行サイクル数の最小値ＭＩＮ［０］の値となる。全ての先行タスクに対するステップＳ２４のループの処理が完了すると、ＤＭＡリクエスト発生部１２２は、ステップＳ２３において先行タスク数ｋに１を加えて先行タスク数ｋ＝１とする。そして、同様に、ステップＳ２４のループによる、処理演算部１１あたりの実行サイクル数の最小値ＭＩＮ［１］の値の更新処理を行う。
【００７９】
なお、２回目以降の実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の更新処理においては、その前の回の実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の更新処理において使用した先行タスクの実行サイクル数とならないように、１度採用した先行タスクは、２回目以降の実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の更新処理に使用しないようにする。例えば、図２に示したタスクキュー１２１の状態では、“＃５”のタスク７の実行サイクル数＝７０が、実行サイクル数の最小値ＭＩＮ［０］の値となるため、実行サイクル数の最小値ＭＩＮ［１］の値の更新処理では、“＃５”のタスク７の実行サイクル数の確認を行わないようにする。これにより、図２に示したタスクキュー１２１の状態では、“＃６”のタスク７の実行サイクル数＝７０が、実行サイクル数の最小値ＭＩＮ［１］の値となる。
【００８０】
このステップＳ２３のループによって、処理演算部１１あたりの実行サイクル数の最小値ＭＩＮ［ＮＵＭ−ＯＦ−ＭＩＮ］の値が、先行タスクの実行サイクル数が最小である値に、順次更新される。
【００８１】
続いて、ＤＭＡリクエスト発生部１２２は、実行サイクル数の最小値ＭＩＮ［ｋ］の値を全て合算した、合計値ＭＩＮ−ＳＵＭを算出する（ステップＳ２７）。続いて、ＤＭＡリクエスト発生部１２２は、合計値ＭＩＮ−ＳＵＭに基づいて、現在がデータ転送開始タイミングであるか否かを判定する（ステップＳ２８）。ＤＭＡリクエスト発生部１２２におけるステップＳ２８の判定は、例えば、データ転送開始タイミングの値が合計値ＭＩＮ−ＳＵＭの値よりも小さく（データ転送開始タイミング＜合計値ＭＩＮ−ＳＵＭ）、かつ、データ転送開始タイミングの値が１つの処理演算部１１が実行する先行タスクの実行サイクル数の平均値よりも大きい（データ転送開始タイミング＞合計値ＭＩＮ−ＳＵＭ−合計値ＭＩＮ−ＳＵＭ／先行タスク数ＮＵＭ−ＯＦ−ＭＩＮ）場合に、現在がデータ転送開始タイミングである（ステップＳ２８の“ＹＥＳ”）と判定する。
【００８２】
例えば、図２に示したタスクキュー１２１の状態では、先行タスク数ＮＵＭ−ＯＦ−ＭＩＮ＝２、実行サイクル数の最小値ＭＩＮ［０］＝７０、実行サイクル数の最小値ＭＩＮ［１］＝７０であり、合計値ＭＩＮ−ＳＵＭ＝１４０である。従って、ＤＭＡリクエスト発生部１２２は、データ転送開始タイミングが、１４０＞データ転送開始タイミング＞１４０−１４０／２（＝７０）の条件を満足するときに、現在がデータ転送開始タイミングであると判定する。
【００８３】
ステップＳ２８において、現在がデータ転送開始タイミングでないと判定された場合（ステップＳ２８の“ＮＯ”）には、ステップＳ２においてタスク番号ｉに１を加えて、タスクキュー１２１に格納された次のタスク（図２に示した１０番目の“＃９”のタスク１）に対する確認を行う。
【００８４】
また、ステップＳ２８において、現在がデータ転送開始タイミングであると判定された場合（ステップＳ２８の“ＹＥＳ”）には、ＤＭＡリクエスト発生部１２２は、９番目の“＃８”のタスク０が使用するデータを外部記憶部２０から事前に取得するためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する（ステップＳ２９）。これにより、メモリ制御部１３は、例えば、図３に示した第１の動作におけるタスクの分配とデータ転送とのタイミングと同様に、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、“＃８”のタスク０に対応したデータを外部記憶部２０から読み出して、“＃８”のタスク０を実行する処理演算部１１ｄに対応したデータ記憶部１４ｄに格納する。
【００８５】
以降、同様に、タスク制御部１２がタスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、図５に示したＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの決定処理が実行される。これにより、メモリ制御部１３は、図３に示した第１の動作におけるタスクの分配とデータ転送とのタイミングと同様に、“＃８”のタスク０に対応したデータの外部記憶部２０からの読み出しが終了した後、ＤＭＡリクエスト発生部１２２から入力されたＤＭＡリードアクセス指示に応じて、“＃９”のタスク１に対応したデータを外部記憶部２０から読み出して、“＃９”のタスク１を実行する処理演算部１１ｂに対応したデータ記憶部１４ｂに格納する。
【００８６】
このように、タスク制御部１２における第２の動作では、タスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、先行タスクの実行時間を予測し、予測した先行タスクの実行時間とデータ転送開始タイミングとに基づいて、対象タスクが使用するデータを取得するためのＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングを決定する。これにより、タスク制御部１２における第２の動作でも、対象タスクが割り当てられる処理演算部１１が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておくことができる。このことにより、演算装置１０では、それぞれの処理演算部１１が使用するデータのキャッシュミスを防止することができる。
【００８７】
なお、対象タスクを実行する際に使用するデータを、対応するデータ記憶部１４に事前に格納する際には、このデータ記憶部１４に演算処理に必要な前のデータが格納されていないかを確認し、データ記憶部１４に演算処理に必要な前のデータが格納されている場合には、現在格納されているデータを、外部記憶部２０にデータを退避しておく（書き込んでおく）必要がある。このため、例えば、図５に示したフローチャートのステップＳ２８とステップＳ２９との間に、データ記憶部１４に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部１４に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップＳ２９の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部１４に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部１４に現在格納されているデータを外部記憶部２０にデータを退避してから（書き込んでから）、ステップＳ２９の処理を実行することになる。このため、ステップＳ２８において判定されるデータ転送開始タイミングは、例えば、外部記憶部２０にアクセスする際の転送サイクル数を２倍にしておくなど、メモリ制御部１３がＤＭＡによって外部記憶部２０にアクセスする際の転送サイクル数に対して余裕を持っておくことが望ましい。
【００８８】
＜第３の動作＞
次に、演算装置１０の動作、特にタスク制御部１２の第３の動作について説明する。第３の動作は、タスクキュー１２１に格納されたそれぞれのタスクの優先度に基づいて、外部記憶部２０に格納されているデータをＤＭＡによって事前に取得する（読み出す）ためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する動作である。
【００８９】
図６は、本実施形態の演算装置１０に備えたタスク制御部１２の概略構成、およびタスク制御部１２に格納されたタスクの別の一例を説明する図である。本第３の動作の説明においても、タスク制御部１２の概略構成は、図２に示したタスク制御部１２の概略構成と同様である。ただし、本第３の動作の説明においては、図６に示したように、タスク制御部１２に格納されたタスクが、図２に示したタスクと異なるものとする。
【００９０】
なお、図６に示したタスクにおいても、図２に示したタスクと同様に、タスクキュー１２１内に示した“＃（シャープ）”に続く数字は、タスクキュー１２１にそれぞれのタスクが格納された順番を表すタスク番号を示している。また、本第３の動作においては、タスクに続く数字が大きいほど優先度が高い、つまり、優先度は、タスク９＞タスク８＞タスク７＞タスク６＞タスク５＞タスク４＞タスク３＞タスク２＞タスク１＞タスク０であるものとする。
【００９１】
図７は、本実施形態の演算装置１０に備えたタスク制御部１２による第３の動作における処理手順を示したフローチャートである。なお、以下の説明においては、“＃０”〜“＃７”のそれぞれのタスクは対象タスクではなく、優先度に応じて処理演算部１１に出力する順番の並び替えが完了しているものとし、“＃８”のタスク０および“＃９”のタスク１を処理演算部１１に出力する順番を、優先度に応じて並び替える場合について説明する。
【００９２】
ＤＭＡリクエスト発生部１２２は、タスク制御部１２がタスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、図７に示したタスクを処理演算部１１に出力する順番を優先度に応じて並び替える処理を実行する。まず、ＤＭＡリクエスト発生部１２２は、ステップＳ３において最高優先度ＰＲＩ−ＭＡＸを“−１”に、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸを“０”にクリアする。
【００９３】
続いて、ＤＭＡリクエスト発生部１２２は、ステップＳ３１においてタスク番号ｉを“８”とし、タスクキュー１２１に格納されている９番目の“＃８”のタスク０から、処理演算部１１に出力する順番の並び替え処理を開始する。
【００９４】
処理演算部１１に出力する順番の並び替え処理において、ＤＭＡリクエスト発生部１２２は、“＃８”のタスク０が、処理演算部１１に出力済みであるか否かを確認する（ステップＳ３２）。ステップＳ３２において、“＃８”のタスク０が処理演算部１１に出力済みである場合（ステップＳ３２の“ＹＥＳ”）には、ステップＳ３１においてタスク番号ｉに１を加えて、すなわち、タスク番号ｉ＝９として、タスクキュー１２１に格納された１０番目の“＃９”のタスク１に対する確認を繰り返す。
【００９５】
ステップＳ３２における確認の結果が、“＃８”のタスク０が処理演算部１１に出力済みでない場合（ステップＳ３２の“ＮＯ”）、ＤＭＡリクエスト発生部１２２は、ステップＳ３３において、“＃８”のタスク０の優先度が、最高優先度ＰＲＩ−ＭＡＸよりも高いか否かを確認する。ステップＳ３３において、“＃８”のタスク０の優先度が、最高優先度ＰＲＩ−ＭＡＸよりも高くない、すなわち、“＃８”のタスク０の優先度が最高優先度ＰＲＩ−ＭＡＸよりも低い場合（ステップＳ３３の“ＮＯ”）には、ステップＳ３１においてタスク番号ｉに１を加えて、タスクキュー１２１に格納された１０番目の“＃９”のタスク１に対する確認を繰り返す。
【００９６】
ステップＳ３３における確認の結果が、“＃８”のタスク０の優先度が最高優先度ＰＲＩ−ＭＡＸよりも高い場合（ステップＳ３３の“ＹＥＳ”）、ＤＭＡリクエスト発生部１２２は、ステップＳ３４において、最高優先度ＰＲＩ−ＭＡＸを“＃８”のタスク０の優先度の値とする。また、ＤＭＡリクエスト発生部１２２は、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸを、“＃８”にする。そして、ＤＭＡリクエスト発生部１２２は、ステップＳ３１においてタスク番号ｉに１を加えて、タスクキュー１２１に格納された１０番目の“＃９”のタスク１に対する処理演算部１１に出力する順番の並び替え処理を開始する。
【００９７】
続いて、ＤＭＡリクエスト発生部１２２は、ステップＳ３１のループの処理が完了すると、すなわち、タスクキュー１２１に格納された全てのタスクに対して、処理演算部１１に出力する順番の並び替え処理を完了すると、最後に、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸのタスクが使用するデータを外部記憶部２０から事前に取得するためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する（ステップＳ３５）。
【００９８】
上述したように、本第３の動作においては、タスクに続く数字が大きいほど優先度が高い、つまり、優先度は、“＃９”のタスク１＞“＃８”のタスク０である。従って、ステップＳ３１のループの処理が完了したとき、すなわち、“＃９”のタスク１に対する処理演算部１１に出力する順番の並び替え処理が完了したときには、最高優先度ＰＲＩ−ＭＡＸは“＃９”のタスク１の優先度となり、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸは“＃９”となっている。このため、タスク制御部１２は、９番目の“＃８”のタスク０に対応したＤＭＡリードアクセス指示よりも先に、１０番目の“＃９”のタスク１に対応したＤＭＡリードアクセス指示を、メモリ制御部１３に出力する。
【００９９】
図８は、本実施形態の演算装置１０に備えたタスク制御部１２による第３の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。図８に示したタイミングチャートには、タスク制御部１２が、演算装置１０に備えた４つの処理演算部１１ａ〜処理演算部１１ｄのそれぞれに、“＃０”のタスク７〜“＃７”のタスク０を順次出力し、その後、“＃８”のタスク０よりも先に“＃９”のタスク１を処理演算部１１ｄに出力する場合を示している。
【０１００】
より具体的には、“＃４”のタスク４を処理演算部１１ａに、“＃５”のタスク３を処理演算部１１ｂに、“＃６”のタスク３を処理演算部１１ｃに、“＃７”のタスク０を処理演算部１１ｄに、それぞれ出力する。そして、処理演算部１１ａ〜処理演算部１１ｄの内、割り当てられたタスクの実行が最も早く完了した処理演算部１１ｄに、次にタスクキュー１２１に格納された“＃８”のタスク０よりも優先度が高い“＃９”のタスク１を出力し、その後に、割り当てられたタスクの実行が最も早く完了した処理演算部１１ｂに、“＃９”のタスク１よりも優先度が低い“＃８”のタスク０を出力する場合を示している。
【０１０１】
この場合であっても、タスク制御部１２は、本第３の動作によって、優先度が低い“＃８”のタスク０に対応したＤＭＡリードアクセス指示よりも先に、優先度が高い“＃９”のタスク１に対応したＤＭＡリードアクセス指示をメモリ制御部１３に出力している。これにより、メモリ制御部１３は、タスク制御部１２から入力されたＤＭＡリードアクセス指示に応じて、“＃９”のタスク１に対応したデータを外部記憶部２０から読み出して、“＃９”のタスク１を実行する処理演算部１１ｄに対応したデータ記憶部１４ｄに格納する。その後、メモリ制御部１３は、タスク制御部１２から入力されたＤＭＡリードアクセス指示に応じて、“＃８”のタスク０に対応したデータを外部記憶部２０から読み出して、“＃８”のタスク０を実行する処理演算部１１ｂに対応したデータ記憶部１４ｂに格納する。
【０１０２】
このように、タスク制御部１２における第３の動作では、タスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、タスクキュー１２１内の対象タスクの優先度を確認することによって、対象タスクが割り当てられる処理演算部１１が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておくことができる。
【０１０３】
また、タスク制御部１２における第３の動作では、それぞれのタスクの優先度に応じて処理演算部１１に出力するタスクの順番を並び替えることができる。
【０１０４】
ここで、それぞれのタスクの優先度に応じて処理演算部１１に出力するタスクの順番を並び替える場合の一例について説明する。図９〜図１１は、本実施形態の演算装置１０に備えたタスク制御部１２による第３の動作において処理演算部１１に出力するタスクの順番を入れ替える場合の一例を説明する図である。図９には、本一例におけるそれぞれのタスクの優先度の関係を示し、図１０には、タスクの順番を入れ替える前のタスクキュー１２１に格納されたそれぞれのタスクの状態と処理演算部１１がそれぞれのタスクを実行するタイミングを示し、図１１には、タスクの順番を入れ替えた後のタスクキュー１２１に格納されたそれぞれのタスクの状態と処理演算部１１がそれぞれのタスクを実行するタイミングを示している。なお、以下の説明においては、説明を容易にするため、演算装置１０内に１つの処理演算部１１のみを備えている場合について説明する。
【０１０５】
まず、図９を参照して、本一例におけるそれぞれのタスクの優先度の関係を説明する。本一例では、処理演算部１１がそれぞれのタスクを実行した際に、図９に示したような、ぞれぞれのタスクに関連する下位のタスクが発生するものとする。より具体的には、処理演算部１１がタスク０を実行した結果として、タスク０−０とタスク０−１との下位のタスクが発生し、さらに、処理演算部１１がタスク０−０を実行した結果として、タスク０−０−０とタスク０−０−１との下位のタスクが発生するものとする。また、処理演算部１１がタスク１を実行した結果として、タスク１−０の下位のタスクが発生するものとする。
【０１０６】
また、本一例では、それぞれのタスクの優先度の関係は、図９に示したように、タスクに続く数字が大きいほど優先度が低く、同じ系列のタスクでは、上位のタスクほど優先度が低く、同じ階層のタスクでは、タスクに続く数字の階層が大きいほど優先度が低いものとする。より具体的には、タスク０とタスク１との優先度はタスク０＞タスク１であり、タスク０と、タスク０−０と、タスク０−０−０との優先度はタスク０−０−０＞タスク０−０＞タスク０であり、タスク０−０とタスク０−１との優先度はタスク０−０＞タスク０−１であるものとする。つまり、図９に示したそれぞれのタスクの優先度は、タスク０−０−０＞タスク０−０−１＞タスク０−０＞タスク０−１＞タスク１−０＞タスク０＞タスク１であるものとする。
【０１０７】
図９に示したような関係にあるタスクが発生した順番でタスクキュー１２１に順次格納されると、例えば、図１０（ａ）に示したように、タスクキュー１２１の“＃０”にタスク０が、“＃１”にタスク１が、“＃２”にタスク０−０が、“＃３”にタスク１−０が、“＃４”にタスク０−０−０が、“＃５”にタスク０−０−１が、“＃６”にタスク０−１がそれぞれ格納される。このような順番でタスクキュー１２１に格納されたそれぞれタスクを、１つの処理演算部１１が順次実行すると、図１０（ｂ）に示したように、“＃３”にタスク１−０の実行が完了した時点で、タスク１の系列の全てのタスクが完了し、その後、“＃６”にタスク０−１の実行が完了した時点で、タスク０の系列の全てのタスクが完了することになる。これは、上述したタスク０とタスク１との優先度（タスク０＞タスク１）の関係にある優先順位通りにそれぞれの系列のタスクが完了していないことになる。
【０１０８】
しかし、演算装置１０では、タスク制御部１２における第３の動作によって、タスクキュー１２１に格納されたタスクの優先度を確認し、それぞれのタスクの優先度に応じて処理演算部１１に出力するタスクの順番を並び替えることによって、タスク０とタスク１とのそれぞれの系列のタスクを、優先順位通りに完了させることができる。
【０１０９】
より具体的には、図９に示したような関係にあるタスクが発生した順番でタスクキュー１２１に順次格納された後に、処理演算部１１に出力するタスクの順番を並び替える。これにより、例えば、図１１（ａ）に示したように、タスクキュー１２１の“＃０”にタスク０が、“＃１”にタスク１が、“＃２”にタスク０−０が、“＃３”にタスク０−０−０が、“＃４”にタスク０−０−１が、“＃５”にタスク０−１が、“＃６”にタスク１−０がそれぞれ格納された状態と同様の順番で、それぞれのタスクが処理演算部１１に出力される。このような順番でタスクキュー１２１に格納されたそれぞれタスクを、１つの処理演算部１１が順次実行すると、図１１（ｂ）に示したように、“＃５”にタスク０−１の実行が完了した時点で、タスク０の系列の全てのタスクが完了し、その後、“＃６”にタスク１−０の実行が完了した時点で、タスク１の系列の全てのタスクが完了することになる。これは、上述したタスク０とタスク１との優先度（タスク０＞タスク１）の関係にある優先順位通りにそれぞれの系列のタスクが完了している。
【０１１０】
このように、タスク制御部１２は、それぞれのタスクの優先度に応じて処理演算部１１に出力するタスクの順番を並び替えることによって、優先順位通りにそれぞれのタスクの実行を完了させることができる。
【０１１１】
このように、タスク制御部１２における第３の動作では、タスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、タスクキュー１２１内の対象タスクの優先度を確認することによって、対象タスクが割り当てられる処理演算部１１が、対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておくことができる。これにより、演算装置１０では、それぞれのタスクの優先度に応じて処理演算部１１に出力するタスクの順番を並び替えると共に、それぞれの処理演算部１１が使用するデータのキャッシュミスを防止することができる。
【０１１２】
なお、対象タスクを実行する際に使用するデータを、対応するデータ記憶部１４に事前に格納する際には、このデータ記憶部１４に演算処理に必要な前のデータが格納されていないかを確認し、データ記憶部１４に演算処理に必要な前のデータが格納されている場合には、現在格納されているデータを、外部記憶部２０にデータを退避しておく（書き込んでおく）必要がある。このため、例えば、図７に示したフローチャートのステップＳ３１のループとステップＳ３５との間に、データ記憶部１４に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部１４に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップＳ３５の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部１４に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部１４に現在格納されているデータを外部記憶部２０にデータを退避してから（書き込んでから）、ステップＳ３５の処理を実行することになる。このため、ステップＳ３５においてＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングは、例えば、外部記憶部２０にアクセスする際の転送サイクル数を２倍にしておくなどの対応によって、余裕を持ったタイミングにしておくことが望ましい。なお、ＤＭＡリードアクセス指示をメモリ制御部１３に出力するタイミングの考え方は、第１の動作および第２の動作と同様であるため、詳細な説明は省略する。
【０１１３】
なお、優先度の高いタスクを処理演算部１１に出力するときに、このタスクを実行する際に使用するデータのデータ記憶部１４への事前の格納が終了していない場合には、例えば、優先度は低いが外部記憶部２０に格納されているデータを使用しないタスクを、このタスクよりも先に処理演算部１１に出力することもできる。これにより、優先度の高いタスクを処理演算部１１に出力するタイミングを、データ記憶部１４へのデータの格納が終了するタイミングまで遅らせることができる。
【０１１４】
＜第４の動作＞
次に、演算装置１０の動作、特にタスク制御部１２の第４の動作について説明する。図１２は、本実施形態の演算装置１０に備えたタスク制御部１２による第４の動作における処理手順を示したフローチャートである。第４の動作は、第３の動作と同様に、タスクキュー１２１に格納されたそれぞれのタスクの優先度に基づいて、外部記憶部２０に格納されているデータをＤＭＡによって事前に取得する（読み出す）ためのＤＭＡリードアクセス指示を出力する前に、データ記憶部１４に演算処理に必要な前のデータが格納されているか否かの確認を行う動作である。そして、第４の動作は、データ記憶部１４に演算処理に必要な前のデータが格納されている場合に、データ記憶部１４に現在格納されているデータを、ＤＭＡによって外部記憶部２０に退避する（書き込む）ためのアクセス指示（以下「ＤＭＡライトアクセス指示」を、メモリ制御部１３に出力する動作である。
【０１１５】
すなわち、第４の動作は、図７に示したタスク制御部１２の第３の動作の処理手順に、データ記憶部１４に演算処理に必要な前のデータが格納されているか否かを確認するステップを設けた動作である。従って、本第４の動作の説明においては、図７に示したタスク制御部１２の第３の動作の処理手順と同様の手順に同じステップ番号を付与して説明を省略し、図７に示したタスク制御部１２の第３の動作の処理手順と異なる手順のみを説明する。
【０１１６】
なお、図１２に示したタスク制御部１２の第４の動作の処理手順では、ステップＳ３１のループにおいてタスク番号ｉを“０”にクリアしている。しかし、ステップＳ３１のループにおいてクリアしたタスク番号ｉが異なっている場合でも、ステップＳ３１のループ内の処理は同様に考えることができるため、同様に、詳細な説明は省略する。
【０１１７】
ＤＭＡリクエスト発生部１２２は、タスク制御部１２がタスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、図１２に示したタスクを処理演算部１１に出力する順番を優先度に応じて並び替える処理を実行する。図１２に示したタスクを処理演算部１１に出力する順番を優先度に応じて並び替える処理では、ＤＭＡリクエスト発生部１２２は、図７に示したタスク制御部１２の第３の動作の処理手順と同様に、ステップＳ３において最高優先度ＰＲＩ−ＭＡＸを“−１”に、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸを“０”にクリアする。
【０１１８】
続いて、ＤＭＡリクエスト発生部１２２は、図７に示したタスク制御部１２の第３の動作の処理手順と同様に、ステップＳ３２〜ステップＳ３４を含むステップＳ３１のループにおいて、処理演算部１１に出力する順番の並び替え処理を行い、最高優先度ＰＲＩ−ＭＡＸと最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸとの値を、最も優先度が高いタスクに応じた値にする。
【０１１９】
続いて、ＤＭＡリクエスト発生部１２２は、ステップＳ３１のループの処理が完了すると、すなわち、タスクキュー１２１に格納された全てのタスクに対して、処理演算部１１に出力する順番の並び替え処理を完了すると、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸのタスクが使用するデータを外部記憶部２０から事前に取得して格納するデータ記憶部１４が空きの状態であるか否かを確認する（ステップＳ４）。つまり、最も優先度が高いタスクを実行する処理演算部１１に対応したデータ記憶部１４に、演算処理に必要な前のデータが格納されているか否かを確認する。
【０１２０】
ステップＳ４において、データ記憶部１４が空きの状態であると確認された場合（ステップＳ４の“ＹＥＳ”）には、図７に示したタスク制御部１２の第３の動作の処理手順と同様に、ステップＳ３５において、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸのタスクが使用するデータを外部記憶部２０から事前に取得するためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する。
【０１２１】
ステップＳ４において、データ記憶部１４が空きの状態でないと確認された場合（ステップＳ４の“ＮＯ”）には、ステップＳ５において、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸのタスクに対応した処理演算部１１が使用するデータ記憶部１４に現在格納されているデータを、外部記憶部２０に事前に退避しておく、データ退避の処理を行う。
【０１２２】
そして、ＤＭＡリクエスト発生部１２２は、ステップＳ５におけるデータ記憶部１４に現在格納されているデータのデータ退避処理を完了すると、図７に示したタスク制御部１２の第３の動作の処理手順と同様に、ステップＳ３５において、最高優先度のタスク番号ＰＲＩ−ＭＡＸ−ＩＤＸのタスクが使用するデータを外部記憶部２０から事前に取得するためのＤＭＡリードアクセス指示を、メモリ制御部１３に出力する。
【０１２３】
ここで、ステップＳ５におけるデータ退避処理について説明する。図１３は、本実施形態の演算装置１０に備えたタスク制御部１２が、データ記憶部１４に格納されているデータを退避する処理手順を示したフローチャートである。タスク制御部１２によるデータ退避処理は、タスクキュー１２１に格納されたそれぞれのタスクの優先度に基づいて、最も優先度が低いタスクを実行する処理演算部１１に対応するデータ記憶部１４に格納されたデータを、ＤＭＡによって外部記憶部２０に退避する（書き込む）ためのＤＭＡライトアクセス指示を、メモリ制御部１３に出力する処理である。
【０１２４】
ＤＭＡリクエスト発生部１２２は、図１２に示したタスクを処理演算部１１に出力する順番を優先度に応じて並び替える処理のステップＳ４において、データ記憶部１４が空きの状態でないと確認された場合（ステップＳ４の“ＮＯ”）に、図１３に示したデータ退避処理を実行する。まず、ＤＭＡリクエスト発生部１２２は、ステップＳ５１において最低優先度ＰＲＩ−ＭＩＮを“最大値（図１３においては０ｘＦＦ）”に、最低優先度のタスク番号ＰＲＩ−ＭＩＮ−ＩＤＸを“０”にクリアする。
【０１２５】
続いて、ＤＭＡリクエスト発生部１２２は、ステップＳ５２においてタスク番号ｉを“０”にクリアし、タスクキュー１２１に格納されている“＃０”のタスクから、処理演算部１１に出力するタスクにおいて、最も優先度が低いタスクを選択する処理を開始する。
【０１２６】
処理演算部１１に出力する最も優先度が低いタスクの選択処理において、ＤＭＡリクエスト発生部１２２は、“＃０”のタスクが、処理演算部１１に出力済みであるか否かを確認する（ステップＳ５３）。ステップＳ５３において、“＃０”のタスクが処理演算部１１に出力済みである場合（ステップＳ５３の“ＹＥＳ”）には、ステップＳ５２においてタスク番号ｉに１を加えて、すなわち、タスク番号ｉ＝１として、タスクキュー１２１に格納された２番目の“＃１”のタスクに対する確認を繰り返す。
【０１２７】
ステップＳ５３における確認の結果が、“＃０”のタスクが処理演算部１１に出力済みでない場合（ステップＳ５３の“ＮＯ”）、ＤＭＡリクエスト発生部１２２は、ステップＳ５４において、“＃０”のタスクの優先度が、最低優先度ＰＲＩ−ＭＩＮよりも低いか否かを確認する。ステップＳ５４において、“＃０”のタスクの優先度が、最低優先度ＰＲＩ−ＭＩＮよりも低くない、すなわち、“＃０”のタスクの優先度が最低優先度ＰＲＩ−ＭＩＮよりも高い場合（ステップＳ５４の“ＮＯ”）には、ステップＳ５２においてタスク番号ｉに１を加えて、タスクキュー１２１に格納された２番目の“＃１”のタスクに対する確認を繰り返す。
【０１２８】
ステップＳ５４における確認の結果が、“＃０”のタスクの優先度が最低優先度ＰＲＩ−ＭＩＮよりも低い場合（ステップＳ５４の“ＹＥＳ”）、ＤＭＡリクエスト発生部１２２は、ステップＳ５５において、最低優先度ＰＲＩ−ＭＩＮを“＃０”のタスクの優先度の値とする。また、ＤＭＡリクエスト発生部１２２は、最低優先度のタスク番号ＰＲＩ−ＭＩＮ−ＩＤＸを、“＃０”にする。そして、ＤＭＡリクエスト発生部１２２は、ステップＳ５２においてタスク番号ｉに１を加えて、タスクキュー１２１に格納された２番目の“＃１”のタスクに対する最も優先度が低いタスクの選択処理を開始する。
【０１２９】
続いて、ＤＭＡリクエスト発生部１２２は、ステップＳ５２のループの処理が完了すると、すなわち、タスクキュー１２１に格納された全てのタスクに対して、最も優先度が低いタスクの選択処理を完了すると、最後に、最低優先度のタスク番号ＰＲＩ−ＭＩＮ−ＩＤＸのタスクで使用するデータ記憶部１４のデータを、外部記憶部２０に事前に退避するためのＤＭＡライトアクセス指示を、メモリ制御部１３に出力する（ステップＳ５６）。
【０１３０】
このように、データ退避処理では、タスクキュー１２１に格納されたタスクの内、処理演算部１１によって実行がされていないタスクの優先度を確認し、最も優先度が低いタスクに対応したデータ記憶部１４が格納しているデータを、事前に外部記憶部２０に退避するためのＤＭＡライトアクセス指示を、メモリ制御部１３に出力する。なお、図１２に示したタスクを処理演算部１１に出力する順番を優先度に応じて並び替える処理のステップＳ４において、データ記憶部１４が空きの状態でないと確認されたタスクが複数ある場合には、タスクキュー１２１に格納された優先度が低いタスクに対応したデータ記憶部１４から順次、データを外部記憶部２０に退避する。
【０１３１】
このように、タスク制御部１２における第４の動作では、タスクキュー１２１に格納されたタスクを処理演算部１１に出力する毎に、タスクキュー１２１内のタスクの優先度を確認する。さらに、最も優先度が高い対象タスクを実行する処理演算部１１に対応したデータ記憶部１４に、演算処理に必要なデータが格納されているか否かを確認する。そして、データ記憶部１４に演算処理に必要なデータが格納されている場合には、データ記憶部１４に現在格納されているデータを外部記憶部２０にデータを退避してから（書き込んでから）、最も優先度が高い対象タスクが使用するデータを取得するためのＤＭＡリードアクセス指示をメモリ制御部１３に出力する。これにより、タスク制御部１２における第４の動作でも、対象タスクが割り当てられる処理演算部１１が対象タスクを実行するよりも早いタイミングで、対象タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておくことができる。このことにより、演算装置１０では、それぞれのタスクの優先度に応じて処理演算部１１に出力するタスクの順番を並び替えると共に、それぞれの処理演算部１１が使用するデータのキャッシュミスを防止することができる。
【０１３２】
上記に述べたとおり、本発明を実施するための形態によれば、複数の処理演算部（プロセッサ）が連携して処理を行う演算装置において、それぞれの処理演算部が実際にデータを使用するタスクを実行するよりも早いタイミングで、タスクを実行する際に使用するデータを、事前に外部記憶部から取得してデータ記憶部に格納しておく。これにより、本発明を実施するための形態では、それぞれの処理演算部が他のタスクを実行している期間に、外部記憶部からデータを取得する処理の期間を隠蔽することができる。このことにより、本発明を実施するための形態では、それぞれの処理演算部がタスクを実行する際に使用するデータのキャッシュミスを防止することができる演算装置を提供することができる。
【０１３３】
また、本発明を実施するための形態によれば、外部記憶部から取得したデータを格納するデータ記憶部に、演算処理に必要な前のデータが格納されている場合には、このデータを、事前に外部記憶部に退避しておく。これにより、本発明を実施するための形態では、それぞれの処理演算部が他のタスクを実行している期間に、外部記憶部にデータを退避する処理の期間を隠蔽することができる。このことにより、本発明を実施するための形態では、それぞれの処理演算部がタスクを実行する際に使用するデータを外部記憶部から取得するための期間を、十分に確保することができる。
【０１３４】
これらにより、本発明を実施するための形態では、演算装置を備えたシステムにおける処理時間の短縮を図ることができ、演算装置を備えたシステムの性能を向上させることができる。
【０１３５】
なお、本実施形態においては、外部記憶部２０が演算装置１０に接続されている構成について説明したが、演算装置１０と外部記憶部２０との接続は、本発明を実施するための形態のように、演算装置１０と外部記憶部２０とが直接接続されている構成に限定されるものではない。例えば、外部記憶部２０が、ネットワーク上に構成されたサーバであり、演算装置１０とサーバとが、ネットワークを介して接続される構成であっても、同様に、本発明の考え方を適用することができる。この場合、例えば、メモリ制御部１３は、通信部を介して、サーバからのデータの読み出し（受信）や、サーバへのデータの書き込み（送信）を行うと考えることができる。
【０１３６】
また、本実施形態においては、タスク制御部１２が、それぞれのタスクを実行する際の実行時間（サイクル数）など、外部記憶部２０にアクセスするタイミングを決定するための情報が事前にわかっているものとして説明したが、タスク制御部１２は、本発明を実施するための形態に限定されるものではない。例えば、タスクキュー１２１に格納されたタスクに含まれるプログラムのサイズや、データ量またはループ回数などのパラメータに基づいて、タスクを実行する際の実行時間（サイクル数）などの、外部記憶部２０にアクセスするタイミングを決定するための情報を算出する構成であってもよい。
【０１３７】
また、本実施形態においては、それぞれの処理演算部１１の処理機能に関して説明していないが、例えば、演算装置１０を、撮像装置などの撮像システム内に備えている場合には、それぞれの処理演算部１１は、撮像システムにおける画像処理を行う処理機能を持っていると考えることができる。
【０１３８】
また、本実施形態においては、演算装置１０に備えたそれぞれの処理演算部１１が持っている処理機能について説明していない。しかし、例えば、演算装置１０が、撮像装置などの撮像システムに備えた画像処理装置である場合には、それぞれの処理演算部１１の処理機能は、ＹＣ変換処理、ノイズ除去処理、歪み補正処理、キズ補正処理、画像圧縮処理など、撮像システムにおける様々な画像処理を行うことができる処理機能であると考えられる。また、例えば、演算装置１０が、撮像装置などの撮像システムに備えた画像処理装置内の画像認識部など、撮像システムにおける画像処理の一部の処理部である場合には、それぞれの処理演算部１１の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための処理機能であると考えられる。
【０１３９】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【０１４０】
１０・・・演算装置
１１，１１ａ，１１ｂ，１１ｎ・・・処理演算部
１２・・・タスク制御部
１２１・・・タスクキュー（タスク制御部）
１２２・・・ＤＭＡリクエスト発生部（タスク制御部）
１３・・・メモリ制御部
１４，１４ａ，１４ｂ，１４ｎ・・・データ記憶部
２０・・・外部記憶部
【図１】
2014225088.tif 000003
【図２】
2014225088.tif 000004
【図３】
2014225088.tif 000005
【図４】
2014225088.tif 000006
【図５】
2014225088.tif 000007
【図６】
2014225088.tif 000008
【図７】
2014225088.tif 000009
【図８】
2014225088.tif 000010
【図９】
2014225088.tif 000011
【図１０】
2014225088.tif 000012
【図１１】
2014225088.tif 000013
【図１２】
2014225088.tif 000014
【図１３】
2014225088.tif 000015