(57)【要約】  全体の処理時間を短縮し得る演算回路を提供する。演算回路は、非零要素と零要素とを含む係数行列に右から入力ベクトルを掛け、演算結果を出力ベクトルに出力する複数の演算器（ＣＬｋ）を含む並列演算回路と、複数の記憶回路を含む入力インターフェイス（１２２）を備える。入力ベクトルおよび係数行列の各要素は、当該要素が乗算されるべき順番を指定するインデックスを有する。各記憶回路は、入力ベクトルの要素をインデックスに基づく順番で記憶する入力記憶回路（１３３）と、係数行列を構成する行または列ベクトルの要素をインデックスに基づく順番で記憶するリングバッファを含む係数記憶回路（１３２）とを有する。各演算器は、記憶回路の係数行列の要素と入力ベクトルの対応する要素との乗算を順次実行し、当該要素のインデックスに基づき、乗算の結果を出力ベクトルの対応する要素に積算する。
2019077933.tif 000002
【特許請求の範囲】
【請求項１】
非零要素と零要素とを含む係数行列に右から入力ベクトルを掛け、演算結果を出力ベクトルに出力するよう構成される複数の演算器を含む並列演算回路と、
複数の記憶回路を含む入力インターフェイスと、を備え、
前記複数の演算器は、前記複数の記憶回路にそれぞれ対応するように構成され、
各前記記憶回路は、
前記入力ベクトルの要素を記憶する入力記憶回路と、
リングバッファを備える係数記憶回路であって、前記リングバッファに前記係数行列を構成する行または列ベクトルの要素を格納する係数記憶回路と、を有し、
前記入力ベクトルの要素および前記係数行列の要素は、当該要素が乗算されるべき順番を指定するインデックスを有し、
前記入力インターフェイスは、前記入力ベクトルと前記係数行列の各要素を、当該要素が有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器に対応した前記入力記憶回路と前記係数記憶回路の前記リングバッファに、それぞれ、前記順番に従い格納するよう構成され、
各前記演算器は、前記記憶回路の前記係数行列の前記行または列ベクトルの要素と前記入力ベクトルの対応する要素との乗算を順次実行し、当該要素の前記インデックスに基づき、当該乗算の結果を前記出力ベクトルの対応する要素に積算するように構成される、演算回路。
【請求項２】
前記並列演算回路は、さらに、前記係数行列に右から入力行列を掛け、演算結果を出力行列に出力するよう構成され、
前記入力ベクトルは、前記入力行列を構成する行または列ベクトルを含み、
前記出力行列を構成する行または列ベクトルは、前記各演算器に対応の前記出力ベクトルを含む、請求項１に記載の演算回路。
【請求項３】
前記出力行列を格納するように構成された複数の出力記憶回路を含む出力インターフェイスをさらに備え、
前記複数の出力記憶回路は、前記複数の演算器にそれぞれ対応するように構成され、
各前記出力記憶回路は、対応の前記演算器からの前記出力ベクトルを格納するように構成され、
前記出力インターフェイスは、前記複数の出力記憶回路から前記出力行列の要素を前記インデックスに基づき列優先または行優先で読出すように構成される、請求項２に記載の演算回路。
【請求項４】
前記出力インターフェイスは、制御指令に従い、前記複数の出力記憶回路から前記出力行列の要素を前記列優先または前記行優先で読出すように構成される、請求項３に記載の演算回路。
【請求項５】
前記出力行列を前記入力行列として他の前記演算回路に出力するとき、前記制御指令は、前記出力行列の要素が表すデータの種類に基づき、列優先および行優先のいずれか一方に従う読出指令を含む、請求項４に記載の演算回路。
【請求項６】
前記データの種類は画像を含む、請求項５に記載の演算回路。
【請求項７】
前記入力記憶回路は、２重化された入力記憶回路を含み、
前記２重化された入力記憶回路の一方は、外部装置からの前記入力ベクトルを格納し、格納が完了したとき、対応する前記演算器による入力ベクトルの読出が可能なように構成され、
前記２重化された入力記憶回路の他方は、対応する前記演算器により入力ベクトルが読出されて、読出しが完了したとき、前記外部装置からの前記入力ベクトルを格納するよう構成される、請求項１から６のいずれか１項に記載の演算回路。
【請求項８】
前記要素が有するインデックスは、さらに、当該要素を演算するべき前記演算器を指定し、
前記入力インターフェイスは、
外部装置からの前記係数行列の前記行または列ベクトルの要素を、当該要素が有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器に対応した前記係数記憶回路のリングバッファに、前記順番に従い書込むよう構成される、請求項１から７のいずれか１項に記載の演算回路。
【請求項９】
前記演算回路は、
前記複数の演算器のうちの１の演算器の演算結果を格納し、他の前記演算器から読出し可能に構成される共有メモリを、さらに備える、請求項１から８のいずれか１項に記載の演算回路。
【請求項１０】
前記出力インターフェイスは、さらに、出力回路と、前記各演算器からの前記出力ベクトルを前記外部装置に出力する複数のポートとを含み、
前記複数の出力記憶回路は、前記複数のポートにそれぞれ対応し、
前記出力回路は、
前記各演算器から前記出力ベクトルの要素を受付けたとき、予め定められた基準情報と当該要素の前記インデックスとに基づき、前記複数の出力記憶回路から１つを選択し、選択された出力記憶回路に当該要素を格納するよう構成される、請求項３から６のいずれか１項に記載の演算回路。
【請求項１１】
前記出力回路は、さらに、
前記予め定められた基準情報と前記出力ベクトルの要素の前記インデックスとに基づく順番に従い、前記選択された出力記憶回路に当該要素を格納するよう構成される、請求項１０に記載の演算回路。
【請求項１２】
前記出力回路は、
予め定められた数の要素が前記複数の出力記憶回路に格納されたとき、前記複数の出力記憶回路の前記要素を前記複数のポートを介して出力する、請求項１０または１１に記載の演算回路。
【請求項１３】
前記出力回路は、
前記予め定められた数の要素が前記複数の出力記憶回路に格納されたとき、当該要素を前記複数のポートを介して出力する旨の通知を、前記外部装置に出力する、請求項１２に記載の演算回路。
【請求項１４】
各前記出力記憶回路は、２重化された出力記憶回路を含み、
前記２重化された出力記憶回路の一方は、前記演算器からの前記出力ベクトルの要素を格納し、格納が完了したとき、対応する前記ポートによって要素が読出されるように構成され、
前記２重化された出力記憶回路の他方は、対応する前記ポートにより前記演算結果が読出されて、読出しが完了したとき、前記演算器からの前記出力ベクトルの要素が格納されるように構成される、請求項１０から１３のいずれか１項に記載の演算回路。
【請求項１５】
前記入力ベクトルは、他の前記演算回路が備える前記各演算器からの前記出力ベクトルを含む、請求項１から１４のいずれか１項に記載の演算回路。
【請求項１６】
前記演算回路は、畳み込みニューラルネットワークにおける畳み込み層の演算を実行するためのものであり、
前記入力ベクトルは、前記畳み込み層に入力される特徴マップを一列に展開したものであり、
前記係数行列は、前記畳み込み層で利用されるカーネルに対応する、請求項１から１５のいずれか１項に記載の演算回路。
【請求項１７】
非零要素と零要素とを含む係数行列に右から入力ベクトルを掛け、演算結果を出力ベクトルに出力するよう構成される複数の演算器を含む並列演算回路を用いた演算方法であって、
前記入力ベクトルの要素および前記係数行列の要素は、当該要素が乗算されるべき順番を指定するインデックスを有し、
前記演算方法は、
前記入力ベクトルの要素を、当該要素が有する前記インデックスに基づき、前記複数の演算器のうちの１つに対応した入力記憶回路に、前記順番に従い格納すること、
前記係数行列を構成する行または列ベクトルの要素を、当該要素が有する前記インデックスに基づき、前記複数の演算器のうちの１つに対応したリングバッファに、前記順番に従い格納すること、
各前記演算器を用いて、前記リングバッファの前記係数行列の前記行または列ベクトルの要素と前記入力記憶回路の前記ベクトルの対応する要素との乗算を順次実行し、当該要素の前記インデックスに基づき、当該乗算の結果を前記出力ベクトルの対応する要素に積算すること、とを備える、演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、演算回路および演算方法に関し、たとえば、複数の演算器を用いて並列に実施される演算に好適に用いられる演算回路および演算方法に関する。
【背景技術】
【０００２】
画像処理、声紋分析、ロボディクスなどパターン認識がなされる多くの分野において、畳み込みニューラルネットワーク（ＣＮＮ：Convolutional  Neural  Network）と呼ばれる演算方法がしばしば用いられる。一般にＣＮＮは、畳み込み演算を行う畳み込み層、局所統計量を計算するプーリング層、および全結合層で構成される。畳み込み層は、カーネル（フィルタとも称する）を入力特徴マップ上において画素単位で走査させながら、入力特徴マップの対応部分とカーネルとの積和演算を繰り返して行い、最終的な積和演算結果を非線形変換することによって出力特徴マップを生成する。【０００３】
これらの層における主要な演算は、０値要素が多い大規模な行列（Ａ）とベクトル（ｘ）の積とオフセット（ｂ）との和の演算(Ａｘ+ｂ)である。従来は、複数の演算器を用いた並列処理装置により演算を処理することにより、演算にかかる時間を短縮している。【０００４】
０値要素が多い大規模な行列（Ａ）とベクトル（ｘ）の演算を高速化する技術として、例えば、特開２００９−２５１７２４号公報（特許文献１）は、複数の演算パイプラインを持つベクトルプロセッサを開示する。このベクトルプロセッサは、１つのベクトル演算命令の演算対象となるデータ数がパイプライン数の整数倍で無い場合に、命令を実行していないパイプラインに、次のベクトル演算命令を実行させる。これにより、並列処理の高速化がなされている。【０００５】
また、特開２００３−６７３６０号公報（特許文献２）は、Ｎ個のデータを所定のアドレス順で読出して積和演算を行う積和演算装置を開示する。この積和演算装置は、Ｎ個のデータが値０を含む場合、データを格納する記憶装置のアドレスを生成するとき、値０であるデータに対応のアドレスを生成しない。これにより、値０であるデータの積和演算が実施されず、演算量が削減されて、演算の高速化が実現されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２５１７２４号公報
【特許文献２】特開２００３−６７３６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
複数の演算器を有する並列演算装置における行列（Ａ）とベクトル（ｘ）の積の演算処理は、基本的に、大きく分けて（ｉ）各演算器が演算の対象となる行列（Ａ）の要素とオフセット（b）、入力のベクトル(ｘ)を外の装置から取り込む処理、（ｉｉ）複数の演算器が取込まれたデータを用いて並列に演算を実行する処理、および（ｉｉｉ）各演算器が演算の結果を外部の装置に出力する処理で構成される。【０００８】
このような構成によれば、並列演算の並列性が高まると演算処理時間は短縮されるために、各演算器から外部装置へのアクセスの要求が同時に発生しやすくなる。同時に複数のアクセス要求が発生した場合、各演算器からのアクセス要求に順序をつけて並べ直す等の調停が必要とされて、外部の装置からのデータ入力処理（ｉ）とデータ出力処理（ｉｉｉ）の処理時間が短縮されない。そのため、並列演算処理が高速化されたにもかかわらず、データ入力処理（ｉ）とデータ出力処理（ｉｉｉ）により全体の処理時間が律速され、結果として全体の処理時間を思うほど短縮できないことになる。【０００９】
特許文献１は、並列演算処理の高速化の技術を開示するが、上記に述べたデータ入力処理（ｉ）またはデータ出力処理（ｉｉｉ）の処理時間の短縮に関する技術を開示していない。【００１０】
また、特許文献２は、値０であるデータに対応のアドレスを生成しないことにより、演算を高速化する技術を開示するが、並列演算処理における上記に述べたデータ入力処理（ｉ）またはデータ出力処理（ｉｉｉ）の処理時間の短縮に関する技術を開示していない。【００１１】
この開示は、上記の課題を考慮したものであり、その目的は、全体の処理時間を短縮することが可能な演算回路および演算方法を提供することである。
【課題を解決するための手段】
【００１２】
一実施形態における演算回路は、非零要素と零要素とを含む係数行列に右から入力ベクトルを掛け、演算結果を出力ベクトルに出力するよう構成される複数の演算器を含む並列演算回路と、複数の記憶回路を含む入力インターフェイスと、を備える。演算回路は、各演算器に、当該演算器で演算されるべきベクトルの要素を、演算されるべき順番で供給する。複数の演算器は、複数の記憶回路にそれぞれ対応する。各記憶回路は、入力ベクトルの要素を記憶する入力記憶回路と、リングバッファを備える係数記憶回路であって、当該リングバッファに係数行列を構成する行または列ベクトルの要素を格納する係数記憶回路と、を有する。入力ベクトルの要素および係数行列の要素は、当該要素が乗算されるべき順番を指定するインデックスを有する。入力インターフェイスは、入力ベクトルと係数行列の各要素を、当該要素が有するインデックスに基づき、複数の演算器のうちの１の演算器に対応した入力記憶回路と係数記憶回路のリングバッファに、それぞれ、順番に従い格納するよう構成される。各演算器は、記憶回路の係数行列の行または列ベクトルの要素と入力ベクトルの対応する要素との乗算を順次実行し、当該要素のインデックスに基づき、当該乗算の結果を出力ベクトルの対応する要素に積算するように構成される。
【発明の効果】
【００１３】
上記の実施形態によれば、入力ベクトルの要素または係数行列を構成する行または列ベクトルの要素は、当該要素が有するインデックスに基づき、複数の演算器のうちの１の演算器に対応した入力記憶回路と係数記憶回路のリングバッファに、演算されるべき順番に従い格納される。これにより、各演算器が演算を実施する前に、入力記憶回路または係数記憶回路を介して、当該演算器の演算に必要な入力ベクトルの要素と係数行列を構成する行または列ベクトルの要素のみを、演算されるべき順番で準備しておくことができる。したがって、要素の並べ替え処理は不要となり並列演算にかかる全体の処理時間を短縮することができる。【００１４】
また、係数行列を構成する行または列ベクトルの要素はリングバッファに格納されるから、入力ベクトルを変化させながら係数行列の同一の行または列ベクトルの要素を用いた演算を繰返す場合に、各演算の開始時に係数記憶回路を初期化する処理を省略することができる。また、初期化処理が省略されることで、並列演算にかかる全体の処理時間を短縮することができる。
【図面の簡単な説明】
【００１５】
【図１】ＣＮＮによる演算処理を示すフローチャートである。
【図２】畳み込み演算について説明するための図である。
【図３】特徴マップおよびカーネルの展開について説明するための図である。
【図４】本実施の形態１に係る演算回路１２の構成の一例を、周辺回路と関連付けて示す図である。
【図５】図４の演算器ＣＬｋと入出力データを関連付けて説明する図である。
【図６】本実施の形態１に係る入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図７】本実施の形態１に係る入力記憶回路と出力記憶回路と係数記憶回路の構成の一例を示す図である。
【図８】本実施の形態１に係る記憶方式を模式的に説明する図である。
【図９】本実施の形態１に係る入力変換回路の構成の一例を示す図である。
【図１０】本実施の形態１に係る出力変換回路の構成の一例を示す図である。
【図１１】図５で示した演算器ＣＬｋと演算されるべき要素の関連付けの具体例を示す図である。
【図１２】本実施の形態１に係る並列処理の説明するフローチャートである。
【図１３】本実施の形態２に係る演算回路１２Ａの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１４】図１３の入力通知回路１３３Ｃの構成を示す図である。
【図１５】本実施の形態３に係る演算回路１２Ｂの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１６】図１５の出力通知回路１４３の構成を周辺回路と関連付けて示す図である。
【図１７】本実施の形態４に係る演算回路１２Ｂの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１８】本実施の形態５に係る演算回路１２Ｄの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１９】本実施の形態６に係る演算回路１２Ｅの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図２０】本実施の形態７に係る演算回路１２Ｆの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図２１】本実施の形態８に係る演算回路の構成を示す図である。
【図２２】本実施の形態９に係る演算回路の構成を示す図である。
【図２３】本実施の形態１０に係る演算回路の構成を示す図である。
【図２４】本発明の各実施の形態に係る演算回路の「行列ケース」に従う演算を実行可能な構成の一例を模式的に示す図である。
【図２５】本発明の各実施の形態に係る演算回路の「行列ケース」に従う演算を実行可能な構成の他の例を模式的に示す図である。
【発明を実施するための形態】
【００１６】
以下、各実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。なお、この開示による演算回路および演算方法は、ＣＮＮにおける畳み込み演算において好適に用いられるものであるが、ＣＮＮに限らず他の分野にも適用することができる。
【００１７】
実施の形態１．
［ＣＮＮの処理］
最初にＣＮＮについて簡単に説明する。図１は、ＣＮＮによる演算処理を示すフローチャートである。
【００１８】
図１を参照して、ＣＮＮは、入力層Ｓ２０１と、畳み込み層Ｓ２０２，Ｓ２０４と、プーリング層Ｓ２０３，Ｓ２０５と、全結合層Ｓ２０６と、出力層Ｓ２０７とを含む。
【００１９】
入力層Ｓ２０１は、画像データなどの処理対象のデータの入力を受ける。出力層Ｓ２０７は、データ処理後の最終結果を出力する。図１では、簡単のために畳み込み層とプーリング層の組み合わせ（Ｓ２０２，Ｓ２０３；Ｓ２０４，Ｓ２０５）が２回繰り返されているが、さらに多数回繰り返されていてもよい。
【００２０】
畳み込み層の入力データを入力特徴マップといい、畳み込み層の出力データを出力特徴マップという。畳み込み層Ｓ２０２，Ｓ２０４は、カーネル（フィルタとも称する）を入力特徴マップ上において画素単位で走査しながら、入力特徴マップの対応部分とカーネルとの積和演算を繰り返して行い、最終的な積和演算結果を非線形変換することによって出力特徴マップを生成する。カーネルの要素（「重み」とも称する）は事前に学習によって決定される。畳み込み演算の詳細は図２を参照して後述する。
【００２１】
プーリング層Ｓ２０３，Ｓ２０５は、出力特徴マップの局所領域をひとつの要素にまとめるような動作を行うことによって特徴マップの空間サイズを小さくするものである。プーリング層Ｓ２０３，Ｓ２０５は、たとえば、局所領域の最大値を取ったり、局所領域に含まれる要素を平均化したりする。
【００２２】
全結合層Ｓ２０６は、出力層Ｓ２０７に隣接して１または複数層設けられる。全結合層のＳ２０６の各ニューロンは、隣接層の全てのニューロンとの結合を有する。
【００２３】
［畳み込み演算］
図２は、畳み込み演算について説明するための図である。図２に示すように、入力特徴マップとしての入力データ１００とカーネル１０１との畳み込み演算によって出力データ１０２が生成される。出力データ１０２の各要素にバイアスを加算し、さらに活性化関数を施すことによって出力特徴データが生成される。活性化関数として、たとえば、ＲｅＬＵ（Rectified  Linear  Unit）などの非線形関数が用いられる。
【００２４】
図２の例では、簡単のために入力データサイズを（７，７）とし、カーネルサイズを（３，３）としている。出力データサイズの調整のために、入力データ１００の周囲１０４が固定データ（たとえば、０）で埋められていてもよい。これをパッディングと称する。図２の入力データ１００には、幅が１で値が０のパディングが適用されている。
【００２５】
畳み込み演算では、パディングの部分を含めた入力データ１００の上においてカーネル１０１を一定間隔でスライドさせながら、カーネル１０１の要素と対応する入力データ１００の要素とを乗算し、それらの和が求められる。すなわち、積和演算が実行される。積和演算の結果は、出力データ１０２の対応する要素に格納される。カーネル１０１をスライドさせる間隔をストライドと称する。図２の場合、ストライドは１である。
【００２６】
具体的に、カーネル１０１の配置が図２の太い実線の枠１０３に対応している場合、積和演算結果である「３０」は出力データ１０２の対応する要素１０６の位置に格納される。カーネル１０１の配置が図２の太い破線の枠１０５に対応している場合、積和演算結果である「１３」は、出力データ１０２の対応する要素１０７の位置に格納される。
【００２７】
［特徴マップおよびカーネルの展開］
図３は、特徴マップおよびカーネルの展開について説明するための図である。本実施の形態１の場合、畳み込み演算の処理時間を短縮するために、特徴マップの各行をつなぎ合わせることによって特徴マップが１列に展開される。
【００２８】
具体的に、図２および図３を参照して、図２の入力データ１００の各行をつなぎ合わせることによって図３の入力ベクトル１１０が生成される。入力データ１００に対応する入力ベクトル１１０の要素数は７×７＝４９である。図２の出力データ１０２も行ごとにつなぎ合わせることによって１列に展開される。出力データ１０２に対応する出力ベクトルの要素数も４９である。
【００２９】
図２のカーネル１０１は、入力ベクトル１１０を右から掛けたときに、図２の出力データ１０２に対応する出力ベクトルが生成されるように行列に展開される。これによって係数行列１１１が生成される。係数行列１１１の行数は第１行から第４９行までの４９であり、係数行列１１１の列数は第１列から第４９列までの４９である。なお、図３に示す係数行列１１１において空白部分のマス目の要素は０である。
【００３０】
具体的に、係数行列１１１の第１行は、（３，２，０，０，０，０，０，１，３，０，…，０）であり、図２のカーネル１０１が特徴マップ上の太い破線の枠１０５に位置する場合に相当する。この係数行列１１１の第１行と入力ベクトル１１０との積和演算が実行されることによって、図２の出力データ１０２の対応する要素１０７の位置に格納されるデータ「１３」が生成される。
【００３１】
同様に、係数行列１１１の第９行は、（３，２，１，０，０，０，０，１，３，２，０，０，０，０，２，１，３，０，…，０）であり、図２のカーネル１０１が特徴マップ上の太い実線の枠１０３に位置する場合に相当する。この係数行列１１１の第９行と入力ベクトル１１０との積和演算が実行されることによって、図２の出力データ１０２の対応する要素１０６に位置に格納されるデータ「３０」が生成される。
【００３２】
図２においてパディングが適用されていない場合には、入力データ１００に対応する入力ベクトル１１０には変更はなく、その要素数は４９である。出力データ１０２のデータサイズは（５，５）になるので、出力データ１０２に対応する出力ベクトルの要素数は、５×５＝２５になる。また、カーネル１０１に対応する係数行列１１１の行数は２５になり、その列数は４９になる。
【００３３】
畳み込み演算において実行される行列演算式は一般に式（１）で表される。すなわち、畳み込み演算の出力ベクトルｆは、係数行列Ａに入力ベクトルｘを右から掛け、その演算結果にバイアスベクトルｂを加算することによって得られる。ここで、係数行列Ａは、値が０である要素を比較的多く含んでいる点に特徴がある。
【００３４】
【数１】
2019077933.tif 000003
【００３５】
この明細書では、出力ベクトルｆの要素をｆ1，…，ｆnとする。第ｉ番目の出力ベクトルｆの要素をｆiまたはｆ（ｉ）と記載する。入力ベクトルｘの要素をｘ1，…，ｘmとする。第ｊ番目の入力ベクトルｘの要素をｘjまたはｘ（ｊ）と記載する。バイアスベクトルｂの要素をｂ1，…，ｂnとする。第ｉ番目のバイアスベクトルｂの要素をｂiまたはｂ（ｉ）と記載する。また、係数行列Ａは、第１から第ｎまでのｎ行と第１から第ｍまでのｍ列で構成される。第ｉ行第ｊ列の係数行列Ａの要素をＡijまたはＡ（ｉ，ｊ）と記載する。本実施の形態１では、各要素のインデックスである値ij、またはｊは、当該要素の識別子であるとともに、当該要素を演算するべき後述の演算器ＣＬｋおよび当該要素が演算器ＣＬｋの指定および演算されるべき順番を指定し得るものでもある。
【００３６】
また、畳み込み演算では、ＮＶＩＤＩＡ社の技術文献「ｃｕＤＮＮ:Ｅｆｆｉｃｉｅｎｔ  Ｐｒｉｍｉｔｉｖｅｓ  ｆｗｏｒ  Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ」第４頁の「Ｆｉｇｕｒｅ  １：  Ｃｏｎｖｏｌｕｔｉｏｎ  ｌｏｗｅｒｉｎｇ」に示されるように、係数が係数行列(Ｆｍ)で表現されるとともに、入力および出力もベクトルではなく行列（Ｄｍ，Ｏｍ)として表現されるケースもある。このケースを「行列ケース」と称する。行列ケースにおける畳み込み演算では、行列と行列の積が算出される。
【００３７】
［演算回路の概略的な構成］
図４は、本実施の形態１に係る演算回路１２の構成の一例を、周辺回路と関連付けて示す図である。演算回路１２は、「演算装置」の一実施例である。図４を参照して、演算回路１２は、演算回路１２内の各部を制御するための専用回路である制御回路３０、それぞれが積和演算を実施する複数の演算器ＣＬｋ（ｋ＝１、２、３・・・ｎ）を有する並列演算回路１２１、入力Ｉ／Ｆ（Interfaceの略）１２２および出力Ｉ／Ｆ（Interface）１２３を備える。演算回路１２は、複数の演算器ＣＬｋを有する。各演算器ＣＬｋは、係数行列Ａの各行に対応して設けられている。
【００３８】
演算回路１２では、式（１）で示される行列演算を実施する場合、各演算器ＣＬｋが積和演算を他の演算器ＣＬｋと並行して実行する。
【００３９】
制御回路３０は、プロセッサ３１と、例えば不揮発性の記憶媒体を含むメモリ３２とを備える。メモリ３２には、演算回路１２を制御するための制御プログラム１５０が格納されている。
【００４０】
演算回路１２は、演算のためのデータを演算回路１２に入力する外部入力装置６１、当該演算回路１２からの演算結果を外部に出力する外部出力装置６３およびＳＲＡＭ（Static  Random  Access  Memory）等の外部記憶装置６２を、バス４５を介して接続する。
【００４１】
外部入力装置６１、外部記憶装置６２および外部出力装置６３は、バス４０を介して、メモリ５０を備えるＣＰＵ（Central  Processing  Unit)５１が接続される。メモリ５０は、係数行列Ａ、入力ベクトルｘおよびバイアスベクトルｂ、ならびに演算回路１２の演算結果を格納する。
【００４２】
ＣＰＵ５１は、外部入力装置６１、外部記憶装置６２および外部出力装置６３を制御する。例えば、ＣＰＵ５１は、係数行列Ａ、入力ベクトルｘおよびバイアスベクトルｂをメモリ５０から読出し、外部入力装置６１または外部記憶装置６２を介して演算回路１２の入力Ｉ／Ｆ１２２に出力する。外部出力装置６３は、出力Ｉ／Ｆ１２３からの演算結果を入力し、入力した演算結果を、バス４０を介してＣＰＵ５１に出力する。ＣＰＵ５１は、外部出力装置６３からの演算結果をメモリ５１に格納する。また、出力Ｉ／Ｆ１２３からの演算結果は、外部記憶装置６２に格納されてもよい。外部記憶装置６２と外部出力装置６３は、有線または無線の複数の回線を介して出力Ｉ／Ｆ１２３に接続される。出力Ｉ／Ｆ１２３は、各回線を接続するポート１７を備える。
【００４３】
なお、メモリ５１は、ＣＰＵ５０ではなくバス４０に接続されてもよい。また、外部記憶装置６２がメモリ５０を備えてもよい。
【００４４】
［演算器の構成］
図５は、図４の演算器ＣＬｋと入出力データを関連付けて説明する図である。図５を参照して、演算器ＣＬｋは、アキュムレータＴ１、乗算器Ｔ２、加算器Ｔ３およびレジスタＴ４を含む。演算器ＣＬｋには、演算器ＣＬｋから読出し可能な係数記憶回路１３２および入力記憶回路１３３が接続される。「入力記憶回路」は、並列演算回路１２１と外部装置との間において並列演算回路１２１への入力を記憶する回路である。係数記憶回路１３２および入力記憶回路１３３は、図４の入力Ｉ／Ｆ１２２に含まれる。図５では、並列演算装置の複数の演算器ＣＬｋのうち１つを示すが、他の演算器も同様の構成を有する。
【００４５】
係数記憶回路１３２には、係数行列Ａのｋ番目の行の要素Ａｋ１〜Ａｋｎと、バイアスベクトルｂのｋ番目の要素ｂｋが格納される。また、入力記憶回路１３３には、入力ベクトルｘの要素ｘ１〜ｘｎが格納される。
【００４６】
（積和演算処理）
演算器ＣＬｋでは、アキュムレータＴ１およびレジスタＴ４は、初期値（例えば０）が予め格納されている。積和演算処理が開始されると、乗算器Ｔ２は、クロックに同期して、係数記憶回路１３２から要素Ａｋｍを、入力記憶回路１３３から要素ｘｍをそれぞれ読出し、読出された要素Ａｋｍに要素ｘｍを掛けて積を算出し、算出した積を上書きによりレジスタＴ４に格納する。加算器Ｔ３は、レジスタＴ４の積と、アキュムレータＴ１に格納されている累算値ｓｕｍとの和を算出し、算出した和をアキュムレータＴ１に出力する。アキュムレータＴ１は、入力記憶回路１３３から読出した要素ｂｋと加算器Ｔ３からの和とを加算し、加算結果を累算値ｓｕｍに加算する。これにより、１回の演算処理が終了する。このような、係数記憶回路１３２の要素Ａｋｍと入力記憶回路１３３の対応する要素ｘｍの積と累算値ｓｕｍの和からなる積和演算が、ｎ回繰返される。
【００４７】
このように、各演算器ＣＬｋは、他の演算器ＣＬｋとは独立して、割当てられた行の積和演算を、係数記憶回路１３２の要素Ａｋｍおよび対応する入力記憶回路１３３の要素ｘｍの組の総数（ｍ個）繰返す。この結果、各演算器ＣＬｋのアキュムレータＴ１の累算値ｓｕｍが、出力ベクトルｆの要素ｆｋとして出力Ｉ／Ｆ１２３に出力される。
【００４８】
［入力Ｉ／Ｆと出力Ｉ／Ｆの構成］
図６は、本実施の形態１に係る入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図６では、入力Ｉ／Ｆと出力Ｉ／Ｆの構成が、制御回路３０を除く周辺回路と関連づけて示されている。図６では、並列演算回路１２１は、共有メモリ１２４を接続する。共有メモリ１２４は、各演算器ＣＬｋにより書込み可能および読出し可能に構成されている。図６を参照して、入力Ｉ／Ｆ１２２は、入力変換回路１３１、係数記憶回路１３２および入力記憶回路１３３を含む。出力Ｉ／Ｆ１２３は、出力変換回路１４１および出力記憶回路１４２を含む。「出力記憶回路」は、並列演算回路１２１と外部装置との間において並列演算回路１２１からの出力を記憶する回路である。
【００４９】
図７は、本実施の形態１に係る入力記憶回路と出力記憶回路と係数記憶回路の構成の一例を示す図である。図８は、本実施の形態１に係る記憶方式を模式的に説明する図である。図９は、本実施の形態１に係る入力変換回路の構成の一例を示す図である。図１０は、本実施の形態１に係る出力変換回路の構成の一例を示す図である。
【００５０】
図７（Ａ）を参照して、入力記憶回路１３３は、複数の記憶回路ＭＩｋ（ｋ＝１，２，３、・・・）を含む。複数の記憶回路ＭＩｋは、それぞれ、各演算器ＣＬｋに対応して設けられて、すなわち入力ベクトルｘの各行に対応して設けられて、対応の演算器ＣＬｋにより読出し可能に構成されている。記憶回路ＭＩｋは、入力ベクトルｘの要素ｘjを格納する複数のレジスタを含む。
【００５１】
図７（Ｂ）を参照して、出力記憶回路１４２は、複数の記憶回路ＭＯｋ（ｋ＝１，２，３、・・・）を含む。複数の記憶回路ＭＯｋは、出力ベクトルｆの要素ｆｉが書込み可能に、また要素ｆｉが読出し可能に構成されている。
【００５２】
図７（Ｃ）を参照して、係数記憶回路１３２は、複数の記憶回路Ｃｋ（ｋ＝１，２，３、・・・）を含む。複数の記憶回路Ｃｋは、それぞれ、各演算器ＣＬｋに対応して設けられて、すなわち係数行列Ａの各行に対応して設けられて、対応の演算器ＣＬｋにより読出し可能に構成されている。記憶回路Ｃｋは、例えば図８（Ｂ）に示すように、バイアスベクトルｂの要素ｂiと係数行列Ａの要素Ａｉjを格納する複数のレジスタを含む。
【００５３】
（入力変換回路）
入力変換回路１３１は、例えば図９に示す構成を有する。図９を参照して、入力変換回路１３１は、係数記憶回路１３２および入力記憶回路１３３の各記憶回路に対応するセレクタ１３と、テーブルまたは専用回路１５を備える。テーブルまたは専用回路１５は、各セレクタに選択指令１５１を出力する。選択指令１５１は、外部記憶装置６２または外部入力装置６１からの係数行列Ａの要素Ａij、入力ベクトルｘの要素ｘjおよびバイアスベクトルｂの要素ｂiのうち、いずれを選択して、対応の記憶回路に書込むかの指令を示す。選択指令１５１は、例えば要素Ａij、要素ｘjおよび要素ｂiのインデックの値を含む。
【００５４】
具体的には、入力変換回路１３１が、外部記憶装置６２または外部入力装置６１から要素Ａij、要素ｘjおよび要素ｂiを受付けたとき、各セレクタ１３は、受付けられた要素Ａij、要素ｘjおよび要素ｂiのンデックスと選択指令１５１とに従い、要素を選択し、選択された要素Ａij、要素ｘjおよび要素ｂiを対応の記憶回路ＭＩｋまたは記憶回路Ｃｋに書込む。このとき、セレクタ１３は、選択指令１５１により、要素Ａijのうち、非零の要素Ａijのみを選択する。そして、セレクタ１３は、選択された要素Ａijおよび要素ｂiを、対応の記憶回路Ｃｋに格納する。
【００５５】
また、入力変換回路１３１の各セレクタ１３は、外部記憶装置６２または外部入力装置６１から受付けた要素ｘjのインデックスと選択指令１５１とに従い、対応の記憶回路ＭＩｋに格納する要素ｘjを選択する。この選択では、セレクタ１３は、選択指令１５１に従い、非零の要素Ａijに対応の要素ｘjのみを選択する。セレクタ１３は、選択された要素ｘjを、対応の記憶回路ＭＩｋに格納する。
【００５６】
また、入力変換回路１３１のセレクタ１３は、記憶回路ＭＩｋに要素ｘjを、また記憶回路Ｃｋに非零の要素Ａijを格納する場合に、要素のインデックスの値が示す順に従い、対応の記憶回路のレジスタに当該要素を格納する。具体的には、セレクタ１３は、記憶回路Ｃｋの複数のレジスタのうち、要素Ａijのインデックスが示す値（数字）をアドレスとしてアドレス指定されるレジスタに要素Ａijを格納する。また、セレクタ１３は、記憶回路Ｃｋの複数のレジスタのうち、要素Ａijのレジスタとは異なる予め定められたレジスタに要素ｂiを格納する。同様に、セレクタ１３は、記憶回路ＭＩｋの複数のレジスタのうち、要素ｘjのインデックスが示す値（数値）をアドレスとしてアドレス指定されるレジスタに要素ｘjを格納する。
【００５７】
これにより、記憶回路Ｃｋと記憶回路ＭＩｋには、対応の演算器ＣＬｋの積和演算に必要な要素ｘjと非零の要素Ａijと要素ｂiが格納される。また、記憶回路Ｃｋでは、非零の要素Ａijが演算されるべき順番で格納され、各記憶回路ＭＩｋでは、非零の要素Ａijに対応する要素ｂiが、演算されるべき順番で格納される。
【００５８】
（入力変換回路のテーブルまたは専用回路）
本実施の形態１では、各演算器ＣＬｋが係数行列Ａのどの行に割当てられるかと、非零の要素Ａijと演算されるべき要素ｘｊの入力ベクトルｘにおける位置とは、予め決定されている。したがって、テーブルまたは専用回路１５には、このような予め決定された内容を示す情報が格納されており、専用回路は、格納された情報に従い、各セレクタ１３宛の選択指令１５１を生成し、生成された選択指令１６１を当該セレクタ１３に出力する。なお、演算器ＣＬｋへの係数行列Ａの行の割当て、および非零の要素Ａijと演算されるべき要素ｘｊの入力ベクトルｘにおける位置が変更されない場合は、テーブルまたは専用回路１５は、固定の回路として構成され得る。
【００５９】
（出力変換回路）
出力変換回路１４１は、例えば図１０に示す構成を有する。図１０を参照して、出力変換回路１４１は、複数のセレクタ１４と、テーブルまたは専用回路１６とを備える。複数のセレクタ１４は、出力記憶回路１４２の複数の記憶回路ＭＯｋにそれぞれ対応する。記憶回路ＭＯｋは１または複数のレジスタを含む。
【００６０】
出力記憶回路１４２の格納された出力ｆｉは、外部記憶装置６２または外部出力装置６３に出力されるが、出力記憶回路１４２が、外部記憶装置６２または外部出力装置６３に同時に出力可能な出力ｆｉの数は、予め決められている。したがって、出力記憶回路１４２は、同時に出力可能な出力ｆｉの数と同じ数の記憶回路ＭＯｋを有する。また、複数の記憶回路ＭＯｋは、それぞれ、外部記憶装置６２または外部出力装置６３に、ポート１７を介して接続される。
【００６１】
出力変換回路１４１の各セレクタ１４は、並列演算回路１２１からの出力ｆｉを記憶回路ＭＯｋに格納する際、テーブルまたは専用回路１６からの選択指令１６１と出力ｆｉのインデックスの値に基づき、複数の記憶回路ＭＯｋから１つ（すなわち、複数のポート１７のうちの１つ）を決定し、出力ｆｉを決定した記憶回路ＭＯｋに格納する。本実施の形態では、出力ｆｉのインデックスは、当該出力ｆｉを識別する識別子としての役割も果たす。セレクタ１４は、出力ｆｉを格納する際に、選択指令１６１と出力ｆｉのインデックスからアドレスを決定し、決定したアドレスでアドレス指定される記憶回路ＭＯｋのレジスタに出力ｆｉを格納する。
【００６２】
一般には、係数行列Ａの各行の演算結果である出力ｆｉがどの演算器ＣＬｋから導出されるか、当該出力ｆｉをいずれのポート１７に送出するか、および出力ｆｉを送出する順番を規定する基準の情報は予め決定されている。
【００６３】
テーブルまたは専用回路１６は、上記に述べた基準情報を格納している。テーブルまたは専用回路１６は、格納された基準情報に基づき、各セレクタ１４宛の選択指令１６１を生成し、生成された選択指令１６１を当該セレクタ１４に出力する。
【００６４】
なお、係数行列Ａの複数の行が、複数の演算器ＣＬｋにそれぞれ一対一に対応する場合には、演算器ＣＬｋと記憶回路ＭＯｋを直接に一対一で結合することが可能であり、この場合は各記憶回路ＭＯｋの出力ｆｉを格納する位置（容量、レジスタの個数）は１つだけでよい。
【００６５】
テーブルまたは専用回路１６は、各セレクタ１４に対して、並列演算回路１２１からの演算結果である要素ｆiのうち、いずれを選択して、対応の記憶回路ＭＯｋに書込むかの指令を示す選択指令１６１を出力する。選択指令１６１は、例えば要素ｆiのインデックの値を含む。
【００６６】
具体的には、セレクタ１４は、並列演算回路１２１の各演算器ＣＬｋのからの要素ｆiのうちから選択指令１６１に基づき要素ｆiを選択し、選択した要素ｆiを対応する記憶回路ＭＯｋに格納する。各記憶回路ＭＯｋは複数のレジスタからなる。出力変換回路１４１は、要素ｆiを記憶回路ＭＯｋに格納する場合、要素ｆiを、選択指令１６１に従った順番で当該記憶回路ＭＯｋのレジスタに格納する。
【００６７】
上記に述べたテーブルまたは専用回路１６からの選択指令１６１は、並列演算回路１２１からの出力（要素ｆi）を外部記憶装置６２または外部出力装置６３が期待する要素ｆiが格納される出力記憶回路１４２の位置（アドレス）または読み出される順番に基づき予め決定されている。
【００６８】
なお、記憶回路ＭＩｋ、記憶回路ＭＯｋおよび記憶回路Ｃｋは、アドレス指定可能な複数のレジスタを含むとしているが、レジスタを用いた構成に限定されない。例えば、アドレス指定可能な記憶回路であればよく、例えばＳＲＡＭを含んで構成されてもよい。
【００６９】
［演算器と要素の関連付けの具体例］
図１１は、図５で示した演算器ＣＬｋと演算されるべき要素の関連付けの具体例を示す図である。図１１に示すように、入力変換回路１３１によれば、記憶回路Ｃｋおよび記憶回路ＭＩｋには、対応の演算器ＣＬｋで演算されるべき非零要素Ａijと要素ｘｊのみが格納されて、且つ演算されるべき順番で格納されている。
【００７０】
したがって、演算器ＣＬｋの乗算器Ｔ２は、クロックに同期して、記憶回路Ｃｋおよび記憶回路ＭＩｋから要素を順番に読み出すだけで、演算器ＣＬｋで積和演算されるべき要素をのみ、演算されるべき順序に従い取得することができる。
【００７１】
これにより、各演算器ＣＬｋからの要素の読出し要求が同時に発生したとしても、要求間の順序付けを行なう等の調停は必要とされず、さらに各演算器ＣＬｋでは要素を乗算すべき順序に並べる処理も必要とされない。したがって、当該調停が必要とされる従来の積和演算処理に比べて、全体の処理速度を高速にすることが可能となる。
【００７２】
［係数記憶回路の変形例］
図８を参照して、係数記憶回路１３２は、係数（要素Ａijと要素ｂi）を格納する方式は、図８（Ａ）の１つ目の方式と図８（Ｂ）の２つ目の方式を含む。
【００７３】
図８（Ａ）を参照して、１つ目の方式は、図１１に示したように、演算器ＣＬｋの対応する記憶回路Ｃｋに要素ｂiに続けて係数行列Ａの１行Ｌに相当する要素Ａijをインデックスの順番に格納する方式である。図８（Ａ）の１つ目の方式は、記憶回路Ｃｋから読出された係数を、並列演算回路１２１をスキップして、出力変換回路１４１を経由して出力記憶回路１４２に格納することもできる。
【００７４】
図８（Ｂ）を参照して、２つ目の方式は本来の係数データ（要素ｂiと１行Ｌに相当する要素Ａij）と、実行モードを指定するフラグＦを付加する。例えば、フラグＦは、記憶回路Ｃｋに格納された各係数（要素Ａijまたは要素ｂi）に対して、当該係数を用いて実施するべき演算等の処理の種類を、並列演算回路１２１に指示する。本実施の形態１では、実行フラグが指示する処理の種類は、要素Ａijと要素ｘｊの積、積和演算、係数（要素Ａijまたは要素ｂi）のロード、入力データ（要素ｘｊ）のロード、共有メモリ１２４への書込み（例えば、演算結果（要素ｆｊ）の書込み）、共有メモリ１２４からの読出し、各係数（要素Ａijまたは要素ｂi）を、並列演算回路１２１をスキップして、出力変換回路１４１を経由して出力記憶回路１４２に格納する等を含む。
【００７５】
更なる他の方式として、図８（Ｂ）の方式は、図８（Ｃ）に示されるように、記憶回路Ｃｋは、複数行Ｌ１に相当する要素Ａijがインデックスの順番に格納されるように変形することもできる。
【００７６】
［各部の変形例］
演算回路１２は、上記の（１）式で示される行列演算を、並列演算により実行可能な複数の演算器を含むＡＳＩＣ（Application  Specific  Integrated  Circuit）またはＦＰＧＡ（Field  Programmable  Gate  Array)によって構成され得る。
【００７７】
また、複数の演算器ＣＬｋを備える並列演算回路１２１は、複数の処理（例えば積和演算）を並列に実行することができる構成であればよく、例えば並列演算回路１２１は、マルチコアプロセッサにより構成され得る。その場合には、複数のプロセッサコアは、複数の演算器ＣＬｋにそれぞれ対応する。
【００７８】
また、本実施の形態１では、行列Ａの非零要素Ａijと入力ベクトルの対応する要素ｘｊは、演算回路１２の初期化処理時に入力変換回路１３１を経由して係数記憶回路１３２に格納され得る。なお、行列Ａの非零要素Ａijと入力ベクトルの対応する要素ｘｊの値が固定である場合には、係数記憶回路１３２は、非零要素Ａijと対応する要素ｘｊの値を格納したＲＯＭ（Read  Only  Memory）を含み得る。
【００７９】
行列Ａとベクトルｘの積の計算を高速化するために、行列Ａの１行分の積和演算を、２つ以上の演算器ＣＬｋにより実施してもよい。その場合には、各演算器ＣＬｋからの演算結果の和を取るために、出力記憶回路１４２は各演算器ＣＬｋの演算結果を格納するために使用され得る。
【００８０】
また、入力データの重複した読込みまたは参照を回避し得る畳み込み演算に特化した構成を、外部記憶装置６２または外部入力装置６１と演算回路１２の入力変換回路１３１との間に追加してもよい。
【００８１】
また、行列Ａが小さいために、入力ベクトルｘとしてラインバッファから画像のイメージ部分を切り出すための処理は、通常の畳込み核の高さと同じライン数をもつラインバッファ取り込みとカーネル係数レジスタ（ウィンドウ）から入力データを取り込むことを前提とする。このようなラインバッファは、ラスタスキャンの順番でデータを取り込み、且つライン分のデータを取り込んだ時点で、もっとも古いラインを次にデータを取り込むラインとして使用するようなリングバッファの構造を有しても良い。
【００８２】
［全体処理のフローチャート］
図１２は、本実施の形態１に係る並列処理の説明するフローチャートである。図１２のフローチャートに従う処理は、制御プログラム１５０として制御回路３０のメモリ３２に格納されている。プロセッサ３１が、制御プログラム１５０をメモリ３２から読出し、読出された制御プログラム１５０を実行する。
【００８３】
図１２の処理を、図６を参照しつつ説明する。まず、プロセッサ３１は、初期化処理（ステップＳ１）を実施する。
【００８４】
具体的に、初期化処理では、プロセッサ３１は、入力変換回路１３１を起動し、初期化処理を実施させる。入力変換回路１３１は、外部記憶装置６２または外部入力装置６１からの係数行列Ａの非零の要素Ａijとバイアスベクトルｂの要素ｂiを、係数記憶回路１３２の複数の記憶回路Ｃｎに格納する。具体的には、図９で説明したように、記憶回路Ｃｎに対応のセレクタ１３が、要素Ａijと要素ｂiのインデックスと選択指令１５１とに基づき、選択した要素Ａijと要素ｂiを対応の記憶回路Ｃｎに格納する。
【００８５】
初期化処理が終了すると、演算回路１２は通常処理に移行する。通常処理においては、制御回路３０のプロセッサ３１は、外部記憶装置６２または外部入力装置６１から演算回路１２に入力ベクトルｘの要素をｘ1，…，ｘmが出力されたことを判定すると、入力変換回路１３１に、要素ｘ1，…，ｘmを入力記憶回路１３３に格納させる（ステップＳ３）。具体的には、図９で説明したように、セレクタ１３が、要素ｘ1，…，ｘmのインデックスと選択指令１５１とに基づき、選択した要素ｘjを対応の記憶回路ＭＩｋに格納する。
【００８６】
制御回路３０のプロセッサ３１は、セレクタ１３により、ベクトルｘの要素をｘ1，…，ｘmを対応の記憶回路ＭＩｋに格納する処理が完了したか否かを判断する（ステップＳ５）。プロセッサ３１は、格納が完了していないと判断した場合（ステップＳ５でＮＯ）、ステップＳ３に戻るが、格納が完了していると判断した場合（ステップＳ５でＹＥＳ）、ステップＳ７に移行する。格納が完了した（ステップＳ５でＹＥＳ）とき、各記憶回路Ｃｋは、非零の要素Ａijが演算されるべき順番で格納された状態となり、また各記憶回路ＭＩｋは、非零の要素Ａijに対応する要素ｂiが、演算されるべき順番で格納された状態となる。
【００８７】
制御回路３０のプロセッサ３１は、並列演算回路１２１に演算を実施させる（ステップＳ７）。ここでは、記憶回路Ｃｋには、図８（Ａ）に示した１つ目の方式に従い係数データ（非零の要素Ａijと要素ｂi）が格納されているケースを説明する。
【００８８】
並列演算回路１２１の各演算器ＣＬｋは、対応の記憶回路Ｃｋの位置（アドレス）から読出した非零の要素Ａijと、対応の記憶回路ＭＩｋの当該アドレスに対応したアドレスから読出した要素ｘｊとの積を、記憶回路Ｃｋに格納された要素Ａijのそれぞれについて繰返すことで、上記に述べた（積和演算処理）が完了する。全ての演算器ＣＬｋにおいて、積和演算処理は同時に（並行して）実施される。
【００８９】
制御回路３０のプロセッサ３１は、全ての演算器ＣＬｋにおいて積和演算処理が終了したとき、各演算器ＣＬｋを、演算結果である累算値ｓｕｍ（出力ｆｉ）を出力変換回路１４１に出力するように制御する。また、プロセッサ３１は、出力変換回路１４１を、各演算器ＣＬｋからの出力ｆｉを、制御指令を用いて各記憶回路ＭＯｋに格納するよう制御する（ステップＳ９）。
【００９０】
制御回路３０のプロセッサ３１は、出力ｆｉの格納が完了したか否かを判断する（ステップＳ１１）。プロセッサ３１は、格納が完了していないと判断すると（ステップＳ１１でＮＯ）、ステップＳ１１に戻るが、格納は完了したと判断すると（ステップＳ１１でＹＥＳ）、プロセッサ３１は、出力記憶回路１４２を、各記憶回路ＭＯｋに格納されている出力ｆｉを外部記憶装置６２または外部出力装置６３に出力するよう制御する（ステップＳ１３）。このとき、出力記憶回路１４２は、各記憶回路ＭＯｋから格納されている順に出力ｆｉの読出し、読出された出力ｆｉを読出された順序で回線に送出する。各記憶回路ＭＯｋから外部記憶装置６２または外部出力装置６３への出力ｆｉの送出は同時に実行される。
【００９１】
制御回路３０のプロセッサ３１は、演算処理は終了したか否かを判断する（ステップＳ１５）。プロセッサ３１は、終了したと判断すると図１２の処理は終了するが（ステップＳ１５でＹＥＳ）、終了していないと判断すると（ステップＳ１５でＮＯ）、ステップＳ３に戻る。なお、ステップＳ１５の判断は、例えばＣＰＵ５１からの指令に基づきなされる。
【００９２】
（フローチャートの変形例）
図１２のフローチャートでは、係数記憶回路１３２の記憶回路Ｃｋの格納方式は、図８（Ａ）の１つ目の方式であったが、図８（Ｂ）の２つ目の格納方式であってもよい。
【００９３】
２つ目の格納方式の場合は、並列演算回路１２１は、係数記憶回路１３２の各演算器ＣＬｋに対応する記憶回路Ｃｋに格納された各要素Ａijに、当該要素Ａijに対応のフラグＦより指示される種類の演算または処理を施す。この場合も、並列演算回路１２１の全ての演算器ＣＬｋは同時に動作する。
【００９４】
２つ目の格納方式の場合、並列演算回路１２１の各演算器ＣＬｋに対する演算量の平準化のため、係数行列Ａの１行分の演算を２つ（以上）の演算器ＣＬｋに振り分けて実施してもよい。この場合、並列演算回路１２１は、振り分けがなされた２つ(以上)の演算器ＣＬｋで計算した結果の和を、共有メモリ１２４を利用して算出する。また、振り分けがなされる演算器ＣＬｋの数が多くない場合、全演算数に対するこの振り分け処理の数は僅かとなり、振り分け処理が演算回路１２の演算性能へ及ぼす影響を無視することが可能となる。
【００９５】
実施の形態１によれば、入力Ｉ／Ｆ１２２により、並列演算回路１２１の各演算器ＣＬｋのみが読出し可能な記憶回路ＣｋとＭＩｋに、当該演算器ＣＬｋで演算されるべき係数データ（要素Ａijおよび要素ｂi）および入力データ（要素ｘｊ）を、演算に先立ち格納しておくことができる。これにより、全ての演算器ＣＬｋが演算を同時（並列）に実施するときに、係数データおよび入力データのアクセス（読出し）の競合を確実に回避することができて、並列処理を高速に実施することが可能となる。
【００９６】
また、記憶回路Ｃｋには、非零の要素Ａijのみが格納されているから、各演算器ＣＬｋにおいて、零である要素Ａijを用いた積の演算、すなわち不要な乗算を、積和演算から排除することができる。これにより、並列演算回路１２１で複数の演算器ＣＬｋによる積和演算の並列処理が開始されてから、処理の最終結果である出力ベクトルｆの要素をｆ1，…，ｆnを得るまでの所要時間を短くすることが可能となる。
【００９７】
実施の形態２．
実施の形態２は、実施の形態１の変形例を示す。図１３は、本実施の形態２に係る演算回路１２Ａの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図１３の演算回路１２Ａは、図６の入力Ｉ／Ｆ１２２とは異なる入力Ｉ／Ｆ１２２Ａを有する。演算回路１２Ａの他の構成は、図６のそれらと同様であるので説明は繰返さない。
【００９８】
図１３を参照して、入力Ｉ／Ｆ１２２Ａは、入力変換回路１３１および入力記憶回路１３３に代えて、入力変換回路１３１Ａおよび入力通知回路１３３Ｃを備える。図１４は、図１３の入力通知回路１３３Ｃの構成を示す図である。図１４を参照して、入力通知回路１３３Ｃは、図９のセレクタ１３の機能と、通知Ｎの出力機能とを備える複数のセレクタ１３Ａを備える。複数のセレクタ１３Ａは、演算器ＣＬｋにそれぞれ対応する。
【００９９】
入力変換回路１３１Ａは、外部入力装置６１または外部記憶装置６２から、入力ベクトルｘの要素ｘjを受付けたとき、要素ｘjのインデックスの値に基づき、複数の演算器ＣＬｋのうち、当該要素ｘjを用いた演算を実施する演算器ＣＬｋを特定し、特定された演算器ＣＬｋのみに要素ｘjを出力する。また、このとき、図１４の入力通知回路１３３Ｃでは、入力変換回路１３１Ａにより特定された演算器ＣＬｋに対応のセレクタ１３Ａが、対応の演算器ＣＬｋに演算の通知Ｎを出力する。通知Ｎを受けた演算器ＣＬｋは、係数記憶回路１３２の記憶回路Ｃｋから要素Ａijと要素ｂiを読出し、読出された要素Ａijと要素ｂiおよび入力変換回路１３１から要素ｘjを用いた積和演算を実施する。
【０１００】
実施の形態２によれば、例えば、外部入力装置６１または外部記憶装置６２から演算回路１２へ要素ｘjを転送する速度が低速である場合は、図１３の演算回路１２Ａのように、入力記憶回路１３３による要素ｘjの記憶に代えて、入力変換回路１３１Ａが要素ｘjを演算器ＣＬｋに直接入力する。
【０１０１】
これにより、入力記憶回路１３３のためのメモリリソースを不要にすることができる。さらに、入力通知回路１３３Ｃから通知を受けなかった演算器ＣＬｋは、すなわち当該要素ｘjを用いた演算をする必要のない演算器ＣＬｋを休止させることが可能となる。したがって、演算回路１２の回路規模と消費電力を小さくすることが可能になる。
【０１０２】
実施の形態３．
実施の形態３は、実施の形態１の変形例を示す。図１５は、本実施の形態３に係る演算回路１２Ｂの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図１５の演算回路１２Ｂは、図６の出力Ｉ／Ｆ１２３とは異なる出力Ｉ／Ｆ１２３Ｂを有する。演算回路１２Ｂの他の構成は、図６のそれらと同様であるので説明は繰返さない。
【０１０３】
図１５を参照して、出力Ｉ／Ｆ１２３Ｂは、出力変換回路１４１、出力記憶回路１４２および出力通知回路１４３を備える。図１６は、図１５の出力通知回路１４３の構成を周辺回路と関連付けて示す図である。図１６を参照して、出力通知回路１４３は、テーブル１４４および判断回路１４５を備える。テーブル１４４には、外部記憶装置６２または外部出力装置６３に送出されるべき出力ｆｉを識別する例えばインデックス情報が格納されている。インデックス情報は、外部記憶装置６２または外部出力装置６３が必要としている種類または個数の出力ｆｉを示す。
【０１０４】
判断回路１４５は、出力変換回路１４１を介して各演算器ＣＬｋから送出される出力ｆｉを監視する監視処理１４５１を実施する。監視処理１４５１では、例えば出力ｆｉのインデックスが読取られる。判断回路１４５は、監視の結果に基づき、テーブル１４４のインデックス情報が示す必要な種類または個数の全ての出力ｆｉが、並列演算回路１２１から出力されたと判断したとき、通知Ｎ１を外部記憶装置６２または外部出力装置６３に出力する。外部記憶装置６２または外部出力装置６３は、判断回路１４５から通知Ｎ１が出力されるまでは休止し、判断回路１４５から通知Ｎ１を受付けたとき、起動して、出力記憶回路１４２からの出力ｆｉを受付ける。
【０１０５】
実施の形態３によれば、例えば外部記憶装置６２または外部出力装置６３からバス４０へのデータ出力が低速な場合は、出力通知回路１４３から通知Ｎ１が出力されるまでの期間では、すなわちバス４０へのデータ出力が不要な期間では、外部記憶装置６２または外部出力装置６３を休止させることが可能になる。これにより、外部記憶装置６２または外部出力装置６３の消費電力量を少なくすることが可能になる。
【０１０６】
実施の形態４．
実施の形態４は、実施の形態１の変形例を示す。図１７は、本実施の形態４に係る演算回路１２Ｂの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図１７の演算回路１２Ｃは、実施の形態２の入力Ｉ／Ｆ１２２Ａと実施の形態３の出力Ｉ／Ｆ１２３Ｂとを備える。
【０１０７】
これにより、外部入力装置６１または外部記憶装置６２から演算回路１２Ｃへデータを転送する速度、または外部記憶装置６２または外部出力装置６３がバス４０へデータを出力する速度が低速である場合に、実施の形態２と実施の形態３における両方の利点を得ることができる。すなわち、入力記憶回路１３３のためのメモリリソースを不要にすることができる。さらに、演算を実施する必要のない演算器ＣＬｋを休止させることが可能となる。また、外部記憶装置６２または外部出力装置６３を常に動作させることなく休止させることができる。
【０１０８】
実施の形態５．
実施の形態５は、実施の形態１の変形例を示す。図１８は、本実施の形態５に係る演算回路１２Ｄの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図１８の演算回路１２Ｄは、図６の入力Ｉ／Ｆ１２２とは異なる入力Ｉ／Ｆ１２２Ｄを有する。演算回路１２Ｄの他の構成は、図６のそれらと同様であるので説明は繰返さない。
【０１０９】
図１８を参照して、入力Ｉ／Ｆ１２２Ｄは、入力変換回路１３１、係数記憶回路１３２、２重化入力記憶回路１３３Ａおよび２重化入力記憶回路１３３Ｂを備える。２重化入力記憶回路１３３Ａ，１３３Ｂにより、図６の入力記憶回路１３３は２重化される。２重化入力記憶回路１３３Ａ，１３３Ｂのそれぞれは、実施の形態１で説明した入力記憶回路１３３と同じ構成を有し、同様な動作をすることが可能である。
【０１１０】
制御回路３０のプロセッサ３１は、２重化入力記憶回路１３３Ａ，１３３Ｂの一方の機能を、外部入力装置６１または外部記憶装置６２からの要素ｘｊを受付けるような機能に切替え、他方の機能を並列演算回路１２１へ要素ｘｊを出力する機能に切替える。プロセッサ３１は、２重化入力記憶回路１３３Ａ，１３３Ｂのそれぞれが、各動作を完了したとき、一方の機能を並列演算回路１２１へ要素ｘｊを出力する機能に切替え、他方の機能を、外部入力装置６１または外部記憶装置６２からの要素ｘｊの受付けるような機能に切替える。
【０１１１】
実施の形態５によれば、外部入力装置６１または外部記憶装置６２から演算回路１２Ｄへ要素ｘｊを転送する速度が高速であるときは、２重化入力記憶回路１３３Ａ，１３３Ｂを用いることにより、演算回路１２Ｄが、外部入力装置６１または外部記憶装置６２から要素ｘｊを受信する処理と、並列演算回路１２１による演算処理とを同時に実施することが可能になる。したがって、演算回路１２Ｄによる演算速度を高速化することが可能となる。
【０１１２】
実施の形態６．
実施の形態６は、実施の形態１の変形例を示す。図１９は、本実施の形態６に係る演算回路１２Ｅの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図１９の演算回路１２Ｅは、図６の出力Ｉ／Ｆ１２３とは異なる出力Ｉ／Ｆ１２３Ｅを有する。演算回路１２Ｅの他の構成は、図６のそれらと同様であるので説明は繰返さない。
【０１１３】
図１９を参照して、出力Ｉ／Ｆ１２３Ｅは、出力変換回路１４１、２重化出力記憶回路１４２Ａおよび２重化出力記憶回路１４２Ｂを備える。２重化出力記憶回路１４２Ａ，１４２Ｂにより、図６の出力記憶回路１４２は２重化される。２重化出力記憶回路１４２Ａ，１４２Ｂのそれぞれは、実施の形態１で説明した出力記憶回路１４２と同じ構成を有し、同様な動作をすることが可能である。
【０１１４】
制御回路３０のプロセッサ３１は、２重化出力記憶回路１４２Ａ，１４２Ｂの一方の機能を、並列演算回路１２１から出力変換回路１４１を経由した出力ｆｉを記憶回路ＭＯｋに格納する機能に切替え、他方の機能を記憶回路ＭＯｋから出力ｆｉを読出し、読出された出力ｆｉを外部記憶装置６２または外部出力装置６３へ送出する機能に切替える。プロセッサ３１は、２重化出力記憶回路１４２Ａ，１４２Ｂのそれぞれが、各動作を完了したとき、一方の機能を記憶回路ＭＯｋから出力ｆｉを読出し、外部記憶装置６２または外部出力装置６３への送出する機能に切替え、他方の機能を、並列演算回路１２１から出力変換回路１４１を経由した出力ｆｉを記憶回路ＭＯｋに格納する機能に切替える。
【０１１５】
実施の形態６は、例えば、演算回路１２から外部記憶装置６２または外部出力装置６３へ出力ｆｉを高速に送出することが要求される場合に適用され得る。具体的には、出力記憶回路が２重化されることにより、演算回路１２は、外部記憶装置６２または外部出力装置６３への出力ｆｉを出力する処理と、並列演算回路１２１による演算処理とを同時に（並列に）実施することが可能となり、演算回路１２の演算処理をさらに高速化することができる。
【０１１６】
実施の形態７．
実施の形態７は、実施の形態１の変形例を示す。図２０は、本実施の形態７に係る演算回路１２Ｆの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。図２０の演算回路１２Ｆは、実施の形態５の２重化入力記憶回路１３３Ａ，１３３Ｂおよび実施の形態６の２重化出力記憶回路１４２Ａ，１４２Ｂを備える。
【０１１７】
実施の形態７の演算回路１２Ｆは、入力記憶回路および出力記憶回路を、それぞれ２重化して備える。演算回路１２Ｆによれば、外部入力装置６１または外部記憶装置６２から高速に出力される要素ｘｊの受付け、外部記憶装置６２または外部出力装置６３への出力ｆｉの高速な送出、および並列演算回路１２１による演算処理が同時に可能となる。
【０１１８】
実施の形態８．
実施の形態８は、実施の形態１の変形例を示す。図２１は、本実施の形態８に係る演算回路の構成を示す図である。図２１の演算回路は、演算回路１２Ｇと、演算回路１２Ｇに接続された演算回路１２Ｈを有する。演算回路１２Ｇは、実施の形態１の演算回路１２の出力Ｉ／Ｆ１２３が削除されているが、他は演算回路１２と同じである。演算回路１２Ｈは、入力Ｉ／Ｆ１２２Ｈ、並列演算回路１２１および出力Ｉ／Ｆ１２３を備える。入力Ｉ／Ｆ１２２Ｈは、入出力変換回路１３１Ｈ、係数記憶回路１３２および入力記憶回路１３３を備える。図２１において、入出力変換回路１３１Ｈを除く他の構成は、実施の形態１の演算回路１２が備える構成と同じであるから、説明は繰返さない。
【０１１９】
入出力変換回路１３１Ｈは、演算回路１２Ｇの複数の演算器ＣＬｋからの出力ｆｉを直接受付けて、受付けた出力ｆｉから、演算回路１２Ｈの演算器ＣＬｋ毎に、当該演算器ＣＬｋにより演算されるべき出力ｆｉを特定する。そして、入出力変換回路１３１Ｈは、特定した出力ｆｉを、当該演算器ＣＬｋに対応する入力記憶回路１３３の記憶回路ＭＩｋに演算されるべき順序に従い格納する。図２１では、演算回路１２は２つ接続されるが、接続される個数は、３つ以上であってもよい。
【０１２０】
実施の形態８によれば、２つ以上の演算回路１２を接続することが可能となる。例えば、ＬＳＩ（Large-Scale  Integration）回路内で２つ以上の演算回路１２を接続することが可能となる。このように、２つ以上の演算回路１２を接続するような場合、演算回路どうしを接続する接続部に入出力変換回路１３１Ｈを備えることにより、出力変換回路１４１および入力変換回路１３１によるセレクタ１４（またはセレクタ１３）を用いた２つの処理を、入出力変換回路１３１Ｈによる１回の処理で済ませることができる。したがって、複数の演算回路を接続するとしても、処理の高速化は可能となる。
【０１２１】
実施の形態９．
実施の形態９は、実施の形態１の変形例を示す。図２２は、本実施の形態９に係る演算回路の構成を示す図である。図２２の演算回路は、演算回路１２Ｇと、演算回路１２Ｇに接続された演算回路１２Ｉを有する。演算回路１２Ｇは、実施の形態１の演算回路１２の出力Ｉ／Ｆ１２３が削除されているが、他は演算回路１２と同じであるので、説明は繰返さない。
【０１２２】
演算回路１２Ｉは、入力Ｉ／Ｆ１２２Ｈ、並列演算回路１２１および出力Ｉ／Ｆ１２３Ｂを備える。並列演算回路１２１および出力Ｉ／Ｆ１２３Ｂは、実施の形態３で示されたものと同様である。入力Ｉ／Ｆ１２２Ｉは、実施の形態８で示された入出力変換回路１３１Ｈ、出力通知回路１４３Ｉ、係数記憶回路１３２および入力記憶回路１３３を備える。入出力変換回路１３１Ｈ、係数記憶回路１３２および入力記憶回路１３３は、実施の形態３または実施の形態８で示されたものと同様であるから、説明は繰返さない。
【０１２３】
出力通知回路１４３Ｉは、演算回路１２Ｉの各演算器ＣＬｋに通知Ｎ２を出力する。具体的には、入出力変換回路１３１Ｈが、前段の演算回路１２Ｇの複数の演算器ＣＬｋからの出力ｆｉを、演算回路１２Ｉの各演算器ＣＬｋに対応する記憶回路ＭＩｋに格納するときに、出力通知回路１４３Ｉは、当該記憶回路ＭＩｋに当該出力ｆｉよりも先に演算されるべき出力ｆｉが格納されているかを判定する。出力通知回路１４３Ｉは、この判定を、例えば、出力ｆｉのインデックスの値に基づき実施する。出力通知回路１４３Ｉは、記憶回路ＭＩｋに先に演算されるべき出力ｆｉが全て格納されていると判定したとき、当該記憶回路ＭＩｋに対応する演算器ＣＬｋに通知Ｎ２を出力する。これにより、演算器ＣＬｋは、対応の記憶回路ＭＩｋに積和演算の開始に必要な要素ｘj（すなわち、出力ｆｉ）の全てが格納されたことの通知Ｎ２を受けたとき、積和演算を開始することができる。
【０１２４】
なお、図２２では、演算回路１２は２つ接続されるが、接続される個数は、３つ以上であってもよい。
【０１２５】
実施の形態９によれば、実施の形態３に示す２つ以上の演算回路１２Ｂを接続することが可能となる。例えば、２つ以上の演算回路１２ＢをＬＳＩ回路内で接続するような場合、接続部に入出力変換回路１３１Ｈを備えることにより、出力変換回路１４１の処理および入力変換回路１３１による処理の２つの処理を、入出力変換回路１３１Ｈによる１回の処理で済ませることができる。したがって、複数の演算回路を接続するとしても、処理の高速化は可能となる。
【０１２６】
実施の形態１０．
実施の形態１０は、実施の形態１の変形例を示す。図２３は、本実施の形態１０に係る演算回路の構成を示す図である。図２３の演算回路は、演算回路１２Ｊと、演算回路１２Ｊに接続された演算回路１２Ｋを有する。演算回路１２Ｊは、実施の形態７で示された演算回路１２Ｆから出力Ｉ／Ｆ１２３が削除されているが、他の構成は演算回路１２Ｆのそれらと同様であるので、説明は繰返さない。また、演算回路１２Ｋは、入力Ｉ／Ｆ１２２Ｋ、並列演算回路１２１、および出力Ｉ／Ｆ１２３Ｅを備える。入力Ｉ／Ｆ１２２Ｋは、入出力変換回路１３１Ｋ、２重化入力記憶回路１３３Ａ，１３３Ｂおよび係数記憶回路１３２を備える。演算回路１２Ｋにおける入出力変換回路１３１Ｋを除く他の構成は、実施の形態７の演算回路１２Ｆのそれらと同じであるので、説明は繰返さない。
【０１２７】
入出力変換回路１３１Ｋは、演算回路１２Ｊの複数の演算器ＣＬｋからの出力ｆｉを直接受付けて、受付けた出力ｆｉから、演算回路１２Ｋの演算器ＣＬｋ毎に、当該演算器ＣＬｋにより演算されるべき出力ｆｉを特定する。入出力変換回路１３１Ｋは、特定した出力ｆｉを、当該演算器ＣＬｋに対応する入力記憶回路１３３の記憶回路ＭＩｋに演算されるべき順序に従い格納する。ここでは、演算回路は２つ接続されるが、接続される個数は、３つ以上であってもよい。
【０１２８】
実施の形態１０によれば、実施の形態７に示す２つ以上の演算回路１２Ｆを接続することが可能となる。例えば、２つ以上の演算回路１２ＦをＬＳＩ回路内で接続するような場合、接続部に入出力変換回路１３１Ｋを備えることにより、出力変換回路１４１の処理および入力変換回路１３１の処理の２つの処理を、入出力変換回路１３１Ｋによる１回の処理で済ませることができる。したがって、複数の演算回路を接続するとしても、処理の高速化は可能となる。
【０１２９】
（各実施の形態の変形例）
各実施の形態に係る演算回路は、図２４のように変形されてもよい。図２４は、本発明の各実施の形態に係る演算回路の「行列ケース」に従う演算を実行可能な構成の一例を模式的に示す図である。実施の形態１．〜実施の形態８．の演算回路は、図２４に示すような、「行列ケース」に従う積和演算を算出可能に構成され得る。図２４では、ｎ×ｎの係数行列Ａと、入力データ１００に相当するｎ×ｎの行列Ｘの積和演算を実行可能な演算器ＣＬｋが示される。
【０１３０】
図２４を参照して、演算器ＣＬｋは、図１１に示すものと同様の構成を有するので説明は繰返さない。図２４では、演算器ＣＬｋには、演算器ＣＬｋから読出し可能な係数記憶回路１３２Ｒ、バイアスベクトルｂの要素を格納する係数記憶回路１３２および入力記憶回路１３３が接続される。入力記憶回路１３３は、図１１に示すものと同様の構成を有する。係数記憶回路１３２Ｒは破線で示すようリングバッファを備える。
【０１３１】
演算器ＣＬｋの積和演算の結果は記憶回路ＡＭＯｋに格納される。記憶回路ＡＭＯｋは、ｎ個のレジスタＲＧを含む。したがって、記憶回路ＡＭＯｋ（ｋ＝１、２、…、ｎ）は、行列の次元数(ｎ×ｎ個)と同数のレジスタＲＧを備える。
【０１３２】
図２４では、演算器が備える複数の演算器ＣＬｋのうち１つを示すが、他の演算器ＣＬｋも同様の構成を有する。行列Ｘはｎ個の列ベクトルから構成されるとみなし、図２４の入力記憶回路１３３には行列Ｘの要素が列優先の順番で入力される。図２４の入力記憶回路１３３には、例えば、行列Ｘのｋ番目の列の要素ｘｋ１〜ｘｋｎが格納されている。
【０１３３】
演算器ＣＬｋは、行列Ｘの１列分の積和演算を、実施の形態１〜８の場合と同様に、行列Ｘの列毎に繰返す。演算器ＣＬｋは係数行列Ａのｋ番目の行と行列Ｘの各列との積和演算を実施し、ｎ個の積和演算の値（出力ｆｉに相当）を出力する。この積和演算においても、係数行列Ａのｋ番目の行の要素のうち非零の要素Ａijが選択されて、選択された非零要素Ａijを用いた積和演算が実施される。説明を簡単にするために、係数行列Ａのｋ番目の行は非零要素Ａijを含まないとする。
【０１３４】
演算器ＣＬｋから出力されるｎ個の積和演算の値は、それぞれ、記憶回路ＡＭＯｋのｎ個のレジスタＲＧに格納される。図２４では、例えば、演算器ＣＬｋが行列Ｘのｋ番目の列を用いた積和演算を実行した場合において、その積和演算の値が、記憶回路ＡＭＯｋのｋ番目のレジスタＲＧ（斜線で示されたレジスタＲＧ）に格納された状態が示される。
【０１３５】
演算器ＣＬｋ（ｋ＝１、２、…ｎ）が積和演算を終了したとき、出力記憶回路の記憶回路ＡＭＯｋ（ｋ＝１、２、…ｎ）が備える(ｎ×ｎ個)のレジスタＲＧには、係数行列Ａと行列Ｘの積和演算の結果が格納される。
【０１３６】
ここで、実施の形態の背景として、演算器ＣＬｋが積和演算を繰返し中は、行列Ｘのｋ番目の列の積和演算が完了し、その後に次列（ｋ+１番目の列）の積和演算を開始するとき、当該次列の積和演算を開始する前に、演算器ＣＬｋの係数行列Ａの入力を初期化する必要がある。例えば、係数行列Ａのｋ番目の行の先頭の要素から読出し開始可能にするような初期化が必要とされる。したがって、次列の積和演算の開始は、当該初期化にかかる時間だけ遅延するおそれがある。
【０１３７】
このような遅延を回避するために、図２４では、係数行列Ａのｋ番目の行の要素は、係数記憶回路１３２Ｒのリングバッファに格納される。これにより、図２４の演算器ＣＬｋは、行列Ｘのｋ番目の列の積和演算が完了したときは、上記の初期化なしに、次列（ｋ+１番目の列）の積和演算を開始することができる。したがって、「行列ケース」における積和演算を高速に実施することが可能となる。
【０１３８】
なお、実施の形態１．〜実施の形態８．で説明したような係数行列Ａと入力ベクトルｘの積和演算においても、リングバッファを備える係数記憶回路を用いることができる。したがって、図２４の演算回路を適用することにより、行列×ベクトルの積和演算および「行列ケース」に従う行列×行列の積和演算の両方において積和演算の高速化できる。
【０１３９】
（各実施の形態のさらなる変形例）
各実施の形態のさらなる変形例を説明する。各実施の形態に係る演算回路は図２５のように変形されてもよい。図２５は、本発明の各実施の形態に係る演算回路の「行列ケース」に従う演算を実行可能な構成の他の例を模式的に示す図である。実施の形態１．〜実施の形態８．の演算回路は、図２５に示すような演算回路を適用することができる。図２５でも、図２４と同様に、ｎ×ｎの係数行列Ａと、ｎ×ｎの行列Ｘの積和演算を実行可能な演算器ＣＬｋが示される。
【０１４０】
図２５の演算器ＣＬｋ、係数記憶回路１３２および１３２Ｒ、入力記憶回路１３３および記憶回路ＡＭＯｋの構成は、図２４のそれらと同様あるので、これらの説明は繰返さない。図２５では、演算回路は出力インターフェイス１２３Ｒを備える。出力インターフェイス１２３Ｒは、ｎ個の記憶回路ＡＭＯｋ（ｋ＝１、２、・・・、ｎ）を含む出力記憶回路１４２Ｒを備える。
【０１４１】
図２５では、図２４のケースとは異なり、行列Ｘの要素は行優先の順番で入力記憶回路１３３に格納されて、係数行列Ａのｋ番目の列の要素は係数記憶回路１３２Ｒに格納される。このように、図２５の演算器ＣＬｋを用いた積和演算では、行列Ｘは行ベクトルから構成されて、係数行列Ａは列ベクトルから構成されるとみなされる。
【０１４２】
図２５の演算器ＣＬｋは、行列Ｘのｋ番目の行ベクトル(当該行ベクトルのすべての要素ｘｋ１〜ｘｋｎ)が入力記憶回路１３３に格納されると、格納された要素ｘｋ１〜ｘｋｎと係数行列Ａのｋ番目の列の要素Ａｋ１〜Ａｋｎとを用いた積和演算を実行する。この積和演算においては、要素Ａｋ１〜Ａｋｎのうち非零の要素Ａijが選択されて、選択された非零要素Ａijを用いた積和演算が実施される。説明を簡単にするために、係数行列Ａのｋ番目の列は非零要素Ａijを含まないとする。
【０１４３】
係数行列Ａおよび行列Ｘを用いた積和演算が完了すると、出力記憶回路１４２Ｒのｎ個の記憶回路ＡＭＯｋが備えるｎ×ｎ個のレジスタＲＧに、それぞれ、要素Ｔijとして積和演算結果の値が格納される。したがって、出力記憶回路１４２Ｒには、（ｎ×ｎ）次元の行列Ｔが格納される。
【０１４４】
プロセッサ３１は、行列Ｔから読出すべき要素Ｔijの順番を決定し、決定した順番に従い、要素ＴijがレジスタＲＧから読出されるように、出力インターフェイス１２３Ｒに制御指令ＣＭを出力する。例えば、図２５の演算器ＣＬｋを備える演算回路１２の出力段に次の（別の）演算回路１２が接続される場合を想定する。この場合、制御指令ＣＭは、次の演算回路１２の入力データとして、列優先順に従う入力データとするか、または行優先順に従う入力データとするかの指定を含む。出力インターフェイス１２３Ｒは制御指令ＣＭに従い、ｎ×ｎ個のレジスタＲＧから要素Ｔijを読出す。これにより、次の演算回路１２は、入力データの行列Ｘの要素ｘijを列優先の順番または行優先の順番で受信することができる。
【０１４５】
図２５によれば、演算回路１２が行列と行列の積和演算を実行して得られた行列Ｔを、次の演算回路１２が入力（すなわち行列Ｘ）として受付ける場合に、次の演算回路１２は、積和演算処理を実施するに際して、行列Ｘの要素ｘijを列優先の順番または行優先の順番で並べ替える処理を実施する必要はない。
【０１４６】
具体的には、通常、外部入力装置６１または外部記憶装置６２を介して演算回路１２に転送される行列Ｘが画像等である場合は、外部入力装置６１または外部記憶装置６２は行列Ｘの要素ｘijを行優先の順番で演算回路１２に出力する。したがって、行列Ｔの要素ｘijが、並べ替えされずに、次の演算回路１２に出力される場合は、次の演算回路１２は積算処理を開始する前に行列Ｔの要素Ｔijを行優先の順番で並べ替える必要がある。これに対し、図２５では、出力インターフェイス１２３Ｒが制御指令ＣＭに従い出力記憶回路１４２Ｒから要素Ｔijを読出す。
【０１４７】
具体的には、プロセッサ３１は、例えば積和演算処理の対象となる入力データ（すなわち行列Ｔの要素Ｔij）の種類に基づき制御指令ＣＭを設定する。この種類は画像を含み得る。プロセッサ３１は、入力データの種類が画像であれば、制御指令ＣＭに“行優先”の読出指令を設定し、そうでなければ“列優先”の読出指令を設定する。
【０１４８】
出力インターフェイス１２３Ｒは、制御指令ＣＭが“行優先”の読出指令を示すとき、ｎ×ｎ個のレジスタＲＧから要素Ｔijを、インデックスに従い行優先の順番で読出し、また、制御指令ＣＭが“列優先”の読出指令を示すときは、要素Ｔijをインデックスに従い列優先の順番で読出す。このように、入力データの種類（画像か否か等）に基づき次の演算回路１２は、行列Ｔの要素Ｔijが列優先および行優先のいずれか一方に従い配列された入力（すなわち行列Ｘ）を受付けることができて、行列Ｘの要素ｘijの並べ替え処理を省略することができる。これにより、演算回路１２は積和演算処理を高速に実施することができる。
【０１４９】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１５０】
１２，１２Ａ，１２Ｂ，１２Ｃ，１２Ｄ，１２Ｅ，１２Ｆ，１２Ｇ，１２Ｈ，１２Ｉ，１２Ｊ，１２Ｋ  演算回路、１７  ポート、６１  外部入力装置、６２  外部記憶装置、６３  外部出力装置、ｘ  入力ベクトル、１１１，Ａ  係数行列、１２１  並列演算回路、１２４  共有メモリ、１３１，１３１Ａ  入力変換回路、１３２，１３２Ｄ  係数記憶回路、１３３  入力記憶回路、１３３Ａ，１３３Ｂ  ２重化入力記憶回路、１３３Ｃ  入力通知回路、１４１  出力変換回路、１４２  出力記憶回路、１４２Ａ，１４２Ｂ  ２重化出力記憶回路、１４３，１４３Ｉ  出力通知回路、ＣＬｋ  演算器、Ｃｋ，Ｃｎ，ＭＩｋ，ＭＯｋ  記憶回路。
【図１】
2019077933.tif 000004
【図２】
2019077933.tif 000005
【図３】
2019077933.tif 000006
【図４】
2019077933.tif 000007
【図５】
2019077933.tif 000008
【図６】
2019077933.tif 000009
【図７】
2019077933.tif 000010
【図８】
2019077933.tif 000011
【図９】
2019077933.tif 000012
【図１０】
2019077933.tif 000013
【図１１】
2019077933.tif 000014
【図１２】
2019077933.tif 000015
【図１３】
2019077933.tif 000016
【図１４】
2019077933.tif 000017
【図１５】
2019077933.tif 000018
【図１６】
2019077933.tif 000019
【図１７】
2019077933.tif 000020
【図１８】
2019077933.tif 000021
【図１９】
2019077933.tif 000022
【図２０】
2019077933.tif 000023
【図２１】
2019077933.tif 000024
【図２２】
2019077933.tif 000025
【図２３】
2019077933.tif 000026
【図２４】
2019077933.tif 000027
【図２５】
2019077933.tif 000028
【手続補正書】
【提出日】平成31年2月4日(2019.2.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の演算器を含む並列演算回路と、
複数の記憶回路を含む入力インターフェイスと、を備え、
前記複数の演算器は、前記複数の記憶回路にそれぞれ対応するように構成され、
各前記複数の演算器は、対応の前記記憶回路に格納されたデータを用いた演算をするように構成され、
各前記記憶回路は、
入力データを記憶する入力記憶回路と、
係数データを記憶する係数記憶回路と、を有し、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を指定するインデックスを有し、
前記入力インターフェイスは、
外部装置からの前記入力データおよび前記係数データを、それぞれ、当該データが有する前記インデックスに基づき、前記複数の演算器のうちの１の演算器に対応した前記入力記憶回路および前記係数記憶回路に前記順番に従い格納するように構成される、演算回路。
【請求項２】
前記入力記憶回路は、２重化された入力記憶回路を含み、
前記２重化された入力記憶回路の一方は、前記外部装置からの前記入力データを格納し、格納が完了したとき、対応する前記演算器による入力データの読出が可能なように構成され、
前記２重化された入力記憶回路の他方は、対応する前記演算器により入力データが読出されて、読出しが完了したとき、前記外部装置からの前記入力データを格納するよう構成される、請求項１に記載の演算回路。
【請求項３】
複数の演算器を含む並列演算回路と、
複数の記憶回路を含む入力インターフェイスと、を備え、
前記複数の演算器は、前記複数の記憶回路にそれぞれ対応するように構成され、
各前記複数の演算器は、係数データと入力データを用いた演算をするように構成され、
各前記記憶回路は、
前記係数データを記憶する係数記憶回路を有し、
前記入力インターフェイスは、
外部装置からの前記係数データを、各前記演算器に対応した前記記憶回路に格納する入力回路を、さらに含み、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を識別するインデックスを有し、
前記入力回路は、
前記外部装置からの前記係数データを、当該データが有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器に対応した前記係数記憶回路に、前記順番に従い格納するよう構成され、
前記入力インターフェイスは、
前記外部装置から前記入力データを受付けたとき、当該入力データの前記インデックスが示す前記演算器に当該入力データを出力する、演算回路。
【請求項４】
前記各演算器は、非零要素と零要素とを含む係数行列に右から入力ベクトルを掛け、演算結果を出力ベクトルに出力するよう構成され、
前記入力データは、前記入力ベクトルの要素を含み、
前記係数データは、前記係数行列の要素を含み、
前記各演算器は、さらに、対応する前記入力ベクトルの要素と前記係数行列の対応する要素との乗算を順次実行し、前記乗算の結果を前記出力ベクトルの要素に積算するように構成される、請求項１から３のいずれか１項に記載の演算回路。
【請求項５】
前記並列演算回路は、さらに、前記係数行列に右から入力行列を掛け、演算結果を出力行列に出力するよう構成され、
前記入力ベクトルは、前記入力行列を構成する行または列ベクトルを含み、
前記出力行列を構成する行または列ベクトルは、前記各演算器に対応の前記出力ベクトルを含む、請求項４に記載の演算回路。
【請求項６】
前記出力行列を格納するように構成された複数の出力記憶回路を含む出力インターフェイスをさらに備え、
前記複数の出力記憶回路は、前記複数の演算器にそれぞれ対応するように構成され、
各前記出力記憶回路は、対応の前記演算器からの前記出力ベクトルを格納するように構成され、
前記出力インターフェイスは、前記複数の出力記憶回路から前記出力行列の要素を前記インデックスに基づき列優先または行優先で読出すように構成される、請求項５に記載の演算回路。
【請求項７】
前記出力インターフェイスは、制御指令に従い、前記複数の出力記憶回路から前記出力行列の要素を前記列優先または前記行優先で読出すように構成される、請求項６に記載の演算回路。
【請求項８】
前記出力行列を前記入力行列として他の前記演算回路に出力するとき、前記制御指令は、前記出力行列の要素が表すデータの種類に基づき、列優先および行優先のいずれか一方に従う読出指令を含む、請求項７に記載の演算回路。
【請求項９】
前記データの種類は画像を含む、請求項８に記載の演算回路。
【請求項１０】
前記係数記憶回路は、リングバッファを含み、
前記係数記憶回路は、前記リングバッファに前記係数行列を構成する行または列ベクトルの要素を格納するよう構成される、請求項４から９のいずれか１項に記載の演算回路。
【請求項１１】
前記要素が有するインデックスは、さらに、当該要素を演算するべき前記演算器を指定し、
前記入力インターフェイスは、
外部装置からの前記係数行列の前記行または列ベクトルの要素を、当該要素が有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器に対応した前記係数記憶回路のリングバッファに、前記順番に従い書込むよう構成される、請求項１０に記載の演算回路。
【請求項１２】
前記演算回路は、
前記複数の演算器のうちの１の演算器の演算結果を格納し、他の前記演算器から読出し可能に構成される共有メモリを、さらに備える、請求項１から１１のいずれか１項に記載の演算回路。
【請求項１３】
前記出力インターフェイスは、さらに、出力回路と、前記各演算器からの前記出力ベクトルを前記外部装置に出力する複数のポートとを含み、
前記複数の出力記憶回路は、前記複数のポートにそれぞれ対応し、
前記出力回路は、
前記各演算器から前記出力ベクトルの要素を受付けたとき、予め定められた基準情報と当該要素の前記インデックスとに基づき、前記複数の出力記憶回路から１つを選択し、選択された出力記憶回路に当該要素を格納するよう構成される、請求項６から９のいずれか１項に記載の演算回路。
【請求項１４】
前記出力回路は、さらに、
前記予め定められた基準情報と前記出力ベクトルの要素の前記インデックスとに基づく順番に従い、前記選択された出力記憶回路に当該要素を格納するよう構成される、請求項１３に記載の演算回路。
【請求項１５】
前記出力回路は、
予め定められた数の要素が前記複数の出力記憶回路に格納されたとき、前記複数の出力記憶回路の前記要素を前記複数のポートを介して出力する、請求項１３または１４に記載の演算回路。
【請求項１６】
前記出力回路は、
前記予め定められた数の要素が前記複数の出力記憶回路に格納されたとき、当該要素を前記複数のポートを介して出力する旨の通知を、前記外部装置に出力する、請求項１５に記載の演算回路。
【請求項１７】
各前記出力記憶回路は、２重化された出力記憶回路を含み、
前記２重化された出力記憶回路の一方は、前記演算器からの前記出力ベクトルの要素を格納し、格納が完了したとき、対応する前記ポートによって要素が読出されるように構成され、
前記２重化された出力記憶回路の他方は、対応する前記ポートにより前記要素が読出されて、読出しが完了したとき、前記演算器からの前記出力ベクトルの要素が格納されるように構成される、請求項１３から１６のいずれか１項に記載の演算回路。
【請求項１８】
前記外部装置は、他の前記演算回路を含み、前記入力ベクトルは、他の前記演算回路が備える前記各演算器から出力されるベクトルを含む、請求項４に記載の演算回路。
【請求項１９】
前記演算回路は、畳み込みニューラルネットワークにおける畳み込み層の演算を実行するためのものであり、
前記入力ベクトルは、前記畳み込み層に入力される特徴マップを一列に展開したものであり、
前記係数行列は、前記畳み込み層で利用されるカーネルに対応する、請求項４に記載の演算回路。
【請求項２０】
複数の演算器を含む並列演算回路を用いた演算方法であって、
前記並列演算回路は、各前記複数の演算器に対応し、当該演算器から読出し可能に構成された記憶回路を含み、
前記演算方法は、
装置から演算のための係数データまたは入力データを受付けること、を備え、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を指定するインデックスを有し、
前記演算方法は、さらに、
前記係数データまたは前記入力データを受付けたとき、前記入力データまたは前記係数データが有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器を特定すること、および、
前記受付けられた入力データまたは係数データを、当該受付けられた入力データまたは係数データが有する前記インデックスに基づく前記順番に従い、特定された前記演算器に対応の前記記憶回路に格納すること、を備える、演算方法。
【請求項２１】
複数の演算器を含む並列演算回路を用いた演算方法であって、
前記並列演算回路は、各前記複数の演算器に対応し、当該演算器から読出し可能に構成された記憶回路を含み、
前記記憶回路は、演算のための係数データを格納する回路を含み、
前記演算方法は、
装置から演算のための入力データを受付けること、を備え、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を指定するインデックスを有し、
前記記憶回路は、前記係数データを、当該係数データが有する前記インデックスに基づく前記順番に従い格納するよう構成され、
前記演算方法は、さらに、
前記入力データを受付けたとき、前記入力データが有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器を特定すること、および、
前記受付けられた入力データを、当該入力データが有する前記インデックスに基づく前記順番に従い、特定された前記演算器に出力すること、を備える、演算方法。
【手続補正書】
【提出日】令和2年3月27日(2020.3.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の演算器を含む並列演算回路と、
複数の記憶回路を含む入力インターフェイスと、を備え、
前記複数の演算器は、前記複数の記憶回路にそれぞれ対応するように構成され、
各前記複数の演算器は、対応の前記記憶回路に格納されたデータを用いた演算をするように構成され、
各前記記憶回路は、
入力データを記憶する入力記憶回路と、
係数データを記憶する係数記憶回路と、を有し、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を指定するインデックスを有し、
前記入力インターフェイスは、
外部装置からの前記入力データおよび前記係数データを、それぞれ、当該データが有する前記インデックスに基づき、前記複数の演算器のうちの１の演算器に対応した前記入力記憶回路および前記係数記憶回路に前記順番に従い格納するように構成される、演算回路。
【請求項２】
前記入力記憶回路は、２重化された入力記憶回路を含み、
前記２重化された入力記憶回路の一方は、前記外部装置からの前記入力データを格納し、格納が完了したとき、対応する前記演算器による入力データの読出が可能なように構成され、
前記２重化された入力記憶回路の他方は、対応する前記演算器により入力データが読出されて、読出しが完了したとき、前記外部装置からの前記入力データを格納するよう構成される、請求項１に記載の演算回路。
【請求項３】
複数の演算器を含む並列演算回路と、
複数の記憶回路を含む入力インターフェイスと、を備え、
前記複数の演算器は、前記複数の記憶回路にそれぞれ対応するように構成され、
各前記複数の演算器は、係数データと入力データを用いた演算をするように構成され、
各前記記憶回路は、
前記係数データを記憶する係数記憶回路を有し、
前記入力インターフェイスは、
外部装置からの前記係数データを、各前記演算器に対応した前記記憶回路に格納する入力回路を、さらに含み、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を識別するインデックスを有し、
前記入力回路は、
前記外部装置からの前記係数データを、当該データが有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器に対応した前記係数記憶回路に、前記順番に従い格納するよう構成され、
前記入力インターフェイスは、
前記外部装置から前記入力データを受付けたとき、当該入力データの前記インデックスが示す前記演算器に当該入力データを出力する、演算回路。
【請求項４】
前記各演算器は、非零要素と零要素とを含む係数行列に右から入力ベクトルを掛け、演算結果を出力ベクトルに出力するよう構成され、
前記入力データは、前記入力ベクトルの要素を含み、
前記係数データは、前記係数行列の要素を含み、
前記各演算器は、さらに、対応する前記入力ベクトルの要素と前記係数行列の対応する要素との乗算を順次実行し、前記乗算の結果を前記出力ベクトルの要素に積算するように構成される、請求項１から３のいずれか１項に記載の演算回路。
【請求項５】
前記並列演算回路は、さらに、前記係数行列に右から入力行列を掛け、演算結果を出力行列に出力するよう構成され、
前記入力ベクトルは、前記入力行列を構成する行または列ベクトルを含み、
前記出力行列を構成する行または列ベクトルは、前記各演算器に対応の前記出力ベクトルを含む、請求項４に記載の演算回路。
【請求項６】
前記出力行列を格納するように構成された複数の出力記憶回路を含む出力インターフェイスをさらに備え、
前記複数の出力記憶回路は、前記複数の演算器にそれぞれ対応するように構成され、
各前記出力記憶回路は、対応の前記演算器からの前記出力ベクトルを格納するように構成され、
前記出力インターフェイスは、前記複数の出力記憶回路から前記出力行列の要素を前記インデックスに基づき列優先または行優先で読出すように構成される、請求項５に記載の演算回路。
【請求項７】
前記出力インターフェイスは、制御指令に従い、前記複数の出力記憶回路から前記出力行列の要素を前記列優先または前記行優先で読出すように構成される、請求項６に記載の演算回路。
【請求項８】
前記出力行列を前記入力行列として他の前記演算回路に出力するとき、前記制御指令は、前記出力行列の要素が表すデータの種類に基づき、列優先および行優先のいずれか一方に従う読出指令を含む、請求項７に記載の演算回路。
【請求項９】
前記データの種類は画像を含む、請求項８に記載の演算回路。
【請求項１０】
前記係数記憶回路は、リングバッファを含み、
前記係数記憶回路は、前記リングバッファに前記係数行列を構成する行または列ベクトルの要素を格納するよう構成される、請求項４から９のいずれか１項に記載の演算回路。
【請求項１１】
前記要素が有するインデックスは、さらに、当該要素を演算するべき前記演算器を指定し、
前記入力インターフェイスは、
外部装置からの前記係数行列の前記行または列ベクトルの要素を、当該要素が有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器に対応した前記係数記憶回路のリングバッファに、前記順番に従い書込むよう構成される、請求項１０に記載の演算回路。
【請求項１２】
前記演算回路は、
前記複数の演算器のうちの１の演算器の演算結果を格納し、他の前記演算器から読出し可能に構成される共有メモリを、さらに備える、請求項１から１１のいずれか１項に記載の演算回路。
【請求項１３】
前記出力インターフェイスは、さらに、出力回路と、前記各演算器からの前記出力ベクトルを前記外部装置に出力する複数のポートとを含み、
前記複数の出力記憶回路は、前記複数のポートにそれぞれ対応し、
前記出力回路は、
前記各演算器から前記出力ベクトルの要素を受付けたとき、予め定められた基準情報と当該要素の前記インデックスとに基づき、前記複数の出力記憶回路から１つを選択し、選択された出力記憶回路に当該要素を格納するよう構成される、請求項６から９のいずれか１項に記載の演算回路。
【請求項１４】
前記出力回路は、さらに、
前記予め定められた基準情報と前記出力ベクトルの要素の前記インデックスとに基づく順番に従い、前記選択された出力記憶回路に当該要素を格納するよう構成される、請求項１３に記載の演算回路。
【請求項１５】
前記出力回路は、
予め定められた数の要素が前記複数の出力記憶回路に格納されたとき、前記複数の出力記憶回路の前記要素を前記複数のポートを介して出力する、請求項１３または１４に記載の演算回路。
【請求項１６】
前記出力回路は、
前記予め定められた数の要素が前記複数の出力記憶回路に格納されたとき、当該要素を前記複数のポートを介して出力する旨の通知を、前記外部装置に出力する、請求項１５に記載の演算回路。
【請求項１７】
各前記出力記憶回路は、２重化された出力記憶回路を含み、
前記２重化された出力記憶回路の一方は、前記演算器からの前記出力ベクトルの要素を格納し、格納が完了したとき、対応する前記ポートによって要素が読出されるように構成され、
前記２重化された出力記憶回路の他方は、対応する前記ポートにより前記要素が読出されて、読出しが完了したとき、前記演算器からの前記出力ベクトルの要素が格納されるように構成される、請求項１３から１６のいずれか１項に記載の演算回路。
【請求項１８】
前記外部装置は、他の前記演算回路を含み、前記入力ベクトルは、他の前記演算回路が備える前記各演算器から出力されるベクトルを含む、請求項４に記載の演算回路。
【請求項１９】
前記演算回路は、畳み込みニューラルネットワークにおける畳み込み層の演算を実行するためのものであり、
前記入力ベクトルは、前記畳み込み層に入力される特徴マップを一列に展開したものであり、
前記係数行列は、前記畳み込み層で利用されるカーネルに対応する、請求項４に記載の演算回路。
【請求項２０】
複数の演算器を含む並列演算回路を用いた演算方法であって、
前記並列演算回路は、各前記複数の演算器に対応し、当該演算器から読出し可能に構成された記憶回路を含み、
前記演算方法は、
装置から演算のための係数データまたは入力データを受付けること、を備え、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を指定するインデックスを有し、
前記演算方法は、さらに、
前記係数データまたは前記入力データを受付けたとき、前記入力データまたは前記係数データが有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器を特定すること、および、
前記受付けられた入力データまたは係数データを、当該受付けられた入力データまたは係数データが有する前記インデックスに基づく前記順番に従い、特定された前記演算器に対応の前記記憶回路に格納すること、を備える、演算方法。
【請求項２１】
複数の演算器を含む並列演算回路を用いた演算方法であって、
前記並列演算回路は、各前記複数の演算器に対応し、当該演算器から読出し可能に構成された記憶回路を含み、
前記記憶回路は、演算のための係数データを格納する回路を含み、
前記演算方法は、
装置から演算のための入力データを受付けること、を備え、
前記入力データおよび前記係数データは、当該データを演算するべき前記演算器および当該データが演算されるべき順番を指定するインデックスを有し、
前記記憶回路は、前記係数データを、当該係数データが有する前記インデックスに基づく前記順番に従い格納するよう構成され、
前記演算方法は、さらに、
前記入力データを受付けたとき、前記入力データが有する前記インデックスに基づき、前記複数の演算器のうちの１の前記演算器を特定すること、および、
前記受付けられた入力データを、当該入力データが有する前記インデックスに基づく前記順番に従い、特定された前記演算器に出力すること、を備える、演算方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
【図１】ＣＮＮによる演算処理を示すフローチャートである。
【図２】畳み込み演算について説明するための図である。
【図３】特徴マップおよびカーネルの展開について説明するための図である。
【図４】本実施の形態１に係る演算回路１２の構成の一例を、周辺回路と関連付けて示す図である。
【図５】図４の演算器ＣＬｋと入出力データを関連付けて説明する図である。
【図６】本実施の形態１に係る入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図７】本実施の形態１に係る入力記憶回路と出力記憶回路と係数記憶回路の構成の一例を示す図である。
【図８】本実施の形態１に係る記憶方式を模式的に説明する図である。
【図９】本実施の形態１に係る入力変換回路の構成の一例を示す図である。
【図１０】本実施の形態１に係る出力変換回路の構成の一例を示す図である。
【図１１】図５で示した演算器ＣＬｋと演算されるべき要素の関連付けの具体例を示す図である。
【図１２】本実施の形態１に係る並列処理を説明するフローチャートである。
【図１３】本実施の形態２に係る演算回路１２Ａの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１４】図１３の入力通知回路１３３Ｃの構成を示す図である。
【図１５】本実施の形態３に係る演算回路１２Ｂの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１６】図１５の出力通知回路１４３の構成を周辺回路と関連付けて示す図である。
【図１７】本実施の形態４に係る演算回路１２Ｃの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１８】本実施の形態５に係る演算回路１２Ｄの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図１９】本実施の形態６に係る演算回路１２Ｅの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図２０】本実施の形態７に係る演算回路１２Ｆの入力Ｉ／Ｆと出力Ｉ／Ｆの構成を示す図である。
【図２１】本実施の形態８に係る演算回路の構成を示す図である。
【図２２】本実施の形態９に係る演算回路の構成を示す図である。
【図２３】本実施の形態１０に係る演算回路の構成を示す図である。
【図２４】本発明の各実施の形態に係る演算回路の「行列ケース」に従う演算を実行可能な構成の一例を模式的に示す図である。
【図２５】本発明の各実施の形態に係る演算回路の「行列ケース」に従う演算を実行可能な構成の他の例を模式的に示す図である。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
同様に、係数行列１１１の第９行は、（３，２，１，０，０，０，０，１，３，２，０，０，０，０，２，１，３，０，…，０）であり、図２のカーネル１０１が特徴マップ上の太い実線の枠１０３に位置する場合に相当する。この係数行列１１１の第９行と入力ベクトル１１０との積和演算が実行されることによって、図２の出力データ１０２の対応する要素１０６の位置に格納されるデータ「３０」が生成される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３５
【補正方法】変更
【補正の内容】
【００３５】
この明細書では、出力ベクトルｆの要素をｆ1，…，ｆnとする。第ｉ番目の出力ベクトルｆの要素をｆiまたはｆ（ｉ）と記載する。入力ベクトルｘの要素をｘ1，…，ｘmとする。第ｊ番目の入力ベクトルｘの要素をｘjまたはｘ（ｊ）と記載する。バイアスベクトルｂの要素をｂ1，…，ｂnとする。第ｉ番目のバイアスベクトルｂの要素をｂiまたはｂ（ｉ）と記載する。また、係数行列Ａは、第１から第ｎまでのｎ行と第１から第ｍまでのｍ列で構成される。第ｉ行第ｊ列の係数行列Ａの要素をＡijまたはＡ（ｉ，ｊ）と記載する。本実施の形態１では、各要素のインデックスである値ij、またはｊは、当該要素の識別子であるとともに、当該要素を演算するべき後述の演算器ＣＬｋおよび当該要素の演算器ＣＬｋおよび演算されるべき順番を指定し得るものでもある。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
ＣＰＵ５１は、外部入力装置６１、外部記憶装置６２および外部出力装置６３を制御する。例えば、ＣＰＵ５１は、係数行列Ａ、入力ベクトルｘおよびバイアスベクトルｂをメモリ５０から読出し、外部入力装置６１または外部記憶装置６２を介して演算回路１２の入力Ｉ／Ｆ１２２に出力する。外部出力装置６３は、出力Ｉ／Ｆ１２３からの演算結果を入力し、入力した演算結果を、バス４０を介してＣＰＵ５１に出力する。ＣＰＵ５１は、外部出力装置６３からの演算結果をメモリ５０に格納する。また、出力Ｉ／Ｆ１２３からの演算結果は、外部記憶装置６２に格納されてもよい。外部記憶装置６２と外部出力装置６３は、有線または無線の複数の回線を介して出力Ｉ／Ｆ１２３に接続される。出力Ｉ／Ｆ１２３は、各回線を接続するポート１７を備える。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】
なお、メモリ５０は、ＣＰＵ５１ではなくバス４０に接続されてもよい。また、外部記憶装置６２がメモリ５０を備えてもよい。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】変更
【補正の内容】
【００５３】
（入力変換回路）
入力変換回路１３１は、例えば図９に示す構成を有する。図９を参照して、入力変換回路１３１は、係数記憶回路１３２および入力記憶回路１３３の各記憶回路に対応するセレクタ１３と、テーブルまたは専用回路１５を備える。テーブルまたは専用回路１５は、各セレクタに選択指令１５１を出力する。選択指令１５１は、外部記憶装置６２または外部入力装置６１からの係数行列Ａの要素Ａij、入力ベクトルｘの要素ｘjおよびバイアスベクトルｂの要素ｂiのうち、いずれを選択して、対応の記憶回路に書込むかの指令を示す。選択指令１５１は、例えば要素Ａij、要素ｘjおよび要素ｂiのインデックスの値を含む。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００５８
【補正方法】変更
【補正の内容】
【００５８】
（入力変換回路のテーブルまたは専用回路）
本実施の形態１では、各演算器ＣＬｋが係数行列Ａのどの行に割当てられるかと、非零の要素Ａijと演算されるべき要素ｘｊの入力ベクトルｘにおける位置とは、予め決定されている。したがって、テーブルまたは専用回路１５には、このような予め決定された内容を示す情報が格納されており、専用回路は、格納された情報に従い、各セレクタ１３宛の選択指令１５１を生成し、生成された選択指令１５１を当該セレクタ１３に出力する。なお、演算器ＣＬｋへの係数行列Ａの行の割当て、および非零の要素Ａijと演算されるべき要素ｘｊの入力ベクトルｘにおける位置が変更されない場合は、テーブルまたは専用回路１５は、固定の回路として構成され得る。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００６６
【補正方法】変更
【補正の内容】
【００６６】
具体的には、セレクタ１４は、並列演算回路１２１の各演算器ＣＬｋからの要素ｆiのうちから選択指令１６１に基づき要素ｆiを選択し、選択した要素ｆiを対応する記憶回路ＭＯｋに格納する。各記憶回路ＭＯｋは複数のレジスタからなる。出力変換回路１４１は、要素ｆiを記憶回路ＭＯｋに格納する場合、要素ｆiを、選択指令１６１に従った順番で当該記憶回路ＭＯｋのレジスタに格納する。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００６７
【補正方法】変更
【補正の内容】
【００６７】
上記に述べたテーブルまたは専用回路１６からの選択指令１６１は、並列演算回路１２１からの出力（要素ｆi）について外部記憶装置６２または外部出力装置６３が期待する当該要素ｆiが格納される出力記憶回路１４２の位置（アドレス）または出力記憶回路１４２から読み出される順番に基づき予め決定されている。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
［全体処理のフローチャート］
図１２は、本実施の形態１に係る並列処理を説明するフローチャートである。図１２のフローチャートに従う処理は、制御プログラム１５０として制御回路３０のメモリ３２に格納されている。プロセッサ３１が、制御プログラム１５０をメモリ３２から読出し、読出された制御プログラム１５０を実行する。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００９９
【補正方法】変更
【補正の内容】
【００９９】
入力変換回路１３１Ａは、外部入力装置６１または外部記憶装置６２から、入力ベクトルｘの要素ｘjを受付けたとき、要素ｘjのインデックスの値に基づき、複数の演算器ＣＬｋのうち、当該要素ｘjを用いた演算を実施する演算器ＣＬｋを特定し、特定された演算器ＣＬｋのみに要素ｘjを出力する。また、このとき、図１４の入力通知回路１３３Ｃでは、入力変換回路１３１Ａにより特定された演算器ＣＬｋに対応のセレクタ１３Ａが、対応の演算器ＣＬｋに演算の通知Ｎを出力する。通知Ｎを受けた演算器ＣＬｋは、係数記憶回路１３２の記憶回路Ｃｋから要素Ａijと要素ｂiを読出し、読出された要素Ａijと要素ｂiおよび入力変換回路１３１からの要素ｘjを用いた積和演算を実施する。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０１０１
【補正方法】変更
【補正の内容】
【０１０１】
これにより、入力記憶回路１３３のためのメモリリソースを不要にすることができる。さらに、入力通知回路１３３Ｃから通知を受けなかった演算器ＣＬｋを、すなわち当該要素ｘjを用いた演算をする必要のない演算器ＣＬｋを休止させることが可能となる。したがって、演算回路１２の回路規模と消費電力を小さくすることが可能になる。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０１２６
【補正方法】変更
【補正の内容】
【０１２６】
実施の形態１０．
実施の形態１０は、実施の形態１の変形例を示す。図２３は、本実施の形態１０に係る演算回路の構成を示す図である。図２３の演算回路は、演算回路１２Ｊと、演算回路１２Ｊに接続された演算回路１２Ｋを有する。演算回路１２Ｊは、実施の形態７で示された演算回路１２Ｆから出力Ｉ／Ｆ１２３Ｅが削除されているが、他の構成は演算回路１２Ｆのそれらと同様であるので、説明は繰返さない。また、演算回路１２Ｋは、入力Ｉ／Ｆ１２２Ｋ、並列演算回路１２１、および出力Ｉ／Ｆ１２３Ｅを備える。入力Ｉ／Ｆ１２２Ｋは、入出力変換回路１３１Ｋ、２重化入力記憶回路１３３Ａ，１３３Ｂおよび係数記憶回路１３２を備える。演算回路１２Ｋにおける入出力変換回路１３１Ｋを除く他の構成は、実施の形態７の演算回路１２Ｆのそれらと同じであるので、説明は繰返さない。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０１３３
【補正方法】変更
【補正の内容】
【０１３３】
演算器ＣＬｋは、行列Ｘの１列分の積和演算を、実施の形態１〜８の場合と同様に、行列Ｘの列毎に繰返す。演算器ＣＬｋは係数行列Ａのｋ番目の行と行列Ｘの各列との積和演算を実施し、ｎ個の積和演算の値（出力ｆｉに相当）を出力する。この積和演算においても、係数行列Ａのｋ番目の行の要素のうち非零の要素Ａijが選択されて、選択された非零要素Ａijを用いた積和演算が実施される。説明を簡単にするために、係数行列Ａのｋ番目の行は零要素Ａijを含まないとする。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０１４２
【補正方法】変更
【補正の内容】
【０１４２】
図２５の演算器ＣＬｋは、行列Ｘのｋ番目の行ベクトル(当該行ベクトルのすべての要素ｘｋ１〜ｘｋｎ)が入力記憶回路１３３に格納されると、格納された要素ｘｋ１〜ｘｋｎと係数行列Ａのｋ番目の列の要素Ａｋ１〜Ａｋｎとを用いた積和演算を実行する。この積和演算においては、要素Ａｋ１〜Ａｋｎのうち非零の要素Ａijが選択されて、選択された非零要素Ａijを用いた積和演算が実施される。説明を簡単にするために、係数行列Ａのｋ番目の列は零要素Ａijを含まないとする。
【手続補正１７】
【補正対象書類名】図面
【補正対象項目名】図３
【補正方法】変更
【補正の内容】
【図３】
2019077933.tif 000029
【国際調査報告】
2019077933.tif 000030
2019077933.tif 000031
2019077933.tif 000032