IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ルネサスエレクトロニクス株式会社の特許一覧

特許7598714半導体装置およびそれに用いるデータ生成方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-04
(45)【発行日】2024-12-12
(54)【発明の名称】半導体装置およびそれに用いるデータ生成方法
(51)【国際特許分類】
   G06F 17/16 20060101AFI20241205BHJP
   G06F 9/38 20180101ALI20241205BHJP
【FI】
G06F17/16 M
G06F9/38 370C
【請求項の数】 9
(21)【出願番号】P 2020114592
(22)【出願日】2020-07-02
(65)【公開番号】P2022012624
(43)【公開日】2022-01-17
【審査請求日】2023-01-10
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成30年度、国立研究開発法人新エネルギー・産業技術総合開発機構「高効率・高速処理を可能とするAIチップ・次世代コンピューティングの技術開発/革新的AIエッジコンピューティング技術の開発/動的再構成技術を活用した組み込みAIシステムの研究開発」委託研究、産業技術力強化法第17条の適用を受ける特許出願
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】藤井 太郎
(72)【発明者】
【氏名】戸川 勝巳
(72)【発明者】
【氏名】田中 照人
(72)【発明者】
【氏名】戸井 崇雄
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2019-219753(JP,A)
【文献】国際公開第2020/144836(WO,A1)
【文献】特開2019-200553(JP,A)
【文献】国際公開第2020/057593(WO,A1)
【文献】特表2022-502747(JP,A)
【文献】米国特許出願公開第2019/0303757(US,A1)
【文献】米国特許出願公開第2019/0235866(US,A1)
【文献】特開2020-060967(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
複数の重みデータと、前記複数の重みデータと複数の入力データとの対応関係を示す複数の付加情報とを、並列的に出力するメモリと、
前記複数の重みデータに対応した複数の積和演算器と、
前記複数の積和演算器に対応し、前記複数の入力データが並列的に供給され、前記複数の入力データにおいて、前記付加情報によって特定される入力データを選択して、出力する複数のセレクタと、
を備え、
前記複数の積和演算器のそれぞれは、前記複数の重みデータにおいて、互いに異なる重みデータと、対応するセレクタから出力されている入力データとの間で積和演算を行う、半導体装置。
【請求項2】
請求項1に記載の半導体装置において、
前記メモリには、前記複数の重みデータと、前記複数の付加情報が格納され、前記メモリは、互いに異なる前記複数の重みデータと、前記複数の付加情報を、第1期間において、連続的に出力し、
前記複数のセレクタには、前記第1期間において、前記複数の入力データが継続的に供給される、半導体装置。
【請求項3】
請求項2に記載の半導体装置において、
前記メモリには、数値0に相当するデータが減らされるように圧縮された複数の重みデータが格納されている、半導体装置。
【請求項4】
請求項3に記載の半導体装置において、
前記複数のセレクタには、前記第1期間に続く第2期間において、前記第1期間に供給された複数の入力データとは異なる複数の入力データが供給される、半導体装置。
【請求項5】
メモリから並列的に出力される複数の重みデータに対応した複数の積和演算器と、前記複数の積和演算器に対応し、複数の入力データが並列的に供給され、前記複数の重みデータと前記複数の入力データとの対応関係を示す付加情報によって特定される入力データを、前記複数の入力データから選択して、対応する積和演算器へ出力する複数のセレクタと、を備えた並列演算回路で用いられる前記複数の重みデータを生成するデータ生成方法であって、
行列状に配置された元の重みデータにおいて、列に配置された複数の元の重みデータから所定の値に相当する元の重みデータを省略する省略工程と、
前記省略工程で省略された元の重みデータと同じ列に配置された上位行における元の重みデータを、省略された元の重みデータの代わりに詰める圧縮工程と、
前記複数の入力データにおいて、前記省略工程で省略されなかった元の重みデータと演算されるべき入力データとの対応を示す付加情報を生成する付加情報生成工程と、
を備え、
同じ行に配置されている複数の元の重みデータを、前記複数の重みデータとして生成するデータ生成方法。
【請求項6】
請求項5に記載のデータ生成方法において、
前記所定の値は、数値0である、データ生成方法。
【請求項7】
請求項5に記載のデータ生成方法において、
前記行列状に配置された元の重みデータにおいて、同一の列に配置された元の重みデータのうち、小さな値を閾値とし、前記閾値よりも小さな値を、前記所定の値とする、データ生成方法。
【請求項8】
請求項7に記載のデータ生成方法において、
前記行列状に配置された元の重みデータにおいて、各列に配置される元の重みデータの数が、等しくなるように、前記各列における前記閾値が設定される、データ生成方法。
【請求項9】
請求項5に記載のデータ生成方法において、
前記元の重みデータが配置された行列は複数であり、前記セレクタへ供給される前記複数の入力データが、変化するごとに、異なる行列から前記複数の重みデータが、前記複数の積和演算器に供給され、
複数の前記行列のそれぞれにおける行に対して、重要度を設定する重要度設定工程と、
複数の前記行列において、残す行数を指定する指定値に従って、前記重要度設定工程で設定された重要度を基に、行列ごとに残す行数を求める行数設定工程と、
行列の列ごとに、前記行数設定工程で求められた行数が残るように、前記所定の値が設定される、データ生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置、それに用いるデータ生成方法およびその制御方法に関し、例えばディープラーニング処理等の演算処理を行う半導体装置、それに用いるデータ生成方法およびその制御方法に関する。
【背景技術】
【0002】
例えばディープラーニング処理等の大規模な演算処理を行う半導体装置が、特許文献1に記載されている。この特許文献1の例えば図10には、ディープラーニング処理に必要な演算処理を行うために並列演算部(121)が記載されている。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2019-219753号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1では、その図10に示されているように、ローカルメモリ(122)からデータが並列演算部(121)に供給され、並列演算部(121)において、並列的に積和演算が行われる。すなわち、SIMD(Single Instrauction Multiple Data)型で処理が行われる。本発明者らは、特許文献1に記載の技術を用いながら、処理時間の短縮化を図ることを検討した。
【0005】
図28は、本発明者らが検討した比較例の並列演算回路の構成を示すブロック図である。また、図29は、図28に示した並列演算回路の動作を示す図である。
【0006】
図28において、mem_a~mem_nは、ローカルメモリを示し、mulは乗算器を示している。また、AD_a~AD_nは、加算および累積を行う演算器を示している。ローカルメモリmem_aを例にして述べると、ローカルメモリmem_aから出力された重みデータA、B、Cが、対応する乗算器mulに供給され、対応する乗算器mulによって入力データa、b、cと乗算される。それぞれの乗算結果は、対応する演算器AD_aに供給され、加算される。入力データと重みデータを変えながら、前記した演算を繰り返すことにより、入力データと重みデータとの積和演算が行われ、図29に示すような、行列演算を行うことができる。
【0007】
このような構成にすることにより、積和演算の処理時間を短縮させることが可能である。しかしながら、ローカルメモリmem_a~mem_nのそれぞれから、複数の重みデータa、b、cを実質的に同時読み出すことが要求されると言う課題が生じる。また、8ビット幅で乗算を行う乗算器mulが増加し、専有面積が増加すると言う課題が生じる。
【課題を解決するための手段】
【0008】
一実施の形態に係る半導体装置は、次のとおりである。
【0009】
すなわち、半導体装置は、複数の第1データを、並列的に出力するメモリと、複数の第1データに対応した複数の積和演算器と、複数の積和演算器に対応し、複数の第2データが並列的に供給され、複数の第2データにおいて、対応する積和演算器によって第1データと演算されるべき第2データの位置を示す付加情報に従って、供給されている複数の第2データから第2データを選択して出力する複数のセレクタとを備える。複数の積和演算器のそれぞれは、複数の第1データにおいて、互いに異なる第1データと、対応するセレクタから出力されている第2データとの間で積和演算を行う。
【0010】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【発明の効果】
【0011】
一実施の形態によれば、処理時間の短縮化を図ることが可能な半導体装置、それに用いるデータ生成方法およびその制御方法を提供することができる。
【図面の簡単な説明】
【0012】
図1】実施の形態1に係る半導体装置の構成を示すブロック図である。
図2】ニューラルネットワーク構造の例を示す図である。
図3】ニューラルネットワークの演算処理の流れを示す模式図である。
図4】実施の形態1に係る並列演算器での処理を説明するための図である。
図5】実施の形態1に係る並列演算器での処理を説明するための図である。
図6】実施の形態1に係る並列演算回路の構成を示すブロック図である。
図7】実施の形態1に係る並列演算回路の原理を説明するための図である。
図8】実施の形態1に係る圧縮方法を説明するための図である。
図9】実施の形態1に係る並列演算回路を説明するための図である。
図10】実施の形態1に係る並列演算回路を説明するための図である。
図11】実施の形態1に係る並列演算回路を説明するための図である。
図12】実施の形態1に係る並列演算回路の動作を示す状態図である。
図13】実施の形態1に係る並列演算回路の動作を示す状態図である。
図14】実施の形態1に係る並列演算回路の動作を示す状態図である。
図15】実施の形態1に係る並列演算回路の動作を示す状態図である。
図16】実施の形態1に係るディープラーニング処理の全体的なフローを示す図である。
図17】本発明者が検討した圧縮を説明するための図である。
図18】実施の形態1の変形例1に係る圧縮方法を示す図である。
図19】実施の形態1の変形例2に係る圧縮方法を示す図である。
図20】実施の形態1の変形例3に係る圧縮方法を示す図である。
図21】実施の形態2に係る並列演算回路の構成を示すブロック図である。
図22】実施の形態2の変形例1に係る並列演算回路の構成を示すブロック図である。
図23】実施の形態2に係る3値の重みを用いた並列演算回路の構成を示すブロック図である。
図24】実施の形態3に係る並列演算回路の構成を示すブロック図である。
図25】実施の形態3に係る並列演算回路の構成を示すブロック図である。
図26】実施の形態3の変形例1に係る並列演算回路の構成を示すブロック図である。
図27】実施の形態4に係る並列演算回路の構成を示すブロック図である。
図28】比較例の並列演算回路の構成を示すブロック図である。
図29図28に示した並列演算回路の動作を示す図である。
【発明を実施するための形態】
【0013】
以下、本発明の各実施の形態について、図面を参照しつつ説明する。なお、開示はあくまでも一例にすぎず、当業者において、発明の主旨を保っての適宜変更について容易に想到し得るものについては、当然に本発明の範囲に含有されるものである。また、図面は説明をより明確にするため、実際の態様に比べ、各部の幅、数、形状等について模式的に表される場合があるが、あくまで一例であって、本発明の解釈を限定するものではない。
【0014】
また、本明細書と各図において、既出の図に関して前述したものと同様の要素には、同一の符号を付して、詳細な説明を適宜省略することがある。
【0015】
以下では、ディープラーニング処理に適した半導体装置を例にして説明する。しかしながら、ディープラーニング処理は一例であり、以下で説明する半導体装置および制御方法は、大規模な演算処理等を行うものであってもよい。
【0016】
発明が解決しようとする課題で説明した2つの課題を解決する手段が、実施の形態1と、実施の形態2および3とでは異なっているので、それぞれの概要をここで述べておく。
【0017】
<実施の形態1>
実施の形態1においては、行列状に配置される重みデータのうち、積演算の際に影響の少ないデータ、例えば数値0に相当するデータを省略するような圧縮が行われ、ローカルメモリに格納される。これにより、積演算において影響の少ない重みデータの供給が省略され、有意の重みデータが、並列演算回路に供給されることになる。すなわち、複数の有意の重みデータが、並列演算回路に実質的に同時に供給されることになる。また、並列演算回路は、複数の入力データから積和演算に用いられる入力データを選択するセレクタが設けられる。これにより、複数の入力データに対して共通の積演算器を設けることが可能となり、積演算器の増加を抑制することが可能であり、並列演算回路の専有面積の増加を抑制することが可能である。
【0018】
特に制限されないが、例えば、スパースモデル向けの学習では、重みデータが数値0に相当するデータとなるものが多いため、実施の形態1に係る並列演算回路が有効である。
【0019】
<実施の形態2および3>
実施の形態2および3においては、行列状に配置される重みデータとして、従来技術と同様多ビットのデータを用いている。一方で、演算に使用する値としては狭ビット幅とし、前記多ビットは複数の狭ビットを束ねた形としている。これにより、ローカルメモリは従来と同じ重みデータ幅でありながら、同時に並列演算回路に出力される重みデータの個数を増やすことが可能となる。また、狭ビット幅のデータ(重み)と多ビット幅の入力データとの間で演算を行う演算器は、多ビット幅同士の積演算器に比べて専有面積を小型にすることが可能である。そのため、並列演算回路の専有面積の増加を抑制することが可能である。
【0020】
実施の形態2では、狭ビット幅のデータとして、2値の例を説明する。この場合、重みデータは、1ビット幅の狭ビット幅となる。また、実施の形態3では、狭ビット幅のデータとして、3値の例を説明する。3値を表すために、少なくとも2ビットが必要とされるため、重みデータは、2ビット幅の狭ビット幅となる。
【0021】
勿論、実施の形態2および3においては、実施の形態1で述べるような重みデータの圧縮の操作は要求されない。
【0022】
このように、実施の形態1~3のいずれにおいても、前記した2つの課題を解決することが可能であり、専有面積の増加を抑制しながら、処理時間の短縮化を図ることが可能である。しかも従来技術の構成に小規模の回路を追加するだけで実現できるため、従来構成との共存が容易な形態となっている。
【0023】
次に、実施の形態1~3に係る半導体装置を説明する。
【0024】
(実施の形態1)
<半導体装置の構成>
図1は、実施の形態1に係る半導体装置の構成を示すブロック図である。図1において、1は半導体装置を示し、2は半導体装置1に搭載されているアレイ型プロセッサを示している。また、同図において、10はメモリを示している。半導体装置1には、アレイ型プロセッサ2およびメモリ10以外の回路ブロックも搭載されているが、同図では省略されている。
【0025】
アレイ型プロセッサ2は、処理に係るアレイ部12と、管理部9と、転送パス部11とを備えている。管理部9は、メモリ10からディスクリプタ列が供給され、ディスクリプタ列に従って、アレイ部12を管理する。転送パス部11は、重みデータ等を転送するバスB_Wとアレイ部12との間に接続され、重みデータ等をアレイ部12へ転送する。アレイ部12は、バスB_DIからの入力データを処理し、処理された結果をバスB_DOに出力データとして出力する。この処理を行う際に、アレイ部12は、重みデータ等を用いる。
【0026】
<<アレイ部12>>
アレイ部12は、次に述べる複数の回路ブロックを備えている。模式的ではあるが、図1における回路ブロックの配置は、実際の半導体チップにおける配置に合わせて描かれている。しかしながら、回路ブロックの配置は、これに限定されるものではない。
【0027】
アレイ部12が備える回路ブロックとして、図1には、並列演算回路3_0~3_8と、メモリ(Mem)4_0~4_7と、DMAC(Direct Memory Access Controller)5_0~5_7、7_0~7_7と、プロセッサエレメント(以下、PEとも称する)6_0~6_7とを備えている。さらに、回路ブロックとして、アレイ部12は、プログラマブルスイッチ(Programmable Switch、以下、Pスイッチとも称する)P_SW1~P_SW3を備えている。
【0028】
以下の説明において、PE6_0~6_7を纏めて述べる場合、PEの符号として6を用いる。また、並列演算回路3_0~3_8を纏めて述べる場合、並列演算回路の符号として3を用いる。同様に、DMACについては、纏めて述べる場合、符号5または7を用い、メモリについては、符号4を用い、Pスイッチについては、符号P_SWを用いる。
【0029】
PE6は、種々の機能を実現することが可能な回路ブロックである。PE6によって実現する機能は、管理部9からの制御信号によって定められる。また、PスイッチP_SWも、管理部9からの制御信号によって、指定された回路ブロック間を電気的に接続する。例えば、管理部9からの制御信号によって、所定のPE6は所定の演算をするように機能が設定される。また、所定のPスイッチP_SWは、管理部9からの制御信号によって、例えば所定の並列演算回路3と所定のPE6との間を接続するように設定される。ここでは、アレイ部12に、複数のPE6が設けられている例を説明したが、これに限定されるものではない。
【0030】
例えば、PE6_0~6_7のうち、特定のPEを、機能が予め決められた専用の回路ブロックに変更してもよい。図1で説明すると、符号6_0のPEを専用回路ブロックBNに変更し、符号6_2のPEを、活性化処理を行う専用回路ブロックに変更している。ここで、BNは、バッチノーマライゼーション(Batch Normalization)機能を示している。このように、汎用のPEを専用回路ブロックに変更することによって、処理効率と速度の向上を図ることが可能である。
【0031】
DMAC5は、入力データを、例えば所定の並列演算回路3に転送する。並列演算回路3は、重みデータと、DMAC5によって転送された入力データとの間で、並列的に積和演算を実行する。並列演算回路3によって算出された演算結果に対して、PE6に設定された機能が適用され、その結果が、DMAC7によって、出力データとして出力される。
【0032】
なお、図1に示すように、並列演算回路3をアレイ部12の中央部分に配置することにより、並列演算回路3間の距離を短くすることが可能である。そのため、図1に示す配置は、並列演算回路3の演算性能が、アレイ型プロセッサ2によって実行される処理対象のアプリケーションの性能に影響するような場合に適している。
【0033】
<<管理部9、メモリ10、転送パス部11および並列演算回路3>>
メモリ10には、複数のディスクリプタ列が格納されている。それぞれのディスクリプタ列は、PE6の機能を指定する情報およびPスイッチP_SWの状態を定める情報等を備えている。ディスクリプタ列が、管理部9に供給されると、管理部9は、ディスクリプタ列を解読し、対応する制御信号を生成して、アレイ部12等に供給する。これにより、ユーザがメモリ10に格納したディスクリプタ列に従った処理が、アレイ部12において実現される。言い換えるならば、アレイ部12の内部の接続および状態が、管理部9によって定まる。なお、ディスクリプタには、並列演算回路3に対する情報が含まれていてもよい。
【0034】
転送パス部11は、DMAC8を備えている。DMAC8は、バスB_Wにおける重みデータを、並列演算回路3に転送する。後で説明するが、並列演算回路3はローカルメモリを備えている。このローカルメモリに重みデータが格納される。並列演算回路3においては、この重みデータと、入力データに基づいたデータとの間で積和演算が実行される。並列演算回路3については、後で図面を用いて詳しく説明するので、ここでは、これ以上説明しない。なお、メモリ4は、アレイ部12で処理が行われる際に用いられる。
【0035】
<ディープラーニング処理における演算処理>
次に、図1に示したアレイ型プロセッサ2で、ディープラーニング処理を実現する例を説明する。ここでは、ディープラーニング処理を行うために繰り返されるニューラルネットワークの処理を、図1図3を用いて説明する。ここで、図2は、ニューラルネットワーク構造の例を示す図である。図3は、ニューラルネットワークの演算処理の流れを示す模式図である。
【0036】
図1に示したアレイ型プロセッサ2は、ディープラーニング処理において実行される畳み込み処理に適している。畳み込み処理においては、同じ重みデータが非常に多数回用いられる。アレイ型プロセッサ2では、重みデータはローカルメモリに保持されるため、効率よく処理を行うことが可能となる。図2は、畳み込み処理ではなく、同じ重みデータを使い回さない全結合の例を示している。この図2を用いて、ニューラルネットワークにおける演算処理の概略を説明する。
【0037】
ニューラルネットワークの演算は、図2に示すように、入力データに対して重みデータw(w’)を乗ずる積和演算を実行し、その積和演算結果に活性化等の演算を実行し、演算結果を出力すると言う手順をとる。
【0038】
実施の形態1に係るアレイ型プロセッサ2は、図3に示すような演算処理の流れで、図2に示した手順を実行する。図3において、13は、特に制限されないが、アレイ型プロセッサ2の外部に設けられた外部メモリを示している。この外部メモリ13に入力データが格納され、アレイ型プロセッサ2において求められた演算結果が、再び外部メモリ13に書き込まれる。また、並列演算回路3のローカルメモリ14には、重みデータw(w’)が格納されている。
【0039】
アレイ部12は、ステップS1において、外部メモリ13から演算に必要な入力データ(特徴量)を読み出す。ステップS2において、アレイ部12の構成および状態が、管理部9によって設定され、外部メモリ13からの特徴量は、ステップS3において、逐次、並列演算回路3に供給される。並列演算回路3は、逐次供給された特徴量に対して、受け取った順に、ローカルメモリ14に格納されている重みデータw(w’)を乗ずることにより積和演算処理を、ステップS4において実行する。並列演算回路3による積和演算の演算結果は、ステップS5において、逐次出力される。
【0040】
アレイ部12では、並列演算回路3で求められたデータに対して、必要に応じて足し合わせや活性化等の演算を、ステップS6で実行する。ステップS7において、アレイ部2は、演算の結果を別の特徴量として、外部メモリ13に書き込む。このような処理によってニューラルネットワークの処理が実現され、この処理を繰り返すことにより、ディープラーニングの処理に必要な演算処理が実行される。
【0041】
このように、実施の形態1に係るアレイ型プロセッサ2においては、必要な演算処理のうち、規則的な積和演算処理を並列演算回路3で実行することで、高速化を実現することが可能となる。また、積和演算処理以外の演算処理は、管理部9等によって回路を動的に再構成することが可能なPE6で実行する。これにより、図2および図3に第一層(第一層処理)、第二層(第二層処理)および出力層(第三層処理)として記載している各層における活性化等の処理を柔軟に設定することが可能である。さらに、アレイ型プロセッサ2に予め設けられている複数の並列演算回路3から、必要な演算処理に応じた数の並列演算回路を用いることが可能であり、PE6についても同様に、必要な演算処理に応じた数のPE等を用いることが可能である。すなわち、柔軟性を向上させることが可能である。
【0042】
なお、図3において、3a~3mは、1つの並列演算回路3(例えば、3_0)が備える積和演算器を示している。
【0043】
<<積和演算>>
次に、並列演算回路3で実行される積和演算の具体例を、図面を用いて説明する。図4および図5は、実施の形態1に係る並列演算器での処理を説明するための図である。ここで、図4は、行列演算式を模式的に示しており、図5は、図4に対応した行列演算式を示している。
【0044】
図4において、Inはk行×m列の要素で構成された行列データを示し、Wはm行×n列の要素で構成された行列データを示している。行列データInの要素は、並列演算回路3(例えば3_0)に入力される入力データに該当する。また、行列データWの要素は、並列演算回路3_0内のローカルメモリ14に格納されたデータであり、図2で説明した重みデータw(w’)に該当する。図4の例では、行列データInの要素と行列データWの要素との間で、乗算が行われ、その乗算結果の各要素に対してバイアス値Cが加算され、その結果が、k行×n列の要素からなる行列データOutとして出力される。なお、このバイアス値Cも、ローカルメモリ14に格納される。
【0045】
第一層処理に関する行列データInに対する積和演算が実行される場合を説明する。まず、行列データInに対応する行列データWおよびバイアス値Cが、初期値として、ローカルメモリ14に転送される。次に、外部メモリ13から行列データInの第1行目のデータが読み出され、アレイ部12に供給される。このとき、アレイ部12は、管理部9によって規定された構成及び状態となっているため、読み出された第1行目のデータに対して、アレイ部12の構成および状態により決まる所定の処理が実行され、所定の処理が実行された結果が、第1行目のデータとして、並列演算回路3に供給される。
【0046】
並列演算回路3においては、ローカルメモリ14からのバイアス値Cが初期値として積和演算器3a~3nに設定される。その後、積和演算器3a~3nは、アレイ部12から供給された第1行目のデータ(所定の処理が実行された結果)と、ローカルメモリ14から読み出した行列データWの第1列目のデータとの間で積演算を行う。
【0047】
図5には、行列データInの列(m)数が、20で、行列データWの列(n)および行(m)数が20の場合の積和演算の例が示されている。図5の例を用いて説明すると、行列データInの第1行目のデータb~b19に対して、アレイ部12により所定の処理が実行される。この処理の結果に対して、並列演算回路3が行列データWとの間で積和演算を行う。行列データInの第2行目以降も同様にして、並列演算回路3が行列データWとの間で積和演算を行う。また、並列演算回路3においては、積演算を行っている過程において、積演算の結果が累積され、バイアス値Cの加算も行われる。これにより、行列データOutの各要素が算出される。
【0048】
<<並列演算回路3の構成>>
図6は、実施の形態1に係る並列演算回路の構成を示すブロック図である。並列演算回路3は、ローカルメモリ14と、積和演算器3a~3mと、セレクタ15と、ラッチ回路19とを備えている。
【0049】
ラッチ回路19には、アレイ部12で生成され、重みデータ(第1データ)との間で積和演算されるべき入力データ(特徴量)DIが、直列的に供給される。特に制限されないが、1つの入力データDIは、並列の16ビットによって構成されている。ラッチ回路19には、16ビットを一つの単位として、複数の入力データDIが順次供給される。ラッチ回路19は、供給された入力データDIの列を、制御信号SCCに基づいて、4個の入力データDIを、データDL0~DL3(第2データ)として並列的に出力する。例えば、最初に供給された入力データDIをデータDL0とし、2番目に供給された入力データDIをデータDL1とし、3番目に供給されたデータDIをデータDL2とし、4番目に供給されたデータDIをデータDL3として出力するとともに保持する。
【0050】
入力データDIが、高ビット幅の並列データであった場合、ラッチ回路19は、供給されている高ビットの並列データを、データDL0~DL3に分割して、並列的に出力するようにしてもよい。
【0051】
ラッチ回路19は、次に制御信号SCCが変化すると、5番目に供給された入力データDIを、データDL0とし、6番目に供給された入力データDIをデータDL1とし、7番目に供給されたデータDIをデータDL2とし、8番目に供給されたデータDIをデータDL3として出力するとともに保持する。以降同様にして、制御信号SCCが変化するたびに、ラッチ回路19は、順次供給された4個の入力データDIを並列的に出力し、保持する。言い換えるならば、ラッチ回路19は、シリアルデータ列を、パラレルデータに変換する変換回路である。
【0052】
勿論、ラッチ回路19はこれに限定されない。例えば、並列的に出力するデータの数は、4個に限定されず、2個以上であればよい。
【0053】
セレクタ15は、ローカルメモリ14、ラッチ回路19および積和演算器3a~3mに接続されている。セレクタ15は、積和演算器3a~3mにそれぞれ対応した単位セレクタ15a~15mを備えている。単位セレクタ15a~15mには、ラッチ回路19からデータDL0~DL3が、共通に供給されている。単位セレクタ15a~15mのそれぞれは、データDL0~DL3のうち、ローカルメモリ14から供給される付加情報(後で説明する)ADa~ADmによって特定されるデータを選択し、対応する積和演算器に供給する。
【0054】
ローカルメモリ14は、1個のメモリによって構成されているが、積和演算器3a~3mに対応するように、出力が分割されている。出力が複数に分割されていることを示すために、同図では、ローカルメモリ14が、単位ローカルメモリ14a~14mによって構成されているように描かれている。しかしながら、ローカルメモリ14は、1個のメモリで構成されているため、単位ローカルメモリ14a~14mに対してワードW0~Wnは、共通である。そのため、例えばワードW0が選択されると、単位ローカルメモリ14a~14mからは、対応する重みデータWDa~WDmが、同時に読み出される。ここでは、ローカルメモリ14を1個のメモリにより構成する例を説明するが、これに限定されず、複数のメモリによって構成してもよい。しかしながら、この場合、それぞれのメモリのアドレスを管理するための構成が要求されるため、1個のメモリでローカルメモリ14を構成することが望ましい。
【0055】
また、単位ローカルメモリ14a~14mには、付加情報ADa~ADmが格納され、重みデータWDa~WDmが読み出されるときに、この付加情報ADa~ADmも、同時に読み出される。
【0056】
実施の形態1においては、積和演算器と、単位セレクタと、単位ローカルメモリとが、一対一に対応している。例えば、積和演算器3aと、単位セレクタ15aと、単位ローカルメモリ14aが、互いに対応している。単位ローカルメモリ14aから読み出された付加情報ADaは、対応する単位セレクタ15aに供給される。付加情報ADaに従って、データDL1~DL4から単位セレクタ15aが選択したデータと、単位ローカルメモリ14aから読み出された重みデータWDaが、積和演算器3aに供給される。なお、特に制限されないが、重みデータWDaも、16ビットを単位としたデータである。
【0057】
積和演算器3aは、掛け算器(積演算器)16と、加算器17と、レジスタ18とを備えている。積演算器16に、単位セレクタ15aで選択されたデータと重みデータWDaが供給され、これらのデータ間で積演算が実行される。積演算器16で算出された積演算結果は、加算器17によって、レジスタ18に格納されているデータと加算され、加算結果は、レジスタ18に格納される。レジスタ18に格納されたデータが、積和演算結果SRaとして出力される。レジスタ18には、初期値として、数値0、あるいは図4で説明したバイアス値Cが、対応する単位ローカルメモリ14aから供給される。
【0058】
積和演算器3aと、これに対応する単位セレクタ15aおよび単位ローカルメモリ14aを例にして説明したが、残りの積和演算器3b~3m、単位セレクタ15b~15mおよび単位ローカルメモリ14b~14mについても同様である。
【0059】
<<並列演算回路の動作>>
<<<原理>>>
先ず、実施の形態1に係る並列演算回路の原理を、図面を用いて説明する。図7は、実施の形態1に係る並列演算回路の原理を説明するための図である。図7には、図6に示した並列演算回路3において、4個の単位ローカルメモリ14a~14dと、これらの単位ローカルメモリに対応する単位セレクタ15a~15dと、積和演算器3a~3dとが示されている。なお、積和演算器3a~3dとしては、積演算器16のみが、図7に示されている。
【0060】
並列演算回路3で実行される積和演算において、乗算係数となる重みデータは、ローカルメモリ14に格納されるが、重みデータは、数値0に相当するデータを含む場合がある。数値0に相当する重みデータを用いて積和演算を実行しても、積和演算結果は変化しない。
【0061】
実施の形態1においては、ローカルメモリ14に重みデータを格納する前に、重みデータを圧縮する処理が行われる。すなわち、実施の形態1では、数値0に相当する重みデータが省略され、省略により圧縮された重みデータが、ローカルメモリ14に格納される。
これにより、図7に示すように、単位ローカルメモリ14a~14dの最下行には、数値0ではない重みデータa0、b1、c2、d3が格納されている。また、ラッチ回路19(図6)が、時刻t1において、データA~Dを入力データDL0~DL3として出力し、時刻t2において、データE~Hを入力データDL0~DL3として出力する。
【0062】
時刻t1のときに、単位セレクタ15a~15dに供給されている付加情報ADa~ADdによって、単位セレクタ15a~15dは、図7に示すように、データA~Dを選択する。すなわち、単位セレクタ15aはデータAを選択し、単位セレクタ15bはデータBを選択し、単位セレクタ15cはデータCを選択し、単位セレクタ15dはデータDを選択する。また、時刻t1において、ワードW0(図6)を選択することにより、単位ローカルメモリ14a~14dから重みデータa0、b1、c2、d3が読み出される。これにより、積和演算器3a~3dにおける積演算器16は、重みデータa0、b1、c2、d3とデータA~Dとの間で、同時に積演算を実行し、積演算結果A*a0、B*b1、C*c2、D*d3を出力する。
【0063】
続いて ワードW1を選択すると、単位ローカルメモリ14a~14dから次の重みデータを読み出すことができるのに対し、データA~Dはラッチ回路19により保持されているため、引き続き使用することができる。これにより、積和演算器3a~3dにおける積演算器16は、次の重みデータとデータA~Dとの間で、並列に積演算を実行する。その結果、積和演算器3a~3dからは、それぞれ2つの重みデータに基づいた、データA~Dに対する積和演算結果が並列に出力されることになる。
【0064】
時刻t2になり、ラッチ回路19から出力される入力データDL0~DL3が、データE~Hに変更される。この場合も、時刻t1のときと同様に、変更された入力データと重みデータとの積和演算結果が、積和演算器3a~3dから出力されることになる。
【0065】
<<<圧縮方法(データ生成方法)>>>
次に、重みデータを圧縮する圧縮方法を、図面を用いて説明する。重みデータを圧縮することにより、ローカルメモリ14の消費量を圧縮するとともに、処理時間の短縮化を図ることが可能となる。図8は、実施の形態1に係る圧縮方法を説明するための図である。図8には、実施の形態1に係る圧縮方法によって、圧縮する前の状態(圧縮前)と圧縮後の状態(圧縮後)とが示されている。ここでは、ローカルメモリ14において、重みデータ(元データ)が、行列状に配置されている場合を例にして説明する。ローカルメモリ14を構成する単位ローカルメモリ14a~14dのそれぞれが、行列の列を構成する。また、単位ローカルメモリのワードは、W0~W7の8個であるものとする。これにより、圧縮前に示されているように、8行で4列の行列が構成されている。行列には、数値0に相当するデータを含む32個の重みデータが配置されている。ここでも、それぞれの重みデータは、16ビットにより構成されているものとする。
【0066】
実施の形態1に係る圧縮方法では、行列に配置されたデータのうち、数値0に相当するデータが、省略工程で減らされるように省略される。省略後の行列において、省略することにより空白となった部分には、同じ列において、上側に配置されていたデータを移動させて、空白の部分を詰める(圧縮工程)。すなわち、省略により空白となった部分がなくなるように、上側に配置されているデータを最下行に向けて移動させ、データを最下行側に詰める。
【0067】
単位ローカルメモリ14aに相当する列を例にして説明すると、次のとおりである。先ず、数値0に相当するデータは、ワードW0、W2、W4およびW6に配置されている(圧縮前)。これらのデータを省略することにより、ワードW0、W2、W4およびW6部分が空白となる。この空白部分が、数値0でないデータによって詰められるように、同じ列で、上側に配置されているデータを移動させる。すなわち、データa1をワードW0に移動させる。これにより、ワードW1およびW2が空白となるため、ワードW3に配置されているデータa3を、ワードW1に移動させる。これにより、ワードW2~W4が空白となるため、ワードW5に配置されているデータa5をワードW2に移動させる。最後に、空白となったワードW3に、ワードW7に配置されているデータa7を移動させる。残りの単位ローカルメモリ14b~14dについても、同様に、データを移動させることにより、圧縮後として示されているように、32個の重みデータは、4行4列に配置される。
【0068】
また、圧縮前の行列は、2つのグループG1、G2に分けられている。実施の形態1においては、グループに応じて、単位セレクタに供給されるデータが変更される。すなわち、グループG1では、重みデータとの演算対象である入力データDL0~DL3として、データA~Dが供給される。これに対して、グループG2では、重みデータとの演算対象である入力データDL0~DL3として、データE~Hが供給される。このグループG1とG2との間の境界線(一点鎖線)CHLの位置は、並列演算回路に入力される入力データの個数で定まる。図7の例では、入力データが、4個単位(A~Dと、E~H)であるため、4行を1つのクループとして分けている。
【0069】
圧縮後では、グループG1は、2行のグループG1aとなり、グループG2も、2行のグループG2aとなっている。なお、グループG1、G2およびG1a、G2aは、境界線CHLを境にして配置された2個の行列と見なすことができる。
【0070】
最下位行に向けて圧縮する際、グループを跨って、データが下側に移動しないようにする。例えば、単位ローカルメモリ14cを例にすると、圧縮前にワードW4に配置されているデータc4は、圧縮により、ワードW1まで移動させることが可能である。しかしながら、データc4をワードW1まで移動させると、圧縮後のデータc4は、グループG1aまで移動することになり、データA~Dのいずれかと演算されることになる。その結果、データc4は、誤った入力データと演算されてしまう。実施の形態1では、数値0に相当するデータが、グループG1aの単位ローカルメモリ14cにおけるワードW1の部分に追加される。これにより、圧縮後のデータc4は、境界線CHLを越えず、グループG2aに配置されることになり、データE~Hのいずれかと演算されることになる。
【0071】
見方を変えると、圧縮前のグループG1、G2単位で、数値0に相当するデータを省略する圧縮を行い、圧縮後のグループG1a、G2aを生成しているとみなすことができる。
【0072】
<<<付加情報(第1付加情報)>>>
圧縮前は、メモリ14における重みの行Wnが、各重みが どの入力データと演算するかを示していた。ここで、圧縮するために重みデータから数値0に相当するデータを省略すると、圧縮後の行列における重みデータの位置が変化する。そのため、圧縮後の重みデータと、その演算対象の入力データとの対応関係が不明となる。実施の形態1においては、圧縮後の重みデータが、どの入力データと演算するのかを示す情報が、付加情報として、付加情報生成工程で生成され、追加される。なお、以下の説明では、この付加情報は、第1付加情報とも称する。
【0073】
次に、図を用いて、第1付加情報を説明する。図9は、実施の形態1に係る並列演算回路を説明するための図である。
【0074】
図9に示した圧縮前の行列は、図8に示した圧縮前の行列と同じである。図9に示した圧縮後の行列には、圧縮された重みデータと対応する第1付加情報とが配置されている。図9では、単位ローカルメモリ14a~14dのそれぞれは、2つの記憶列を備えており、一方の記憶列(データ用記憶列)に重みデータが格納され、他方の記憶列(付加用記憶列)に第1付加情報が格納される。単位ローカルメモリ14aを例にして説明すると、一方の記憶列が符号14adで示され、他方の記憶列が符号14aaで示されている。
【0075】
圧縮前の行列において、列(単位ローカルメモリ14a)に配置されている重みデータ0、a1、0、a3、0、a5、0、a7から、数値0に相当する重みデータが省略される。この場合、最下位のワードW0に配置されている重みデータ0の演算対象は、入力データDL0(図7)となる。次のワードW1に配置されている重みデータa1の演算対象は、入力データDL1となり、ワードW2に配置されている重みデータ0の演算対象は、入力データDL2となる。また、ワードW3に配置されている重みデータa3の演算対象は、入力データDL3となる。数値0に相当する重みデータが省略され、残った重みデータが、データ用記憶列14adに格納され、残った重みデータに対応する第1付加情報が、付加用記憶列14aaに格納される。
【0076】
圧縮前において、ワードW0~W3に配置された重みデータ0、a1、0、a3の演算対象は、入力データDL0、DL1、DL2、DL3であり、この入力データDL0~DL3の位置情報が、第1付加情報となる。ここで、符号DLに付された番号0~3は、4個の入力データにおける位置に相当する。具体的に述べると、圧縮前のワードW1における重みデータa1の演算対象は、入力データDL1となり、位置情報は1となる。また、圧縮前のワードW3における重みデータa3の演算対象は、入力データDL3となり、位置情報は3となる。圧縮後の付加用記憶列14aaにおいて、ワードW0の部分には、重みデータa1に対応する位置情報1が格納される。
【0077】
同様に、圧縮後の付加用記憶列14aaにおいて、ワードW1の部分には、重みデータa3に対応する位置情報3が格納される。これにより、圧縮後の重みデータと、その演算対象となる入力データとの対応関係が定義される。その結果、圧縮後において、例えばワードW0が選択されたときには、データ用記憶列14adから、データa0が、重みデータWDaとして読み出され、また付加用記憶列14aaから、位置を示す数値1が、付加情報ADaとして読み出される。
【0078】
単位ローカルメモリ14aを例にして説明したが、残りの単位ローカルメモリ14b~14dについても同様である。
【0079】
ここでは、グループG1およびG1aを例にして説明したが、グループG2およびG2aについても同様である。グループG2およびG2aの場合には、圧縮前のワードW4~W7および圧縮後のワードW2~W3を、前記したワードW0~W3およびワードW0~W1と読み替えればよい。
【0080】
図9では、付加情報として、位置を示す十進数を用いる例を示したが、これに限定されるものではない。例えば、付加情報は、十進数ではなく、図10に示すように、2進数(ビットマップ形式)で表すようにしてもよい。図10では、圧縮前のグループG1において、単位ローカルメモリ14aに配置されているデータa1およびa3が、2番目および4番目であることを示す2進数“0、1、0、1”が、付加情報として、単位ローカルメモリ14aに格納される。この場合、2進数の最初の1ビット目は、1番目の入力データDL0を示し、次の2ビット目は、2番目の入力データDL1を示し、その次の3ビット目は、3番目の入力データDL2を示し、最後の4ビット目は、4番目の入力データDL3を示している。2番目と4番目の入力データDL1とDL3が演算対象であることを示すために、2ビット目と4ビット目が、論理値“1”となり、入力データDL0とDL2は演算対象でないため、1ビット目と3ビット目は、論理値“0”となっている。付加情報を4ビット表せるため、付加情報を表すのに必要なメモリ容量を低減することが可能である。
【0081】
<<<タイミングに関する付加情報(第2付加情報)>>>
入力データDL0~DL3を維持したまま、複数行の重みデータを読み出して使用する場合、圧縮を行うためには、ラッチ回路19(図6)により入力データを保持しているタイミングを制御することが要求される。実施の形態1においては、このタイミングが付加情報(以下、第2付加情報とも称する)によって制御される。図面を用いて、第2付加情報を説明する。図11は、実施の形態1に係る並列演算回路を説明するための図である。
【0082】
図11に示す圧縮前の行列および圧縮後の行列は、図9に示したものと同じである。図11には、ラッチ回路19に供給される制御信号SCCを生成するために用いられるレジスタGTが示されている。
【0083】
圧縮前の行列のグループG1、G2のそれぞれは、4行である。そのため、入力データDL0~DL3の値を4サイクルの間保持することにより、データA~Dを入力データDL0~DL3として維持した状態で、重みデータを変更しながら、積和演算を実行することが可能である。しかしながら、圧縮の処理を実行することにより、圧縮後のグループG1aおよびG2aのそれぞれの行数は、圧縮前よりも少なく、2行となる。
【0084】
実施の形態1において、レジスタGTは、圧縮後のグループに対応する複数のレジスタ部GT1、GT2を備えている。グループG1aに対応するレジスタ部GT1およびグループG2aに対応するレジスタ部GT2には、それぞれ、対応するグループG1aおよびG2aの行数が設定される。これにより、制御信号SCCは、レジスタ部GT1に設定されたサイクル数の間、出力している入力データDL0~DL3を維持する。その結果、積和演算器3a~3dは、2サイクルの間、グループG1aから順次供給される重みデータと、入力データDL0~DL3(すなわち、データA~D)との間で積和演算を実行する。また、2サイクル後には、積和演算器3a~3dは、クループG2aからの重みデータと、入力データDL0~DL3(すなわち、データE~H)との間で積和演算を実行する。レジスタ部GT1、GT2には、同じ入力データを出力するサイクル数あるいは期間(GT1:第1期間、GT2:第2期間)が設定されると見なすことができる。
【0085】
<<並列演算回路の動作>>
次に、並列演算回路3の動作例を、図面を用いて説明する。図12図15は、実施の形態1に係る並列演算回路の動作を示す状態図である。
【0086】
図12図15において、14は、圧縮後のローカルメモリを示している。これらの図面において、ローカルメモリ14に格納されている重みデータは、図8に示した圧縮後のローカルメモリと同じである。
【0087】
図12には、1サイクル目の積和演算の状態が示されている。レジスタ部GT1が、2であるため、2サイクルの間は入力データDL0~DL3としてデータA~Dが、単位セレクタ15a~15dに並列的に供給される。単位セレクタ15a~15dには、図9で説明した第1付加情報ADa~ADdが供給される。これにより、単位セレクタ15aは、付加情報ADaが1であるため、位置1に対応する入力データDL1であるデータBを選択する。また、単位セレクタ15bは、位置0に対応する入力データDL0であるデータAを選択し、単位セレクタ15cは、位置3に対応する入力データDL3であるデータDを選択する。さらに、単位セレクタ15dは、位置0に対応する入力データDL0であるデータAを選択する。これにより、積演算器16は、図12に示すように、積演算結果B*a1、A*b0、D*c3およびA*d0を並列的に出力する。
【0088】
1サイクル目が終了し、2サイクル目になると、並列演算回路3の状態は、図13に示すように変化する。
【0089】
すなわち、ワードW1が選択される。また、レジスタ部GT1が2であるため、入力データDL0~DL3としては、データA~Dが維持されている。ワードW2が選択されることにより、図9に示した第1付加情報に従って、単位セレクタ15a~15dは、入力データDL3(データD)、入力データDL1(データB)、入力データDL0(データA)、入力データDL2(データC)を選択する。その結果、積和演算器3a~3dは、図13に示されているように、1サイクル目で算出した積演算の結果と、2サイクル目で算出した積演算との和を出力する。
【0090】
2サイクル目が終了し、3サイクル目になると、並列演算回路3の状態は、図14に示すように変化する。
【0091】
すなわち、ワードW2が選択される。また、GT1が示す2サイクルを終えたため、次のGT2が選択され、その値が2であるため、ラッチ回路19は、入力データDL0~DL3としては、データE~Hを出力する。ワードW2が選択されることにより、図9に示した第1付加情報に従って、単位セレクタ15a~15dは、入力データDL1(データF)、入力データDL0(データE)、入力データDL0(データE)、入力データDL1(データF)を選択する。その結果、積和演算器3a~3dは、図14に示されているように、2サイクル目で算出した積和演算の結果に、3サイクル目で算出した積演算の和を出力する。
【0092】
3サイクル目が終了し、4サイクル目になると、並列演算回路3の状態は、図15に示すように変化する。
【0093】
すなわち、ワードW3が選択される。また、レジスタ部GT2の値が2であるため、ラッチ回路19は、入力データDL0~DL3としては、データE~Hの出力を維持する。ワードW3が選択されることにより、図9に示した第1付加情報に従って、単位セレクタ15a~15dは、入力データDL3(データH)、入力データDL2(データG)、入力データDL2(データG)、入力データDL3(データH)を選択する。その結果、積和演算器3a~3dは、図15に示されているように、3サイクル目で算出した積和演算の結果と、4サイクル目で算出した積演算との和を出力する。
【0094】
このようにして、データA~Hとローカルメモリ14からの重みデータとの間で積和演算が実行される。
【0095】
<ディープラーニング処理>
次に、実施の形態1に係る半導体装置1を用いたディープラーニング処理について説明する。半導体装置1内の並列演算回路3は、図6に示したように、ローカルメモリ14を備えている。このローカルメモリ14には、ディープラーニング処理の演算において用いられる重みデータが圧縮されて、格納される。また、前記した付加情報もローカルメモリ14に格納される。実施の形態1においては、重みデータの圧縮および付加情報の生成は、半導体装置1とは異なる装置(例えばコンピュータ)あるいはクラウド上で、事前に行われる。
【0096】
図16は、実施の形態1に係るディープラーニング処理の全体的なフローを示す図である。図16において、100は学習の工程を示し、101は重みデータを圧縮する重み変換および付加情報を生成する処理工程を示している。学習工程100および処理工程101は、コンピュータあるいはクラウド上で、事前に行われる。すなわち、コンピュータあるいはクラウド上での学習工程100において、重みデータの基となる元データが生成され、この元データが、重みデータとして、コンピュータあるいはクラウド上の処理工程101に提供される。この事前の処理工程(事前処理工程)で生成された圧縮済みの重みデータおよび付加情報が、半導体装置1のローカルメモリ14に予め転送される。半導体装置1では、ローカルメモリ14に格納された圧縮済みの重みデータと入力データとの間で演算処理を行うことにより、推論処理が行われる。特に制限されないが、実施の形態1では、学習工程100において、スパースモデル向けの学習が行われる。なお、ローカルメモリ14の容量が少ない場合には、事前の処理工程で生成された圧縮済みの重みデータおよび付加情報は、ローカルメモリ14ではなく、図1に示したバスB_Wに接続された外部メモリに転送するようにしてもよい。
【0097】
なお、事前処理工程で行われる処理の一部を、コンピュータあるいはクラウド上ではなく、半導体装置1において実施するようにしてもよい。
【0098】
図16において、処理フローは、時間経過に伴って行われる処理を示している。時刻t3よりも前の時刻において、事前処理工程が行われる。事前処理工程で生成された圧縮済みの重みデータと付加情報とが、図1の示した転送パス部11によって、ローカルメモリ14に転送され、格納される。時刻t3以降においては、半導体装置1のローカルメモリ14に格納された圧縮済み重みデータと入力データとの間で演算処理が行われ、推論が繰り返される。
【0099】
<変形例1>
図8では、数値0に相当するデータを省略することにより、重みデータを圧縮する例を示したが、これでは、圧縮により処理時間を削減する効果が小さい場合がある。処理時間削減の効果が小さい例を、図面を用いて説明する。図17は、本発明者が検討した圧縮を説明するための図である。
【0100】
図17は、図8に類似している。相違点は、圧縮前において、列(単位ローカルメモリ)に配置されている数値0に相当する重みデータの個数が不揃いであることである。例えば、圧縮前において、グループG1の単位ローカルメモリ14aには、数値0に相当する重みデータが、0個配置されている。これに対して、単位ローカルメモリ14b~14dには、3個の数値0に相当する重みデータが配置されている。圧縮により、数値0に相当するデータを省略した場合、単位ローカルメモリ14b~14cについて、圧縮後に示すように、ワードW0の部分にのみ、有意の重みデータが配置されるが、単位ローカルメモリ14aについては、ワードW0~W3のそれぞれに、有意の重みデータが配置されることになる。その結果、積和演算においては、ワードW0~W3を選択することが必要となり、グループG1の計算を行うのに4サイクルが必要となり、処理時間の削減効果が得られない。
【0101】
図18は、変形例1に係る圧縮方法を示す図である。図18において、圧縮前の重みデータは、数値0に相当するデータが1個である。そのため、図8に示したように、数値0に相当するデータを省略しても、計算を行うためには、8サイクルが必要となる。
【0102】
変形例1においては、所定の値より小さい数値(閾値)を数値0と見なす。これにより、所定の値よりも小さい値に相当するデータを省略する。積演算を行う場合であれば、小さい数値は、積和演算の結果に対して影響が少ないため、数値0と見なしても影響が小さくて済む。
【0103】
変形例1においては、圧縮過程に示すように、数値3を所定の値として設定している。これにより、圧縮過程の行列において、ドットで埋めた数値の部分を、数値0と見なす。その後、数値0に相当するデータを省略することにより、圧縮後に示すように、グループG1aおよびG2aのそれぞれの行数を3行に圧縮することが可能である、その結果、圧縮前においては、8サイクルの処理時間が必要であったものを、6サイクルに低減することが可能となり、処理時間の短縮を図ることが可能である。
【0104】
<変形例2>
変形例1では、圧縮後の行列から理解されるように、数値0に相当するデータが、列ごとに不揃いである。例えば、図18に示す圧縮後のグループG1aにおいて、単位ローカルメモリ14bのデータ用記憶列14bdには、3個の有意な数値が配置され、データ用記憶列14ddには、0個の有意な数値が配置されている。処理時間は、最も多く有意な数値が配置されている列によって、律速されるため、3サイクルの処理時間が必要とされる。
【0105】
変形例2においては、圧縮前の行列において、グループ毎に見て、列に配置される数値0の個数が揃うように、列ごとに閾値が設定される。設定された所定の値以下の数値は、数値0と見なして、省略する。言い換えるならば、同じグループに配置される複数の列において、有意の重みデータの個数が同じとなるように、列ごとに閾値が変更される。これにより、グループの計算において必要とされるサイクル数を低減して、処理時間の短縮化を図ることが可能となる。
【0106】
次に、図面を用いて、変形例2に係る圧縮方法の一例を説明する。図19は、変形例2に係る圧縮方法を示す図である。
【0107】
圧縮前の重みデータの行列は、図18に示したものと同じである。ここでは、それぞれのグループにおける各列において、2個の重みデータが残るように、所定の値が設定されている。例えば、グループG1において、単位ローカルメモリ14aに相当する列においては、閾値として、数値3が設定されている。また、同じグループG1において、単位ローカルメモリ14bに相当する列においては、閾値として、数値5が設定されている。これにより、圧縮過程の行列に示されているように、グループG1の単位ローカルメモリ14aに相当する列では、数値1と3の部分がドットで埋められ、数値4と9の2個の重みデータが残る。また、グループG1において、単位ローカルメモリ14bに相当する列では、数値6と8の2個の重みデータが残る。残りの列についても、同様に、列ごとに閾値が設定され、それぞれの列において、2個の重みデータが残るように、圧縮が行われる。その結果、圧縮後の行列は、図19に示すように、グループG1aおよびG2aのそれぞれが、2行となり、4サイクルで計算を行うことが可能となり、処理時間の短縮効果を高めることが可能である。
【0108】
なお、圧縮後の行列において、改めて閾値を設定して、この閾値よりも小さい値を数値0と見なし、そのデータを省略して演算が不要になることによる低電力化を図るようにしてもよい。
【0109】
<変形例3>
図20は、変形例3に係る圧縮方法を示す図である。変形例3においては、グループ毎に残す行数に重要度を用いる方法である。同図では、グループG1で、1行を残した場合の重要度が12、2行目も残した場合の重要度が8、3行目も残した場合の重要度が5、4行目も残した場合の重要度が1であることを示している。また、グループG2で、1行を残した場合の重要度が15、2行目も残した場合の重要度が10、3行目も残した場合の重要度が9、4行目も残した場合の重要度が3であることを示している。
【0110】
この行を残す重要度は、各グループ内で列内の重要な値を上位から順に残した場合の効果を元に決めることができる。例えば各グループ内において、各列の最大値を全列で和として求め、1行残す場合の重要度とすることができる。同様に各列の2番目に大きい値の全列の和を、2行目を残す場合の重要度とする。グループ内の列毎に見て、重要な値から順に、各値を残すことの重要度を列の代表値として示せるようにするものである。ただし、残す行を増やすことの価値を示せる行の代表値を得る手法であれば、最大値を用いることや全列の総和を求めるといった前記手法に限るものではない。
【0111】
図20に示した行列のグループG1、G1aにおいて、左下がり斜線が付された重みデータは、その重みデータが配置された列において、最も値の大きな重みデータを示している。また、図20に示した行列のグループG2、G2aにおいて、右下がり斜線が付された重みデータは、その重みデータが配置された列において、最も値の大きな重みデータを示し、縦線が付された重みデータは、その重みデータが配置された列において、2番目に値の大きな重みデータを示している。さらに、図20に示した行列のグループG2、G2aにおいて、ドットが付された重みデータは、その重みデータが配置された列において、3番目に値の大きな重みデータを示し、空白の重みデータは、その重みデータが配置された列において、最も値の小さな重みデータを示している
圧縮に際しては、グループ全体で、何行残すかを設定する。設定された行数に応じて、重要度の高い行を残すようにする。例えば、グループ全体で4行残すと設定した場合、重要度15、12、10、9が候補となる。この場合、グループG1から、1行(重要度12)が残され、グループG2から、3行(重要度15、10、9)が残される。
【0112】
グループG1から1行を残すため、グループG1の各列(単位ローカルメモリ14a~14d)から、最も大きな数値の重みデータが残るようにする。すなわち、同じ列において、最も大きな数値の重みデータ(右上がり斜線の重みデータ)を残し、残りの重みデータを数値0と見なして、省略する。同様に、グループG2においては、各列(単位ローカルメモリ14a~14d)から、数値が大きい3個の重みデータが残るようにする。すなわち、同じ列において、数値の大きな3個の重みデータを残し、残り1個の重みデータ(空白の重みデータ)を数値0と見なして、省略する。これにより、重要度の高いものを用いて、4サイクルで計算をすることが可能となる。
【0113】
圧縮することにより、圧縮後1あるいは圧縮後2の行列を生成することが可能である。圧縮後1の行列は、圧縮前の行列から重要度の低い部分を単純に削除することにより、生成したものである。すなわち、1つのグループにおいて、行で見たときの重みデータの相互の配置関係は、圧縮前の行列の配置と同じになっている。
【0114】
これに対して、圧縮後2の行列では、各グループにおいて、重要度の高い順に並べ替えが行われる。グループG2を例にして述べると、同じ列において最も値の大きな重みデータが、最下位行に配置され、以降値が小さくなるのに従って、上側の行に配置されるように、並び替えが行われる。このように、重要度の高いものを最下位行側に配置することで、計算を例えば、グループ内では途中で中止しても、中止による影響を抑制することが可能である。
【0115】
圧縮後1の行列を用いて、積和演算を行う場合、同じ列における重みデータの配置の相互関係は維持されているため、第1付加情報としては、図9および図10で説明した付加情報を用いることができる。これに対して、圧縮後2の行列を用いて、積和演算を行う場合、第1付加情報としては、各重みデータの元の位置を特定することが必要であるため、図9に示した付加情報を用いて、演算を実行することになる。
【0116】
(実施の形態2)
実施の形態1では、単位ローカルメモリから出力される重みデータ(例えば図6のWDa)が、入力データ(例えばDL0)のビット幅(16ビット)と同じで、重みデータおよび入力データが、ともにINT型あるいはFP型で、数値を表す場合を説明した。実施の形態2では、入力データは、実施の形態1と同様に、INT型あるいはFP型で数値を表すが、重みデータは、多値を表す2値データである。実施の形態2では、単位ローカルメモリから出力される重みデータの各ビットが、2値の重み(Binary Weight)を表す場合の並列演算回路の例を示す。
【0117】
図21は、実施の形態2に係る並列演算回路の構成を示すブロック図である。並列演算回路3は、複数の単位ローカルメモリ14a~14mと、複数の単位セレクタ15a~15mと、複数の和演算器31a~31mとによって構成されている。図21には、代表として、1個の単位ローカルメモリ14aと、対応する単位セレクタ15aと、対応する和演算器31aのみが描かれている。残りの単位ローカルメモリ、単位セレクタおよび和演算器も、図21に示したものと同様である。また、入力データは、DL0~DL7の8個となっている。データA~Hが、時刻t1において、入力データDL0~DL7として、単位セレクタ15aに同時に供給される。時刻t1に続いて、時刻t2において、データI~Pが入力データDL0~DL7として、単位セレクタ15aに同時に供給される。図面が複雑になるのを避けるために、ここでは入力データDL0~DL7(A~P)のそれぞれが、8ビット幅の場合を説明するが、これに限定されず、入力データは例えば16ビット幅であってもよい。
【0118】
単位ローカルメモリ14aは、8個のメモリ列14a0~14a7を備えている。メモリ列14a0~14a7のそれぞれからは、1ビットの重みデータが出力される。例えば、ワードW0が選択されると、メモリ列14a0~14a7の最下位行に格納されている重みデータが、重みデータWDa0~WDa7として、同時に読み出され、単位セレクタ15aに供給される。勿論、単位ローカルメモリ14aは、8個の1ビット幅のデータを出力するメモリと見なしてもよい。
【0119】
単位セレクタ15aは、メモリからの値と入力データの値との間で演算を行う単位演算器(単位積演算器)として機能する。単位セレクタ(単位積演算器)15aは、メモリからの値14a0~14a7と入力データDL0~DL7の値の間でそれぞれ乗算を行う。メモリからの各値は、それぞれ+1か-1を意味するため、単位セレクタはそれぞれ、メモリからの値に応じて入力データ値そのままか符号反転値して出力すれば、積演算した結果と同等になる。そのために、メモリ列14a0~14a7に対応した複数のセレクタ部15a0~15a7と、複数の符号反転器30a0~30a7とを備えている。重みが1ビット幅の場合、入力データに+1か-1を掛けることを意味するため、入力データDL0~DL7に対し、そのままの値と、符号反転器30a0~30a7にて入力データ値を符号反転したものがセレクタ部15a0~15a7に入力している。さらに重みデータWDa0~WDa7が前記セレクタに入力しており、その値に応じて入力データそのままの値か符号反転した値を選択することで、入力データに重みを掛けた値がセレクタから出力される。
【0120】
和演算器31aは、加算器17とレジスタ18とを備えている。加算器17は、セレクタ部15a0~15a7からの出力と、レジスタ18からの出力とを加算し、加算結果をレジスタ18に供給する。これにより、積和演算結果が、レジスタ18から出力される。
【0121】
すなわち、単位ローカルメモリ14aから同時に出力された8個の重みデータWDa0~WDa7と、時刻t1において、入力データDL0~DL7として同時に出力された8個のデータA~Hとの間で同時に演算が行われ、加算される。加算結果は累積されて、積和演算結果となる。
【0122】
図21に示す並列演算回路3によれば、同時に8個の演算を実行することが可能であるため、演算速度を8倍に向上させることが可能であり、処理時間の短縮化を図ることが可能である。また、図21の並列演算回路3においては、図6に示したような積演算器16が必要とされないため、面積の増加を抑制することが可能である。
【0123】
<変形例1>
図22は、変形例1に係る並列演算回路の構成を示すブロック図である。図22においては、図21に比べて、入力データの数が、DL0~DL3の4個に減っており、積演算部15aの内部構成も、4個に減っている。これに対して、単位ローカルメモリ14aは、図21と同様に、8個のメモリ列14a0~14a7を備えており、ワード(例えばW0)を選択することにより、8個の重みデータを同時に読み出すようになっている。すなわち、入力データの数と、単位ローカルメモリから読み出される重みデータの数が一致しない非対称の構成となっている。
【0124】
変形例1においては、4個の読み出しセレクタ32_01~32_67が、並列演算回路3に追加されている。各読み出しセレクタは、2個のメモリ列に対応し、対応する2個のメモリ列から読み出された2個の重みデータから、選択信号S32に従って1個の重みデータを選択し、対応するセレクタ部に供給する。読み出しセレクタ32_01を例にして述べると、この読み出しセレクタ32_01は、メモリ列14a0および14a1に対応している。読み出しセレクタ32_01は、メモリ列14a0および14a1から読み出されている重みデータから、選択信号S32に従って、読み出しデータを選択し、重みデータWDa0として、セレクタ部15a0へ供給する。
【0125】
変形例1においては、加算器17によって、2回加算動作が行われる間、単位ローカルメモリ14aは、1度の読み出しが行われる。すなわち、1回の加算動作を1サイクルと見なした場合、単位ローカルメモリ14aは2サイクルに1回読み出しが行われる。
【0126】
選択信号S32は、サイクル毎に、異なるメモリ列を指定するように変化する。これにより、読み出しセレクタ32_01は、1サイクル目では、例えばメモリ列14aから読み出されている重みデータを選択し、2サイクル目では、メモリ列14aから読み出されている重みデータを選択する。選択された重みデータと入力データDL0との間で、図21で説明したのと同様に、演算が行われる。
【0127】
変形例1においては、8個の入力データを4個ずつの入力データに分けて、積和演算が行われる。そのため、図21に比べて、演算速度は半分の4倍となる。しかしながら、セレクタ部および加算器の数を低減し、和演算器31で同時に実行する和演算処理を低減することが可能であるため、面積の増加を抑制することが可能である。
【0128】
(実施の形態3)
実施の形態3では、単位ローカルメモリから出力される重みデータの各ビットが、多値として3値の重み(Ternary Weight)を表し、入力データが、INT型あるいはFP型で、数値を表す場合の並列演算回路の例を示す。3値を示すために、重みデータは、2ビット幅となっている。勿論、3値は例であり、4値以上の多値であってもよい。
【0129】
<入力データがシリアルの場合>
先ず、それぞれ8ビット幅の入力データA~Hが、並列演算回路に順次供給されて、積和演算が実行される例を、図面を用いて説明する。図23は、3値の重みを用いた並列演算回路の構成を示すブロック図である。
【0130】
1サイクル目で、データAが並列演算回路に供給されると、単位ローカルメモリ14aの各メモリ列14a0~14a3のそれぞれから、3値の重みを示す2ビット幅の重みデータが読み出される。読み出された4個の重みデータから、セレクタ33aが、1個の重みデータを選択する。図23では、メモリ列14a0から読み出されている重みデータ“a0”が選択されている。選択された重みデータに従って、データAとの積演算が行われ、積演算結果A*a0が出力される。同様に、単位ローカルメモリ14bの各メモリ列14b0~14b3のそれぞれから、3値の重みを示す2ビット幅の重みデータが読み出される。選択された重みデータ“b0”とデータAとの積演算が行われ、積演算結果A*b0が出力される。
【0131】
次に、データがAからBに変わる(2サイクル目)と、セレクタ33aおよび33bによって、メモリ列14a1および14b1から読み出されている重みデータ“a1”および“b1”が選択される。この重みデータとデータBとの積演算が行われ、先に求められた積演算結果に加えられる。その結果、単位ローカルメモリ14aに対応する積和演算結果は、A*a0+B*a1となる。データが、Cに変化する(3サイクル目)と、メモリ列14a2および14b2から読み出されている重みデータa2およびb2が選択される。次に、データが、Dに変化する(3サイクル目)と、メモリ列14a3および14b3から読み出されている重みデータa3およびb3が選択される。これにより、重みデータとデータA~Dとの間で積和演算が行われることになる。すなわち、単位ローカルメモリから同時に読み出された重みデータは、2ビット幅の重みデータが4個でパックされていることになる。この4個のパックが順次、データA~Dとの間で演算されることになる。
【0132】
単位ローカルメモリに格納する重みデータを、3値を表す重みデータとすることにより、ローカルメモリの容量を低減し、消費電力を低減することが可能であるが、データA~Dに対して積和演算をする場合、4サイクルが必要とされ、演算速度を向上させることが困難である。
【0133】
<実施の形態3に係る並列演算回路>
次に、実施の形態3に係る並列演算回路の構成を、図面を用いて説明する。図24および図25は、実施の形態3に係る並列演算回路の構成を示すブロック図である。
【0134】
実施の形態3に係る並列演算回路3は、ローカルメモリと、セレクタ部と、符号反転器と、和演算器とを備えている。ローカルメモリは、図6に示したように、複数の単位ローカルメモリを備えている。図24には、ローカルメモリが備える複数の単位ローカルメモリのうち、単位ローカルメモリ14aおよび14bのみが描かれている。また、図24には、代表として、この単位ローカルメモリ14aおよび14bに対応するセレクタ部15a0~15a3および15b0~15b3と、符号反転器30a0~30a3および30b0~30b3のみが描かれている。さらに、和演算器についても、代表として、単位ローカルメモリ14aおよび14bに対応する和演算器31aおよび31bのみが、図24に描かれている。
【0135】
単位ローカルメモリ14aおよびこれに対応するものを例にして、説明するが、残りの単位ローカルメモリおよび対応するものも同様である。
【0136】
単位ローカルメモリ14aは、メモリ列14a0~14a3を備えている。ローカルメモリ14において共通のワードW0~W2が選択されることにより、メモリ列14a0~14a3のそれぞれにおいて、選択されたワードに接続されている部分(2ビット分のメモリセル)から重みデータWDa0~WDa3が、同時に読み出される。ここで、重みデータWDa0~WDa3のそれぞれは、3値の重みを示す2ビット幅のデータである。
【0137】
符号反転器30a0~30a3には、入力データDL0~DL3が供給される。符号反転器30a0~30a3は、供給された入力データDL0~DL3に対して符号を反転した値を生成し、出力する。
【0138】
セレクタ部15a0~15a3には、対応する入力データDL0~DL3と、符号反転器30a0~30a3によって生成された-1倍の入力データと、数値0に相当する固定データとが供給される。セレクタ部15a0~15a3は、対応する重みデータWDa0~WDa3に従って、供給されている入力データ、入力データの-1倍、および固定値0から、データを選択し、対応する和演算器31aに出力する。これは重み値に応じて入力データの+1倍、-1倍、0倍のいずれかを行っていることを意味する。メモリ列14a0を例にして述べると、対応する符号反転器30a0およびセレクタ部15a0には、入力データDL0が供給され。セレクタ部15a0は、メモリ列14a0からの重みデータWDa0に従って、入力データDL0とその符号反転値、および固定データ0の中から選択して、和演算器31aに出力する。
【0139】
和演算器31aは、図21で説明した和演算器と同様に、加算器17とレジスタ18とを備え、セレクタ部15a0~15a3から供給されたデータを加算し、積和演算結果として出力する。
【0140】
1サイクル目では、時刻t1において、データA~Dが入力データDL0~DL3として、並列演算回路3に供給される。この1サイクル目では、ワードW0が選択される。これにより、単位ローカルメモリ14aからは、4個の重みデータWDa0~WDa3として、それぞれ2ビット幅の重みデータ“a0、a1、a2、a3”が、同時に読み出される。このとき、単位ローカルメモリ14bからは、4個の重みデータWDb0~WDb3として、それぞれ2ビット幅の重みデータ“b0、b1、b2、b3”が、同時に読み出される。
【0141】
セレクタ部15a0~15a3は、供給された重みデータ“a0、a1、a2、a3”に従って、データを選択し、選択したデータを和演算器31aに出力する。その結果、和演算器31aからは、入力データA~Dと重みデータ“a0、a1、a2、a3”との間で積和演算が行われた結果A*a0+B*a1+C*a2+D*a3が出力される。同様にして、1サイクル目において、和演算器31bからは、入力データA~Dと重みデータ“b0、b1、b2、b3”との間で積和演算が行われた結果A*b0+B*b1+C*b2+D*b3が出力される。
【0142】
2サイクル目の状態が図25に示されている。2サイクル目では、入力データDL0~DL3としてデータE~Hが、並列演算回路3に供給される。また、2サイクル目では、ワードW1が選択される。これにより、単位ローカルメモリ14aからは、重みデータWDa0~WDa3として、それぞれ2ビット幅の重みデータ“a4、a5、a6、a7”が、同時に読み出される。その結果、データE~Hと重みデータ“a4、a5、a6、a7”との間で演算が行われ、和演算器31aからは、図25に示すように先の演算結果との和が出力される。
【0143】
同様に、2サイクル目では、単位ローカルメモリ14bからは、重みデータWDb0~WDb3として、それぞれ2ビット幅の重みデータ“b4、b5、b6、b7”が、同時に読み出される。その結果、入力データE~Hと重みデータ“b4、b5、b6、b7”との間で演算が行われ、和演算器31bからは、図25に示すように先の演算結果との和が出力される。
【0144】
実施の形態3によれば、演算に必要なサイクル数を2サイクルに減らすことが可能であり、演算速度の向上を図ることが可能である。
【0145】
<変形例1>
図26は、変形例1に係る並列演算回路の構成を示すブロック図である。変形例1では、単位ローカルメモリから同時に読み出される重みデータの個数が、入力データの個数と異なる場合の並列演算回路が提供される。
【0146】
図26は、図25と類似している。相違点は、入力データを伝達する信号配線群が8本(L0~L7)になっていることである。変形例1においては、8本の信号配線群L0~L7のうちの4本の信号配線群L0~L3のみを使用し、残りの4本の信号配線群L4~L7は未使用とする。4本の信号配線群L0~L3に対して、時分割的にデータA~Dと、E~Hを供給する。すなわち、時刻t1において、データA~Dを入力データDL0~DL3として、信号配線群L0~L3を介して供給し、時刻t2において、データE~Hを入力データDL0~DL3として信号配線群L0~L3を介して供給する。これにより、単位ローカルメモリから同時に読み出される重みデータの個数が、入力データの個数と異なった非対称の場合も、演算速度の高速化を図ることが可能である。
【0147】
(実施の形態4)
図27は、実施の形態4に係る並列演算回路の構成を示すブロック図である。実施の形態4に係る並列演算回路は、狭ビット幅で演算を行う演算部と従来の並列演算部とを備えており、この2つの演算部が排他的に利用される。ここでは、狭ビット幅で演算を行う演算部として、図21に示した並列演算回路を用いる場合を例にして説明するが、勿論これに限定されるものではない。
【0148】
図27において、単位ローカルメモリ14a、単位セレクタ(単位積演算器)15aおよび和演算器31aは、図21に示したものと同じである。
【0149】
図27において、mulは、8ビットの並列演算器(並列演算部)を示している。図27では、並列演算部mulには、単位ローカルメモリ14aの各メモリ列14a0~14a7のそれぞれから1ビットのデータが束ねて供給されている。並列演算部mulは、入力データDL0における8ビットと、単位ローカルメモリ14aからの8ビットデータとの間で、並列的に積演算を実行し、その演算結果を和演算器31aに供給する。
【0150】
特に制限されないが、和演算器31aは、単位セレクタ15aからの積演算結果または並列演算部mulからの積演算結果を選択し、累積して出力する。
【0151】
すなわち、実施の形態4に係る並列演算回路は、従来の並列演算部mulを用いるモードと狭ビット幅の演算部を用いるモードとを備え、この2つのモードを排他的に利用するように選択することが可能となっている。
【0152】
図27では、単位ローカルメモリ14aから出力される8ビット幅を、1ビット幅の8個(n個)のデータに分割する例が示されているが、これに限定されるものではない。例えば、8ビット幅をn/2個(=4個)に分割し、2ビット幅の4個のデータを用いるようにしてもよい。なお、図27では、単位セレクタ15aおよび和演算器31aが比較的大きく描かれているが、実際には比較的専有面積の小さい回路で構成することが可能である。
【0153】
付記
本明細書には、特許請求の範囲に記載した発明だけでなく、種々の発明が開示されている。以下、特許請求の範囲に記載されていない代表的な発明を列記する。
A. それぞれ多値を表す複数の第1データを、並列的に出力するメモリと、
前記複数の第1データに対応し、互いに異なる入力データが供給され、対応する第1データと入力データの間で積演算を行う積演算部と、
前記積演算部から出力されている複数のデータを加算し、累積し、積和演算結果を出力する演算器と、
を備える、半導体装置。
A1. 前記Aに記載の積演算部が、第一データに従って入力データ、所定の固定データ、入力データを加工したデータの中からいずれかをセレクタにて選択する半導体装置。
A2. 前記Aに記載の半導体装置において、
前記セレクタ部には、入力データに対して所定の演算を実行することにより生成されたデータが、さらに供給される、半導体装置。
A3. 前記A2に記載の半導体装置において、
前記第1データは、2値を表す1ビットのデータである、半導体装置。
A4. 前記A2に記載の半導体装置において、
前記第1データは、3値を表す2ビットのデータである、半導体装置。
B. 複数個の演算器に対し、それぞれ個別の値を毎サイクル供給することが可能なメモリと、前記個別の値とは異なる個別の値を演算器毎に毎サイクル供給することができる外部入力とを備え、前記複数個の演算器からの出力を1つにまとめる機構を備える構成を1ユニットとし、前記ユニットを複数個並列に並べ、全ユニットに対し、前記外部入力のデータ供給が共通である並列演算回路。
B1. 前記Bに記載の並列演算回路において、
前記メモリから前記演算器に供給される各値が1ないし2ビット幅である、並列演算回路。
B2. 前記Bに記載の並列演算回路において、
前記演算器が乗算に相当する演算を行い、前記1つにまとめる機構が、累積機構である、並列演算回路。
C. 1ユニット内において、メモリからのnビット幅の値に対し、これを1ビット幅にn分割し、このn個を用いてn並列でユニット内演算する並列演算回路。
C1. 1ユニット内において、メモリからのnビット幅の値を用いて1並列で演算することと、前記Cのいずれかを選択可能な並列演算回路。
D. 1ユニット内において、メモリからのnビット幅の値に対し、その中のmビットを用いて、これを1ビット幅にm分割し、このm個を用いてm並列でユニット内演算することが可能な並列演算回路。
D1. 前記Dに記載の並列演算回路において、
n>m、mがnの約数である、並列演算回路。
D2. 1ユニット内において、メモリからのnビット幅の値を用いて1並列で演算することと、前記Cのいずれかを選択可能な並列演算回路。
E. 1ユニット内において、メモリからのnビット幅の値に対し、これを2ビット幅にn/2分割し、このn/2個を用いてn/2並列でユニット内演算する並列演算回路。
E1. 1ユニット内において、メモリからのnビット幅の値を用いて1並列で演算することと、前記Eのいずれかを選択可能な並列演算回路。
F. 1ユニット内において、メモリからのnビット幅の値に対し、その中のmビットを用いて、これを2ビット幅にm/2分割し、このm/2個を用いてm/2並列でユニット内演算することが可能な並列演算回路。
F1. 前記Fに記載の並列演算回路において、
n>m、mがnの約数である、並列演算回路。
F2. 1ユニット内において、メモリからのnビット幅の値を用いて1並列で演算することと、前記Fのいずれかを選択可能な並列演算回路。
【0154】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、重みデータはローカルメモリから並列演算回路に供給される例を示したが、これに限定されるものではない。同様に、入力データの供給元も限定されるものではない。
【符号の説明】
【0155】
1 半導体装置
2 アレイ型プロセッサ
3、3_0~3_8 並列演算回路
3a~3m 積和演算器
14 ローカルメモリ
14a~14m 単位ローカルメモリ
15 セレクタ
15a~15m 単位セレクタ
19 ラッチ回路
ADa~ADm 付加情報
DL0~DL7 入力データ
WDa~WDm 重みデータ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29