(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-04-21
(45)【発行日】2025-04-30
(54)【発明の名称】演算処理装置
(51)【国際特許分類】
G06F 17/10 20060101AFI20250422BHJP
【FI】
G06F17/10 A
(21)【出願番号】P 2021156280
(22)【出願日】2021-09-27
【審査請求日】2024-05-08
(73)【特許権者】
【識別番号】000000295
【氏名又は名称】沖電気工業株式会社
(74)【代理人】
【識別番号】100116964
【氏名又は名称】山形 洋一
(74)【代理人】
【識別番号】100120477
【氏名又は名称】佐藤 賢改
(74)【代理人】
【識別番号】100135921
【氏名又は名称】篠原 昌彦
(74)【代理人】
【氏名又は名称】半田 淳一
(72)【発明者】
【氏名】土井 俊洋
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2021-71772(JP,A)
【文献】特開2017-21483(JP,A)
【文献】特開2019-61641(JP,A)
【文献】中原康宏ほか,AIエッジコンピューティング向けDNNアクセラレータ,電子情報通信学会技術研究報告 [online],日本,一般社団法人電子情報通信学会,2019年11月06日,第119巻 第287号,15~20ページ
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
第1の演算モードと第2の演算モードを実行する演算処理装置において、
前記第1の演算モードと前記第2の演算モードに基づく入力データと重みデータを供給するデータ供給部と、
それぞれが複数の演算器を備え、前記データ供給部によって供給される前記入力データと前記重みデータに基づき互いに異なるタイミングで演算を実行し演算結果を出力する複数の演算器組を備えた並列演算器と、
集和部とを有し、
前記複数の演算器は、同じ前記演算器組内にあって、前記データ供給部によって供給されて入力する前記入力データと前記重みデータに基づき、互いに同じタイミングで演算を実行して演算結果を出力し、
前記集和部は、前記第2の演算モードの実行時に、前記演算器組の有する前記複数の演算器で同じタイミングで演算実行され出力された演算結果の和を出力する
ことを特徴とする演算処理装置。
【請求項2】
前記第1の演算モードは畳み込み層の演算モードであり、第2の演算モードは全結合層の演算モードであることを特徴とする請求項1記載の演算処理装置。
【請求項3】
前記データ供給部は、前記入力データを出力する入力データ供給部と、前記重みデータを供給する重みデータ供給部とからなることを特徴とする請求項1又は2記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、全結合層の演算や畳み込み層の演算を実行する演算処理装置に関する。
【背景技術】
【0002】
近年、AIをつかったアプリケーションをユーザに提供するにあたり、このアプリケーションの処理を高速化しユーザの利便性を高める目的で、AIで使われる演算処理を高速実行可能な演算処理装置(回路)の提案が盛んになっている。特に時間のかかる演算処理として、多くの積和演算の実行が必要な全結合層の演算と畳み込み層の演算があり、これらの演算を高速に実行するための演算処理装置の提案が盛んとなっている。その中で、シストリックアレイによる積和演算回路は、超大規模な並列積和演算器を構成するのに有利であるため、多くの提案がされている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2017-21483号公報(第9頁、
図6)
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、シストリックアレイを用いた演算回路では、隣接する積和演算器間で積和結果を伝搬させていく構成であるため、隣接する演算器でタイミングをずらして入力データの入力を行う必要があり、遅延のためのバッファが必要である。また、並べて配置された積和演算器の配置に合わせて対応する重みデータを設定する必要があるため、配置された全ての積和演算器を利用することができない場合がある。
【0005】
更に上記により、入力データも積和演算器に設定された重みデータに合わせて入力する必要があり、畳み込み層の演算においては、本来の入力データの並び(ラスタ並び)からデータを並び替える手間が生じる場合がある。以上のように、従来のシストリックアレイを用いた演算回路では、回路規模の増加によるコスト増加や処理性能が低下するという問題があった。
【課題を解決するための手段】
【0006】
本発明による演算処理装置は、第1の演算モードと第2の演算モードを実行する演算処理装置であって、
前記第1の演算モードと前記第2の演算モードに基づく入力データと重みデータを供給するデータ供給部と、それぞれが複数の演算器を備え、前記データ供給部によって供給される前記入力データと前記重みデータに基づき互いに異なるタイミングで演算を実行し演算結果を出力する複数の演算器組を備えた並列演算器と、集和部とを有し、
前記複数の演算器は、同じ前記演算器組内にあって、前記データ供給部によって供給されて入力する前記入力データと前記重みデータに基づき、互いに同じタイミングで演算を実行して演算結果を出力し、
前記集和部は、前記第2の演算モードの実行時に、前記演算器組の有する前記複数の演算器で同じタイミングで演算実行され出力された演算結果の和を出力することを特徴とする。
【発明の効果】
【0007】
本発明によれば、入力データの遅延のためのバッファが不要となり、配置した演算器をより多く利用でき、第1の演算モードの演算においては、本来の入力データの並びからデータを並び替える手間も生じないため、回路規模を抑えながら処理性能を向上させた演算処理装置が提供できる。
【図面の簡単な説明】
【0008】
【
図1】本発明による実施の形態1の演算処理装置の構成図である。
【
図2】各演算器に共通の構成を示す回路構成図である。
【
図3】畳み込み層の演算における積和演算の実行の説明に供する図である。
【
図4】畳み込み層の演算でのサイクル(TIM1)、サイクル(TIM2)における、並列演算器への入力状態を示す図である。
【
図5】畳み込み層の演算でのサイクル(TIM3)、サイクル(TIM3)における、並列演算器への入力状態を示す図である。
【
図6】畳み込み層の演算でのサイクル(TIM5)、サイクル(TIM6)における、並列演算器への入力状態を示す図である。
【
図7】畳み込み層の演算でのサイクル(TIM7)、サイクル(TIM8)における、並列演算器への入力状態を示す図である。
【
図8】畳み込み層の演算でのサイクル(TIM9)における、並列演算器に対する入出力状態を示す図である。
【
図9】畳み込み層の演算でのサイクル(TIM1~36)における、並列演算器に対する入出力データを示す図である。
【
図10】全結合層の演算で行う積和演算を行列式で示した図である。
【
図11】全結合層の演算でのサイクル(TIM1)、サイクル(TIM4)における、並列演算器130への入力状態を示す図である。
【
図12】全結合層の演算でのサイクル(TIM3)、サイクル(TIM2)における、並列演算器130への入力状態を示す図である。
【
図13】全結合層の演算でのサイクル(TIM5)、サイクル(TIM6)における、並列演算器130への入力状態を示す図である。
【
図14】全結合層の演算でのサイクル(TIM7)における、並列演算器130への入力状態を示す図である。
【
図15】(a)は参考例における全結合層の演算の概要図であり、
図15(b)はその演算式を示す。
【
図16】(a)は、参考例における畳み込み層の演算の概要図であり、
図16(b)は、その演算式を示す。
【
図17】参考例として示したシストリックアレイによる積和演算回路の構成例である。
【発明を実施するための形態】
【0009】
実施の形態1.
本発明による本実施の形態1の演算処理装置の説明の前に、AIでよく使われる演算処理であり、ここでの演算処理装置の処理対象となる全結合層の演算と、畳み込み層の演算における積和演算と、参考例としてのシストリックアレイを用いた演算回路について、それらの概要を説明する。
【0010】
図15(a)は、全結合層の演算の概要図であり、
図15(b)は、その演算式を示す。同図に示すように、全結合層の演算では、複数の入力データ(X1~Xn)に対して、全結合層のノード(Y1~Ym)毎に入力データと同じ数用意された重みデータ(W11~Wmn)を乗算し、全てを足し合わせる積和演算が行われる。ここでの積和演算は、
図15(b)の演算式の点線で囲んだ演算に相当する。
【0011】
図16(a)は、畳み込み層の演算の概要図であり、
図16(b)は、その演算式を示す。同図に示すように、畳み込み層の演算では、幅と高さと深さ(=入力チャンネル(以下、CHと記す)数)をもった入力データ(X001~Xlkc)に対して、出力するデータの深さ(出力CH数)分のボックスフィルタ(フィルタ1~フィルタm)を用いて、入力データを走査、処理することで演算結果を得ることができる。各ボックスフィルタは、演算式で示すように、幅kと高さlと深さ(入力CH数)分の重みを持ち、局所的な範囲の入力データ(Xxyc)と対応する重み(Wxycm)とを乗算し全てを足し合わせる積和演算が行われる。ここでの積和演算は、
図16(b)の演算式の点線で囲んだ演算に相当する。
【0012】
このように、全結合層の演算と畳み込み層の演算では、どちらも多くの積和演算が実行される。そこで多くの積和器を並べて並列に演算を実行することで高速化を行う処理装置(回路)が求められる。また、全結合層の演算と畳み込み層の演算は、どちらも積和演算を実行するものであり、回路規模(コスト)を抑えるために共用可能な処理装置(回路)が求められる。
【0013】
図17は、参考例として示したシストリックアレイによる積和演算回路の構成例である。同図に示すように、シストリックアレイによる積和演算回路では、各積和器の出力は各隣接する積和器(図では右隣の積和器)に入力されるように接続されており、各積和器では、その積和器に設定された重みデータ供給部から供給される重みデータの値と、入力バッファから供給される入力データの値との乗算値に対して、隣接の積和器から入力された値の和をとる積和演算を行うよう構成されている。
【0014】
入力バッファで入力データの入力タイミングを調整し、左右に並ぶ複数の積和器への入力を、左端の積和器への入力が最初になるようずらして入力していくことで、左端の積和器から右端の積和器に向かって積和が繰り返し実行され、右端の積和器から最終的な結果が得られる。
【0015】
また、このような構成であることから、並べて配置された積和演算器の配置に合わせて対応する重みデータを設定する必要があるため、配置された全ての積和演算器を利用することができない場合がある。例えば、3×3のフィルタ(重みデータ9個)での畳み込み層の演算を、
図17の4×4=16個の積和器を使って実行する場合を考えると、設定される重みデータは9個であるので、16個の積和器の内、9個の演算器しか利用できない。また、その際の入力は、あるタイミングで見たときに入力データ中のある3×3の範囲を入力とする必要があり、本来の入力データの並び(ラスタ並び)からデータを並び替える手間が生じる。
【0016】
次に本発明による本実施の形態1の演算処理装置について説明する。
図1は、本実施の形態の演算処理装置100の構成図である。
【0017】
同図に示すように、演算処理装置100は、入力データ供給部110、重みデータ供給部120、演算器150を複数有する並列演算器130、マルチプレクサ160、行集和回路170、及び演算制御部180で構成される。尚、入力データ供給部110及び重みデータ供給部120は、データ供給部に相当する。
【0018】
入力データ供給部110と重みデータ供給部120は、第2の演算モードとしの全結合層の演算や第1の演算モードとしての畳み込み層の演算の対象となる入力データと重みデータを並列演算器130へ供給する部位である。入力データ供給部110は、入力データが格納された外部のメモリから、また重みデータ供給部120は重みデータが格納された外部のメモリから、それぞれデータを読み出すことができる。また、演算制御部180の指示により、供給のための動作を開始させ、その際、選択された演算モードに応じて、入力データと重みデータの並列演算器130への供給の仕方を変更させて動作する。
【0019】
並列演算器130は、入力データ供給部110から供給される入力データ、及び重みデータ供給部120より供給される重みデータに基づき、複数の演算器150により並列に演算処理し、全結合層の演算や畳み込み層の演算における積和演算の一部、又は積和演算の全ての演算を実行する部位である。
【0020】
図2は、各演算器150に共通の構成を示す回路構成図である。
【0021】
同図に示すように、演算器150は、フリップフロップ151,152,156、掛け算器153、加算器154、及びマルチプレクサ155で構成された積和演算器であり、クロックに同期して入力された入力データと重みデータの乗算を行い、結果の乗算値を被加算値に加算し出力する。被加算値は、フリップフロップ156に記憶されている前サイクルの演算結果又は0(リセット時)がマルチプレクサ155により選択される。例えば、入力データにA、B、重みデータにC、Dが順次入力された場合は、1サイクル目にOUT1=A×C+0(リセット)を実行し、2サイクル目にOUT2=B×D+OUT1を実行し、A×C+B×Dの結果を得るよう動作する。
【0022】
並列演算器130は、
図1に示すように、上記した演算器150を複数並べて1組とした演算器組140を、複数組(段)用意し構成する。最上段(初段)に相当する演算器組140にある演算器150については、入力データ供給部110より直接入力データが入力されるように接続され、次段以降にある演算器150については、上方に隣接する(前段の)演算器150に入力された入力データが1サイクル遅延されて入力されるよう接続される。また、重みデータの入力については、重みデータ供給部120より各演算器150に直接供給されるように接続される。各演算器組140の各演算器150の出力は、全てマルチプレクサ160に入力される。
【0023】
マルチプレクサ160の出力であるが、並列演算器130の初段の演算器組140の複数の演算器150に対しての入力のタイミングが同じであれば、当然、ある組の複数の演算器150の出力は全て同じタイミングで出力される。また、各組の入力は1サイクルずつ遅延されることから、各組の出力は1サイクル毎ずれてタイミングが重ならず出力される。従って、マルチプレクサ160は、サイクル毎、入力された演算結果の内、有効な演算器組140の出力を選択し、後段の集和部としての行集和回路170に入力することができる。尚、マルチプレクサ160と行集和回路170とが集和部に相当する。
【0024】
行集和回路170は、サイクル毎に入力される複数の演算結果の和をとって出力を行う部位である。尚、複数の演算結果の和をとる動作は、演算制御部180で選択された演算モードによっては行わずに、複数の演算結果をそのまま出力することもできる。
【0025】
以上の構成において、畳み込み層の演算と、全結合層の演算における積和演算を実行する場合の具体的な動作について、それぞれ例をあげて詳細に説明する。
【0026】
(畳み込み層の演算における積和演算の実行について)
図3は、畳み込み層の演算における積和演算の実行の説明に供する図であり、
図4~
図8は、サイクル(TIM1)~サイクル(TIM9)における、サイクル毎の並列演算器130への入力状態を示す図であり、
図9は、
図3の例で示した畳み込み層の演算における全ての積和演算結果を示す図である。畳み込み層の演算における積和演算の実行の具体的な動作について、
図3~
図9を参照しながら以下に説明する。
【0027】
図3に示すように、ここでは、幅が6、高さが6、CH数(深さ)が1の入力データを、出力CH(1~4)数分の4つのフィルタ(フィルタ1~4)で畳み込み演算する場合を例にして説明する。図中の各要素に付記する番号はデータの並んでいる順番を表している。
図4~
図8は、並列演算器130が4×4の演算器150で構成されるとして、上記の例における入力データと重みデータの、並列演算器130への入力を表したものである。各図のサイクル(TIM1)~サイクル(TIM9)は、サイクル毎の並列演算器130への入力状態を示している。
【0028】
即ち、例えば
図4に示す演算器150において、上中の囲み部は
図2において入力データを入力するフリップフロップ151の入力部に相当し、各サイクルで入力する入力データの番号を表示し、左中の囲み部は
図2において重みデータを入力するフリップフロップ152の入力部に相当し、各サイクルで入力する各フィルタの重みデータの番号に対応する塗り潰しパターンを表示している。更に、
図8に示す演算器150において、右中の囲み部は
図2において出力データを出力するフリップフロップ156の出力部に相当し、各サイクルで出力する出力データの番号を表示している。
【0029】
図4~
図8の各図に示すように、畳み込み層の演算では、並列演算器130の各段の演算器組140が、畳み込み層の各出力CHの演算を実行するように対応しており、重みデータ供給部120は、サイクル毎に、ここでの各段に対応するフィルタ中の1個のデータを各段の組の複数の演算器150に共通の重みデータと入力していき、入力データ供給部110は、サイクル毎に、前記重みデータに対応する入力データを1段目の演算器組140に存在する演算器150の数分まとめて入力していく。
【0030】
図4に示すように、最初のサイクル(TIM1)で、重みデータ供給部120は、フィルタ1の1番のデータを1段目の演算器組140の共通の重みデータとして入力し、入力データ供給部110は、1段目の演算器組140へ、1番の重みデータに対応する、
図3における1~4番の4個のデータを入力データとして入力する。
【0031】
次のサイクル(TIM2)では、重みデータ供給部120は、フィルタ1の2番のデータを1段目の演算器組140の共通の重みデータとして入力し、入力データ供給部110は1段目の演算器組140へ、2番の重みデータに対応する
図3における2~5番の4個のデータを入力データとして入力する。
【0032】
以降、サイクル(TIM3)~(TIM9)で、フィルタ1の最後の9番の重みデータが入力されるまで、重みデータと入力データの入力を順次行うことで、1段目の演算器組140の最初の出力に対応する入力分が完了する。
【0033】
(TIM9)まで入力が完了したときの1段目の演算器組140の出力CH1からの出力として、入力データをA*、重みデータをW*(*はデータの順番を示す番号)として表し、1段目の演算器組140の各演算器150の出力を左からY1、Y2、Y3、Y4として表すと、
Y1=A1×W1+A2×W2+A3×W3+A7×W4+A8×W5
+A9×W6+A13×W7+A14×W8+A15×W9
Y2=A2×W1+A3×W2+A4×W3+A8×W4+A9×W5
+A10×W6+A14×W7+A15×W8+A16×W9
Y3=A3×W1+A4×W2+A5×W3+A9×W4+A10×W5
+A11×W6+A15×W7+A16×W8+A17×W9
Y4=A4×W1+A5×W2+A6×W3+A10×W4+A11×W5
+A12×W6+A16×W7+A17×W8+A18×W9
の通り出力される。
【0034】
更に、1段目の演算器組140以外の演算器組140への入力データは、上方に隣接する演算器組140へ入力された入力データが1サイクル遅延されて入力されていくので、重みデータ供給部120は、以降の段の演算器組140に入力する重みデータも同様に遅延させて、サイクル毎、1段目と同様、以降の段に対応するフィルタ(フィルタ2~4)の重みデータを1個ずつ順次入力していくことで、全ての出力CH(1~4)の演算結果を得ることができる。
【0035】
更に続けて、
図9に示すように、サイクル(TIM10)~(TIM18)、サイクル(TIM19)~(TIM27)、サイクル(TIM28)~(TIM36)で、入力する入力データ(点線で囲ったデータ)を変更して、残りの入力データを同様に処理することで、
図3の例で示した畳み込み層の演算における全ての積和演算結果を得ることができる。
【0036】
尚、この畳み込み層の演算における行集和回路170は、演算制御部180によって、サイクル毎に入力される複数の演算結果の和をとって出力する演算処理は行わず、入力したデータをそのまま出力する演算モードに設定されるものである。
【0037】
(全結合層の演算における積和演算の実行)
図10は、全結合層の演算で行う積和演算を行列式で示した図であり、
図11~
図14は、サイクル(TIM1)~サイクル(TIM7)における、サイクル毎の並列演算器130への入力状態を示す図である。全結合層の演算における積和演算の実行の具体的な動作例について、
図10~
図14を参照しながら以下に説明する。
【0038】
図10は、入力データが16個、出力ノードが4個である全結合層で行う積和演算を行列式で示したものである。同図中の各要素に付記する番号はデータの並んでいる順番を表している。
図11~
図14は、並列演算器130が4×4の演算器150で構成されているとして、入力データと重みデータの並列演算器130への入力を表したものである。各図のサイクル(TIM1)~(TIM7)は、サイクル毎の並列演算器130への入力状態を示している。
【0039】
即ち、例えば
図11に示す演算器150において、上中の囲み部は
図2において入力データを入力するフリップフロップ151の入力部に相当し、各サイクルで入力する入力データの番号を表示し、左中の囲み部は
図2において重みデータを入力するフリップフロップ152の入力部に相当し、各サイクルで入力する重みデータの番号を表示している。更に、例えば
図12に示す演算器150において、右中の囲み部は
図2において出力データを出力するフリップフロップ156の出力部に相当し、各サイクルで出力する出力データの番号を表示している。
【0040】
図11~
図14の各図に示すように、全結合層の演算では、並列演算器130の各段の演算器組140が、全結合層の各出力ノードの演算を実行するように対応しており、重みデータ供給部120は、サイクル毎に、ここでの各段(出力ノード)に対応する重みデータを各段の組の複数の演算器150に各々入力していき、入力データ供給部110は、サイクル毎、前記重みデータに対応する入力データを1段目の演算器組140に入力していく。
【0041】
図11に示すように、最初のサイクル(TIM1)で、入力データ供給部110と重みデータ供給部120は、並列演算器130の1段目の演算器組140へ、それぞれ1~4番の4個のデータ(
図10)を入力する。
【0042】
次のサイクル(TIM2)では、1段目の演算器組140へ、入力データ供給部110と重みデータ供給部120は、それぞれ5~8番のデータを入力し、2段目の演算器組140には1段目に前サイクルで入力した1~4番の入力データが入力され、重みデータ供給部120は、対応する17~20番の重みデータを2段目の演算器組140に入力する。
【0043】
図12に示すように、次のサイクル(TIM3)では、1段目の演算器組140へ、入力データ供給部110と重みデータ供給部120は、それぞれ9~12番のデータを入力し、2段目の演算器組140には1段目に前サイクルで入力した5~8番の入力データが入力され、重みデータ供給部120は、対応する21~24番の重みデータを2段目の演算器組140に入力する。更に3段目の演算器組140には、同様にして1~4番の入力データと33~36番の重みデータが入力される。
【0044】
次のサイクル(TIM4)(
図12)では、1段目の演算器組140へ、入力データ供給部110と重みデータ供給部120は、1段目の演算器組140の入力としては最後となるそれぞれ13~16番のデータを入力する。2段目の演算器組140には1段目に前サイクルで入力した9~12番の入力データが入力され、重みデータ供給部120は、対応する25~28番の重みデータを2段目の演算器組140に入力する。更に3段目の演算器組140には、同様にして5~8番の入力データと37~40番の重みデータが入力され、4段目の演算器組140には、同様にして1~4番の入力データと49~52番の重みデータが入力される。
【0045】
次のサイクル(TIM5)(
図13)では、2段目の演算器組140へ、2段目の演算器組140への入力としては最後となる1段目に前サイクルで入力された13~16番の入力データが入力され、重みデータ供給部120は、対応する29~32番の重みデータを2段目の演算器組140に入力する。更に3段目の演算器組140には、同様にして9~12番の入力データと41~44番の重みデータが入力され、4段目の演算器組140には、同様にして5~8番の入力データと53~56番の重みデータが入力される。
【0046】
同様にして、次のサイクル(TIM6)(
図13)では、3段目の演算器組140へ、3段目の演算器組140への入力としては最後となる13~16番の入力データと45~48番の重みデータが入力され、4段目の演算器組140へ、8~12番の入力データと57~60番の重みデータが入力される。そして次のサイクル(TIM7)(
図14)では、4段目の演算器組140に最後となる13~16番の入力データと61~64番の重みデータが入力される。
【0047】
前記したように各演算器150は、各演算器150に入力された入力データと重みデータとを乗算しながら乗算した結果と各演算器150で保持される前サイクルの結果との和をとる積和を行う。即ち、入力データをA*、重みデータをW*(*はデータの順番を示す番号)として表し、1段目の演算器組140の演算器150の出力を、左からY1、Y2、Y3、Y4として表し、以降の組の演算器150の出力をY5、Y6、・・・と表すと、各段の各演算器150の出力は以下のようになる。
【0048】
1段目の演算器組140の出力:
Y1=A1×W1+A5×W5+A9×W9+A13×W13、
Y2=A2×W2+A6×W6+A10×W10+A14×W14、
Y3=A3×W3+A7×W7+A11×W11+A15×W15、
Y4=A4×W4+A8×W8+A12×W12+A16×W16、
となる。
【0049】
2段目の演算器組140の出力:
Y5=A1×W17+A5×W21+A9×W25+A13×W29、
Y6=A2×W18+A6×W22+A10×W26+A14×W30、
Y7=A3×W19+A7×W23+A11×W27+A15×W31、
Y8=A4×W20+A8×W24+A12×W28+A16×W32、
となる。
【0050】
3段目の演算器組140の出力:
Y9=A1×W33+A5×W37+A9×W41+A13×W45、
Y10=A2×W34+A6×W38+A10×W42+A14×W46、
Y11=A3×W35+A7×W39+A11×W43+A15×W47、
Y12=A4×W36+A8×W40+A12×W44+A16×W48、
となる。
【0051】
4段目の演算器組140の出力:
Y13=A1×W49+A5×W53+A9×W57+A13×W61、
Y14=A2×W50+A6×W54+A10×W58+A14×W62、
Y15=A3×W51+A7×W55+A11×W59+A15×W63、
Y16=A4×W52+A8×W56+A12×W60+A16×W64、
となる。
【0052】
ここで、上記並列演算器130の出力は、対象とした全結合層の各ノードに対応する出力が得られているが、各演算器組140に存在する複数の演算器150の演算結果は各々出力されるため、各演算器組140に存在する複数の演算器150の演算結果の和をとって最終的な出力とする必要があることが分かる。そこで、並列演算器130の後段に具備する行集和回路170が、複数の演算結果の和をとって出力するよう動作させることで、各演算器組140に対応する行集和回路170の出力は下記のようになる。
【0053】
1段目の演算器組140に対応する行集和回路170のノード出力:
OUT1=Y1+Y2+Y3+Y4
=A1×W1+A5×W5+A9×W9
+A13×W13+A2×W2+A6×W6+A10×W10
+A14×W14+A3×W3+A7×W7+A11×W11
+A15×W15+A4×W4+A8×W8+A12×W12
+A16×W16
【0054】
2段目の演算器組140に対応する行集和回路170のノード出力:
OUT2=Y5+Y6+Y7+Y8
=A1×W17+A5×W21+A9×W25+A13×W29
+A2×W18+A6×W22+A10×W26+A14×W30
+A3×W19+A7×W23+A11×W27+A15×W31
+A4×W20+A8×W24+A12×W28+A16×W32
【0055】
3段目の演算器組140に対応する行集和回路170のノード出力:
OUT3=Y9+Y10+Y11+Y12
=A1×W33+A5×W37+A9×W41+A13×W45
+A2×W34+A6×W38+A10×W42+A14×W46
+A3×W35+A7×W39+A11×W43+A15×W47
+A4×W36+A8×W40+A12×W44+A16×W48
【0056】
4段目の演算器組140に対応する行集和回路170のノード出力:
OUT4=Y13+Y14+Y15+Y16
=A1×W49+A5×W53+A9×W57+A13×W61
+A2×W50+A6×W54+A10×W58+A14×W62
+A3×W51+A7×W55+A11×W59+A15×W63
+A4×W52+A8×W56+A12×W60+A16×W64
以上のように、例示した全結合層の演算における積和演算の最終値を得ることができる。
【0057】
以上説明したように、本実施の形態の演算処理装置では、複数の演算器150の後段に行集和回路170を設けることで、隣接する演算器150でタイミングをずらさずに入力データを入力でき、また畳み込み層の演算と全結合層の演算のどちらの積和演算も実行でき、更に畳み込み層の演算と全結合層の演算の各々の本来の入力データの並びに合わせて入力ができる。
【0058】
また、複数の演算器150で構成される演算器組140を複数用意し、各演算器組140を畳み込み層の出力CHや全結合層の出力ノードに対応させることで、配置した演算器150を最大限利用して処理を行うことが出来る。
【0059】
従って、本実施の形態の演算処理装置によれば、入力データの遅延のためのバッファが不要となり、配置した演算器をより多く利用でき、畳み込み層の演算においては本来の入力データの並びからデータを並び替える手間も生じないため、従来よりも回路規模を抑えながら処理性能を向上させた演算処理装置(回路)が提供できる。
【産業上の利用可能性】
【0060】
本発明は、AIをつかったアプリケーションを高速に実行するための演算処理装置に適用可能である。
【符号の説明】
【0061】
100 演算処理装置、 110 入力データ供給部、 120 重みデータ供給部、 130 並列演算器、 140 演算器組、 150 演算器、 151 フリップフロップ、 152 フリップフロップ、 153 掛け算器、 154 加算器、 155 マルチプレクサ、 156 フリップフロップ、 160 マルチプレクサ、 170 行集和回路、 180 演算制御部。