(57)【要約】【課題】効率的に演算を行うプロセッサを提供する。【解決手段】  複数のプロセッサコアと、複数のプロセッサコアからアクセスされる内部メモリとを有し、複数のプロセッサコアのいずれかが有する演算器は、第１ステージに設けられた複数の第１のレジスタと、複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有し、第１の加算器と第２の加算器は、複数の第１のレジスタの複数の出力を互いに排他的に選択して入力する、加算回路を有する、プロセッサ。【選択図】図１３
2018120547.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有し、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、前記第１、第２、第３のレジスタはクロックに同期して入力をラッチする、加算回路を有する、プロセッサ。
【請求項２】
前記演算器は、
入力ステージに設けられ、複数の第１の入力データと複数の第２の入力データをそれぞれラッチする複数対の入力レジスタと、
前記複数対の入力レジスタそれぞれの対の前記第１の入力データと第２の入力データとをそれぞれ乗算し、乗算値が前記複数の第１のレジスタそれぞれにラッチされる複数の乗算器とを有し、
前記乗算器と加算回路とにより前記複数の第１の入力データと複数の第２の入力データそれぞれの乗算値を加算する積和回路を構成する、請求項１に記載のプロセッサ。
【請求項３】
前記演算器は、
前記加算回路の出力を前記クロックに同期して累積するアキュムレータ回路を有する、請求項１または２に記載のプロセッサ。
【請求項４】
前記演算器は、
前記第1の加算器と前記第２の加算器の入力に設けられたマスク回路に、前記選択のための第１の制御値を設定する制御回路を有し、
１組の演算対象データの数が前記複数対の入力レジスタの数より多い場合、前記１組の演算対象データが分割して複数のサイクルで前記複数対の入力レジスタに入力され、
前記制御回路は、前記演算対象データに含まれ第１のサイクルで入力された前記第１の入力データと第２の入力データの第１の乗算値を前記第１の加算器に入力し、前記演算対象データに含まれ前記第１のサイクルの次の第２のサイクルで入力された前記第１の入力データと第２の入力データの第２の乗算値を前記第２の加算器に入力する前記第１の制御値を、前記マスク回路に設定する、請求項２に記載のプロセッサ。
【請求項５】
前記演算器は、
前記複数の乗算器と前記複数の第１のレジスタとのそれぞれの間に、前記複数の乗算器の出力と前記複数の第１のレジスタの出力とをそれぞれ加算する複数の第４の加算器を有し、
前記第４の加算器の入力に、前記複数の第１のレジスタの複数の出力を入力または非入力の一方に設定可能なマスク回路を有する、請求項２に記載のプロセッサ。
【請求項６】
前記複数の第１の入力データは、画像データの近傍マトリクスの複数の画素データであり、
前記複数の第２の入力データは、前記近傍マトリクスに対応する係数マトリクスの複数の係数データであり、
前記積和回路は、前記近傍マトリクスの複数の画素データと、前記係数マトリクスの複数の係数データとの積和値を算出する、請求項２に記載のプロセッサ。
【請求項７】
プロセッサと、
前記プロセッサがアクセスするメインメモリとを有し、
前記プロセッサは、
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有し、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、前記第１、第２、第３のレジスタはクロックに同期して入力をラッチする、加算回路を有する、情報処理装置。
【請求項８】
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有する加算回路を有するプロセッサの動作方法であって、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、
前記第１、第２、第３のレジスタはクロックに同期して入力をラッチし、
第１のサイクルで入力された単数または複数の第１の入力データを前記第１の加算器が加算し、当該加算値を前記第２のレジスタがラッチし、
前記第１のサイクルの次の第２のサイクルで入力された単数または複数の第２の入力データを前記第２の加算器が加算し、
通常加算回路の出力と、前記追越し加算回路の出力とを前記第３の加算器が加算し、当該加算値を前記第３のレジスタがラッチする、プロセッサの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，プロセッサ、情報処理装置及びプロセッサの動作方法に関する。
【背景技術】
【０００２】
ディープラーニング（以下DL1:Deep Learning）は、情報処理装置内のプロセッサの演算処理により実行される。DLは、階層の深いニューラルネットワーク（以下DNN：Deep Neural Network）を利用したアルゴリズムの総称である。そして、DNNの中でも良く利用されるのが、コンボリュージョン・ニューラルネットワーク（CNN：Convolution Neural Network）である。CNNは、例えば画像データの特徴を判定するDNNとして広く利用される。
【０００３】
画像データの特徴を判定するCNNは、画像データを入力しフィルタを利用した畳込み演算を行い画像データの特徴（例えばエッジの特徴など）を検出する。そして、CNNの畳込み演算は、例えばプロセッサにより演算される。以下の特許文献１にはメモリのデータフォーマットと演算器の実行性能について開示がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−３８６２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の畳込み演算は、係数フィルタの画像データでの位置を画像データのラスタスキャン方向に移動しながら、画像データの注目画素を中心とする近傍マトリクスの画素データと係数フィルタの係数（重み）との積和演算を繰り返す。係数フィルタのサイズは、一般に、奇数の二乗（８の倍数に１加算した値）である。例えば、３×３、５×５、７×７、９×９、１１×１１などである。
【０００６】
一方、畳込み演算は、積和演算の繰り返しであり、複数の積和演算器で並列処理することが望ましい。また、DNNでは複数チャネルの画像データ（複数プレーンの画素データ）に対して畳込み演算を行う場合があり、その場合も複数の積和演算器で並列処理することが望ましい。
【０００７】
ところが、プロセッサは一般に２のべき乗個の演算器を有する。そのため、例えば１６個の演算器に、３×３の係数フィルタの場合の９個の係数や画素データを入力すると、一部の演算器が積和演算を処理できない場合があり、その結果、１６個の演算器を効率的に動作させることができない。
【０００８】
そのため、画像データを転置して、複数組の画素データとその係数を並列に１６個の演算器に入力することが行われる。しかし、その場合は、画像データを転置する処理が必要になり、転置処理の間演算器が動作を停止する必要があるので、やはり１６個の演算器を効率的に動作させることができない。
【０００９】
そこで、一つの実施の形態の目的は，効率的に演算を行うプロセッサ、情報処理装置及びプロセッサの動作方法を提供することにある。
【課題を解決するための手段】
【００１０】
一つの実施の形態は，
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有し、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、前記第１、第２、第３のレジスタはクロックに同期して入力をラッチする、加算回路を有する、プロセッサである。
【発明の効果】
【００１１】
第１の側面によれば，効率的に演算を行うことができる。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態におけるディープラーニングを実行する情報処理装置（ディープラーニングサーバ）の構成を示す図である。
【図２】ディープラーニング演算プログラムの概略的な処理を示すフローチャート図である。
【図３】グラフィックプロセッサ（GPU）１１の構成とGPU内のコアCOREの構成とを示す図である。
【図４】DNNの一例を示す図である。
【図５】畳込み演算を説明する図である。
【図６】メモリに記憶されるデータ構造の配列（AOS：Array Of Structure）を１６個の演算器に入力する例を示す図である。
【図７】メモリに記憶されるデータ構造の配列であるAOSを転置したストラクチャオブアレイ（SOA：Structure Of Array）のデータを4個の演算器に入力する例を示す図である。
【図８】本実施の形態における演算器の入力データの構成を図６，図７の例と対比して示す図である。
【図９】本実施の形態におけるグラフィックプロセッサGPU（DL装置）の構成を示す図である。
【図１０】フォーマット変換器FMT_Cの構成を示す図である。
【図１１】積和演算器に入力する入力用の近傍マトリクスの画像データの生成手順の第1例を示す図である。
【図１２】積和演算器に入力する入力用の近傍マトリクスの画像データの生成手順の第1例を示す図である。
【図１３】本実施の形態の追越しルート付積和演算器の構成を示す図である。
【図１４】３×３フィルタの場合の図１３の積和演算器の動作を示すシーケンス図である。
【図１５】３×３フィルタの場合のマスクMb0-7とMc0-7の選択、非選択状態を示すシーケンス図である。
【図１６】５×５フィルタの場合の図１３の積和演算器の動作を示すシーケンス図である。
【図１７】1組の入力画素データが１１画素の場合の積和演算器の動作を示すシーケンス図である。
【図１８】３２画素データまで入力可能な積和演算器の構成を示す図である。
【図１９】図１８の加算器ADDERの構成例を示す図である。
【図２０】第２の実施の形態における追越しルート付積和演算器の構成を示す図である。
【図２１】第２の演算の場合の図２０の積和演算器を示す図である。
【図２２】AOSの画素データを生成するフォーマット変換を示す図である。
【発明を実施するための形態】
【００１３】
図１は、本実施の形態におけるディープラーニングを実行する情報処理装置（ディープラーニングサーバ）の構成を示す図である。サーバ１は、ネットワークを介してセンシング装置群３０及び端末装置３２と通信可能である。センシング装置群３０は、例えば撮像素子により画像を撮像して画像データを生成し、画像データをサーバ１に送信する。端末装置３２は、画像データの特徴の判定結果をサーバ１から受信して出力する。
【００１４】
サーバ１は、汎用プロセッサであるCPU（Central processing Unit）１０と、グラフィックプロセッサであるGPU（Graphic Processing Unit）１１とを有する。サーバ１は、さらに、DRAMなどのメインメモリ１２と、NIC（Network Interface Card）などのネットワークインターフェース１４と、ハードディスクやSSD（Solid Storage Device）などの大容量の補助メモリ２０と、それらを接続するバスBUSとを有する。
【００１５】
補助メモリ２０は、ディープラーニング演算プログラム２２と、ディープラーニングパラメータ２４などを記憶する。補助メモリ２０は、上記プログラムやパラメータに加えて、図示しないオペレーティングシステム（OS）や、各種ミドルウエアプログラムなども記憶する。プロセッサ１０及びグラフィックプロセッサ１１は、上記のプログラムやパラメータをメインメモリ１２に展開し、パラメータに基づいてプログラムを実行する。
【００１６】
図２は、ディープラーニング演算プログラムの概略的な処理を示すフローチャート図である。DL演算プログラムは、例えばDNNの演算を実行するプログラムである。プロセッサ１０，１１は、DL演算プログラムを実行して、学習モードと判定モードの処理を実行する。DLとして、画像データの特徴を判定するDNNを例にして説明する。
【００１７】
学習モードでは、プロセッサ１０、１１は、演算パラメータ（フィルタの係数（重み）等）の初期値をメインメモリ１２から読み出し、プロセッサ１１内の高速メモリSRAMに書込む（S10）。さらに、プロセッサは、センシング装置群３０から送信された画像データをメインメモリ１２から読み出し高速メモリSRAMに書込む（S11）。そして、プロセッサは、画像データをフォーマット変換して演算器入力用の近傍マトリクス画像データ（演算処理データ）を生成し（S12）、DNNの畳込み層、プーリング層、全結合層、ソフトマックス層（出力層）の演算処理を行う（S13）。この演算は、所定数の画像データについてそれぞれ行われる。演算結果は例えば画像データが数字０〜１のうちいずれかなどである。
【００１８】
更に、プロセッサ１０、１１は、演算結果と画像データの正解データである教師データとの差分が閾値以下か否か判定し（S14）、差分が閾値以下でない場合（S14のNO）、演算パラメータを差分に基づいてDNNのバックワード演算を実行し演算パラメータを更新する（S15）。そして、更新された演算パラメータで、上記の工程S11-S13を繰り返す。ここで演算結果と教師データとの差分は、例えば１０００枚の画像データについて演算した１０００個の演算結果と、１０００個の教師データそれぞれの差分の合計値などである。
【００１９】
上記の差分が閾値以下になったとき（S14のYES）、演算パラメータが最適値に設定されたと判断して、学習モードを終了する。そして、演算パラメータの最適値によって、その後の判定モードでの演算処理が行われる。
【００２０】
判定モードでは、プロセッサ１０、１１は、判定対象の画像データをメインメモリから読み出し（S16）、画像データをフォーマット変換して演算器入力用の近傍マトリクス画像データを生成し（S17）、DNNの畳込み層、プーリング層、全結合層、ソフトマックス層の演算処理を行う（S18）。プロセッサ１０，１１は、上記の判定処理を、判定対象の画像データが終了するまで繰り返す（S19）。判定結果は、端末装置３２に送信され出力される。
【００２１】
図３は、グラフィックプロセッサ（GPU）１１の構成とGPU内のコアCOREの構成とを示す図である。GPU１１は、メインメモリM_MEMにアクセス可能である。GPUは、例えば8個のプロセッサコアCOREと、それぞれのプロセッサコアCOREに対応して配置された複数の高速メモリSRAMと、内部バスI_BUSと、メインメモリM_MEMとのアクセス制御を行うメモリコントローラMCとを有する。GPUは、図３に示されていない、各コアCORE内のL1キャッシュメモリと、８つのコアCOREで共用されるL2キャッシュメモリと、種々の周辺リソース回路を有する。さらに、GPUは、内部の高速メモリSRAM間のデータ転送、メインメモリM_MEMと高速メモリSRAM間のデータ転送などを制御するダイレクトメモリアクセス制御回路DMAを有する。
【００２２】
一方、各プロセッサコアCOREは、通常のプロセッサコアと同様に、命令をメモリから取得する命令フェッチ回路FETCHと、取得した命令をデコードするデコーダDECと、デコード結果に基づいて命令を演算する複数の演算器ALU及びそのレジスタ群REGと、高速メモリSRAMにアクセスするメモリアクセス制御回路MACとを有する。
【００２３】
GPUは、例えば半導体チップで実現され、本実施の形態のDL装置である。GPUは、前述のセンシング装置群から送信された画像データを記憶するメインメモリM_MEMから画像データを読み出して、内部の高速メモリSRAMに書込む。そして、各コアCORE内の演算器ALUは、SRAMに書き込まれた画像データを入力し、DNNの各層の演算処理を実行し、DNNの出力を生成する。
【００２４】
図４は、CNNの一例を示す図である。画像データの判定処理を行うCNNは、入力データである画像データIM_Dが入力される入力層INPUT_Lと、複数組のコンボリュージョン層CNV_L及びプーリング層PL_Lと、全結合層C_Lと、ソフトマックス層（出力層）OUT_Lとを有する。
【００２５】
コンボリュージョン層CNV_Lは、画像データIM_Dを係数フィルタFLTでフィルタリングしてある特徴量を有する画像データF_IM_Dを生成する。複数の係数フィルタFLT_0-3でフィルタリングすると、それぞれの特徴量の画像データF_IM_Dが生成される。プーリング層PL_Lは、例えばコンボリュージョン層のノードの値の代表値（例えば最大値）を選択する。そして、出力層OUT_Lには、前述したように、例えば画像データ内の数字の判定結果（０〜９のいずれか）が出力される。
【００２６】
コンボリュージョン層CNV_Lは、M×Nの二次元画素マトリクスの画素データを有する画像データIM_Dの例えば３×３の近傍マトリクスの画素データと、近傍マトリクスと同じ３×３の係数フィルタFLTの係数データとをそれぞれ乗算し乗算結果を加算する積和演算を行い、近傍マトリクスの中央の注目画素の画素データF_IM_Dを生成する。このフィルタリング処理を、係数フィルタを画像データIM_Dのラスタスキャン方向にずらしながら画像データIM_Dの全ての画素に対して演算を行う。これが畳込み演算である。
【００２７】
図５は、畳込み演算を説明する図である。図５には、例えば５行５列の画像データの周囲にパディングPを追加した入力画像データIN_DATAと、３行３列の重みW0-W8を有する係数フィルタFLT0と、畳込み演算された出力画像データOUT_DATAとが示される。畳込み演算は、注目画素を中心とする近傍マトリクスの複数の画素データと係数フィルタFLT0の複数の係数（重み）W0-W8とをそれぞれ乗算し加算する積和演算を、係数フィルタFLT0を画像データのラスタスキャン方向にずらしながら繰り返す演算である。
【００２８】
近傍マトリクスの画素データがXi（但しi=0-8）、係数フィルタの係数データがWi（但しi=0-8）の場合、積和演算式は次のとおりである。
Xi = Σ（Xi * Wi）        （１）
但し、右辺のXiは入力画像IN_DATAの画素データ、Wiは係数であり、Σはi = 0-8 だけ加算することを示し、左辺のXiは積和演算値であり出力画像OUT_DATAの画素データである。
【００２９】
即ち、画像データの注目画素がX6の場合は、式（１）により積和演算SoPされた画素データX6は、次のとおりである。
X6 = X0*W0 + X1*W1 + X2*W2 + X5*W3 + X6*W4 + X7*W5 + X10*W6 + X11*W7 + X12*W8
図６は、メモリに記憶されるデータ構造の配列（AOS：Array Of Structure）を１６個の演算器に入力する例を示す図である。図６では、入力データIN_DATAは、アレイオブストラクチャ（AOS）形式である各行１６ワードの入力画像データIN_DATAと、１６ワードの係数FLT（W0-W8）を、行の順に１６個の演算器ALUに入力する例である。
【００３０】
入力画像データIN_DATAは、各行、最初の９ワードに画素データa0-a8、b0-b8、c0-c8、d0-d8を、残りの７ワードに値「０」の画素データをパッキングされている。また、係数フィルタFLTも、1行に、最初の９ワードに係数データW0-W8を、残りの７ワードに値「０」をパッキングされている。そして、それぞれ対応する列の画素データと係数データの対が、演算器ALUの１６個の入力に入力される。
【００３１】
この場合、演算器のうち９個の入力の演算器は有効な入力データについて演算を行うが、残りの7個の入力の演算器は無効な入力データであるので有効な演算を行っていない。
【００３２】
図７は、メモリに記憶されるデータ構造の配列であるAOSを転置したストラクチャオブアレイ（SOA：Structure Of Array）のデータを4個の演算器に入力する例を示す図である。入力データIN_DATAと係数フィルタFLTの係数データW0-W8は、図６と同じである。この入力データIN_DATAの列方向と行方向を転置処理により逆にした転置後データTRSP_DATAが、係数データと対で、４個の演算器ALUに入力される。
【００３３】
この場合、４個の演算器は全て有効な入力データを入力して演算を行う。したがって、無効な演算を行う演算器をなくすことができ、演算効率を高めることができる。しかしながら、４この演算器は、入力データの転置処理が完了するまで、演算処理を開始することができず、演算効率の低下を招く。
【００３４】
［第１の実施の形態］
図８は、本実施の形態における演算器の入力データの構成を図６，図７の例と対比して示す図である。図６、図７に示した入力データの構成AOS, SOAは、図８の（B）（C）に示される。図８には、演算器のへ入力されるデータは、簡単のために入力データIN_DATAだけを示し、フィルタの係数は省略している。
【００３５】
図８（B）は、図６と異なり演算器ALUの１６の入力が右側に縦方向に並べて示され、図８（C）は、図７と異なり１６個の演算器ALUが右側に縦方向に並べて示される。（B）の場合、入力データのフォーマットはAOSであるため、１６個の入力のうち７つの入力の演算器ALUが稼働していない。一方、（C）の場合、入力データのフォーマットはSOAであるため、１６個の演算器ALUはフル稼働するが、SOAへのフォーマット化のために転置処理が必要になり、演算開始まで処理のサイクル演算器の動作が停止する。
【００３６】
それに対して、図８（A）は、本実施の形態の入力データの構成と４個の演算器が示される。この場合、演算器ALUの８個の入力には９個の画素データa0-a8が８ワード幅で入力される。そのため、最初の８ワード入力には８個の画素データa0-a7が含まれ、次の８ワード入力には残りの画素データa8が、次の9個の画素データの一部b0-b6と共に含まれる。
【００３７】
そこで、本実施の形態における演算器ALUは、入力数を超える個数の入力データを複数のサイクルで入力し、最初のサイクルで入力したデータの演算サイクル数後に全入力データの演算結果を出力する。例えば、演算器は、複数のステージでパイプライン処理して演算結果を出力する。本実施の形態における演算器は、通常のパイプライン処理ルートに加えて、通常よりもステージ数が少ない追越し処理ルートを有する。そして、最初の８ワード入力に収まらなかった入力データの演算を追越し処理ルートで実行し、最初のサイクルで入力したデータの演算サイクル数後に、全入力データの演算結果を出力する。
【００３８】
［GPUの構成］
図９は、本実施の形態におけるグラフィックプロセッサGPU（DL装置）の構成を示す図である。図９のGPUは、図３の構成を簡略化した構成を示している。GPUはDL演算を行うDLチップ（DL装置）である。
【００３９】
GPUは、プロセッサコアCOREと、内部の高速メモリSRAM_0, SRAM_1と、内部バスI_BUSと、メモリコントローラMCと、更に、画像データのフォーマット変換器FMT_Cと、制御バスC_BUSとを有する。フォーマット変換器FMT_Cは、メインメモリM_MEMから入力した画像データを、コアCORE内の演算器に入力するための入力用の近傍マトリクス画像データに、フォーマット変換する。本実施の形態では、フォーマット変換器FMT_Cは、高速メモリSRAM_0, SRAM_1間のデータ転送を実行するDMAである。つまり、DMAは、本来のデータ転送回路に加えて、フォーマット変換器を有する。但し、フォーマット変換器は、DMAとは別に単独で構成してもよい。そして、DMAは、高速メモリSRAM_0の画像データを入力し、フォーマット変換して生成した近傍マトリクス画像データを別の高速メモリSRAM_1に書込む。
【００４０】
プロセッサコアCOREは、積和演算器を内蔵する。積和演算器は、フォーマット変換器が生成した近傍マトリクス画像データと、係数フィルタの係数データとを乗算しそれぞれ加算する。
【００４１】
［入力データのフォーマット変換例］
図１０は、フォーマット変換器FMT_Cの構成を示す図である。フォーマット変換器FMT_Cは、制御バスC_BUSの制御バスインターフェースC_BUS_IFと、制御データを格納する制御データレジスタCNT_REGと、ステートマシンのような制御回路CNTとを有する。制御バスC_BUSには図示しないコアから制御データが転送され、制御レジスタに制御データが格納される。
【００４２】
制御回路CNTは、第１の高速メモリSRAM_0から第２の高速メモリSRAM_1への画像データの転送の制御を行う。また、制御回路CNTは、画像データのフォーマット変換の場合、前記画像データの転送制御に加えて、パラメータレジスタ４２へのパラメータ値の設定と、フォーマット変換の開始と終了の制御を行う。つまり、制御回路CNTは、第１の高速メモリSRAM_0から画像データを読み出し、フォーマット変換し、第２の高速メモリSRAM_1へ書き込む。このように、制御回路CNTは、画像データのデータ転送中にフォーマット変換を行う。制御回路は、データ転送を行うとき、画像データのアドレスを指定して高速メモリSRAMへのアクセスを行う。そして、制御回路は、画像データのアドレスに対応して、フォーマット変換に必要なレジスタのパラメータ値を設定する。
【００４３】
フォーマット変換器FMT_Cは、更に、第１のDMAメモリDMA_M0と、第２のDMAメモリDMA_M1と、それらメモリの間にフォーマット変換回路４０と、コンカテネーション（結合回路）４４を有する。これらのフォーマット変換回路４０及び結合回路４４は、複数組設けられ、複数組の近傍マトリクス画像データのフォーマット変換を並列に行う。また、結合回路のパラメータを設定する結合回路パラメータレジスタ４２を有する。そして、画像データの転置を行う転置回路TRSPと、内部バスI_BUSのデータバスD_BUSと接続されるデータバスインターフェースD_BUS_IFとを有する。
【００４４】
そして、演算器ALUを内蔵するコアCOREは、第２の高速メモリSRAM_１に保存されているフォーマット変換後の近傍マトリクス画像データを読み出し、内蔵する積和演算器が畳込み演算を実行し、演算後の特徴量データを、再び高速メモリに書込む。
【００４５】
図１１、図１２は、積和演算器に入力する入力用の近傍マトリクスの画像データの生成手順の第1例を示す図である。メインメモリM_MEMは１行３２ワード幅で１３行１３列の画像データIM_DATAを記憶する。画像データIM_DATAには３２列のコラムアドレスCADD（=0-31）が示される。一方、１３行１３列の画像データIM_DATAは、１６９ワードの画素データX0-X168を有する。
【００４６】
まず、GPU内のメモリコントローラMCが、メインメモリM_MEM内の画像データIM_DATAを３２ワード幅の外部バスを介して読み出し、３２ワード幅を１６ワード幅に変換し、１６ワード幅の内部バスI_BUSを介して第１の高速メモリSRAM_0に書き込む。このデータ転送は、例えばDMAの標準のデータ転送機能により行われる。
【００４７】
次に、フォーマット変換器であるDMAが、第１の高速メモリSRAM_0内の画像データを内部バスI_BUSを介して読み出し、第１のDMAメモリDMA_M0に書き込む。そして、データフォーマット変換回路４０が、第１のDMAメモリ内の画像データdata0から近傍マトリクスの９画素データを抽出し、１６ワードのデータdata1を生成する。
【００４８】
次に、図１２に示すとおり、結合回路CONCが、８組の近傍マトリクス画像データdata2それぞれの１組９ワードの画素データを、１行１６ワードの第２のDMAメモリDMA_M1にラスタスキャン方向に詰めてパッキングする。その結果、１組目の近傍マトリクス画像データa0-a8は、第２のDMAメモリの１行目と２行目にまたがって格納され、２組目の近傍マトリクス画像データb0-b8は２行目と３行目にまたがって格納され、３組目以降のそれぞれ９ワードの近傍マトリクス画像データが２行にまたがって格納される。
【００４９】
そして、制御回路CNTは、第２のDMAメモリDMA_M1内の近傍マトリクス画像データをパッキングした画像データdata2を、転置処理せずに、内部バスを介して第２の高速メモリSRAM_1に転送する。
【００５０】
次に、GPU内のコアCOREが、第２の高速メモリSRAM_1内の近傍マトリクス画像データdata3を１６ワードずつ読み出し、１６ワードを８ワードずつに変換し、データdata3を生成する。そして、コアCORE内に設けられた単一の積和演算器SoPの第１ステージの８個の乗算器MLTPに、近傍マトリクス画像データを８ワードずつ、係数（W0-W8）と共に入力する。その結果、積和演算器SoPは、９ワードの近傍マトリクスの画素データのうち８ワードずつ係数と乗算し、乗算結果を加算して積和演算結果を出力する。なお、積和演算器SoPは、２行目の残りの画素データ（図中例えばa8）については、係数との乗算値を図示しない追い越し回路により１行目の８ワードの積和値に加算する。
【００５１】
コアCORE内の積和演算器SoPは、フォーマット変換された第２のDMAメモリDMA_M1内の近傍マトリクス画像データを、転置処理せずに、そのまま入力するので、演算開始までに待機するサイクルがなく、演算器の稼働率を高くすることができる。
【００５２】
［追越しルート付積和演算器］
図１３は、本実施の形態の追越しルート付積和演算器の構成を示す図である。図１３の積和演算器は、パイプラインステージST0-ST5を有し、各パイプラインステージに複数または単数のレジスタRGを有し、各ステージのレジスタRGには図示しないクロックが供給され、クロック入力に応答して入力データをラッチする。
【００５３】
まず、正規ルートによる積和演算器の構成を説明し、その後、追越しルートの積和演算器の構成を説明する。
【００５４】
入力ステージST0には、画素データX0-X7と係数W0-W7をそれぞれラッチする８対のレジスタRG00-03,RG04-07を有する。ステージST1内の８個の乗算器MP0-3,MP4-7は、入力ステージの８対のレジスタにラッチされた画素データX0-X7と係数W0-W7それぞれを乗算する。そして、ステージST1の８個のレジスタRG10-13、RG14-17は、８個の乗算器の乗算値をそれぞれラッチする。
【００５５】
次に、ステージST2は、乗算値X0*W0とX1*W1を加算する加算器AD20、乗算値X2*W2,X3*W3を加算する加算器AD21と、乗算値X4*W4とX5*W5を加算する加算器AD22、乗算値X6*W6,X7*W7を加算する加算器AD23を有する。さらに、ステージST2の４つのレジスタRG20-RG23は、それらの加算値をそれぞれラッチする。
【００５６】
ここで、４個の加算器AD20-23それぞれは、1対の入力端子に、制御信号CNTにより入力信号を通過または非通過（非マスクまたはマスク）するマスクMb0-3,Mb4-7を有する。つまり、マスクMb0-7は、レジスタRG10-17のそれぞれの出力と制御信号CNTとを入力するANDゲートである。これらのマスクMb0-3,Mb4-7の制御信号CNTを全て「１」（通過）にすることで、通常ルートの加算器AD20-23の入力が有効化される。マスクMb0-3,Mb4-7の制御信号を「０」（非通過）にすると、通常ルートの加算器AD20-23の入力が無効化され、入力値「０」が入力される。
【００５７】
積和演算器には、図示しない制御用コアからパラメータを設定される設定レジスタ５０と、設定されたパラメータに基づいて上記の制御信号CNTを出力する制御ステートマシン５２とを有する。制御ステートマシン５２が、上記のマスクMb0-3,Mb4-7の制御信号CNTを全て「１」（通過）にすると、通常ルートの加算器AD20-23の入力が有効化され、通常ルートのクロックサイクルで、ステージST2の４個のレジスタRG20-RG23が４個の加算器AD20-23それぞれの加算値をラッチする。
【００５８】
ステージST3は、加算器AD30,AD31とAD32,AD33と、加算器AD31とAD33の出力をそれぞれラッチする２個のレジスタRG30,RG31を有する。ステージST4は、加算器AD40とレジスタRG40とを有する。
【００５９】
ステージST5は、レジスタRG40がラッチする８組の画像データX0-X7と係数W0-W7それぞれの積和加算値を、クロックに同期して累積するアキュムレータACMLを構成する。アキュムレータの初期値IVは「０」であり、加算器AD50は、セレクタSa0により選択された入力値に、レジスタRG40の積和値を加算し、レジスタRG50がその加算値をラッチする。つまり、アキュムレータACMLは、レジスタRG40の積和値を累積加算する。レジスタRG50の出力が積和加算器の結果RESULTである。
【００６０】
上記の加算器AD20,AD21、レジスタRG20,RG21、加算器AD30は、正規ルートの第１の通常加算回路RGL_0を構成する。また、加算器AD22,AD23、レジスタRG22,RG23、加算器AD32は、正規ルートの第２の通常加算回路RGL_1を構成する。ステージST1のレジスタRG10-13,RG14-17それぞれから、加算器AD30、AD32それぞれまでの構成が通常加算回路RGL_0,RGL_1それぞれを構成する。
【００６１】
制御ステートマシン５２は、通常ルート回路のマスクMb0-3,Mb4-7の制御信号CNTを「１」に設定し、５クロックサイクルで、入力された８組の画像データX0-X7と係数W0-W7それぞれの積和値をレジスタRG40から出力する。そして、制御ステートマシン５２は、セレクタSa0を初期値IV側の選択にしてアキュムレータACML内のレジスタRGをリセットし、セレクタSa0をレジスタRG50側の選択に設定して、レジスタRG40の出力である積和値を累積加算する。
【００６２】
次に、追越しルート回路の構成を説明する。第１の追い越し回路OVTK_0が、ステージST1の４個のレジスタRG10-13がラッチする４組の乗算値X0*W0,X1*W1,X2*W2,X3*W3を加算する加算器O_AD20,21、O_AD30を有する。同様に、第２の追い越し回路OVTK_1が、ステージST1の４個のレジスタRG14-17がラッチする４組の乗算値X4*W4,X5*W5,X6*W6,X7*W7を加算する加算器O_AD22,23、O_AD31を有する。
【００６３】
そして、加算器O_AD20,21,22,23は、それぞれの１対の入力端子に前述したマスクMc0-3,Mc4-7を有し、制御ステートマシン５２からの制御信号CNTの「１」「０」に基づき、それぞれのマスクMc0-3,Mc4-7の入力が選択（通過）、非選択（非通過）にそれぞれ制御される。非選択の場合入力値は「０」である。
【００６４】
第１の追い越し回路内の加算器O_AD20,21と加算器O_AD30の間には、ステージST2,ST3を区分するレジスタRGがない。同様に、第２の追い越し回路内の加算器O_AD22,23と加算器O_AD31の間にも、ステージST2,ST3を区分するレジスタRGがない。したがって、これら加算器O_AD20,21と加算器O_AD30、及び、加算器O_AD22,23と加算器O_AD31は、１クロックで加算結果を出力する。この構成により、追い越し回路は、ステージST1で1サイクル遅れていた乗算値（RG10-13,RG14-17の値）が、ステージST3で1サイクル前の加算値（AD30,AD32）に追いつき、加算器AD31,AD33で1サイクル前の加算値に加算される。
【００６５】
図１３における追越し回路OVTK_0を有するレジスタRG10-13からレジスタRG30までの加算回路が、追越し回路付加算回路の最小単位である。この最小単位の加算回路では、加算器AD31が、レジスタRG10-13に入力した画素データと係数データの乗算値に、1サイクル遅れてレジスタRG10-13に入力した画素データと係数の乗算値を加算し、レジスタRG30がその加算値をラッチする。
【００６６】
上記の最小単位の追越し回路付加算回路のレジスタRG10-13の入力側に、４個の乗算器MPと４対の入力レジスタRG00-03を追加することで、最小単位の追越し回路付積和回路が構成される。
【００６７】
［３×３フィルタの動作］
図１４は、３×３フィルタの場合の図１３の積和演算器の動作を示すシーケンス図である。また、図１５は、同様にマスクMb0-7とMc0-7の選択、非選択状態を示すシーケンス図である。図１４，１５を参照して、図１３の積和演算器の動作を説明する。
【００６８】
３×３フィルタの場合、近傍マトリクスの画素数は９個である。一方、図１３の積和演算器の入力数は８である。したがって、９個の画素データと係数データを１サイクルで入力することはできず、２サイクルで入力する。その結果、１個の画素データと係数データが１サイクル遅れで入力される。以下に説明するとおり、積和演算器は追越しルートの加算回路を有し、１サイクル遅れで入力された１個の画素データと係数データの乗算値を８個の画素データと係数データの乗算値に同じステージで加算することができる。また、先のサイクルで入力される任意の数の画素データと係数データの乗算値に、次のサイクルで入力される残りの数の画像データと係数データの乗算値を加算することができる。
【００６９】
［サイクル１］
ステージST0のレジスタRG00-07は、最初の組の９画素データa0-a8のうち８画素データa0-a8と８個の係数w0-w7（図示せず）をラッチする。
【００７０】
［サイクル２］
ステージST１のレジスタRG10-17は、８個の乗算器MP0-7の乗算値（a0-a7の乗算値）をラッチする。図中には紙面の関係からa0*w0-a7*w7を簡易的にa0-a7で示している。同時に、ステージST0のレジスタRG00-07は、９個目の画素データa8と係数w8と、２番目の組の７画素データb0-b6と７個の係数w0-w6をラッチする。後述するとおり、この９個目の画素データa8と係数w8の乗算値が追越しルートで1番目の８画素データa0-a7と係数w0-w7の乗算値に追いつく。図１４中に、追いつきルートで追いつき処理される画素データに下線、a8、を付す。
【００７１】
［サイクル３］
ステージST2の通常ルートのレジスタRG20-23それぞれは、1番目の組の８画素データa0-a7の乗算値の４組の加算値a0,1、a2,3、a4,5、a6,7をそれぞれラッチする。また、ステージST1のレジスタRG10-17それぞれは、１番目の組の1画素データa8と２番目の組の７画素データb0-b6の乗算値をラッチする。同時に、ステージST0のレジスタRG00-07は、２番目の組の８、９個目の画素データb7,8と係数w7,8と、３番目の組の６画素データc0-b5と６個の係数w0-w5をラッチする。
【００７２】
［サイクル４］
ステージST3のレジスタRG30は、通常ルートの加算値a0-3と追越しルートの値a8との加算値をラッチし、レジスタRG31は、通常ルートの加算値a4-7の加算値をラッチする。これで、1サイクル遅れていた加算値a8が通常ルートの加算値に追いついて、加算される。
【００７３】
ステージST2の通常ルートのレジスタRG20-23それぞれは、２番目の組の７画素データb0-b6の乗算値の４組の加算値b0、b1,2、b3,4、b5,6をそれぞれラッチする。また、ステージST1のレジスタRG10-17それぞれは、２番目の組の２画素データb7,8と３番目の組の６画素データc0-c5の乗算値をラッチする。同時に、ステージST0のレジスタRG00-07は、３番目の組の７−９個目の画素データc6-8と係数w6-8と、４番目の組の５画素データd0-d4と５個の係数w0-w4をラッチする。
【００７４】
［サイクル５］
ステージST4のレジスタRG40は、1番目の組の９画素データa0-a8の乗算値の加算値a0-8をラッチする。この結果、演算器は、サイクル１，２で分割して入力された９画素データa0-a8の加算値が、一回のサイクルで入力される８個の画素データの加算値を出力するために必要な５サイクルで、９個の画素データの加算値を出力することができる。言い換えれば、サイクル２で入力した画素データa8を加えた加算値をサイクル６まで遅らせることなく、サイクル５で生成することができる。つまり、サイクル６で８画素データa0-7の加算値と１画素データa8の値とをアキュムレータACMLにより累積加算する必要がない。
【００７５】
ステージST3のレジスタRG30は、通常ルートの加算値b0-2と追越しルートの値b7,8との加算値をラッチし、レジスタRG31は、通常ルートの加算値b3-6の加算値をラッチする。これで、1サイクル遅れていた加算値b7,8が通常ルートの加算値に追いついて、加算される。
【００７６】
ステージST2の通常ルートのレジスタRG20-23それぞれは、３番目の組の６画素データc0-5の乗算値の３組の加算値c0,1、c2,3、c4,5をそれぞれラッチする。一方、追越しルートの加算器O_AD20は、画素データb7,8の乗算値を加算する。また、ステージST1のレジスタRG10-17それぞれは、３番目の組の３画素データc6-8と４番目の組の５画素データd0-d4の乗算値をラッチする。同時に、ステージST0のレジスタRG00-07は、４番目の組の６−９個目の画素データd5-8と係数w5-8と、５番目の組の４画素データe0-e3と４個の係数w0-w3をラッチする。
【００７７】
［サイクル６以降］
以上、同様にして、サイクル６では、ステージST5のレジスタRG50が1番目の組の９画素データa0-a8の乗算値の加算値a0-8をラッチする。この加算値a0-8は、積和演算器の結果RESULTになる。サイクル７では、レジスタRG50が２番目の組の９画素データb0-b8の乗算値の加算値b0-8をラッチする。この加算値b0-8は、積和演算器の結果RESULTになる。以下同様である。
【００７８】
図１５に示すように、通常ルートのマスクMb0-7と、追越しルートのマスクMc0-7は次のように制御される。サイクル１−３では、全ての通常ルートのマスクMb0-7が「１」選択に、全ての追越しルートのマスクMc0-7が「０」非選択に制御される。これにより、ステージST2での追越しルートの加算器は実質的な加算値を出力せず、加算値は「０」になる。
【００７９】
そして、サイクル４で、通常ルートのマスクMb0が「０」非選択になり、追越しルートのマスクMc0が「１」選択になる。そして、サイクル４以降のサイクル５〜１１では、通常ルートのマスクMbの「０」が１つずつ増加し、それに合わせて追越しルートのマスクMcの「１」が１つずつ増加する。そして、サイクル１２ですべてリセットされ、サイクル１と同じ設定値に戻る。つまり、通常ルートのマスクMb0-7と追越しルートのマスクMc0-7それぞれは、互いにレジスタRG10-17のそれぞれの出力を、制御信号CNTに基づいて排他的に選択・非選択する。
【００８０】
以上、３×３フィルタの場合、画素数が９であるので、アキュムレータACMLは、レジスタRG40の積和値を累積演算することはない。
【００８１】
［５×５フィルタの動作］
図１６は、５×５フィルタの場合の図１３の積和演算器の動作を示すシーケンス図である。  ５×５フィルタの場合、近傍マトリクスの画素数は２５個である。したがって、２５個の画素データと係数データを１サイクルで入力することはできず、２４個の画素を８画素ずつ３サイクルで入力し、１画素を１サイクルで入力する。そこで、以下の説明のとおり、３サイクルで入力した８入力の積和値をアキュムレータで累積し、最後の１サイクルで入力した１入力の乗算値を追越しルートで３サイクル目の乗算値に加算する。
【００８２】
１番目の組の２５個の画素データa0-a24と係数データの積和演算について説明する。図１６に示すとおり、サイクル１、２で入力された２組の８入力の画素データa0-a7,a8-a15は、通常ルートで積和演算され、サイクル７でステージST5の加算器AD50で累積されレジスタRG50がラッチする。そして、サイクル３で入力された1組の８入力の画素データa16-a23とサイクル４で入力された１入力の画素データa24の乗算値は、追越しルートによりサイクル６でステージST3の加算器AD31で加算されレジスタRG30にラッチされる。その結果、サイクル７でステージST4のレジスタRG40が、９入力の画素データa16-a24の積和値をラッチし、サイクル８でステージST5の加算器AD50が累積し、レジスタRG50が２５画素データa0-a24の積和値をラッチする。
【００８３】
次に、２番目の組の２５個の画素データb0-b24と係数データの積和演算について説明する。サイクル４、５で入力された２組の７入力の画素データb0-b6と８入力の画素データb7-b14は、通常ルートで積和演算され、サイクル１０でステージST5の加算器AD50で累積されレジスタRG50がラッチする。そして、サイクル６で入力された1組の８入力の画素データb15-b22とサイクル７で入力された２入力の画素データb23,b24の乗算値は、追越しルートによりサイクル９でステージST3の加算器AD31で加算されレジスタRG30にラッチされる。その結果、サイクル１０でステージST4のレジスタRG40が１０入力の画素データb15-b24の積和値をラッチし、サイクル１１でステージST5の加算器AD50がその積和値を累積し、レジスタRG50が２５画素データb0-b24の積和値をラッチする。
【００８４】
３番目の組の２５個の画素データc0-c24と係数データの積和演算も上記と同様である。
【００８５】
［１１画素の動作］
図１７は、1組の入力画素データが１１画素の場合の積和演算器の動作を示すシーケンス図である。1組１１画素の場合、1番目の組の１１画素a0-a10はサイクル１，２で入力され、サイクル５でステージST4のレジスタRG40が画素データa0-a10の積和値をラッチする。２番目の組の１１画素b0-b10はサイクル２，３で入力され、サイクル６でステージST4のレジスタRG40が画素データb0-b10の積和値をラッチする。1番目と２番目の１１画素データa0-a10、b0-b10はいずれもアキュムレータによる累積加算は行われない。
【００８６】
一方、３番目の組の１１画素c0-c10は、サイクル３，４，５で入力される。したがって、サイクル３で入力される２つの画素データc0,1と、サイクル４及び５で入力される画素データc2-c9とc10の積和値は、サイクル９で累積され、ステージST5のレジスタRG50が１１画素データc0-c10の積和値をラッチする。
【００８７】
このように、1組が１１画素の場合は、追越しルート画素数と、追越しルートが動作するサイクルと、アキュムレータによる累積加算のサイクルは、複雑な変化を伴うが、所定の演算式に基づいてそれらを事前に予測することができる。
【００８８】
［３２画素対応の積和演算器］
図１８は、３２画素データまで入力可能な積和演算器の構成を示す図である。３２画素対応の積和演算器は、図１３の８入力の積和演算器SoPを４個並列に配置し、さらに４個の積和演算器SoPが出力する積和値を加算する加算器ADDERを有する。並列配置された４個の積和演算器SoPは、図１３で説明したとおりそれぞれ追越しルートを有する。
【００８９】
図１９は、図１８の加算器ADDERの構成例を示す図である。加算器ADDERは、４つの積和演算器SoP_0-3の積和値をそれぞれラッチする４つの入力レジスタRG60-63と、４つの積和値を２つずつ加算する２つの加算器AD70,AD71と、その出力をラッチする２つのレジスタRG70-71と、その出力を加算する加算器AD80と、その出力をラッチする出力レジスタRG80とを有する。
【００９０】
図１８に示された入力画素データは、７×７フィルタに対応し、１組が４９画素データa0-a48、b0-b48である。したがって、図１８の積和演算器には、1組が４９画素データと図示しない４９係数w0-w48が２サイクルで入力される。そして、1番目の組の４９画素データa0-a48については、サイクル２で入力される画素データa32-a48が、積和演算器SoP_0、SoP_1、SoP_2の追越しルートにより、サイクル１で入力された画素データa0-a31の累積値に加算される。
【００９１】
２番目の組の４９画素データb0-b48については、サイクル２で入力された画素データb0-b14が、サイクル３，４で入力され追越しルートで加算された画素データb15-b48に、アキュムレータにより累積加算される。
【００９２】
［第２の実施の形態］
図２０は、第２の実施の形態における追越しルート付積和演算器の構成を示す図である。図２０の積和演算器は、図１３と同様のSOA形態の画像データを演算する第１の演算と、AOS形態の画像データを演算する第２の演算のいずれかの演算を、設定により変更することができる。第２の演算は、図８（Ｃ）に示した演算である。
【００９３】
図２０の積和演算器は、図１３の積和演算器の構成に加えて、ステージST1内の乗算器MP0-3それぞれとレジスタRG10-17それぞれの間に設けられた、１対の入力端子にそれぞれマスクMa0,1, Ma2,3, Ma4,5, Ma6,7とMa8,9, Ma10,11, Ma12,13, Ma14,15を有する加算器AD10-13, AD14-17と、レジスタRG10-17の出力とセレクタSL10-13, SL14-17の入力との間に設けられたフィードバック配線FBを有する。
【００９４】
上記のマスクMa0-7, Ma8-15は、図１３のマスクMb0-7, Mc0-7と同じである。SOP形態の画素データを入力する第1の演算の場合、マスクMa0-7, Ma8-15の奇数番目のマスクには制御信号「１」が入力され、偶数番目のマスクには制御信号「０」が入力され、フィードバック配線FBの入力を非選択（入力値「０」）にする。その結果、図２０の積和演算器は、図１３と同じになる。
【００９５】
一方、AOS形態の画素データを入力する第２の演算の場合、マスクMa0-7, Ma8-15には全て制御信号「１」が入力され、フィードバック配線FBのレジスタRG10-13の出力データを選択する。その結果、加算器AD10-13, AD14-17と、レジスタRG10-13, RG14-17とでアキュムレータを構成する。
【００９６】
図２１は、第２の演算の場合の図２０の積和演算器を示す図である。第２の演算の場合、積和演算器は、８組の入力ステージST0のレジスタRG00-07と、乗算器MP0-7と、加算器AD10-17と、ステージST1のレジスタRG10-17とを有する。そして、加算器AD10-17とレジスタRG10-17とフィードバック配線FBにより構成される８つのアキュムレータそれぞれが、クロックに同期して乗算器MPの乗算値を８回累積加算し、８組の９画素データa0-8〜h0-8それぞれと９係数データw0-8の積和演算を行う。
【００９７】
図２２は、AOSの画素データを生成するフォーマット変換を示す図である。図１１でフォーマット変換回路４０が生成した８組のデータdata1を、結合器４４が第２のDMAメモリDMA_M1に蓄積してデータdata4を生成する。そして、転置回路TRSPがデータdata4の縦と横を逆にして、AOSの画像データdata5が第２の高速メモリSRAM_1に入力される。その結果、８組の９画素データdata5と９係数データW0-W7が、図２１に示した８個の積和演算器SoPに、並列に且つクロックに同期してシリアルに入力される。そして、所定数クロック後（所定数サイクル後）に８組の積和値（近傍マトリクスの注目画素の特徴量）が並列に出力される。
【００９８】
以上のとおり、本実施の形態によれば、積和演算器に追越しルートを設けることで、２サイクルで入力される８データを超える１組のデータについて、同じクロックサイクルで積和値を生成することができる。さらに、積和演算器の出力にアキュムレータを設けたことで、複数サイクルで入力されるデータそれぞれの積和値を累積加算することができる。
【００９９】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１００】
（付記１）
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有し、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、前記第１、第２、第３のレジスタはクロックに同期して入力をラッチする、加算回路を有する、プロセッサ。
【０１０１】
（付記２）
前記演算器は、
入力ステージに設けられ、複数の第１の入力データと複数の第２の入力データをそれぞれラッチする複数対の入力レジスタと、
前記複数対の入力レジスタそれぞれの対の前記第１の入力データと第２の入力データとをそれぞれ乗算し、乗算値が前記複数の第１のレジスタそれぞれにラッチされる複数の乗算器とを有し、
前記乗算器と加算回路とにより前記複数の第１の入力データと複数の第２の入力データそれぞれの乗算値を加算する積和回路を構成する、付記１に記載のプロセッサ。
【０１０２】
（付記３）
前記演算器は、
前記加算回路の出力を前記クロックに同期して累積するアキュムレータ回路を有する、付記１または２に記載のプロセッサ。
【０１０３】
(付記４)
前記演算器は、
前記第1の加算器と前記第２の加算器の入力に設けられたマスク回路に、前記選択のための第１の制御値を設定する制御回路を有し、
１組の演算対象データの数が前記複数対の入力レジスタの数より多い場合、前記１組の演算対象データが分割して複数のサイクルで前記複数対の入力レジスタに入力され、
前記制御回路は、前記演算対象データに含まれ第１のサイクルで入力された前記第１の入力データと第２の入力データの第１の乗算値を前記第１の加算器に入力し、前記演算対象データに含まれ前記第１のサイクルの次の第２のサイクルで入力された前記第１の入力データと第２の入力データの第２の乗算値を前記第２の加算器に入力する前記第１の制御値を、前記マスク回路に設定する、付記２に記載のプロセッサ。
【０１０４】
(付記５)
前記演算器は、
前記複数の乗算器と前記複数の第１のレジスタとのそれぞれの間に、前記複数の乗算器の出力と前記複数の第１のレジスタの出力とをそれぞれ加算する複数の第４の加算器を有し、
前記第４の加算器の入力に、前記複数の第１のレジスタの複数の出力を入力または非入力の一方に設定可能なマスク回路を有する、付記２に記載のプロセッサ。
【０１０５】
(付記６)
前記演算器は、
前記前記複数の第４の加算器のマスク回路に、前記入力または非入力の第２の制御値を設定する制御回路を有し、
前記制御回路は、演算対象データがストラクチャオブアレイ形式の場合は前記非入力の第２の制御値を設定し、前記演算対象データがアレイオブストラクチャ形式の場合は前記入力の第２の制御値を設定するする、付記５に記載のプロセッサ。
【０１０６】
(付記７)
前記複数の第１の入力データは、画像データの近傍マトリクスの複数の画素データであり、
前記複数の第２の入力データは、前記近傍マトリクスに対応する係数マトリクスの複数の係数データであり、
前記積和回路は、前記近傍マトリクスの複数の画素データと、前記係数マトリクスの複数の係数データとの積和値を算出する、付記２に記載のプロセッサ。
【０１０７】
（付記８）
プロセッサと、
前記プロセッサがアクセスするメインメモリとを有し、
前記プロセッサは、
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有し、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、前記第１、第２、第３のレジスタはクロックに同期して入力をラッチする、加算回路を有する、情報処理装置。
【０１０８】
（付記９）
複数のプロセッサコアと、
前記複数のプロセッサコアからアクセスされる内部メモリとを有し、
前記複数のプロセッサコアのいずれかが有する演算器は、
第１ステージに設けられた複数の第１のレジスタと、
前記複数の第１のレジスタの複数の出力を加算する第１の加算器と、第２ステージに設けられ前記第１の加算器の出力をラッチする第２のレジスタとを有する通常加算回路と、
前記複数の第１のレジスタの複数の出力を加算する第２の加算器を有する追越し加算回路と、
前記通常加算回路の出力と前記追越し加算回路の出力とを加算する第３の加算器と、第３ステージに設けられ前記第２の加算器の出力をラッチする第３のレジスタとを有する合成回路とを有する加算回路を有するプロセッサの動作方法であって、
前記第１の加算器と前記第２の加算器は、前記複数の第１のレジスタの複数の出力を互いに排他的に選択して入力し、
前記第１、第２、第３のレジスタはクロックに同期して入力をラッチし、
第１のサイクルで入力された単数または複数の第１の入力データを前記第１の加算器が加算し、当該加算値を前記第２のレジスタがラッチし、
前記第１のサイクルの次の第２のサイクルで入力された単数または複数の第２の入力データを前記第２の加算器が加算し、
通常加算回路の出力と、前記追越し加算回路の出力とを前記第３の加算器が加算し、当該加算値を前記第３のレジスタがラッチする、プロセッサの動作方法。
【符号の説明】
【０１０９】
RG：レジスタ
MK：マスク、マスク回路
MP：乗算器
AD：加算器
SL：セレクタ
５２：制御ステートマシン、制御回路
RG00-03, RG04-07：入力レジスタ
RG10-13、RG14-17：第1のレジスタ
RG20,21、RG22,23：第２のレジスタ
RG30,31：第３のレジスタ
OCTK_0,1：追越し加算回路
RGL_0,1：通常加算回路
ACML：アキュムレータ、累積加算器
【図１】
2018120547.tif 000003
【図２】
2018120547.tif 000004
【図３】
2018120547.tif 000005
【図４】
2018120547.tif 000006
【図５】
2018120547.tif 000007
【図６】
2018120547.tif 000008
【図７】
2018120547.tif 000009
【図８】
2018120547.tif 000010
【図９】
2018120547.tif 000011
【図１０】
2018120547.tif 000012
【図１１】
2018120547.tif 000013
【図１２】
2018120547.tif 000014
【図１３】
2018120547.tif 000015
【図１４】
2018120547.tif 000016
【図１５】
2018120547.tif 000017
【図１６】
2018120547.tif 000018
【図１７】
2018120547.tif 000019
【図１８】
2018120547.tif 000020
【図１９】
2018120547.tif 000021
【図２０】
2018120547.tif 000022
【図２１】
2018120547.tif 000023
【図２２】
2018120547.tif 000024