(57)【要約】【課題】複数の処理を並列して継続的かつ効率的に実行できるデータ処理装置を提供する。【解決手段】第１の環状バスと、第１の環状バスによって直列に接続される複数の転送エレメントと、第１の環状バスを介して少なくとも二つの転送エレメントに接続され、第１の環状バスにおいて転送される転送パケットの入出力を制御する転送制御部と、複数の転送エレメントのいずれかに接続される複数の内部メモリとを備え、転送エレメントは、第１の転送パケットに後続する第２の転送パケットに演算コマンドが含まれる場合、第２の転送パケットのペイロードデータである第１のデータと、先行する第１の転送パケットに基づいて内部メモリから読み出された第２のデータとを用いた演算を実行し、第１のデータと第２のデータの演算結果データで第２の転送パケットのペイロードデータを置換し、ペイロードデータが置換された第２の転送パケットを後続に転送とする。【選択図】      図１
2019220003.tif 000002
【特許請求の範囲】
【請求項１】
第１の環状バスと、
前記第１の環状バスによって直列に接続される複数の転送エレメントと、
前記第１の環状バスを介して少なくとも二つの前記転送エレメントに接続され、前記第１の環状バスにおいて転送される転送パケットの入出力を制御する転送制御手段と、
複数の前記転送エレメントのいずれかに接続される複数の内部メモリとを備え、
前記転送エレメントは、
第１の転送パケットに後続して転送されてきた第２の転送パケットに演算コマンドが含まれる場合、前記第２の転送パケットのペイロードデータである第１のデータと、先行する前記第１の転送パケットに基づいて前記内部メモリから読み出された第２のデータとを用いた演算を実行し、前記第１のデータと前記第２のデータの演算結果データで前記第２の転送パケットの前記ペイロードデータを置換し、前記ペイロードデータが置換された前記第２の転送パケットを後続に転送するデータ処理装置。
【請求項２】
前記転送エレメントは、
前記第１の転送パケットに含まれるコマンドおよびアドレスに従って、前記内部メモリの前記アドレスに格納されるデータを前記第２のデータとして読み出し、読み出した前記第２のデータと、前記第２の転送パケットの前記ペイロードデータである前記第１のデータとを用いて演算を実行する請求項１に記載のデータ処理装置。
【請求項３】
複数の前記転送エレメントは、
前記第１の転送パケットに含まれるコマンドおよびアドレスに従って、複数の前記内部メモリの同じ前記アドレスに格納されるデータを前記第２のデータとして読み出し、読み出した前記第２のデータと、前記第２の転送パケットの前記ペイロードデータである前記第１のデータとを加算した値で前記第２の転送パケットの前記ペイロードデータを置換するリダクション演算を実行する請求項２に記載のデータ処理装置。
【請求項４】
前記転送エレメントは、
前記転送パケットが入力される入力回路と、
前記転送パケットを少なくとも１段階保持するバッファ回路と、
前記転送パケットを解析し、解析した結果に基づいて前記内部メモリへのアクセス指示を出力する解析回路と、
前記アクセス指示に従って前記内部メモリにアクセスするメモリインタフェース回路と、
前記アクセス指示の供給元の前記転送パケットに後続する前記転送パケットの前記ペイロードデータである前記第１のデータと、前記アクセス指示に従って前記内部メモリから読み出された前記第２のデータとを用いて演算を実行する演算回路と、
前記バッファ回路を経由した前記転送パケットと、前記内部メモリから読み出された前記第２のデータと、前記演算回路から出力される前記演算結果データとが入力され、入力されたいずれかのデータを選択し、選択したデータを前記ペイロードデータとして含む前記転送パケットを出力する選択回路と、
前記選択回路によって選択されるデータを前記ペイロードデータとして含む前記転送パケットを出力する出力回路とを有する請求項１に記載のデータ処理装置。
【請求項５】
前記第１の環状バスが複線化され、
複数の前記内部メモリは、
前記第１の環状バスを構成する複数の環状バスのそれぞれに対応させて複数の前記転送エレメントのそれぞれに接続され、
複数の前記転送エレメントは、
前記第１の環状バスを構成する複数の前記環状バスのそれぞれにおいて転送される複数の前記転送パケットに基づいて、複数の前記内部メモリにアクセスする請求項１乃至４のいずれか一項に記載のデータ処理装置。
【請求項６】
前記転送制御手段は、
前記第１の環状バスを構成する複数の前記環状バスを介して同じタイミングで転送される複数の前記転送パケットの前記ペイロードデータを合算する請求項５に記載のデータ処理装置。
【請求項７】
前記第１の環状バスとは独立した第２の環状バスと、
前記第２の環状バスによって直列に接続される複数の処理エレメントと、
前記第２の環状バスを介して少なくとも二つの前記処理エレメントに接続され、前記第２の環状バスにおいて転送される演算命令の入出力を制御する全体制御手段とを備える請求項１乃至６のいずれか一項に記載のデータ処理装置。
【請求項８】
前記第１の環状バスを介して前記転送パケットが入力される入力データレジスタと、
少なくとも一つのレジスタで構成され、前記入力データレジスタから前記転送パケットが入力されるバッファレジスタと、
前記入力データレジスタから前記転送パケットが入力され、前記転送パケットを解析した結果に基づいて前記内部メモリへのアクセス指示を出力するデコーダと、
前記デコーダから前記アクセス指示が入力され、前記アクセス指示に基づいて前記内部メモリにアクセスする第１メモリインタフェースレジスタと、
前記アクセス指示に基づいて前記内部メモリから前記第２のデータを読み出す第２メモリインタフェースレジスタと、
前記第２メモリインタフェースレジスタが読み出した前記第２のデータと、前記アクセス指示の供給元の前記転送パケットに後続する前記転送パケットの前記ペイロードデータである前記第１のデータとを加算し、加算結果を前記演算結果データとして出力する加算器と、
前記バッファレジスタを経由した前記転送パケットと、前記内部メモリから読み出された前記第２のデータと、前記加算器からの前記演算結果データとが入力され、前記アクセス指示の供給元の前記転送パケットに後続する前記転送パケットの前記ペイロードデータを前記演算結果データで置換する選択器と、
前記転送パケットを出力する出力データレジスタとを有する請求項１乃至３のいずれか一項に記載のデータ処理装置。
【請求項９】
第１の環状バスと、前記第１の環状バスによって直列に接続される複数の転送エレメントと、複数の前記転送エレメントのいずれかに接続される複数の内部メモリとを備える装置におけるデータ処理方法であって、
前記転送エレメントの前段から転送される第１の転送パケットに基づいて前記内部メモリからデータを読み出し、
前記第１の転送パケットに後続する第２の転送パケットのペイロードデータである第１のデータと、前記内部メモリから読み出されたデータである第２のデータとを用いて演算を実行し、
前記第１のデータと前記第２のデータとの演算結果データで前記第２の転送パケットの前記ペイロードデータを置換し、
前記ペイロードデータが置換された前記第２の転送パケットを前記転送エレメントの後続に転送するデータ処理方法。
【請求項１０】
第１の環状バスと、前記第１の環状バスによって直列に接続される複数の転送エレメントと、複数の前記転送エレメントのいずれかに接続される複数の内部メモリとを備える装置を制御するプログラムであって、
前記転送エレメントの前段から転送される第１の転送パケットに基づいて前記内部メモリからデータを読み出す処理と、
前記第１の転送パケットに後続する第２の転送パケットのペイロードデータである第１のデータと、前記内部メモリから読み出されたデータである第２のデータとを用いて演算を実行する処理と、
前記第１のデータと前記第２のデータとの演算結果データで前記第２の転送パケットの前記ペイロードデータを置換する処理と、
前記ペイロードデータが置換された前記第２の転送パケットを前記転送エレメントの後続に転送する処理とをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの転送処理や演算処理を実行するデータ処理装置、データ処理方法、およびプログラムに関する。
【背景技術】
【０００２】
ビッグデータの解析処理等においては、数百次元のデータを数百万エントリ集めたデータに対する計算を繰り返すことがある。例えば、数百万次元×数百次元の行列に対する行列積やベクトル行列積、ベクトルの要素ごとの積などの演算が発生しうる。このような演算に対し、ＣＰＵ（Central Processing Unit）を用いた手法やＧＰＧＰＵ（General-Purpose computing on Graphics Processing Units）を用いた手法が検討されている。しかし、ＣＰＵやＧＰＧＰＵでは、性能の向上に伴い消費電力が増えてしまうという課題があった。
【０００３】
消費電力を削減するために、電力効率の良いデバイスであるＦＰＧＡ（Field Programmable Gate Array）を用いる手法が注目されている。ＦＰＧＡには、ＬＵＴ（Look Up Table）と呼ばれる汎用論理素子と、複数のＬＵＴの間を結ぶ構成可変な配線網が具備されている。ＦＰＧＡにおいては、ＬＵＴおよび配線網の内容を書き換えることによって、様々な演算装置を実現できる。
【０００４】
また、ＬＵＴのみならず、演算器（ＤＳＰ：Digital Signal Processor）やメモリ（ＳＲＡＭ：Static Random Access Memory）などの専用リソースが搭載されているＦＰＧＡもある。そのようなＦＰＧＡを用いれば、効率的な演算装置を実現できる。しかし、そのようなＦＰＧＡにおいては、ＤＳＰやＳＲＡＭの物理的な位置が固定されているため、ＤＳＰやＳＲＡＭを適切に利用するアーキテクチャでない限り配線が混雑してしまい、配線の混雑部分を迂回するために配線長が長くなるという課題があった。また、ＦＰＧＡの全体に亘る長い配線を構成すると、配線の遅延時間が延び、演算装置の動作周波数が低下するという課題があった。
【０００５】
また、ＳＲＡＭモジュールをトゥルー・デュアル・ポート（True Dual Port）、すなわち、完全に独立したデュアルポートＲＡＭ（Random Access Memory）として構成できるＦＰＧＡもある。このようなＦＰＧＡは、クロック入力やアドレス入力を２系統もつメモリとして利用できる。ＦＰＧＡの能力を最大限引き出すためには、このような機能を十分に活用することが好ましい。
【０００６】
このように、消費電力を増やさずに性能を引き出すためには、ＦＰＧＡの特性を活かしたアーキテクチャを実現することが望ましい。
【０００７】
特許文献１には、スループットの向上とともに小さな演算遅れ時間が要求されるデジタル制御用高速積和演算並列プロセッサに関して開示されている。特許文献１のプロセッサは、複数の要素プロセッサを含む。複数の要素プロセッサは、相互結合回路網により直列に結合され、種々の個数の乗算器を含む積和演算器をダイナミックに形成する。
【０００８】
特許文献２には、ネットワークで接続された複数のコンピュータノードの計算結果を集約してリダクションする並列計算機について開示されている。特許文献２の並列計算機は、複数のネットワークアダプタを有する３つ以上のノードと、各ノードのネットワークアダプタ間を接続するクロスバースイッチとを有する。各ノードは、保持データを分割した分割データのそれぞれを、異なるネットワークアダプタを介して他の複数のノードに転送する。ノードの各々は、受け取った分割データと保持データとのリダクション演算を実行し、ネットワークアダプタを介して少なくとも１つのノードにリダクション演算結果を転送して集約する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平０５−３２４６９４号公報
【特許文献２】特開２００７−２４９８１０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１のプロセッサによれば、要素プロセッサ間の通信のオーバーヘッドが減少し、小さな遅れ時間で積和演算の並列処理を行うことができる。特許文献１のプロセッサでは、連続する二つの要素プロセッサにおいて、前段の乗算器と後段の乗算器の演算結果の和を後段の加算器で演算する間、前段の乗算器が処理を行わないで待機する時間が発生するという問題点があった。
【００１１】
特許文献２の並列計算機によれば、初期のデータ転送で、より多くのノードがデータ転送を実行できるため、高速な転送処理が実現され、転送時間が短縮される。しかしながら、特許文献２の並列計算機では、リダクション処理の後半において、処理を行わない遊休状態のノードが増えるという問題点があった。
【００１２】
本発明の目的は、上述した課題を解決するために、複数の処理を並列して継続的かつ効率的に実行できるデータ処理装置を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の一態様のデータ処理装置は、第１の環状バスと、第１の環状バスによって直列に接続される複数の転送エレメントと、第１の環状バスを介して少なくとも二つの転送エレメントに接続され、第１の環状バスにおいて転送される転送パケットの入出力を制御する転送制御部と、複数の転送エレメントのいずれかに接続される複数の内部メモリとを備え、転送エレメントは、第１の転送パケットに後続して転送されてきた第２の転送パケットに演算コマンドが含まれる場合、第２の転送パケットのペイロードデータである第１のデータと、先行する第１の転送パケットに基づいて内部メモリから読み出された第２のデータとを用いた演算を実行し、第１のデータと第２のデータの演算結果データで第２の転送パケットのペイロードデータを置換し、ペイロードデータが置換された第２の転送パケットを後続に転送する。
【００１４】
本発明の一態様のデータ処理方法は、第１の環状バスと、第１の環状バスによって直列に接続される複数の転送エレメントと、複数の転送エレメントのいずれかに接続される複数の内部メモリとを備える装置におけるデータ処理方法であって、転送エレメントの前段から転送される第１の転送パケットに基づいて内部メモリからデータを読み出し、第１の転送パケットに後続する第２の転送パケットのペイロードデータである第１のデータと、内部メモリから読み出されたデータである第２のデータとを用いて演算を実行し、第１のデータと第２のデータとの演算結果データで第２の転送パケットのペイロードデータを置換し、ペイロードデータが置換された第２の転送パケットを転送エレメントの後続に転送する。
【００１５】
本発明の一態様のプログラムは、第１の環状バスと、第１の環状バスによって直列に接続される複数の転送エレメントと、複数の転送エレメントのいずれかに接続される複数の内部メモリとを備える装置を制御するプログラムであって、転送エレメントの前段から転送される第１の転送パケットに基づいて内部メモリからデータを読み出す処理と、第１の転送パケットに後続する第２の転送パケットのペイロードデータである第１のデータと、内部メモリから読み出されたデータである第２のデータとを用いて演算を実行する処理と、第１のデータと第２のデータとの演算結果データで第２の転送パケットのペイロードデータを置換する処理と、ペイロードデータが置換された第２の転送パケットを転送エレメントの後続に転送する処理とをコンピュータに実行させる。
【発明の効果】
【００１６】
本発明によれば、複数の処理を並列して継続的かつ効率的に実行できるデータ処理装置を提供することが可能になる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１の実施形態に係るデータ処理装置の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態に係るデータ処理装置の転送エレメントの構成の一例を示すブロック図である。
【図３】本発明の第１の実施形態に係るデータ処理装置の転送エレメントが転送する転送パケットの一例である。
【図４】本発明の第１の実施形態に係るデータ処理装置の転送エレメントが転送する転送パケットの構成の一例である。
【図５】本発明の第１の実施形態に係るデータ処理装置の転送エレメントが転送する転送パケットの構成の一例である。
【図６】本発明の第１の実施形態に係るデータ処理装置の内部メモリの一例を示すブロック図である。
【図７】本発明の第１の実施形態に係るデータ処理装置の内部メモリに格納されるデータの一例を示す概念図である。
【図８】本発明の第１の実施形態に係るデータ処理装置の内部メモリにデータを格納する様子を示す概念図である。
【図９】本発明の第１の実施形態に係るデータ処理装置の転送制御部の構成の一例を示すブロック図である。
【図１０】本発明の第１の実施形態に係るデータ処理装置の処理エレメントの構成の一例を示すブロック図である。
【図１１】本発明の第１の実施形態に係るデータ処理装置の処理エレメントが取り扱う演算命令の構成例を示す概念図である。
【図１２】本発明の第１の実施形態に係るデータ処理装置の全体制御部の構成の一例を示すブロック図である。
【図１３】本発明の第１の実施形態に係るデータ処理装置の全体制御部のコマンドメモリに格納されるコマンドの構成例を示す概念図である。
【図１４】本発明の第１の実施形態に係るデータ処理装置の全体制御部の命令の構成例を示す概念図である。
【図１５】本発明の第１の実施形態に係るデータ処理装置の転送エレメントの動作について説明するためのブロック図である。
【図１６】本発明の第１の実施形態に係るデータ処理装置の転送エレメントの実行する演算について説明するためのブロック図である。
【図１７】本発明の第１の実施形態に係るデータ処理装置の転送エレメントの演算結果について説明するためのブロック図である。
【図１８】本発明の第１の実施形態に係るデータ処理装置の転送エレメントＴＥ０に転送される転送パケットの移動状況について説明するための概念図である。
【図１９】本発明の第１の実施形態に係るデータ処理装置の転送エレメントＴＥ１に転送される転送パケットの移動状況について説明するための概念図である。
【図２０】本発明の第１の実施形態に係るデータ処理装置が行列積を繰り返す例について説明するための概念図である。
【図２１】本発明の第１の実施形態に係るデータ処理装置が行列積を行ごとの総和を取る例について説明するための概念図である。
【図２２】本発明の第２の実施形態に係るデータ処理装置の構成の一例を示すブロック図である。
【図２３】本発明の第２の実施形態に係るデータ処理装置の転送制御部の構成の一例を示すブロック図である。
【図２４】本発明の第２の実施形態に係るデータ処理装置の転送制御部の加算回路の構成の一例を示すブロック図である。
【図２５】本発明の第３の実施形態に係るデータ処理装置の構成の一例を示すブロック図である。
【図２６】本発明の第３の実施形態に係るデータ処理装置の動作について説明するためのフローチャートである。
【発明を実施するための形態】
【００１８】
以下に、本発明を実施するための形態について図面を用いて説明する。ただし、以下に述べる実施形態には、本発明を実施するために技術的に好ましい限定がされているが、発明の範囲を以下に限定するものではない。なお、以下の実施形態の説明に用いる全図においては、特に理由がない限り、同様箇所には同一符号を付す。また、以下の実施形態において、同様の構成・動作に関しては繰り返しの説明を省略する場合がある。また、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号の向きを限定するものではない。
【００１９】
（第１の実施形態）
まず。本発明の第１の実施形態に係るデータ処理装置について図面を参照しながら説明する。以下においては、本実施形態のデータ処理装置をＦＰＧＡ（Field-Programmable Gate Array）に実装する例について説明する。なお、本実施形態のデータ処理装置は、専用回路（ＡＳＩＣ：Application Specific Integrated Circuit）として実現してもよい。以下においては、本実施形態のデータ処理装置が行列を処理対象とする場合について説明する。ただし、本実施形態のデータ処理装置の処理対象のデータは、行列に限らず、他の形態のデータでもよい。例えば、本実施形態のデータ処理装置は、ベクトルデータを処理対象とすることができる。
【００２０】
（構成）
図１は、本実施形態のデータ処理装置１０の構成を示すブロック図である。データ処理装置１０は、制御部１１、複数の演算ユニット１３−０〜ｎ、第１の環状バス１７、および第２の環状バス１８を備える（ｎは自然数）。
【００２１】
制御部１１は、演算ユニット１３が実行する演算やデータ（パケット）の転送を制御する。制御部１１は、外部メモリ１００に接続される。制御部１１は、外部メモリからデータを取得する。なお、制御部１１は、外部メモリ１００ではなく、ネットワークを経由して上位システム（図示しない）や入力装置（図示しない）などに接続されていてもよい。制御部１１は、転送制御部１１０および全体制御部１２０を有する。
【００２２】
転送制御部１１０は、第１の環状バス１７を介して直列に接続された複数の転送エレメント１３０の先頭および末尾のエレメントに接続される。転送制御部１１０は、第１の環状バス１７において転送される転送パケットの入出力を制御する。
【００２３】
全体制御部１２０は、第２の環状バス１８を介して直列に接続された複数の処理エレメント１５０の先頭および末尾のエレメントに接続される。全体制御部１２０は、第２の環状バス１８において転送される演算命令の入出力を制御する。
【００２４】
複数の演算ユニット１３は、第１の環状バス１７および第２の環状バス１８によって直列に接続される。演算ユニット１３は、第１の環状バス１７を介して転送制御部１１０から転送される転送パケットに含まれるコマンドに応じて、演算ユニット１３に格納されたデータを読み出したり、演算を実行したり、演算結果を出力したりする。演算ユニット１３は、転送エレメント１３０、内部メモリ１４０、および処理エレメント１５０を有する。
【００２５】
演算ユニット１３を構成する転送エレメント１３０は、第１の環状バス１７を介して隣接する転送エレメント１３０と接続される。ただし、先頭の転送エレメント１３０−１の入力と、末尾の転送エレメント１３０−ｎの出力とは、第１の環状バス１７を介して転送制御部１１０に接続される。
【００２６】
転送エレメント１３０は、前段から転送パケットを受信する。演算ユニット１３−０の転送エレメント１３０には、第１の環状バス１７を介して、転送制御部１１０から転送パケットが入力される。演算ユニット１３−１〜ｎの転送エレメント１３０には、第１の環状バス１７を介して、前段の転送エレメント１３０から転送パケットが入力される。
【００２７】
転送エレメント１３０は、転送パケットの解析結果に応じて、転送パケットのペイロードデータを自身に対応する内部メモリ１４０に書き込んだり、内部メモリ１４０からデータを読み出したり、演算を実行したりする。また、転送エレメント１３０は、転送パケットの解析結果に応じて、転送パケットに含まれるコマンドを内部メモリ１４０に送信する。
【００２８】
転送エレメント１３０は、転送パケットの解析結果が書き込みコマンドであった場合、その書き込みコマンドに応じて、転送パケットのペイロードデータを自身に対応する内部メモリ１４０に書き込む。転送エレメント１３０は、転送パケットの解析結果が読み出しコマンドであった場合、その読み出しコマンドに応じて、内部メモリ１４０からデータを読み出す。転送エレメント１３０は、転送パケットの解析結果が演算コマンドであった場合、その演算コマンドに応じた演算を実行する。
【００２９】
例えば、転送制御部１１０が、全ての転送エレメント１３０に関して、先行する転送パケットのコマンドに応じて読み出された読み出しデータと、後続する転送パケットのペイロードデータとの総和を取るリダクション演算の実行を制御するものとする。この場合、それぞれの転送エレメント１３０は、先行する転送パケットの演算コマンドに応じて自身の内部メモリ１４０からデータを読み出す。そして、それぞれの転送エレメント１３０は、先行する転送パケットの演算コマンドに応じて読み出した読み出しデータと、後続する転送パケットのペイロードデータとを加算した演算結果データで転送パケット中のペイロードデータを置換する。
【００３０】
転送エレメント１３０は、第１の環状バス１７を介して後段に転送パケットを転送する。演算ユニット１３−０〜ｎ−１の転送エレメント１３０は、第１の環状バス１７を介して次段の転送エレメント１３０に出力データを出力する。最後段の演算ユニット１３−ｎの転送エレメント１３０は、第１の環状バス１７を介して転送制御部１１０に転送パケットを転送する。
【００３１】
演算ユニット１３を構成する処理エレメント１５０は、第２の環状バス１８を介して隣接する処理エレメント１５０と接続される。ただし、先頭の処理エレメント１５０−１の入力と、末尾の処理エレメント１５０−ｎの出力とは、第２の環状バス１８を介して全体制御部１２０に接続される。
【００３２】
処理エレメント１５０は、第２の環状バス１８を介して全体制御部１２０から受信する演算命令に従って、自身に対応する内部メモリ１４０からデータを読み出す。処理エレメント１５０は、読み出したデータを用いた演算の演算結果を内部メモリ１４０に書き込む。
【００３３】
演算ユニット１３を構成する内部メモリ１４０は、転送エレメント１３０と処理エレメント１５０との間に接続される。内部メモリ１４０には、転送エレメント１３０および処理エレメント１５０の演算に用いられるデータが格納される。また、内部メモリ１４０には、処理エレメント１５０の演算結果が格納される。例えば、内部メモリは、ＳＲＡＭ（Static Random Access Memory）によって実現される。
【００３４】
転送制御部１１０は、第１の環状バス１７を介して転送エレメント１３０に接続される。図１の例では、隣接する転送エレメント１３０同士が第１の環状バス１７を介して直列に接続される。そのため、転送制御部１１０は、第１の環状バス１７を介して、先頭の演算ユニット１３−０の転送エレメント１３０の入力と、末尾の演算ユニット１３−ｎの転送エレメント１３０の出力とに接続される。
【００３５】
また、転送制御部１１０は、外部メモリ１００に接続される。転送制御部１１０には、外部メモリ１００からデータが入力される。転送制御部１１０は、第１の環状バス１７を通じて、入力されるデータに基づいた転送パケットを転送エレメント１３０に送信する。また、転送制御部１１０は、第１の環状バス１７を通じて、転送エレメント１３０から転送パケットを取得する。転送制御部１１０は、第１の環状バス１７を通じて転送される転送パケットに基づいたデータを外部メモリ１００へ書き出す。
【００３６】
全体制御部１２０（全体制御手段とも呼ぶ）は、第２の環状バス１８を介して処理エレメント１５０に接続される。図１の例では、隣接する処理エレメント１５０同士が第２の環状バス１８を介して直列に接続される。そのため、全体制御部１２０は、第２の環状バス１８を介して、演算ユニット１３−０の処理エレメント１５の入力と、演算ユニット１３−ｎの処理エレメント１５の出力とに接続される。
【００３７】
また、全体制御部１２０は、外部メモリ１００に接続される。全体制御部には、外部メモリ１００から演算命令が入力される。転送制御部１１０は、入力される演算命令に基づいた演算命令を処理エレメント１５０に送信する。なお、転送制御部１１０と全体制御部１２０とは、互いに接続される。
【００３８】
第１の環状バス１７は、一次元的な環状のバスである。第１の環状バス１７は、複数の転送エレメント１３０を直列に接続する。また、第１の環状バス１７は、転送制御部１１０に接続される。
【００３９】
第２の環状バス１８は、第１の環状バス１７とは独立した一次元的な環状のバスである。第２の環状バス１８は、複数の処理エレメント１５０を直列に接続する。また、第２の環状バス１８は、全体制御部１２０に接続される。
【００４０】
以上が、データ処理装置１０の構成に関する概略的な説明である。以下においては、データ処理装置１０の構成要素について個別に説明する。
【００４１】
〔転送エレメント〕
図２は、転送エレメント１３０の構成を示すブロック図である。なお、図２においては隣接し合う転送エレメント１３０同士が接続するように図示しているが、演算ユニット１３−０の転送エレメント１３０の入力と、演算ユニット１３−ｎの転送エレメント１３０の出力とは転送制御部１１０に接続される。図２の上部に示すｓｔｇ１〜６は、転送パケットが転送されていく段階（ステージ）を示す指標である。
【００４２】
図２のように、転送エレメント１３０は、入力データレジスタ１３１、バッファ回路１３２、解析回路１３３、メモリインタフェース回路１３４、加算回路１３５、選択回路１３６、および出力データレジスタ１３７を有する。なお、低速の動作周波数で動作させる場合などでは、入力データレジスタ１３１および出力データレジスタ１３７を省略できる。
【００４３】
入力データレジスタ１３１（入力回路とも呼ぶ）には、第１の環状バス１７を介して、前段から転送パケットが入力される。なお、演算ユニット１３−０の入力データレジスタ１３１には、第１の環状バス１７を介して、転送制御部１１０から転送パケットが入力される。また、演算ユニット１３−１〜ｎの入力データレジスタ１３１には、第１の環状バス１７を介して、前段の演算ユニット１３−０〜ｎ−１から転送パケットが入力される。
【００４４】
入力データレジスタ１３１に入力される転送パケットは、バッファ回路１３２および解析回路１３３に向けて出力される。また、入力データレジスタ１３１に入力される転送パケットのペイロードデータは、データｄｉｎ１として加算回路１３５に向けて出力される。
【００４５】
バッファ回路１３２には、入力データレジスタ１３１から転送パケットが入力される。バッファ回路１３２は、入力された転送パケットを何段階か保持してから選択回路１３６に出力する。バッファ回路１３２は、内部メモリ１４０のアクセスレイテンシに合わせて設定されるバッファである。図２の例では、バッファ回路１３２は、第１バッファレジスタ１３２−１、第２バッファレジスタ１３２−２、および第３バッファレジスタ１３２−３が直列に接続された構成を有する。なお、バッファ回路１３２に含まれるレジスタの数は、３個に限定されない。例えば、バッファ回路１３２は、内部メモリ１４０のアクセスレイテンシに合わせて複数段のシフトレジスタとして構成してもよい。
【００４６】
解析回路１３３（デコーダとも呼ぶ）には、入力データレジスタ１３１から転送パケットが入力される。解析回路１３３は、転送パケットを解析し、解析結果に応じた内部メモリ１４０へのアクセス指示をメモリインタフェース回路１３４に出力する。例えば、解析回路１３３は、転送パケットに含まれるコマンドに応じて、アクセス先のアドレスａｄｄｒやコマンドをメモリインタフェース回路１３４に出力する。
【００４７】
解析回路１３３は、前段の転送エレメント１３０から受信した転送パケットの識別フィールドが自身の識別子と一致した場合、そのコマンドが自身へのコマンドであると判断する。そして、解析回路１３３は、コマンドフィールドが内部メモリ１４０からの読み出しコマンドであれば、アドレスフィールドのアドレスと読み出し指示をメモリインタフェース回路１３４に送信する。また、解析回路１３３は、コマンドフィールドが内部メモリ１４０への書き込みコマンドであれば、データフィールドの値とアドレスフィールドのアドレスと書き込み指示をメモリインタフェース回路１３４に送信する。
【００４８】
メモリインタフェース回路１３４には、解析回路１３３から内部メモリ１４０へのアクセス指示が入力される。メモリインタフェース回路１３４は、解析回路１３３から読み出し指示を受信すると、受信した読み出し指示に従って内部メモリ１４０からデータを読み出し、読み出したデータを加算回路１３５および選択回路１３６に出力する。また、メモリインタフェース回路１３４は、解析回路１３３から書き込み指示を受信すると、受信した書き込み指示に従って内部メモリ１４０にデータを書き込む。図２の例では、メモリインタフェース回路１３４は、第１メモリインタフェースレジスタ１３４−１および第２メモリインタフェースレジスタ１３４−２を含む。なお、低速の動作周波数で動作させる場合などにおいては、第１メモリインタフェースレジスタ１３４−１および第２メモリインタフェースレジスタ１３４−２を省略できる。
【００４９】
第１メモリインタフェースレジスタ１３４−１は、解析回路１３３のアクセス指示に応じて内部メモリ１４０にアクセスする。例えば、第１メモリインタフェースレジスタ１３４−１は、解析回路１３３の読み出し指示や書き込み指示に応じて、アクセス先のアドレスやコマンドを内部メモリ１４０に出力する。
【００５０】
第２メモリインタフェースレジスタ１３４−２には、解析回路１３３のアクセス指示に応じて内部メモリ１４０から読み出しデータｒｄを読み出す。第２メモリインタフェースレジスタ１３４−２は、加算回路１３５および選択回路１３６に読み出しデータｒｄを出力する。
【００５１】
加算回路１３５には、入力データレジスタ１３１から転送データのペイロードデータ（データｄｉｎ１）が入力され、メモリインタフェース回路１３４の第２メモリインタフェースレジスタ１３４−２から読み出しデータｒｄ（データｄｉｎ２）が入力される。加算回路１３５は、データｄｉｎ１とデータｄｉｎ２とを加算し、その演算結果データｄｏｕｔを選択回路１３６に出力する。なお、データｄｉｎ１を第１のデータ、データｄｉｎ２を第２のデータとも呼ぶ。
【００５２】
選択回路１３６には、バッファ回路１３２からの転送パケットと、メモリインタフェース回路１３４からの読み出しデータｒｄと、加算回路１３５からの演算結果データｄｏｕｔとが入力される。選択回路１３６は、転送パケットの解析結果のコマンドに応じて、転送パケットのペイロードデータを選択する。選択回路１３６は、３入力１出力のセレクタである。選択回路１３６は、選択したペイロードデータを含む転送パケットを出力データレジスタ１３７に出力する。
【００５３】
選択回路１３６は、書き込みコマンドの場合、転送パケットのペイロードデータをそのまま選択する。選択回路１３６は、読み出しコマンドの場合、内部メモリ１４０から読み出される読み出しデータｒｄを選択し、転送パケットのペイロードデータをその読み出しデータｒｄに置換する。選択回路１３６は、演算コマンドの場合、加算回路１３５の演算結果データｄｏｕｔを選択し、転送パケットのペイロードデータをその演算結果データｄｏｕｔに置換する。
【００５４】
出力データレジスタ１３７には、選択回路１３６から転送パケットが入力される。出力データレジスタ１３７は、選択回路１３６から入力される転送パケットを次段の転送エレメント１３０に転送する。
【００５５】
ここで、転送エレメント１３０で取り扱われる転送パケットについて図面を参照しながら説明する。
【００５６】
図３は、転送パケットの構成の一例を示す概念図である。例えば、転送パケットｐ１は、全ての演算ユニット１３の内部メモリ１４０のアドレス０ｘ００からデータを読み出すことを示す。例えば、転送パケットｐ４は、全ての演算ユニット１３の内部メモリ１４０のアドレス０ｘ０３からデータを読み出し、先行する転送パケット（例えばｐ１）に基づいて読み出されたデータと、転送パケットｐ４のペイロードデータとを加算することを示す。
【００５７】
図４は、第１の環状バス１７で転送される転送パケットの構成例（転送パケット１７０）を示す概念図である。図４の転送パケット１７０は、４ｂｉｔのコマンドフィールド（ｃｍｄ）、８ｂｉｔの識別フィールド（ｐｅｉｄ）、８ｂｉｔのアドレスフィールド（ａｄｄｒ）、３２ｂｉｔのデータフィールド（ｄａｔａ）を含む。なお、転送パケットを構成する各フィールドのビット数はここで挙げた限りではなく、任意に設定できる。
【００５８】
コマンドフィールド（ｃｍｄ）は、外部メモリからの読み込み、読み出すデータに対する演算の内容、外部メモリへの書き込み等のようにデータ転送の種類を表す。識別フィールド（ｐｅｉｄ）は、どの演算ユニット１３の内部メモリ１４０にアクセスするのかを表す。アドレスフィールド（ａｄｄｒ）は、内部メモリ１４０のどのアドレスにアクセスするかを表す。データフィールド（ｄａｔａ）は、ペイロードデータを保持する。
【００５９】
例えば、転送パケットｐ１のコマンドＲＤ（点線枠）に応じて、内部メモリ１４０のアドレス０ｘ００に格納されるデータ（破線枠）を読み出す指示が発せられる。同様に、転送パケットｐ２のコマンドＲＤに応じて、内部メモリ１４０のアドレス０ｘ０１に格納されるデータを読み出す指示が発せられる。同様に、転送パケットｐ３のコマンドＲＤに応じて、内部メモリ１４０のアドレス０ｘ０２に格納されるデータを読み出す指示が発せられる。
【００６０】
そして、転送パケットｐ４のコマンドＲＤ_ＡＤＤ（一点鎖線枠）に応じて、内部メモリ１４０のアドレス０ｘ０３に格納されるデータ（二点鎖線枠）を読み出す指示が発せられる。このとき、転送パケットｐ４のコマンドＲＤ_ＡＤＤ（一点鎖線枠）に応じて、転送パケットｐ１のコマンドＲＤに応じて読み出された読み出しデータｒｄと、転送パケットｐ４のペイロードデータ（二点鎖線枠）とが加算される。内部メモリ１４０のアクセスレイテンシがあるため、転送パケットｐ１のコマンドＲＤ（破線枠）に応じて内部メモリ１４０のアドレス０ｘ００から読み出されたデータ（破線枠）と、転送パケットｐ４のペイロードデータ（二点鎖線枠）とが加算される。そして、転送パケットｐ４のペイロードデータは、演算結果データｄｏｕｔと置換される。
【００６１】
このように、加算される二つのデータのうち、内部メモリ１４０から読み出された読み出しデータｒｄのコマンドの供給元の転送パケットを第１の転送パケットと呼ぶ。そして、第１の転送パケットのコマンドに応じて読み出された読み出しデータｒｄ（ｄｉｎ２）と加算されるペイロードデータ（ｄｉｎ１）を含む転送パケットを第２の転送パケットと呼ぶ。
【００６２】
図５は、メモリインタフェース回路１３４で生じるレイテンシを含めた内部メモリ１４０のアクセスレイテンシと、加算回路１３５のレイテンシとがともに３の場合における、第１の転送パケットと第２の転送パケットとの対応関係をまとめた表である。例えば、転送パケットｐ１が第１の転送パケットの場合、転送パケットｐ４が第２の転送パケットに相当する。同様に、転送パケットｐ２〜６が第１の転送パケットの場合、転送パケットｐ５〜９が第２の転送パケットに相当する。すなわち、転送パケットｐ４〜６は、転送パケットｐ１〜３にとっては第２の転送パケットに相当し、転送パケットｐ７〜９にとっては第１の転送パケットに相当する。なお、内部メモリ１４０のアクセスレイテンシと、加算回路１３５のレイテンシとが異なる場合は、図５とは異なる対応関係になる。
【００６３】
〔内部メモリ〕
図６は、内部メモリ１４０の構成を示すブロック図である。なお、図６に示すブロック間の矢印は、書き込み指示やアドレス、読み出しデータ、書き込みデータの流れを概念的に示すものであって、それらの向きを限定するものではない。
【００６４】
内部メモリ１４０は、デュアルポートメモリ１４１を含む。デュアルポートメモリ１４１は、ポート１４２（以下、ポートＡと記載する）とポート１４３（以下、ポートＢと記載する）の２系統のアクセスポートを備える。ポートＡ（第１のポートとも呼ぶ）には、転送エレメント１３０からの信号線が接続される。一方、ポートＢ（第２のポートとも呼ぶ）には、処理エレメント１５０からの信号線が接続される。それらの信号線は、書き込みおよび読み出しのためのアドレスや、書き込み指示、書き込みデータ、読み出しデータなどを伝送するための配線である。
【００６５】
図７は、内部メモリ１４０に格納されるデータの一例を示す概念図である。例えば、演算ユニット１３−０の内部メモリ１４０のアドレス０ｘ０００にはａ０が格納される。また、演算ユニット１３−１の内部メモリ１４０のアドレス０ｘ０００にはａ１が格納される。すなわち、演算ユニット１３−０〜７のそれぞれの内部メモリ１４０のアドレス０ｘ０００には、ａ０、ａ１、・・・、ａ７が格納される。例えば、演算対象の行列の１列目がａ０、ａ１、・・・、ａ７の場合、演算ユニット１３−０〜７のそれぞれの内部メモリ１４０の同じアドレス０ｘ０００に、ａ０、ａ１、・・・、ａ７を格納する。
【００６６】
図８は、演算対象の行列を構成する成分を内部メモリ１４０の記憶領域に振り分けて記憶させる例である。例えば、行列Ａ（ｍ行ｋ列）と積算させる行列Ｂ（ｋ行ｎ列）を記憶領域Ｂに記憶させておく（ｍ、ｋ、ｎは整数）。そして、行列Ａと行列Ｂとの行列積Ｃ（ｍ行ｎ列）を記憶領域Ｃに記憶させる。
【００６７】
〔転送制御部〕
図９は、転送制御部１１０の構成を示すブロック図である。図９のように、転送制御部１１０は、指示レジスタ１１１、状態レジスタ１１２、制御回路１１３、およびメモリ１１４を含む。指示レジスタ１１１および状態レジスタ１１２は、全体制御部１２０に接続される。制御回路１１３は、外部メモリ１００に接続される。また、制御回路１１３は、演算ユニット１３−０の転送エレメント１３０の入力と、演算ユニット１３−ｎの転送エレメント１３０の出力とに接続される。
【００６８】
指示レジスタ１１１は、外部メモリアドレスを示すｅａｄｄｒ、内部メモリアドレスを示すｉａｄｄｒ、転送パケットの数を示すｎｕｍ、転送方向を示すｄｉｒ、実行するコマンドを示すｃｍｄといった複数のレジスタフィールドを含む。
【００６９】
例えば、ｄｉｒ＝＝０の場合、内部メモリ１４０のｉａｄｄｒ番地から外部メモリ１００のｅａｄｄｒ番地へのｎｕｍ個のデータの転送を表す。また、ｄｉｒ＝＝１の場合、外部メモリのｅａｄｄｒ番地から内部メモリのｉａｄｄｒ番地へのｎｕｍ個のデータの転送を表す。
【００７０】
例えば、ｃｍｄ＝００の場合は内部メモリ１４０から外部メモリ１００へのデータ転送、ｃｍｄ＝０１の場合は外部メモリ００から内部メモリ１４０へのデータ転送、ｃｍｄ＝１０の場合はリダクション演算を表す。
【００７１】
状態レジスタ１１２には、第１の環状バス１７において、転送パケットを転送中であるのか、転送パケットの転送が完了したのかを示す値が保持される。
【００７２】
制御回路１１３は、外部メモリ１００に接続される。また、制御回路１１３は、指示レジスタ１１１、状態レジスタ１１２、およびメモリ１１４に接続される。制御回路１１３は、外部メモリ１００からデータを入力する。制御回路１１３は、第１の環状バス１７を通じて、入力したデータに関する転送パケットを演算ユニット１３−１の転送エレメント１３０に送信する。また、制御回路１１３は、第１の環状バス１７を介して、受信される転送パケットに関するデータを外部メモリ１００へ書き出す。また、制御回路１１３は、必要に応じて、外部メモリ１００からのデータや転送パケットに含まれるデータをメモリ１１４に保持する。
【００７３】
制御回路１１３は、指示レジスタ１１１に有効な転送指示が含まれていれば、転送パケットの転送を開始する。また、制御回路１１３は、状態レジスタ１１２に関して、転送中か転送完了かを示す値を随時反映し、反映した結果を全体制御部１２０に通知する。すなわち、制御回路１１３は、指示レジスタ１１１に有効な転送指示が含まれている際に、外部メモリ１００と転送エレメント１２との間でデータを転送して状態レジスタ１１２の値を更新する。
【００７４】
例えば、制御回路１１３は、自身のｉｖｋｄｍａ命令に応じて指示レジスタ１１１に値を書き込む。また、例えば、制御回路１１３は、自身のｃｈｋｄｍａ命令に応じて状態レジスタ１１２の値を読み込む。
【００７５】
メモリ１１４は、制御回路１１３に接続される。メモリ１１４には、制御回路１１３によって、外部メモリ１００からのデータや転送パケットに含まれるデータが保持される。
【００７６】
〔処理エレメント〕
図１０は、処理エレメント１５０の構成を示すブロックである。なお、図６においては、処理エレメント１５０の前段および後段の処理エレメント１５０が互いに接続するように図示している。実際には、演算ユニット１３−０の処理エレメント１５０の入力と、演算ユニット１３−ｎの処理エレメント１５０の出力とは全体制御部１２０に接続される。
【００７７】
図１０のように、処理エレメント１５０は、環状バスレジスタ１５１、命令デコーダ１５２、メモリインタフェース部１５３、および演算器１５４を有する。
【００７８】
環状バスレジスタ１５１は、第２の環状バス１８に接続される。環状バスレジスタ１５１は、第２の環状バス１８を構成する要素の一部である。環状バスレジスタ１５１は、命令デコーダ１５２に接続される。環状バスレジスタ１５１は、単一のレジスタとしてもよいし、複数段から成るシフトレジスタとしてもよい。環状バスレジスタ１５１は、第２の環状バス１８に接続される前段の処理エレメント１５０から演算命令を受信し、受け取った演算命令を次段の処理エレメント１５０に送信する。環状バスレジスタ１５１は、受信した演算命令を命令デコーダ１５２に送る。
【００７９】
命令デコーダ１５２は、環状バスレジスタ１５１に接続される。また、命令デコーダ１５２は、メモリインタフェース部１５３と演算器１５４とに接続される。命令デコーダ１５２は、環状バスレジスタ１５１から受信される演算命令を解析し、演算命令に応じた制御信号を生成する。命令デコーダ１５２は、生成した制御信号をメモリインタフェース部１５３と演算器１５４とに出力する。
【００８０】
メモリインタフェース部１５３は、命令デコーダ１５２と演算器１５４とに接続される。また、メモリインタフェース部１５３は、内部メモリ１４０に接続される。メモリインタフェース部１５３は、命令デコーダ１５２からの制御信号に応じて、内部メモリ１４０からデータを読み出し、読み出したデータを演算器１５４に送信する。また、メモリインタフェース部１５３は、演算器１５４の演算結果を出力データとして内部メモリ１４０に書き込む。
【００８１】
演算器１５４は、命令デコーダ１５２とメモリインタフェース部１５３とに接続される。演算器１５４は、命令デコーダ１５２からの制御信号に応じて、メモリインタフェース部１５３から受信したデータを用いた演算を実行する。演算器１５４は、演算結果をメモリインタフェース部１５３に送信する。例えば、演算器１５４は、ＦＰＧＡ（Field-Programmable Gate Array）のＤＳＰ（Digital Signal Processor）によって実現できる。
【００８２】
なお、処理エレメント１５０の機能は、上述に限定されるものではない。例えば、演算器１５４内にレジスタファイルを具備し、レジスタファイル中のレジスタに対する演算を実行できるようにしてもよい。
【００８３】
図１１は、処理エレメント１５０が取り扱う演算命令の構成例（演算命令１８０）を示す概念図である。例えば、演算命令１８０は、８ビットのオペコードＯｐｃ、第１ソースオペランドＲｓ、第２ソースオペランドＲｔ、およびデスティネーションオペランドＲｄ、３２ビットの即値オペランドＩｍｍのフィールドによって構成される。なお、処理エレメント１５０が取り扱う演算命令の構成は、図１１の構成に限定されない。
【００８４】
〔全体制御部〕
図１２は、全体制御部１２０の構成を示すブロック図である。図１２のように、全体制御部１２０は、プログラムカウンタ１２１、コマンドメモリ１２２、コマンドデコーダ１２３、および全体制御部データパス１２４を有する。コマンドデコーダ１２３は、演算ユニット１３−１の処理エレメント１５０に接続される。全体制御部データパス１２４は、演算ユニット１３−ｎの処理エレメント１５０に接続される。全体制御部１２０は、一般的な命令セットプロセッサと同様に動作する。
【００８５】
プログラムカウンタ１２１は、次に実行すべきコマンドを示す値を保存する。コマンドの内容が分岐命令以外の場合、プログラムカウンタ１２１は、自動的にインクリメントされる。一方、コマンドの内容が分岐命令の場合、プログラムカウンタ１２１の値は当該分岐命令に従って変更される。
【００８６】
コマンドメモリ１２２には、命令を実行する主体を示すフラグが含まれるコマンドが格納される。コマンドメモリ１２２は、プログラムカウンタ１２１の値に応じたコマンドをコマンドデコーダ１２３に出力する。
【００８７】
コマンドデコーダ１２３は、コマンドメモリ１２２から出力されたコマンドを解析し、解析結果に応じた制御信号を生成する。コマンドデコーダ１２３は、コマンドを全体制御部１２０の命令として解釈すると、生成した制御信号を全体制御部データパス１２４に出力する。一方、コマンドデコーダ１２３は、コマンドを処理エレメント１５０の命令として解釈すると、生成した制御信号を演算ユニット１３−０の処理エレメント１５０に出力する。
【００８８】
全体制御部データパス１２４は、コマンドデコーダ１２３によって生成された制御信号に従い、コマンドの内容に応じた動作を行う。例えば、全体制御部データパス１２４は、加算や分岐などの動作を行う。なお、全体制御部データパス１２４は、レジスタファイル等の一般的な命令セットプロセッサに具備する要素を含んでいてもよい。また、コマンドの内容が分岐命令の場合、全体制御部データパス１２４は、プログラムカウンタ１２１の値を当該分岐命令に従って変更する。
【００８９】
図１３は、コマンドメモリ１２２に格納されるコマンド２２０の構成例を示す概念図である。図１３の例のコマンド２２０には、１ビットのフラグＰｆと、６４ビットの命令Ｉｎｓｔとが含まれる。フラグＰｆが０の場合は、全体制御部１２０の命令として解釈される。一方、フラグＰｆが１の場合は、処理エレメント１５０の命令として解釈される。そして、フラグＰｆが１のコマンド２２０の場合、コマンドデコーダ１２３は、演算ユニット１３−０の処理エレメント１５０に命令Ｉｎｓｔを送信する。なお、コマンドメモリ１２２に格納されるコマンド２２０の構成は、図１３の構成に限定されない。
【００９０】
また、演算ユニット１３−ｎの処理エレメント１５０から受信される演算命令は、全体制御部データパス１２４のレジスタ等（図示しない）に格納される。なお、演算命令の格納先は、レジスタファイル中の特定のレジスタでもよいし、専用レジスタであってもよい。また、全体制御部データパス１２４は、演算命令の格納するための専用のＦＩＦＯ（First In First Out）を備えてもよいし、レジスタファイル中の格納するレジスタを演算命令中のフラグ等で別途指定できるようにしてもよい。
【００９１】
図１４は、全体制御部１２０の命令２１０の構成例を示す概念図である。例えば、全体制御部１２０の命令２１０は、オペコードＯｐｃ、第１ソースオペランドＲｓ、第２ソースオペランドＲｔ、デスティネーションオペランドＲｄ、即値オペランドＩｍｍのフィールドを含む。図１４の例では、オペコードＯｐｃが８ビット、第１ソースオペランドＲｓが５ビット、第２ソースオペランドＲｔが５ビット、デスティネーションオペランドＲｄが５ビット、即値オペランドＩｍｍが３２ビットである。なお、全体制御部１２０の命令２１０の構成は、図１４の構成に限定されない。例えば、図１３に示す６４ビット幅のＩｎｓｔに、図１４の全体制御部１２０の命令２１０を左詰めで格納してもよい。
【００９２】
以上が、データ処理装置１０の構成要素についての説明である。なお、以上のデータ処理装置１０の構成は一例であって、本実施形態のデータ処理装置１０の機能を発揮できさえすれば、種々の構成を追加・削除してもよい。
【００９３】
（動作）
次に、転送エレメント１３０の動作について図面を参照しながら説明する。図１５は、８つの演算ユニット１３−０〜７を構成する例である。図１５の例では、演算ユニット１３−０〜７のそれぞれに、転送エレメント１３０−０〜７（以下、ＴＥ０〜７）および内部メモリ１４０−０〜７（以下、ＭＥ０〜７）が含まれる。図１６は、図１５の構成において、ＴＥ０〜７が実行するリダクション演算について説明するための概念図である。ただし、ＴＥは転送エレメント（Transfer Element）を示し、ＭＥはメモリ（Memory）を示す。また、後述するＰＥは処理エレメント（Processing Element）を示す。
【００９４】
まず、転送制御部１１０から一段目のＴＥ０に第１の転送パケットが転送される。ＴＥ０に転送されてきた転送パケットは、ＴＥ０の解析回路１３３およびバッファ回路１３２に送信される。また、第１の転送パケットのペイロードデータ「０」は、加算回路１３５に入力される。この段階では、第１の転送パケットのペイロードデータ「０」と加算されるデータが加算回路１３５に入力されていない。そのため、加算回路１３５に入力されたデータ「０」は、第１の転送パケットが選択回路１３６に入力されるタイミングに合わせて選択回路１３６にそのまま出力される。第１の転送パケットがバッファ回路１３２から選択回路１３６に出力されると、加算回路１３５から出力されるデータ「０」と転送パケットのデータ「０」とが同じであるため、第１の転送パケットはそのまま二段目のＴＥ１に転送される。
【００９５】
ＴＥ０は、解析回路１３３を用いて第１の転送パケットを解析し、その第１の転送パケットに含まれるコマンドおよびアドレスに従って、内部メモリＭＥ０のアドレス０ｘ００からデータ「ａ０」を読み出す。ＴＥ０は、内部メモリＭＥ０から読み出したデータ「ａ０」を加算回路１３５に送る。
【００９６】
第１の転送パケットに基づいて読み出されたデータ「ａ０」が加算回路１３５に入力された段階では、第２の転送パケットに含まれるデータ「０」が加算回路１３５に入力される。加算回路１３５は、データ「０」とデータ「ａ０」とを加算し、演算結果データ「ａ０」を選択回路１３６に出力する。
【００９７】
選択回路１３６に演算結果データ「ａ０」が入力される段階で、第２の転送パケットが選択回路１３６に入力される。選択回路１３６は、第２の転送パケットのペイロードデータ「０」を演算結果データ「ａ０」で置換する。その結果、第２の転送パケットのペイロードデータは「ａ０」になる。ＴＥ０は、ペイロードデータとしてデータ「ａ０」を含む第２の転送パケットをＴＥ１に転送する。
【００９８】
以上の処理がＴＥ１〜７で繰り返され、第１の転送パケットに基づいて内部メモリＭＥ０〜７の同じアドレスａｄｄｒから読み出されたデータの値は、第２の転送パケットの値に順次加算されていく。その結果、ＴＥ７から出力される第２の転送パケットの値は、内部メモリＭＥ０〜７の同じアドレスａｄｄｒの値の総和「ａ０＋ａ１＋ａ２＋・・・＋ａ７」になる。
【００９９】
図１７は、図１６を用いて説明した加算演算を内部メモリＭＥ０〜７について行った結果をまとめたものである。図１７のように、転送制御部１１０から送信される転送パケットによって、内部メモリ０〜７のアドレスａｄｄｒ０ｘ０００〜７のそれぞれに格納された値の総和がリダクション演算結果として得られる。
【０１００】
ここで、図面を参照しながら、転送エレメント１３０の動作について説明する。なお、以下の転送エレメント１３０の動作は一例であって、転送エレメント１３０の動作を限定するものではない。
【０１０１】
〔ＴＥ０〕
図１８は、ＴＥ０において、転送パケットｐ１〜６が転送されていく様子をまとめた表である。図１８の例では、サイクル１〜１１について説明し、サイクル１２以降については説明を省略する。
【０１０２】
まず、サイクル１において、転送パケットｐ１が入力データレジスタ１３１に入力される（ｓｔｇ１）。転送パケットｐ１は、転送パケットｐ４にとっての第１の転送パケットである。
【０１０３】
次に、サイクル２において、転送パケットｐ１は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ１のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ２が入力データレジスタ１３１に入力される（ｓｔｇ１）。転送パケットｐ２は、転送パケットｐ５にとっての第１の転送パケットである。
【０１０４】
次に、サイクル３において、転送パケットｐ１が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ１に基づいたアドレス０ｘ００が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ２は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ２のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ３が入力データレジスタ１３１に入力される（ｓｔｇ１）。転送パケットｐ３は、転送パケットｐ６にとっての第１の転送パケットである。
【０１０５】
次に、サイクル４において、転送パケットｐ１が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ００から読み出しデータ「ａ０」が読み出される（ｓｔｇ４）。また、転送パケットｐ２が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ２に基づいたアドレス０ｘ０１が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ３は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ３のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ４が入力データレジスタ１３１に入力される（ｓｔｇ１）。転送パケットｐ４は、転送パケットｐ１にとっての第２の転送パケットである。
【０１０６】
次に、サイクル５において、転送パケットｐ１が選択回路１３６に入力されるとともに、読み出しデータ「ａ０」が加算回路１３５に入力される。また、転送パケットｐ２が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０１から読み出しデータ「ｂ０」が読み出される（ｓｔｇ４）。また、転送パケットｐ３が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ３に基づいたアドレス０ｘ０２が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ４は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ４のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ５が入力データレジスタ１３１に入力される（ｓｔｇ１）。転送パケットｐ５は、転送パケットｐ２にとっての第２の転送パケットである。
【０１０７】
次に、サイクル６において、転送パケットｐ１が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ１のペイロードデータは「０」のままである。また、転送パケットｐ２が選択回路１３６に入力されるとともに、読み出しデータ「ｂ０」が加算回路１３５に入力される。また、転送パケットｐ３が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０２から読み出しデータ「ｃ０」が読み出される（ｓｔｇ４）。また、転送パケットｐ４が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ４に基づいたアドレス０ｘ０３が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ５は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ５のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ６が入力データレジスタ１３１に入力される（ｓｔｇ１）。転送パケットｐ６は、転送パケットｐ２にとっての第２の転送パケットである。
【０１０８】
次に、サイクル７において、転送パケットｐ２が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ２のペイロードデータは「０」のままである。また、転送パケットｐ３が選択回路１３６に入力されるとともに、読み出しデータ「ｃ０」が加算回路１３５に入力される。また、転送パケットｐ４が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０３から読み出しデータ「ｄ０」が読み出される（ｓｔｇ４）。また、転送パケットｐ５が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ５に基づいたアドレス０ｘ０４が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ６は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ６のペイロードデータ「０」が加算回路１３５に入力される。
【０１０９】
次に、サイクル８において、転送パケットｐ３が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ３のペイロードデータは「０」のままである。また、転送パケットｐ４が選択回路１３６に入力されるとともに、読み出しデータ「ｄ０」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ａ０」が入力され、転送パケットｐ４のペイロードデータが「ａ０」に置換される。また、転送パケットｐ５が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０４から読み出しデータ「ｅ０」が読み出される（ｓｔｇ４）。また、転送パケットｐ６が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ６に基づいたアドレス０ｘ０５が内部メモリＭＥ０に入力される（ｓｔｇ３）。
【０１１０】
次に、サイクル９において、転送パケットｐ４が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ４のペイロードデータは「ａ０」に置換されている。また、転送パケットｐ５が選択回路１３６に入力されるとともに、読み出しデータ「ｅ０」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ｂ０」が入力され、転送パケットｐ５のペイロードデータが「ｂ０」に置換される。また、転送パケットｐ６が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレスａｄｄｒ（０ｘ０５）から読み出しデータ「ｆ０」が読み出される（ｓｔｇ４）。
【０１１１】
次に、サイクル１０において、転送パケットｐ５が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ５のペイロードデータは「ｂ０」に置換されている。また、転送パケットｐ６が選択回路１３６に入力されるとともに、読み出しデータ「ｆ０」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ｃ０」が入力され、転送パケットｐ６のペイロードデータの値が「ｃ０」に置換される。
【０１１２】
次に、サイクル１１において、転送パケットｐ６が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ６のペイロードデータは「ｃ０」に置換されている。また、転送パケットｐ６が選択回路１３６に入力されるとともに、読み出しデータ「ｆ０」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ｄ０」が入力される。
【０１１３】
以上が、ＴＥ０のサイクル１〜１１における動作についての説明である。次に、ＴＥ１の動作について説明する。
【０１１４】
〔ＴＥ１〕
図１９は、ＴＥ１において、転送パケットｐ１〜６が転送されていく様子をまとめた表である。図１９の例では、サイクル６〜１６について説明し、サイクル１〜５およびサイクル１７以降については説明を省略する。
【０１１５】
まず、サイクル６において、転送パケットｐ１が入力データレジスタ１３１に入力される（ｓｔｇ１）。
【０１１６】
次に、サイクル７において、転送パケットｐ１は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ１のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ２が入力データレジスタ１３１に入力される（ｓｔｇ１）。
【０１１７】
次に、サイクル８において、転送パケットｐ１が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ１に基づいたアドレス０ｘ００が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ２は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ２のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ３が入力データレジスタ１３１に入力される（ｓｔｇ１）。
【０１１８】
次に、サイクル９において、転送パケットｐ１が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ００から読み出しデータ「ａ１」が読み出される（ｓｔｇ４）。また、転送パケットｐ２が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ２に基づいたアドレス０ｘ０１が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ３は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ３のペイロードデータ「０」が加算回路１３５に入力される。また、転送パケットｐ４が入力データレジスタ１３１に入力される（ｓｔｇ１）。
【０１１９】
次に、サイクル１０において、転送パケットｐ１が選択回路１３６に入力されるとともに、読み出しデータ「ａ１」が加算回路１３５に入力される。また、転送パケットｐ２が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０１から読み出しデータ「ｂ１」が読み出される（ｓｔｇ４）。また、転送パケットｐ３が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ３に基づいたアドレス０ｘ０２が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ４は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ４のペイロードデータ「ａ０」が加算回路１３５に入力される。また、転送パケットｐ５が入力データレジスタ１３１に入力される（ｓｔｇ１）。
【０１２０】
次に、サイクル１１において、転送パケットｐ１が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ１のペイロードデータは「０」のままである。また、転送パケットｐ２が選択回路１３６に入力されるとともに、読み出しデータ「ｂ１」が加算回路１３５に入力される。また、転送パケットｐ３が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０２から読み出しデータ「ｃ１」が読み出される（ｓｔｇ４）。また、転送パケットｐ４が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ４に基づいたアドレス０ｘ０３が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ５は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ５のペイロードデータ「ｂ０」が加算回路１３５に入力される。また、転送パケットｐ６が入力データレジスタ１３１に入力される（ｓｔｇ１）。
【０１２１】
次に、サイクル１２において、転送パケットｐ２が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ２のペイロードデータは「０」のままである。また、転送パケットｐ３が選択回路１３６に入力されるとともに、読み出しデータ「ｃ１」が加算回路１３５に入力される。また、転送パケットｐ４が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０３から読み出しデータ「ｄ１」が読み出される（ｓｔｇ４）。また、転送パケットｐ５が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ５に基づいたアドレス０ｘ０４が内部メモリＭＥ０に入力される（ｓｔｇ３）。また、転送パケットｐ６は、第１バッファレジスタ１３２−１に入力されるとともに、解析回路１３３に入力される（ｓｔｇ２）。このとき、転送パケットｐ６のペイロードデータ「ｃ０」が加算回路１３５に入力される。
【０１２２】
次に、サイクル１３において、転送パケットｐ３が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ３のペイロードデータは「０」のままである。また、転送パケットｐ４が選択回路１３６に入力されるとともに、読み出しデータ「ｄ１」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ａ０＋ａ１」が入力され、転送パケットｐ４のペイロードデータが「ａ０＋ａ１」に置換される。また、転送パケットｐ５が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０４から読み出しデータ「ｅ１」が読み出される（ｓｔｇ４）。また、転送パケットｐ６が第２バッファレジスタ１３２−２に入力されるとともに、転送パケットｐ６に基づいたアドレス０ｘ０５が内部メモリＭＥ０に入力される（ｓｔｇ３）。このとき、転送パケットｐ５のペイロードデータ「ｄ０」が加算回路１３５に入力される。
【０１２３】
次に、サイクル１４において、転送パケットｐ４が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ４のペイロードデータは「ａ０＋ａ１」に置換されている。また、転送パケットｐ５が選択回路１３６に入力されるとともに、読み出しデータ「ｅ１」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ｂ０＋ｂ１」が入力され、転送パケットｐ５のペイロードデータが「ｂ０＋ｂ１」に置換される。また、転送パケットｐ６が第３バッファレジスタ１３２−３に入力されるとともに、内部メモリＭＥ０のアドレス０ｘ０５から読み出しデータ「ｆ１」が読み出される（ｓｔｇ４）。
【０１２４】
次に、サイクル１５において、転送パケットｐ５が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ５のペイロードデータは「ｂ０＋ｂ１」に置換されている。また、転送パケットｐ６が選択回路１３６に入力されるとともに、読み出しデータ「ｆ１」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ｃ０＋ｃ１」が入力され、転送パケットｐ６のペイロードデータが「ｃ０＋ｃ１」に置換される。
【０１２５】
次に、サイクル１６において、転送パケットｐ６が出力データレジスタ１３７に入力され、次段のＴＥ１に転送される。転送パケットｐ６のペイロードデータは「ｃ０＋ｃ１」に置換されている。また、転送パケットｐ６が選択回路１３６に入力されるとともに、読み出しデータ「ｆ１」が加算回路１３５に入力される。このとき、選択回路１３６には、加算回路１３５の演算結果データ「ｄ０＋ｄ１」が入力される。
【０１２６】
以上が、ＴＥ１のサイクル６〜１６における動作についての説明である。ＴＥ２〜７の動作についての説明は省略する。
【０１２７】
〔パイプライン動作〕
次に、データ処理装置１０が転送エレメント１３０と処理エレメント１５０とを連動させてパイプライン処理を実行する例について説明する。
【０１２８】
図２０は、処理エレメント１５０が行列積を繰り返す例について説明するための概念図である。なお、処理エレメント１５０が行列積を実行する手順の詳細については説明を省略する。
【０１２９】
図２０において、まず、転送エレメント１３０（ＴＥ）は、行列Ａ１および行列Ｂ１の要素を読み出す指示（ｒｅａｄ＿Ａ１およびｒｅａｄ＿Ｂ１）を処理エレメント１５０（ＰＥ）に出力する。処理エレメント１５０（ＰＥ）は、内部メモリ１４０から行列Ａ１および行列Ｂ１の要素を読み出すと、行列Ａ１と行列Ｂ１との行列積を演算し、演算結果である行列Ｃ１を生成する。処理エレメント１５０（ＰＥ）は、演算結果である行列Ｃ１の要素を内部メモリ１４に書き込む。転送エレメント１３０（ＴＥ）は、内部メモリ１４から行列Ｃ１の要素を読み出し、読み出したデータを第１の環状バス１７経由で転送制御部１１０に向けて送信する。
【０１３０】
同様に、転送エレメント１３０（ＴＥ）は、行列Ａ２および行列Ｂ２の要素を読み出す指示（ｒｅａｄ＿Ａ２およびｒｅａｄ＿Ｂ２）を処理エレメント１５０（ＰＥ）に出力する。処理エレメント１５０（ＰＥ）は、内部メモリ１４０から行列Ａ２および行列Ｂ２の要素を読み出すと、行列Ａ２と行列Ｂ２との行列積を演算し、演算結果である行列Ｃ２を生成する。処理エレメント１５０（ＰＥ）は、演算結果である行列Ｃ２の要素を内部メモリ１４に書き込む。転送エレメント１３０（ＴＥ）は、内部メモリ１４から行列Ｃ２の要素を読み出し、読み出したデータを第１の環状バス１７経由で転送制御部１１０に向けて送信する。行列Ａ３および行列Ｂ３以降については説明を省略する。
【０１３１】
図２１は、処理エレメント１５０が行列積を繰り返し、転送エレメント１３０が処理エレメントの演算結果の総和を取るリダクション演算を実行する例について説明するための概念図である。
【０１３２】
図２１において、まず、転送エレメント１３０（ＴＥ）は、行列Ａ１および行列Ｂ１の要素を読み出す指示（ｒｅａｄ＿Ａ１およびｒｅａｄ＿Ｂ１）を処理エレメント１５０（ＰＥ）に出力する。処理エレメント１５０（ＰＥ）は、内部メモリ１４０から行列Ａ１および行列Ｂ１の要素を読み出すと、行列Ａ１と行列Ｂ１との行列積を演算し、演算結果である行列Ｃ１を生成する。処理エレメント１５０（ＰＥ）は、演算結果である行列Ｃ１の要素を内部メモリ１４に書き込む。転送エレメント１３０（ＴＥ）は、内部メモリ１４から行列Ｃ１の要素を読み出し、行列Ｃ１の同じ列を構成する要素の総和を取るリダクション演算（Ｒｅｄｕｃｔｉｏｎ＿ａｄｄ）を実行する。転送エレメント１３０（ＴＥ）は、リダクション演算（Ｒｅｄｕｃｔｉｏｎ＿ａｄｄ）を実行しながら、第１の環状バス１７経由で転送制御部１１０に向けて転送パケットを転送する。
【０１３３】
同様に、転送エレメント１３０（ＴＥ）は、行列Ａ２および行列Ｂ２の要素を読み出す指示（ｒｅａｄ＿Ａ２およびｒｅａｄ＿Ｂ２）を処理エレメント１５０（ＰＥ）に出力する。処理エレメント１５０（ＰＥ）は、内部メモリ１４０から行列Ａ２および行列Ｂ２の要素を読み出すと、行列Ａ２と行列Ｂ２との行列積を演算し、演算結果である行列Ｃ２を生成する。処理エレメント１５０（ＰＥ）は、演算結果である行列Ｃ１の要素を内部メモリ１４に書き込む。転送エレメント１３０（ＴＥ）は、内部メモリ１４から行列Ｃ２の要素を読み出し、行列Ｃ２の同じ列を構成する要素の総和を取るリダクション演算（Ｒｅｄｕｃｔｉｏｎ＿ａｄｄ）を実行する。転送エレメント１３０（ＴＥ）は、リダクション演算（Ｒｅｄｕｃｔｉｏｎ＿ａｄｄ）を実行しながら、第１の環状バス１７経由で転送制御部１１０に向けて転送パケットを転送する。行列Ａ３および行列Ｂ３以降については説明を省略する。
【０１３４】
本実施形態においては、転送エレメント１３０（ＴＥ）がパケットを転送するタイミングと、処理エレメント１５０（ＰＥ）が演算を実行するタイミングとを連動させる。そのため、本実施形態によれば、転送エレメント１３０（ＴＥ）と処理エレメント１５０（ＰＥ）とが動作する際の互いの待機時間を低減できる。
【０１３５】
以上が、本実施形態のデータ処理装置の動作に関する説明である。なお、上記の例においては、小さいサイズの行列を例に挙げて説明してきたが、演算ユニットの数を増やすことによって、より大きなサイズの行列に対しても同様の演算を実行できる。いずれの場合においても、本実施形態のデータ処理装置を構成する処理エレメントに含まれる演算器は、毎サイクル連続して演算を行うことができる。また、本実施形態のデータ処理装置によれば、処理エレメントが一連の処理を実行している間に、転送エレメントがリダクション演算などを実行することができるため、無駄な待機時間を低減できる。すなわち、本実施形態によれば、パイプライン処理の実行中に遊休状態のエレメントが増えることがない。
【０１３６】
以上のように、本実施形態のデータ処理装置は、第１の環状バス、複数の転送エレメント、転送制御部、および内部メモリを備える。複数の転送エレメントは、第１の環状バスによって直列に接続される。転送制御部は、第１の環状バスを介して少なくとも二つの転送エレメントに接続され、第１の環状バスにおいて転送される転送パケットの入出力を制御する。複数の内部メモリは、複数の転送エレメントのいずれかに接続される。
【０１３７】
転送エレメントは、第１の転送パケットに後続して転送されてきた第２の転送パケットに演算コマンドが含まれる場合、以下のように動作する。まず、転送エレメントは、前段第２の転送パケットのペイロードデータである第１のデータと、先行する第１の転送パケットに基づいて内部メモリから読み出された第２のデータとを用いた演算を実行する。そして、転送エレメントは、第１のデータと第２のデータの演算結果データで第２の転送パケットのペイロードデータを置換し、ペイロードデータが置換された第２の転送パケットを後続に転送する。
【０１３８】
例えば、転送エレメントは、第１の転送パケットに含まれるコマンドおよびアドレスに従って、内部メモリのアドレスに格納されるデータを第２のデータとして読み出す。転送エレメントは、読み出した第２のデータと、第２の転送パケットのペイロードデータである第１のデータとを用いて演算を実行する。
【０１３９】
例えば、複数の転送エレメントは、第１の転送パケットに含まれるコマンドおよびアドレスに従って、複数の内部メモリの同じアドレスに格納されるデータを第２のデータとして読み出す。複数の転送エレメントは、読み出した第２のデータと、第２の転送パケットのペイロードデータである第１のデータとを加算した値で第２の転送パケットに含まれるペイロードデータを置換するリダクション演算を実行する。
【０１４０】
例えば、本実施形態のデータ処理装置は、入力データレジスタ、バッファレジスタ、デコーダ、第１メモリインタフェースレジスタ、第２メモリインタフェースレジスタ、加算器、選択器、および出力データレジスタを有する。入力データレジスタには、第１の環状バスを介して転送パケットが入力される。バッファレジスタは、少なくとも一つのレジスタで構成される。バッファレジスタには、入力データレジスタから転送パケットが入力される。デコーダには、入力データレジスタから転送パケットが入力される。デコーダは、転送パケットを解析し、解析した結果に基づいて内部メモリへのアクセス指示を出力する。第１メモリインタフェースレジスタは、デコーダからアクセス指示が入力される。第１メモリインタフェースレジスタは、デコーダによって解析されたアクセス指示に基づいて内部メモリにアクセスする。第２メモリインタフェースレジスタは、アクセス指示に基づいて内部メモリから第２のデータを読み出す。加算器は、第２メモリインタフェースレジスタが読み出した第１のデータと、アクセス指示の供給元の転送パケットに後続する転送パケットのペイロードデータである第１のデータとを加算し、加算結果を演算結果データとして出力する。選択器には、バッファレジスタを経由した転送パケットと、内部メモリから読み出された第２のデータと、加算器からの演算結果データとが入力される。選択器は、アクセス指示の供給元の転送パケットに後続する転送パケットのペイロードデータを演算結果データで置換する。出力データレジスタは、転送パケットを出力する。
【０１４１】
例えば、本実施形態のデータ処理装置は、第２の環状バス、複数の処理エレメント、および全体制御部を備える。第２の環状バスは、第１の環状バスとは独立したバスである。複数の処理エレメントは、第２の環状バスによって直列に接続される。全体制御部は、第２の環状バスを介して少なくとも二つの処理エレメントに接続され、第２の環状バスにおいて転送される演算命令の入出力を制御する。
【０１４２】
本実施形態のデータ処理装置によれば、第１の環状バスと第２の環状バスとを独立して制御することができる。そのため、演算処理と転送処理とを並行して実行することができる。すなわち、本実施形態のデータ処理装置は、ある行列積演算を行うのと同時に、次段の行列積演算のための行列の転送や、前段の行列積演算の出力である行列の転送を行うことができる。さらに、本実施形態のデータ処理装置は、行列積演算の出力の総和を取るようなリダクション演算を実行できる。
【０１４３】
また、本実施形態のデータ処理装置に含まれる全体制御部および処理エレメントの内部は、パイプラインプロセッサとして実現してもよい。全体制御部および処理エレメントの内部をパイプラインプロセッサとして実現すれば、演算のスループットを高めることができる。この場合、例えばＭＡＣＩ命令ではｒｓとｒｄに同時にアクセスする必要があるなど、内部メモリへ同時アクセスする必要があるため、内部メモリを複数バンク構成として同時アクセスを可能にしてもよい。
【０１４４】
以上の本実施形態によれば、データの転送と演算とを同時に実行することにより、演算器の稼働率を維持できるという第１の効果が得られる。また、本実施形態によれば、処理エレメントの演算内容を演算命令として環状バスを通じて送信することにより、クロック信号およびリセット信号のための信号線を除いて長い配線がなくなるため、動作周波数を向上できるという第２の効果が得られる。すなわち、本実施形態によれば、データ転送のためのバスとデータ処理のためのバスとを独立させることによって、行列積やベクトルの内積を効率的に演算できる。
【０１４５】
さらに、本実施形態によれば、処理エレメントの演算結果を転送エレメントにおいてリダクション演算することができる。そのため、本実施形態によれば、処理エレメントにおける演算に並行させて、転送エレメントにおいて処理エレメントの演算結果のリダクション演算を実行でき、転送エレメントの待機時間を低減できる。
【０１４６】
すなわち、本実施形態によれば、複数の処理を並列して継続的かつ効率的に実行できる。
【０１４７】
本実施形態のデータ処理装置は、大規模な行列演算を行うビッグデータの解析処理等のアプリケーションに対し、ＦＰＧＡ（Field-Programmable Gate Array）上で柔軟かつ効率的に実行する用途に適用できる。また、本実施形態のデータ処理装置は、ＦＰＧＡ上のみならず、専用回路（ＡＳＩＣ：Application Specific Integrated Circuit）としても実現可能である。
【０１４８】
（第２の実施形態）
次に、本発明の第２の実施形態のデータ処理装置について図面を参照しながら説明する。本実施形態のデータ処理装置は、第１の環状バスが複線化された構成を有する。本実施形態においては、第１の環状バスを複線化し、転送エレメントの処理を効率化する例について説明し、第２環状バスや処理エレメントについては説明を省略する。
【０１４９】
図２２は、本実施形態のデータ処理装置の構成の一部を示すブロック図である。図２２には、転送制御部２１、転送エレメント群２３、内部メモリ群２４、および第１の環状バス２７を図示している。転送エレメント群２３は、複数の転送エレメント２３０−１〜ｎによって構成される（ｎは自然数）。内部メモリ群２４は、複数の内部メモリ２４０−０〜４ｎ＋３によって構成される。第１の環状バス２７は、複数の環状バス２７０−０〜３によって構成される。なお、転送エレメント２３０、内部メモリ２４０、および環状バス２７０の数については、図２２の例に限定されず、任意に設定できる。また、第２環状バスや処理エレメントの数については、単数であってもよいし、複数であってもよく、特に限定は加えない。
【０１５０】
転送エレメント群２３を構成する複数の転送エレメント２３０−０〜ｎは、第１の環状バス２７によって直列に接続される。複数の転送エレメント２３０−０〜ｎは、第１の実施形態の転送エレメント１３０と同様の構成を有する。複数の転送エレメント２３０−０〜ｎのそれぞれは、内部メモリ群２４を構成する複数の内部メモリ２４０−０〜４ｎ＋３のいずれかに接続される。
【０１５１】
図２２の例では、転送エレメント２３０−０（ＴＥ０）には内部メモリ２４０−０〜３が接続される。同様に、転送エレメント２３０−１（ＴＥ１）には内部メモリ２４０−４〜７が接続され、転送エレメント２３０−２（ＴＥ２）には内部メモリ２４０−８〜１１が接続される。そして、転送エレメント２３０−ｎ（ＴＥｎ）には内部メモリ２４０−４ｎ〜４ｎ＋３が接続される。
【０１５２】
第１の環状バス２７を構成する複数の環状バス２７０−０〜３のそれぞれは、複数の転送エレメント２３０−０〜ｎのそれぞれに接続される複数の内部メモリ２４０−０〜４ｎ＋３に対応させて接続される。環状バス２７０−０には、内部メモリ２４０−０、４、８、・・・、４ｎが接続される。環状バス２７０−１には、内部メモリ２４０−１、５、９、・・・、４ｎ＋１が接続される。環状バス２７０−２には、内部メモリ２４０−２、６、１０、・・・、４ｎ＋２が接続される。環状バス２７０−２には、内部メモリ２４０−２、６、１０、・・・、４ｎ＋２が接続される。なお、複数の環状バス２７０−０〜３と、複数の内部メモリ２４０−０〜４ｎ＋３との接続関係は、上記の例に限定されず、任意に設定できる。
【０１５３】
転送制御部２１は、複線化された第１の環状バス２７を介して、転送エレメント２３０−０（ＴＥ０）の入力に接続される。また、転送制御部２１は、複線化された第１の環状バス２７を介して、転送エレメント２３０−ｎ（ＴＥｎ）の出力に接続される。
【０１５４】
図２３は、転送制御部２１の構成の一例を示すブロック図である。図２３のように、転送制御部２１は、指示レジスタ２１１、状態レジスタ２１２、制御回路２１３、および加算回路２１５を有する。転送制御部２１は、第１の実施形態の転送制御部１１０に加算回路２１５を追加した構成を有する。
【０１５５】
制御回路２１３は、外部メモリ２００に接続される。また、制御回路２１３は、第１の環状バス２７を介して、転送エレメント２３０−１の入力に接続される。さらに、制御回路２１３は、加算回路２１５の出力に接続される。指示レジスタ２１１および状態レジスタ２１２は、全体制御部２２に接続される。なお、指示レジスタ２１１、状態レジスタ２１２、制御回路２１３、および全体制御部２２の構成は、第１の実施形態の転送制御部１１０の対応する構成と同様であるため、詳細な説明は省略する。外部メモリ２００も、第１の実施形態の外部メモリ１００と同様である。
【０１５６】
図２４は、転送制御部２１に含まれる加算回路２１５の構成例を示すブロック図である。加算回路２１５は、第１加算器２５１、第２加算器２５２、および第３加算器２５３を含む。
【０１５７】
第１加算器２５１には、環状バス２７０−０〜１が接続される。第１加算器２５１には、環状バス２７０−０〜１を介して、転送エレメント２３０−ｎ（ＴＥｎ）から２つの転送パケットが入力される。環状バス２７０−０を介して第１加算器２５１に入力される転送パケットのペイロードデータは、内部メモリ２４０−０、４、８、・・・、４ｎに格納されたデータを用いた演算結果（第１の演算結果とも呼ぶ）に置換されている。環状バス２７０−１を介して第１加算器２５１に入力される転送パケットのペイロードデータは、内部メモリ２４０−１、５、９、・・・、４ｎ＋１に格納されたデータを用いた演算結果（第２の演算結果とも呼ぶ）に置換されている。第１加算器２５１は、第１の演算結果と第２の演算結果とを加算することによって第１の加算結果を計算する。第１加算器２５１は、算出した第１の加算結果を第３加算器２５３に出力する。
【０１５８】
第２加算器２５２には、環状バス２７０−２〜３が接続される。第２加算器２５２には、環状バス２７０−２〜３を介して、転送エレメント２３０−ｎ（ＴＥｎ）から２つの転送パケットが入力される。環状バス２７０−２を介して第２加算器２５２に入力される転送パケットのペイロードデータは、内部メモリ２４０−２、６、１０、・・・、４ｎ＋２に格納されたデータを用いた演算結果（第３の演算結果とも呼ぶ）に置換されている。環状バス２７０−３を介して第２加算器２５２に入力される転送パケットのペイロードデータは、内部メモリ２４０−３、７、１１、・・・、４ｎ＋３に格納されたデータを用いた演算結果（第４の演算結果とも呼ぶ）に置換されている。第２加算器２５２は、第３の演算結果と第４の演算結果とを加算することによって第２の加算値を計算する。第２加算器２５２は、算出した第２の加算値を第３加算器２５３に出力する。
【０１５９】
第３加算器２５３には、第１加算器２５１から第１の加算値が入力され、第２加算器２５２から第２の加算値が入力される。第３加算器２５３は、入力された第１の加算値と第２の加算値とを加算することによって総和データを計算する。第３加算器２５３は、算出した総和データを制御回路２１３に出力する。
【０１６０】
以上のように、本実施形態のデータ処理装置は、複線化された第１の環状バスを有する。複数の内部メモリは、第１の環状バスを構成する複数の環状バスのそれぞれに対応させて複数の転送エレメントのそれぞれに接続される。複数の転送エレメントは、第１の環状バスを構成する複数の環状バスのそれぞれにおいて転送される複数の転送パケットに基づいて、複数の内部メモリにアクセスする。また、転送制御部は、第１の環状バスを構成する複数の環状バスを介して同じタイミングで転送される複数の転送パケットのペイロードデータを合算する。
【０１６１】
本実施形態のデータ処理装置は、複数の転送パケットを並行して処理できる。そのため、本実施形態のデータ処理装置によれば、第１の実施形態のデータ処理装置と比べて、より効率的に複数の処理を並列して継続的に実行できる。
【０１６２】
（第３の実施形態）
次に、本発明の第３の実施形態に係るデータ処理装置の転送エレメントについて図面を参照しながら説明する。本実施形態の転送エレメントは、第１の実施形態のデータ処理装置に含まれる転送エレメントを概念化した構成を有する。なお、本実施形態においては、転送エレメント以外の構成については簡略化または省略する。また、本実施形態においては、複数の転送エレメントが第１の環状バスを介して直列に接続されているものとし、転送制御部については説明を省略する。
【０１６３】
図２５は、本実施形態のデータ処理装置の転送エレメント３３０の構成の一例を示すブロック図である。図２５のように、転送エレメント３３０は、入力回路３３１、バッファ回路３３２、解析回路３３３、メモリインタフェース回路３３４、演算回路３３５、選択回路３３６、および出力回路３３７を備える。転送エレメント３３０は、第１の環状バス３７を介して、隣接する転送エレメント３３０に接続される。また、転送エレメント３３０は、メモリインタフェース回路３３４を介して内部メモリ３４０に接続される。
【０１６４】
入力回路３３１には、第１の環状バス３７を介して、前段の転送エレメント３３０から転送パケットが入力される。入力回路３３１に入力される転送パケットは、バッファ回路３３２および解析回路３３３に出力される。また、入力回路３３１に入力される転送パケットのペイロードデータは、データｄｉｎ１として演算回路３３５に入力される。
【０１６５】
バッファ回路３３２には、入力回路３３１から転送パケットが入力される。バッファ回路３３２は、入力された転送パケットを何段階か保持してから選択回路３３６に出力する。
【０１６６】
解析回路３３３には、入力回路３３１から転送パケットが入力される。解析回路３３３は、転送パケットを解析し、解析結果に応じた内部メモリ３４０へのアクセス指示をメモリインタフェース回路３３４に出力する。
【０１６７】
メモリインタフェース回路３３４には、解析回路３３３から内部メモリ３４０へのアクセス指示が入力される。メモリインタフェース回路３３４は、解析回路３３３から読み出し指示を受信すると、受信した読み出し指示に従って内部メモリ１４０からデータを読み出し、読み出したデータを演算回路３３５および選択回路３３６に出力する。また、メモリインタフェース回路３３４は、解析回路３３３から書き込み指示を受信すると、受信した書き込み指示に従って内部メモリ３４０にデータを書き込む。
【０１６８】
演算回路３３５には、転送データのペイロードデータが入力回路３３１からデータｄｉｎ１として入力される。また、演算回路３３５には、メモリインタフェース回路３３４からの読み出しデータｒｄがデータｄｉｎ２として入力される。演算回路３３５は、データｄｉｎ１とデータｄｉｎ２とを用いて演算を実行し、その演算結果データｄｏｕｔを選択回路３３６に出力する。例えば、演算回路３３５は、加算や積算などを実行する。
【０１６９】
選択回路３３６には、バッファ回路３３２からの転送パケットと、メモリインタフェース回路３３４からの読み出しデータｒｄと、演算回路３３５からの演算結果データｄｏｕｔとが入力される。選択回路３３６は、演算回路３３５の演算結果データｄｏｕｔで、転送パケットに含まれるペイロードデータを置換する。選択回路３３６は、ペイロードデータが演算結果データｄｏｕｔで置換された転送パケットを出力回路３３７に出力する。
【０１７０】
出力回路３３７には、選択回路３３６から転送パケットが入力される。出力回路３３７は、選択回路３３６から入力される転送パケットを次段の転送エレメント３３０に転送する。
【０１７１】
以上が、転送エレメント３３０の構成についての説明である。なお、図２５に示す転送エレメント３３０の構成は一例であって、本実施形態を限定するものではない。
【０１７２】
（動作）
次に、転送エレメント３３０のリダクション演算に関する動作の一例について図面を参照しながら説明する。図２６は、転送エレメント３３０のリダクション演算に関する動作について説明するためのフローチャートである。なお、図２６のフローチャートに沿った説明においては、転送エレメント３３０を動作主体とする。
【０１７３】
図２６において、まず、転送エレメント３３０は、前段から転送される第１の転送パケットに含まれるコマンドに応じて、内部メモリ３４０から第１のデータを読み出す（ステップＳ３１）。
【０１７４】
次に、転送エレメント３３０は、内部メモリ３４０から読み出した第１のデータと、第１の転送パケットに後続する第２の転送パケットに含まれるペイロードデータ（第２のデータ）とを用いて演算を実行する（ステップＳ３２）。
【０１７５】
次に、転送エレメント３３０は、第１のデータと第２のデータとの演算結果データで第２の転送パケットのペイロードデータを置換する（ステップＳ３３）。
【０１７６】
そして、転送エレメント３３０は、ペイロードデータが置換された第２の転送パケットを後続に転送する（ステップＳ３４）。
【０１７７】
以上が、転送エレメント３３０のリダクション演算に関する動作についての説明である。なお、図２６のフローチャートに沿った処理をコンピュータに実行させるプログラムも本実施形態に含む。また、図２６のフローチャートに沿った処理をコンピュータに実行させるプログラムを記録するプログラム記録媒体も本実施形態に含む。
【０１７８】
以上のように、本実施形態の転送エレメントは、入力回路、バッファ回路、解析回路、メモリインタフェース回路、演算回路、選択回路、および出力回路を有する。入力回路には、転送パケットが入力される。バッファ回路は、転送パケットを少なくとも１段階保持する。解析回路は、転送パケットを解析し、解析した結果に基づいて内部メモリへのアクセス指示を出力する。メモリインタフェース回路は、アクセス指示に従って内部メモリにアクセスする。演算回路は、アクセス指示の供給元の転送パケットに後続する転送パケットのペイロードデータである第１のデータと、アクセス指示に従って内部メモリから読み出された第２のデータとを用いて演算を実行する。選択回路には、バッファ回路を経由した転送パケットのデータと、内部メモリから読み出された第２のデータと、演算回路から出力される演算結果データとが入力される。選択回路は、入力されたいずれかのデータを選択し、選択したデータをペイロードデータとして含む転送パケットを出力する。出力回路は、選択回路によって選択されるデータをペイロードデータとして含む転送パケットを出力する。
【０１７９】
本実施形態のデータ処理装置によれば、複数の処理を並列して継続的かつ効率的に実行できる。
【０１８０】
以上、実施形態を参照して本発明を説明してきたが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１８１】
１０    データ処理装置
１１    制御部
１３    演算ユニット
１７    第１の環状バス
１８    第２の環状バス
２１    転送制御部
２２    全体制御部
２３    転送エレメント群
２４    内部メモリ群
２７    第１の環状バス
３７    第１の環状バス
１１０    転送制御部
１１１    指示レジスタ
１１２    状態レジスタ
１１３    制御回路
１１４    メモリ
１２０    全体制御部
１２１    プログラムカウンタ
１２２    コマンドメモリ
１２３    コマンドデコーダ
１２４    全体制御部データパス
１３０    転送エレメント
１３１    入力データレジスタ
１３２    バッファ回路
１３３    解析回路
１３４    メモリインタフェース回路
１３５    加算回路
１３６    選択回路
１３７    出力データレジスタ
１４０    内部メモリ
１４１    デュアルポートメモリ
１４２、１４３    ポート
１５０    処理エレメント
１５１    環状バスレジスタ
１５２    命令デコーダ
１５３    メモリインタフェース部
１５４    演算器
２１１    指示レジスタ
２１２    状態レジスタ
２１３    制御回路
２１５    加算回路
２３０    転送エレメント
２４０    内部メモリ
２５１    第１加算器
２５２    第２加算器
２５３    第３加算器
２７０    環状バス
３３０    転送エレメント
３３１    入力回路
３３２    バッファ回路
３３３    解析回路
３３４    メモリインタフェース回路
３３５    演算回路
３３６    選択回路
３３７    出力回路
【図１】
2019220003.tif 000003
【図２】
2019220003.tif 000004
【図３】
2019220003.tif 000005
【図４】
2019220003.tif 000006
【図５】
2019220003.tif 000007
【図６】
2019220003.tif 000008
【図７】
2019220003.tif 000009
【図８】
2019220003.tif 000010
【図９】
2019220003.tif 000011
【図１０】
2019220003.tif 000012
【図１１】
2019220003.tif 000013
【図１２】
2019220003.tif 000014
【図１３】
2019220003.tif 000015
【図１４】
2019220003.tif 000016
【図１５】
2019220003.tif 000017
【図１６】
2019220003.tif 000018
【図１７】
2019220003.tif 000019
【図１８】
2019220003.tif 000020
【図１９】
2019220003.tif 000021
【図２０】
2019220003.tif 000022
【図２１】
2019220003.tif 000023
【図２２】
2019220003.tif 000024
【図２３】
2019220003.tif 000025
【図２４】
2019220003.tif 000026
【図２５】
2019220003.tif 000027
【図２６】
2019220003.tif 000028