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

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024179184
(43)【公開日】2024-12-26
(54)【発明の名称】半導体装置
(51)【国際特許分類】
   G06F 12/00 20060101AFI20241219BHJP
   G06T 1/60 20060101ALI20241219BHJP
   G06T 1/20 20060101ALI20241219BHJP
   G06T 1/40 20060101ALI20241219BHJP
   G06N 3/065 20230101ALI20241219BHJP
【FI】
G06F12/00 560F
G06T1/60 450F
G06T1/20 B
G06T1/40
G06N3/065
G06F12/00 580
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2023097830
(22)【出願日】2023-06-14
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】五十嵐 隆一
(72)【発明者】
【氏名】松原 勝重
(72)【発明者】
【氏名】寺島 和昭
【テーマコード(参考)】
5B047
5B057
5B160
【Fターム(参考)】
5B047EA07
5B047EB01
5B047EB11
5B057CH02
5B057CH05
5B057CH09
5B057CH11
5B057CH14
5B160AA13
5B160AC13
5B160AC18
5B160GA02
5B160GA06
5B160MM20
(57)【要約】
【課題】画像処理の処理時間を短縮できる半導体装置を提供する。
【解決手段】スクラッチパッドメモリ(SPM) 16は、個別にアクセス可能なM個のメモリ MRを含み、N個のチャネルの画像データDTが格納される。メモリコントローラ 29は、N個のチャネルの画像データにおける、同一画素位置に配置されるN個のチャネルのピクセルデータ PDが、M個のメモリMRの中の互いに異なるメモリMRにそれぞれ格納されるように、SPM 16へのアクセスを制御する。MACユニット 25は、メモリコントローラ 29を用いてSPM 16から読み出されたN個のチャネルのピクセルデータ PDと、予め入力された重みパラメータ WTとを積和演算する積和演算器MACを複数含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
NおよびMを2以上の整数として、N個のチャネルの画像データが格納され、個別にアクセス可能なM個のメモリを含んだスクラッチパッドメモリと、
前記N個のチャネルの画像データにおける、同一画素位置に配置されるN個のチャネルのピクセルデータが、前記M個のメモリの中の互いに異なるメモリにそれぞれ格納されるように、前記スクラッチパッドメモリへのアクセスを制御するメモリコントローラと、
前記メモリコントローラを用いて前記スクラッチパッドメモリから読み出された前記N個のチャネルのピクセルデータと、予め入力された重みパラメータとを演算する演算器を含んだMAC(Multiply Accumulation)ユニットと、
を備える、
半導体装置。
【請求項2】
請求項1に記載の半導体装置において、
前記メモリコントローラは、
前記N個のチャネルのピクセルデータを前記スクラッチパッドメモリから読み出す際に、前記N個のチャネルのピクセルデータがそれぞれ格納されたN個のチャネルの読み出し論理アドレスを生成するリードアクセスコントローラと、
前記MACユニットでの演算結果に基づいて得られる前記N個のチャネルのピクセルデータを前記スクラッチパッドメモリに書き込む際に、前記N個のチャネルのピクセルデータをそれぞれ格納するためのN個のチャネルの書き込み論理アドレスを生成するライトアクセスコントローラと、
を備える、
半導体装置。
【請求項3】
請求項2に記載の半導体装置において、
前記リードアクセスコントローラは、前記N個のチャネルの読み出し論理アドレスを、それぞれ、前記M個のメモリの中のチャネル毎に対応するメモリに対する読み出し物理アドレスに変換し、前記チャネル毎に対応するメモリに出力するリード用のアドレスルータを備え、
前記ライトアクセスコントローラは、前記N個のチャネルの書き込み論理アドレスを、それぞれ、前記M個のメモリの中のチャネル毎に対応するメモリに対する書き込み物理アドレスに変換し、前記チャネル毎に対応するメモリに出力するライト用のアドレスルータを備える、
半導体装置。
【請求項4】
請求項3に記載の半導体装置において、
前記ライトアクセスコントローラは、さらに、前記MACユニットでの演算結果に基づいて得られる前記N個のチャネルのピクセルデータを、前記チャネル毎に対応するメモリに出力するライト用のデータルータを備える、
半導体装置。
【請求項5】
請求項3に記載の半導体装置において、
前記リード用のアドレスルータは、前記チャネル毎に対応するメモリを、前記N個のチャネルの読み出し論理アドレスに含まれる特定のビット領域の値で識別し、
前記ライト用のアドレスルータは、前記チャネル毎に対応するメモリを、前記N個のチャネルの書き込み論理アドレスに含まれる特定のビット領域の値で識別する、
半導体装置。
【請求項6】
請求項5に記載の半導体装置において、
前記リードアクセスコントローラは、さらに、
前記リード用のアドレスルータからの前記読み出し物理アドレスに応じて、前記チャネル毎に対応するメモリから読み出された前記N個のチャネルのピクセルデータを、チャネル順に並び替えて前記MACユニットに出力するリード用のデータルータと、
前記N個のチャネルの読み出し論理アドレスに含まれる前記特定のビット領域の値を、前記M個のメモリの読み出しレイテンシに基づく期間、バッファリングし、前記リード用のデータルータに出力するアウトスタンディングアドレスバッファと、
を備える、
半導体装置。
【請求項7】
請求項2に記載の半導体装置において、
前記リードアクセスコントローラまたは前記ライトアクセスコントローラの一方であるアクセスコントローラは、
前記スクラッチパッドメモリに格納される前記N個のチャネルの画像データの各先頭アドレスにおいて、隣接するチャネル間のアドレス間隔が設定されるチャネルストライドレジスタと、
入力した基準論理アドレスに、前記チャネルストライドレジスタに設定された前記アドレス間隔の整数倍を加算することで、前記スクラッチパッドメモリにおけるN個のチャネルの論理アドレスを生成するアドレス生成器と、
を備える、
半導体装置。
【請求項8】
請求項7に記載の半導体装置において、
前記アクセスコントローラは、複数の前記ピクセルデータで構成されるピクセルグループデータを最小データ単位として、前記スクラッチパッドメモリにアクセスし、
mを1以上の整数としてMの値が2m個であり、kを0以上の整数として前記M個のメモリのそれぞれのビット幅が2kバイトであり、前記N個のチャネルの画像データのそれぞれのサイズがFSバイトであり、aを0以上m未満の整数として、前記ピクセルグループデータのサイズであるGSが2(k+a)バイトであり、Nの値が2(m-a)個であることを前提として、前記チャネルストライドレジスタには、<FS/GS>が偶数の場合には、<FS + GS x 奇数>が設定され、<FS/GS>が奇数の場合には、<FS>が設定される、
半導体装置。
【請求項9】
請求項2に記載の半導体装置において、
前記リードアクセスコントローラまたは前記ライトアクセスコントローラの一方であるアクセスコントローラは、
前記N個のチャネルの画像データにおける各チャネルの先頭アドレスがそれぞれ設定されるN個のアドレスレジスタと、
前記N個のアドレスレジスタから出力されるN個の先頭アドレスに、共通のスキャンアドレスをそれぞれ加算する加算器と、
を備える、
半導体装置。
【請求項10】
請求項9に記載の半導体装置において、
前記アクセスコントローラは、複数の前記ピクセルデータで構成されるピクセルグループデータを最小データ単位として、前記スクラッチパッドメモリにアクセスし、
mを1以上の整数としてMの値が2m個であり、kを0以上の整数として前記M個のメモリのそれぞれのビット幅が2kバイトであり、前記N個のチャネルの画像データのそれぞれのサイズがFSバイトであり、aを0以上m未満の整数として、前記ピクセルグループデータのサイズであるGSが2(k+a)バイトであり、Nの値が2(m-a)個であることを前提として、前記N個の先頭アドレスにおける隣接するチャネル間のアドレス間隔は、<FS/GS>が偶数の場合には、<FS + GS x 奇数>となっており、<FS/GS>が奇数の場合には、<FS>となっている、
半導体装置。
【請求項11】
請求項1に記載の半導体装置において、
さらに、メインメモリと前記スクラッチパッドメモリとの間のデータ転送を制御するDMA(Direct Memory Access)コントローラ、を備える、
半導体装置。
【請求項12】
請求項1に記載の半導体装置において、
さらに、前記スクラッチパッドメモリに格納された前記N個のチャネルの画像データを入力して信号処理を行うDSP(Digital Signal Processor)を備える、
半導体装置。
【請求項13】
NおよびMを2以上の整数として、N個のチャネルの画像データが格納され、個別にアクセス可能なM個のメモリを含んだスクラッチパッドメモリと、
レジスタの設定値に基づいて前記スクラッチパッドメモリへのアクセスを制御するメモリコントローラと、
前記メモリコントローラにおける前記レジスタの設定値を定めるCPU(Central Processing Unit)と、
複数の演算器を含んだMAC(Multiply Accumulation)ユニットと、
を備え、
前記CPUは、前記N個のチャネルの画像データにおける、同一画素位置に配置されるN個のチャネルのピクセルデータが、前記M個のメモリの中の互いに異なるメモリにそれぞれ格納されるように前記レジスタの設定値を定め、
複数の演算器のそれぞれは、前記メモリコントローラを用いて前記スクラッチパッドメモリから読み出された前記N個のチャネルのピクセルデータと、予め入力された重みパラメータとを積和演算する、
半導体装置。
【請求項14】
請求項13に記載の半導体装置において、
前記メモリコントローラは、
前記スクラッチパッドメモリに格納される前記N個のチャネルの画像データの各先頭アドレスにおいて、隣接するチャネル間のアドレス間隔が設定されるチャネルストライドレジスタと、
入力した基準論理アドレスに、前記チャネルストライドレジスタに設定された前記アドレス間隔の整数倍を加算することで、前記スクラッチパッドメモリにおけるN個のチャネルの論理アドレスを生成するアドレス生成器と、
を備え、
前記CPUは、前記チャネルストライドレジスタに前記アドレス間隔を設定する、
半導体装置。
【請求項15】
請求項14に記載の半導体装置において、
前記メモリコントローラは、複数の前記ピクセルデータで構成されるピクセルグループデータを最小データ単位として、前記スクラッチパッドメモリにアクセスし、
mを1以上の整数としてMの値が2m個であり、kを0以上の整数として前記M個のメモリのそれぞれのビット幅が2kバイトであり、前記N個のチャネルの画像データのそれぞれのサイズがFSバイトであり、aを0以上m未満の整数として、前記ピクセルグループデータのサイズであるGSが2(k+a)バイトであり、Nの値が2(m-a)個であることを前提として、前記CPUは、前記チャネルストライドレジスタに、<FS/GS>が偶数の場合には<FS + GS x 奇数>を設定し、<FS/GS>が奇数の場合には<FS>を設定する、
半導体装置。
【請求項16】
請求項13に記載の半導体装置において、
前記メモリコントローラは、
前記N個のチャネルの画像データにおける各チャネルの先頭アドレスがそれぞれ設定されるN個のアドレスレジスタと、
前記N個のアドレスレジスタから出力されるN個の先頭アドレスに、共通のスキャンアドレスをそれぞれ加算する加算器と、
を備え、
前記CPUは、前記N個のアドレスレジスタに前記N個の先頭アドレスを設定する、
半導体装置。
【請求項17】
請求項16に記載の半導体装置において、
前記メモリコントローラは、複数の前記ピクセルデータで構成されるピクセルグループデータを最小データ単位として、前記スクラッチパッドメモリにアクセスし、
mを1以上の整数としてMの値が2m個であり、kを0以上の整数として前記M個のメモリのそれぞれのビット幅が2kバイトであり、前記N個のチャネルの画像データのそれぞれのサイズがFSバイトであり、aを0以上m未満の整数として、前記ピクセルグループデータのサイズであるGSが2(k+a)バイトであり、Nの値が2(m-a)個であることを前提として、前記CPUは、<FS/GS>が偶数の場合には、隣接するチャネル間のアドレス間隔が<FS + GS x 奇数>となるように前記N個の先頭アドレスを設定し、<FS/GS>が奇数の場合には、隣接するチャネル間のアドレス間隔が<FS>となるように前記N個の先頭アドレスを設定する、
半導体装置。
【請求項18】
DおよびMを2以上の整数として、1個の次元における各データがインデックス値で区別されるように構成されたD次元のデータが格納され、個別にアクセス可能なM個のメモリを含んだスクラッチパッドメモリと、
D番目の次元における前記インデックス値の個数をN個として、1番目から<D-1>番目の次元で同一の前記インデックス値を有するN個のデータが、前記M個のメモリの中の互いに異なるメモリにそれぞれ格納されるように、前記スクラッチパッドメモリへのアクセスを制御するメモリコントローラと、
を備える、
半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置に関し、例えば、ニューラルネットワークの処理を実行する半導体装置に関する。
【背景技術】
【0002】
特許文献1には、CNN(Convolutional Neural Network)における畳み込み演算を効率化するため、統合係数テーブル生成装置および入力パターン生成回路を備えた画像認識装置が示される。統合係数テーブル生成装置は、2種類からなる<3 x 3>の入力係数テーブルを1種の<5 x 5>の統合係数テーブルに統合し、<5 x 5>の畳み込み演算回路に出力する。入力パターン生成回路は、入力パターンレジスタで設定された規則に基づいて、ラインバッファに格納された<3 x 3>の画素値から<5 x 5>の画素値を生成し、<5 x 5>の畳み込み演算回路に出力する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2019-40403号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
CNN等の画像処理を担う半導体装置では、例えば、畳み込み層における複数個のチャネルの演算をMAC(Multiply Accumulation)ユニットに含まれる複数の積和演算器を用いて並列に実行することで、性能の向上、詳細には処理時間の短縮を実現している。この際に、実効性能をより高めるためには、複数個のチャネルの画像データが格納されるスクラッチパッドメモリ(明細書ではSPMとも呼ぶ)と、MACユニットとの間の入出力レイテンシを短縮することが望まれる。
【0005】
ここで、SPMとMACユニットとの間の入出力レイテンシを短縮するため、例えば、SPMとMACユニットとの間のデータ転送に、複数個のチャネルの画像データを統合したような専用のデータフォーマットを用いる方式が考えられる。ただし、SPMに格納された複数個のチャネルの画像データは、一連の画像処理の過程で、MACユニットに代わって汎用信号処理回路、例えばDSP(Digital Signal Processor)等で処理される場合がある。汎用信号処理回路は、専用のデータフォーマットに対応できない。その結果、SPMとMACユニットとの間のデータ転送に専用のデータフォーマットを用いた場合であっても、画像処理の処理時間を十分に短縮できないおそれがあった。
【0006】
後述する実施の形態は、このようなことに鑑みてなされたものであり、その他の課題と新規な特徴は、本明細書の記載および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態の半導体装置は、スクラッチパッドメモリと、メモリコントローラと、MACユニットとを備える。スクラッチパッドメモリは、NおよびMを2以上の整数として、個別にアクセス可能なM個のメモリを含み、N個のチャネルの画像データが格納される。メモリコントローラは、N個のチャネルの画像データにおける、同一画素位置に配置されるN個のチャネルのピクセルデータが、M個のメモリの中の互いに異なるメモリにそれぞれ格納されるように、スクラッチパッドメモリへのアクセスを制御する。MACユニットは、メモリコントローラを用いてスクラッチパッドメモリから読み出されたN個のチャネルのピクセルデータと、予め入力された重みパラメータとを積和演算する演算器を含む。
【発明の効果】
【0008】
一実施の形態の半導体装置を用いることで、画像処理の処理時間を短縮できる。
【図面の簡単な説明】
【0009】
図1図1は、第1の実施の形態による半導体装置の概略構成例を示すブロック図である。
図2図2は、ニューラルネットワークの構成例を示す概略図である。
図3図3は、図1に示される半導体装置において、CNNにおける中間層を対象とした概略的な処理内容の一例を示す模式図である。
図4図4は、図1におけるメモリコントローラの動作例を説明する図であり、スクラッチパッドメモリ(SPM)に格納される、各チャネルの画像データのメモリマップの一例を示す図である。
図5A図5Aは、第1の比較例の方式を用いた場合と実施の形態の方式を用いた場合とで、図1におけるニューラルネットエンジン(NNE)の概略的な動作例を比較したタイミングチャートである。
図5B図5Bは、第1の比較例の方式を用いた場合と実施の形態の方式を用いた場合とで、1層の畳み込み層の処理に要するクロックサイクル数を比較した結果の一例を示す図である。
図6図6は、図4に示されるメモリマップを前提とした場合に、ニューラルネットワークを用いた画像処理全体で生じる入出力レイテンシの影響を説明するための模式図である。
図7図7は、図1におけるスクラッチパッドメモリ(SPM)の様々な構成例を示す図である。
図8図8は、図7における例2-2に該当する、図4とは異なるメモリマップの一例を示す図である。
図9図9は、図1に示される半導体装置において、主要部の詳細な構成例を示すブロック図である。
図10A図10Aは、図9におけるアドレスルータの構成例および一部の動作例を示す概略図である。
図10B図10Bは、図10Aに示されるアドレスルータの動作例を説明する図である。
図10C図10Cは、図10Bとは異なる動作例を説明する図である。
図10D図10Dは、図10Bとは異なる動作例を説明する図である。
図10E図10Eは、図10Bとは異なる動作例を説明する図である。
図11図11は、図9におけるライト用のデータルータの構成例および一部の動作例を示す概略図である。
図12図12は、図9におけるリード用のデータルータの構成例を示す概略図である。
図13図13は、図9におけるチャネルストライド補正部の処理内容の一例を示すフロー図である。
図14図14は、第2の実施の形態による半導体装置における主要部の詳細な構成例を示すブロック図である。
図15図15は、第3の実施の形態による半導体装置における主要部の詳細な構成例を示すブロック図である。
図16図16は、図15とは異なる主要部の詳細な構成例を示すブロック図である。
図17図17は、第4の実施の形態による半導体装置で用いられる、4次元のデータフォーマットの一例を示す模式図である。
図18A図18Aは、第4の実施の形態による半導体装置において、D次元フォーマットの仕様の具体例を示す図である。
図18B図18Bは、図18Aに示される仕様を前提として、並列アクセスされるデータの4次元フォーマットにおける配置構成例を示す模式図である。
図18C図18Cは、図18Bに示される各データの開始アドレスおよび終了アドレスを示す図である。
図18D図18Dは、図18Aに示される仕様を前提として、CPUが実行するニューラルネットワークソフトウェアの一例を示す図である。
図18E図18Eは、図18Cに示される仕様を前提として、ストライド補正を行った後にスクラッチパッドメモリ(SPM)に格納される、各データのメモリマップの一例を示す図である。
図19図19は、第1の比較例となる半導体装置において、スクラッチパッドメモリ(SPM)に格納される、各チャネルの画像データのメモリマップの一例を示す図である。
図20図20は、図19に示されるメモリマップを前提とした場合に、ニューラルネットワークを用いた画像処理全体で生じる入出力レイテンシの影響を説明するための模式図である。
図21図21は、第2の比較例となる半導体装置において、ニューラルネットワークを用いた画像処理全体で生じる入出力レイテンシの影響を説明するための模式図である。
図22図22は、図8の比較例となるメモリマップの一例を示す図である。
【発明を実施するための形態】
【0010】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。さらに、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【0011】
以下、実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一の符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【0012】
(第1の実施の形態)
<半導体装置の概略>
図1は、第1の実施の形態による半導体装置の概略構成例を示すブロック図である。図1に示される半導体装置 10は、例えば、1個の半導体チップで実現されるSoC(System on a Chip)またはマイクロコントローラ等である。当該半導体装置 10は、ニューラルネットワークエンジン(明細書ではNNEとも呼ぶ) 15と、スクラッチパッドメモリ(SPM) 16と、DMA(Direct Memory Access)コントローラ(DMAC) 17と、DSP 18と、メインメモリ 19と、CPU(Central Processing Unit) 20と、システムバス 21と、を備える。システムバス 21には、NNE 15と、DMAC 17と、DSP 18と、メインメモリ 19と、CPU 20とが接続される。
【0013】
NNE 15は、CNNを代表とするニューラルネットワークの処理を実行する。SPM 16は、Mを2以上の整数として、互いに並列にアクセス可能なM個のメモリ MR[0]-MR[M-1]を含んでいる。明細書では、M個のメモリ MR[0]-MR[M-1]をメモリ MRと総称する。メモリ MRは、例えば、SRAM等である。SPM 16は、NNE 15の高速キャッシュメモリとして用いられ、NNE 15に対して入出力される画像データが格納される。また、SPM 16は、DSP 18からもアクセスできる。DSP 18は、汎用信号処理回路の一つであり、例えば、SPM 16に格納される画像データ DTに対して、ニューラルネットワークの処理の一部を実行する。
【0014】
メインメモリ 19は、例えば、DRAM等である。メインメモリ 19には、ニューラルネットワークの処理で用いられる画像データ DTやパラメータ PM等が格納される。画像データ DTは、例えば、カメラから得られるカメラ画像 CIMGと、ニューラルネットワークの処理によって生成される特徴マップ FMとを含む。パラメータ PMは、カーネルサイズに応じた複数の重みパラメータ WTからなる重みパラメータセット WTSと、バイアスパラメータ BSとを含む。なお、メインメモリ 19は、半導体装置 10の外部に設けられてもよい。
【0015】
DMAC 17は、汎用信号処理回路の他の一つであり、SPM 16とメインメモリ 19との間のシステムバス 21を介したデータ転送を制御する。CPU 20は、例えば、メインメモリ 19に記憶される図示しないソフトウェアを実行することで、半導体装置 10全体に所望の機能を担わせる。その一つとして、CPU 20は、ニューラルネットワークソフトウェアを実行することで、ニューラルネットワークソフトウェアシステム 40を構築する。ニューラルネットワークソフトウェアシステム 40は、例えば、NNE 15、DMAC 17、およびDSP 18に対する各種設定や起動制御等を行うことで、ニューラルネットワークの処理を含めた画像処理全体の動作シーケンスを制御する。
【0016】
NNE 15は、詳細には、MACユニット 25と、ポストプロセッサ 26と、ラインバッファ 27と、ライトバッファ 28と、メモリコントローラ 29とを備える。メモリコントローラ 29は、リードアクセスコントローラ 30と、ライトアクセスコントローラ 31とを備える。リードアクセスコントローラ 30は、画像データ DTを構成する各ピクセルデータ PDiをSPM 16から読み出し、当該各ピクセルデータ PDiをラインバッファ 27に格納する。ライトアクセスコントローラ 31は、ライトバッファ 28に格納された各ピクセルデータ PDoを、SPM 16に書き込む。
【0017】
MACユニット 25は、iを2以上の整数として、i個の積和演算器 MAC[0]-MAC[i]を備える。明細書では、i個の積和演算器 MAC[0]-MAC[i]を積和演算器 MACと総称する。積和演算器 MACは、ラインバッファ 27に格納された各ピクセルデータ PDiと、予め入力された各重みパラメータ WTとを積和演算する。この際に、MACユニット 25は、予め、図示しないコントローラを用いてメインメモリ 19から重みパラメータセット WTSを読み出す。
【0018】
また、積和演算器 MACは、ピクセルデータ PDiと重みパラメータ WTとの積和演算等によって得られるピクセルデータ PDoを、ポストプロセッサ 26を介してライトバッファ 28に格納する。ポストプロセッサ 26は、積和演算器 MACでの積和演算結果に対し、必要に応じてバイアスパラメータ BSの加算、活性化関数の演算、またはプーリング処理等を行うことでピクセルデータ PDoを生成する。
【0019】
図2は、ニューラルネットワークの構成例を示す概略図である。ニューラルネットワークは、一般的に、1個の入力層 45と、複数段の中間層 46[1]-46[j]と、1個の出力層 47とを有する。入力層 45には、例えば、R(赤)、G(緑)、B(青)からなる3個のチャネルの画像データ DT、すなわちカメラ画像 CIMG等が格納される。
【0020】
中間層 46[1]-46[j]には、それぞれ、前段の層と、重みパラメータセット WTS1-WTSjとの積和演算等によって得られる演算結果が、画像データ DT、すなわち特徴マップ FM1-FMjとして格納される。各特徴マップ FM、例えばFMjは、幅方向またはX方向のサイズをWj、高さ方向またはY方向のサイズをHj、チャネル数をCjとして、<Wj x Hj x Cj>のサイズを有する。
【0021】
出力層 47には、最終段の中間層 46[j]と、重みパラメータセット WTSoとの積和演算等によって得られる演算結果が、特徴マップ FMoとして格納される。特徴マップ FMoは、例えば、チャネル数をCoとして、<1 x 1 x Co>のサイズを有する。特徴マップ FMoは、ニューラルネットワークを用いた画像処理結果となる。当該画像処理結果は、通常、メインメモリ 19に格納される。
【0022】
図1に示した半導体装置 10は、図2に示したようなニューラルネットワークを対象に、概略的には次のような手順でニューラルネットワークの処理を実行する。(A)まず、半導体装置 10内の図示しないカメラ入力インタフェースは、外部のカメラからの画像データ DT、すなわちカメラ画像 CIMGをメインメモリ 19に格納する。(B)続いて、DMAC 17は、メインメモリ 19に格納されたカメラ画像 CIMGをSPM 16に転送することで、SPM 16にカメラ画像 CIMGのコピーを格納する。これによって、SPM 16に入力層 45が形成される。
【0023】
(C)次いで、NNE 15またはDSP 18は、SPM 16に形成された入力層 45と、メインメモリ19に格納された重みパラメータセット WTS1とを入力として演算を行い、演算結果となる特徴マップ FM1をSPM 16に格納する。これによって、SPM 16に中間層 46[1]が形成される。NNE 15またはDSP 18のいずれを用いて演算を行うかは、ニューラルネットワークソフトウェアシステム 40によって決定される。この決定に関しては、他の層においても同様である。
【0024】
(D)続いて、NNE 15またはDSP 18は、SPM 16に形成された中間層 46[1]と、メインメモリ 19に格納された重みパラメータセット WTS2とを入力として演算を行い、演算結果となる特徴マップ FM2をSPM 16に格納する。これによって、SPM 16に中間層 46[2]が形成される。以降も同様の処理が行われることで、SPM 16に最終段の中間層 46[j]が形成される。
【0025】
(E)次いで、NNE 15またはDSP 18は、SPM 16に形成された最終段の中間層 46[j]、すなわち特徴マップ FMjと、メインメモリ 19に格納された重みパラメータセット WTSoとを入力として演算を行い、演算結果を、特徴マップ FMoとしてSPM 16に格納する。これによって、SPM 16に出力層 47が形成される。(F)最後に、DMAC 17は、SPM 16に形成された出力層 47、すなわち画像処理結果となる特徴マップ FMoを、メインメモリ 19に転送する。
【0026】
図3は、図1に示される半導体装置において、CNNにおける中間層を対象とした概略的な処理内容の一例を示す模式図である。処理対象の中間層、すなわち畳み込み層には、前段の畳み込み層からのNi個の入力チャネル CHi[0]-CHi[Ni-1]の特徴マップ FMi[0]-FMi[Ni-1]と、処理対象の畳み込み層に割り当てられたNo個の出力チャネルの重みパラメータセット WTS[0]-WTS[No-1]と、が入力される。
【0027】
特徴マップ FMi[0]-FMi[Ni-1]は、SPM 16に格納されており、重みパラメータセットWTS[0]-WTS[No-1]は、メインメモリ 19に格納されている。各チャネルの特徴マップ FMは、幅方向のサイズをW、高さ方向のサイズをHとして、<W x H>のサイズを有する。重みパラメータセット WTS[0]-WTS[No-1]のそれぞれは、幅方向の数をNkw、高さ方向の数をNkh、入力チャネル数をNiとして、<Nkw x Nkhx Ni>個の重みパラメータ WTで構成される。<Nkw x Nkh>は、カーネルサイズであり、代表的には、<3 x 3>等である。
【0028】
ここで、図3の例では、積和演算器 MAC[0]は、特徴マップ FMi[0]-FMi[Ni-1]に含まれる、ある画素位置を基準とする所定サイズのピクセルデータセット PDSと、出力チャネル CHo[0]の重みパラメータセット WTS[0]とを積和演算する。この積和演算結果に対して、バイアスパラメータ BSの加算および活性化関数の演算が行われることで、出力チャネル CHo[0]の特徴マップ FMo[0]における基準となる画素位置のピクセルデータ PDoが生成される。なお、ピクセルデータセット PDSは、重みパラメータセット WTSと同じく、<Nkw x Nkhx Ni>個のピクセルデータ PDiで構成される。
【0029】
また、積和演算器 MAC[0]での処理と並行して、積和演算器 MAC[No-1]は、積和演算器MAC[0]の場合と同じピクセルデータセット PDSと、積和演算器 MAC[0]の場合とは異なる出力チャネル CHo[No-1]の重みパラメータセット WTS[No-1]とを積和演算する。この積和演算結果に対して、バイアスパラメータ BSの加算および活性化関数の演算が行われることで、出力チャネル CHo[No-1]の特徴マップ FMo[No-1]における基準となる画素位置のピクセルデータ PDoが生成される。
【0030】
そして、基準となる画素位置を、幅方向または高さ方向に順次シフトさせながら、前述したような処理が行われることで、No個の出力チャネルの特徴マップ FMo[0]-FMo[No-1]を構成する全てのピクセルデータ PDoが生成される。No個の出力チャネルの特徴マップ FMo[0]-FMo[No-1]は、画像データ DTとしてSPM 16に格納される。このようにしてSPM 16に格納された画像データ DTは、例えば、次段の畳み込み層に入力され、<Ni=No>個の入力チャネルの特徴マップ FMi[0]-FMi[Ni-1]として用いられる。なお、図3に示したような畳み込み処理は、式(1)で表される。
【0031】
【数1】
【0032】
<比較例について>
図19は、第1の比較例となる半導体装置において、スクラッチパッドメモリ(SPM)に格納される、各チャネルの画像データのメモリマップの一例を示す図である。この例では、SPM 16は、8個のメモリ MR[0]-MR[7]を有し、各メモリ MRは、16バイト(= 128ビット)のビット幅を有する。すなわち、SPM 16のメモリバス幅は、128バイト(= 16バイト x 8個)である。
【0033】
ここでは、1個のチャネルの画像データのサイズは、ラスタ構造で、<64バイト/行 x 10行>からなる640バイトである。この場合、SPM 16に、汎用フォーマットの一つであるPlanarフォーマットを用いて、例えば8個のチャネル CH[0]-CH[7]の画像データ DTをラスタ順に格納すると、図19に示されるようなメモリマップが形成される。例えば、各チャネルにおける複数のピクセルグループデータ PGD0-PGD3は、ラスタ構造における1行目のデータに該当し、複数のピクセルグループデータ PGD4-PGD7は、ラスタ構造における2行目のデータに該当する。明細書では、複数のピクセルグループデータ PGD0-PGD7をピクセルグループデータ PGDと総称する。
【0034】
図19における8個のチャネル CH[0]-CH[7]の画像データ DTは、例えば、図3において、入力データとなる8個のチャネルの特徴マップ FMi[0]-FMi[7]、または出力データとなる8個のチャネルの特徴マップ FMo[0]-FMo[7]にそれぞれ該当する。また、チャネル CH[0]の画像データ DTに含まれるピクセルグループデータ PGD0は、例えば、図3に示される特徴マップ FMi[0]において、幅方向における16バイト分、例えば16ピクセル分のデータ群に該当する。続くピクセルグループデータ PGD1は、幅方向において、ピクセルグループデータ PGD0に続く16バイト分のデータ群に該当する。このように、ピクセルグループデータ PGDは、複数または単数のピクセルデータ PDiで構成され、メモリコントローラ 29がSPM 16にアクセスする際の最小データ単位となる。
【0035】
なお、図3に示されるピクセルデータセット PDSは、図1において、ラインバッファ 27からMACユニット 25へ出力されるデータ群に該当する。詳細には、ラインバッファ27は、例えば、1クロックサイクルにおいて、幅方向への畳み込み演算に伴う複数個、すなわち複数シフト分のピクセルデータセット PDSをMACユニット 25へ出力できる。MACユニット 25も、1クロックサイクルにおいて、当該複数個のピクセルデータセット PDSを並列に演算できる。
【0036】
ラインバッファ 27は、MACユニット 25へ出力する複数個のピクセルデータセット PDSの位置を、幅方向または高さ方向において、クロックサイクル毎に順次切り替える。この位置の切り替えに伴い、既にラインバッファ 27で取得済みのピクセルデータ PDi、言い換えれば、畳み込み演算に伴い重複使用可能なピクセルデータ PDiの他に、新たに複数のピクセルデータ PDiが必要となる。
【0037】
リードアクセスコントローラ 30は、この新たに必要となる複数のピクセルデータ PDi、例えば、8個のチャネル CH[0]-CH[7]のピクセルグループデータ PGDを、SPM 16からラインバッファ 27へ転送する。このような処理により、定常状態では、SPM 16からラインバッファ 27へのデータ転送と、ラインバッファ 27からMACユニット 25へのデータ転送と、MACユニット 25でのMAC演算とをパイプラインで処理できる。
【0038】
ここで、図19における、SPM 16の論理アドレス Laddrは、M個のメモリ MR[0]-MR[M-1]のそれぞれの物理アドレス、例えばワードアドレス WDaddrと、M個のメモリ MR[0]-MR[M-1]を識別する0からM-1の範囲を有するインデックス(idx)値とを用いて、式(2)で表される。
【0039】
Laddr = WDaddr x 128 + (idx x 16) …(2)
【0040】
このように、図19に示されるメモリマップでは、Nを2以上の整数として、N個のチャネルの画像データ DTにおける、同一画素位置に配置されるN個のチャネルのピクセルデータ PD、ひいてはピクセルグループデータ PGDは、M個のメモリ MRの中の同一のメモリ MRに格納される。例えば、同一画素位置に配置されるN個のチャネルのピクセルグループデータ PGD0は、同一のメモリ MR[0]に格納される。
【0041】
このため、図3で述べたように、SPM 16に格納されたN個のチャネルのピクセルグループデータ PGDをラインバッファ 27へ入力する際に、同一のメモリ MRに対して時分割で読み出しアクセスを行う必要がある。さらに、複数の積和演算器 MAC等によって得られた、同一画素位置に配置されるN個のチャネルのピクセルデータ PDoをSPM 16へ出力する際にも、同一のメモリ MRに対して時分割で書き込みアクセスを行う必要がある。その結果、SPM 16とNNE 15、詳細にはMACユニット 25との間の入出力レイテンシが増加し、画像処理の処理時間を十分に短縮できないおそれがあった。
【0042】
ここで、例えば、広く知られているニューラルネットワークモデルであるResnet50は、50層を有する。上流の中間層では、Ni(入力チャネル数)=64、No(出力チャネル数)=256、W(Xサイズ)=112、H(Yサイズ)=112、Nkw(X方向カーネルサイズ)=1、Nkh(Y方向カーネルサイズ)=1が用いられる。これを前述した式(1)に当てはめると、205,520,896(= 64 x 256 x 112 x 112 x 1 x 1)回の積和演算が必要となる。このため、積和演算器 MACの並列度を高めることが望まれる。
【0043】
例えば、入力チャネル、出力チャネル、X方向画素、Y方向画素、X方向カーネル、Y方向カーネルの中のいずれにどれだけ並列度を持たせるかは、アーキテクチャによって異なる。ただし、ラスタ処理が一般的なハードウェア処理であることを考えると、チャネル方向の並列度を高めることがハードウェアの重要な要件となる。特に、チャネル方向の並列度を高める場合には、SPM 16とNNE 15との間の入出力レイテンシが実効性能に大きく影響するため、入出力レイテンシを短縮するための技術が求められる。
【0044】
図20は、図19に示されるメモリマップを前提とした場合に、ニューラルネットワークを用いた画像処理全体で生じる入出力レイテンシの影響を説明するための模式図である。図20には、5層の中間層を有する図2に示したニューラルネットワークを処理対象とした、半導体装置の模式的な処理内容が示される。この例では、半導体装置は、DMAC処理[1]、NNE処理[1]、NNE処理[2]、DSP処理、NNE処理[3]からNNE処理[5]、DMAC処理[2]を順次実行する。DMAC処理[1]は、入力層に関する処理であり、NNE処理[1]からNNE処理[4]、およびDSP処理は、中間層に関する処理であり、NNE処理[5]およびDMAC処理[2]は、出力層に関する処理である。
【0045】
DMAC処理[1]において、DMAC 17は、メインメモリ 19に格納されたカメラ画像 CIMGをSPM 16に転送する。NNE処理[1]において、NNE 15は、SPM 16に格納されたカメラ画像 CIMGを入力して信号処理を行うことで特徴マップ FM1を生成し、当該特徴マップ FM1をSPM 16に出力する。NNE処理[2]において、NNE 15は、SPM 16に格納された特徴マップ FM1を入力して信号処理を行うことで特徴マップ FM2を生成し、当該特徴マップ FM2をSPM 16に出力する。
【0046】
DSP処理において、DSP 18は、SPM 16に格納された特徴マップ FM2を入力して信号処理を行うことで特徴マップ FM3を生成し、当該特徴マップ FM3をSPM 16に出力する。NNE処理[3]からNNE処理[5]において、NNE 15は、SPM 16に格納された前段の中間層の特徴マップ FMを入力して信号処理を行うことで、後段の中間層の特徴マップ FMを生成し、生成した特徴マップ FMをSPM 16に出力する。DMAC処理[2]において、DMAC 17は、SPM 16に格納された出力層の特徴マップ FMoをメインメモリ 19に転送する。
【0047】
このような処理が行われる場合、図19に示されるメモリマップを用いると、NNE処理[1]からNNE処理[5]の入出力において、入出力レイテンシの増加が生じる。また、DSP処理においても、処理内容によっては入出力レイテンシの増加が生じる。これらの結果、理論性能に対する実効性能が大きく低下し、ニューラルネットワークを用いた画像処理の処理時間が増大するおそれがあった。
【0048】
図21は、第2の比較例となる半導体装置において、ニューラルネットワークを用いた画像処理全体で生じる入出力レイテンシの影響を説明するための模式図である。図20で述べた入出力レイテンシを短縮するため、SPM 16とNNE 15との間のデータ転送に、例えば複数個のチャネルを統合したような専用のデータフォーマットを適用することが考えられる。詳細には、図21に示されるように、SPM 16に格納される特徴マップ FM1,FM4,FM5に専用のデータフォーマットを適用する。
【0049】
ただし、DSP 18やDMAC 17等の汎用信号処理回路では、専用のデータフォーマットに対応できず、図19に示したPlanarフォーマットのような汎用フォーマットを用いる必要がある。このため、図21に示されるように、専用のデータフォーマットを用いる場合であっても、NNE処理[1]およびNNE処理[3]での入力時と、NNE処理[2]およびNNE処理[5]での出力時において、依然として入出力レイテンシの増加が生じる。その結果、画像処理の処理時間を十分に短縮できないおそれがあった。
【0050】
<メモリコントローラの概略>
そこで、図1に示したメモリコントローラ 29は、次のように動作する。図4は、図1におけるメモリコントローラの動作例を説明する図であり、スクラッチパッドメモリ(SPM)に格納される、各チャネルの画像データのメモリマップの一例を示す図である。メモリコントローラ 29は、N個のチャネルの画像データ DTにおける、同一画素位置に配置されるN個のチャネルのピクセルグループデータ PGD、ひいてはピクセルデータ PDが、M個のメモリ MR[0]-MR[M-1]の中の互いに異なるメモリ MRにそれぞれ格納されるように、SPM 16へのアクセスを制御する。
【0051】
図4の例では、図19の場合と同様に、SPM 16は、8個のメモリ MR[0]-MR[7]を有し、各メモリ MRは、16バイト(= 128ビット)のビット幅を有する。また、図19の場合と同様に、1個のチャネルの画像データ DTのサイズは、640バイト(= 64バイト/行 x 10行)である。SPM 16には、Planarフォーマットを用いて、8個のチャネル CH[0]-CH[7]の画像データ DTが格納される。
【0052】
ただし、図4の例では、図19の場合と異なり、互いに隣接する2個のチャネルにおいて、一方のチャネルにおける最後のピクセルグループデータ PGD39の格納領域と、他方のチャネルにおける最初のピクセルグループデータ PGD0の格納領域との間に、ブランク領域 BLNKが設けられる。この例では、ブランク領域 BLNKのサイズは、16バイトである。メモリコントローラ 29は、このようなブランク領域 BLNKが設けられるように、例えば、8個のチャネル CH[0]-CH[7]毎の開始アドレス、すなわち、最初のピクセルグループデータ PGD0の格納領域のアドレスを定める。
【0053】
これにより、例えば、8個のチャネル CH[0]-CH[7]における最初のピクセルグループデータ PGD0は、8個のメモリ MR[0]-MR[7]にそれぞれ格納される。その他のピクセルグループデータ PGDに関しても同様であり、例えば、8個のチャネルCH[0],CH[1]-CH[7]における最後のピクセルグループデータ PGD39は、メモリ MR[7],MR[0]-MR[6]にそれぞれ格納される。
【0054】
図5Aは、第1の比較例の方式を用いた場合と実施の形態の方式を用いた場合とで、図1におけるニューラルネットエンジン(NNE)の概略的な動作例を比較したタイミングチャートである。図5Bは、第1の比較例の方式を用いた場合と実施の形態の方式を用いた場合とで、1層の畳み込み層の処理に要するクロックサイクル数を比較した結果の一例を示す図である。
【0055】
ニューラルネットワークエンジン(NNE) 15は、例えば、1層の畳み込み層を処理するため、図5Aに示されるような処理サイクル Tcycを繰り返し実行する。この際に、第1の比較例、すなわち図19に示したようなメモリマップを用いた場合、各チャネルにおける同一画素位置のピクセルグループデータ PGDを、同一のメモリ MRから読み出し、積和演算器 MACによる積和演算の後、同一のメモリ MRに書き込む必要がある。このため、読み出し対象または書き込み対象のチャネルを切り替える毎にウエイト期間 Twを設けつつ、SPM 16に対して、時分割での読み出し動作および書き込み動作を行う必要がある。
【0056】
一方、実施の形態の方式、すなわち図4に示したようなメモリマップを用いた場合、各チャネルにおける同一画素位置のピクセルグループデータ PGDを、互いに異なるメモリ MRから読み出し、積和演算器 MACによる積和演算の後、互いに異なるメモリ MRに書き込める。このため、第1の比較例の場合と異なり、ウエイト期間 Twを設ける必要はない。すなわち、同一画素位置のピクセルグループデータ PGDを、互いに異なるメモリ MRに対して同時に読み出し、また、同時に書き込むことができる。その結果、入出力レイテンシを短縮できる。
【0057】
ここで、具体例として、MACユニット 25が、32個の入力チャネルと、32個の出力チャネルとを1回のクロックサイクルで処理でき、かつ、当該クロックサイクル内でX方向の2画素を処理できる、すなわち1回のクロックサイクルで合計2048(= 32 x 32 x 2)回の畳み込み演算を並列に実行できる場合を想定する。また、チャネルの入出力を除くレイテンシは、50クロックサイクルであるものとする。図5Bには、このようなMACユニット 25を用いることを前提として、1層の畳み込み層の処理に要するクロックサイクル数を、第1の比較例の方式と実施の形態の方式とで比較した結果が示される。
【0058】
例えば、Resnet50を代表とするCNNの一般的なネットワークモデルでは、上流の畳み込み層、すなわち上流層では、画像データ DTのX/Yサイズが大きく、下流層に進むに従い、画像データ DTのチャネル数が大きくなり、X/Yサイズは小さくなる。図5Bに示される例1は、上流層を想定したものであり、W(Xサイズ)=112、H(Yサイズ)=112、Ni(入力チャネル数)=64、No(出力チャネル数)=256、Nkw(カーネルXサイズ)=1、Nkh(カーネルYサイズ)=1が用いられる。例2は、下流層を想定したものであり、W=7、H=7、Ni=512、No=2048、Nkw=1、Nkh=1が用いられる。
【0059】
また、図5Bにおいて、理論性能 TPは、式(3)で算出される。第1の比較例の方式による実効性能 AP_Cは、式(4)で算出される。実施の形態の方式による実効性能 AP_Eは、式(5)で算出される。なお、CEIL()は、括弧内の値を整数に切り上げる関数である。
【0060】
TP = (Ni/32) x (No/32) x CEIL(W/2) x H …(3)
AP_C = (Ni/32) x (No/32) x {(CEIL(W/2) x H) + 50 + (32-1) + (32-1)} …(4)
AP_E = (Ni/32) x (No/32) x {(CEIL(W/2) x H) +50} …(5)
【0061】
ここで、図5Aおよび図5Bに示される1回の処理サイクル Tcycにおいて、MACユニット 25は、1回のクロックサイクル内で2048回の畳み込み演算を実行し、<CEIL(W/2) x H>回のクロックサイクルを用いて、32個の入力チャネル分および32個の出力チャネル分の画像データ DTを処理する。例えば、例1の場合、Ni(入力チャネル数)=64、No(出力チャネル数)=256であるため、全入力チャネルおよび全出力チャネルの画像データ DTを処理するために必要な処理サイクル Tcycの数は、16(= 64/32 x 256/32)回である。
【0062】
式(4)および式(5)において、第1の比較例の方式による実効性能 AP_Cは、実施の形態の方式による実効性能 AP_Eと比較して、<(Ni/32) x (No/32) x {(32-1) + (32-1)}>のオーバヘッドが加わる。すなわち、図5Aにおいて、ウエイト期間 Twを1クロックサイクルとして、処理サイクル Tcyc毎の入力時および出力時に、それぞれ<32チャネル - 1>回のクロックサイクルに伴うオーバヘッドが加わる。畳み込み層の処理に要する処理サイクル Tcycの数は、チャネル数が多くなるほど増加する。このため、第1の比較例の方式では、特に、下流層になるほど理論性能 TPに対する実効性能 AP_Cの乖離が大きくなる。実施の形態の方式を用いると、この乖離を抑制でき、特に、下流層において44.3%(= 1 -(79,872/143,360))の改善効果が得られる。
【0063】
図6は、図4に示されるメモリマップを前提とした場合に、ニューラルネットワークを用いた画像処理全体で生じる入出力レイテンシの影響を説明するための模式図である。実施の形態の方式を用いると、図20または図21の場合と異なり、図6に示されるように、NNE処理[1]からNNE処理[5]、およびDSP処理に伴う全ての入出力において、入出力レイテンシを短縮することが可能になる。この際には、専用のデータフォーマットではなく、汎用フォーマットであるPlanarフォーマットを用いているため、特に、DSP処理を含む場合であっても入出力レイテンシを短縮できる。
【0064】
<SPMの構成とブランク領域について>
図7は、図1におけるスクラッチパッドメモリ(SPM)の様々な構成例を示す図である。SPM 16は、例えば、mを1以上の整数として、2m(= M)個のメモリ MRで構成される。各メモリ MRのビット幅は、例えば、kを0以上の整数として、2kバイトで構成される。また、ここでは、チャネル毎の画像データのサイズ FSは、ピクセルグループデータ PGDのサイズをGSとして、<GS x 偶数>であることを前提とする。
【0065】
図7における例1-1から例1-5には、16バイトのビット幅を有するメモリ MRを32(= 25)個設けることで、512バイトのメモリバス幅を有するSPM 16を構成した例が示される。例1-1では、ピクセルグループデータ PGDのサイズ GSは、16バイトであり、1個のピクセルグループデータ PGDは、1個のメモリ MRに格納される。この場合、図4の場合と同様な方式を用いると、並列処理を行える入力チャネル数または出力チャネル数は、32(= 512/16)個である。
【0066】
また、各ブランク領域 BLNKのサイズは、ピクセルグループデータ PGDのサイズ GSである16バイトを単位として、<16バイト x (チャネル数である32に対して互いに素となる数)>、すなわち<16バイトx 奇数>であればよい。また、ブランク領域 BLNKのサイズをできるだけ小さくする、すなわちメモリを節約する観点からは、ブランク領域 BLNKのサイズは、<16バイト x 1>であることが望ましい。
【0067】
例1-2では、ピクセルグループデータ PGDのサイズ GSは、32バイトであり、1個のピクセルグループデータ PGDは、2個のメモリ MRに格納される。この場合、図4の場合と同様な方式を用いると、並列処理を行える入力チャネル数または出力チャネル数は、16(= 512/32)個である。また、各ブランク領域 BLNKのサイズは、ピクセルグループデータ PGDのサイズ GSである32バイトを単位として、<32バイト x (チャネル数である16に対して互いに素となる数)>、すなわち<32バイト x 奇数>であればよく、その中でも<32バイト x 1>であることが望ましい。
【0068】
例1-3では、ピクセルグループデータ PGDのサイズ GSは、64バイトであり、1個のピクセルグループデータ PGDは、4個のメモリ MRに格納される。この場合、図4の場合と同様な方式を用いると、並列処理を行える入力チャネル数または出力チャネル数は、8(= 512/64)個である。また、各ブランク領域 BLNKのサイズは、ピクセルグループデータ PGDのサイズ GSである64バイトを単位として、<64バイト x (チャネル数である8に対して互いに素となる数)>、すなわち<64バイト x 奇数>であればよく、その中でも<64バイト x 1>であることが望ましい。
【0069】
以降同様にして、例1-4では、サイズ GSは、128バイトであり、並列処理を行える入力/出力チャネル数は、4(= 512/128)個である。各ブランク領域 BLNKのサイズは、<128バイトx (チャネル数である4に対して互いに素となる数)>、すなわち<128バイト x 奇数>であればよく、その中でも<128バイト x 1>であることが望ましい。例1-5では、サイズ GSは、256バイトであり、並列処理を行える入力/出力チャネル数は、2(= 512/256)個である。各ブランク領域 BLNKのサイズは、<256バイトx (チャネル数である2に対して互いに素となる数)>、すなわち<128バイト x 奇数>であればよく、結果的に<128バイト x 1>である。
【0070】
図7における例2-1から例2-3には、16バイトのビット幅を有するメモリ MRを8(= 23)個設けることで、128バイトのメモリバス幅を有するSPM 16を構成した例が示される。例2-1では、ピクセルグループデータ PGDのサイズ GSは、16バイトであり、1個のピクセルグループデータ PGDは、1個のメモリ MRに格納される。すなわち、例2-1は、図4に示した構成に該当する。並列処理を行える入力チャネル数または出力チャネル数は、8(= 128/16)個である。また、各ブランク領域 BLNKのサイズは、<16バイト x (チャネル数である8に対して互いに素となる数)>、すなわち<16バイト x 奇数>であればよく、その中でも<16バイト x 1>であることが望ましい。
【0071】
以降同様にして、例2-2では、サイズ GSは、32バイトであり、並列処理を行える入力/出力チャネル数は、4(= 128/32)個である。各ブランク領域 BLNKのサイズは、<32バイトx (チャネル数である4に対して互いに素となる数)>、すなわち<32バイト x 奇数>であればよく、その中でも<32バイト x 1>であることが望ましい。例2-3では、サイズ GSは、64バイトであり、並列処理を行える入力/出力チャネル数は、2(= 128/64)個である。各ブランク領域 BLNKのサイズは、<64バイトx (チャネル数である2に対して互いに素となる数)>、すなわち<64バイト x 奇数>であればよく、結果的に<64バイト x 1>である。
【0072】
以上を一般化すると、K(= 2k)バイトで構成されるメモリ MRをM(= 2m)個備えたSPM 16を前提とした場合、ピクセルグループデータ PGDのサイズ GSは2(k+a)バイトに定められ、並列処理するチャネル数 Nは2(m-a)個に定められる。また、ブランク領域 BLNKのサイズは、<2(k+a)バイト x (チャネル数である2(m-a)に対して互いに素となる数)>に定められる。なお、aは、0以上、m未満の整数である。また、一般化したSPM 16の論理アドレス Laddrは、式(6)で与えられる。式(2)の場合と同様に、WDaddrは、各メモリMRのワードアドレスであり、idxは、各メモリMRの識別番号である。
【0073】
Laddr = WDaddr x (M x K)+(idx x K) …(6)
【0074】
例えば、図7における例2-1および図4を例とすると、K(= 2k)は16(= 24)バイトであり、M(= 2m)は8(= 23)個であり、GSは16(= 2(4+0))バイトに定められ、Nは8(= 2(3-0))個に定められる。また、ブランク領域 BLNKのサイズは、16(= 2(4+0) x 1)バイトに定められる。
【0075】
図8は、図7における例2-2に該当する、図4とは異なるメモリマップの一例を示す図である。図22は、図8の比較例となるメモリマップの一例を示す図である。図8および図22に示される例では、SPM 16は、8個のメモリ MR[0]-MR[7]を有しており、各メモリ MRは、16バイトのビット幅を有している。すなわち、SPM 16のメモリバス幅は、128バイト(= 16バイト x 8個)となっている。また、ピクセルグループデータ PGDのサイズ GSは、32バイトである。
【0076】
ここでは、1個のチャネルの画像データのサイズは、ラスタ構造で、<96バイト/行 x 8行>からなる768バイトとなっている。この場合、比較例の方式を用いると、図22に示されるようなメモリマップが形成される。図22において、複数のピクセルグループデータPGD0a,PGD0b,PGD1a,PGD1b,PGD2a,PGD2bは、ラスタ構造における1行目のデータに該当し、複数のピクセルグループデータPGD3a,PGD3b,PGD4a,PGD4b,PGD5a,PGD5bは、ラスタ構造における2行目のデータに該当する。また、画像データのチャネル数は4である。
【0077】
図22に示されるように、比較例の方式では、図19の場合と同様に、同一画素位置に配置される4個のチャネル CH[0]-CH[3]のピクセルグループデータ PGD、例えば32バイトのピクセルグループデータ PGD0a,PGD0bは、同一のメモリ対(MR[0],MR[1])に格納される。一方、実施の形態の方式では、図8に示されるように、32バイトのブランク領域 BLNKを設けられる。これにより、同一画素位置に配置される4個のチャネル CH[0]-CH[3]のピクセルグループデータ PGD、例えば32バイトのピクセルグループデータ PGD0a,PGD0bは、互いに異なるメモリ対 (MR[0],MR[1]),(MR[2],MR[3]),(MR[4],MR[5]),(MR[6],MR[7])に格納される。
【0078】
<半導体装置の主要部の詳細>
図9は、図1に示される半導体装置において、主要部の詳細な構成例を示すブロック図である。図9には、主に、図1におけるメモリコントローラ 29の詳細な構成例と、ニューラルネットワークソフトウェアシステム 40の詳細な構成例とが示される。SPM 16は、図9に示されるように、例えば、同一メモリ MRへの複数のアクセスを調停する調停回路を備えてもよい。
【0079】
また、図9に示される活性化関数演算部 70は、例えば、MACユニット 25からの積和演算結果に対して、バイアスパラメータ BSの加算、活性化関数の演算を行う。プーリング処理部 71は、必要に応じてプーリング処理を行う。活性化関数演算部 70およびプーリング処理部 71は、図1におけるポストプロセッサ 26に実装される。以下、メモリコントローラ 29と、ニューラルネットワークソフトウェアシステム 40の詳細について説明する。
【0080】
<<メモリコントローラの詳細>>
図9において、リードアクセスコントローラ 30aおよびライトアクセスコントローラ 31aは、図1におけるメモリコントローラ 29に含まれる。リードアクセスコントローラ 30aは、リード用のベースアドレスレジスタ 50、チャネルストライドレジスタ 51、アドレスカウンタ 52、加算器 53、アドレス生成器 54、アドレスルータ 55、およびデータルータ56と、アウトスタンディングアドレスバッファ 57と、を備える。
【0081】
概略的には、リードアクセスコントローラ 30aは、N個のチャネルのピクセルグループデータ PGD、ひいてはピクセルデータ PDをSPM 16から読み出す際に、N個のチャネルのピクセルデータ PDがそれぞれ格納されているN個のチャネルの読み出し論理アドレスを並列に生成する。また、リードアクセスコントローラ 30aは、生成したN個のチャネルの読み出し論理アドレスを、それぞれ、M個のメモリ MRの読み出し物理アドレスに並列に変換してSPM 16に出力する。さらに、リードアクセスコントローラ 30aは、SPM 16から読み出されたN個のチャネルのピクセルデータ PDを、チャネル順に並び替えてMACユニット 25に向けて並列に出力する。
【0082】
詳細には、リード用のベースアドレスレジスタ 50には、SPM 16に格納されているN個のチャネルの画像データ DTを読み出す際の開始アドレスが、ベースアドレスとして設定される。例えば、図4の場合には、チャネル CH[0]の開始アドレスが設定される。通常、SPM 16には、MACユニット 25への入力に用いられるリード用のアドレス空間と、MACユニット 25からの出力に用いられるライト用のアドレス空間とが個別に設定される。ベースアドレスレジスタ 50は、SPM 16におけるリード用のアドレス空間の位置を定める。
【0083】
アドレスカウンタ 52は、0から順に、ピクセルグループデータ PGDのサイズ GS、図4の場合には16バイトを単位として、順次カウント動作を行うことでスキャンアドレス Saddrを生成する。加算器 53は、ベースアドレスレジスタ 50からのベースアドレスと、アドレスカウンタ 52からのスキャンアドレス Saddrとを加算することで、基準論理アドレス Raddrを生成する。これにより、リード用のアドレス空間において、例えば、図4におけるチャネル CH[0]のピクセルグループデータ PGDを、順に、PGD0,PGD1,…,PGD7,PGD8,…とスキャンするような基準論理アドレス Raddrが生成される。
【0084】
リード用のチャネルストライドレジスタ 51には、SPM 16に格納されるN個のチャネルの画像データ DTの各開始アドレスにおいて、隣接するチャネル間のアドレス間隔がチャネルストライドとして設定される。例えば、図4の場合には、チャネル CH[0]におけるピクセルグループデータ PGD0の論理アドレス Laddrと、チャネル CH[1]におけるピクセルグループデータ PGD0の論理アドレス Laddrとのアドレス間隔、具体的には、<640+16>バイトが設定される。
【0085】
リード用のアドレス生成器 54は、加算器 53から入力した基準論理アドレス Raddrに、チャネルストライドレジスタ 51に設定されたアドレス間隔の整数倍を加算することで、N個のチャネルの読み出し論理アドレス CH[n]_REaddrを並列に、言い換えれば同一のクロックサイクルで生成する。すなわち、アドレス生成器 54は、式(7)に基づいて、N個のチャネル、図4の場合には8個のチャネルの読み出し論理アドレス CH[0]_REaddr-CH[7]_REaddrを生成する。式(7)において、CHstrideは、チャネルストライドレジスタ 51に設定されるアドレス間隔であり、nは、0からN-1までの各整数である。
【0086】
CH[n]_REaddr = Raddr + CHstride x n …(7)
【0087】
具体例として、N=8個、CHstride=656バイトで、Raddr=0の場合、アドレス生成器 54は、CH[0]_REaddr=0, CH[1]_REaddr=656, … , CH[7]_REaddr=4592を並列に生成する。これにより、図4において、8個のチャネル CH[0]-CH[7]におけるパケットデータグループ PGD0の論理アドレス Laddrが、並列に生成される。
【0088】
リード用のアドレスルータ 55は、アドレス生成器 54によって並列に生成されたN個のチャネルの読み出し論理アドレス CH[n]_REaddrを、それぞれ、M個のメモリ MRの中のチャネル毎に対応するメモリ MRに対する読み出し物理アドレス MR_idx[n]_REaddrに並列に変換する。そして、リード用のアドレスルータ 55は、変換した読み出し物理アドレス MR_idx[n]_REaddrを、チャネル毎に対応するメモリ MRに向けて並列に出力する。アドレスルータ 55の詳細に関しては後述する。
【0089】
リード用のデータルータ 56は、リード用のアドレスルータ 55からの読み出し物理アドレス MR_idx[n]_REaddrに応じて、チャネル毎に対応するメモリ MRから読み出されたN個のチャネルのピクセルデータ PD、詳細には、メモリ順に並んだメモリ読み出しデータ MR_idx[n]_REdatを、チャネル順に並び替える。アウトスタンディングアドレスバッファ 57は、読み出し動作において、この並び替えを行うために設けられる。
【0090】
そして、リード用のデータルータ 56は、並び替えによって得られるチャネル読み出しデータ CH[n]_REdatを、MACユニット 25に向けて並列に出力する。詳細には、データルータ 56は、チャネル読み出しデータCH[n]_REdatを、チャネル順の記憶領域を有するラインバッファ 27に並列に格納することで、ラインバッファ 27を介してMACユニット 25に出力する。データルータ 56およびアウトスタンディングアドレスバッファ 57の詳細に関しては後述する。
【0091】
ライトアクセスコントローラ 31aは、ライト用のベースアドレスレジスタ 60、チャネルストライドレジスタ 61、アドレスカウンタ 62、加算器 63、アドレス生成器 64、アドレスルータ 65、およびデータルータ 66を備える。ライト用のベースアドレスレジスタ 60、チャネルストライドレジスタ 61、アドレスカウンタ 62、加算器 63およびアドレス生成器 64の動作内容は、前述したリード用のベースアドレスレジスタ 50、チャネルストライドレジスタ 51、アドレスカウンタ 52、加算器 53およびアドレス生成器 54の場合と同様である。
【0092】
これにより、ライトアクセスコントローラ 31aは、MACユニット 25での積和演算結果に基づいて得られるN個のチャネルのピクセルグループデータ PGD、ひいてはピクセルデータ PDをSPM 16に書き込む際に、N個のチャネルのピクセルデータ PDをそれぞれ格納するためのN個のチャネルの書き込み論理アドレスを並列に生成する。これに加えて、ライトアクセスコントローラ 31aは、生成したN個のチャネルの書き込み論理アドレスを、それぞれ、チャネル毎に対応するメモリ MRの書き込み物理アドレスに並列に変換する。そして、ライトアクセスコントローラ 31aは、当該書き込み物理アドレスを、MACユニット 25での積和演算結果に基づいて得られるN個のチャネルのピクセルデータ PDと共に、チャネル毎に対応するメモリ MRに向けて並列に出力する。
【0093】
この際に、ライト用のアドレスルータ 65は、アドレス生成器 64によって並列に生成されたN個のチャネルの書き込み論理アドレスCH[n]_WRaddrを、それぞれ、M個のメモリMRの中のチャネル毎に対応するメモリ MRに対する書き込み物理アドレスMR_idx[n]_WRaddrに並列に変換する。そして、アドレスルータ 65は、変換した書き込み物理アドレスMR_idx[n]_WRaddrを、チャネル毎に対応するメモリ MRに向けて並列に出力する。アドレスルータ 65の詳細に関しては後述する。
【0094】
一方、ライト用のデータルータ 66は、MACユニット 25での積和演算結果に基づいて得られるN個のチャネルのピクセルデータ PD、詳細には、チャネル順の記憶領域を有するライトバッファ 28に格納されているチャネル書き込みデータ CH[n]_WRdatを、チャネル毎に対応するメモリ MRに向けて並列に出力する。この際に、データルータ 66は、チャネル順に並んだチャネル書き込みデータCH[n]_WRdatをメモリ順に並び替える。そして、データルータ 66は、並び替えによって得られるメモリ書き込みデータ MR_idx[n]_WRdatを、チャネル毎に対応するメモリ MRに向けて出力する。データルータ 66の詳細に関しては後述する。
【0095】
<<アドレスルータの詳細>>
図10Aは、図9におけるアドレスルータの構成例および一部の動作例を示す概略図である。図10Bから図10Eは、図10Aに示されるアドレスルータのそれぞれ異なる動作例を説明する図である。図10Aに示されるアドレスルータは、リード用のアドレスルータ 55またはライト用のアドレスルータ 65に該当する。また、ここでは、SPM 16が、1個当たり64kバイトである8個のメモリ MR[0]-MR[7]を備えることで、512kバイトの容量を備えるものとする。各メモリ MRは、4096個のワードアドレス WDaddrと、16バイトのビット幅を有するものとする。すなわち、例えば、図7に示した例2-1および図4において、ワードアドレス WDaddrが4096個である場合を想定する。
【0096】
アドレスルータは、アドレス生成器 54,64からの8個のチャネル CH[0]-CH[7]の論理アドレス CH[0]_addr[18:4]-CH[7]_addr[18:4]を並列に入力する。当該論理アドレス CH[n]_addrは、リード用のアドレスルータ 55の場合には、読み出し論理アドレス CH[n]_REaddrに該当し、ライト用のアドレスルータ 65の場合には、書き込み論理アドレス CH[n]_WRaddrに該当する。
【0097】
アドレスルータは、8個のメモリ MR[0]-MR[7]の物理アドレス MR_idx[0]_addr[11:0]-MR_idx[7]_addr[11:0]を並列に出力する。当該物理アドレス MR_idx[n]_addrは、リード用のアドレスルータ 55の場合には、読み出し物理アドレス MR_idx[n]_REaddrに該当し、ライト用のアドレスルータ 65の場合には、書き込み物理アドレス MR_idx[n]_WRaddrに該当する。当該物理アドレス MR_idx[n]_addrは、具体的には、例えば、図4におけるワードアドレス WDaddrに該当する。
【0098】
この例では、16バイト単位でアクセスが行われるため、論理アドレス CH[n]_addrにおける下位の4ビット([3:0])は0に固定される。これに伴い、アドレスルータには、論理アドレス CH[n]_addrにおける4ビット目から18ビット目([18:4])が入力される。8個のメモリ MR[0]-MR[7]は、8個のインデックス idx[0]-idx[7]にそれぞれ該当し、8個のインデックス idx[0]-idx[7]は、論理アドレス CH[n]_addrにおける下位側の4ビット目から6ビット目([6:4])に割り当てられる。このため、論理アドレス CH[n]_addr[6:4]によって、チャネルとメモリMRとの対応関係を識別することができる。
【0099】
ここで、例えば、ある処理サイクル Tcyc[t]におけるSPM 16からの読み出し動作を想定する。この際に、アドレスルータに並列に入力される8個のチャネルの論理アドレス CH[0]_addr[18:4]-CH[7]_addr[18:4]は、チャネルストライドレジスタ 51に基づくアドレス生成器 54の動作によって、4ビット目から6ビット目([6:4])の値が互いに異なっている。アドレスルータは、チャネル毎に対応するメモリ MRを、当該8個のチャネルの論理アドレス CH[0]_addr-CH[7]_addrに含まれる特定のビット領域、ここでは4ビット目から6ビット目([6:4])の値で識別する。
【0100】
図10Aに示される例では、チャネル CH[n]の論理アドレス CH[n]_addr[6:4]の値は、n=0,1,2,3,4,5,6,7の際に、ぞれぞれ、インデックス idx[5],[2],[7],[4],[1],[6],[3],[0]、ひいてはメモリ MR[5],[2],[7],[4],[1],[6],[3],[0]を表している。すなわち、ここでは、図4の場合と異なり、1個のチャネルの画像データ DTのサイズが、pを整数として<(8p + 4) x 16 byte>である場合が示される。すなわち、図4において、各チャネル CH[0]-CH[7]が、例えば、ピクセルグループデータ PGD0-PGD43等で構成されるような場合が示される。なお、図4の場合、1個のチャネルの画像データ DTのサイズは、<(8p + 0) x 16 byte>である。
【0101】
あるいは、図10Aには、1個のチャネルの画像データ DTのサイズが、<(8p + 5) x 16 byte>であり、チャネルストライド(CHstride)も、<(8p + 5) x 16 byte>に設定される場合が示される。この場合、ブランク領域 BLNKは設けられない。すなわち、1個のチャネルの画像データ DTのサイズが、<(8p + 奇数) x 16 byte>である場合、ブランク領域 BLNKは不要である。
【0102】
アドレスルータは、チャネル CH[n]の論理アドレス CH[n]_addr[18:4]における上位側の7ビット目から18ビット目([18:7])のビット領域を対象に、当該ビット領域の出力先となるメモリ MR[q]を、4ビット目から6ビット目([6:4])のインデックス(idx)値によって識別する。そして、アドレスルータは、出力対象のビット領域であるチャネル CH[n]の論理アドレス CH[n]_addr[18:7]を、インデックス(idx)値によって識別したメモリ MR[q]に、12ビットからなる物理アドレス MR_idx[q]_addr[11:0]として出力する。
【0103】
このような動作により、図10Aに示される例では、チャネル CH[0]の論理アドレスCH[0]_addr[18:7]は、インデックス(idx)値が5であるため、メモリ MR[5]に、物理アドレス MR_idx[5]_addr[11:0]として出力される。また、チャネル CH[1]の論理アドレス CH[1]_addr[18:7]は、インデックス(idx)値が2であるため、メモリ MR[2]に、物理アドレス MR_idx[2]_addr[11:0]として出力される。残りのチャネルCH[2]-CH[7]に関しても同様である。
【0104】
なお、次の処理サイクル Tcyc[t+1]におけるSPM 16からの読み出し動作では、アドレスカウンタ 52の動作により、4ビット目から6ビット目([6:4])のインデックス(idx)値は+1加算される。その結果、チャネル CH[0],[1],[2],[3],[4],[5],[6],[7]の論理アドレス CH[n]_addr[18:7]の出力先は、それぞれ、メモリ MR[6],[3],[0],[5],[2],[7],[4],[1]に切り替わる。すなわち、図4を参照し、例えば、ある処理サイクルで、チャネル CH[0]のピクセルグループデータ PGDを、メモリ MR[5]のワードアドレス<A>から読み出し、次の処理サイクルで、チャネル CH[0]の次のピクセルグループデータ PGDを、異なるメモリ MR[6]の同じワードアドレス<A>から読み出すような動作が行われる。
【0105】
なお、アドレスルータは、詳細には、例えば、N個のチャネルの入力信号とM個のメモリMRへの出力信号との接続関係を定めるセレクタまたはマトリックススイッチ等によって構成される。この例では、入力信号は、論理アドレスの一部のビット領域で構成される8個のチャネルの論理アドレス CH[n]_addr[18:7]である。出力信号は、8個のメモリ MRへの物理アドレス MR_idx[n]_addr[11:0]である。
【0106】
そして、論理アドレスの他の一部のビット領域で構成される8個のチャネルの論理アドレス CH[n]_addr[6:4]は、セレクタまたはマトリックススイッチの選択信号として用いられる。このような構成により、アドレスルータは、N個のチャネルの入力信号を並列に、言い換えれば1クロックサイクルで処理し、M個のメモリMRへの出力信号として並列に出力することができる。その結果、入出力レイテンシを短縮できる。
【0107】
図10Bには、pを整数として、1個のチャネルの画像データ DTのサイズが、<(8p + 0) x 16 byte>であり、これに応じて、チャネルストライド(CHstride)を、<(8p + 1) x 16 byte>に設定した場合の動作例が示される。すなわち、図4に示したような箇所に、<16バイト x 1>のブランク領域 BLNKを設けた場合の動作例が示される。あるいは、1個のチャネルの画像データ DTのサイズが、<(8p + 1) x 16 byte>であり、チャネルストライド(CHstride)も、<(8p + 1) x 16 byte>に設定した場合の動作例が示される。すなわち、図4において、各チャネル CH[0]-CH[7]が、例えば、ピクセルグループデータ PGD0-PGD40等で構成され、ブランク領域 BLNKが不要である場合の動作例が示される。
【0108】
図10Cには、1個のチャネルの画像データ DTのサイズが、<(8p + 2) x 16 byte>であり、これに応じて、チャネルストライド(CHstride)を、<(8p + 3) x 16 byte>に設定した場合の動作例が示される。すなわち、図4において、各チャネル CH[0]-CH[7]が、例えば、ピクセルグループデータ PGD0-PGD41等で構成され、これに伴い、<16バイト x 1>のブランク領域 BLNKを設けた場合の動作例が示される。あるいは、1個のチャネルの画像データ DTのサイズが、<(8p + 3) x 16 byte>であり、チャネルストライド(CHstride)も、<(8p + 3) x 16 byte>に設定した場合、すなわち、ブランク領域 BLNKが不要である場合の動作例が示される。
【0109】
同様に、図10Dには、画像データ DTのサイズが、<(8p + 4) x 16 byte>であり、チャネルストライド(CHstride)を、<(8p + 5) x 16 byte>に設定した場合の動作例が示される。あるいは、画像データ DTのサイズが、<(8p + 5) x 16 byte>である場合の動作例が示される。図10Eには、画像データ DTのサイズが、<(8p + 6) x 16 byte>であり、チャネルストライド(CHstride)を、<(8p + 7) x 16 byte>に設定した場合の動作例が示される。あるいは、画像データ DTのサイズが、<(8p + 7) x 16 byte>である場合の動作例が示される。なお、図10Aに例示した入力信号と出力信号との接続関係は、図10Dに示される動作の一部を表したものである。
【0110】
図10B図10C図10Dおよび図10Eのそれぞれには、選択信号である8個のチャネルの論理アドレス CH[n]_addr[6:4]が表すインデックス(idx)値の組み合わせが示される。ここでは、一部を省略して、3通り、すなわち3列分の組み合わせが示されるが、詳細には、8通りの組み合わせが存在する。そして、各図には、選択信号の組み合わせ毎に、出力信号である8個の物理アドレス MR_idx[n]_addr[11:0]のそれぞれに、入力信号である8個のチャネルの論理アドレス CH[n]_addr[18:7]のいずれが接続されるかが示される。
【0111】
<<データルータの詳細>>
図11は、図9におけるライト用のデータルータの構成例および一部の動作例を示す概略図である。図11に示されるライト用のデータルータ 66は、図10Aとは入力信号および出力信号が異なることを除いて、図10Aに示したアドレスルータと同様の構成を備え、同様の動作を行う。データルータ 66への入力信号は、MACユニット 25から出力され、活性化関数等の演算を経てライトバッファ28にチャネル順に格納された8個のチャネルのチャネル書き込みデータ CH[n]_WRdat[127:0]である。各チャネル書き込みデータ CH[n]_WRdat[127:0]のサイズは、16バイト(= 128ビット)である。
【0112】
また、データルータ 66からの出力信号は、メモリ順に並んだ8個のメモリ書き込みデータ MR_idx[n]_WRdat[127:0]である。データルータ 66は、図10Aの場合と同じ選択信号、すなわち、ライト用のアドレス生成器 64からの8個のチャネルの書き込み論理アドレス CH[n]_WRaddr[6:4]に基づくインデックス(idx)値を用いて、入力信号と出力信号との接続関係を定める。これにより、ライト用のアドレスルータ 65によって識別されるチャネル毎のメモリ MR、すなわちチャネルとメモリ MRとの対応関係と、ライト用のデータルータ 66によって識別されるチャネル毎のメモリ MRとは同一になる。
【0113】
図12は、図9におけるリード用のデータルータの構成例を示す概略図である。図12に示されるリード用のデータルータ 56は、図11とは入出力の方向が逆になることを除いて、基本的には、図11に示したライト用のデータルータ 66と同様の構成を備え、同様の動作を行う。データルータ 56の入力信号は、8個のメモリ MRから読み出され、メモリ順に並んだ8個のメモリ読み出しデータ MR_idx[n]_REdat[127:0]である。各メモリ読み出しデータ MR_idx[n]_REdat[127:0]のサイズは、16バイト(= 128ビット)である。
【0114】
また、リード用のデータルータ 56からの出力信号は、チャネル順に並んだ8個のチャネル読み出しデータ CH[n]_REdat[127:0]である。データルータ 56は、図10Aの場合と同じ選択信号、すなわち、リード用のアドレス生成器 54からの8個のチャネルの読み出し論理アドレス CH[n]_REaddr[6:4]に基づくインデックス(idx)値を用いて、入力信号と出力信号との接続関係を定める。これにより、リード用のアドレスルータ 55によって識別されるチャネル毎のメモリ MR、すなわちチャネルとメモリ MRとの対応関係と、リード用のデータルータ 56によって識別されるチャネル毎のメモリ MRとは同一になる。
【0115】
ただし、メモリ MRは、読み出し動作の際には、書き込み動作の場合と異なり、物理アドレスが入力されたのち、所定のクロック数からなる読み出しレイテンシを経て、メモリ読み出しデータを出力する。この読み出しレイテンシを補償するため、アウトスタンディングアドレスバッファ 57は、アドレス生成器 54からの8個のチャネルの読み出し論理アドレス CH[n]_REaddr[18:4]に含まれる特定のビット領域([6:4])の値を、読み出しレイテンシに基づく期間、バッファリングする。そして、アウトスタンディングアドレスバッファ 57は、バッファリングしている読み出し論理アドレス CH[n]_REaddr[6:4]の値をデータルータ 56に出力する。
【0116】
なお、図12に示される例では、データルータ 56は、8個のセレクタ 58[0]-58[7]を備える。セレクタ 58[0]は、8個のメモリ読み出しデータ MR_idx[0]_REdat-MR_idx[7]_REdatの中のいずれか1個を、チャネル CH[0]の選択信号であるチャネル CH[0]の読み出し論理アドレス CH[0]_REaddr[6:4]に基づいて選択する。そして、セレクタ 58[0]は、選択したメモリ読み出しデータを、チャネル CH[0]のチャネル読み出しデータ CH[0]_REdatとして出力する。
【0117】
同様に、セレクタ 58[7]は、8個のメモリ読み出しデータ MR_idx[0]_REdat-MR_idx[7]_REdatの中のいずれか1個を、チャネル CH[7]の選択信号であるチャネル CH[7]の読み出し論理アドレス CH[7]_REaddr[6:4]に基づいて選択する。そして、セレクタ 58[7]は、選択したメモリ読み出しデータを、チャネル CH[7]のチャネル読み出しデータ CH[7]_REdatとして出力する。なお、図10Aに示したアドレスルータ 55,65や、図11に示したライト用のデータルータ 66も、セレクタの入出力の方向を入れ替えることで、同様の構成で実現可能である。
【0118】
<<ニューラルネットワークソフトウェアシステムの詳細>>
図9において、ニューラルネットワークソフトウェアシステム 40は、CPU 20がニューラルネットワークソフトウェアを実行することで実現される読み出し制御部 75aおよび書き込み制御部 76aを備える。読み出し制御部 75a、すなわちCPU 20は、主に、リードアクセスコントローラ 30aに含まれる各レジスタの設定値をリード設定パラメータ 80として定め、各レジスタに設定する。ここで、読み出し制御部 75aは、リード用のチャネルストライド補正部 81を備える。チャネルストライド補正部 81は、リード設定パラメータ 80に含まれるリード用のチャネルストライド(CHstride)を必要に応じて補正し、補正後のチャネルストライドをリード用のチャネルストライドレジスタ 51に設定する。
【0119】
同様に、書き込み制御部 76a、すなわちCPU 20は、主に、ライトアクセスコントローラ 31aに含まれる各レジスタの設定値をライト設定パラメータ 85として定め、各レジスタに設定する。ここで、書き込み制御部 76aは、ライト用のチャネルストライド補正部 86を備える。チャネルストライド補正部 86は、ライト設定パラメータ 85に含まれるライト用のチャネルストライドを必要に応じて補正し、補正後のチャネルストライド(CHstride)をライト用のチャネルストライドレジスタ 61に設定する。
【0120】
また、リード用のチャネルストライド補正部 81は、ライト用のチャネルストライド補正部 86によって得られた補正後のライト用のチャネルストライド(CHstride)を、補正後のリード用のチャネルストライド(CHstride)として、リード用のチャネルストライドレジスタ 51に設定してもよい。すなわち、通常、ある層の書き込みで用いるチャネルストライド(CHstride)と、次の層の読み出しで用いるチャネルストライド(CHstride)とは、等しくなる。例えば、図20において、NNE処理[1]の出力で用いるチャネルストライド(CHstride)とNNE処理[2]の入力で用いるチャネルストライド(CHstride)とは、共に、同一の特徴マップ FM1に適用されるチャネルストライド(CHstride)である。
【0121】
図13は、図9におけるチャネルストライド補正部の処理内容の一例を示すフロー図である。ここでは、前提として、図7で述べたように、mを1以上の整数としてメモリ数であるMの値が2m個であり、kを0以上の整数としてM個のメモリのそれぞれのビット幅が2kバイトであるものとする。さらに、aを0以上m未満の整数として、ピクセルグループデータ PGDのサイズ GSが2(k+a)バイトであり、チャネル数であるNの値が2(m-a)個であるものとする。
【0122】
図13において、例えば、リード用のチャネルストライド補正部 81は、まず、チャネルストライド(CHstride)の初期値である画像サイズ FSを取得する(ステップS101)。すなわち、リード設定パラメータ 80では、チャネルストライド(CHstride)の設定値、言い換えれば初期値は、図19に示したように、画像サイズ FSに定められる。また、チャネルストライド補正部 81は、予め設定されているピクセルグループデータ PGDのサイズ GSを参照する(ステップS102)。
【0123】
続いて、チャネルストライド補正部 81は、<FS/GS>を算出し、算出結果が偶数であるか否かを判定する(ステップS103)。チャネルストライド補正部 81は、ステップS103での算出結果が偶数である場合には、リード用のチャネルストライドレジスタ 51に、<FS + GS x 奇数>の値を設定する(ステップS104)。すなわち、チャネルストライド補正部 81は、チャネルストライドの設定値を補正する。一方、チャネルストライド補正部 81は、ステップS103での算出結果が奇数である場合には、リード用のチャネルストライドレジスタ 51に、<FS>の値を設定する(ステップS105)。すなわち、チャネルストライド補正部 81は、チャネルストライドの設定値を補正しない。
【0124】
例えば、図4の例では、ステップS103で算出される<FS/GS>は、40(= 640/16)である。このため、チャネルストライドレジスタ 51には、例えば、<640 + 16 x 1>の値が設定される(ステップS104)。ただし、図4から分かるように、仮に<FS/GS>が奇数である場合には、チャネルストライドの設定値を補正せずとも、同一画素位置に配置されるN個のチャネルのピクセルデータ PDは、M個のメモリ MRの中の互いに異なるメモリ MRにそれぞれ格納される。なお、ライト用のチャネルストライド補正部 86も、リード用のチャネルストライド補正部 81と同様の処理を実行する。
【0125】
また、チャネルストライド(CHstride)の補正方法は、画像サイズである FSバイトと、各メモリ MRのビット幅であるKバイトと、メモリ MRの数であるM個とを用いて、式(8)および式(9)で表される。ここで、FLOOR(FS, K x M)は、FSを(K x M)の倍数になるように切り捨てる関数である。skip_factorは、mod(CEIL(FS/K, 1), M)を奇数に切り上げた値である。CEIL(FS/K, 1)は、<FS/K>の値を整数に切り上げる関数である。
【0126】
CHstride(補正前) = FS …(8)
CHstride(補正後) = K x skip_factor + FLOOR(FS, K x M) …(9)
【0127】
なお、メモリ MRのビット幅であるKバイトや、メモリ MRの数であるM個が2のべき乗でない場合には、チャネルストライドを、チャネル数に対して互いに素となるようなピクセルグループデータPGDの数に切り上げればよい。
【0128】
<第1の実施の形態の主要な効果>
以上、第1の実施の形態の方式では、メモリコントローラ 29が設けられる。メモリコントローラ 29は、同一画素位置に配置されるN個のチャネルのピクセルデータ PDが、M個のメモリ MRの中の互いに異なるメモリ MRにそれぞれ格納されるように、SPM 16へのアクセスを制御する。これにより、M個のメモリ MRに対して、N個のチャネルのピクセルデータ PDを並列に入出力することができる。その結果、SPM 16とNNE 15との間の入出力レイテンシを短縮できる。さらに、汎用フォーマットであるPlanarフォーマットを用いているため、特に、DSP処理等を含む場合であっても入出力レイテンシを短縮できる。これらの結果、画像処理の処理時間を短縮することが可能になる。
【0129】
また、第1の実施の形態の方式は、メモリコントローラ 29内に、チャネルストライドレジスタ 51,61およびアドレス生成器 54,64を設け、チャネルストライドレジスタ 51,61に適切なチャネルストライド、すなわちアドレス間隔を設定することで、入出力レイテンシを短縮する方式となっている。このようなチャネルストライドレジスタ 51,61を用いる方式によって、必要なレジスタの数を少なくできるため、レジスタの面積や、レジスタの設定に伴う処理負荷、設定時間の観点で有益となる。特に、チャネル数が多くなるほど、より有益な効果が得られる。
【0130】
(第2の実施の形態)
<半導体装置の主要部の詳細>
図14は、第2の実施の形態による半導体装置における主要部の詳細な構成例を示すブロック図である。図14に示される半導体装置 10は、図9に示した構成例と比較して、リードアクセスコントローラ 30bの構成と、ライトアクセスコントローラ 31bの構成と、ニューラルネットワークソフトウェアシステム 40内の読み出し制御部 75bおよび書き込み制御部 76bの構成と、が異なっている。
【0131】
リードアクセスコントローラ 30bは、図9に示したベースアドレスレジスタ 50、チャネルストライドレジスタ 51およびアドレス生成器 54の代わりに、リード用のアドレスレジスタユニット 90を備える。アドレスレジスタユニット 90は、N個のアドレスレジスタを備える。N個のアドレスレジスタには、それぞれ、N個のチャネルの画像データ DTにおける各チャネルの開始アドレス CH[n]_RSaddrが設定される。
【0132】
加算器 53bは、アドレスレジスタユニット 90から出力されるN個の開始アドレス CH[n]_RSaddrに、アドレスカウンタ 52からの共通のスキャンアドレス Saddrをそれぞれ加算する。これにより、加算器 53bは、図9におけるアドレス生成器 54からの出力と同じく、N個のチャネルの読み出し論理アドレス CH[n]_REaddrを並列に出力する。
【0133】
このような相違に伴い、読み出し制御部 75bは、図9に示したリード用のチャネルストライド補正部 81の代わりにリード用のアドレス補正部 95を備える。アドレス補正部 95は、図13の場合と同様な処理フローによって各チャネル間のアドレス間隔を定め、さらに、図9におけるベースアドレスレジスタ 50およびアドレス生成器 54に相当する処理を行う。すなわち、アドレス補正部 95は、あるリード用のベースアドレスに対して、定めたアドレス間隔を順次加算する、または、アドレス間隔の整数倍を加算することで、N個の開始アドレス CH[n]_RSaddrをそれぞれ算出する。
【0134】
そして、アドレス補正部 95は、算出したN個の開始アドレス CH[n]_RSaddrを、アドレスレジスタユニット 90内のN個のアドレスレジスタにそれぞれ設定する。その結果、図13の場合と同様に、N個の開始アドレス CH[n]_RSaddrにおける隣接するチャネル間のアドレス間隔は、<FS/GS>が偶数の場合には、<FS + GS x 奇数>となる。一方、当該隣接するチャネル間のアドレス間隔は、<FS/GS>が奇数の場合には、<FS>となる。
【0135】
同様に、ライトアクセスコントローラ 31bも、図9に示したベースアドレスレジスタ 60、チャネルストライドレジスタ 61およびアドレス生成器 64の代わりに、ライト用のアドレスレジスタユニット 91を備える。アドレスレジスタユニット 91は、N個のアドレスレジスタを備える。N個のアドレスレジスタには、それぞれ、N個のチャネルの画像データ DTにおける各チャネルの開始アドレス CH[n]_WSaddrが設定される。加算器 63bは、アドレスレジスタユニット 91から出力されるN個の開始アドレス CH[n]_WSaddrに、アドレスカウンタ 62からの共通のスキャンアドレス Saddrをそれぞれ加算することで、N個のチャネルの書き込み論理アドレス CH[n]_WRaddrを並列に出力する。
【0136】
書き込み制御部 76bは、ライト用のアドレス補正部 96を備える。アドレス補正部 96は、各チャネル間のアドレス間隔を定め、あるライト用のベースアドレスに対して、定めたアドレス間隔を順次加算する、または、アドレス間隔の整数倍を加算することで、N個の開始アドレス CH[n]_WSaddrをそれぞれ算出する。そして、アドレス補正部 96は、算出したN個の開始アドレス CH[n]_WSaddrを、アドレスレジスタユニット 91内のN個のアドレスレジスタにそれぞれ設定する。
【0137】
<第2の実施の形態の主要な効果>
以上、第2の実施の形態の方式を用いることで、第1の実施の形態で述べた各種効果と同様の効果が得らえる。また、第2の実施の形態の方式は、メモリコントローラ 29内に、N個のアドレスレジスタを含んだアドレスレジスタユニット 90,91を設け、アドレスレジスタユニット 90,91にチャネル毎の適切な開始アドレスを設定することで、入出力レイテンシを短縮する方式となっている。
【0138】
このため、第1の実施の形態の方式と比較すると、レジスタの面積やレジスタの設定に伴う処理負荷や設定時間の観点ではデメリットとなるが、設定の自由度を高められる観点でメリットが得られる。例えば、図4に示した各チャネル間のブランク領域 BLNKを、チャネル間毎に、128バイトを単位とする任意の数で拡張するようなことが可能である。一般的なCNN処理では、特に、このような自由度は必要とされない場合が多いが、特定のニューラルネットワークの処理では、このような自由度が求められる場合がある。
【0139】
(第3の実施の形態)
<半導体装置の主要部の詳細>
図15は、第3の実施の形態による半導体装置における主要部の詳細な構成例を示すブロック図である。図15に示される半導体装置 10は、図9に示した構成例と比較して、リードアクセスコントローラ 30cの構成と、ライトアクセスコントローラ 31cの構成と、ニューラルネットワークソフトウェアシステム 40内の読み出し制御部 75cおよび書き込み制御部 76cの構成とが異なっている。
【0140】
ライトアクセスコントローラ 31cは、図9に示したライト用のチャネルストライドレジスタ 61の代わりに、ライト用の暫定チャネルストライドレジスタ 61c、チャネルストライド補正回路 105、およびステータスレジスタ 106を備える。暫定チャネルストライドレジスタ 61cには、書き込み制御部 76cによって、ライト用のチャネルストライドの暫定値、言い換えればアドレス間隔の暫定値が設定される。
【0141】
チャネルストライド補正回路 105は、図13で述べたライト用のチャネルストライド補正部 86と同様の処理を専用のハードウェア回路によって行うことで、必要に応じてチャネルストライドの暫定値を補正する。そして、チャネルストライド補正回路 105は、補正後のチャネルストライドの値を、ライト用のアドレス生成器 64とステータスレジスタ 106とに出力する。
【0142】
同様に、リードアクセスコントローラ 30cは、図9に示したリード用のチャネルストライドレジスタ 51の代わりに、リード用の暫定チャネルストライドレジスタ 51c、チャネルストライド補正回路 100、およびステータスレジスタ 101を備える。チャネルストライドレジスタ 51cには、読み出し制御部 75cによって、リード用のチャネルストライドの暫定値、言い換えればアドレス間隔の暫定値が設定される。
【0143】
チャネルストライド補正回路 100は、図13で述べたリード用のチャネルストライド補正部 81と同様の処理を専用のハードウェア回路によって行うことで、必要に応じてチャネルストライドの暫定値を補正する。そして、チャネルストライド補正回路 100は、補正後のチャネルストライドを、リード用のアドレス生成器 54とステータスレジスタ 101とに出力する。
【0144】
読み出し制御部 75cは、例えば、前段の中間層等で定められた、ライト用のチャネルストライド補正回路 105による補正後のチャネルストライドの値を、ステータスレジスタ 106から読み出す。そして、読み出し制御部 75cは、読み出したチャネルストライドの値を、後段の中間層等におけるリード用のチャネルストライドの値として暫定チャネルストライドレジスタ 51cに書き込む。
【0145】
これにより、前段の中間層等によって生成された特徴マップ FMを後段の中間層等での入力として用いることができる。なお、この際には、リード用のチャネルストライド補正回路 100による補正は不要であるため、読み出し制御部 75cは、例えば、補正が不要であることを表す制御信号をチャネルストライド補正回路 100に出力すればよい。また、ライト用のステータスレジスタ 106から読み出したチャネルストライドの値は、NNE 15に限らず、DSP 18やDMAC 17でも用いられる。
【0146】
一方、書き込み制御部 76cは、例えば、ある段の中間層等で用いられる、リード用のチャネルストライド補正回路 100による補正後のチャネルストライドの値を、ステータスレジスタ 101から読み出す。そして、書き込み制御部 76cは、読み出したチャネルストライドの値を、前段の中間層等におけるライト用のチャネルストライドの値として暫定チャネルストライドレジスタ 61cに書き込む。
【0147】
これにより、ある中間層等に入力する特徴マップ FMを基準として、前段の中間層等で出力される特徴マップ FMに適用するメモリマップを定めることができる。なお、この際には、ライト用のチャネルストライド補正回路 105による補正は不要であるため、書き込み制御部 76cは、例えば、補正が不要であることを表す制御信号をチャネルストライド補正回路 105に出力すればよい。また、リード用のステータスレジスタ 101から読み出したチャネルストライドの値は、NNE 15に限らず、DSP 18やDMAC 17でも用いられる。
【0148】
なお、当該書き込み制御部 76cでの処理は、読み出し制御部 75cでの処理と異なり、時間的に後から前に遡るような処理となる。このため、例えば、レジスタ面を2面設けること等で、リード用のチャネルストライドの値を前段の中間層等での処理を開始する前に予め確定させておく必要がある。当該予め確定させたチャネルストライドの値は、前段の中間層等での処理を行う際に、ライト用のチャネルストライドの値として設定される。
【0149】
図16は、図15とは異なる主要部の詳細な構成例を示すブロック図である。図15の場合と同様に、図16は、図14に示した構成例に対して第3の実施の形態の方式を適用したものである。図16に示される半導体装置 10は、図14に示した構成例と比較して、リードアクセスコントローラ 30dの構成と、ライトアクセスコントローラ 31dの構成と、ニューラルネットワークソフトウェアシステム 40内の読み出し制御部 75dおよび書き込み制御部 76dの構成とが異なっている。
【0150】
ライトアクセスコントローラ 31dでは、図14に示した構成に対して、ライト用のアドレス補正回路 115およびステータスレジスタ 116が加わっている。また、図14におけるライト用のアドレスレジスタユニット 91は、図16における暫定アドレスレジスタユニット 91dに置き換わっている。暫定アドレスレジスタユニット 91dには、書き込み制御部 76dによって、N個のチャネルに伴うN個の開始アドレスの暫定値が設定される。
【0151】
アドレス補正回路 115は、図14に示したライト用のアドレス補正部 96と同様の処理を専用のハードウェア回路によって行うことで、必要に応じてN個の開始アドレスの暫定値を補正する。そして、アドレス補正回路 115は、補正後のN個の開始アドレスを、ライト用の加算器 63bとステータスレジスタ 116とに出力する。
【0152】
同様に、リードアクセスコントローラ 30dでは、図14に示した構成に対して、リード用のアドレス補正回路 110およびステータスレジスタ 111が加わっている。また、図14におけるリード用のアドレスレジスタユニット 90は、図16における暫定アドレスレジスタユニット 90dに置き換わっている。暫定アドレスレジスタユニット 90dには、読み出し制御部 75dによって、N個のチャネルに伴うN個の開始アドレスの暫定値が設定される。
【0153】
アドレス補正回路 110は、図14に示したリード用のアドレス補正部 95と同様の処理を専用のハードウェア回路によって行うことで、必要に応じてN個の開始アドレスの暫定値を補正する。そして、アドレス補正回路 110は、補正後のN個の開始アドレスを、リード用の加算器 53bとステータスレジスタ 111とに出力する。読み出し制御部 75dおよび書き込み制御部 76dの動作に関しては、処理対象がチャネルストライドから各チャネルの開始アドレスに置き換わることを除いて、図15で述べた読み出し制御部 75cおよび書き込み制御部 76cの場合と同様である。
【0154】
<第3の実施の形態の主要な効果>
以上、第3の実施の形態の方式を用いることで、第1の実施の形態または第2の実施の形態で述べた各種効果と同様の効果が得られる。さらに、チャネルストライドまたは各チャネルの開始アドレスの補正を専用のハードウェア回路で行うことで、ソフトウェアの処理負荷を軽減できる。また、当該ハードウェア回路による補正結果を、ステータスレジスタを介してソフトウェアに認識させることで、ソフトウェアは、補正結果を反映して各中間層等の処理内容、具体的にはメモリマップを定めることができる。その結果、画像処理の効率を高めることが可能になる。
【0155】
(第4の実施の形態)
画像の認識精度を向上させるためのニューラルネットワークのアーキテクチャとして、CNNに限らず、例えば、ベクトル演算、行列転置(Transpose)、および行列演算(Matmul, Gemmなど)の処理を行うViT(VisionTransformer)等が知られている。ViT等のアーキテクチャでは、画像データを行列構造に置き換えて、ベクトル演算、行列転置、および行列演算が行われる。この場合、第1の実施の形態等で述べたような3次元(X方向、Y方向、チャネル方向)のデータに限らず、4次元以上も含んだD次元のデータを取り扱う必要がある。
【0156】
そこで、第4の実施の形態では、Dを2以上の整数として、第1の実施の形態等の方式をD次元、例えば4次元に拡張する。すなわち、SPM 16には、D次元のデータがPlanarフォーマットで格納される。そして、第4の実施の形態では、SPM 16に対してD次元、言い換えれば、D個の次元またはD個の軸を有する複数のデータを並列にアクセスするための方式が示される。なお、第4の実施の形態による半導体装置は、第1から第3の実施の形態で述べた各種構成と同様の構成を有する。ここでは、半導体装置 10は、図1および図9に示した構成を有するものとする。
【0157】
<4次元のデータのメモリへの格納方法について>
図17は、第4の実施の形態による半導体装置で用いられる、4次元のデータフォーマットの一例を示す模式図である。図17において、全データ数num_ALLバイトは、式(10)で表される。式(10)において、num_AX1, num_AX2, num_AX3, num_AX4は、それぞれ、1番目、2番目、3番目、4番目の次元、言い換えれば、第1軸 AX1、第2軸 AX2、第3軸 AX3、第4軸 AX4における要素数、すなわちデータ数である。
【0158】
num_ALL = num_AX1 x num_AX2 x num_AX3 x num_AX4 …(10)
【0159】
図17には、第3軸 AX3の要素数が4個であり、第4軸の要素数が3個である場合が例示される。図17に示されるように、第2軸 AX2から第4軸 AX4の要素は、メモリMRに必ずしも蜜に配置されず、各要素間に一定のストライドを設けて配置される。ここで、第1軸 AX1、第2軸 AX2、第3軸 AX3、第4軸 AX4におけるインデックス(idx)値を、それぞれ、AX1-idx, AX2-idx, AX3-idx, AX4-idxとして、4次元のデータDAT[AX4-idx][AX3-idx][AX2-idx][AX1-idx]が格納される論理アドレスLaddr_4Dは、式(11)で表される。
【0160】
Laddr_4D = AX1-idx + AX2-idx x AX2_stride + AX3-idx x AX3_stride + AX4-idx x AX4_stride …(11)
【0161】
式(11)において、例えば、画像データの場合、AX1-idxは、X方向(水平方向)のインデックス値であり、AX2-idxは、Y方向(垂直方向)のインデックス値であり、AX3-idxは、チャネル方向のインデックス値である。AX4-idxは、このような3次元の画像データを更に区別するインデックス値である。この場合、num_AX1は、Width(水平画像サイズ)であり、num_AX2は、Height(ライン数)であり、num_AX3は、チャネル数である。
【0162】
また、式(11)において、AX2_strideは、第2軸 AX2における隣り合う要素間のストライド(バイト)であり、画像データの場合にはラインストライドである。AX3_strideは、第3軸 AX3における隣り合う要素間のストライド(バイト)であり、画像データの場合はチャネルストライドである。AX4_strideは、第4軸における隣り合う要素間のストライド(バイト)である。隣り合う要素間のストライドは、隣り合う要素間でのアドレスコンフリクトを防止するため、1つ次元が低い軸の要素数以上にする必要がある。このため、式(12A)、式(12B)、式(12C)に示される制約が設けられる。
【0163】
AX2_stride >= num_AX1 …(12A)
AX3_stride >= num_AX2 x AX2_stride …(12B)
AX4_stride >= num_AX3 x AX3_stride …(12C)
【0164】
ここで、メモリコントローラ 29は、第1軸 AX1を含む2個以上の複数の軸において、同一のインデックス値を有する複数のデータがM個のメモリ MRの中の同一のメモリMRに格納されないように、SPM 16へのアクセスを制御する。この際に、ニューラルネットワークソフトウェアシステム40は、このようなアクセスが行われるように、アドレス間隔であるリードストライドおよびライトストライドを定め、定めた各ストライドをリードストライドレジスタおよびライトストライドレジスタにそれぞれ設定する。リードストライドレジスタおよびライトストライドレジスタは、それぞれ、図9におけるリード用のチャネルストライドレジスタ 51およびライト用のチャネルストライドレジスタ 61に該当する。
【0165】
すなわち、SPM 16には、Dを2以上の整数として、1個の次元における各データがインデックス(idx)値で区別されるように構成されたD次元のデータが格納される。メモリコントローラ 29は、D番目の次元におけるインデックス値の個数をN個として、1番目から<D-1>番目の次元で同一のインデックス値を有するN個のデータが、M個のメモリ MRの中の互いに異なるメモリMRにそれぞれ格納されるように、SPM 16へのアクセスを制御する。
【0166】
その結果、例えば、4次元のデータDAT[AX4-idx][AX3-idx][AX2-idx][AX1-idx]において、DAT[0][0][0][0], DAT[1][0][0][0], …, DAT[N-1][0][0][0]からなるN個のデータは、互いに異なるメモリ MRに格納される。これにより、メモリコントローラ 29は、SPM 16に対して、当該N個のデータを並列に読み出し、また、並列に書き込むことができる。
【0167】
さらに、メモリコントローラ 29は、1,2,…,D-1,D番目の次元におけるインデックス値の個数を、それぞれ、N1,N2,…,Nd-1,Nd個として、1番目から<D-1>番目の次元に含まれる<N1 x N2 x … x Nd-1>個のデータが、M個のメモリ MRの中の互いに異なるメモリMRにそれぞれ格納されるように、SPM 16へのアクセスを制御してもよい。この場合、メモリ MRの数<M>は、<N1x N2 x … x Nd-1>個以上設けられる。
【0168】
<メモリアクセスの具体例>
図18Aは、第4の実施の形態による半導体装置において、D次元フォーマットの仕様の具体例を示す図である。図18Aに示される具体例(例3)において、各変数の値は、一般的に用いられる2のべき乗となっている。各メモリ MRのビット幅 Kは、8(= 2k)バイトであり、最小データ単位のサイズ N1は、16(= 2(a+k)= A x K)バイトである。最小データ単位のサイズ N1は、第1軸 AX1における各データのサイズであり、実施の形態1等におけるピクセルグループデータ PGDのサイズ GSに該当する。
【0169】
第2軸 AX2、第3軸 AX3、第4軸 AX4、第5軸 AX5、…において並列アクセスされる最小データ単位の個数 N2,N3,N4,N5,…は、SPM 16に対して1クロックサイクルで並列に入力または出力できる最小データ単位の個数、例えばピクセルグループデータ PGDの個数である。ここでは、最小データ単位の個数 N2,N3,N4,N5,…は、それぞれ、2,2,4,1,…である。SPM 16を構成するメモリMRの個数 Mは、32(= 2m)である。並列アクセスされる最小データ単位の総数 Nは、16(= N2 x N3 x N4 x N5 …)である。並列アクセスされる総ビット幅は、最小データ単位のサイズ N1に総数 Nを乗算することで256(= 16 x 16)バイトである。
【0170】
図18Bは、図18Aに示される仕様を前提として、並列アクセスされるデータの4次元フォーマットにおける配置構成例を示す模式図である。図18Bには、4次元フォーマットにおいて、同一のクロックサイクルで並列に入出力される16個のデータ DAT0-DAT15が示される。明細書では、複数のデータ DAT0-DAT15をデータ DATと総称する。
【0171】
1個のデータ DATのサイズは、第1軸 AX1で定められる最小データ単位のサイズ N1である16バイトである。16個のデータ DAT0-DAT15は、第2軸 AX2の方向に、第2軸用のストライドAX2_strideを用いて2個配置される。同様に、16個のデータ DAT0-DAT15は、第3軸 AX3の方向に、第3軸用のストライドAX3_strideを用いて2個配置され、第4軸 AX4の方向に、第4軸用のストライドAX4_strideを用いて4個配置される。
【0172】
図18Cは、図18Bに示される各データの開始アドレスおよび終了アドレスを示す図である。各データ DATにおいて、終了アドレスは開始アドレスに対して<N1-1>を加算した値となる。また、例えば、データ DAT1の開始アドレスは、データ DAT0の開始アドレスに対して第2軸のストライド AX2_strideを加算した値となる。データ DAT2の開始アドレスは、データ DAT0の開始アドレスに対して第3軸のストライド AX3_strideを加算した値となる。データ DAT3の開始アドレスは、データ DAT2の開始アドレスに対して第2軸のストライド AX2_strideを加算した値となる。
【0173】
図18Dは、図18Aに示される仕様を前提として、CPUが実行するニューラルネットワークソフトウェアの一例を示す図である。CPU 20は、例えば、図18Dに示されるように、外側に向かうほど次元が上がる多重ループのプログラムを実行する。この際に、CPU 20は、このような多重ループに伴う演算処理を、ニューラルネットワークエンジン(NNE) 15に担わせる。これに伴い、NNE 15は、SPM 16に対して、<N1 x N2 x N3 x N4>個のデータ、ここでは16個のデータ DAT0-DAT15を入力または出力する必要がある。
【0174】
そこで、CPU 20は、図9に示したリード用のチャネルストライドレジスタ 51に該当するリードストライドレジスタ、または、ライト用のチャネルストライドレジスタ 61に該当するライトストライドレジスタに対して、例えば、式(13A)から式(13C)に示されるようなリードストライド、または、ライトストライドを設定する。すなわち、CPU 20は、第2軸用のストライド AX2_strideを、式(12A)の制約を満たしつつ、式(13A)に示されるように、<K x M>である256バイトの倍数(256n)に、サイズ N1(=16バイト)を足した値となるように補正する。サイズ N1は、前述したように、第1軸 AX1における最小データ単位、言い換えればパケットグループデータ PGDのサイズである。
【0175】
また、CPU 20は、第3軸用のストライド AX3_strideを、式(12B)の制約を満たしつつ、256バイトの倍数(256n)に、サイズ N1と個数 N2との乗算結果<N1 x N2>を足した値となるように補正する。個数 N2は、前述したように、第2軸 AX2において並列アクセスされる最小データ単位の数である。さらに、CPU 20は、第4軸用のストライド AX43_strideを、式(12C)の制約を満たしつつ、256バイトの倍数(256n)に、サイズ N1と個数 N2と個数 N3との乗算結果<N1 x N2 xN3>を足した値となるように補正する。個数 N3は、前述したように、第3軸 AX3において並列アクセスされる最小データ単位の数である。
【0176】
AX2_stride = 256n + N1 …(13A)
AX3_stride = 256n + N1 x N2 …(13B)
AX4_stride = 256n + N1 x N2 x N3 …(13C)
【0177】
これにより、図18Eに示されるようなメモリマップが形成される。図18Eは、図18Cに示される仕様を前提として、ストライド補正を行った後にスクラッチパッドメモリ(SPM)に格納される、各データのメモリマップの一例を示す図である。図18Eに示されるように、ストライド補正を行うことで、16個のデータ DAT0-DAT15は、SPM 16における互いに異なるインデックス(idx)値に割り当てられ、互いに異なるメモリMR、ここでは32個のメモリMRに格納される。これにより、NNE 15は、SPM 16に対して、16個のデータ DAT0-DAT15を並列に入出力できる。その結果、入出力レイテンシを短縮できる。
【0178】
<第4の実施の形態の主要な効果>
以上、第4の実施の形態の方式を用いることで、第1の実施の形態から第3の実施の形態で述べた各種効果と同様の効果が得られる。さらに、2次元以上であるD次元のデータを対象に、同様の効果が得られる。
【0179】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0180】
10 半導体装置
15 ニューラルネットワークエンジン(NNE)
16 スクラッチパッドメモリ(SPM)
17 DMAコントローラ(DMAC)
18 DSP
19 メインメモリ
20 CPU
25 MACユニット
29 メモリコントローラ
30 リードアクセスコントローラ
31 ライトアクセスコントローラ
40 ニューラルネットワークソフトウェアシステム
51,61 チャネルストライドレジスタ
54,64 アドレス生成器
55,65 アドレスルータ
56,66 データルータ
57 アウトスタンディングアドレスバッファ
90,91 アドレスレジスタユニット
CH[0]-CH[7] チャネル
DT 画像データ
MAC 積和演算器
MR メモリ
PD ピクセルデータ
PGD ピクセルグループデータ
WT 重みパラメータ
図1
図2
図3
図4
図5A
図5B
図6
図7
図8
図9
図10A
図10B
図10C
図10D
図10E
図11
図12
図13
図14
図15
図16
図17
図18A
図18B
図18C
図18D
図18E
図19
図20
図21
図22