(57)【要約】  【課題】  消費電力が低減された畳込み演算装置を提供する。  【解決手段】  畳込み演算装置は、二次元的に配置されデータを夫々記憶する複数の記憶素子（４２）を有し、前記複数の記憶素子間で前記データを循環的にシフト可能であり、所定の領域に入力ウィンドウ（４４）が設定されており、当該入力ウィンドウ内の前記記憶素子に記憶されたデータを入力データ（ｄ）として選択する、二次元循環シフトレジスタ部（４０）と、前記レジスタ部から入力された前記入力データと所定のフィルタをなすウェイトデータとを積和演算して出力データ（Ｙ）を生成する積和演算部（５０）と、を具備する。【選択図】  図３
2020161054.tif 000002
【特許請求の範囲】
【請求項１】
二次元的に配置されデータを夫々記憶する複数の記憶素子（４２）を有し、前記複数の記憶素子間で前記データを循環的にシフト可能であり、所定の領域に入力ウィンドウ（４４，４４ａ〜４４ｄ）が設定されており、当該入力ウィンドウ内の前記記憶素子に記憶されたデータを入力データ（ｄ，ｄａ〜ｄｄ）として選択する、二次元循環シフトレジスタ部（４０）と、
前記レジスタ部から入力された前記入力データと所定のフィルタをなすウェイトデータとを積和演算して出力データ（Ｙ，Ｙａ〜Ｙｄ）を生成する積和演算部（５０，５０ａ〜５０ｄ）と、
を具備する畳込み演算装置。
【請求項２】
前記積和演算部は、ウィノグラードアルゴリズムに基づく積和演算を行い、
前記フィルタは、３行３列のフィルタであり、
前記入力データは、５行５列の入力データであり、
前記出力データは、３行３列の出力データである、
請求項１に記載の畳込み演算装置。
【請求項３】
前記レジスタ部は、複数の前記入力ウィンドウを有し、複数の前記入力データを選択可能であり、
前記畳込み演算装置は、前記レジスタ部から前記複数の入力データが夫々入力される複数の前記積和演算器をさらに具備する、
請求項１に記載の畳込み演算装置。
【請求項４】
前記レジスタ部は、前記入力ウィンドウの領域又は前記シフトのシフト量を切替可能である、
請求項１に記載の畳込み演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、畳込み演算を行う畳込み演算装置に関する。
【背景技術】
【０００２】
畳込み演算では、入力データに、所定のフィルタをなすウェイトデータを畳込むことで、出力データを生成する。従来の畳込み装置装置では、畳込み演算を行列演算に変換することで、畳込み演算を処理している（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第９７４７５４８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の畳込み演算装置では、畳込み演算を行列演算に変換しているため、行列演算が可能なように入力データを変換する必要があり、また、元々の入力データを重複させた変換データを取り扱う必要がある。このため、ハードウェアやデータ処理が増大し、消費電力が増大してしまう。
【０００５】
本発明は上記課題に鑑みてなされたものであり、その目的は、消費電力が低減された畳込み演算装置を提供することにある。
【課題を解決するための手段】
【０００６】
本発明は上記課題を解決するために以下の技術的手段を採用する。特許請求の範囲及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施の形態に記載の具体的手段との対応関係を示す一例であって、本発明の技術的範囲を限定するものではない。
【０００７】
本発明の一実施態様は、二次元的に配置されデータを夫々記憶する複数の記憶素子（４２）を有し、前記複数の記憶素子間で前記データを循環的にシフト可能であり、所定の領域に入力ウィンドウ（４４，４４ａ〜４４ｄ）が設定されており、当該入力ウィンドウ内の前記記憶素子に記憶されたデータを入力データとして選択する、二次元循環シフトレジスタ部（４０）と、前記レジスタ部から入力された前記入力データと所定のフィルタをなすウェイトデータとを積和演算して出力データを生成する積和演算部（５０，５０ａ〜５０ｄ）と、を具備する畳込み演算装置である。
【発明の効果】
【０００８】
本発明では、畳込み演算装置における消費電力が低減されている。
【図面の簡単な説明】
【０００９】
【図１】本発明の第１実施形態のＤＦＰシステムを示すブロック図。
【図２】本発明の第１実施形態のＤＦＰを示すブロック図。
【図３】本発明の第１実施形態の畳込み演算回路を示すブロック図。
【図４】本発明の第１実施形態の記憶素子を示すブロック図。
【図５】本発明の第１実施形態の積和演算器を示すブロック図。
【図６】本発明の第１実施形態のシフトによる入力データの選択を示す模式図。
【図７】本発明の第１実施形態の入力データ範囲の移動を示す概念図。
【図８】本発明の第１実施形態の一連のシフト動作を示す表図。
【図９】本発明の第２実施形態の畳込み演算回路を示すブロック図。
【図１０】本発明の第２実施形態の一連のシフト動作を示す表図。
【図１１】本発明の第３実施形態の畳込み演算回路を示すブロック図。
【図１２】本発明の第３実施形態の積和演算で用いられる定数行列を示す表図。
【図１３】本発明の第３実施形態の入力データ範囲の移動を示す概念図。
【発明を実施するための形態】
【００１０】
［第１実施形態］
図１乃至図８を参照して、本発明の第１実施形態について説明する。
畳込み演算回路については、自動運転の画像認識や物体検知に用いられるデータフロープロセッサ（Ｄａｔａ  Ｆｌｏｗ  Ｐｒｏｃｅｓｓｏｒ、以下「ＤＦＰ」という。）等に用いられるものである。
【００１１】
本実施形態の畳込み演算回路では、シフトレジスタ４０において、二次元的に配置された多数の記憶素子４２にデータ要素が記憶され、所定の領域に設定された入力ウィンドウ４４内の記憶素子４２のデータ要素を入力データｄとして選択する。積和演算器５０において、シフトレジスタ４０から入力された入力データｄと、所定のフィルタをなすウェイトデータｇとを積和演算して、出力データＹを生成する。ここで、シフトレジスタ４０において総データ要素を順次シフトさせて、入力ウィンドウ４４内のデータ要素を順次入力データｄとして選択し、当該入力データｄから順次生成された出力データＹから総出力データＺを生成する。
【００１２】
図１を参照して、ＤＦＰシステム１０について概説する。
本実施形態のＤＦＰシステム１０では、ＤＦＰ１１については、ホストＣＰＵ１２の重い演算負荷に対処する個別のマスタとして機能し、プログラム及び独自の命令フェッチが可能であり、イベントハンドラ１３が生成した割込み処理をサポートする。ＤＦＰ１１、ホストＣＰＵ１２、ＲＯＭ１４、ＲＡＭ１５及び外部インターフェイス１６は、システムバス１７を介して、データの送受信を行う。
【００１３】
図２を参照して、ＤＦＰ１１について概説する。
ＤＦＰ１１については、多量のスレッドに対して、ハードウェアによる動的レジスタ配置及びスレッド・スケジューリングにより、異なる命令ストリームに対してであっても複数のスレッドを並列実行することを可能とする。なお、このような多量のスレッドについては、コンパイラによって、プログラムコードを自動ベクトル化し、プログラムのタスク並列性及びグラフ並列性を保持するグラフ構造を抽出することにより、生成することが可能である。
【００１４】
ＤＦＰ１１において、複数の実行コア２２は、夫々、独立してスケジューリング可能な多数のパイプラインを備え、４つのプロセッシングエレメントＰＥ＃０、ＰＥ＃１、ＰＥ＃２、ＰＥ＃３間でリソースを共有する。スレッドスケジューラ２４は、多数のスレッドを跨いだスケジューリングを実現し、多数のスレッドを同時実行する。コマンドユニット２６は、コンフィグ・インターフェイス２８との間でデータを送受信し、コマンド・バッファとして機能する。メモリサブシステム３０は、アービタ３２、Ｌ１キャッシュ３４ａ及びＬ２キャッシュ３４ｂによって形成され、システムバス・インターフェイス３６及びＲＯＭインターフェイス３８との間でデータを送受信する。
【００１５】
本実施形態では、畳込み演算回路については、ＤＦＰ１１が備える複数の実行コア２２の内の１つの実行コア２２として用いられる。
【００１６】
図３を参照して、畳込み演算回路について説明する。
畳込み演算回路は、二次元循環シフトレジスタ４０及び積和演算器５０によって形成されている。
【００１７】
シフトレジスタ４０では、多数の記憶素子４２が二次元的に配置されている。本実施形態では、第０行から第７行かつ第０列から第７列の８行８列の６４個の記憶素子４２が用いられている。
【００１８】
各記憶素子４２には、データ要素が記憶される。各記憶素子４２は当該記憶素子４２の上下左右に配置された記憶素子４２と接続されており、各記憶素子４２のデータ要素は上下左右に配置された記憶素子４２にシフト可能である。シフトレジスタ４０については、二次元循環型であり、最上行、最下行、最左列、最右列の記憶素子４２の上、下、左、右に、夫々、最下行、最上行、最右列、最左列の記憶素子４２が配置されているものとする。ここで、各記憶素子４２がｎ個隣の記憶素子４２に接続され、各記憶素子４２とｎ個隣の記憶素子４２との間でデータ要素がシフトされる場合に、シフト量がｎであるとする。本実施形態では、各記憶素子４２は上下左右に隣接した記憶素子４２とのみ接続されており、各記憶素子４２のデータ要素は上下左右に隣接した記憶素子４２にのみシフト可能であるため、シフト量は１となる。
【００１９】
シフトレジスタ４０には、メモリインターフェース６０が接続されている。メモリインターフェース６０からシフトレジスタ４０の最下行の各記憶素子４２にデータ要素が順次入力される。最下行の各記憶素子４２に入力されたデータ要素を順次上方向にシフトさせていくことで、全ての記憶素子４２にデータ要素が記憶される。
【００２０】
シフトレジスタ４０において、所定の領域に入力ウィンドウ４４が設定されている。入力ウィンドウ４４内の記憶素子４２に記憶されているデータ要素が入力データｄとして選択され、積和演算器５０へと出力される。本実施形態では、第０行から第２行かつ第０列から第２列の３行３列の記憶素子４２を包含する領域に入力ウィンドウ４４が設定されている。そして、８行８列の総データ要素から３行３列の入力データｄが選択され、３行３列の入力データｄが積和演算器５０に出力される。
【００２１】
図４を参照して、シフトレジスタ４０の記憶素子４２について詳細に説明する。
記憶素子４２は、マルチプレクサ４６（ＭＵＸ）及びフリップフロップ４８（ＦＦ）から形成されている。本実施形態では、マルチプレクサ４６には、上下左右に隣接した記憶素子４２のフリップフロップ４８からデータ要素が入力される。マルチプレクサ４６は、入力された４個のデータ要素の内から１個のデータ要素を選択して、当該記憶素子４２のフリップフロップ４８に出力する。フリップフロップ４８は、マルチプレクサ４６から入力されたデータ要素を保持する。
【００２２】
図５を参照して、積和演算器５０について説明する。
積和演算器５０では、入力データｄと所定のフィルタなすウェイトデータｗとの積和演算を行い、出力データＹを生成する。即ち、以下の式（１）で示されるように、入力データｄとウェイトデータｇとのフロベニウス積を出力データＹとする。ここで、ｄｑｒは入力データｄをなす入力データ要素、ｇｑｒはウェイトデータｇをなすウェイトデータ要素である。
【数１】
2020161054.tif 000003
【００２３】
本実施形態では、３行３列の入力データｄ（ｄｑｒ：ｑ＝０〜２；ｒ＝０〜２）と３行３列のウェイトデータｇ（ｇｑｒ：ｑ＝０〜２；ｒ＝０〜２）とから１行１列の出力データＹを生成する。このため、積和演算における乗算回数は９回となる。
【００２４】
積和演算器５０は、入力レジスタ５２、ウェイトレジスタ５４、乗算器５６及び加算器ツリー５８から形成されている。入力レジスタ５２は、シフトレジスタ４０から入力された入力データｄをなす入力データ要素ｄｑｒを保持する。ウェイトレジスタ５４は、図示しないインターフェイスから入力されたウェイトデータｇをなすウェイトデータ要素ｇｑｒを保持する。本実施形態では、入力レジスタ５２及びウェイトレジスタ５４は、夫々、９個の記憶領域を備える。各乗算器５６は、入力レジスタ５２の各入力データ要素ｄｑｒと、ウェイトレジスタ５４の各ウェイトデータ要素ｇｑｒとの乗算を行い、加算器ツリー５８は、各乗算器５６で算出された全乗算結果を加算する。本実施形態では、９個の乗算器５６が用いられ、加算器ツリー５８により９個の乗算結果が加算される。
【００２５】
図６乃至図８を参照して、本実施形態の畳込み演算処理について説明する。
【００２６】
図６に示されるように、シフトレジスタ４０において、総データ要素を順次シフトさせ、入力ウィンドウ４４内のデータ要素を順次入力データｄとして選択する。本実施形態では、８行８列の総データ要素ｉｊ（ｉ＝０〜７；ｊ＝０〜７）を順次シフトさせ、第０行から第２行かつ第０列から第２列の３行３列の入力ウィンドウ４４内のデータ要素を、順次入力データｄとして選択する。
【００２７】
図７に示されるように、シフトレジスタ４０におけるシフトによる入力データｄの選択については、総データ要素における入力データ範囲Ｄの移動に対応する。ここで、シフトレジスタ４０における上下左右方向へのシフトについては、総データ要素における入力データ範囲Ｄの逆方向への移動に対応する。以下では、最上左を基準として、下方向及び右方向に夫々ｋ及びｌだけ変位した入力データ範囲Ｄの入力データをｄｋｌとし、当該入力データｄｋｌから生成される出力データをＹｋｌとする。本実施形態では、８行８列の総データ要素ｉｊ（ｉ＝０〜７；ｊ＝０〜７）において、３行３列の入力データ範囲Ｄが下方向及び右方向に夫々ｋ及びｌ（ｋ＝０〜５；ｌ＝０〜５）だけ変位することになる。
【００２８】
図８に示されるように、一連のシフト動作では、入力データ選択から次の入力データ選択までの１サイクルで、シフト量１及びシフト回数１のシフト動作がなされ、３５回のサイクルで３５回のシフトが実行される。当該３５回のサイクルにより、サイクル開始前も含め、３６個の３行３列の入力データｄｋｌが選択され、当該３６個の３行３列の入力データｄｋｌから３６個の１行１列の出力データＹｋｌが生成される。そして、３６個の出力データＹｋｌを要素ｚｋｌとする６行６列の総出力データＺが生成される。
【００２９】
本実施形態では、畳込み演算におけるシフト回数は３５回となる。また、総乗算回数は、積和演算における乗算回数である９回と、入力データの選択回数である３６回とを乗じて、３２４回となる。
【００３０】
本実施形態の畳込み演算回路については、以下の効果を奏する。
本実施形態の畳込み演算回路では、畳込み演算を行列演算に変換しているわけではないため、行列演算が可能なように入力データを変換する必要はなく、また、元々の入力データを重複させた変換データを取り扱う必要もない。このため、ハードウェアやデータ処理の増大が回避されており、畳込み演算装置における消費電力が低減されている。
【００３１】
［第１実施形態の第１変形例］
以下、本発明の第１実施形態の第１変形例について説明する。
本変形例の畳込み演算回路では、シフトレジスタ４０において、複数の入力ウィンドウ領域を互いに切替可能としたものである。即ち、複数の入力ウィンドウ領域に包含される全記憶素子４２がマルチプレクサに接続されており、マルチプレクサにおいて記憶素子４２から入力される入力データ要素を選択することで、複数の入力ウィンドウ領域が互いに切り替えられるようになっている。
【００３２】
例えば、畳込み演算で３行３列、４行４列、５行５列のフィルタが用いられる場合に、当該各フィルタに対応して、３行３列、４行４列、５行５列の記憶素子４２を夫々包含する第０乃至第２の入力ウィンドウ領域を互いに切替可能とする。このような第０乃至第２の入力ウィンドウ領域として、例えば、（０）第０行から第２行かつ第０列から第２列の３行３列の記憶素子４２を包含する第０の入力ウィンドウ領域、（１）第０行から第３行かつ第０列から第３列の４行４列の記憶素子４２を包含する第１の入力ウィンドウ領域、（２）第０行から第４行かつ第０列から第４列の５行５列の記憶素子４２を包含する第２の入力ウィンドウ領域を用いることが可能である。
【００３３】
本変形例の畳込み演算回路については、シフトレジスタ４０において、複数の入力ウィンドウ領域が互いに切替可能であるため、様々な種類の畳込み演算に対応可能であり、汎用性の高い畳込み演算回路が実現されている。
【００３４】
［第１実施形態の第２変形例］
以下、本発明の第１実施形態の第２変形例について説明する。
本変形例の畳込み演算回路については、シフトレジスタ４０において、シフト量を切替可能としたものである。即ち、各記憶素子４２のマルチプレクサ４６に、上下左右の方向毎に、ｓ１個隣、ｓ２個隣、…、ｓｎ個隣（ｎ≧２）の記憶素子４２のフリップフロップ４８が接続されている。そして、各記憶素子４２のマルチプレクサ４６において、ｓ１個隣、ｓ２個隣、…、ｓｎ個隣（ｎ≧２）のいずれの記憶素子４２のフリップフロップ４８から入力されたデータ要素を選択するかを切り替えることにより、シフト量が切り替えられる。
【００３５】
例えば、シフトレジスタ４０において、各記憶素子４２のマルチプレクサ４６に、上下左右の方向毎に、隣接する記憶素子４２のフリップフロップ４８に加えて、２個隣の記憶素子４２のフリップフロップ４８が接続されており、各記憶素子４２のマルチプレクサ４６において、隣接する記憶素子４２と、２個隣の記憶素子４２とのいずれの記憶素子４２から入力されたデータ要素を選択するかを切り替えることにより、シフト量が１と２との間で切り替えられる。
【００３６】
本変形例の畳込み演算回路では、シフトレジスタ４０において、シフト量が切替可能であるため、様々な種類の畳込み演算に対応可能であり、汎用性の高い畳込み演算回路が実現されている。
【００３７】
さらに、第１実施形態の第１変形例と第２変形例とを組み合わせて、シフトレジスタ４０において、入力データ領域及びシフト量を切替可能とすることで、さらに汎用性の高い畳込み演算回路を実現することが可能である。
【００３８】
［第２実施形態］
図９及び図１０を参照して、本発明の第２実施形態について説明する。
本実施形態の畳込み演算回路については、シフトレジスタ４０において、複数の入力ウィンドウ４４ａ−４４ｄを設定したものである。
なお、図９では、図の簡略化のため、最上行と最下行との各記憶素子４２間、並びに、最左列と最右列との各記憶素子４２間について、信号線の図示を省略している。
【００３９】
図９に示されるように、本実施形態のシフトレジスタ４０では、第０乃至第３の入力ウィンドウ４４ａ−４４ｄが設定されている。第０乃至第３の入力ウィンドウ４４ａ−４４ｄとして、（０）第０行から第２行かつ第０列から第２列の３行３列の記憶素子４２を包含する第０の入力ウィンドウ４４ａ、（１）第０行から第２行かつ第３列から第５列の３行３列の記憶素子４２を包含する第１の入力ウィンドウ４４ｂ、（２）第３行から第５行かつ第０列から第２列の３行３列の記憶素子４２を包含する第２の入力ウィンドウ４４ｃ、（４）第３行から第５行かつ第３列から第５列の３行３列の記憶素子４２を包含する第３の入力ウィンドウ４４ｄが用いられる。第０乃至第３の入力ウィンドウ４４内の記憶素子４２からの入力データｄａ〜ｄｄは夫々第０乃至第３の積和演算器５０ａ〜５０ｄに入力され、第０乃至第３の積和演算器５０ａ〜５０ｄにおいて出力データＹａ〜Ｙｄが生成される。
【００４０】
畳込み演算処理では、シフトレジスタ４０において、一連のシフト動作を実行する。図１０に示されるように、一連のシフト動作では、入力データ選択から次の入力データ選択までの１サイクルで、シフト量１かつシフト回数１のシフト動作がなされ、８回のサイクルで８回のシフトが実行される。当該８回のサイクルにより、サイクル開始前も含め、第０乃至第３の入力ウィンドウ４４ａ〜４４ｄによって、夫々、各９個の３行３列の入力データｄｍ  ｎ、ｄｍ  ３＋ｎ、ｄ３＋ｍ  ｎ、ｄ３＋ｍ  ３＋ｎ（ｍ＝０〜２；ｎ＝０〜２）が選択され、当該各９個の３行３列の入力データｄｍ  ｎ、ｄｍ  ３＋ｎ、ｄ３＋ｍ  ｎ、ｄ３＋ｍ  ３＋ｎから各９個の１行１列の出力データＹｍ  ｎ、Ｙｍ  ３＋ｎ、Ｙ３＋ｍ  ｎ、Ｙ３＋ｍ  ３＋ｎが生成される。そして、第１実施形態と同様に、３６個の出力データＹｋｌを要素ｚｋｌとする６行６列の総出力データＺが生成される。
【００４１】
本実施形態では、畳込み演算におけるシフト回数は８回となる。また、総乗算回数は、積和演算における乗算回数である９回と、入力ウィンドウ４４ａ〜４４ｄの個数である４個と、入力データの選択回数である９回とを乗じて、３２４回となる。
【００４２】
本実施形態の畳込み演算回路については、以下の効果を奏する。
本実施形態の畳込み演算回路では、シフトレジスタ４０において複数の入力ウィンドウ４４ａ〜４４ｄを設定しているため、単一の入力ウィンドウ４４を設定する場合と比較して、少ないシフト回数で同一の出力を得ることができ、畳込み演算を高速で実行することが可能となっている。
【００４３】
［第３実施形態］
図１１乃至図１３を参照して、本発明の第３実施形態について説明する。
本実施形態の畳込み演算回路については、ウィノグラードアルゴリズムに基づく積和演算を行うものであり、３行３列のフィルタに対して、５行５列の入力データを選択し、３行３列の出力データを生成する。
なお、図１１では、図９と同様に、図の簡略化のため、最上行と最下行との各記憶素子４２間、並びに、最左列と最右列との各記憶素子４２間について、信号線の図示を省略している。
【００４４】
図１１に示されるように、シフトレジスタ４０では、第０行から第４行かつ第０列から第４列の５行５列の記憶素子４２を包含する入力ウィンドウ４４が設定されている。
【００４５】
積和演算器５０では、以下の式（２）に示されるように、ウィノグラードアルゴリズムに基づき入力データｄとウェイトデータｇとの積和演算を行う。ここで、Ｇ、Ｂ、Ａは定数行列である。
【数２】
2020161054.tif 000004
【００４６】
本実施形態では、５行５列の入力データｄと３行３列のウェイトデータｇとの積和演算により、３行３列の出力データＹが生成される。定数行列Ｇ、Ｂ、Ａについては図１２に示されるとおりである。ウェイト項ＧｇＧＴについては予め算出されている。このため、本実施形態では、積和演算における乗算回数は２５回となる。また、図１２に示されるように、定数行列Ｂ及びＡについては、要素が１、２、３、４のいずれかとなっており、乗算演算をビットシフト演算と加算演算のみで実行することが可能となっている。
【００４７】
図１３を参照して、本実施形態の畳込み演算処理について説明する。
【００４８】
本実施形態では、図１３に示されるように、８行８列の総データ要素ｉｊ（ｉ＝０〜７；ｊ＝０〜７）において、５行５列の入力データ範囲Ｄが右方向及び下方向に夫々ｋ及びｌ（ｋ＝０，３；ｌ＝０，３）だけ変位されることになる。
【００４９】
図１３に示されるように、一連のシフト動作では、入力データ選択から次の入力データ選択までの１サイクルで、シフト量１かつシフト回数３のシフト動作がなされ、３回のサイクルで９回のシフトが実行される。当該３回のサイクルにより、サイクル開始前も含め、４個の５行５列の入力データｄｋｌが選択され、当該４個の５行５列の入力データｄｋｌから４個の３行３列の出力データＹｋｌが生成される。そして、各３行３列の出力データＹｋｌの出力データ要素ｙｋｌｏｐ（ｏ＝０〜２；ｐ＝０〜２）を要素ｚｋ＋ｏ  ｌ＋ｐとする６行６列の総出力データＺが生成される。
【００５０】
本実施形態では、畳込み演算におけるシフト回数は９回となる。また、総乗算回数は、積和演算における乗算回数である２５回と、入力データの選択回数である４回とを乗じて、１００回となる。
【００５１】
本実施形態の畳込み演算回路については、以下の効果を奏する。
本実施形態の畳込み演算回路では、ウィノグラードアルゴリズムに基づく積和演算を行うようにすることで、乗算回数及びシフト回数を大幅に削減することが可能である。また、３行３列のフィルタに対して、５行５列の入力データを選択し、３行３列の出力データを生成するようにすることで、乗算演算をビットシフト演算と加算演算のみで実行することが可能である。このため、畳込み演算を充分に高速かつ低消費電力で実行することが可能となっている。
【００５２】
［第３実施形態の第１変形例］
以下、第３実施形態の第１変形例について説明する。
本変形例の畳込み演算回路については、第３実施形態のシフトレジスタ４０において、シフト量を３としたものである。第１実施形態で説明したように、各記憶素子４２を３個隣の記憶素子４２に接続し、各記憶素子４２と３個隣の記憶素子４２との間でデータ要素をシフトさせることで、シフト量３のシフトを実現可能である。当該シフトレジスタ４０では、入力データ選択から次の入力データ選択までの１サイクルで、シフト量３かつシフト回数１のシフト動作がなされ、３回のサイクルで３回のシフトが実行される。このため、本変形例のシフト回数は３回である。
【００５３】
このように、本変形例では、畳込み演算におけるシフト回数がさらに削減されており、畳込み演算をさらに高速かつ低消費電力で実行することが可能となっている。
【００５４】
［第３実施形態の第２変形例］
以下、第３実施形態の第２変形例について説明する。
本変形例の畳込み演算回路については、第３実施形態のシフトレジスタ４０において、シフト動作に代えて、第０乃至第３の入力ウィンドウ領域を互いに切替可能としたものである。即ち、第０乃至第３の入力ウィンドウ領域として、（０）第０行から第４行かつ第０列から第４列の５行５列の記憶素子４２を包含する第０の入力ウィンドウ領域、（１）第０行から第４行かつ第３列から第７列の５行５列の記憶素子４２を包含する第１の入力ウィンドウ領域、（２）第３行から第７行かつ第０列から第４列の５行５列の記憶素子４２を包含する第２の入力ウィンドウ領域、（３）第３行から第７行かつ第３列から第７列の３行３列の記憶素子４２を包含する第３の入力ウィンドウ領域が用いられる。そして、第０乃至第３の入力ウィンドウ領域を順次切り替えて入力データを選択し、当該入力データから順次出力データを生成して、出力データから総出力データを生成する。
【００５５】
このように、本変形例では、畳込み演算において、入力ウィンドウ領域の切替えを行うことで、シフト動作を不要としており、畳込み演算をさらに高速かつ低消費電力で実行することが可能となっている。
【符号の説明】
【００５６】
４０…シフトレジスタ  ４２…記憶素子
４４，４４ａ〜４４ｄ…入力ウィンドウ  ５０，５０ａ〜５０ｄ…積和演算器
ｄ，ｄａ〜ｄｄ…入力データ  Ｙ，Ｙａ〜Ｙｄ…出力データ
【図１】
2020161054.tif 000005
【図２】
2020161054.tif 000006
【図３】
2020161054.tif 000007
【図４】
2020161054.tif 000008
【図５】
2020161054.tif 000009
【図６】
2020161054.tif 000010
【図７】
2020161054.tif 000011
【図８】
2020161054.tif 000012
【図９】
2020161054.tif 000013
【図１０】
2020161054.tif 000014
【図１１】
2020161054.tif 000015
【図１２】
2020161054.tif 000016
【図１３】
2020161054.tif 000017