(57)【特許請求の範囲】
【請求項１】
行列演算を実行する行列演算装置であって、
前記行列演算のための列データである第１の入力と行データである第２の入力に対して第１の演算を行って前記行列演算の演算結果の要素成分を出力する第１の演算器と、前記第１の演算器の演算結果を累積加算するアキュムレータとを有する複数のノードを、
を有し、
各ノードは、前記行列演算の演算対象の２つの行列の一方の前記列データを入力する第１の入力端と、前記２つの行列の他方の前記行データを入力する第２の入力端と、入力された前記列データを出力する第１の出力端と、入力された前記行データを出力する第２の出力端と、を有し、
前記複数のノードを含むブロックは、複数あり、
前記複数のブロックは、前段ブロックと、後段ブロックとを含み、
前記後段ブロックでは、前記前段ブロックに含まれる各ノードの前記アキュムレータの累積加算結果と、前記前段ブロック以外から入力とのいずれかを選択して出力する第２の選択回路を介して、前記複数のノードの前記第２の入力端に前記行データが入力される行列演算装置。
【請求項２】
行列演算を実行する行列演算装置であって、
前記行列演算のための列データである第１の入力と行データである第２の入力に対して第１の演算を行って前記行列演算の演算結果の要素成分を出力する第１の演算器と、前記第１の演算器の演算結果を累積加算するアキュムレータとを有する複数のノードを、を有し、
各ノードは、前記行列演算の演算対象の２つの行列の一方の前記列データを入力する第１の入力端と、前記２つの行列の他方の前記行データを入力する第２の入力端と、入力された前記列データを出力する第１の出力端と、入力された前記行データを出力する第２の出力端と、を有し、
前記複数のノードのうち、後段のノードは、前記第２の入力端の入力と、前記アキュムレータの累積加算結果とのいずれかを選択して出力する第１の選択回路とを有し、
前記第２の出力端は、前記第１の選択回路を介して前記アキュムレータの前記累積加算結果を出力する行列演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、行列演算装置に関する。
【背景技術】
【０００２】
従来、行列演算は、画像処理、認識処理などの各種処理において広く行われる。行列演算を行うための装置として、例えば、シストリック・アレイ、コンフィギュラブル・アレイ・プロセッサなどがある。
【０００３】
シストリック・アレイは、同一の回路を規則的に配置して、パイプライン処理と並列処理を行うようにしたシステムである。コンフィギュラブル・アレイ・プロセッサは、複数のノードと、ノード間の接続を変更するための複数のスイッチ部を有するプロセッサである。
【０００４】
しかし、シストリック・アレイでは、入力に対する演算が所定のサイクルで実行され、かつ各サイクルの演算結果が次のサイクルでそのまま入力として利用されるように構成され、装置全体で演算が繰り返し行われるため、所望の行列演算結果を得るまでのデータ転送量が多いという問題がある。
【０００５】
また、コンフィギュラブル・アレイ・プロセッサでは、ノード間の配線ネットワークの接続状態を切り替えるためのスイッチ回路が多数必要となるため、装置全体の回路規模が大きくなるという問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００９−５３５７２１号公報
【非特許文献】
【０００７】
【非特許文献１】クン、エイチ・ティ(Kung, H.T)著、「何故、シストリック・アーキテクチャ？（Why systolic architectures?）アイトリプルイー・コンピュータ(IEEE Computer)、  １５巻１号(Volume:15,  Issue: 1), 1982年
【非特許文献２】スナイダー、エル(Snyder, L.）著、「コンフィギュラブル、高並列計算機への招待（Introduction to the configurable, highly parallel computer）, アイトリプルイー・コンピュータ(IEEE Computer)、１５巻１号(Volume:15,  Issue: 1), 1982年
【発明の概要】
【発明が解決しようとする課題】
【０００８】
そこで、実施形態は、演算結果を得るためのデータ転送量が少なく、かつ装置全体の回路規模が小さい行列演算装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施形態によれば、行列演算を実行する行列演算装置であって、 前記行列演算のための列データである第１の入力と行データである第２の入力に対して第１の演算を行って前記行列演算の演算結果の要素成分を出力する第１の演算器と、前記第１の演算器の演算結果を累積加算するアキュムレータとを有する複数のノードを、を有し、各ノードは、前記行列演算の演算対象の２つの行列の一方の前記列データを入力する第１の入力端と、前記２つの行列の他方の前記行データを入力する第２の入力端と、入力された前記列データを出力する第１の出力端と、入力された前記行データを出力する第２の出力端と、を有し、前記複数のノードのうち、後段のノードは、前記第２の入力端の入力と、前記アキュムレータの累積加算結果とのいずれかを選択して出力する第１の選択回路とを有し、 前記第２の出力端は、前記第１の選択回路を介して前記アキュムレータの前記累積加算結果を出力する行列演算装置が提供される。
【図面の簡単な説明】
【００１０】
【図１】本実施形態に係わる行列演算システムの構成図である。
【図２】本実施形態に係わるノードの構成を示す回路図である。
【図３】本実施形態に係わる、図２の構成とは異なる構成を有する他のノードの構成を示す回路図である。
【図４】本実施形態に係わるブロック３１の構成を示すブロック図である。
【図５】本実施形態に係わるアレイ１２の構成を示すブロック図である。
【図６】本実施形態に係わる、ノード２１の動作状態を説明するための図である。
【図７】本実施形態に係わる、行列Bと行列Aの行列積B×Aの演算とその演算結果の行列Sの出力を説明するための図である。
【図８】図７に示した動作状態の３クロック後の状態を説明するための図である。
【図９】図８に示した動作状態の３クロック後の状態を説明するための図である。
【図１０】本実施形態に係わる、１６×１６行列積の演算を行う場合を説明するための図である。
【図１１】本実施形態に係わる、８×８行列積の４並列演算を行う場合を説明するための図である。
【図１２】本実施形態に係わる、８×８×８行列積の２並列演算を行う場合を説明するための図である。
【図１３】本実施形態に係わる、８×８×８行列積の２分岐演算を行う場合を説明するための図である。
【図１４】本実施形態に係わる、４×４行列積の１６並列演算を行う場合を説明するための図である。
【図１５】本実施形態に係わる、４×４×４×４×４行列積の４並列演算を行う場合を説明するための図である。
【図１６】本実施形態に係わる、４×４×１２行列積の４並列演算を行う場合を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して実施形態を説明する。  
（行列演算システムの構成）
図１は、本実施形態に係わる行列演算システムの構成図である。行列演算システム１は、アレイ部２と、データ管理部３と、制御部４と、インターコネクト５と、I/O部６とで構成される。
【００１２】
行列演算装置は、アレイ部２とデータ管理部３とにより構成され、行列積などの行列演算を実行する。制御部４は、アレイ部２とデータ管理部３内の各回路の動作制御と、アレイ部２とデータ管理部３間のデータ入出力制御とを行うための各種制御信号を出力する。
【００１３】
アレイ部２は、行列演算のための行列データ列である入力AとBが入力されるデータ入力回路１１と、行列演算回路アレイ（以下、アレイという）１２を含む。データ入力回路１１は、データ管理部３から入力A、Bを入力してアレイ１２へ供給する。アレイ１２は、マトリックス状に配置された複数のブロック３１（図４）で構成される。各ブロック３１は、マトリックス状に配置された複数のノード２１（図２）を含む回路で構成される。アレイ部２は、演算結果である出力Sをデータ管理部３へ出力する。
【００１４】
データ管理部３は、メモリ１３と、リード部１４と、ライト部１５と、演算器１６と、マルチプレクサ１７とを有して構成されている。  
メモリ１３は、行列演算のための入力データと、演算結果である出力データが記憶される、SRAM等の記憶装置である。  
リード部１４は、メモリ１３に記憶されている入力データを読み出して、アレイ部２のデータ入力回路１１へ供給する回路である。  
ライト部１５は、アレイ１２からの出力を、メモリ１３へ書き込む回路である。
【００１５】
演算器１６は、リード部１４からの入力と、アレイ１２からの出力とに対して所定の演算を行う回路であり、少なくとも加算機能を有する。ここでは、演算器１６は、リード部１４からの入力データと、アレイ１２の出力データとを加算して出力する。なお、演算器１６は、加算機能に加えて、減算機能、乗除算機能を備えていてもよい。すなわち、演算器１６は、行列演算のための列データと行データと、複数のブロック３１の出力とに対して所定の演算を行う。
【００１６】
マルチプレクサ１７は、演算器１６の出力と、アレイ１２の出力とを入力し、いずれかを選択して出力する回路である。すなわち、マルチプレクサ１７は、複数のブロック３１を含むアレイ１２の出力と、演算器１６の出力とのいずれかを選択して出力する選択回路である。
【００１７】
マルチプレクサ１７が、アレイ１２の出力を選択して出力するか、演算器１６の出力を選択して出力するかは、行列演算装置の演算内容によって決まる。よって、マルチプレクサ１７がアレイ１２と演算器１６のいずれの出力を選択するかは、制御部４により設定される。すなわち、制御部４は、マルチプレクサ１７の選択を制御する選択信号を出力する。
【００１８】
よって、行列演算システム１には、演算器１６とマルチプレクサ１７とがデータ管理部３に設けられているので、行列演算結果に、加算などの各種演算を容易に行うこともできる。
【００１９】
制御部４は、アレイ部２及びデータ管理部３内の各回路の動作を制御する回路である。例えば、制御部４は、アレイ部２内のレジスタのデータ保持、マルチプレクサの入力切替、データ管路部３内のリード部１４のデータ読み出し、ライト部１５のデータの書き込み、マルチプレクサ１７の入力切替、などの動作を制御する各種制御信号及び各種設定信号を出力する。
【００２０】
インターコネクト５は、データ管理部３とI/O部６とを接続する、バスなどの相互接続網である。  
I/O部６は、外部から入力データを受信して、インターコネクト５を介してデータ管理部３へ出力すると共に、演算結果である出力データを外部へ出力する回路である。
【００２１】
よって、行列演算システム１は、データ管理部３において行列演算対象データを外部から受信し、制御部４の制御の下、アレイ部２で行列演算を実行し、データ管理部３が行列演算結果データを、外部へ送信する。行列演算システム１の各構成は、半導体チップ上に形成されている。
【００２２】
（ノードの構成）
図２は、ノードの構成を示す回路図である。ノード２１は、レジスタ２２、２３と、演算器としての乗算器２４と、加算器２５と、レジスタ２６と、マルチプレクサ２７と、レジスタ２８とで構成される。そして、ノード２１は、３つの入力端２１ia、２１ib、２１isと、３つの出力端２１oa、２１ob、２１osとを有する。
【００２３】
入力端２１iaは、行列演算のA系列入力データ（例えば、行列の縦方向の入力データ列）が入力される端子である。入力端２１ibは、行列演算のB系列入力データ（例えば、行列の横方向の入力データ列）が入力される端子である。入力端２１isは、行列の演算結果の要素成分データ（例えば、演算結果の横方向のデータ列）が入力される端子である。  
入力端２１iaは、レジスタ２２の入力に接続され、入力端２１ibは、レジスタ２３の入力に接続され、入力端２１isは、マルチプレクサ２７の２つの入力の一方に接続されている。
【００２４】
レジスタ２２の出力は、乗算器２４の２つの入力の一方と、出力端２１oaとに接続されている。レジスタ２３の出力は、乗算器２４の２つの入力の他方と、出力端２１obとに接続されている。乗算器２４の出力は、加算器２５の２つの入力の一方に接続されている。
【００２５】
加算器２５の出力は、レジスタ２６の入力に接続されている。レジスタ２６の出力は、加算器２５の２つの入力の他方と、マルチプレクサ２７の２つの入力の他方に接続されている。加算器２５とレジスタ２６により、アキュムレータ２９が構成される。アキュムレータ２５の累積加算演算の実行は、制御部４により制御される。すなわち、各ノード２１は、行列演算のための列データの入力と行データの入力に対して所定の演算を行う。各ノード２１は、行列演算結果の要素成分を出力する演算器である乗算器２４と、乗算器２４の演算結果を累積加算するアキュムレータ２９とを有する。  
マルチプレクサ２７の出力は、レジスタ２８の入力に接続されている。レジスタ２８の出力は、出力端２１osに接続されている。
【００２６】
ノード２１は、３つの入力端２１ia、２１ib、２１isに、それぞれデータ列である入力A、B、Sが入力可能に構成されている。入力Aはレジスタ２２に保持され、レジスタ２２の出力は出力端２１oaに出力Aとして出力される。入力Bはレジスタ２３に保持され、レジスタ２３の出力は出力端２１obに出力Bとして出力される。  
すなわち、各ノード２１は、行列演算の演算対象の２つの行列の一方の列データを入力する入力端２１iaと、２つの行列の他方の行データを入力する入力端２１ibと、入力された列データを出力する出力端２１oaと、入力された行データを出力する出力端２１obと、を有する。
【００２７】
さらに、各ノード２１は、アキュムレータ２９の累積加算結果を出力する出力端２１osを有し、後段のノードは、前段ノードの演算結果を入力するための入力端２１isを有する。そして、後段のノードは、入力端２１isの入力と、アキュムレータ２９の累積加算結果とのいずれかを選択して出力する。
【００２８】
演算器である加算器２５の出力は、レジスタ２６に保持される。入力Sとレジスタ２６の値のいずれかがマルチプレクサ２７で選択されてレジスタ２８に保持され、レジスタ２８の出力は出力Sとして出力端２１osに出力されるように、ノード２１は構成されている。
【００２９】
選択回路であるマルチプレクサ２７が２つの入力のいずれを選択して出力するかは、制御部４からの設定信号により設定される。すなわち、制御部４は、選択回路であるマルチプレクサ２７の選択を制御する選択信号を出力する。
【００３０】
レジスタ２２とレジスタ２３の出力は、演算器である乗算器２４により演算される。なお、ノード２１の演算器は、少なくとも乗算機能を備え、他に加減算や除算など他の演算機能も備えていてもよい。
【００３１】
乗算器２４の出力とレジスタ２６の出力は、演算器である加算器２５によって加算の演算が行われる。なお、アキュムレータ２９の演算器は、少なくとも加算機能を備え、他に減算や乗除算など他の演算を備えていてもよい。
【００３２】
ノード２１は、行列演算装置の各ブロックの演算カーネルであり、入力A、B、Sを入力し、入力AとBに対して所定の演算を行い、入力Aを出力Aとして、入力Bを出力Bとして、入力S若しくは演算結果の累積値を出力Sとして出力することが可能に構成されている。
【００３３】
なお、ノード２１は、図２の構成以外の構成を有してもよい。図３は、図２の構成とは異なる構成を有する他のノードの構成を示す回路図である。なお、図３において、図２に示す構成要素と同じ要素については、同じ符号を付して説明は、省略し、異なる構成について説明する。
【００３４】
図３に示すノード２１Aは、レジスタ２２、２３と、演算器としての乗算器２４と、加算器２５と、レジスタ２６と、マルチプレクサ２７とで構成される。そして、ノード２１Aは、２つの入力端２１ia、２１ibと、２つの出力端２１oa、２１obを有する。
【００３５】
マルチプレクサ２７の２つの入力の一方には、レジスタ２６の出力が接続され、マルチプレクサ２７の２つの入力の他方には、レジスタ２３の出力が接続されている。  
マルチプレクサ２７の出力は、出力端２１obに接続されている。よって、レジスタ２３の出力とレジスタ２６の出力のいずれかが、マルチプレクサ２７において選択されて、出力端２１obに出力される。
【００３６】
図３の構成においても、ノード２１の演算器は、少なくとも乗算機能を備え、他に加減算や除算など他の演算機能も備えていてもよい。さらに、図３の構成においても、少なくとも加算機能を備え、他に減算や乗除算など他の演算を備えていてもよい。
【００３７】
図３のノード２１Aは、ノード２１の入力B、S、及び出力B、Sを共通化し、レジスタ２８を省略したものである。ノード２１Aの動作は、ノード２１の動作において入力Sと出力Sを用いる代わりに入力Bと出力Bを用いるのと等価であるため、以下、本実施の形態の行列演算装置は、ノード２１の構成を用いて説明する。
【００３８】
（ブロックの構成）
上述したノード２１が複数個用いられて、ブロック３１が形成される。ブロック３１は、マトリックス状に配列され、接続された複数（ここでは、４×４の１６個）のノード２１で構成されている。
【００３９】
図４は、ブロック３１の構成を示すブロック図である。ブロック３１は、行方向（横方向）と列方向（縦方向）に接続された複数のノード２１で構成されている。ここでは、ブロック３１は、１６個のノードを含み、４×４の行列演算を行う単位ブロックである。
【００４０】
図４において、ブロック３１の上端の複数（ここでは４つ）のノード２１の複数（ここでは４つ）の入力Aが、ブロック３１の入力群Aであり、ブロック３１の左端の複数（ここでは４つ）のノード２１の複数（ここでは４つ）の入力Bと複数の入力Sが、それぞれブロック３１の入力群Bと入力群Sである。すなわち、上端ノード群N11、N12、N13、N14の入力Aがブロック３１の入力群Aであり、左端ノード群N11、N21、N31、N41の入力Bと入力Sが、それぞれブロック３１の入力群Bと入力群Sである。
【００４１】
そして、ブロック３１の下端の複数（ここでは４つ）のノード２１の複数（ここでは４つ）の出力Aが、ブロック３１の出力群Aであり、ブロック３１の右端の複数（ここでは４つ）のノード２１の複数（ここでは４つ）の出力Bと出力Sが、ブロック３１の出力群Bと出力群Sである。すなわち、下端ノード群N41、N42、N43、N44の出力Aがブロック３１の出力群Aであり、右端ノード群N14、N24、N34、N44の出力Bと出力Sが、それぞれブロック３１の出力群Bと出力群Sである。
【００４２】
ブロック３１の内部では、行方向（すなわち横方向）には、各ノード２１の出力Bと出力Sが、それぞれ右横方向に隣接したノード２１の入力Bと入力Sに接続される。縦方向（すなわち列方向）には、各ノードの出力Aが、下縦方向に隣接したノード２１の入力Aに接続される。
【００４３】
以上のように、ブロック３１は、ノード２１を複数（ここでは４×４で１６個）接続し、ノード２１間で入力データA、B、Sと出力データA、B、Sとを行方向と列方向に接続して構成されている。
【００４４】
（アレイの構成）
上述したブロック３１が複数個用いられて、行列演算システム１のアレイ１２が形成される。アレイ１２は、行方向（横方向）と列方向（縦方向）に接続された複数（ここでは４×４の１６個）のブロック３１を含んで構成される。
【００４５】
図５は、アレイ１２の構成を示すブロック図である。アレイ１２は、行方向と列方向のマトリックス状に接続された複数（ここでは１６個）のブロック３１を含んで構成されている。
【００４６】
図５のアレイ１２には、縦方向の入力群A1、A2、A3、A4の入力部１２Aと、横方向の入力群B1、B2、B3、B4の入力部１２Bと、横方向の出力群S1、S2、S3、S4の出力部１２Sとが設けられている。  
アレイ１２には、入力群A1、A2、A3、A4と入力群B1、B2、B3、B4への入力データが、制御部４の制御の下、データ管理部３からデータ入力回路１１を介して供給される。
【００４７】
アレイ１２の上端の複数（ここでは４つ）のブロック３１の複数（ここでは４つのブロックB11、B12、B13、B14）への入力A1が、アレイ１２の第１の縦入力群であり、アレイ１２の左端の複数（ここでは４つ）のブロック３１の複数（ここでは４つのブロックB11、B21、B31、B41）の入力B1が、アレイ１２の第１の横入力群である。すなわち、上端ブロック群３１の複数の入力A1がアレイ１２の第１の縦入力群A1であり、左端ブロック群３１の複数の入力B1が、アレイ１２の第１の横入力群B1である。
【００４８】
そして、アレイ１２の右端の複数（ここでは４つ）のブロック３１の複数（ここでは４つのブロックB14、B24、B34、B44）の出力S1が、アレイ１２の第１の出力群S1である。すなわち、右端ブロック群１２の複数の出力S1がアレイ１２の第１の出力群S1である。
【００４９】
アレイ１２の内部では、縦方向（すなわち列方向）には、各ブロック３１の出力Aが、下縦方向に隣接したブロック３１の入力Aに接続されたマルチプレクサの入力に接続される。上端ブロック群B11、B12、B13、B14を除くアレイ１２内の各ブロック３１の入力Aには、マルチプレクサにより選択された複数の入力の１つが入力される。
【００５０】
行方向（すなわち横方向）には、各ブロック３１の出力Sが、横方向に隣接した後段のブロック３１の入力Sに接続されている。
【００５１】
さらに、右から２列目のブロック群B13、B23、B33、B43のそれぞれの出力Sは、第２の出力群S2に接続されている。左から２列目のブロック群B12、B22、B32、B42のそれぞれの出力Sは、第３の出力群S3に接続され、左端ブロック群B11、B21、B31、B41のそれぞれの出力Sは、第４の出力群S4に接続されている。
【００５２】
各ブロック３１の出力Bは、横方向に隣接した後段のブロック３１の入力Bに接続されたマルチプレクサの入力に接続される。左端ブロック群B11、B21、B31、B41を除くアレイ１２内の各ブロック３１の入力Bには、マルチプレクサにより選択された複数の入力の１つが入力される。
【００５３】
具体的には、図５の４×４のブロックにおいて、上端ブロックB11,B12,B13,B14のそれぞれの入力Aには、入力A1が入力される。左端ブロックB11,B21,B31,B41のそれぞれの入力Bには、入力B1が入力される。
【００５４】
２行目のブロックB21,B22,B23,B24の入力Aには、ブロックB11,B12,B13,B14のそれぞれの出力Aと入力A2のいずれかを選択して出力するマルチプレクサm1の出力が接続されている。３行目のブロックB31,B32,B33,B34の入力Aには、ブロックB21,B22,B23,B24のそれぞれの出力Aと入力A3のいずれかを選択して出力するマルチプレクサm2の出力が接続されている。下端ブロックB41,B42,B43,B44の入力Aには、ブロックB31,B32,B33,B34のそれぞれの出力Aと入力A4のいずれかを選択して出力するマルチプレクサm3の出力が接続されている。  
左から２列目のブロックB12,B22,B32,B42の入力Sには、前段のブロックである左端ブロックB11,B21,B31,B41のそれぞれの出力Sが入力される。
【００５５】
左から２列目のブロックB12,B22,B32,B42の各入力Bには、複数の入力の中から選択された１つが入力される。そのため、ブロックB12,B22,B32,B42には、それぞれマルチプレクサm11,m21,m31,m41が接続され、特に、マルチプレクサm21,m31,m41にブロックB11の出力Sが入力されるように、ブロックB11の出力Sは、マルチプレクサm21,m31,m41と接続線L1により接続されている。
【００５６】
ブロックB12の入力Bは、入力B1、ブロックB11の出力B,Sのいずれかを選択して出力するマルチプレクサm11の出力に接続されている。ブロックB22の入力Bは、入力B2、ブロックB21の出力B,S、ブロックB11の出力Sのいずれかを選択して出力するマルチプレクサm21の出力に接続されている。ブロックB32の入力Bは、入力B2、ブロックB31の出力B,S、ブロックB11の出力Sのいずれかを選択して出力するマルチプレクサm31の出力に接続されている。ブロックB42の入力Bは、入力B2、ブロックB41の出力B,S、ブロックB11の出力Sのいずれかを選択して出力するマルチプレクサm41の出力に接続されている。
【００５７】
左から３列目のブロックB13,B23,B33,B43の入力Sには、前段のブロックである、左から２列目のブロックB12,B22,B32,B42のそれぞれの出力Sが入力される。  
左から３列目のブロックB13,B23,B33,B43の各入力Bには、複数の入力の中から選択された１つが入力される。そのため、ブロックB13の入力Bは、入力B3、ブロックB12の出力B,Sのいずれかを選択して出力するマルチプレクサm12の出力に接続されている。ブロックB23の入力Bは、入力B3、ブロックB22の出力B,Sのいずれかを選択して出力するマルチプレクサm22の出力に接続されている。ブロックB33の入力Bは、入力B3、ブロックB32の出力B,S、ブロックB12の出力Sのいずれかを選択して出力するマルチプレクサm32の出力に接続されている。そのため、ブロックB12の出力Sは、マルチプレクサm32と接続線L2により接続されている。
【００５８】
ブロックB43の入力Bは、入力B3、ブロックB42の出力B,S、ブロックB22の出力Sのいずれかを選択して出力するマルチプレクサm42の出力に接続されている。そのため、ブロックB22の出力Sは、マルチプレクサm42と接続線L3により接続されている。
【００５９】
右端ブロックB14,B24,B34,B44の入力Sには、前段のブロックである、左から３列目のブロックB13,B23,B33,B43のそれぞれの出力Sが入力される。  
右端ブロックB14,B24,B34,B44の各入力Bには、複数の中から選択された１つが入力される。そのため、ブロックB14の入力Bは、入力B4、ブロックB13の出力B,Sのいずれかを選択して出力するマルチプレクサm13の出力に接続されている。
【００６０】
ブロックB24の入力Bは、入力B4、ブロックB23の出力B,Sのいずれかを選択して出力するマルチプレクサm23の出力に接続されている。ブロックB34の入力Bは、入力B4、ブロックB33の出力B,Sのいずれかを選択して出力するマルチプレクサm33の出力に接続されている。ブロックB44の入力Bは、入力B4、ブロックB43の出力B,Sのいずれかを選択して出力するマルチプレクサm43の出力に接続されている。
【００６１】
以上のように、選択回路であるマルチプレクサm11,m12,m13等に入力される前段のブロック３１の累積加算結果は、マトリックスの同じ行の前段ブロック等に含まれる各ノード２１のアキュムレータ２９の累積加算結果である。
【００６２】
さらに、選択回路であるマルチプレクサm21,m31,m41,m32,m42に入力される累積加算結果には、マトリックスの異なる列の前段ブロックに含まれる各ノード２１のアキュムレータ２９の累積加算結果も含まれる。
【００６３】
さらに、複数のブロック３１の後段ブロックでは、前段ブロックに含まれる各ノード２１のアキュムレータ２９の累積加算結果と、前段ブロック以外から入力とのいずれかを選択して出力する選択回路であるマルチプレクサm11,m21,...m43を介して、複数のノード２１の入力端21ibに行データが入力される。
【００６４】
以上のように、アレイ１２は、複数のブロック３１を含み、各ブロック３１は、複数のノード２１で構成される。ブロック３１は、ノード２１を複数（ここでは４×４で１６個）接続し、ノード２１間で入力データA,B,Sと出力データA,B,Sとを行方向と列方向に接続して構成されている。アレイ１２内では、各ブロックの入力群Bには、３つ又は４つの値から選択された１つが入力される。
【００６５】
特に、ブロックB12,B13,B14の入力Bには、それぞれ、３つ（左横方向に隣接したブロック３１の出力B、左横方向に隣接したブロック３１の出力S、及び、アレイ１２の入力B2からB4のいずれか１つ、の３つ）の値から選択された１つが入力される。
【００６６】
さらに、ブロックB22,B32,B42の入力Bには、それぞれ、３つの入力に加えて、接続線L1を介して入力されるブロックB11の出力Sも含む４つの入力から選択された１つが入力される。
【００６７】
さらに、ブロックB33の入力Bには、３つ（左横方向に隣接したブロック３１の出力B、左横方向に隣接したブロック３１の出力S、及びアレイ１２の入力B3の３つ）の値に加えて、接続線L2を介して入力されるブロックB12の出力Sを含む４つの値から選択された１つが入力される。すなわち、ブロックB33の入力Bとして、ブロックB12の出力Sも選択できるようになっている。
【００６８】
また、ブロックB43の入力Bには、３つ（左横方向に隣接したブロック３１の出力B、左横方向に隣接したブロック３１の出力S、及びアレイ１２の入力B3の３つ）の値に加えて、接続線L3を介して入力されるブロックB22の出力群Sを含む４つの値から選択された１つが入力される。すなわち、ブロックB43の入力Bとして、ブロックB22の出力Sも選択できるようになっている。  
そして、行方向（すなわち横方向）には、各ブロック３１の出力Sが、右横方向に隣接したブロック３１の入力Sに接続される。
【００６９】
列方向（すなわち縦方向）には、上端ブロック群B11,B12,B13,B14には、アレイ１２の第１の入力群A1が入力される。２行目のブロック群B21,B22,B23,B24では、各ブロック３１の入力Aとして、上縦方向に隣接したブロック３１の出力Aと、アレイ１２の第２の入力群A2とのいずれかが選択できるようになっている。３行目のブロック群B31,B32,B33,B34では、各ブロック３１の入力Aとして、上縦方向に隣接したブロック３１の出力Aと、アレイ１２の第３の入力群A3とのいずれかが選択できるようになっている。４行目のブロック群B41,B42,B43,B44では、各ブロック３１の入力Aとして、上縦方向に隣接したブロック３１の出力Aと、アレイ１２の第４の入力群A4とのいずれかが選択できるようになっている。  
そして、アレイ１２は、第１〜第４の出力群を複数出力することができるように構成されている。
【００７０】
（作用）
次に、行列演算システム１の動作を説明する。  
（ノードの動作）
まず、ノード２１の動作を説明する。制御部４は、各ノード２１内のレジスタ２６を初期化するように各ノード２１を制御する。
【００７１】
ここでは、４行４列の行列Aと４行４列の行列Bとの積を説明する。  
行列Aは、次の式（１）で示す値の要素成分（以下、要素という）を有する行列である。
【式１】
【００７２】
0005951570.tif 000002
また、行列Bは、次の式（２）で示す値の要素を有する行列である。
【式２】
【００７３】
0005951570.tif 000003
行列Sは、行列積の行列であり、次の式（３）で示す値の要素を有する行列である。
【式３】
【００７４】
0005951570.tif 000004
図２に示すノード２１の入力Aに、行列Aの第１列（a11〜a41）のデータ列の入力Aが、順次入力され、ノード２１の入力Bに、行列Bの第１行（b11〜b14）のデータ列の入力Bが、順次入力されるとする。
【００７５】
入力Aに値a11が、入力Bに値b11が入力されると、値a11は、レジスタ２２に保持され、値b11は、レジスタ２３に保持される。乗算器２４において、値a11とb11とが乗算される。乗算器２４の出力である乗算値（a11*b11)が、加算器２５で「０」と加算されて、加算器２５の出力である加算値として、レジスタ２６に保持される。
【００７６】
次に、出力Aに値a11が出力され、出力Bに値b11が出力される。同時に、入力Aに値a21が、入力Bに値b12が入力されると、値a21は、レジスタ２２に保持され、値b12は、レジスタ２３に保持される。乗算器２４において、値a21とb12とが乗算される。このときのノード２１の内部状態は、図６に示されている。
【００７７】
図６は、ノード２１の動作状態を説明するための図である。乗算器２４の出力である乗算値（a21*b12)が、加算器２５で値（a11*b11)と加算されて、加算器２５の出力である加算値として、レジスタ２６に保持される。
【００７８】
以下、同様に、入力a31,a41と入力b13,b14が、それぞれ入力Aと入力Bに入力され、結果として、レジスタ２６には、値（a11*b11+a21*b12+a31*b13+a41*b14)が保持される。この値（a11*b11+a21*b12+a31*b13+a41*b14)は、行列Aの第１列と行列Bの第1行のベクトル積の結果である。
【００７９】
このベクトル積の値は、マルチプレクサ２７の２つの入力の一方に入力され、制御部４の制御の下で、レジスタ２８で保持され、レジスタ２８からへ出力可能となっている。その結果、ベクトル積の値は、ノード２１の出力Sから出力可能となる。
【００８０】
以上のように、各ノード２１において、４行４列の行列Aと４行４列の行列Bとの積におけるベクトル積が演算可能となっている。なお、ここでは、各ノード２１は、４行４列の行列積を演算可能なノードであるが、任意のサイズの行列積を演算できるノードであってもよいことは言うまでもない。
【００８１】
（ブロックの動作）
ブロック３１の動作を説明する。制御部４は、各ノード２１のデータの入出力のタイミングを制御する。  
図７は、行列Bと行列Aの行列積B×Aの演算とその演算結果の行列Sの出力を説明するための図である。
【００８２】
ブロック３１は、入力群Aとして、行列Aの各列が、上側ノード行より順に入力可能に構成されている。更に、行列Aの各列の各要素は、上側ノード行よりも1サイクル遅延して入力される。
【００８３】
ブロック３１は、入力群Bとして、行列Bの各行が、左側ノード列より順に入力可能に構成されている。更に、行列Bの各行の各要素は、左側ノード列よりも1サイクル遅延して入力される。
【００８４】
このように入力群AとBが順次入力されると、各ノード２１のレジスタ２６には、行列Aと行列Bの行列積の各要素が順次保持される。例えば、図７において、行列積B×Aの演算のために、左上のノードN11には、入力Aからa11、a21、a31、a41が順に入力される。入力Bからb11、b12、b13、b14が順に入力されるため、レジスタ２６にはb11×a11＋b12×a21＋b13×a31＋b14×a41が、すなわち行列積の演算結果である行列Sの要素s11が保持される。
【００８５】
同様に、ノード21には、入力からa11、a21、a31、a41が順に入力される。入力Bからb21、b22、b23、b24が順に入力されるため、行列Sのs21（＝b21×a11＋b22×a21＋b23×a31＋b24×a41）が保持される。同様に、ノード12には、行列Sのs12（＝b12×a12＋b12×a22＋b13×a32＋b14×a42）が保持される。図７は、ノードN11において、行列Sの要素s11が生成されて保持されたときの動作状態を示す。
【００８６】
図８は、図７に示した動作状態の３クロック後の状態を説明するための図である。各ノード２１で計算された行列Sの各要素は、各ノード２１の出力Sを介して、順にノード行の右方向に出力される。各ノード２１は、入力Sから入力された行列Sの各要素と、自ノードで演算された行列Sの各要素を共に有する場合には、入力Sから入力された行列Sの各要素を選択して出力Sに出力するように、制御部４により各マルチプレクサ２７は制御される。
【００８７】
図９は、図８に示した動作状態の３クロック後の状態を説明するための図である。ブロック３１の出力群Sからは、行列Sの各要素が、左側要素から順に出力される。
【００８８】
（アレイの動作）
次に、アレイ１２の動作を説明する。  
（１６×１６行列積の演算の場合）  
まず、アレイ１２を用いて１６×１６行列積を演算する場合を説明する。  
図１０は、１６×１６行列積の演算を行う場合を説明するための図である。より具体的には、図１０は、アレイ１２を用いて１６行n列（nは正の整数）の行列Bとn行１６列の行列Aとの行列積B×Aを演算し、演算結果の行列Sを取得する場合を説明するための図である。図１０において、太線で示した入力あるいは出力が選択されるように、制御部４は、各マルチプレクサm1〜m3,m11〜m43において出力する入力データの選択設定を行う。
【００８９】
ブロックB21〜B24、ブロックB31〜B34、ブロックB41〜B44では、入力群Aとして、上隣接ブロック３１の出力群Aを選択される。例えば、ブロックB21の入力群Aとして、ブロックB11出力群Aが選択される。  
また、ブロックB12〜B14、ブロックB22〜B24、ブロックB32〜B34、ブロックB42〜B44の入力群Bとして、左隣接ブロック３１の出力群Bが選択される。ブロックB12〜B14、ブロックB22〜B24、ブロックB32〜B34、ブロックB42〜B44の入力群Sとして、左隣接ブロック３１の出力群Sが入力される。よって、例えば、ブロックB12の入力群Bと入力群Sには、ブロックB11の出力群Bと出力群Sが入力される。
【００９０】
以上のようにアレイ１２を構成した場合に、入力群A1に行列Aの各列を、入力群B1に行列Bの各行を、順に入力すると、出力群S0に行列Sの各行が、順に出力される。  
なお、行列Sの各要素は、各ブロック３１の出力群Sから出力されるので、行列Sの各要素を、出力群S1〜S3 より取得するようにしてもよい。
【００９１】
（８×８行列積の４並列演算の場合）  
次に、アレイ１２を用いて、８×８行列積を４つ並列に演算する場合を説明する。  
図１１は、８×８行列積の４並列演算を行う場合を説明するための図である。より具体的には、図１１は、アレイ１２を用いて、８行n列（nは正の整数）の行列B1〜B4とn行８列の行列A1〜A4の行列積B×Aを４種同時に演算し、演算結果の４つの行列S1〜S4を取得する場合を説明するための図である。図１１において、太線で示した入力あるいは出力が選択されるように、制御部４は、各マルチプレクサm1〜m3,m11〜m43において出力する入力データの選択設定を行う。
【００９２】
ブロックB21〜B24、ブロックB41〜B44では、入力群Aとして、上隣接ブロックの出力群Aが選択される。例えば、ブロックB21の入力群Aには、ブロックB11の出力群Aが入力される。  
また、ブロックB31〜B34では、入力群Aとして、アレイ１２の入力群A3が選択される。
【００９３】
また、ブロックB12、B14、ブロックB22、B24、ブロックB32、B34、ブロックB42、B44では、入力群Bおよび入力群Sとして、左隣接ブロックの出力群Bおよび出力群Sがそれぞれ選択される。例えば、ブロックB12の入力群Bと入力群Sには、ブロックB11の出力群Bと出力群Sが、それぞれ入力される。
【００９４】
また、ブロックB13、ブロックB23、ブロックB33、ブロックB43では、入力群Bとして、アレイ１２の入力群B3が入力される。
【００９５】
以上のようにアレイ１２を構成した場合に、入力群A1に行列A1〜A2の各列を、入力群A3に行列A3〜A4の各列を、入力群B1に行列B1〜B2の各行を、入力群B3に行列B3〜B4の各行を、順に入力すると、出力群S3に行列S1〜S2の各行が、出力群S1に行列S3〜S4の各行が、順に出力される。  
すなわち、図１１において、２点鎖線で示す４つのブロック群４１のそれぞれが、８×８の行列演算を行い、アレイ１２は、８×８行列積の４並列演算を実行することができる。
【００９６】
（８×８×８行列積の２並列演算の場合）  
次に、アレイ１２を用いて、８×８×８行列積を２つ並列に演算する場合を説明する。    図１２は、８×８×８行列の２並列演算を行う場合を説明するための図である。より具体的には、図１２は、アレイ１２を用いて、８行n列（nは正の整数）の行列B1〜B2とｎ行８列の行列A1〜A2の行列積B×Aを演算し、その演算結果に8行8列の行列C1〜C2の行列積を２種同時に演算し、演算結果の行列S1〜S2を取得する場合を説明するための図である。図１２において、太線で示した入力あるいは出力が選択されるように、制御部４は、各マルチプレクサm1〜m3,m11〜m43において出力する入力データの選択設定を行う。
【００９７】
ブロックB21〜B24、ブロックB41〜B44では、入力群Aとして、上隣接ブロックの出力群Aが選択される。例えば、ブロックB21の入力群Aには、ブロックB11の出力群Aが選択される。  
また、ブロックB31〜B34では、入力群Aとして、アレイ１２の入力群A3が選択される。
【００９８】
また、ブロックB12、B14、ブロックB22、B24、ブロックB32、B34、ブロックB42、B44では、入力群Bおよび入力群Sとして、左隣接ブロックの出力群Bおよび出力群Sがそれぞれ選択される。例えば、ブロックB12の入力群Bと入力群Sには、ブロックB11の出力群Bと出力群Sが、それぞれ入力される。
【００９９】
また、ブロックB13、ブロックB23、ブロックB33、ブロックB43では、入力群Bとして、左隣接ブロックの出力群Sが選択される。例えば、ブロックB13の入力群Bには、ブロックB12の出力群Sが入力される。
【０１００】
以上のようにアレイ１２を構成した場合に、入力群A1に行列A1とC1の各列を、入力群A3に行列A2とC2の各列を、入力群B1に行列B1〜B2の各行を、順に入力すると、出力群S1に行列S1〜S2の各行が、順に出力される。  
すなわち、図１２において、２点鎖線で示す２つのブロック群４２のそれぞれが、８×８×８の行列演算を行い、アレイ１２は、８×８×８行列積の２並列演算を実行することができる。
【０１０１】
（８×８×８行列積の２分岐演算の場合）  
次に、アレイ１２を用いて、８×８×８行列積の２分岐演算をする場合を説明する。  
図１３は、８×８×８行列積の２分岐演算を行う場合を説明するための図である。より具体的には、図１３は、アレイ１２を用いて、８行n列（nは正の整数）の行列Bとn行８列の行列Aの行列積B×Aを演算し、その演算結果に８行８列の行列C1〜C2の行列積を２種同時に演算し、演算結果の行列S1〜S2を取得する場合を説明するための図である。図１３において、太線で示した入力あるいは出力が選択されるように、制御部４は、各マルチプレクサm1〜m3,m11〜m43において出力する入力データの選択設定を行う。
【０１０２】
ブロックB21〜B24、ブロックB 43〜B 44では、入力群Aとして、上隣接ブロックの出力群Aが選択される。例えば、ブロックB 21の入力群Aには、ブロックB 11の出力群Aが入力される。
【０１０３】
また、ブロックB 33〜B 34では、入力群Aとして、アレイの入力群A3が選択される。  
また、ブロックB 12、B 14、ブロックB 22、B 24、ブロックB 34、ブロックB 44では、入力群Bおよび入力群Sとして、左隣接ブロックの出力群Bおよび出力群Sが、それぞれ選択される。例えば、ブロックB 12の入力群Bと入力群Sには、ブロックB 11の出力群Bと出力群Sが、それぞれ入力される。  
また、ブロックB 13、ブロックB 23では、入力群Bとして、左隣接ブロックの出力群Sが入力される。例えば、ブロックB 13の入力群Bには、ブロックB 12の出力群Sが入力される。
【０１０４】
ブロックB 33、ブロックB 43では、入力群Bとして、左２つ上ブロックの出力群Sが選択される。例えば、ブロックB 33の入力群Bには、ブロックB 12の出力群Sが入力される。
【０１０５】
以上のようにアレイ１２を構成した場合に、入力群A1に行列AとC1の各列を、入力群A2の右半分にC2の各列を、入力群B1に行列Bの各行を、順に入力すると、出力群S1に行列S1〜S2の各行が、順に出力される。  
すなわち、図１３において、２点鎖線で示す３つのブロック群４３のそれぞれが、８×８の行列演算を行い、アレイ１２は、８×８×８行列積の２分岐演算を実行することができる。
【０１０６】
（４×４行列の１６並列演算の場合）  
次に、アレイ１２を用いて、４×４行列の１６並列演算をする場合を説明する。  
図１４は、４×４行列の１６並列演算を行う場合を説明するための図である。より具体的には、図１４は、アレイ１２を用いて、４行n列（nは正の整数）の行列B1〜B16とn行４列の行列A1〜A16の行列積B×Aを１６種同時に演算し、演算結果の行列S1〜S16を取得する場合を説明するための図である。図１４において、太線で示した入力あるいは出力が選択されるように、制御部４は、各マルチプレクサm1〜m3,m11〜m43において出力する入力データの選択設定を行う。
【０１０７】
ブロックB21〜B24では、入力群Aとして、アレイ１２の入力群A2が、ブロックB31〜B34では、入力群Aとして、アレイ１２の入力群A3が、ブロックB41〜B44では、入力群Aとして、アレイ１２の入力群A4が、それぞれ選択される。  
ブロックB12、ブロックB22、ブロックB32、ブロックB42では、入力群Bとして、アレイ１２の入力群B2が、ブロックB13、ブロックB23、ブロックB33、ブロックB43では、入力群Bとして、アレイ１２の入力群B3が、ブロックB14、ブロックB24、ブロックB34、ブロックB44では、入力群Bとして、アレイ１２の入力群B4が、それぞれ選択される。
【０１０８】
上記のようにアレイ１２を構成した場合に、入力群A1に行列A1〜A4の各列を、入力群A2に行列A5〜A8の各列を、入力群A3に行列A9〜A12の各列を、入力群A4に行列A13〜A16の各列を、入力群B1に行列B1〜B4の各行を、入力群B2に行列B5〜B8の各行を、入力群B3に行列B9〜B12の各行を、入力群B4に行列B13〜B16の各行を、順に入力すると、出力群S4に行列S1〜S4の各行が、ア出力群S3に行列S5〜S8の各行が、出力群S2に行列S9〜S12の各行が、出力群S1に行列S13〜S16の各行が、順に出力される。  
すなわち、図１４において、各ブロック群３１が、４×４の行列演算を行い、アレイ１２は、４×４行列積の１６個の演算を並列実行することができる。
【０１０９】
（４×４×４行列積の４並列演算の場合）  
次に、アレイ１２を用いて、４×４×４×４×４行列積の４並列演算をする場合を説明する。  
図１５は、４×４×４×４×４行列積の４並列演算を行う場合を説明するための図である。より具体的には、図１５は、アレイ１２を用いて、４行n列（nは正の整数）の行列B1〜B4とn行４列の行列A1〜A4の行列積B×Aを演算し、その演算結果に４行４列の行列C1〜C4の行列積を演算し、更に、その演算結果に４行４列の行列D1〜D4の行列積を演算し、更に、その演算結果に４行４列の行列E1〜E4の行列積を、４種同時に演算し、演算結果の行列S1〜S4を取得する場合を説明するための図である。図１５において、太線で示した入力あるいは出力が選択されるように、制御部４は、各マルチプレクサm1〜m3,m11〜m43において出力する入力データの選択設定を行う。
【０１１０】
ブロックB21〜B24では、入力群Aとして、アレイ１２の入力群A2が、ブロックB31〜B34では、入力群Aとして、アレイ１２の入力群A3が、ブロックB41〜B44では、入力群Aとして、アレイ１２の入力群A4が選択される。  
また、ブロックB12〜B14、ブロックB22〜B24、ブロックB32〜B34、ブロックB42〜B44では、入力群Bとして、左隣接ブロックの出力群Sがそれぞれ選択される。例えば、ブロックB12の入力群Bには、ブロックB11の出力群Sが入力さる。
【０１１１】
以上のように構成した場合に、入力群A1に行列A1、C1、D1、E1の各列を、入力群A2に行列A2、C2、D2、E2の各列を、入力群A3に行列A3、C3、D3、E3の各列を、入力群A4に行列A4、C4、D4、E4の各列を、入力群B1に行列B1〜B4の各行を、順に入力すると、出力群S1に行列S1〜S4の各行が、順に出力される。  
すなわち、図１５において２点鎖線で示す３つのブロック群４４のそれぞれが、４×４×４×４×４の行列演算を行い、アレイ１２は、４×４×４×４×４行列積の４並列演算を実行することができる。
【０１１２】
（４×４×１２行列積の４系統演算の場合）  
次に、アレイ１２を用いて、４×４×１２行列積の４並列演算をする場合を説明する。  
図１６は、４×４×１２行列積の４並列演算を行う場合を説明するための図である。より具体的には、図１６は、アレイ１２を用いて、４行n列（nは正の整数）の行列Bとｎ行４列の行列Aの行列積B×Aを演算し、その演算結果に４行１２列の行列C1〜C4の行列積を４種同時に演算し、演算結果の行列S1〜S4を取得する場合を説明するための図である。図１６では、ブロックB22〜B24の入力群Aには、アレイ１２の入力群A2を、ブロックB32〜B34の入力群Aには、アレイ１２の入力群A3を、ブロックB42〜B44の入力群Aには、アレイ１２の入力群A3を、それぞれ選択する。
【０１１３】
また、ブロックB13、B14、ブロックB23、B24、ブロックB33、B34、ブロックB43、B44では、入力群Bおよび入力群Sとして、左隣接ブロックの出力群Bおよび出力群Sがそれぞれ選択される。例えば、ブロックB13の入力群Bと入力群Sには、ブロックB12の出力群Bと出力群Sが、それぞれ選択される。  
また、ブロックB12、ブロックB22、ブロックB32、ブロックB42では、入力群Bとして、ブロックB11の出力群Sが選択される。
【０１１４】
以上のようにアレイ１２を構成した場合に、入力群A1に行列AとC1の各列を、入力群A2にC2の各列を、入力群A3にC3の各列を、入力群A4にC4の各列を、入力群B1に行列Bの各行を、順に入力すると、出力群S1に行列S1〜S4の各行が、順に出力される。  
すなわち、図１６において２点鎖線で示す４つのブロック群４５のそれぞれが、４×１２の行列演算を行い、アレイ１２は、４×４×１２行列積の４並列演算を実行することができる。
【０１１５】
以上のように、上述した本実施形態の行列演算システム１によれば、各種形態の行列演算を、データ転送量を少なく、かつ回路規模も大きくしないで、実行することができる。さらに、本実施形態の行列演算システム１によれば、各種行列演算を実行可能である。
【０１１６】
従来のシストリック・アレイは、同一の回路を規則的に配置して、パイプライン処理と並列処理を行うようにしたシステムであり、コンフィギュラブル・アレイ・プロセッサは、複数のノードと、ノード間の接続を変更するための複数のスイッチ部を有するプロセッサである。  
しかし、シストリック・アレイの場合、入力に対する演算が所定のサイクルで実行され、かつ各サイクルの演算結果が次のサイクルでそのまま利用されるように構成されているため、所望の行列演算結果を得るまでのデータ転送量が多いという問題がある。  
これに対して、本実施形態の行列演算装置では、各ノードが演算器に加えてアキュムレータを有しているため、行列演算装置全体におけるデータ転送量が少ない。
【０１１７】
また、コンフィギュラブル・アレイ・プロセッサでは、ノード間に配線ネットワークを切り替えるためのスイッチ回路が必要となるため、全体に回路規模が大きくなるという問題がある。  
これに対して、上述した実施形態の行列演算装置では、このようなスイッチ回路はないので、装置全体の回路規模は小さい。  
特に、各ノード２１がアキュムレータ２９を有するので、データ転送量は少なく、かつ制御部４によって、各ブロック３１への入力の選択を各マルチプレクサの選択制御により行うので、回路規模も大きくならずに済むというメリットもある。
【０１１８】
さらに、データ管理部３は加算機能を有するので、行列演算結果に、他のデータを加算するという処理も行うことができる。
【０１１９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２０】
１  行列演算システム、２  アレイ部、３  データ管理部、４  制御部、５  インターコネクト、６  I/O部、１１  データ入力回路、１２  行列演算回路アレイ、１３  メモリ、１４  リード部、１５  ライト部、１６  演算器、１７  マルチプレクサ、２１  ノード、２２、２３  レジスタ、２４  乗算器、２５  加算器、２６  レジスタ、２７  マルチプレクサ、２８  レジスタ、３１  ブロック。
【図１】
0005951570.tif 000005
【図２】
0005951570.tif 000006
【図３】
0005951570.tif 000007
【図４】
0005951570.tif 000008
【図５】
0005951570.tif 000009
【図６】
0005951570.tif 000010
【図７】
0005951570.tif 000011
【図８】
0005951570.tif 000012
【図９】
0005951570.tif 000013
【図１０】
0005951570.tif 000014
【図１１】
0005951570.tif 000015
【図１２】
0005951570.tif 000016
【図１３】
0005951570.tif 000017
【図１４】
0005951570.tif 000018
【図１５】
0005951570.tif 000019
【図１６】
0005951570.tif 000020