(57)【要約】【課題】複数のプロセッサが連携して処理を行う演算装置において、演算処理に使用するデータが重複している場合に、外部メモリへのアクセス回数を減らすことができる演算装置を提供する。【解決手段】入力されたタスクに応じた演算処理を行う複数の処理演算部と、それぞれの処理演算部が演算処理に使用するデータまたは演算処理した結果のデータを格納する複数のデータ記憶部と、演算処理に使用するデータの外部記憶部からの読み出し、データ記憶部同士での転送、または外部記憶部への書き込みを行うメモリ制御部と、演算処理に使用するデータの外部記憶部における記憶場所とデータ量とを対応付けるデータ転送情報テーブルと、タスクキューを具備し、格納されたタスクをいずれか１つの処理演算部に出力すると共に、データ転送情報テーブルを参照し、外部記憶部またはデータ記憶部へのアクセス指示をメモリ制御部に出力するタスク制御部と、を備える。【選択図】図１
2014225089.tif 000002
【特許請求の範囲】
【請求項１】
入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、
それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納する複数のデータ記憶部と、
前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、前記データ記憶部に格納されている前記タスクに応じた演算処理を実行する際に使用するデータの前記データ記憶部同士での転送、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、
前記タスクに応じた演算処理を実行する際に使用するデータの前記外部記憶部における記憶場所とデータ量とを対応付けた情報を保持するデータ転送情報テーブルと、
前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか１つの前記処理演算部に出力すると共に、前記データ転送情報テーブルに保持された情報を参照して、前記外部記憶部または前記データ記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、
を備えることを特徴とする演算装置。
【請求項２】
前記タスク制御部は、
前記データ転送情報テーブルに保持された情報に基づいて、前記データ記憶部毎に、前記タスクに応じた演算処理を実行する際に使用するデータを格納している範囲を特定し、該特定したデータの範囲に基づいて、それぞれの前記タスクに対応する前記アクセス指示を出力する、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記タスク制御部は、
前記特定したデータの範囲が、すでにデータが格納されている前記データ記憶部のいずれかと重複している範囲である場合には、該重複している範囲のデータを、該データを格納している前記データ記憶部から対応する他の前記データ記憶部に、該データ記憶部同士で転送する前記アクセス指示を出力し、
前記特定したデータの範囲が、前記データ記憶部のいずれとも重複していない範囲である場合には、前記データ転送情報テーブルに保持している前記記憶場所から前記データ量のデータを、前記外部記憶部から読み出して対応する前記データ記憶部に格納する前記アクセス指示を出力する、
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
前記タスク制御部は、
前記特定したデータの範囲の一部が前記重複している範囲である場合には、該重複している範囲の一部のデータを前記データ記憶部同士で転送する前記アクセス指示と、
重複していない範囲の残りのデータを前記外部記憶部から読み出して対応する前記データ記憶部において前記重複している範囲の一部のデータを格納していない領域に格納する前記アクセス指示とを出力する、
ことを特徴とする請求項３に記載の演算装置。
【請求項５】
前記タスク制御部は、
前記特定したデータの範囲の同じデータを複数の前記データ記憶部に格納する場合には、該データを格納している前記データ記憶部から対応する他の複数の前記データ記憶部に同時に転送する前記アクセス指示、または該データを前記外部記憶部から読み出して対応する複数の前記データ記憶部に同時に格納する前記アクセス指示を出力する、
ことを特徴とする請求項２から請求項４のいずれか１の項に記載の演算装置。
【請求項６】
前記タスク制御部は、
全ての前記データ記憶部に、前記タスクに応じた演算処理で使用するデータが格納されている場合には、複数の前記データ記憶部のいずれかに格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を、前記タスクに応じた演算処理で使用するデータを前記データ記憶部に格納する前記アクセス指示を出力するよりも前に出力する、
ことを特徴とする請求項２から請求項５のいずれか１の項に記載の演算装置。
【請求項７】
前記タスク制御部は、
前記タスクキューに格納されたそれぞれの前記タスク内の、予め定めた退避閾値より前の前記タスクに応じた演算処理を実行する際に使用するデータを格納している前記データ記憶部を、データの退避を行う前記データ記憶部から除外する、
ことを特徴とする請求項６に記載の演算装置。
【請求項８】
前記退避閾値は、
前記タスクキューに格納されたそれぞれの前記タスクの内、前記処理演算部に出力される順番が近い前記タスクの数である、
ことを特徴とする請求項７に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に関する。
【背景技術】
【０００２】
従来から、プログラムに応じた演算処理を実行するプロセッサを備えた演算装置がある。このような演算装置では、プロセッサが実行するそれぞれの演算処理を複数のタスクに分割し、プロセッサは、分割したそれぞれのタスクを順次実行することによって演算処理を行う。演算装置における演算処理では、外部のメモリにアクセスしながら実行する、すなわち、演算処理で使用するデータを、外部のメモリから読み出したり、外部のメモリに書き込んだりしながら実行する演算処理もある。そして、従来の演算装置には、予め外部のメモリからデータを読み出して一時記憶しておく外部のメモリよりも高速なメモリ、いわゆる、キャッシュメモリを備えたプロセッサを複数備えた、いわゆる、マルチプロセッサといわれる構成のものも見受けられる。
【０００３】
このような演算装置では、例えば、画像処理などの一連の処理を、演算装置に備えたそれぞれのプロセッサが分担して並列に行う、いわゆる、分散並列処理によって、プロセッサ同士でのそれぞれのタスクの処理の待ち合わせやラインバッファ処理など、データを一定時間保持する必要がある処理、あるいは演算装置に搭載しているプロセッサの数よりも多くのタスクからなる処理を行うことができる。このとき、それぞれのプロセッサ間のデータの受け渡しは、外部メモリを介して行われる。しかし、外部メモリへのアクセスは多くの電力を要するため、演算装置の消費電力の増大に繋がってしまうことから、演算処理を行う際の外部メモリへのアクセスを極力少なくしたいという要望がある。
【０００４】
このため、例えば、特許文献１のように、外部メモリを介さずに、それぞれのプロセッサに備えたキャッシュメモリ同士でデータを直接転送する技術が開示されている。特許文献１に開示された技術では、１つのプロセッサが実行した結果のデータを他のプロセッサが演算処理に使用する場合、外部メモリへのアクセスを行うＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）が、１つのプロセッサが実行した結果のデータを他のプロセッサのキャッシュメモリに転送した後に外部メモリに転送する。これにより、１つのプロセッサが実行した結果のデータに関わる外部メモリへのアクセス回数を低減することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２４１６０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、演算装置に備えた複数のプロセッサの中に、キャッシュメモリを備えていないプロセッサが含まれている、すなわち、演算装置に備えた全てのプロセッサがキャッシュメモリを備えた構成ではない演算装置もある。このような構成の演算装置では、プロセッサ間のデータの受け渡しを、外部メモリを介して行わなければならず、特許文献１に開示された技術を適用した場合であっても、演算装置における外部メモリへのアクセス回数を低減することができない。
【０００７】
また、例えば、撮像装置において行われる画像処理のように、別の構成要素によって外部メモリに記憶されたデータに対して、演算装置が演算処理を行う場合には、それぞれのプロセッサが、演算処理に使用するデータを外部メモリから読み出す。このとき、演算装置が行う演算処理が、例えば、画像処理における畳み込み演算処理のように、画像処理を行う全てのデータの領域（画像領域）を複数の領域（ブロック）に分割し、分割したブロック毎に処理を行う演算処理である場合には、それぞれのブロックに、演算処理に使用するデータ（画像データ）が重複している領域、いわゆる、糊代領域がある場合もある。この場合には、糊代領域の画像データを、演算装置内の異なるプロセッサがそれぞれ読み出すことになる。これは、外部メモリからみると、同じ記憶領域に記憶されている画像データが複数回読み出されることになり、演算装置における外部メモリへのアクセス回数を低減することができない。
【０００８】
このように、特許文献１で開示された技術を適用した演算装置であっても、必ずしも外部メモリへのアクセス回数を低減することができるとはいえない、という問題がある。
【０００９】
本発明は、上記の課題認識に基づいてなされたものであり、複数のプロセッサが連携して処理を行う演算装置において、複数のプロセッサが演算処理に使用するデータが重複している場合に、外部メモリへのアクセス回数を減らすことができる演算装置を提供することを目的としている。
【課題を解決するための手段】
【００１０】
上記の課題を解決するため、本発明の演算装置は、入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納する複数のデータ記憶部と、前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、前記データ記憶部に格納されている前記タスクに応じた演算処理を実行する際に使用するデータの前記データ記憶部同士での転送、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、前記タスクに応じた演算処理を実行する際に使用するデータの前記外部記憶部における記憶場所とデータ量とを対応付けた情報を保持するデータ転送情報テーブルと、前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか１つの前記処理演算部に出力すると共に、前記データ転送情報テーブルに保持された情報を参照して、前記外部記憶部または前記データ記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、を備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、複数のプロセッサが連携して処理を行う演算装置において、複数のプロセッサが演算処理に使用するデータが重複している場合に、外部メモリへのアクセス回数を減らすことができる演算装置を提供することができるという効果が得られる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図２】本実施形態における演算装置に備えたデータ転送情報テーブルの一例を示した図である。
【図３】本実施形態の演算装置に備えたタスク制御部の概略構成、およびタスク制御部の動作の一例を説明する図である。
【図４】本実施形態の演算装置に備えたタスク制御部による第１の動作における処理手順を示したフローチャートである。
【図５】本実施形態の演算装置に備えたタスク制御部内のデータ転送情報テーブルを更新する動作の一例を説明する図である。
【図６】本実施形態の演算装置に備えたメモリ制御部によるデータ転送のタイミングを示したタイミングチャートである。
【図７】本実施形態の演算装置に備えたタスク制御部の概略構成、およびタスク制御部の動作の一例を説明する図である。
【図８】本実施形態の演算装置に備えたタスク制御部が、データ記憶部に格納されているデータを退避する処理手順を示したフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について、図面を参照して説明する。図１は、本実施形態における演算装置の概略構成の一例を示したブロック図である。図１に示した演算装置１０は、ｎ個の処理演算部１１ａ〜処理演算部１１ｎと、タスク制御部１２と、メモリ制御部１３と、ｎ個のデータ記憶部１４ａ〜データ記憶部１４ｎと、を備えている。また、演算装置１０には、外部記憶部２０が接続されている。演算装置１０は、要求された演算処理を、処理演算部１１ａ〜処理演算部１１ｎのそれぞれで分担して行う、分散並列処理型の演算装置である。
【００１４】
なお、以下の説明においては、処理演算部１１ａ〜処理演算部１１ｎのそれぞれを区別せずに表す場合には、「処理演算部１１」という。また、データ記憶部１４ａ〜データ記憶部１４ｎのそれぞれを区別せずに表す場合には、「データ記憶部１４」という。
【００１５】
外部記憶部２０は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれで共有される、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリである。外部記憶部２０には、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが起動するためのプログラムや、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが演算処理を実行するために用いるデータが格納されている。また、外部記憶部２０には、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが演算処理の途中で生成したデータなどが、一時的に格納される。
【００１６】
処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、同じ処理機能を持ったプロセッサである。処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、演算装置１０に接続された外部記憶部２０へのデータの書き込みや、外部記憶部２０からのデータの読み出しを行いながら、タスク制御部１２から入力された、演算装置１０に対して要求された演算処理におけるそれぞれのタスクを実行する。
【００１７】
また、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、自身がタスクを実行した後に引き続き別の処理演算部１１または自身に、次のタスクを実行させるための情報や、次に実行するタスクの内容を表す情報を、次のタスクの実行要求として、タスク制御部１２に出力する。ここで、処理演算部１１がタスク制御部１２に出力する次のタスクの実行要求の情報には、タスクを実行する際に使用するデータが保持されている外部記憶部２０の先頭アドレスを指定する情報が含まれている。また、処理演算部１１がタスク制御部１２に出力する次のタスクの実行要求の情報には、次のタスクの実行に必要な様々なパラメータのデータが含まれている。なお、以下の説明においては、処理演算部１１がタスク制御部１２に出力する、次のタスクの実行要求も、タスクという。
【００１８】
また、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、タスク制御部１２から入力された、別の処理演算部１１または自身が前回のタスクを実行した結果である、次のタスクを実行する。なお、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、さらに別の処理演算部１１または自身が引き続き実行するタスクがある場合には、引き続き別の処理演算部１１または自身に、次のタスクを実行させるための情報や、次に実行するタスクの内容を表す情報を、次のタスクとして再度、タスク制御部１２に出力する。
【００１９】
また、処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、次のタスクを受け付けられる状態であるか否かを表す信号を、タスク制御部１２に出力する。処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次に実行するタスクを受け付けられる状態であることを表す信号を、タスク制御部１２に出力する。
【００２０】
タスク制御部１２は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力されたそれぞれのタスクを受け付け、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力された、次のタスクを受け付けられる状態であるか否かを表す信号に基づいて、受け付けたタスクを、処理演算部１１ａ〜処理演算部１１ｎのいずれか１つに割り当てる。
【００２１】
より具体的には、タスク制御部１２は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力されたそれぞれのタスクに基づいて、次のタスクを受け付けられる状態であることを表す信号を入力している処理演算部１１の中から、次のタスクを実行させる、いずれか１つ処理演算部１１を選択する。そして、タスク制御部１２は、選択したいずれか１つの処理演算部１１にタスクを出力することによって、演算装置１０に対して要求された演算処理におけるそれぞれのタスクを、処理演算部１１ａ〜処理演算部１１ｎのそれぞれに分配する。
【００２２】
タスク制御部１２は、処理演算部１１ａ〜処理演算部１１ｎのそれぞれからのタスクを受け付けるための構成として、タスクキュー１２１を備えている。タスクキュー１２１は、入力されたタスクを格納する待ち行列のメモリである。タスクキュー１２１には、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力されたそれぞれのタスクが、入力された順番で順次格納される。タスクキュー１２１に格納されたそれぞれのタスクは、基本的に、格納された順番で出力されるが、演算装置１０では、タスク制御部１２が、タスクキュー１２１に格納されたタスクを出力する処理演算部１１や、タスクの出力順番を制御する。
【００２３】
また、タスク制御部１２は、タスクキュー１２１に格納されたそれぞれのタスクを実行するタイミングに基づいて、外部記憶部２０にアクセスするための指示（以下、「アクセス指示」という）を、メモリ制御部１３に出力する。例えば、タスク制御部１２は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によって外部記憶部２０へのデータの書き込み、および外部記憶部２０からのデータの読み出しを行うアクセス指示を、メモリ制御部１３に出力する。
【００２４】
より具体的には、タスク制御部１２は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて、タスクを実行する際に使用する外部記憶部２０に格納されているデータを、このタスクが割り当てられた処理演算部１１が実際にタスクを実行するタイミングまでに、事前に取得する（読み出す）ためのＤＭＡのアクセス指示を、メモリ制御部１３に出力する。また、タスク制御部１２は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて、それぞれの処理演算部１１が割り当てられたタスクを実行する際に使用しないデータを、事前に外部記憶部２０に退避する（書き込む）ためのＤＭＡのアクセス指示を、メモリ制御部１３に出力する。ここで、タスク制御部１２がメモリ制御部１３に出力するアクセス指示には、外部記憶部２０のアドレスや、読み出しまたは書き込みを行うデータの量（大きさ）などを表す情報が含まれている。
【００２５】
なお、アクセス指示に含まれる外部記憶部２０のアドレスや、読み出しまたは書き込みを行うデータの量は、データ転送情報テーブル１２２を参照して決定される。演算装置１０では、外部記憶部２０に書き込まれるデータや、外部記憶部２０から読み出されたデータは、一旦、データ記憶部１４に格納される。そして、処理演算部１１ａ〜処理演算部１１ｎのそれぞれが実行しているタスクにおいて、外部記憶部２０へのアクセスが行われた際には、アクセスする外部記憶部２０のアドレスに対応したデータ記憶部１４へのアクセスがされる。このときに外部記憶部２０内にタスクを実行する際に使用するデータが格納されている場所（記憶場所）を示す外部記憶部２０のアドレスとデータ記憶部１４とを対応付け、さらに読み出しまたは書き込みを行うデータの量を対応付ける情報を保持しているのが、データ転送情報テーブル１２２である。
【００２６】
ここで、データ転送情報テーブル１２２の一例について説明する。図２は、本実施形態における演算装置１０に備えたデータ転送情報テーブル１２２の一例を示した図である。図２に示したデータ転送情報テーブル１２２の一例では、それぞれのテーブル番号毎に、外部記憶部２０の先頭アドレス、データ量、データ記憶部１４の基準のアドレス（ベースアドレス）の情報が保持されている場合を示している。
【００２７】
このデータ転送情報テーブル１２２の情報から、それぞれのデータ記憶部１４毎に、データ記憶部１４に格納されている外部記憶部２０のデータの範囲を特定することができる。より具体的には、図２に示した一例では、データ記憶部１４ａには、外部記憶部２０の先頭アドレス０ｘ１０００からデータ量０ｘ２８０のデータが格納され、データ記憶部１４ｂには、外部記憶部２０の先頭アドレス０ｘ１２８０からデータ量０ｘ２８０のデータが格納され、データ記憶部１４ｎには、データが格納されていないことがわかる。
【００２８】
なお、タスクを実行する処理演算部１１ａ〜処理演算部１１ｎのそれぞれは、外部記憶部２０へのデータの書き込みや、外部記憶部２０からのデータの読み出しを行う際に、対応するデータ記憶部１４を意識していない。演算装置１０では、それぞれのタスクを実行する際に、処理演算部１１が外部記憶部２０に直接アクセスする動作を行うが、この動作に応じて実際にアクセスされるのはデータ記憶部１４である。つまり、処理演算部１１が外部記憶部２０にデータを書き込むアクセスを行うと、書き込み先の外部記憶部２０の先頭アドレスに対応したデータ記憶部１４にデータが書き込まれ（格納され）、処理演算部１１が外部記憶部２０からデータを読み出すアクセスを行うと、読み出し元の外部記憶部２０のアドレスに対応したデータ記憶部１４から、事前に格納されているデータが読み出される。
【００２９】
また、タスク制御部１２は、次のタスクを実行する処理演算部１１が使用する外部記憶部２０のデータが、外部記憶部２０の同じ記憶領域のデータである場合、すなわち、次のタスクを実行する処理演算部１１が使用するデータが、以前のタスクを実行した他の処理演算部１１が使用したデータと重複している場合には、重複しているデータを対応するデータ記憶部１４同士で転送またはコピーするためのアクセス指示を、メモリ制御部１３に出力する。これは、例えば、画像処理における畳み込み演算処理のように、演算処理に使用するデータ（画像データ）が重複している領域、いわゆる、糊代領域のデータを、再び外部記憶部２０から読み出すことによって、外部記憶部２０へのアクセス回数を増やさないようにするために行うアクセス指示である。
【００３０】
このときのアクセス指示においても、重複しているデータを格納しているデータ記憶部１４や、データ記憶部１４から読み出して別のデータ記憶部１４に書き込みを行うデータの量は、データ転送情報テーブル１２２を参照して決定される。なお、以下の説明においては、重複しているデータを対応するデータ記憶部１４同士でコピーするものとして説明する。
【００３１】
より具体的には、タスク制御部１２は、データ転送情報テーブル１２２の情報に基づいて、それぞれのデータ記憶部１４に格納しているデータに対応した外部記憶部２０のアドレスとデータの量とを確認し、次のタスクを実行する処理演算部１１が使用する外部記憶部２０のデータが、すでにデータ記憶部１４のいずれかに格納されているか否かを判定する。そして、次のタスクを実行する処理演算部１１が使用する外部記憶部２０のデータがすでにデータ記憶部１４のいずれかに格納されている場合には、他の処理演算部１１が以前のタスクを実行するためにすでにデータを格納しているデータ記憶部１４から、次のタスクを実行する処理演算部１１に対応するデータ記憶部１４に、重複しているデータをコピーするためのアクセス指示を、メモリ制御部１３に出力する。また、次のタスクを実行する処理演算部１１が使用する外部記憶部２０のデータがいずれのデータ記憶部１４にも格納されていない場合には、外部記憶部２０からデータを読み出して、次のタスクを実行する処理演算部１１に対応するデータ記憶部１４に格納するためのアクセス指示を、メモリ制御部１３に出力する。
【００３２】
なお、データ記憶部１４同士でコピーするデータが、コピー元のデータ記憶部１４に格納されている全てのデータではない、すなわち、重複しているデータがコピー元のデータ記憶部１４に格納されているデータの一部である場合には、一部のデータのみをコピーすることもできる。この場合、処理演算部１１が次のタスクを実行する際に使用する不足分のデータは、外部記憶部２０からデータを読み出して格納することになる。その際、タスク制御部１２は、不足分のデータを外部記憶部２０からデータを読み出して、次のタスクを実行する処理演算部１１に対応するデータ記憶部１４に格納するためのアクセス指示を、メモリ制御部１３に出力する。
【００３３】
例えば、データ記憶部１４ｎに対応した処理演算部１１が使用する外部記憶部２０のデータが、外部記憶部２０の先頭アドレス０ｘ１３Ｃ０からデータ量０ｘ２８０のデータである場合、図２に示したデータ転送情報テーブル１２２では、外部記憶部２０の先頭アドレス０ｘ１３Ｃ０からデータ量０ｘ１４０のデータが、すでにデータ記憶部１４ｂに格納されていることがわかる。この場合、タスク制御部１２は、データ記憶部１４ｂに格納されている外部記憶部２０の先頭アドレス０ｘ１３Ｃ０からデータ量０ｘ１４０のデータをデータ記憶部１４ｎにコピーするためのアクセス指示と、外部記憶部２０のアドレス０ｘ１５００からデータ量０ｘ１４０のデータを外部記憶部２０からデータを読み出してデータ記憶部１４ｎに格納するためのアクセス指示とを、メモリ制御部１３に出力する。
【００３４】
なお、一部のデータのみをデータ記憶部１４同士でコピーする場合には、コピー元のデータ記憶部１４に格納されているデータの順番を変更せずにそのままコピーしてもよいし、コピー元のデータ記憶部１４に格納されているデータの順番を変更してコピーしてもよい。例えば、一部のデータが、コピー元のデータ記憶部１４に格納されている後半のデータであり、次のタスクを実行する際の前半のデータとして使用される場合を考える。この場合、コピー元のデータ記憶部１４に格納されているデータの順番を変更してコピーした場合には、次のタスクを実行する処理演算部１１に対応したデータ記憶部１４は、格納されている順番でデータを出力すればよい。しかし、コピー元のデータ記憶部１４に格納されているデータの順番を変更せずにそのままコピーした場合には、次のタスクを実行する処理演算部１１に対応したデータ記憶部１４は、最初に後半のデータ（コピーしたデータ）を出力し、その後、前半のデータ（外部記憶部２０から読み出したデータ）を出力することになる。このとき、データ記憶部１４に格納されているデータを対応する処理演算部１１に出力する順番の制御は、
例えば、メモリ制御部１３内に、要求されたデータのアドレスから出力するデータのアドレスに変換するアドレス変換部などを備え、このアドレス変換部が、データの出力順番を制御する構成であってもよい。また、メモリ制御部１３内に、データの出力順番を制御する制御部を備え、この制御部が、データの出力順番の制御を行う構成であってもよい。また、タスク制御部１２がデータ転送情報テーブル１２２の情報に基づいて制御する構成であってもよい。この場合には、データ転送情報テーブル１２２に、例えば、最初に出力するデータを表す先頭アドレスの情報を保持し、この先頭アドレスの情報に基づいてデータの出力順番を制御する構成であってもよい。
【００３５】
また、例えば、一部のデータが、コピー元のデータ記憶部１４に格納されている前半のデータであり、次のタスクを実行する際の後半のデータとして使用される場合を考える。この場合にも、コピー元のデータ記憶部１４に格納されているデータの順番を変更してコピーした場合には、次のタスクを実行する処理演算部１１に対応したデータ記憶部１４は、格納されている順番でデータを出力すればよいが、コピー元のデータ記憶部１４に格納されているデータの順番を変更せずにそのままコピーした場合には、データの出力順番を制御する必要がある。より具体的には、次のタスクを実行する処理演算部１１に対応したデータ記憶部１４は、最初に後半のデータ（外部記憶部２０から読み出したデータ）を出力し、その後、前半のデータ（コピーしたデータ）を出力することになる。このときにも、データ記憶部１４に格納されているデータを対応する処理演算部１１に出力する順番の制御を、例えば、メモリ制御部１３に備えたアドレス変換部や制御部が行う構成であってもよいし、タスク制御部１２がデータ転送情報テーブル１２２の情報に基づいて制御する構成であってもよい。
【００３６】
なお、コピー元のデータ記憶部１４に格納されているデータの順番を変更してコピーする場合にも、例えば、メモリ制御部１３に備えたアドレス変換部や制御部がコピーする順番を制御する構成であってもよいし、タスク制御部１２がデータ転送情報テーブル１２２の情報に基づいて制御する構成であってもよい。
【００３７】
なお、タスク制御部１２によるタスクを出力する処理演算部１１やタスクの出力順番の制御方法、およびメモリ制御部１３に出力する外部記憶部２０へのアクセス指示に関する詳細な説明は、後述する。
【００３８】
メモリ制御部１３は、タスク制御部１２から入力されたアクセス指示に応じて、演算装置１０に接続された外部記憶部２０からのデータの読み出しや、外部記憶部２０へのデータの書き込みを行う。
【００３９】
より具体的には、メモリ制御部１３は、タスク制御部１２から入力された、外部記憶部２０に格納されているデータを事前に取得する（読み出す）ためのアクセス指示に応じて、アクセス指示によって指定された外部記憶部２０のアドレスから、アクセス指示によって指定された量のデータを読み出し、読み出したデータを、アクセス指示によって指定されたデータ記憶部１４に格納する。メモリ制御部１３は、タスク制御部１２から入力された、データを外部記憶部２０に退避する（書き込む）ためのアクセス指示に応じて、アクセス指示によって指定されたデータ記憶部１４に格納されているデータを読み出し、読み出したデータを、アクセス指示によって指定された外部記憶部２０のアドレスの記憶領域に書き込む。
【００４０】
また、メモリ制御部１３は、タスク制御部１２から入力されたアクセス指示に応じて、処理演算部１１ａ〜処理演算部１１ｎのそれぞれから入力された次のタスクの実行要求の情報に含まれる、タスクの実行に必要な様々なパラメータのデータを、データ記憶部１４に格納、または外部記憶部２０に退避する。
【００４１】
より具体的には、メモリ制御部１３は、タスク制御部１２から入力された、パラメータのデータを格納する（書き込む）ためのアクセス指示に応じて、アクセス指示によって指定されたデータ記憶部１４ａ〜データ記憶部１４ｎのいずれかに、アクセス指示によって指定されたパラメータのデータを格納する。メモリ制御部１３は、タスク制御部１２から入力された、パラメータのデータを外部記憶部２０に退避する（書き込む）ためのアクセス指示に応じて、アクセス指示によって指定されたパラメータのデータを、アクセス指示によって指定された外部記憶部２０のアドレスの記憶領域に書き込む。ここで外部記憶部２０に退避されたパラメータのデータは、タスク制御部１２から必要に応じて入力されるパラメータのデータを読み出すためのアクセス指示に応じて、外部記憶部２０から読み出され、アクセス指示によって指定されたデータ記憶部１４に再び格納される。
【００４２】
データ記憶部１４ａ〜データ記憶部１４ｎのそれぞれは、処理演算部１１ａ〜処理演算部１１ｎのそれぞれに対応し、対応する処理演算部１１がタスクを実行する際に使用するデータや、次のタスクを実行する際に使用するデータ（例えば、現在のタスクを実行した結果のデータ）を格納する、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリ、いわゆる、キャッシュメモリである。
【００４３】
なお、図１では、演算装置１０内に、処理演算部１１のそれぞれに対応したｎ個のデータ記憶部１４を備えた構成を示しているが、データ記憶部１４の構成は、本実施形態の構成のみに限定されるものではない。例えば、演算装置内に１つのデータ記憶部を備え、このデータ記憶部の記憶領域を、処理演算部１１のそれぞれに対応する数に分割した構成であっても、同様に考えることができる。ただし、複数の処理演算部１１が同時にデータ記憶部の別の領域に対してデータの書き込みや読み出しを行うことを考慮すると、データ記憶部は、図１に示したように、処理演算部１１のそれぞれに対応した構成であることが望ましいと考えられる。
【００４４】
しかし、データ記憶部１４のそれぞれを、演算装置内に備えた１つのデータ記憶部の記憶領域を分割した構成である場合には、次のタスクを実行する処理演算部１１が使用するデータが、以前のタスクを実行した他の処理演算部１１が使用したデータと重複しているときに、重複しているデータを対応するデータ記憶部１４同士でコピーするためのアクセス指示を、メモリ制御部１３に出力する必要がなくなる。そして、次のタスクを実行する処理演算部１１が使用するデータを出力する順番の制御が必要になる可能性も少なくなると考えられる。
【００４５】
このように、演算装置１０では、いずれの処理演算部１１から出力されたタスクも、タスク制御部１２を経由してから、次のタスクを実行する処理演算部１１に入力される。そして、演算装置１０では、次のタスクが割り当てられた処理演算部１１が、外部記憶部２０に格納されているデータを使用するタイミングよりも早いタイミングで、タスクを実行する際に使用するデータを、事前にデータ記憶部１４に格納しておく。また、演算装置１０では、処理演算部１１がタスクを実行する際にデータを使用しない場合には、対応するデータ記憶部１４に格納されたデータを、外部記憶部２０に退避しておく。
【００４６】
また、演算装置１０では、処理演算部１１が演算処理する際に使用するデータが、すでにデータ記憶部１４のいずれかに格納されている場合には、そのデータを再び外部記憶部２０から読み出すのではなく、データ記憶部１４同士でコピーを行うことによって、外部記憶部２０へのアクセス回数を増やさないようにする。
【００４７】
＜第１の動作＞
次に、演算装置１０の動作について説明する。まず、演算装置１０の動作において、タスク制御部１２が、タスクキュー１２１に格納されたそれぞれのタスクを実行する際に使用する外部記憶部２０のデータのデータ記憶部１４への格納状況を確認し、データ記憶部１４に格納されていないデータを、ＤＭＡによって外部記憶部２０から取得する（読み出す）ためのアクセス指示（以下「ＤＭＡアクセス指示」という）を、メモリ制御部１３に出力する第１の動作について説明する。図３は、本実施形態の演算装置１０に備えたタスク制御部１２の概略構成、およびタスク制御部１２の動作の一例を説明する図である。
【００４８】
上述したように、タスク制御部１２は、ＤＭＡによって外部記憶部２０にアクセスするためのＤＭＡアクセス指示を、メモリ制御部１３に出力する。このため、タスク制御部１２には、図３に示したように、タスクキュー１２１およびデータ転送情報テーブル１２２に加えて、ＤＭＡリクエスト発生部１２３を備えている。ＤＭＡリクエスト発生部１２３は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて決定されたタイミングのときに、ＤＭＡアクセス指示をメモリ制御部１３に出力する。
【００４９】
また、図３には、タスク制御部１２に備えたタスクキュー１２１のそれぞれにタスクが格納されている状態を示している。なお、図３においてタスクキュー１２１内に示したタスク番号は、タスクキュー１２１にそれぞれのタスクが格納された順番を表し、併せて、それぞれのタスクを実行する際に使用する外部記憶部２０の先頭アドレスを示している。図３においては、タスク０は外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータを使用するタスクであることを示し、タスク１は外部記憶部２０の先頭アドレス０ｘ１２８０から格納されたデータを使用するタスクであることを示し、タスク２は外部記憶部２０の先頭アドレス０ｘ１５００から格納されたデータを使用するタスクであることを示している。
【００５０】
また、図３には、タスク制御部１２に備えたデータ転送情報テーブル１２２に保持している情報を示している。図３に示したデータ転送情報テーブル１２２内に示した“＃（シャープ）”に続く数字は、データ転送情報テーブル１２２に対応付けられているデータ記憶部１４を識別するためのテーブル番号を表し、外部記憶部２０の先頭アドレスは、テーブル番号で表されるデータ記憶部１４に格納されているデータに対応する外部記憶部２０の先頭アドレスを示している。図３においては、テーブル番号＃０で表されるデータ記憶部１４には、外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータが格納されていることを示し、テーブル番号＃１およびテーブル番号＃２で表されるデータ記憶部１４には、外部記憶部２０のデータが格納されていないことを示している。
【００５１】
なお、以下の説明においては、それぞれのタスクを処理演算部１１が実行する際に使用するデータの量と、データ記憶部１４に格納することができるデータの量、すなわち、データ記憶部１４の記憶領域のサイズは同じであるものとし、そのデータの量は、データ量０ｘ７８０であるものとして説明する。また、タスク番号は、それぞれのタスクが処理演算部１１に出力される順番も示しているものとする。また、テーブル番号＃０に対応するデータ記憶部１４を、「データ記憶部１４ａ」とし、テーブル番号＃１に対応するデータ記憶部１４を、「データ記憶部１４ｂ」とし、テーブル番号＃２に対応するデータ記憶部１４を、「データ記憶部１４ｃ」とする。
【００５２】
ここで、ＤＭＡリクエスト発生部１２３の構成および動作について説明する。ＤＭＡリクエスト発生部１２３は、タスクキュー１２１に順次格納されたそれぞれのタスクに基づいて、タスクが示す外部記憶部２０の先頭アドレスからデータ量０ｘ７８０のデータを、このタスクが割り当てられた処理演算部１１が実際にタスクを実行するタイミングまでに事前に取得する（読み出す）ためのＤＭＡのアクセス指示を、メモリ制御部１３に出力する。ＤＭＡリクエスト発生部１２３は、使用アドレス選択部１２３１と、格納済みアドレス選択部１２３２と、アドレス比較部１２３３と、データ量比較部１２３４と、ＤＭＡリクエストコマンド生成部１２３５と、を備えている。
【００５３】
使用アドレス選択部１２３１は、タスクキュー１２１に格納されているタスクの内、次に処理演算部１１に出力するタスクを選択し、選択したタスクが示している外部記憶部２０の先頭アドレスを取得する。そして。使用アドレス選択部１２３１は、取得した外部記憶部２０の先頭アドレスを使用アドレスとして、アドレス比較部１２３３とＤＭＡリクエストコマンド生成部１２３５とに出力する。
【００５４】
格納済みアドレス選択部１２３２は、データ転送情報テーブル１２２において、外部記憶部２０のデータが格納されていることを表しているテーブル番号を選択し、選択したテーブル番号の情報内に示されている外部記憶部２０の先頭アドレスを取得する。そして、格納済みアドレス選択部１２３２は、取得した外部記憶部２０の先頭アドレスを格納済みアドレスとして、アドレス比較部１２３３に出力する。また、格納済みアドレス選択部１２３２は、格納済みアドレスを取得したデータ転送情報テーブル１２２のテーブル番号を、ＤＭＡリクエストコマンド生成部１２３５に出力する。
【００５５】
アドレス比較部１２３３は、使用アドレス選択部１２３１から入力された使用アドレスと、格納済みアドレス選択部１２３２から入力された格納済みアドレスとを比較する。そして、アドレス比較部１２３３は、比較結果をデータ量比較部１２３４とＤＭＡリクエストコマンド生成部１２３５とに出力する。
【００５６】
アドレス比較部１２３３による使用アドレスと格納済みアドレスとの比較においては、まず、使用アドレスの値と格納済みアドレスの値との差分値（使用アドレスの値−格納済みアドレスの値）を算出する。ここでアドレス比較部１２３３が算出した差分値の符号は、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置と、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置との関係を表している。
【００５７】
より具体的には、差分値の符号が“＋（プラス）”である場合は、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置が、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも後にある、すなわち、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも後側のデータを使用するタスクであることを表す。逆に、差分値の符号が“−（マイナス）”である場合は、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置が、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも前にある、すなわち、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも前側のデータを使用するタスクであることを表す。アドレス比較部１２３３は、タスクを実行する際に使用する外部記憶部２０のデータの位置関係を含む差分値を、ＤＭＡリクエストコマンド生成部１２３５に出力する。
【００５８】
その後、アドレス比較部１２３３は、算出した差分値の絶対値を算出する。すなわち、アドレス比較部１２３３は、使用アドレスの値と格納済みアドレスの値との差の絶対値（｜使用アドレスの値−格納済みアドレスの値｜）の算出を行う。第１の動作では、タスクを実行する際に使用するデータの量と、データ記憶部１４に格納することができるデータの量（データ記憶部１４の記憶領域のサイズ）が同じである。このため、アドレス比較部１２３３が算出した絶対値の値は、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置と、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置との差の大きさであるが、この値は、データ記憶部１４にすでに格納されているデータと重複していないデータの量に相当し、外部記憶部２０から読み出すデータの量を表していることになる。アドレス比較部１２３３は、外部記憶部２０から読み出すデータの量を表す絶対値を、データ量比較部１２３４に出力する。
【００５９】
データ量比較部１２３４は、アドレス比較部１２３３から入力された絶対値と、データ記憶部１４の記憶領域のサイズとを比較、すなわち、外部記憶部２０から読み出すデータの量と、データ記憶部１４に格納することができるデータの量とを比較する。そして、データ量比較部１２３４は、比較した結果に基づいて、ＤＭＡリクエストコマンド生成部１２３５を起動するための起動信号を出力する。
【００６０】
より具体的には、データ量比較部１２３４は、外部記憶部２０から読み出すデータの量がデータ記憶部１４に格納することができるデータの量よりも小さい（絶対値＜サイズ）場合、すなわち、外部記憶部２０から読み出すデータがデータ記憶部１４の記憶領域に収まる場合に、ＤＭＡリクエストコマンド生成部１２３５にＤＭＡリクエストコマンドを生成させるための起動信号を出力する。
【００６１】
ＤＭＡリクエストコマンド生成部１２３５は、使用アドレス選択部１２３１から入力された使用アドレスと、格納済みアドレス選択部１２３２から入力されたテーブル番号と、アドレス比較部１２３３から入力された差分値と、データ量比較部１２３４から入力された起動信号とに基づいて、ＤＭＡアクセス指示におけるＤＭＡリクエストコマンドを生成する。
【００６２】
なお、ＤＭＡリクエストコマンド生成部１２３５が生成するＤＭＡリクエストコマンドは、ＤＭＡアクセス指示によってアクセスする外部記憶部２０およびデータ記憶部１４のアドレスや、ＤＭＡで転送するデータの量を設定するコマンドである。ＤＭＡリクエスト発生部１２３は、ＤＭＡリクエストコマンド生成部１２３５が生成したＤＭＡリクエストコマンドをメモリ制御部１３に出力して設定をした後、ＤＭＡによるデータ転送を開始するためのＤＭＡ開始指示を、メモリ制御部１３に出力する。以下の説明においては、メモリ制御部１３に対するＤＭＡリクエストコマンドの設定と、ＤＭＡ開始指示とを併せて、タスク制御部１２がメモリ制御部１３に出力するＤＭＡアクセス指示とする。
【００６３】
次に、ＤＭＡリクエストコマンド生成部１２３５によるＤＭＡリクエストコマンドの生成方法について説明する。図４は、本実施形態の演算装置１０に備えたタスク制御部１２による第１の動作における処理手順を示したフローチャートである。図４には、ＤＭＡリクエストコマンド生成部１２３５がＤＭＡリクエストコマンドを生成する際の処理手順を示している。
【００６４】
ＤＭＡリクエストコマンド生成部１２３５は、データ量比較部１２３４から起動信号が入力されると、ＤＭＡリクエストコマンドを生成する処理を実行する。まず、ＤＭＡリクエストコマンド生成部１２３５は、アドレス比較部１２３３から入力された差分値が０以上であるか否かを確認する（ステップＳ１）。このステップＳ１の確認によって、上述したように、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置が、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも前にあるか後にあるかを確認することができる。
【００６５】
ステップＳ１において、差分値が０以上である場合（ステップＳ１の“ＹＥＳ”）、すなわち、差分値の符号が“＋（プラス）”である場合には、ＤＭＡリクエストコマンド生成部１２３５は、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置が、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも後にあると判断する。そして、ＤＭＡリクエストコマンド生成部１２３５は、最初にデータ記憶部１４同士で重複しているデータをコピーするためのＤＭＡリクエストコマンドを生成する（ステップＳ１１）。
【００６６】
より具体的には、ステップＳ１１において、ＤＭＡリクエストコマンド生成部１２３５は、データ記憶部１４にすでに格納されている後側のデータを、タスクを実行する処理演算部１１に対応したデータ記憶部１４の前側にコピーするＤＭＡを行う際の設定値を生成する。例えば、ＤＭＡの転送元アドレス（ソースアドレス）を、格納済みアドレス選択部１２３２から入力されたテーブル番号に対応するデータ記憶部１４の基準のアドレス（ベースアドレス）に差分値を加算した値にし、ＤＭＡの転送先アドレス（ディスティネーションアドレス）を、タスクを実行する処理演算部１１に対応したデータ記憶部１４のベースアドレスにする。また、ＤＭＡにおけるデータの転送量を、データ記憶部１４の記憶領域のサイズから差分値を減算した量にする。
【００６７】
これにより、ＤＭＡアクセス指示に応じて、例えば、テーブル番号＃１に対応するデータ記憶部１４ｂには、テーブル番号＃０に対応するデータ記憶部１４ａのベースアドレスから差分値だけ後に格納されているそれぞれのデータが、データ記憶部１４ｂの記憶領域のサイズ（＝データ量０ｘ７８０）から差分値を減算した量だけ、順次コピーされることになる。このとき、データ記憶部１４ｂにコピーされるデータ記憶部１４ａのそれぞれのデータは、データ記憶部１４ｂのベースアドレス、すなわち、先頭の位置から順次格納される。
【００６８】
続いて、ＤＭＡリクエストコマンド生成部１２３５は、外部記憶部２０からデータを読み出してデータ記憶部１４に格納するためのＤＭＡリクエストコマンドを生成する（ステップＳ１２）。
【００６９】
より具体的には、ステップＳ１２において、ＤＭＡリクエストコマンド生成部１２３５は、ステップＳ１１でデータ記憶部１４の前側にコピーしたデータの後側に、外部記憶部２０から読み出したデータを追加して格納するＤＭＡを行う際の設定値を生成する。例えば、ＤＭＡのソースアドレスを、使用アドレス選択部１２３１から入力された使用アドレスにステップＳ１１において転送した転送量を加算した値にし、ＤＭＡのディスティネーションアドレスを、タスクを実行する処理演算部１１に対応したデータ記憶部１４のベースアドレスにステップＳ１１において転送した転送量を加算した値にする。また、ＤＭＡにおけるデータの転送量を、差分値の量にする。
【００７０】
これにより、ＤＭＡアクセス指示に応じて、例えば、テーブル番号＃１に対応するデータ記憶部１４ｂには、外部記憶部２０の先頭アドレスから転送量だけ後に格納されているそれぞれのデータが、外部記憶部２０から読み出した差分値の量だけ、順次格納される。このとき、データ記憶部１４ｂに格納されるそれぞれのデータは、ステップＳ１１においてデータ記憶部１４ｂにコピーされたデータ記憶部１４ａのデータの後側に引き続き、順次格納される。
【００７１】
また、ステップＳ１において、差分値が０以上でない場合（ステップＳ１の“ＮＯ”）、すなわち、差分値の符号が“−（マイナス）”である場合には、ＤＭＡリクエストコマンド生成部１２３５は、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置が、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置よりも前にあると判断する。そして、ＤＭＡリクエストコマンド生成部１２３５は、最初に重複していないデータを外部記憶部２０から読み出すためのＤＭＡリクエストコマンドを生成する（ステップＳ２１）。
【００７２】
より具体的には、ステップＳ２１において、ＤＭＡリクエストコマンド生成部１２３５は、外部記憶部２０から読み出したデータを、タスクを実行する処理演算部１１に対応したデータ記憶部１４の前側に格納するＤＭＡを行う際の設定値を生成する。例えば、ＤＭＡのソースアドレスを、使用アドレス選択部１２３１から入力された使用アドレスの値にし、ＤＭＡのディスティネーションアドレスを、タスクを実行する処理演算部１１に対応したデータ記憶部１４のベースアドレスにする。また、ＤＭＡにおけるデータの転送量を、差分値の逆数（差分値の符号を逆にした値）の量にする。
【００７３】
これにより、ＤＭＡアクセス指示に応じて、例えば、テーブル番号＃１に対応するデータ記憶部１４ｂには、外部記憶部２０の先頭アドレスから格納されているそれぞれのデータが、外部記憶部２０から読み出した差分値の逆数の量だけ、順次格納される。このとき、データ記憶部１４ｂに格納されるそれぞれのデータは、データ記憶部１４ｂのベースアドレス、すなわち、先頭の位置から順次格納される。
【００７４】
続いて、ＤＭＡリクエストコマンド生成部１２３５は、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡリクエストコマンドを生成する（ステップＳ２２）。
【００７５】
より具体的には、ステップＳ２２において、ＤＭＡリクエストコマンド生成部１２３５は、ステップＳ２１でデータ記憶部１４の前側に格納した外部記憶部２０から読み出したデータの後側に、データ記憶部１４にすでに格納されているデータをコピーして追加するＤＭＡを行う際の設定値を生成する。例えば、ＤＭＡのソースアドレスを、格納済みアドレス選択部１２３２から入力されたテーブル番号に対応するデータ記憶部１４のベースアドレスの値にし、ＤＭＡのディスティネーションアドレスを、タスクを実行する処理演算部１１に対応したデータ記憶部１４のベースアドレスにステップＳ２１において転送した転送量を加算した値にする。また、ＤＭＡにおけるデータの転送量を、データ記憶部１４の記憶領域のサイズから差分値の逆数を減算した量にする。
【００７６】
これにより、ＤＭＡアクセス指示に応じて、例えば、テーブル番号＃１に対応するデータ記憶部１４ｂには、テーブル番号＃０に対応するデータ記憶部１４ａのベースアドレスから格納されているそれぞれのデータが、データ記憶部１４ｂの記憶領域のサイズ（＝データ量０ｘ７８０）から差分値の逆数を減算した量だけ、順次コピーされることになる。このとき、データ記憶部１４ｂにコピーされるデータ記憶部１４ａのそれぞれのデータは、ステップＳ１１においてデータ記憶部１４ｂに格納された外部記憶部２０から読み出したデータの後側に引き続き、順次格納される。
【００７７】
このようにして、ＤＭＡリクエストコマンド生成部１２３５は、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡリクエストコマンドと、外部記憶部２０からデータを読み出してデータ記憶部１４に格納するためのＤＭＡリクエストコマンドとを生成する。これにより、ＤＭＡアクセス指示に応じて、データ記憶部１４には、記憶領域のサイズ（＝データ量０ｘ７８０）分のデータが格納されることになる。
【００７８】
また、ＤＭＡリクエストコマンド生成部１２３５は、アドレス比較部１２３３から入力された差分値に基づいて、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡリクエストコマンドと、外部記憶部２０からデータを読み出してデータ記憶部１４に格納するためのＤＭＡリクエストコマンドとを生成する順番を変更する。これにより、データ記憶部１４には、タスク制御部１２が出力したＤＭＡアクセス指示に応じて、対応する処理演算部１１がタスクを実行する際に使用する外部記憶部２０のデータが、処理演算部１１が使用する順番で順次格納される。
【００７９】
なお、図４に示した第１の動作における処理手順では、ステップＳ１において、ＤＭＡリクエストコマンド生成部１２３５が、アドレス比較部１２３３から入力された差分値が０以上であるか否かを確認することによって、先にデータ記憶部１４同士で重複しているデータをコピーするか、外部記憶部２０からデータを読み出してデータ記憶部１４に格納するかを判断した。しかし、ＤＭＡリクエストコマンド生成部１２３５によって、先にデータ記憶部１４同士で重複しているデータをコピーすると判断される場合には、アドレス比較部１２３３から入力された差分値が０である場合も含まれる。
【００８０】
ここで、差分値が０であるということは、タスクを実行する際に使用する外部記憶部２０のデータの先頭の位置が、データ記憶部１４にすでに格納されている外部記憶部２０のデータの先頭の位置と同じ位置であることを表している。つまり、次のタスクが割り当てられた処理演算部１１は、以前のタスクを実行した他の処理演算部１１が使用したデータと同じデータを使用して演算処理を実行することを表している。
【００８１】
この場合には、ＤＭＡリクエストコマンド生成部１２３５は、ステップＳ１１において、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡリクエストコマンドのみを生成し、ステップＳ１２における外部記憶部２０からデータを読み出してデータ記憶部１４に格納するためのＤＭＡリクエストコマンドを生成しないで、ＤＭＡリクエストコマンドを生成する処理を完了することになる。なお、このときのＤＭＡのソースアドレスおよびディスティネーションアドレスは、上述したステップＳ１１におけるソースアドレスおよびディスティネーションアドレスと同様であり、ＤＭＡにおけるデータの転送量のみが、データ記憶部１４の記憶領域のサイズ（＝データ量０ｘ７８０）となる。
【００８２】
また、タスク制御部１２が出力したＤＭＡアクセス指示に応じて、メモリ制御部１３がそれぞれのデータ記憶部１４に格納されているデータを変更した後、タスク制御部１２内のデータ転送情報テーブル１２２を更新する。
【００８３】
次に、タスク制御部１２内のデータ転送情報テーブル１２２を更新する動作について説明する。図５は、本実施形態の演算装置１０に備えたタスク制御部１２内のデータ転送情報テーブル１２２を更新する動作の一例を説明する図である。図５には、データ転送情報テーブル１２２の更新に関連する演算装置１０内の構成要素のみを示している。
【００８４】
メモリ制御部１３は、第１の動作によってタスク制御部１２から出力されたＤＭＡアクセス指示に応じて、外部記憶部２０およびデータ記憶部１４に対するＤＭＡを行う。これにより、データ記憶部１４に格納されている外部記憶部２０のデータの範囲が変更され、データ記憶部１４に格納されたデータに対応する外部記憶部２０の先頭アドレスも変更される。
【００８５】
その後、メモリ制御部１３は、データ記憶部１４に格納されているデータが変更されたことを表すテーブル更新情報を、タスク制御部１２に出力する。より具体的には、メモリ制御部１３は、格納しているデータを変更したデータ記憶部１４を識別する情報と、このデータ記憶部１４に格納されているデータに対応する外部記憶部２０の先頭の位置を表す情報とを、タスク制御部１２に出力する。例えば、メモリ制御部１３は、データ転送情報テーブル１２２において対応するテーブル番号と、外部記憶部２０の先頭アドレスとを、タスク制御部１２に出力する。
【００８６】
タスク制御部１２は、メモリ制御部１３から入力されたテーブル更新情報に基づいて、データ転送情報テーブル１２２に保持している情報を更新する。図５には、データ記憶部１４ｂに外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータを使用するタスク１に対応したデータが新たに格納され、データ記憶部１４ｂに対応するデータ転送情報テーブル１２２の外部記憶部２０の先頭アドレス（格納済みアドレス）の情報が“０ｘ１０００”に更新された場合を示している。また、図５には、データ記憶部１４ｃに外部記憶部２０の先頭アドレス０ｘ２０００から格納されたデータを使用するタスク２に対応したデータが新たに格納され、データ記憶部１４ｃに対応するデータ転送情報テーブル１２２の外部記憶部２０の先頭アドレス（格納済みアドレス）の情報が“０ｘ２０００”に更新された場合を示している。
【００８７】
ここで、メモリ制御部１３がデータ記憶部１４同士、または外部記憶部２０とデータ記憶部１４との間でデータを転送するタイミングについて説明する。図６は、本実施形態の演算装置１０に備えたメモリ制御部１３によるデータ転送のタイミングを示したタイミングチャートである。図６に示したタイミングチャートでは、図５に示したタスク０〜タスク２を実行する際に使用するデータを外部記憶部２０から読み出して、演算装置１０に備えた３つのデータ記憶部１４ａ〜データ記憶部１４ｃのそれぞれに格納する場合の一例を示している。
【００８８】
タスク制御部１２は、最初に外部記憶部２０の先頭アドレス０ｘ１０００からデータを読み出してデータ記憶部１４ａに格納するためのＤＭＡアクセス指示をメモリ制御部１３に出力する。このＤＭＡアクセス指示に応じて、メモリ制御部１３は、外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータを順次読み出し、データ記憶部１４ａのベースアドレス、すなわち、先頭の位置から順次格納する。データ記憶部１４ａへのデータの格納が完了すると、外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータを使用するタスク０の演算処理に応じて、データ記憶部１４ａに格納されたデータが順次読み出される。
【００８９】
また、タスク制御部１２は、データ記憶部１４ａに格納されているデータをデータ記憶部１４ｂにコピーするためのＤＭＡアクセス指示をメモリ制御部１３に出力する。このＤＭＡアクセス指示に応じて、メモリ制御部１３は、データ記憶部１４ａのベースアドレスから格納されているデータを順次読み出して、データ記憶部１４ｂのベースアドレスから順次格納（コピー）する。データ記憶部１４ｂへのデータのコピーが完了すると、外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータを使用するタスク１の演算処理に応じて、データ記憶部１４ｂに格納されたデータが順次読み出される。
【００９０】
その後、タスク制御部１２は、外部記憶部２０の先頭アドレス０ｘ２０００からデータを読み出してデータ記憶部１４ａに格納するためのＤＭＡアクセス指示をメモリ制御部１３に出力する。このＤＭＡアクセス指示に応じて、メモリ制御部１３は、外部記憶部２０の先頭アドレス０ｘ２０００から格納されたデータを順次読み出し、データ記憶部１４ｃのベースアドレスから順次格納する。データ記憶部１４ｃへのデータの格納が完了すると、外部記憶部２０の先頭アドレス０ｘ２０００から格納されたデータを使用するタスク２の演算処理に応じて、データ記憶部１４ｃに格納されたデータが順次読み出される。
【００９１】
このように、タスク制御部１２は、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡアクセス指示と、外部記憶部２０からデータを読み出してデータ記憶部１４に格納するためのＤＭＡアクセス指示とを、それぞれメモリ制御部１３に出力することによって、処理演算部１１がそれぞれのタスクを実行する際に、外部記憶部２０へのアクセス回数を増やさないようにする。図６に示したタイミングチャートでは、３つのタスクを実行する際の外部記憶部２０へのアクセスする回数が少なくなり、２回になっている。
【００９２】
なお、上述したように、最初に外部記憶部２０の先頭アドレス０ｘ１０００からデータを読み出してデータ記憶部１４ａに格納し、データ記憶部１４ａに格納されているデータをデータ記憶部１４ｂにコピーする動作以外でも、データ記憶部１４ａとデータ記憶部１４ｂとに同じデータを格納することができる。例えば、タスク制御部１２が、外部記憶部２０の先頭アドレス０ｘ１０００からデータを読み出してデータ記憶部１４ａとデータ記憶部１４ｂとに同時に格納するためのＤＭＡアクセス指示をメモリ制御部１３に出力してもよい。
【００９３】
このように、タスク制御部１２は、複数のデータ記憶部１４に同時に同じデータを格納するためのＤＭＡアクセス指示をメモリ制御部１３に出力することもできる。ここで、複数のデータ記憶部１４に同時に同じデータを格納するためのＤＭＡアクセス指示は、上述したような、外部記憶部２０から読み出したデータを複数のデータ記憶部１４に同時に格納するＤＭＡアクセス指示のみではなく、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡアクセス指示であってもよい。この場合には、例えば、データ記憶部１４ａに格納されているデータを、データ記憶部１４ｂとデータ記憶部１４ｃとにコピーすることができる。
【００９４】
なお、タスクを実行する際に使用するデータを、データ記憶部１４にコピーまたは格納際には、このデータ記憶部１４に演算処理に必要な前のデータが格納されていないか、すなわち、演算処理に必要なデータが残っていないかを確認し、演算処理に必要な前のデータが格納されていない場合にのみ、タスクを実行する際に使用するデータをコピーまたは格納する必要がある。このため、タスク制御部１２は、データ記憶部１４に演算処理に必要な前のデータが格納されている、すなわち、演算処理に必要なデータが残っている場合に、データ記憶部１４に現在格納されているデータを、外部記憶部２０に退避しておくためのＤＭＡアクセス指示を、メモリ制御部１３に出力する。このデータを退避しておくためのＤＭＡアクセス指示は、データ記憶部１４同士で重複しているデータをコピーするためのＤＭＡアクセス指示、および外部記憶部２０からデータを読み出してデータ記憶部１４に格納するためのＤＭＡアクセス指示よりも前に出力する。
【００９５】
＜第２の動作＞
次に、演算装置１０の動作において、データ記憶部１４に現在格納されているデータを外部記憶部２０に退避する（書き込む）際の、タスク制御部１２の第２の動作について説明する。第２の動作は、タスクキュー１２１に格納されたそれぞれのタスクを実行する際に使用する外部記憶部２０のデータをＤＭＡによって外部記憶部２０から取得する（読み出す）ためのＤＭＡアクセス指示を出力する前に、データ記憶部１４に現在格納されている演算処理に必要な前のデータを、ＤＭＡによって外部記憶部２０に退避する（書き込む）ためのアクセス指示（以下「ＤＭＡ退避アクセス指示」という）を、メモリ制御部１３に出力する動作である。
【００９６】
なお、本第２の動作においては、タスクキュー１２１に格納されたそれぞれのタスクの内、処理演算部１１に出力される順番が近いタスクを実行する際に使用する外部記憶部２０のデータの退避を行わないようにするために、予め定めた退避閾値を設定する。この退避閾値を設定することにより、タスク制御部１２は、退避閾値より前のタスクを実行した処理演算部１１に対応したデータ記憶部１４を、退避する対象のデータ記憶部１４から除外する。これにより、演算装置１０では、データ記憶部１４に格納されている演算処理に必要なデータが外部記憶部２０に一旦退避され、再び外部記憶部２０から取得される（読み出される）という、不要な外部記憶部２０へのアクセス、つまり、データ記憶部１４のデータの不要な退避を回避することによって、外部記憶部２０へのアクセス回数を低減することができる。また、演算装置１０では、例えば、外部記憶部２０から取得したままの状態のデータを外部記憶部２０に退避してしまうなど、データ記憶部１４に格納されたデータを不用意に退避することによって、外部記憶部２０へのアクセス回数が増加してしまうことを回避することができる。
【００９７】
図７は、本実施形態の演算装置１０に備えたタスク制御部１２の概略構成、およびタスク制御部１２の動作の一例を説明する図である。本第２の動作の説明においても、タスク制御部１２の概略構成は、図３に示したタスク制御部１２の概略構成と同様である。
【００９８】
また、図７にも、図３に示したタスク制御部１２の概略構成と同様に、タスク制御部１２に備えたタスクキュー１２１のそれぞれにタスクが格納されている状態を示し、タスク番号とそれぞれのタスクを実行する際に使用する外部記憶部２０の先頭アドレス（使用アドレス）とを併せて示している。ただし、本第２の動作の説明においては、図７に示したように、タスク制御部１２に格納されたタスクが、図３に示したタスクと異なる。なお、タスク制御部１２は、基本的に、タスクキュー１２１にそれぞれのタスクが格納された順番で、それぞれのタスクを処理演算部１１に出力するが、タスクの出力順番をタスク制御部１２が制御することもできる。しかし、以下の説明においては、説明を容易にするため、タスク制御部１２は、図７に示したそれぞれのタスクを、タスク番号の順番に、処理演算部１１に出力するものとする。
【００９９】
また、図７にも、図３に示したタスク制御部１２の概略構成と同様に、タスク制御部１２に備えたデータ転送情報テーブル１２２に保持している情報を示している。そして、図７に示したデータ転送情報テーブル１２２内の“＃（シャープ）”に続く数字で表したテーブル番号や、外部記憶部２０の先頭アドレス（格納済みアドレス）も、図３に示したタスク制御部１２の概略構成と同様である。図７においては、テーブル番号＃０で表されるデータ記憶部１４には、外部記憶部２０の先頭アドレス０ｘ１０００から格納されたデータが格納されていることを示し、テーブル番号＃１およびテーブル番号＃２で表されるデータ記憶部１４には、外部記憶部２０の先頭アドレス０ｘ２０００から格納されたデータが格納されていることを示している。
【０１００】
また、以下の説明においても、テーブル番号＃０に対応するデータ記憶部１４を、「データ記憶部１４ａ」とし、テーブル番号＃１に対応するデータ記憶部１４を、「データ記憶部１４ｂ」とし、テーブル番号＃２に対応するデータ記憶部１４を、「データ記憶部１４ｃ」とする。
【０１０１】
ここで、タスク制御部１２の第２の動作、特にＤＭＡリクエスト発生部１２３の動作について説明する。ＤＭＡリクエスト発生部１２３は、タスクキュー１２１に順次格納されたそれぞれのタスクを、処理演算部１１のそれぞれに出力する。その際、ＤＭＡリクエスト発生部１２３に備えた使用アドレス選択部１２３１は、タスクキュー１２１に格納されているそれぞれのタスクが示している外部記憶部２０の先頭アドレス（使用アドレス）を取得する。また、ＤＭＡリクエスト発生部１２３に備えた格納済みアドレス選択部１２３２は、データ転送情報テーブル１２２において、外部記憶部２０のデータが格納されていることを表しているテーブル番号内に示されている外部記憶部２０の先頭アドレス（格納済みアドレス）を取得する。
【０１０２】
そして、ＤＭＡリクエスト発生部１２３は、取得した使用アドレスと格納済みアドレスとに基づいて、データ記憶部１４のそれぞれを、データを退避する対象のデータ記憶部１４から除外するか否かを判定する。そして、ＤＭＡリクエスト発生部１２３は、データを退避する対象から除外すると判定されたデータ記憶部１４に格納されているデータの外部記憶部２０への退避（書き込み）を行わず、データを退避する対象であると判定されたデータ記憶部１４に格納されているデータのみを、外部記憶部２０に退避する（書き込む）。すなわち、データを退避する対象であると判定されたデータ記憶部１４のみ、格納するデータの変更を行う。
【０１０３】
より具体的には、例えば、図７に示したタスク制御部１２の状態で、退避閾値が“３”である場合、つまり、タスクキュー１２１に格納されたそれぞれのタスクの内、処理演算部１１に出力される順番が近い２つ目のタスクを実行する処理演算部１１に対応したデータ記憶部１４までを、退避する対象のデータ記憶部１４から除外する場合を考える。
【０１０４】
まず、タスク０を対応する処理演算部１１に出力したとき、データ転送情報テーブル１２２は、図７に示した状態になっている。その後、ＤＭＡリクエスト発生部１２３は、タスクキュー１２１に格納されているタスク１からタスク９までのそれぞれのタスクの使用アドレスと、データ転送情報テーブル１２２のテーブル番号＃０〜テーブル番号＃２のそれぞれの格納済みアドレスとを取得する。そして、ＤＭＡリクエスト発生部１２３は、退避閾値が“３”であるため、タスク１とタスク２とが示している使用アドレスと、テーブル番号＃０〜テーブル番号＃２のそれぞれの格納済みアドレスとに基づいて、データ記憶部１４のそれぞれを、データを退避する対象のデータ記憶部１４から除外するか否かを判定する。図７に示した状態の場合、テーブル番号＃２に対応するデータ記憶部１４ｃがデータを退避する対象のデータ記憶部１４から除外され、テーブル番号＃１に対応するデータ記憶部１４ｂが、データを退避する対象のデータ記憶部１４となる。
【０１０５】
その後、ＤＭＡリクエスト発生部１２３は、タスク１を処理演算部１１に出力するために、事前にメモリ制御部１３に出力するデータ記憶部１４ａに格納されているデータをデータ記憶部１４ｂにコピーするためのＤＭＡアクセス指示に先立って、データ記憶部１４ｂに格納されているデータを外部記憶部２０に退避するためのＤＭＡ退避アクセス指示を、メモリ制御部１３に出力する。これにより、データ記憶部１４ｂに格納されているデータが外部記憶部２０に退避されたあと、タスク１を実行する際に使用する外部記憶部２０のデータ（データ記憶部１４ａに格納されているデータ）を、テーブル番号＃１に対応するデータ記憶部１４ｂにコピーすることができる。
【０１０６】
なお、ＤＭＡリクエスト発生部１２３は、必要に応じてＤＭＡ退避アクセス指示をメモリ制御部１３に出力する。つまり、データ記憶部１４に現在格納されているデータが、演算処理に必要なデータではない場合には、データ記憶部１４に現在格納されているデータを上書きしても問題がないため、ＤＭＡリクエスト発生部１２３は、ＤＭＡ退避アクセス指示をメモリ制御部１３に出力しないこともある。
【０１０７】
次に、タスク制御部１２の第２の動作、特にＤＭＡリクエスト発生部１２３の動作における処理手順について説明する。図８は、本実施形態の演算装置１０に備えたタスク制御部１２が、データ記憶部１４に格納されているデータを退避する処理手順を示したフローチャートである。なお、図８に示したデータを退避する処理手順の説明においては、図７を参照し、タスクキュー１２１に格納されたそれぞれのタスクと、データ転送情報テーブル１２２に保持されたそれぞれのデータ記憶部１４の情報が、図７に示した状態であるものとして説明する。また、退避閾値は“３”であるものとして説明する。
【０１０８】
まず、タスク制御部１２の第２の動作において、ＤＭＡリクエスト発生部１２３は、データ転送情報テーブル１２２に保持している情報を確認し、外部記憶部２０のデータが格納されていることを表しているテーブル番号に空きがあるか否か、すなわち、外部記憶部２０のデータを格納することができる空きの状態のデータ記憶部１４があるか否かを確認する（ステップＳ３）。
【０１０９】
ステップＳ３において、空きの状態のデータ記憶部１４があると確認された場合（ステップＳ３の“ＹＥＳ”）には、図８に示した処理手順を完了し、次のタスクを実行する処理演算部１１に対応するデータ記憶部１４に外部記憶部２０のデータを格納するための処理を行う。また、ステップＳ３において、空きの状態のデータ記憶部１４がないと確認された場合（ステップＳ３の“ＮＯ”）には、ステップＳ３１から、データ記憶部１４のそれぞれを、データを退避する対象のデータ記憶部１４から除外するか否かの判定処理、すなわち、データ記憶部１４の退避する対象からの除外処理を開始する。
【０１１０】
データ記憶部１４の退避する対象からの除外処理では、ＤＭＡリクエスト発生部１２３は、まず、ステップＳ３１においてタスク番号ｉを“０”にクリアする。続いて、ＤＭＡリクエスト発生部１２３は、ステップＳ３２においてテーブル番号＃ｊを“０”にクリアする。
【０１１１】
続いて、ＤＭＡリクエスト発生部１２３は、タスク番号ｉのタスクを実行する際に使用するデータを保持している外部記憶部２０の先頭アドレス（使用アドレス）が、データ転送情報テーブル１２２のテーブル番号＃ｊに保持された外部記憶部２０の先頭アドレス（格納済みアドレス）の情報と同じであるか否かを確認する（ステップＳ３３）。
【０１１２】
ステップＳ３３において、タスク番号ｉのタスクを実行する際に使用するデータを保持している外部記憶部２０の先頭アドレス（使用アドレス）が、データ転送情報テーブル１２２のテーブル番号＃ｊに保持された外部記憶部２０の先頭アドレス（格納済みアドレス）の情報と同じであると確認された場合（ステップＳ３３の“ＹＥＳ”）には、ステップＳ３４においてテーブル番号＃ｊに対応するデータ記憶部１４を、データを退避する対象のデータ記憶部１４から除外する。
【０１１３】
なお、図８に示したステップＳ３４では、データを退避する対象のデータ記憶部１４から除外するための方法として、データ転送情報テーブル１２２に保持している不図示の書き換えＮＧフラグ［＃ｊ］をＯＮ状態にする方法を示している。しかし、格納しているデータを退避する対象のデータ記憶部１４から除外するための方法は、図８に示した処理手順に示した方法に限定されるものではない。
【０１１４】
図７に示した状態の場合、最初に処理演算部１１に出力するタスク０は、外部記憶部２０の先頭アドレス（使用アドレス）０ｘ１０００から格納されたデータを使用するタスクであり、データ転送情報テーブル１２２のテーブル番号＃０に保持された外部記憶部２０の先頭アドレス（格納済みアドレス）の情報と同じであるため、ステップＳ３３における確認の結果が“ＹＥＳ”となる。これにより、ステップＳ３４において、テーブル番号＃０に保持している書き換えＮＧフラグ［＃０］をＯＮ状態に変更され、対応するデータ記憶部１４ａが、データを退避する対象のデータ記憶部１４から除外される。
【０１１５】
また、タスク０の使用アドレスと、データ転送情報テーブル１２２のテーブル番号＃１に保持された外部記憶部２０の先頭アドレス（格納済みアドレス）の情報とは異なるため、ステップＳ３３における確認の結果が“ＮＯ”となる。これにより、テーブル番号＃１に対応するデータ記憶部１４ｂは、データを退避する対象のデータ記憶部１４になる。なお、このとき、テーブル番号＃１に保持している書き換えＮＧフラグ［＃１］は変更されるＯＦＦ状態のままである。
【０１１６】
同様に、ステップＳ３２のループによって、データ転送情報テーブル１２２の全てのテーブル番号＃ｊに保持された外部記憶部２０の先頭アドレス（格納済みアドレス）の情報が、タスク０の使用アドレスと同じであるかの確認がされる。その後、全てのテーブル番号＃ｊに対するステップＳ３２のループの処理が完了すると、ＤＭＡリクエスト発生部１２３は、ステップＳ３１においてタスク番号ｉに１を加えてタスク番号ｉ＝１とする。そして、同様に、ステップＳ３２のループによる、データ転送情報テーブル１２２の全てのテーブル番号＃ｊに保持された外部記憶部２０の先頭アドレス（格納済みアドレス）の情報が、タスク１の使用アドレスと同じであるかの確認がされる。
【０１１７】
このステップＳ３１のループによって、退避閾値よりも小さいタスク番号ｉのタスクの使用アドレスと、データ転送情報テーブル１２２の全てのテーブル番号＃ｊに保持された格納済みアドレスとが同じであるか否かの確認がされ、データ転送情報テーブル１２２に保持しているそれぞれのテーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］が、順次更新される。
【０１１８】
その後、退避閾値よりも小さいタスク番号ｉに対するステップＳ３１のループの処理が完了すると、ＤＭＡリクエスト発生部１２３は、ステップＳ４１から、データを退避する対象のデータ記憶部１４に現在格納されているデータの退避処理を開始する。
【０１１９】
データ記憶部１４に現在格納されているデータの退避処理では、ＤＭＡリクエスト発生部１２３は、まず、ステップＳ４１においてテーブル番号＃ｊを“０”にクリアする。続いて、ＤＭＡリクエスト発生部１２３は、それぞれのテーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］がＯＮ状態であるか否かを確認する（ステップＳ４２）。
【０１２０】
ステップＳ４２において、テーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］がＯＮ状態であると確認された場合（ステップＳ４２の“ＹＥＳ”）には、ＤＭＡリクエスト発生部１２３は、ステップＳ４１においてテーブル番号＃ｊに１を加えてテーブル番号＃ｊ＝１とする。そして、同様に、ステップＳ４１のループによる、テーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］がＯＮ状態であるか否かの確認を行う。
【０１２１】
また、ステップＳ４２において、テーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］がＯＮ状態でない、すなわち、ＯＦＦ状態であると確認された場合（ステップＳ４２の“ＮＯ”）には、ステップＳ４３においてステップＳ４１のループを抜け出す。
【０１２２】
そして、ＤＭＡリクエスト発生部１２３は、ステップＳ４１のループを抜け出してきたとき、全てのテーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］の確認が完了したか否かを確認する。すなわち、演算装置１０が備えている全てのデータ記憶部１４に対応したデータ転送情報テーブル１２２の確認が完了したか否かを確認する（ステップＳ５１）。
【０１２３】
ステップＳ５１において、全てのテーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］の確認が完了した場合（ステップＳ５１の“ＮＯ”）には、処理を完了する。このとき、演算装置１０では、データ記憶部１４に格納されているデータを外部記憶部２０に退避しないことになる。これは、ステップＳ５１において、全てのテーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］の確認が完了した場合（ステップＳ５１の“ＮＯ”）には、ステップＳ４２において、書き換えＮＧフラグ［＃ｊ］がＯＦＦ状態であると確認されたテーブル番号＃ｊが確認できずにステップＳ４１のループを抜け出してきたためである。すなわち、退避することができるデータを格納しているデータ記憶部１４を発見することができなかったためである。この場合には、処理演算部１１のいずれかが現在実行しているタスクの演算処理を完了した後に、その処理演算部１１に次のタスクを割り当てる。
【０１２４】
また、ステップＳ５１において、全てのテーブル番号＃ｊに保持している書き換えＮＧフラグ［＃ｊ］の確認が完了していない場合（ステップＳ５１の“ＮＯ”）には、ステップＳ５２において、テーブル番号＃ｊに対応するデータ記憶部１４に格納されているデータを外部記憶部２０に退避するためのＤＭＡ退避アクセス指示を、必要に応じてメモリ制御部１３に出力する。
【０１２５】
このように、タスク制御部１２の第２の動作におけるデータ記憶部１４に格納されているデータを退避する処理では、退避閾値を設定し、設定した退避閾値より前のタスクを実行した処理演算部１１に対応したデータ記憶部１４を、格納しているデータを退避する対象から除外する。これにより、演算装置１０では、タスクキュー１２１に格納されたタスクの数が少ないなど、タスクを実行するまでの待ち時間が少ない場合に、データ記憶部１４が空きの状態になるのを意図的に待つことができる。また、演算装置１０では、退避閾値を設定することにより、処理演算部１１に出力される順番が後の方のタスクを実行する際に使用する、演算処理に必要なデータを格納しているデータ記憶部１４のみを、データを退避する対象のデータ記憶部１４にすることができる。このことにより、演算装置１０では、データ記憶部１４に格納しているデータを不用意に退避することによって、外部記憶部２０へのアクセス回数が増加してしまうことを回避し、外部記憶部２０へのアクセス回数を低減することができる。
【０１２６】
上記に述べたとおり、本発明を実施するための形態によれば、複数の処理演算部（プロセッサ）が連携して処理を行う演算装置において、それぞれの処理演算部がタスクを実行する際に使用する外部記憶部のデータが重複している場合には、外部記憶部にアクセスせずに、データ記憶部同士でデータをコピーする。そして、データ記憶部同士で重複していないデータのみを外部記憶部から取得して格納する。これにより、本発明を実施するための形態では、それぞれの処理演算部が、割り当てられたタスクを実行する際に外部記憶部にアクセスする回数を減らすことができる演算装置を提供することができる。
【０１２７】
また、本発明を実施するための形態によれば、外部記憶部から取得したデータを格納するデータ記憶部に、演算処理に必要な前のデータが格納されている場合には、このデータを、事前に外部記憶部に退避しておく。このとき、本発明を実施するための形態では、退避閾値を設定し、タスクキューに格納されたそれぞれのタスクの内、出力される順番が近いタスクを実行する処理演算部に対応したデータ記憶部を、格納しているデータを退避する対象から除外する。これにより、本発明を実施するための形態では、データ記憶部に格納しているデータを不用意に退避することを回避し、外部記憶部にアクセスする回数を減らすことができる演算装置を提供することができる。
【０１２８】
これらにより、本発明を実施するための形態では、演算装置を備えたシステムにおける消費電力を低減することができ、演算装置を備えたシステムの性能を向上させることができる。
【０１２９】
なお、本実施形態においては、データ転送情報テーブル１２２をタスク制御部１２内に備えた構成について説明したが、演算装置１０内でデータ転送情報テーブル１２２を備える位置は、本発明を実施するための形態の位置に限定されるものではない。例えば、データ転送情報テーブル１２２をメモリ制御部１３内に備えた構成であってもよい。また、例えば、データ転送情報テーブル１２２を演算装置１０内の別の構成要素として備えた構成であってもよい。この場合でも、タスク制御部１２は、データ転送情報テーブル１２２に保持している情報を参照しながら、それぞれのアクセス指示をメモリ制御部１３に出力する。
【０１３０】
また、本実施形態においては、外部記憶部２０が演算装置１０に接続されている構成について説明したが、演算装置１０と外部記憶部２０との接続は、本発明を実施するための形態のように、演算装置１０と外部記憶部２０とが直接接続されている構成に限定されるものではない。例えば、外部記憶部２０が、ネットワーク上に構成されたサーバであり、演算装置１０とサーバとが、ネットワークを介して接続される構成であっても、同様に、本発明の考え方を適用することができる。この場合、例えば、メモリ制御部１３は、通信部を介して、サーバからのデータの読み出し（受信）や、サーバへのデータの書き込み（送信）を行うと考えることができる。
【０１３１】
また、本実施形態においては、タスク制御部１２がアクセス指示をメモリ制御部１３に出力するタイミングに関して説明していないが、このタイミングは、例えば、タスク制御部１２が事前にわかっている、それぞれのタスクを実行する際の実行時間（サイクル数）などの情報に基づいて、外部記憶部２０やデータ記憶部１４にアクセスするタイミングを決定してもよい。また、例えば、タスクキュー１２１に格納されたタスクに含まれるプログラムのサイズや、データ量またはループ回数などのパラメータに基づいて、タスクを実行する際の実行時間（サイクル数）などを算出し、算出した実行時間（サイクル数）に基づいて、外部記憶部２０やデータ記憶部１４にアクセスするタイミングを決定する構成であってもよい。
【０１３２】
また、本実施形態においては、タスク制御部１２が、タスクキュー１２１に格納されたそれぞれのタスクを出力する順番を制御する方法に関して説明していないが、このタスクを出力する順番は、例えば、タスクキュー１２１に格納されたそれぞれのタスクの優先度に基づいて、タスクを出力する順番を制御する構成であってもよい。
【０１３３】
また、本実施形態においては、それぞれの処理演算部１１の処理機能に関して説明していないが、例えば、演算装置１０を、撮像装置などの撮像システム内に備えている場合には、それぞれの処理演算部１１は、撮像システムにおける画像処理を行う処理機能を持っていると考えることができる。
【０１３４】
また、本実施形態においては、演算装置１０に備えたそれぞれの処理演算部１１が持っている処理機能について説明していない。しかし、例えば、演算装置１０が、撮像装置などの撮像システムに備えた画像処理装置である場合には、それぞれの処理演算部１１の処理機能は、ＹＣ変換処理、ノイズ除去処理、歪み補正処理、キズ補正処理、画像圧縮処理など、撮像システムにおける様々な画像処理を行うことができる処理機能であると考えられる。また、例えば、演算装置１０が、撮像装置などの撮像システムに備えた画像処理装置内の画像認識部など、撮像システムにおける画像処理の一部の処理部である場合には、それぞれの処理演算部１１の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための処理機能であると考えられる。
【０１３５】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【０１３６】
１０・・・演算装置
１１，１１ａ，１１ｂ，１１ｎ・・・処理演算部
１２・・・タスク制御部
１２１・・・タスクキュー（タスク制御部）
１２２・・・データ転送情報テーブル
１２３・・・ＤＭＡリクエスト発生部（タスク制御部）
１２３１・・・使用アドレス選択部（タスク制御部）
１２３２・・・格納済みアドレス選択部（タスク制御部）
１２３３・・・アドレス比較部（タスク制御部）
１２３４・・・データ量比較部（タスク制御部）
１２３５・・・ＤＭＡリクエストコマンド生成部（タスク制御部）
１３・・・メモリ制御部
１４，１４ａ，１４ｂ，１４ｎ・・・データ記憶部
２０・・・外部記憶部
【図１】
2014225089.tif 000003
【図２】
2014225089.tif 000004
【図３】
2014225089.tif 000005
【図４】
2014225089.tif 000006
【図５】
2014225089.tif 000007
【図６】
2014225089.tif 000008
【図７】
2014225089.tif 000009
【図８】
2014225089.tif 000010