JP6161395B2 - 演算装置 - Google Patents

演算装置 Download PDF

Info

Publication number
JP6161395B2
JP6161395B2 JP2013103260A JP2013103260A JP6161395B2 JP 6161395 B2 JP6161395 B2 JP 6161395B2 JP 2013103260 A JP2013103260 A JP 2013103260A JP 2013103260 A JP2013103260 A JP 2013103260A JP 6161395 B2 JP6161395 B2 JP 6161395B2
Authority
JP
Japan
Prior art keywords
task
storage unit
data
stored
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2013103260A
Other languages
English (en)
Other versions
JP2014225088A (ja
Inventor
伊藤 大
大 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Olympus Corp
Original Assignee
Olympus Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Olympus Corp filed Critical Olympus Corp
Priority to JP2013103260A priority Critical patent/JP6161395B2/ja
Publication of JP2014225088A publication Critical patent/JP2014225088A/ja
Application granted granted Critical
Publication of JP6161395B2 publication Critical patent/JP6161395B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、演算装置に関する。
従来から、プログラムに応じた演算処理を実行するプロセッサを備えた演算装置がある。このような演算装置では、プロセッサが実行するそれぞれの演算処理を複数のタスクに分割し、プロセッサは、分割したそれぞれのタスクを順次実行することによって演算処理を行う。演算装置における演算処理では、外部のメモリにアクセスしながら実行する、すなわち、演算処理で使用するデータを、外部のメモリから読み出したり、外部のメモリに書き込んだりしながら実行する演算処理もある。しかし、外部のメモリへのアクセスには多くの時間を要してしまうため、外部のメモリへのアクセスを伴う演算処理は、内部のみで行うことができる演算処理に比べて多くの時間を要する。このため、従来の演算装置では、演算装置の処理速度を向上させるため、演算処理に使用するデータを予め外部のメモリから読み出して、外部のメモリよりも高速なメモリ、いわゆる、キャッシュメモリに一時記憶しておく構成のものが多く見受けられる。
しかしながら、キャッシュメモリを備えた演算装置であっても、演算装置の回路規模の観点から、演算処理に必要な全てのデータを保持しておくことができるだけの記憶容量を持ったキャッシュメモリを備えることはできない。このため、演算処理に必要なデータがキャッシュメモリに事前に保持されていない場合、いわゆる、キャッシュミスの状態である場合には、やはり外部のメモリに対するアクセスが発生し、演算装置の処理速度を向上させることができない場合もある。
このことから、プロセッサがメモリからデータを読み出すロード命令およびメモリにデータを書き込むストア命令を含む演算命令(以下、「ロード・ストア命令」という)を抽出し、抽出したロード・ストア命令によってアクセスするメモリのアドレスに対するプリフェッチ命令を、データを使用する演算命令よりも早いタイミングで実行することによって、キャッシュミスを防止するようにした演算装置がある(特許文献1参照)。
また、プロセッサを複数備え、それぞれのプロセッサが、例えば、画像処理などの一連の処理を分担して並列に演算処理を行う、いわゆる、分散並列処理型の演算装置がある。分散並列処理型の演算装置では、要求された演算命令を複数個のプロセッサが分担して行うことによって、演算処理に要する時間の短縮を図ることができる。
このような分散並列処理型の演算装置において、プロセッサ同士でのそれぞれのタスクの処理の待ち合わせやラインバッファ処理など、データを一定時間保持する必要がある処理、あるいは演算装置に搭載しているプロセッサの数よりも多くのタスクからなる処理を行うために、特許文献1で開示された、キャッシュミスを防止する技術を適用することも考えられる。
特開2011−76314号公報
しかしながら、演算装置に備えたプロセッサによる実際の演算処理においては、プリフェッチ命令が発行されてから、プリフェッチ命令によって事前に取得したデータを実際に使用する演算命令が実行されるまでのサイクル数が、プログラムの組み方によって変動する。そして、プリフェッチ命令の発行からデータを使用するまでのサイクル数を制御することはできない。このため、特許文献1で開示された技術を適用した演算装置であっても、演算命令に応じてデータを使用するときまでに、必要なデータの準備が必ず完了していることが保証されるものではない。
例えば、データを使用する今回の演算命令の1サイクル前にプリフェッチ命令を実行したとしても、プリフェッチ命令に応じたデータを取得するための外部のメモリのアクセスに30サイクルを要し、前の演算命令の実行が1サイクルで完了してしまうような場合には、プリフェッチ命令によって事前にデータを準備しておくことができず、29サイクルの間、今回の演算命令の実行が待たされることになる。この演算命令の実行が待たされている時間、つまり、キャッシュミスの状態になっている時間は、プロセッサが演算処理を行うことができず、演算装置の処理速度が低下する要因となってしまう。
このように、特許文献1で開示された技術を適用した演算装置であっても、常にキャッシュメモリへのデータのプリフェッチが間に合うということを保証することができず、必ずしもキャッシュミスを防止することができるとはいえない、という問題がある。
本発明は、上記の課題認識に基づいてなされたものであり、複数のプロセッサが連携して処理を行う演算装置において、それぞれのプロセッサが実際にデータを使用するタイミングまでに、必要なデータを準備しておくことにより、キャッシュミスを防止することができる演算装置を提供することを目的としている。
上記の課題を解決するため、本発明の演算装置は、入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納するデータ記憶部と、前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか1つの前記処理演算部に出力すると共に、前記タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を前記処理演算部が実行する際のタイミングに基づいて、前記外部記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、を備え、前記タスク制御部は、前記タスクキューに格納された前記タスクを前記処理演算部に出力する毎に、該タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を、それぞれの前記処理演算部が実行するタイミングを確認し、該確認したタイミングに基づいて、それぞれの前記タスクに対応した前記外部記憶部へのアクセスが、それぞれの前記タスクを前記処理演算部に出力するタイミングまでに完了するように、それぞれの前記タスクに対応する前記アクセス指示を出力し、このとき前記タスク制御部は、前記タスクキューに格納されたそれぞれの前記タスク内の、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクよりも前に該タスクキューに格納された、前記外部記憶部に格納されているデータを使用しない演算処理を行う前記タスクである先行タスクに応じた演算処理を実行するそれぞれの実行時間に基づいて、該対象タスクに応じた演算処理を前記処理演算部が実行するタイミングを確認し、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力する、ことを特徴とする。
本発明によれば、複数のプロセッサが連携して処理を行う演算装置において、それぞれのプロセッサが実際にデータを使用するタイミングまでに、必要なデータを準備しておくことにより、キャッシュミスを防止することができる演算装置を提供することができるという効果が得られる。
本発明の実施形態における演算装置の概略構成の一例を示したブロック図である。 本実施形態の演算装置に備えたタスク制御部の概略構成、およびタスク制御部に格納されたタスクの一例を説明する図である。 本実施形態の演算装置に備えたタスク制御部による第1の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。 本実施形態の演算装置に備えたタスク制御部による第1の動作における処理手順を示したフローチャートである。 本実施形態の演算装置に備えたタスク制御部による第2の動作における処理手順を示したフローチャートである。 本実施形態の演算装置に備えたタスク制御部の概略構成、およびタスク制御部に格納されたタスクの別の一例を説明する図である。 本実施形態の演算装置に備えたタスク制御部による第3の動作における処理手順を示したフローチャートである。 本実施形態の演算装置に備えたタスク制御部による第3の動作におけるタスクの分配とデータ転送とのタイミングを示したタイミングチャートである。 本実施形態の演算装置に備えたタスク制御部による第3の動作において処理演算部に出力するタスクの順番を入れ替える場合の一例を説明する図である。 本実施形態の演算装置に備えたタスク制御部による第3の動作において処理演算部に出力するタスクの順番を入れ替える場合の一例を説明する図である。 本実施形態の演算装置に備えたタスク制御部による第3の動作において処理演算部に出力するタスクの順番を入れ替える場合の一例を説明する図である。 本実施形態の演算装置に備えたタスク制御部による第4の動作における処理手順を示したフローチャートである。 本実施形態の演算装置に備えたタスク制御部が、データ記憶部に格納されているデータを退避する処理手順を示したフローチャートである。
以下、本発明の実施形態について、図面を参照して説明する。図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[の値を全て合算した、合計値MIN−SUMを算出する(ステップS2。続いて、DMAリクエスト発生部122は、合計値MIN−SUMに基づいて、現在がデータ転送開始タイミングであるか否かを判定する(ステップS2)。DMAリクエスト発生部122におけるステップS2の判定は、例えば、データ転送開始タイミングの値が合計値MIN−SUMの値よりも小さく(データ転送開始タイミング<合計値MIN−SUM)、かつ、データ転送開始タイミングの値が1つの処理演算部11が実行する先行タスクの実行サイクル数の平均値よりも大きい(データ転送開始タイミング>合計値MIN−SUM−合計値MIN−SUM/先行タスク数NUM−OF−MIN)場合に、現在がデータ転送開始タイミングである(ステップS2の“YES”)と判定する。
例えば、図2に示したタスクキュー121の状態では、先行タスク数NUM−OF−MIN=2、実行サイクル数の最小値MIN[0]=70、実行サイクル数の最小値MIN[1]=70であり、合計値MIN−SUM=140である。従って、DMAリクエスト発生部122は、データ転送開始タイミングが、140>データ転送開始タイミング>140−140/2(=70)の条件を満足するときに、現在がデータ転送開始タイミングであると判定する。
ステップS2において、現在がデータ転送開始タイミングでないと判定された場合(ステップS2の“NO”)には、ステップS2においてタスク番号iに1を加えて、タスクキュー121に格納された次のタスク(図2に示した10番目の“#9”のタスク1)に対する確認を行う。
また、ステップS2において、現在がデータ転送開始タイミングであると判定された場合(ステップS2の“YES”)には、DMAリクエスト発生部122は、9番目の“#8”のタスク0が使用するデータを外部記憶部20から事前に取得するためのDMAリードアクセス指示を、メモリ制御部13に出力する(ステップS2)。これにより、メモリ制御部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に示したフローチャートのステップS2とステップS2との間に、データ記憶部14に演算処理に必要な前のデータが格納されているか否かを確認するステップを設け、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていないと確認された場合に、ステップS2の処理を実行することが望ましい。なお、このステップにおいて、データ記憶部14に演算処理に必要な前のデータが格納されていると確認された場合には、データ記憶部14に現在格納されているデータを外部記憶部20にデータを退避してから(書き込んでから)、ステップS2の処理を実行することになる。このため、ステップS2において判定されるデータ転送開始タイミングは、例えば、外部記憶部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の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための処理機能であると考えられる。
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
10・・・演算装置
11,11a,11b,11n・・・処理演算部
12・・・タスク制御部
121・・・タスクキュー(タスク制御部)
122・・・DMAリクエスト発生部(タスク制御部)
13・・・メモリ制御部
14,14a,14b,14n・・・データ記憶部
20・・・外部記憶部

Claims (5)

  1. 入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、
    それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納するデータ記憶部と、
    前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、
    前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか1つの前記処理演算部に出力すると共に、前記タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を前記処理演算部が実行する際のタイミングに基づいて、前記外部記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、
    を備え、
    前記タスク制御部は、
    前記タスクキューに格納された前記タスクを前記処理演算部に出力する毎に、該タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を、それぞれの前記処理演算部が実行するタイミングを確認し、該確認したタイミングに基づいて、それぞれの前記タスクに対応した前記外部記憶部へのアクセスが、それぞれの前記タスクを前記処理演算部に出力するタイミングまでに完了するように、それぞれの前記タスクに対応する前記アクセス指示を出力し、
    このとき前記タスク制御部は、
    前記タスクキューに格納されたそれぞれの前記タスク内の、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクよりも前に該タスクキューに格納された、前記外部記憶部に格納されているデータを使用しない演算処理を行う前記タスクである先行タスクに応じた演算処理を実行するそれぞれの実行時間に基づいて、該対象タスクに応じた演算処理を前記処理演算部が実行するタイミングを確認し、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力する、
    ことを特徴とする演算装置。
  2. 前記タスク制御部は、
    前記先行タスクのそれぞれを前記処理演算部のそれぞれに出力することを想定し、それぞれの前記処理演算部が入力された前記先行タスクに応じた演算処理を実行した際の最小の実行時間を算出し、該算出した最小の実行時間と、前記メモリ制御部が前記外部記憶部にアクセスしてデータの転送を行う際の転送時間とに基づいて、前記対象タスクに対応した前記アクセス指示を出力する、
    ことを特徴とする請求項1に記載の演算装置。
  3. 前記タスク制御部は、
    前記対象タスクに対応した前記アクセス指示に応じて前記外部記憶部に格納されているデータを読み出して格納する前記データ記憶部に、前記タスクに応じた演算処理で使用するデータが格納されている場合には、該データ記憶部に格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を、前記対象タスクに対応した前記アクセス指示を出力するよりも前に出力し、
    このとき前記タスク制御部は、
    前記タスクキューに格納されたそれぞれの前記タスク内の、前記データ記憶部に格納されているデータを使用した演算処理を行う前記タスクの優先度に基づいて、最も優先度が低い前記タスクが使用するデータを格納している前記データ記憶部から、格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を出力する、
    ことを特徴とする請求項1または請求項2に記載の演算装置。
  4. 入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、
    それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納するデータ記憶部と、
    前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、
    前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか1つの前記処理演算部に出力すると共に、前記タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を前記処理演算部が実行する際のタイミングに基づいて、前記外部記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、
    を備え、
    前記タスク制御部は、
    前記タスクキューに格納された前記タスクを前記処理演算部に出力する毎に、該タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を、それぞれの前記処理演算部が実行するタイミングを確認し、該確認したタイミングに基づいて、それぞれの前記タスクに対応した前記外部記憶部へのアクセスが、それぞれの前記タスクを前記処理演算部に出力するタイミングまでに完了するように、それぞれの前記タスクに対応する前記アクセス指示を出力し、
    このとき前記タスク制御部は、
    前記タスクキューに格納されたそれぞれの前記タスクの中から、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクを選択し、該対象タスクを前記処理演算部に出力する順番に基づいて、該対象タスクに応じた演算処理を前記処理演算部が実行するタイミングを確認し、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力し、
    このとき前記タスク制御部は、
    前記タスクキューに格納された前記対象タスクを前記処理演算部に出力する順番が、前記処理演算部の数と、前記タスクキューに格納されることが想定されるそれぞれの前記タスクにおいて、該タスクに応じた演算処理を実行する際の処理時間が最小である実行時間と、前記メモリ制御部が前記外部記憶部にアクセスしてデータの転送を行う際の転送時間とに基づいて予め定めたデータ転送開始順番になったときに、該対象タスクに対応した前記アクセス指示を出力し、
    このとき前記タスク制御部は、
    前記対象タスクに対応した前記アクセス指示に応じて前記外部記憶部に格納されているデータを読み出して格納する前記データ記憶部に、前記タスクに応じた演算処理で使用するデータが格納されている場合には、該データ記憶部に格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を、前記対象タスクに対応した前記アクセス指示を出力するよりも前に出力し、
    このとき前記タスク制御部は、
    前記タスクキューに格納されたそれぞれの前記タスク内の、前記データ記憶部に格納されているデータを使用した演算処理を行う前記タスクの優先度に基づいて、最も優先度が低い前記タスクが使用するデータを格納している前記データ記憶部から、格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を出力する、
    ことを特徴とする演算装置。
  5. 入力されたタスクに応じた演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記タスクとして出力する複数の処理演算部と、
    それぞれの前記処理演算部が前記タスクに応じた演算処理を実行する際に使用するデータ、または前記タスクに応じた演算処理を実行した結果のデータを格納するデータ記憶部と、
    前記タスクに応じた演算処理を実行する際に使用するデータを接続された外部記憶部から読み出して前記データ記憶部に格納、または前記データ記憶部に格納されている前記タスクに応じた演算処理を実行した結果のデータを接続された前記外部記憶部に書き込むメモリ制御部と、
    前記タスクを順次格納するタスクキューを具備し、該タスクキューに格納された前記タスクを、複数の前記処理演算部の内、いずれか1つの前記処理演算部に出力すると共に、前記タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を前記処理演算部が実行する際のタイミングに基づいて、前記外部記憶部へのアクセスを前記メモリ制御部に指示するアクセス指示を出力するタスク制御部と、
    を備え、
    前記タスク制御部は、
    前記タスクキューに格納された前記タスクを前記処理演算部に出力する毎に、該タスクキューに格納されたそれぞれの前記タスクに応じた演算処理を、それぞれの前記処理演算部が実行するタイミングを確認し、該確認したタイミングに基づいて、それぞれの前記タスクに対応した前記外部記憶部へのアクセスが、それぞれの前記タスクを前記処理演算部に出力するタイミングまでに完了するように、それぞれの前記タスクに対応する前記アクセス指示を出力
    このとき前記タスク制御部は、
    前記タスクキューに格納されたそれぞれの前記タスク内の、前記外部記憶部に格納されているデータを使用した演算処理を行う前記タスクである対象タスクの優先度に基づいて、前記対象タスクを前記処理演算部に出力する順番を並び替え、最も優先度が高い前記対象タスクから、該対象タスクで使用するデータを前記外部記憶部から読み出すための前記外部記憶部へのアクセスが、該対象タスクを前記処理演算部に出力するタイミングまでに完了するように、該対象タスクに対応した前記アクセス指示を出力し、
    このとき前記タスク制御部は、
    前記対象タスクに対応した前記アクセス指示に応じて前記外部記憶部に格納されているデータを読み出して格納する前記データ記憶部に、前記タスクに応じた演算処理で使用するデータが格納されている場合には、該データ記憶部に格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を、前記対象タスクに対応した前記アクセス指示を出力するよりも前に出力し、
    このとき前記タスク制御部は、
    前記タスクキューに格納されたそれぞれの前記タスク内の、前記データ記憶部に格納されているデータを使用した演算処理を行う前記タスクの優先度に基づいて、最も優先度が低い前記タスクが使用するデータを格納している前記データ記憶部から、格納されているデータを前記外部記憶部に書き込んで退避するための前記アクセス指示を出力する、
    ことを特徴とする演算装置。
JP2013103260A 2013-05-15 2013-05-15 演算装置 Expired - Fee Related JP6161395B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013103260A JP6161395B2 (ja) 2013-05-15 2013-05-15 演算装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013103260A JP6161395B2 (ja) 2013-05-15 2013-05-15 演算装置

Publications (2)

Publication Number Publication Date
JP2014225088A JP2014225088A (ja) 2014-12-04
JP6161395B2 true JP6161395B2 (ja) 2017-07-12

Family

ID=52123736

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013103260A Expired - Fee Related JP6161395B2 (ja) 2013-05-15 2013-05-15 演算装置

Country Status (1)

Country Link
JP (1) JP6161395B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7347537B2 (ja) * 2019-12-05 2023-09-20 日本電信電話株式会社 分散処理システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1444584A1 (en) * 2001-10-19 2004-08-11 Telefonaktiebolaget LM Ericsson (publ) Data prefecthing in a computer system
JP2005284749A (ja) * 2004-03-30 2005-10-13 Kyushu Univ 並列処理コンピュータ
JP2007047968A (ja) * 2005-08-09 2007-02-22 Olympus Corp マルチプロセッサシステム
JP2008015668A (ja) * 2006-07-04 2008-01-24 Toyota Infotechnology Center Co Ltd タスク管理装置
JP5224498B2 (ja) * 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム

Also Published As

Publication number Publication date
JP2014225088A (ja) 2014-12-04

Similar Documents

Publication Publication Date Title
CN109375951B (zh) 一种用于执行全连接层神经网络正向运算的装置和方法
JP4801725B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP4963018B2 (ja) スケジューリング方法およびスケジューリング装置
JP5431003B2 (ja) リコンフィギュラブル回路及びリコンフィギュラブル回路システム
JP4416694B2 (ja) データ転送調停装置およびデータ転送調停方法
TW201209709A (en) Multiprocessor system-on-a-chip for machine vision algorithms
JP5730126B2 (ja) データ供給装置、キャッシュ装置、データ供給方法、キャッシュ方法およびプログラム
JP2007334564A (ja) ユニファイドメモリシステム
JP6551751B2 (ja) マルチプロセッサ装置
US20130145373A1 (en) Information processing apparatus, information processing method, and storage medium
JP5993267B2 (ja) 画像処理装置
CN112204523A (zh) 多内核波前调度程序
JP6161395B2 (ja) 演算装置
WO2012120573A1 (ja) デッドロック回避方法、デッドロック回避機構
JP6004463B2 (ja) 記憶装置及びその制御方法
KR102205899B1 (ko) 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치
JP5108690B2 (ja) Dma装置及びdma転送方法
EP2801913A1 (en) Memory control apparatus and method
CN102405466B (zh) 存储控制装置及其控制方法
CN114780460B (zh) 一种dma控制器和方法
JP5332721B2 (ja) メモリアクセス制御回路、メモリアクセス制御方法および電子機器
JP5630798B1 (ja) プロセッサーおよび方法
JP2011034214A (ja) メモリ制御装置
CN108027727A (zh) 内存访问指令的调度方法、装置及计算机系统
JP5623187B2 (ja) マルチノードにわたるデータの送受信をバリア同期無しで行う並列計算処理

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160120

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160816

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160927

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20161118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170411

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170530

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20170531

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170606

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170613

R151 Written notification of patent or utility model registration

Ref document number: 6161395

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees