以下に、本発明を実施するための形態について図面を用いて説明する。ただし、以下に述べる実施形態には、本発明を実施するために技術的に好ましい限定がされているが、発明の範囲を以下に限定するものではない。なお、以下の実施形態の説明に用いる全図においては、特に理由がない限り、同様箇所には同一符号を付す。また、以下の実施形態において、同様の構成・動作に関しては繰り返しの説明を省略する場合がある。また、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号の向きを限定するものではない。
(第1の実施形態)
まず。本発明の第1の実施形態に係るデータ処理装置について図面を参照しながら説明する。以下においては、本実施形態のデータ処理装置をFPGA(Field-Programmable Gate Array)に実装する例について説明する。なお、本実施形態のデータ処理装置は、専用回路(ASIC:Application Specific Integrated Circuit)として実現してもよい。以下においては、本実施形態のデータ処理装置が行列を処理対象とする場合について説明する。ただし、本実施形態のデータ処理装置の処理対象のデータは、行列に限らず、他の形態のデータでもよい。例えば、本実施形態のデータ処理装置は、ベクトルデータを処理対象とすることができる。
(構成)
図1は、本実施形態のデータ処理装置10の構成を示すブロック図である。データ処理装置10は、制御部11、複数の演算ユニット13-0~n、第1の環状バス17、および第2の環状バス18を備える(nは自然数)。
制御部11は、演算ユニット13が実行する演算やデータ(パケット)の転送を制御する。制御部11は、外部メモリ100に接続される。制御部11は、外部メモリからデータを取得する。なお、制御部11は、外部メモリ100ではなく、ネットワークを経由して上位システム(図示しない)や入力装置(図示しない)などに接続されていてもよい。制御部11は、転送制御部110および全体制御部120を有する。
転送制御部110は、第1の環状バス17を介して直列に接続された複数の転送エレメント130の先頭および末尾のエレメントに接続される。転送制御部110は、第1の環状バス17において転送される転送パケットの入出力を制御する。
全体制御部120は、第2の環状バス18を介して直列に接続された複数の処理エレメント150の先頭および末尾のエレメントに接続される。全体制御部120は、第2の環状バス18において転送される演算命令の入出力を制御する。
複数の演算ユニット13は、第1の環状バス17および第2の環状バス18によって直列に接続される。演算ユニット13は、第1の環状バス17を介して転送制御部110から転送される転送パケットに含まれるコマンドに応じて、演算ユニット13に格納されたデータを読み出したり、演算を実行したり、演算結果を出力したりする。演算ユニット13は、転送エレメント130、内部メモリ140、および処理エレメント150を有する。
演算ユニット13を構成する転送エレメント130は、第1の環状バス17を介して隣接する転送エレメント130と接続される。ただし、先頭の転送エレメント130-1の入力と、末尾の転送エレメント130-nの出力とは、第1の環状バス17を介して転送制御部110に接続される。
転送エレメント130は、前段から転送パケットを受信する。演算ユニット13-0の転送エレメント130には、第1の環状バス17を介して、転送制御部110から転送パケットが入力される。演算ユニット13-1~nの転送エレメント130には、第1の環状バス17を介して、前段の転送エレメント130から転送パケットが入力される。
転送エレメント130は、転送パケットの解析結果に応じて、転送パケットのペイロードデータを自身に対応する内部メモリ140に書き込んだり、内部メモリ140からデータを読み出したり、演算を実行したりする。また、転送エレメント130は、転送パケットの解析結果に応じて、転送パケットに含まれるコマンドを内部メモリ140に送信する。
転送エレメント130は、転送パケットの解析結果が書き込みコマンドであった場合、その書き込みコマンドに応じて、転送パケットのペイロードデータを自身に対応する内部メモリ140に書き込む。転送エレメント130は、転送パケットの解析結果が読み出しコマンドであった場合、その読み出しコマンドに応じて、内部メモリ140からデータを読み出す。転送エレメント130は、転送パケットの解析結果が演算コマンドであった場合、その演算コマンドに応じた演算を実行する。
例えば、転送制御部110が、全ての転送エレメント130に関して、先行する転送パケットのコマンドに応じて読み出された読み出しデータと、後続する転送パケットのペイロードデータとの総和を取るリダクション演算の実行を制御するものとする。この場合、それぞれの転送エレメント130は、先行する転送パケットの演算コマンドに応じて自身の内部メモリ140からデータを読み出す。そして、それぞれの転送エレメント130は、先行する転送パケットの演算コマンドに応じて読み出した読み出しデータと、後続する転送パケットのペイロードデータとを加算した演算結果データで転送パケット中のペイロードデータを置換する。
転送エレメント130は、第1の環状バス17を介して後段に転送パケットを転送する。演算ユニット13-0~n-1の転送エレメント130は、第1の環状バス17を介して次段の転送エレメント130に出力データを出力する。最後段の演算ユニット13-nの転送エレメント130は、第1の環状バス17を介して転送制御部110に転送パケットを転送する。
演算ユニット13を構成する処理エレメント150は、第2の環状バス18を介して隣接する処理エレメント150と接続される。ただし、先頭の処理エレメント150-1の入力と、末尾の処理エレメント150-nの出力とは、第2の環状バス18を介して全体制御部120に接続される。
処理エレメント150は、第2の環状バス18を介して全体制御部120から受信する演算命令に従って、自身に対応する内部メモリ140からデータを読み出す。処理エレメント150は、読み出したデータを用いた演算の演算結果を内部メモリ140に書き込む。
演算ユニット13を構成する内部メモリ140は、転送エレメント130と処理エレメント150との間に接続される。内部メモリ140には、転送エレメント130および処理エレメント150の演算に用いられるデータが格納される。また、内部メモリ140には、処理エレメント150の演算結果が格納される。例えば、内部メモリは、SRAM(Static Random Access Memory)によって実現される。
転送制御部110は、第1の環状バス17を介して転送エレメント130に接続される。図1の例では、隣接する転送エレメント130同士が第1の環状バス17を介して直列に接続される。そのため、転送制御部110は、第1の環状バス17を介して、先頭の演算ユニット13-0の転送エレメント130の入力と、末尾の演算ユニット13-nの転送エレメント130の出力とに接続される。
また、転送制御部110は、外部メモリ100に接続される。転送制御部110には、外部メモリ100からデータが入力される。転送制御部110は、第1の環状バス17を通じて、入力されるデータに基づいた転送パケットを転送エレメント130に送信する。また、転送制御部110は、第1の環状バス17を通じて、転送エレメント130から転送パケットを取得する。転送制御部110は、第1の環状バス17を通じて転送される転送パケットに基づいたデータを外部メモリ100へ書き出す。
全体制御部120(全体制御手段とも呼ぶ)は、第2の環状バス18を介して処理エレメント150に接続される。図1の例では、隣接する処理エレメント150同士が第2の環状バス18を介して直列に接続される。そのため、全体制御部120は、第2の環状バス18を介して、演算ユニット13-0の処理エレメント15の入力と、演算ユニット13-nの処理エレメント15の出力とに接続される。
また、全体制御部120は、外部メモリ100に接続される。全体制御部には、外部メモリ100から演算命令が入力される。転送制御部110は、入力される演算命令に基づいた演算命令を処理エレメント150に送信する。なお、転送制御部110と全体制御部120とは、互いに接続される。
第1の環状バス17は、一次元的な環状のバスである。第1の環状バス17は、複数の転送エレメント130を直列に接続する。また、第1の環状バス17は、転送制御部110に接続される。
第2の環状バス18は、第1の環状バス17とは独立した一次元的な環状のバスである。第2の環状バス18は、複数の処理エレメント150を直列に接続する。また、第2の環状バス18は、全体制御部120に接続される。
以上が、データ処理装置10の構成に関する概略的な説明である。以下においては、データ処理装置10の構成要素について個別に説明する。
〔転送エレメント〕
図2は、転送エレメント130の構成を示すブロック図である。なお、図2においては隣接し合う転送エレメント130同士が接続するように図示しているが、演算ユニット13-0の転送エレメント130の入力と、演算ユニット13-nの転送エレメント130の出力とは転送制御部110に接続される。図2の上部に示すstg1~6は、転送パケットが転送されていく段階(ステージ)を示す指標である。
図2のように、転送エレメント130は、入力データレジスタ131、バッファ回路132、解析回路133、メモリインタフェース回路134、加算回路135、選択回路136、および出力データレジスタ137を有する。なお、低速の動作周波数で動作させる場合などでは、入力データレジスタ131および出力データレジスタ137を省略できる。
入力データレジスタ131(入力回路とも呼ぶ)には、第1の環状バス17を介して、前段から転送パケットが入力される。なお、演算ユニット13-0の入力データレジスタ131には、第1の環状バス17を介して、転送制御部110から転送パケットが入力される。また、演算ユニット13-1~nの入力データレジスタ131には、第1の環状バス17を介して、前段の演算ユニット13-0~n-1から転送パケットが入力される。
入力データレジスタ131に入力される転送パケットは、バッファ回路132および解析回路133に向けて出力される。また、入力データレジスタ131に入力される転送パケットのペイロードデータは、データdin1として加算回路135に向けて出力される。
バッファ回路132には、入力データレジスタ131から転送パケットが入力される。バッファ回路132は、入力された転送パケットを何段階か保持してから選択回路136に出力する。バッファ回路132は、内部メモリ140のアクセスレイテンシに合わせて設定されるバッファである。図2の例では、バッファ回路132は、第1バッファレジスタ132-1、第2バッファレジスタ132-2、および第3バッファレジスタ132-3が直列に接続された構成を有する。なお、バッファ回路132に含まれるレジスタの数は、3個に限定されない。例えば、バッファ回路132は、内部メモリ140のアクセスレイテンシに合わせて複数段のシフトレジスタとして構成してもよい。
解析回路133(デコーダとも呼ぶ)には、入力データレジスタ131から転送パケットが入力される。解析回路133は、転送パケットを解析し、解析結果に応じた内部メモリ140へのアクセス指示をメモリインタフェース回路134に出力する。例えば、解析回路133は、転送パケットに含まれるコマンドに応じて、アクセス先のアドレスaddrやコマンドをメモリインタフェース回路134に出力する。
解析回路133は、前段の転送エレメント130から受信した転送パケットの識別フィールドが自身の識別子と一致した場合、そのコマンドが自身へのコマンドであると判断する。そして、解析回路133は、コマンドフィールドが内部メモリ140からの読み出しコマンドであれば、アドレスフィールドのアドレスと読み出し指示をメモリインタフェース回路134に送信する。また、解析回路133は、コマンドフィールドが内部メモリ140への書き込みコマンドであれば、データフィールドの値とアドレスフィールドのアドレスと書き込み指示をメモリインタフェース回路134に送信する。
メモリインタフェース回路134には、解析回路133から内部メモリ140へのアクセス指示が入力される。メモリインタフェース回路134は、解析回路133から読み出し指示を受信すると、受信した読み出し指示に従って内部メモリ140からデータを読み出し、読み出したデータを加算回路135および選択回路136に出力する。また、メモリインタフェース回路134は、解析回路133から書き込み指示を受信すると、受信した書き込み指示に従って内部メモリ140にデータを書き込む。図2の例では、メモリインタフェース回路134は、第1メモリインタフェースレジスタ134-1および第2メモリインタフェースレジスタ134-2を含む。なお、低速の動作周波数で動作させる場合などにおいては、第1メモリインタフェースレジスタ134-1および第2メモリインタフェースレジスタ134-2を省略できる。
第1メモリインタフェースレジスタ134-1は、解析回路133のアクセス指示に応じて内部メモリ140にアクセスする。例えば、第1メモリインタフェースレジスタ134-1は、解析回路133の読み出し指示や書き込み指示に応じて、アクセス先のアドレスやコマンドを内部メモリ140に出力する。
第2メモリインタフェースレジスタ134-2には、解析回路133のアクセス指示に応じて内部メモリ140から読み出しデータrdを読み出す。第2メモリインタフェースレジスタ134-2は、加算回路135および選択回路136に読み出しデータrdを出力する。
加算回路135には、入力データレジスタ131から転送データのペイロードデータ(データdin1)が入力され、メモリインタフェース回路134の第2メモリインタフェースレジスタ134-2から読み出しデータrd(データdin2)が入力される。加算回路135は、データdin1とデータdin2とを加算し、その演算結果データdoutを選択回路136に出力する。なお、データdin1を第1のデータ、データdin2を第2のデータとも呼ぶ。
選択回路136には、バッファ回路132からの転送パケットと、メモリインタフェース回路134からの読み出しデータrdと、加算回路135からの演算結果データdoutとが入力される。選択回路136は、転送パケットの解析結果のコマンドに応じて、転送パケットのペイロードデータを選択する。選択回路136は、3入力1出力のセレクタである。選択回路136は、選択したペイロードデータを含む転送パケットを出力データレジスタ137に出力する。
選択回路136は、書き込みコマンドの場合、転送パケットのペイロードデータをそのまま選択する。選択回路136は、読み出しコマンドの場合、内部メモリ140から読み出される読み出しデータrdを選択し、転送パケットのペイロードデータをその読み出しデータrdに置換する。選択回路136は、演算コマンドの場合、加算回路135の演算結果データdoutを選択し、転送パケットのペイロードデータをその演算結果データdoutに置換する。
出力データレジスタ137には、選択回路136から転送パケットが入力される。出力データレジスタ137は、選択回路136から入力される転送パケットを次段の転送エレメント130に転送する。
ここで、転送エレメント130で取り扱われる転送パケットについて図面を参照しながら説明する。
図3は、転送パケットの構成の一例を示す概念図である。例えば、転送パケットp1は、全ての演算ユニット13の内部メモリ140のアドレス0x00からデータを読み出すことを示す。例えば、転送パケットp4は、全ての演算ユニット13の内部メモリ140のアドレス0x03からデータを読み出し、先行する転送パケット(例えばp1)に基づいて読み出されたデータと、転送パケットp4のペイロードデータとを加算することを示す。
図4は、第1の環状バス17で転送される転送パケットの構成例(転送パケット170)を示す概念図である。図4の転送パケット170は、4bitのコマンドフィールド(cmd)、8bitの識別フィールド(peid)、8bitのアドレスフィールド(addr)、32bitのデータフィールド(data)を含む。なお、転送パケットを構成する各フィールドのビット数はここで挙げた限りではなく、任意に設定できる。
コマンドフィールド(cmd)は、外部メモリからの読み込み、読み出すデータに対する演算の内容、外部メモリへの書き込み等のようにデータ転送の種類を表す。識別フィールド(peid)は、どの演算ユニット13の内部メモリ140にアクセスするのかを表す。アドレスフィールド(addr)は、内部メモリ140のどのアドレスにアクセスするかを表す。データフィールド(data)は、ペイロードデータを保持する。
例えば、転送パケットp1のコマンドRD(点線枠)に応じて、内部メモリ140のアドレス0x00に格納されるデータ(破線枠)を読み出す指示が発せられる。同様に、転送パケットp2のコマンドRDに応じて、内部メモリ140のアドレス0x01に格納されるデータを読み出す指示が発せられる。同様に、転送パケットp3のコマンドRDに応じて、内部メモリ140のアドレス0x02に格納されるデータを読み出す指示が発せられる。
そして、転送パケットp4のコマンドRD_ADD(一点鎖線枠)に応じて、内部メモリ140のアドレス0x03に格納されるデータ(二点鎖線枠)を読み出す指示が発せられる。このとき、転送パケットp4のコマンドRD_ADD(一点鎖線枠)に応じて、転送パケットp1のコマンドRDに応じて読み出された読み出しデータrdと、転送パケットp4のペイロードデータ(二点鎖線枠)とが加算される。内部メモリ140のアクセスレイテンシがあるため、転送パケットp1のコマンドRD(破線枠)に応じて内部メモリ140のアドレス0x00から読み出されたデータ(破線枠)と、転送パケットp4のペイロードデータ(二点鎖線枠)とが加算される。そして、転送パケットp4のペイロードデータは、演算結果データdoutと置換される。
このように、加算される二つのデータのうち、内部メモリ140から読み出された読み出しデータrdのコマンドの供給元の転送パケットを第1の転送パケットと呼ぶ。そして、第1の転送パケットのコマンドに応じて読み出された読み出しデータrd(din2)と加算されるペイロードデータ(din1)を含む転送パケットを第2の転送パケットと呼ぶ。
図5は、メモリインタフェース回路134で生じるレイテンシを含めた内部メモリ140のアクセスレイテンシと、加算回路135のレイテンシとがともに3の場合における、第1の転送パケットと第2の転送パケットとの対応関係をまとめた表である。例えば、転送パケットp1が第1の転送パケットの場合、転送パケットp4が第2の転送パケットに相当する。同様に、転送パケットp2~6が第1の転送パケットの場合、転送パケットp5~9が第2の転送パケットに相当する。すなわち、転送パケットp4~6は、転送パケットp1~3にとっては第2の転送パケットに相当し、転送パケットp7~9にとっては第1の転送パケットに相当する。なお、内部メモリ140のアクセスレイテンシと、加算回路135のレイテンシとが異なる場合は、図5とは異なる対応関係になる。
〔内部メモリ〕
図6は、内部メモリ140の構成を示すブロック図である。なお、図6に示すブロック間の矢印は、書き込み指示やアドレス、読み出しデータ、書き込みデータの流れを概念的に示すものであって、それらの向きを限定するものではない。
内部メモリ140は、デュアルポートメモリ141を含む。デュアルポートメモリ141は、ポート142(以下、ポートAと記載する)とポート143(以下、ポートBと記載する)の2系統のアクセスポートを備える。ポートA(第1のポートとも呼ぶ)には、転送エレメント130からの信号線が接続される。一方、ポートB(第2のポートとも呼ぶ)には、処理エレメント150からの信号線が接続される。それらの信号線は、書き込みおよび読み出しのためのアドレスや、書き込み指示、書き込みデータ、読み出しデータなどを伝送するための配線である。
図7は、内部メモリ140に格納されるデータの一例を示す概念図である。例えば、演算ユニット13-0の内部メモリ140のアドレス0x000にはa0が格納される。また、演算ユニット13-1の内部メモリ140のアドレス0x000にはa1が格納される。すなわち、演算ユニット13-0~7のそれぞれの内部メモリ140のアドレス0x000には、a0、a1、・・・、a7が格納される。例えば、演算対象の行列の1列目がa0、a1、・・・、a7の場合、演算ユニット13-0~7のそれぞれの内部メモリ140の同じアドレス0x000に、a0、a1、・・・、a7を格納する。
図8は、演算対象の行列を構成する成分を内部メモリ140の記憶領域に振り分けて記憶させる例である。例えば、行列A(m行k列)と積算させる行列B(k行n列)を記憶領域Bに記憶させておく(m、k、nは整数)。そして、行列Aと行列Bとの行列積C(m行n列)を記憶領域Cに記憶させる。
〔転送制御部〕
図9は、転送制御部110の構成を示すブロック図である。図9のように、転送制御部110は、指示レジスタ111、状態レジスタ112、制御回路113、およびメモリ114を含む。指示レジスタ111および状態レジスタ112は、全体制御部120に接続される。制御回路113は、外部メモリ100に接続される。また、制御回路113は、演算ユニット13-0の転送エレメント130の入力と、演算ユニット13-nの転送エレメント130の出力とに接続される。
指示レジスタ111は、外部メモリアドレスを示すeaddr、内部メモリアドレスを示すiaddr、転送パケットの数を示すnum、転送方向を示すdir、実行するコマンドを示すcmdといった複数のレジスタフィールドを含む。
例えば、dir==0の場合、内部メモリ140のiaddr番地から外部メモリ100のeaddr番地へのnum個のデータの転送を表す。また、dir==1の場合、外部メモリのeaddr番地から内部メモリのiaddr番地へのnum個のデータの転送を表す。
例えば、cmd=00の場合は内部メモリ140から外部メモリ100へのデータ転送、cmd=01の場合は外部メモリ00から内部メモリ140へのデータ転送、cmd=10の場合はリダクション演算を表す。
状態レジスタ112には、第1の環状バス17において、転送パケットを転送中であるのか、転送パケットの転送が完了したのかを示す値が保持される。
制御回路113は、外部メモリ100に接続される。また、制御回路113は、指示レジスタ111、状態レジスタ112、およびメモリ114に接続される。制御回路113は、外部メモリ100からデータを入力する。制御回路113は、第1の環状バス17を通じて、入力したデータに関する転送パケットを演算ユニット13-1の転送エレメント130に送信する。また、制御回路113は、第1の環状バス17を介して、受信される転送パケットに関するデータを外部メモリ100へ書き出す。また、制御回路113は、必要に応じて、外部メモリ100からのデータや転送パケットに含まれるデータをメモリ114に保持する。
制御回路113は、指示レジスタ111に有効な転送指示が含まれていれば、転送パケットの転送を開始する。また、制御回路113は、状態レジスタ112に関して、転送中か転送完了かを示す値を随時反映し、反映した結果を全体制御部120に通知する。すなわち、制御回路113は、指示レジスタ111に有効な転送指示が含まれている際に、外部メモリ100と転送エレメント12との間でデータを転送して状態レジスタ112の値を更新する。
例えば、制御回路113は、自身のivkdma命令に応じて指示レジスタ111に値を書き込む。また、例えば、制御回路113は、自身のchkdma命令に応じて状態レジスタ112の値を読み込む。
メモリ114は、制御回路113に接続される。メモリ114には、制御回路113によって、外部メモリ100からのデータや転送パケットに含まれるデータが保持される。
〔処理エレメント〕
図10は、処理エレメント150の構成を示すブロックである。なお、図6においては、処理エレメント150の前段および後段の処理エレメント150が互いに接続するように図示している。実際には、演算ユニット13-0の処理エレメント150の入力と、演算ユニット13-nの処理エレメント150の出力とは全体制御部120に接続される。
図10のように、処理エレメント150は、環状バスレジスタ151、命令デコーダ152、メモリインタフェース部153、および演算器154を有する。
環状バスレジスタ151は、第2の環状バス18に接続される。環状バスレジスタ151は、第2の環状バス18を構成する要素の一部である。環状バスレジスタ151は、命令デコーダ152に接続される。環状バスレジスタ151は、単一のレジスタとしてもよいし、複数段から成るシフトレジスタとしてもよい。環状バスレジスタ151は、第2の環状バス18に接続される前段の処理エレメント150から演算命令を受信し、受け取った演算命令を次段の処理エレメント150に送信する。環状バスレジスタ151は、受信した演算命令を命令デコーダ152に送る。
命令デコーダ152は、環状バスレジスタ151に接続される。また、命令デコーダ152は、メモリインタフェース部153と演算器154とに接続される。命令デコーダ152は、環状バスレジスタ151から受信される演算命令を解析し、演算命令に応じた制御信号を生成する。命令デコーダ152は、生成した制御信号をメモリインタフェース部153と演算器154とに出力する。
メモリインタフェース部153は、命令デコーダ152と演算器154とに接続される。また、メモリインタフェース部153は、内部メモリ140に接続される。メモリインタフェース部153は、命令デコーダ152からの制御信号に応じて、内部メモリ140からデータを読み出し、読み出したデータを演算器154に送信する。また、メモリインタフェース部153は、演算器154の演算結果を出力データとして内部メモリ140に書き込む。
演算器154は、命令デコーダ152とメモリインタフェース部153とに接続される。演算器154は、命令デコーダ152からの制御信号に応じて、メモリインタフェース部153から受信したデータを用いた演算を実行する。演算器154は、演算結果をメモリインタフェース部153に送信する。例えば、演算器154は、FPGA(Field-Programmable Gate Array)のDSP(Digital Signal Processor)によって実現できる。
なお、処理エレメント150の機能は、上述に限定されるものではない。例えば、演算器154内にレジスタファイルを具備し、レジスタファイル中のレジスタに対する演算を実行できるようにしてもよい。
図11は、処理エレメント150が取り扱う演算命令の構成例(演算命令180)を示す概念図である。例えば、演算命令180は、8ビットのオペコードOpc、第1ソースオペランドRs、第2ソースオペランドRt、およびデスティネーションオペランドRd、32ビットの即値オペランドImmのフィールドによって構成される。なお、処理エレメント150が取り扱う演算命令の構成は、図11の構成に限定されない。
〔全体制御部〕
図12は、全体制御部120の構成を示すブロック図である。図12のように、全体制御部120は、プログラムカウンタ121、コマンドメモリ122、コマンドデコーダ123、および全体制御部データパス124を有する。コマンドデコーダ123は、演算ユニット13-1の処理エレメント150に接続される。全体制御部データパス124は、演算ユニット13-nの処理エレメント150に接続される。全体制御部120は、一般的な命令セットプロセッサと同様に動作する。
プログラムカウンタ121は、次に実行すべきコマンドを示す値を保存する。コマンドの内容が分岐命令以外の場合、プログラムカウンタ121は、自動的にインクリメントされる。一方、コマンドの内容が分岐命令の場合、プログラムカウンタ121の値は当該分岐命令に従って変更される。
コマンドメモリ122には、命令を実行する主体を示すフラグが含まれるコマンドが格納される。コマンドメモリ122は、プログラムカウンタ121の値に応じたコマンドをコマンドデコーダ123に出力する。
コマンドデコーダ123は、コマンドメモリ122から出力されたコマンドを解析し、解析結果に応じた制御信号を生成する。コマンドデコーダ123は、コマンドを全体制御部120の命令として解釈すると、生成した制御信号を全体制御部データパス124に出力する。一方、コマンドデコーダ123は、コマンドを処理エレメント150の命令として解釈すると、生成した制御信号を演算ユニット13-0の処理エレメント150に出力する。
全体制御部データパス124は、コマンドデコーダ123によって生成された制御信号に従い、コマンドの内容に応じた動作を行う。例えば、全体制御部データパス124は、加算や分岐などの動作を行う。なお、全体制御部データパス124は、レジスタファイル等の一般的な命令セットプロセッサに具備する要素を含んでいてもよい。また、コマンドの内容が分岐命令の場合、全体制御部データパス124は、プログラムカウンタ121の値を当該分岐命令に従って変更する。
図13は、コマンドメモリ122に格納されるコマンド220の構成例を示す概念図である。図13の例のコマンド220には、1ビットのフラグPfと、64ビットの命令Instとが含まれる。フラグPfが0の場合は、全体制御部120の命令として解釈される。一方、フラグPfが1の場合は、処理エレメント150の命令として解釈される。そして、フラグPfが1のコマンド220の場合、コマンドデコーダ123は、演算ユニット13-0の処理エレメント150に命令Instを送信する。なお、コマンドメモリ122に格納されるコマンド220の構成は、図13の構成に限定されない。
また、演算ユニット13-nの処理エレメント150から受信される演算命令は、全体制御部データパス124のレジスタ等(図示しない)に格納される。なお、演算命令の格納先は、レジスタファイル中の特定のレジスタでもよいし、専用レジスタであってもよい。また、全体制御部データパス124は、演算命令の格納するための専用のFIFO(First In First Out)を備えてもよいし、レジスタファイル中の格納するレジスタを演算命令中のフラグ等で別途指定できるようにしてもよい。
図14は、全体制御部120の命令210の構成例を示す概念図である。例えば、全体制御部120の命令210は、オペコードOpc、第1ソースオペランドRs、第2ソースオペランドRt、デスティネーションオペランドRd、即値オペランドImmのフィールドを含む。図14の例では、オペコードOpcが8ビット、第1ソースオペランドRsが5ビット、第2ソースオペランドRtが5ビット、デスティネーションオペランドRdが5ビット、即値オペランドImmが32ビットである。なお、全体制御部120の命令210の構成は、図14の構成に限定されない。例えば、図13に示す64ビット幅のInstに、図14の全体制御部120の命令210を左詰めで格納してもよい。
以上が、データ処理装置10の構成要素についての説明である。なお、以上のデータ処理装置10の構成は一例であって、本実施形態のデータ処理装置10の機能を発揮できさえすれば、種々の構成を追加・削除してもよい。
(動作)
次に、転送エレメント130の動作について図面を参照しながら説明する。図15は、8つの演算ユニット13-0~7を構成する例である。図15の例では、演算ユニット13-0~7のそれぞれに、転送エレメント130-0~7(以下、TE0~7)および内部メモリ140-0~7(以下、ME0~7)が含まれる。図16は、図15の構成において、TE0~7が実行するリダクション演算について説明するための概念図である。ただし、TEは転送エレメント(Transfer Element)を示し、MEはメモリ(Memory)を示す。また、後述するPEは処理エレメント(Processing Element)を示す。
まず、転送制御部110から一段目のTE0に第1の転送パケットが転送される。TE0に転送されてきた転送パケットは、TE0の解析回路133およびバッファ回路132に送信される。また、第1の転送パケットのペイロードデータ「0」は、加算回路135に入力される。この段階では、第1の転送パケットのペイロードデータ「0」と加算されるデータが加算回路135に入力されていない。そのため、加算回路135に入力されたデータ「0」は、第1の転送パケットが選択回路136に入力されるタイミングに合わせて選択回路136にそのまま出力される。第1の転送パケットがバッファ回路132から選択回路136に出力されると、加算回路135から出力されるデータ「0」と転送パケットのデータ「0」とが同じであるため、第1の転送パケットはそのまま二段目のTE1に転送される。
TE0は、解析回路133を用いて第1の転送パケットを解析し、その第1の転送パケットに含まれるコマンドおよびアドレスに従って、内部メモリME0のアドレス0x00からデータ「a0」を読み出す。TE0は、内部メモリME0から読み出したデータ「a0」を加算回路135に送る。
第1の転送パケットに基づいて読み出されたデータ「a0」が加算回路135に入力された段階では、第2の転送パケットに含まれるデータ「0」が加算回路135に入力される。加算回路135は、データ「0」とデータ「a0」とを加算し、演算結果データ「a0」を選択回路136に出力する。
選択回路136に演算結果データ「a0」が入力される段階で、第2の転送パケットが選択回路136に入力される。選択回路136は、第2の転送パケットのペイロードデータ「0」を演算結果データ「a0」で置換する。その結果、第2の転送パケットのペイロードデータは「a0」になる。TE0は、ペイロードデータとしてデータ「a0」を含む第2の転送パケットをTE1に転送する。
以上の処理がTE1~7で繰り返され、第1の転送パケットに基づいて内部メモリME0~7の同じアドレスaddrから読み出されたデータの値は、第2の転送パケットの値に順次加算されていく。その結果、TE7から出力される第2の転送パケットの値は、内部メモリME0~7の同じアドレスaddrの値の総和「a0+a1+a2+・・・+a7」になる。
図17は、図16を用いて説明した加算演算を内部メモリME0~7について行った結果をまとめたものである。図17のように、転送制御部110から送信される転送パケットによって、内部メモリ0~7のアドレスaddr0x000~7のそれぞれに格納された値の総和がリダクション演算結果として得られる。
ここで、図面を参照しながら、転送エレメント130の動作について説明する。なお、以下の転送エレメント130の動作は一例であって、転送エレメント130の動作を限定するものではない。
〔TE0〕
図18は、TE0において、転送パケットp1~6が転送されていく様子をまとめた表である。図18の例では、サイクル1~11について説明し、サイクル12以降については説明を省略する。
まず、サイクル1において、転送パケットp1が入力データレジスタ131に入力される(stg1)。転送パケットp1は、転送パケットp4にとっての第1の転送パケットである。
次に、サイクル2において、転送パケットp1は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp1のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp2が入力データレジスタ131に入力される(stg1)。転送パケットp2は、転送パケットp5にとっての第1の転送パケットである。
次に、サイクル3において、転送パケットp1が第2バッファレジスタ132-2に入力されるとともに、転送パケットp1に基づいたアドレス0x00が内部メモリME0に入力される(stg3)。また、転送パケットp2は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp2のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp3が入力データレジスタ131に入力される(stg1)。転送パケットp3は、転送パケットp6にとっての第1の転送パケットである。
次に、サイクル4において、転送パケットp1が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x00から読み出しデータ「a0」が読み出される(stg4)。また、転送パケットp2が第2バッファレジスタ132-2に入力されるとともに、転送パケットp2に基づいたアドレス0x01が内部メモリME0に入力される(stg3)。また、転送パケットp3は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp3のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp4が入力データレジスタ131に入力される(stg1)。転送パケットp4は、転送パケットp1にとっての第2の転送パケットである。
次に、サイクル5において、転送パケットp1が選択回路136に入力されるとともに、読み出しデータ「a0」が加算回路135に入力される。また、転送パケットp2が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x01から読み出しデータ「b0」が読み出される(stg4)。また、転送パケットp3が第2バッファレジスタ132-2に入力されるとともに、転送パケットp3に基づいたアドレス0x02が内部メモリME0に入力される(stg3)。また、転送パケットp4は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp4のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp5が入力データレジスタ131に入力される(stg1)。転送パケットp5は、転送パケットp2にとっての第2の転送パケットである。
次に、サイクル6において、転送パケットp1が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp1のペイロードデータは「0」のままである。また、転送パケットp2が選択回路136に入力されるとともに、読み出しデータ「b0」が加算回路135に入力される。また、転送パケットp3が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x02から読み出しデータ「c0」が読み出される(stg4)。また、転送パケットp4が第2バッファレジスタ132-2に入力されるとともに、転送パケットp4に基づいたアドレス0x03が内部メモリME0に入力される(stg3)。また、転送パケットp5は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp5のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp6が入力データレジスタ131に入力される(stg1)。転送パケットp6は、転送パケットp2にとっての第2の転送パケットである。
次に、サイクル7において、転送パケットp2が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp2のペイロードデータは「0」のままである。また、転送パケットp3が選択回路136に入力されるとともに、読み出しデータ「c0」が加算回路135に入力される。また、転送パケットp4が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x03から読み出しデータ「d0」が読み出される(stg4)。また、転送パケットp5が第2バッファレジスタ132-2に入力されるとともに、転送パケットp5に基づいたアドレス0x04が内部メモリME0に入力される(stg3)。また、転送パケットp6は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp6のペイロードデータ「0」が加算回路135に入力される。
次に、サイクル8において、転送パケットp3が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp3のペイロードデータは「0」のままである。また、転送パケットp4が選択回路136に入力されるとともに、読み出しデータ「d0」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「a0」が入力され、転送パケットp4のペイロードデータが「a0」に置換される。また、転送パケットp5が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x04から読み出しデータ「e0」が読み出される(stg4)。また、転送パケットp6が第2バッファレジスタ132-2に入力されるとともに、転送パケットp6に基づいたアドレス0x05が内部メモリME0に入力される(stg3)。
次に、サイクル9において、転送パケットp4が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp4のペイロードデータは「a0」に置換されている。また、転送パケットp5が選択回路136に入力されるとともに、読み出しデータ「e0」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「b0」が入力され、転送パケットp5のペイロードデータが「b0」に置換される。また、転送パケットp6が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレスaddr(0x05)から読み出しデータ「f0」が読み出される(stg4)。
次に、サイクル10において、転送パケットp5が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp5のペイロードデータは「b0」に置換されている。また、転送パケットp6が選択回路136に入力されるとともに、読み出しデータ「f0」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「c0」が入力され、転送パケットp6のペイロードデータの値が「c0」に置換される。
次に、サイクル11において、転送パケットp6が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp6のペイロードデータは「c0」に置換されている。また、転送パケットp6が選択回路136に入力されるとともに、読み出しデータ「f0」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「d0」が入力される。
以上が、TE0のサイクル1~11における動作についての説明である。次に、TE1の動作について説明する。
〔TE1〕
図19は、TE1において、転送パケットp1~6が転送されていく様子をまとめた表である。図19の例では、サイクル6~16について説明し、サイクル1~5およびサイクル17以降については説明を省略する。
まず、サイクル6において、転送パケットp1が入力データレジスタ131に入力される(stg1)。
次に、サイクル7において、転送パケットp1は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp1のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp2が入力データレジスタ131に入力される(stg1)。
次に、サイクル8において、転送パケットp1が第2バッファレジスタ132-2に入力されるとともに、転送パケットp1に基づいたアドレス0x00が内部メモリME0に入力される(stg3)。また、転送パケットp2は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp2のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp3が入力データレジスタ131に入力される(stg1)。
次に、サイクル9において、転送パケットp1が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x00から読み出しデータ「a1」が読み出される(stg4)。また、転送パケットp2が第2バッファレジスタ132-2に入力されるとともに、転送パケットp2に基づいたアドレス0x01が内部メモリME0に入力される(stg3)。また、転送パケットp3は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp3のペイロードデータ「0」が加算回路135に入力される。また、転送パケットp4が入力データレジスタ131に入力される(stg1)。
次に、サイクル10において、転送パケットp1が選択回路136に入力されるとともに、読み出しデータ「a1」が加算回路135に入力される。また、転送パケットp2が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x01から読み出しデータ「b1」が読み出される(stg4)。また、転送パケットp3が第2バッファレジスタ132-2に入力されるとともに、転送パケットp3に基づいたアドレス0x02が内部メモリME0に入力される(stg3)。また、転送パケットp4は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp4のペイロードデータ「a0」が加算回路135に入力される。また、転送パケットp5が入力データレジスタ131に入力される(stg1)。
次に、サイクル11において、転送パケットp1が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp1のペイロードデータは「0」のままである。また、転送パケットp2が選択回路136に入力されるとともに、読み出しデータ「b1」が加算回路135に入力される。また、転送パケットp3が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x02から読み出しデータ「c1」が読み出される(stg4)。また、転送パケットp4が第2バッファレジスタ132-2に入力されるとともに、転送パケットp4に基づいたアドレス0x03が内部メモリME0に入力される(stg3)。また、転送パケットp5は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp5のペイロードデータ「b0」が加算回路135に入力される。また、転送パケットp6が入力データレジスタ131に入力される(stg1)。
次に、サイクル12において、転送パケットp2が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp2のペイロードデータは「0」のままである。また、転送パケットp3が選択回路136に入力されるとともに、読み出しデータ「c1」が加算回路135に入力される。また、転送パケットp4が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x03から読み出しデータ「d1」が読み出される(stg4)。また、転送パケットp5が第2バッファレジスタ132-2に入力されるとともに、転送パケットp5に基づいたアドレス0x04が内部メモリME0に入力される(stg3)。また、転送パケットp6は、第1バッファレジスタ132-1に入力されるとともに、解析回路133に入力される(stg2)。このとき、転送パケットp6のペイロードデータ「c0」が加算回路135に入力される。
次に、サイクル13において、転送パケットp3が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp3のペイロードデータは「0」のままである。また、転送パケットp4が選択回路136に入力されるとともに、読み出しデータ「d1」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「a0+a1」が入力され、転送パケットp4のペイロードデータが「a0+a1」に置換される。また、転送パケットp5が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x04から読み出しデータ「e1」が読み出される(stg4)。また、転送パケットp6が第2バッファレジスタ132-2に入力されるとともに、転送パケットp6に基づいたアドレス0x05が内部メモリME0に入力される(stg3)。このとき、転送パケットp5のペイロードデータ「d0」が加算回路135に入力される。
次に、サイクル14において、転送パケットp4が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp4のペイロードデータは「a0+a1」に置換されている。また、転送パケットp5が選択回路136に入力されるとともに、読み出しデータ「e1」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「b0+b1」が入力され、転送パケットp5のペイロードデータが「b0+b1」に置換される。また、転送パケットp6が第3バッファレジスタ132-3に入力されるとともに、内部メモリME0のアドレス0x05から読み出しデータ「f1」が読み出される(stg4)。
次に、サイクル15において、転送パケットp5が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp5のペイロードデータは「b0+b1」に置換されている。また、転送パケットp6が選択回路136に入力されるとともに、読み出しデータ「f1」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「c0+c1」が入力され、転送パケットp6のペイロードデータが「c0+c1」に置換される。
次に、サイクル16において、転送パケットp6が出力データレジスタ137に入力され、次段のTE1に転送される。転送パケットp6のペイロードデータは「c0+c1」に置換されている。また、転送パケットp6が選択回路136に入力されるとともに、読み出しデータ「f1」が加算回路135に入力される。このとき、選択回路136には、加算回路135の演算結果データ「d0+d1」が入力される。
以上が、TE1のサイクル6~16における動作についての説明である。TE2~7の動作についての説明は省略する。
〔パイプライン動作〕
次に、データ処理装置10が転送エレメント130と処理エレメント150とを連動させてパイプライン処理を実行する例について説明する。
図20は、処理エレメント150が行列積を繰り返す例について説明するための概念図である。なお、処理エレメント150が行列積を実行する手順の詳細については説明を省略する。
図20において、まず、転送エレメント130(TE)は、行列A1および行列B1の要素を読み出す指示(read_A1およびread_B1)を処理エレメント150(PE)に出力する。処理エレメント150(PE)は、内部メモリ140から行列A1および行列B1の要素を読み出すと、行列A1と行列B1との行列積を演算し、演算結果である行列C1を生成する。処理エレメント150(PE)は、演算結果である行列C1の要素を内部メモリ14に書き込む。転送エレメント130(TE)は、内部メモリ14から行列C1の要素を読み出し、読み出したデータを第1の環状バス17経由で転送制御部110に向けて送信する。
同様に、転送エレメント130(TE)は、行列A2および行列B2の要素を読み出す指示(read_A2およびread_B2)を処理エレメント150(PE)に出力する。処理エレメント150(PE)は、内部メモリ140から行列A2および行列B2の要素を読み出すと、行列A2と行列B2との行列積を演算し、演算結果である行列C2を生成する。処理エレメント150(PE)は、演算結果である行列C2の要素を内部メモリ14に書き込む。転送エレメント130(TE)は、内部メモリ14から行列C2の要素を読み出し、読み出したデータを第1の環状バス17経由で転送制御部110に向けて送信する。行列A3および行列B3以降については説明を省略する。
図21は、処理エレメント150が行列積を繰り返し、転送エレメント130が処理エレメントの演算結果の総和を取るリダクション演算を実行する例について説明するための概念図である。
図21において、まず、転送エレメント130(TE)は、行列A1および行列B1の要素を読み出す指示(read_A1およびread_B1)を処理エレメント150(PE)に出力する。処理エレメント150(PE)は、内部メモリ140から行列A1および行列B1の要素を読み出すと、行列A1と行列B1との行列積を演算し、演算結果である行列C1を生成する。処理エレメント150(PE)は、演算結果である行列C1の要素を内部メモリ14に書き込む。転送エレメント130(TE)は、内部メモリ14から行列C1の要素を読み出し、行列C1の同じ列を構成する要素の総和を取るリダクション演算(Reduction_add)を実行する。転送エレメント130(TE)は、リダクション演算(Reduction_add)を実行しながら、第1の環状バス17経由で転送制御部110に向けて転送パケットを転送する。
同様に、転送エレメント130(TE)は、行列A2および行列B2の要素を読み出す指示(read_A2およびread_B2)を処理エレメント150(PE)に出力する。処理エレメント150(PE)は、内部メモリ140から行列A2および行列B2の要素を読み出すと、行列A2と行列B2との行列積を演算し、演算結果である行列C2を生成する。処理エレメント150(PE)は、演算結果である行列C1の要素を内部メモリ14に書き込む。転送エレメント130(TE)は、内部メモリ14から行列C2の要素を読み出し、行列C2の同じ列を構成する要素の総和を取るリダクション演算(Reduction_add)を実行する。転送エレメント130(TE)は、リダクション演算(Reduction_add)を実行しながら、第1の環状バス17経由で転送制御部110に向けて転送パケットを転送する。行列A3および行列B3以降については説明を省略する。
本実施形態においては、転送エレメント130(TE)がパケットを転送するタイミングと、処理エレメント150(PE)が演算を実行するタイミングとを連動させる。そのため、本実施形態によれば、転送エレメント130(TE)と処理エレメント150(PE)とが動作する際の互いの待機時間を低減できる。
以上が、本実施形態のデータ処理装置の動作に関する説明である。なお、上記の例においては、小さいサイズの行列を例に挙げて説明してきたが、演算ユニットの数を増やすことによって、より大きなサイズの行列に対しても同様の演算を実行できる。いずれの場合においても、本実施形態のデータ処理装置を構成する処理エレメントに含まれる演算器は、毎サイクル連続して演算を行うことができる。また、本実施形態のデータ処理装置によれば、処理エレメントが一連の処理を実行している間に、転送エレメントがリダクション演算などを実行することができるため、無駄な待機時間を低減できる。すなわち、本実施形態によれば、パイプライン処理の実行中に遊休状態のエレメントが増えることがない。
以上のように、本実施形態のデータ処理装置は、第1の環状バス、複数の転送エレメント、転送制御部、および内部メモリを備える。複数の転送エレメントは、第1の環状バスによって直列に接続される。転送制御部は、第1の環状バスを介して少なくとも二つの転送エレメントに接続され、第1の環状バスにおいて転送される転送パケットの入出力を制御する。複数の内部メモリは、複数の転送エレメントのいずれかに接続される。
転送エレメントは、第1の転送パケットに後続して転送されてきた第2の転送パケットに演算コマンドが含まれる場合、以下のように動作する。まず、転送エレメントは、前段第2の転送パケットのペイロードデータである第1のデータと、先行する第1の転送パケットに基づいて内部メモリから読み出された第2のデータとを用いた演算を実行する。そして、転送エレメントは、第1のデータと第2のデータの演算結果データで第2の転送パケットのペイロードデータを置換し、ペイロードデータが置換された第2の転送パケットを後続に転送する。
例えば、転送エレメントは、第1の転送パケットに含まれるコマンドおよびアドレスに従って、内部メモリのアドレスに格納されるデータを第2のデータとして読み出す。転送エレメントは、読み出した第2のデータと、第2の転送パケットのペイロードデータである第1のデータとを用いて演算を実行する。
例えば、複数の転送エレメントは、第1の転送パケットに含まれるコマンドおよびアドレスに従って、複数の内部メモリの同じアドレスに格納されるデータを第2のデータとして読み出す。複数の転送エレメントは、読み出した第2のデータと、第2の転送パケットのペイロードデータである第1のデータとを加算した値で第2の転送パケットに含まれるペイロードデータを置換するリダクション演算を実行する。
例えば、本実施形態のデータ処理装置は、入力データレジスタ、バッファレジスタ、デコーダ、第1メモリインタフェースレジスタ、第2メモリインタフェースレジスタ、加算器、選択器、および出力データレジスタを有する。入力データレジスタには、第1の環状バスを介して転送パケットが入力される。バッファレジスタは、少なくとも一つのレジスタで構成される。バッファレジスタには、入力データレジスタから転送パケットが入力される。デコーダには、入力データレジスタから転送パケットが入力される。デコーダは、転送パケットを解析し、解析した結果に基づいて内部メモリへのアクセス指示を出力する。第1メモリインタフェースレジスタは、デコーダからアクセス指示が入力される。第1メモリインタフェースレジスタは、デコーダによって解析されたアクセス指示に基づいて内部メモリにアクセスする。第2メモリインタフェースレジスタは、アクセス指示に基づいて内部メモリから第2のデータを読み出す。加算器は、第2メモリインタフェースレジスタが読み出した第1のデータと、アクセス指示の供給元の転送パケットに後続する転送パケットのペイロードデータである第1のデータとを加算し、加算結果を演算結果データとして出力する。選択器には、バッファレジスタを経由した転送パケットと、内部メモリから読み出された第2のデータと、加算器からの演算結果データとが入力される。選択器は、アクセス指示の供給元の転送パケットに後続する転送パケットのペイロードデータを演算結果データで置換する。出力データレジスタは、転送パケットを出力する。
例えば、本実施形態のデータ処理装置は、第2の環状バス、複数の処理エレメント、および全体制御部を備える。第2の環状バスは、第1の環状バスとは独立したバスである。複数の処理エレメントは、第2の環状バスによって直列に接続される。全体制御部は、第2の環状バスを介して少なくとも二つの処理エレメントに接続され、第2の環状バスにおいて転送される演算命令の入出力を制御する。
本実施形態のデータ処理装置によれば、第1の環状バスと第2の環状バスとを独立して制御することができる。そのため、演算処理と転送処理とを並行して実行することができる。すなわち、本実施形態のデータ処理装置は、ある行列積演算を行うのと同時に、次段の行列積演算のための行列の転送や、前段の行列積演算の出力である行列の転送を行うことができる。さらに、本実施形態のデータ処理装置は、行列積演算の出力の総和を取るようなリダクション演算を実行できる。
また、本実施形態のデータ処理装置に含まれる全体制御部および処理エレメントの内部は、パイプラインプロセッサとして実現してもよい。全体制御部および処理エレメントの内部をパイプラインプロセッサとして実現すれば、演算のスループットを高めることができる。この場合、例えばMACI命令ではrsとrdに同時にアクセスする必要があるなど、内部メモリへ同時アクセスする必要があるため、内部メモリを複数バンク構成として同時アクセスを可能にしてもよい。
以上の本実施形態によれば、データの転送と演算とを同時に実行することにより、演算器の稼働率を維持できるという第1の効果が得られる。また、本実施形態によれば、処理エレメントの演算内容を演算命令として環状バスを通じて送信することにより、クロック信号およびリセット信号のための信号線を除いて長い配線がなくなるため、動作周波数を向上できるという第2の効果が得られる。すなわち、本実施形態によれば、データ転送のためのバスとデータ処理のためのバスとを独立させることによって、行列積やベクトルの内積を効率的に演算できる。
さらに、本実施形態によれば、処理エレメントの演算結果を転送エレメントにおいてリダクション演算することができる。そのため、本実施形態によれば、処理エレメントにおける演算に並行させて、転送エレメントにおいて処理エレメントの演算結果のリダクション演算を実行でき、転送エレメントの待機時間を低減できる。
すなわち、本実施形態によれば、複数の処理を並列して継続的かつ効率的に実行できる。
本実施形態のデータ処理装置は、大規模な行列演算を行うビッグデータの解析処理等のアプリケーションに対し、FPGA(Field-Programmable Gate Array)上で柔軟かつ効率的に実行する用途に適用できる。また、本実施形態のデータ処理装置は、FPGA上のみならず、専用回路(ASIC:Application Specific Integrated Circuit)としても実現可能である。
(第2の実施形態)
次に、本発明の第2の実施形態のデータ処理装置について図面を参照しながら説明する。本実施形態のデータ処理装置は、第1の環状バスが複線化された構成を有する。本実施形態においては、第1の環状バスを複線化し、転送エレメントの処理を効率化する例について説明し、第2環状バスや処理エレメントについては説明を省略する。
図22は、本実施形態のデータ処理装置の構成の一部を示すブロック図である。図22には、転送制御部21、転送エレメント群23、内部メモリ群24、および第1の環状バス27を図示している。転送エレメント群23は、複数の転送エレメント230-1~nによって構成される(nは自然数)。内部メモリ群24は、複数の内部メモリ240-0~4n+3によって構成される。第1の環状バス27は、複数の環状バス270-0~3によって構成される。なお、転送エレメント230、内部メモリ240、および環状バス270の数については、図22の例に限定されず、任意に設定できる。また、第2環状バスや処理エレメントの数については、単数であってもよいし、複数であってもよく、特に限定は加えない。
転送エレメント群23を構成する複数の転送エレメント230-0~nは、第1の環状バス27によって直列に接続される。複数の転送エレメント230-0~nは、第1の実施形態の転送エレメント130と同様の構成を有する。複数の転送エレメント230-0~nのそれぞれは、内部メモリ群24を構成する複数の内部メモリ240-0~4n+3のいずれかに接続される。
図22の例では、転送エレメント230-0(TE0)には内部メモリ240-0~3が接続される。同様に、転送エレメント230-1(TE1)には内部メモリ240-4~7が接続され、転送エレメント230-2(TE2)には内部メモリ240-8~11が接続される。そして、転送エレメント230-n(TEn)には内部メモリ240-4n~4n+3が接続される。
第1の環状バス27を構成する複数の環状バス270-0~3のそれぞれは、複数の転送エレメント230-0~nのそれぞれに接続される複数の内部メモリ240-0~4n+3に対応させて接続される。環状バス270-0には、内部メモリ240-0、4、8、・・・、4nが接続される。環状バス270-1には、内部メモリ240-1、5、9、・・・、4n+1が接続される。環状バス270-2には、内部メモリ240-2、6、10、・・・、4n+2が接続される。環状バス270-2には、内部メモリ240-2、6、10、・・・、4n+2が接続される。なお、複数の環状バス270-0~3と、複数の内部メモリ240-0~4n+3との接続関係は、上記の例に限定されず、任意に設定できる。
転送制御部21は、複線化された第1の環状バス27を介して、転送エレメント230-0(TE0)の入力に接続される。また、転送制御部21は、複線化された第1の環状バス27を介して、転送エレメント230-n(TEn)の出力に接続される。
図23は、転送制御部21の構成の一例を示すブロック図である。図23のように、転送制御部21は、指示レジスタ211、状態レジスタ212、制御回路213、および加算回路215を有する。転送制御部21は、第1の実施形態の転送制御部110に加算回路215を追加した構成を有する。
制御回路213は、外部メモリ200に接続される。また、制御回路213は、第1の環状バス27を介して、転送エレメント230-1の入力に接続される。さらに、制御回路213は、加算回路215の出力に接続される。指示レジスタ211および状態レジスタ212は、全体制御部22に接続される。なお、指示レジスタ211、状態レジスタ212、制御回路213、および全体制御部22の構成は、第1の実施形態の転送制御部110の対応する構成と同様であるため、詳細な説明は省略する。外部メモリ200も、第1の実施形態の外部メモリ100と同様である。
図24は、転送制御部21に含まれる加算回路215の構成例を示すブロック図である。加算回路215は、第1加算器251、第2加算器252、および第3加算器253を含む。
第1加算器251には、環状バス270-0~1が接続される。第1加算器251には、環状バス270-0~1を介して、転送エレメント230-n(TEn)から2つの転送パケットが入力される。環状バス270-0を介して第1加算器251に入力される転送パケットのペイロードデータは、内部メモリ240-0、4、8、・・・、4nに格納されたデータを用いた演算結果(第1の演算結果とも呼ぶ)に置換されている。環状バス270-1を介して第1加算器251に入力される転送パケットのペイロードデータは、内部メモリ240-1、5、9、・・・、4n+1に格納されたデータを用いた演算結果(第2の演算結果とも呼ぶ)に置換されている。第1加算器251は、第1の演算結果と第2の演算結果とを加算することによって第1の加算結果を計算する。第1加算器251は、算出した第1の加算結果を第3加算器253に出力する。
第2加算器252には、環状バス270-2~3が接続される。第2加算器252には、環状バス270-2~3を介して、転送エレメント230-n(TEn)から2つの転送パケットが入力される。環状バス270-2を介して第2加算器252に入力される転送パケットのペイロードデータは、内部メモリ240-2、6、10、・・・、4n+2に格納されたデータを用いた演算結果(第3の演算結果とも呼ぶ)に置換されている。環状バス270-3を介して第2加算器252に入力される転送パケットのペイロードデータは、内部メモリ240-3、7、11、・・・、4n+3に格納されたデータを用いた演算結果(第4の演算結果とも呼ぶ)に置換されている。第2加算器252は、第3の演算結果と第4の演算結果とを加算することによって第2の加算値を計算する。第2加算器252は、算出した第2の加算値を第3加算器253に出力する。
第3加算器253には、第1加算器251から第1の加算値が入力され、第2加算器252から第2の加算値が入力される。第3加算器253は、入力された第1の加算値と第2の加算値とを加算することによって総和データを計算する。第3加算器253は、算出した総和データを制御回路213に出力する。
以上のように、本実施形態のデータ処理装置は、複線化された第1の環状バスを有する。複数の内部メモリは、第1の環状バスを構成する複数の環状バスのそれぞれに対応させて複数の転送エレメントのそれぞれに接続される。複数の転送エレメントは、第1の環状バスを構成する複数の環状バスのそれぞれにおいて転送される複数の転送パケットに基づいて、複数の内部メモリにアクセスする。また、転送制御部は、第1の環状バスを構成する複数の環状バスを介して同じタイミングで転送される複数の転送パケットのペイロードデータを合算する。
本実施形態のデータ処理装置は、複数の転送パケットを並行して処理できる。そのため、本実施形態のデータ処理装置によれば、第1の実施形態のデータ処理装置と比べて、より効率的に複数の処理を並列して継続的に実行できる。
(第3の実施形態)
次に、本発明の第3の実施形態に係るデータ処理装置の転送エレメントについて図面を参照しながら説明する。本実施形態の転送エレメントは、第1の実施形態のデータ処理装置に含まれる転送エレメントを概念化した構成を有する。なお、本実施形態においては、転送エレメント以外の構成については簡略化または省略する。また、本実施形態においては、複数の転送エレメントが第1の環状バスを介して直列に接続されているものとし、転送制御部については説明を省略する。
図25は、本実施形態のデータ処理装置の転送エレメント330の構成の一例を示すブロック図である。図25のように、転送エレメント330は、入力回路331、バッファ回路332、解析回路333、メモリインタフェース回路334、演算回路335、選択回路336、および出力回路337を備える。転送エレメント330は、第1の環状バス37を介して、隣接する転送エレメント330に接続される。また、転送エレメント330は、メモリインタフェース回路334を介して内部メモリ340に接続される。
入力回路331には、第1の環状バス37を介して、前段の転送エレメント330から転送パケットが入力される。入力回路331に入力される転送パケットは、バッファ回路332および解析回路333に出力される。また、入力回路331に入力される転送パケットのペイロードデータは、データdin1として演算回路335に入力される。
バッファ回路332には、入力回路331から転送パケットが入力される。バッファ回路332は、入力された転送パケットを何段階か保持してから選択回路336に出力する。
解析回路333には、入力回路331から転送パケットが入力される。解析回路333は、転送パケットを解析し、解析結果に応じた内部メモリ340へのアクセス指示をメモリインタフェース回路334に出力する。
メモリインタフェース回路334には、解析回路333から内部メモリ340へのアクセス指示が入力される。メモリインタフェース回路334は、解析回路333から読み出し指示を受信すると、受信した読み出し指示に従って内部メモリ140からデータを読み出し、読み出したデータを演算回路335および選択回路336に出力する。また、メモリインタフェース回路334は、解析回路333から書き込み指示を受信すると、受信した書き込み指示に従って内部メモリ340にデータを書き込む。
演算回路335には、転送データのペイロードデータが入力回路331からデータdin1として入力される。また、演算回路335には、メモリインタフェース回路334からの読み出しデータrdがデータdin2として入力される。演算回路335は、データdin1とデータdin2とを用いて演算を実行し、その演算結果データdoutを選択回路336に出力する。例えば、演算回路335は、加算や積算などを実行する。
選択回路336には、バッファ回路332からの転送パケットと、メモリインタフェース回路334からの読み出しデータrdと、演算回路335からの演算結果データdoutとが入力される。選択回路336は、演算回路335の演算結果データdoutで、転送パケットに含まれるペイロードデータを置換する。選択回路336は、ペイロードデータが演算結果データdoutで置換された転送パケットを出力回路337に出力する。
出力回路337には、選択回路336から転送パケットが入力される。出力回路337は、選択回路336から入力される転送パケットを次段の転送エレメント330に転送する。
以上が、転送エレメント330の構成についての説明である。なお、図25に示す転送エレメント330の構成は一例であって、本実施形態を限定するものではない。
(動作)
次に、転送エレメント330のリダクション演算に関する動作の一例について図面を参照しながら説明する。図26は、転送エレメント330のリダクション演算に関する動作について説明するためのフローチャートである。なお、図26のフローチャートに沿った説明においては、転送エレメント330を動作主体とする。
図26において、まず、転送エレメント330は、前段から転送される第1の転送パケットに含まれるコマンドに応じて、内部メモリ340から第1のデータを読み出す(ステップS31)。
次に、転送エレメント330は、内部メモリ340から読み出した第1のデータと、第1の転送パケットに後続する第2の転送パケットに含まれるペイロードデータ(第2のデータ)とを用いて演算を実行する(ステップS32)。
次に、転送エレメント330は、第1のデータと第2のデータとの演算結果データで第2の転送パケットのペイロードデータを置換する(ステップS33)。
そして、転送エレメント330は、ペイロードデータが置換された第2の転送パケットを後続に転送する(ステップS34)。
以上が、転送エレメント330のリダクション演算に関する動作についての説明である。なお、図26のフローチャートに沿った処理をコンピュータに実行させるプログラムも本実施形態に含む。また、図26のフローチャートに沿った処理をコンピュータに実行させるプログラムを記録するプログラム記録媒体も本実施形態に含む。
以上のように、本実施形態の転送エレメントは、入力回路、バッファ回路、解析回路、メモリインタフェース回路、演算回路、選択回路、および出力回路を有する。入力回路には、転送パケットが入力される。バッファ回路は、転送パケットを少なくとも1段階保持する。解析回路は、転送パケットを解析し、解析した結果に基づいて内部メモリへのアクセス指示を出力する。メモリインタフェース回路は、アクセス指示に従って内部メモリにアクセスする。演算回路は、アクセス指示の供給元の転送パケットに後続する転送パケットのペイロードデータである第1のデータと、アクセス指示に従って内部メモリから読み出された第2のデータとを用いて演算を実行する。選択回路には、バッファ回路を経由した転送パケットのデータと、内部メモリから読み出された第2のデータと、演算回路から出力される演算結果データとが入力される。選択回路は、入力されたいずれかのデータを選択し、選択したデータをペイロードデータとして含む転送パケットを出力する。出力回路は、選択回路によって選択されるデータをペイロードデータとして含む転送パケットを出力する。
本実施形態のデータ処理装置によれば、複数の処理を並列して継続的かつ効率的に実行できる。
以上、実施形態を参照して本発明を説明してきたが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。