(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-10
(45)【発行日】2022-03-18
(54)【発明の名称】半導体装置
(51)【国際特許分類】
G06F 9/38 20060101AFI20220311BHJP
G06F 9/48 20060101ALI20220311BHJP
G06F 15/78 20060101ALI20220311BHJP
G06F 17/16 20060101ALI20220311BHJP
【FI】
G06F9/38 370C
G06F9/48 370
G06F15/78 560
G06F17/16 M
(21)【出願番号】P 2018114861
(22)【出願日】2018-06-15
【審査請求日】2020-11-11
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成29年度 国立研究開発法人科学技術新興機構 戦略的創造研究推進事業ACCEL「近接場結合集積技術による革新的情報処理システムの実現と応用展開」委託研究、産業技術力強化法第19条の適用を受ける特許出願
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】100103894
【氏名又は名称】家入 健
(72)【発明者】
【氏名】藤井 太郎
(72)【発明者】
【氏名】戸井 崇雄
(72)【発明者】
【氏名】田中 照人
(72)【発明者】
【氏名】戸川 勝巳
【審査官】井上 宏一
(56)【参考文献】
【文献】特開2017-021483(JP,A)
【文献】特表2011-524049(JP,A)
【文献】特開2001-312481(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/48
G06F 15/78
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークの演算処理に用いられる半導体装置であって、
逐次入力される第1入力データに対してデータ処理を行うとともに、データ処理の結果を第1出力データとして逐次出力するデータ処理部と、
前記データ処理部から逐次出力される前記第1出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、
前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第1入力データとして逐次出力する第1データ転送部と、
を備え
、
前記ニューラルネットワークにおける演算処理のうち、規則的な並列積和演算処理を、前記アクセラレータが実行するように構成され、且つ、それ以外の演算処理を、回路を動的に再構成可能な前記データ処理部が実行するように構成され、
前記第1データ転送部は、
レジスタ設定によって固定的に指定され、又は、ディスクリプタに含まれるモード情報によってディスクリプタ毎に指定される出力モードが、第1出力モードである場合には、前記並列演算器を構成する複数の演算器のうち、第1演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して前記第1入力データとして逐次出力するように構成され、且つ、前記並列演算器を構成する複数の演算器のうち、前記第1演算器群とは異なる第2演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して第2入力データとして逐次出力するように構成され、
前記出力モードが第2出力モードである場合には、前記並列演算器を構成する複数の演算器のうち、前記第1演算器群としてグループ化された複数の演算器による演算処理結果、及び、前記第2演算器群としてグループ化された複数の演算器による演算処理結果を、順番に選択して前記第1入力データとして逐次出力するように構成され、
前記データ処理部は、
前記第1データ転送部の前記出力モードが前記第1出力モードである場合には、前記第1入力データに対するデータ処理と並行して、前記第2入力データに対してデータ処理を行って、当該第2入力データに対するデータ処理の結果を第2出力データとして逐次出力するように構成されている、
半導体装置。
【請求項2】
前記第1データ転送
部は、
前記出力モードが前記第1出力モードである場合、前記データ処理部の処理速度に対する前記アクセラレータの処理速度
に応じて、前記第1演算器群による複数の演算処理結果を順番に選択して前記第1入力データとして
逐次出力
し、且つ、前記第2演算器群による複数の演算処理結果を順番に選択して前記第2入力データとして逐次出力するか、前記第1演算器群による複数の演算処理結果を2つ以上ずつ纏めて
順番に選択して前記第1入力データとして
逐次出力
し、且つ、前記第2演算器群による複数の演算処理結果を2つ以上ずつ纏めて順番に選択して前記第2入力データとして逐次出力するか、を切り替え可能に構成され、
前記出力モードが前記第2出力モードである場合、前記データ処理部の処理速度に対する前記アクセラレータの処理速度に応じて、前記第1演算器群による複数の演算処理結果、及び、前記第2演算器群による複数の演算処理結果を、順番に選択して前記第1入力データとして逐次出力するか、前記第1演算器群による複数の演算処理結果を2つ以上ずつ纏め、且つ、前記第2演算器群による複数の演算処理結果を2つ以上ずつ纏めて、順番に選択して前記第1入力データとして逐次出力するか、を切り替え可能に構成されている、
請求項
1に記載の半導体装置。
【請求項3】
ニューラルネットワークの演算処理に用いられる半導体装置であって、
逐次入力される第1入力データに対してデータ処理を行うとともに、データ処理の結果を第1出力データとして逐次出力するデータ処理部と、
前記データ処理部から逐次出力される前記第1出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、
前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第1入力データとして逐次出力する第1データ転送部と、
を備え
、
前記ニューラルネットワークにおける演算処理のうち、規則的な並列積和演算処理を、前記アクセラレータが実行するように構成され、且つ、それ以外の演算処理を、回路を動的に再構成可能な前記データ処理部が実行するように構成され、
前記第1データ転送部は、
レジスタ設定によって固定的に指定され、又は、ディスクリプタに含まれるモード情報によってディスクリプタ毎に指定される出力モードが、第1出力モードである場合には、前記並列演算器を構成する複数の演算器のうち、第1演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して前記第1入力データとして逐次出力するように構成され、且つ、前記並列演算器を構成する複数の演算器のうち、前記第1演算器群とは異なる第2演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して第2入力データとして逐次出力するように構成され、且つ、前記並列演算器を構成する複数の演算器のうち、前記第1演算器群及び前記第2演算器群とは異なる第3演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して第3入力データとして逐次出力するように構成され、
前記出力モードが第2出力モードである場合には、前記並列演算器を構成する複数の演算器のうち、前記第1演算器群としてグループ化された複数の演算器による演算処理結果、前記第2演算器群としてグループ化された複数の演算器による演算処理結果、及び、前記第3演算器群としてグループ化された複数の演算器による演算処理結果を、順番に選択して前記第1入力データとして逐次出力するように構成され、
前記データ処理部は、
前記第1データ転送部の前記出力モードが前記第1出力モードである場合には、前記第1入力データに対するデータ処理と並行して、前記第2入力データに対してデータ処理を行って、当該第2入力データに対するデータ処理の結果を第2出力データとして逐次出力すると共に、前記第3入力データに対してデータ処理を行って、当該第3入力データに対するデータ処理の結果を第3出力データとして逐次出力するように構成されている、
半導体装置。
【請求項4】
前記第1データ転送
部は、
前記出力モードが前記第1出力モードである場合、前記データ処理部の処理速度に対する前記アクセラレータの処理速度
に応じて、前記第1演算器群による複数の演算処理結果を順番に選択して前記第1入力データとして
逐次出力
し、且つ、前記第2演算器群による複数の演算処理結果を順番に選択して前記第2入力データとして逐次出力し、且つ、前記第3演算器群による複数の演算処理結果を順番に選択して前記第3入力データとして逐次出力するか、前記第1演算器群による複数の演算処理結果を2つ以上ずつ纏めて
順番に選択して前記第1入力データとして
逐次出力
し、且つ、前記第2演算器群による複数の演算処理結果を2つ以上ずつ纏めて順番に選択して前記第2入力データとして逐次出力し、且つ、前記第3演算器群による複数の演算処理結果を2つ以上ずつ纏めて順番に選択して前記第3入力データとして逐次出力するか、を切り替え可能に構成され、
前記出力モードが前記第2出力モードである場合、前記データ処理部の処理速度に対する前記アクセラレータの処理速度に応じて、前記第1演算器群による複数の演算処理結果、前記第2演算器群による複数の演算処理結果、及び、前記第3演算器群による複数の演算処理結果を、順番に選択して前記第1入力データとして逐次出力するか、前記第1演算器群による複数の演算処理結果を2つ以上ずつ纏め、且つ、前記第2演算器群による複数の演算処理結果を2つ以上ずつ纏め、且つ、前記第3演算器群による複数の演算処理結果を2つ以上ずつ纏めて、順番に選択して前記第1入力データとして逐次出力するか、を切り替え可能に構成されている、
請求項
3に記載の半導体装置。
【請求項5】
第2データ転送部をさらに備え、
前記第2データ転送部は、前記第1演算器群としてグループ化された複数の演算器に対し
て前記第1出力データを出力する
ように構成され、且つ、前記データ処理部から前記第2出力データが出力された場合には、前記第2演算器群としてグループ化された複数の演算器に対して前記第2出力データを出力するように構成されている、
請求項
1に記載の半導体装置。
【請求項6】
第2データ転送部をさらに備え、
前記第2データ転送部は、レジスタ設定によって固定的に指定され、又は、ディスクリプタに含まれるモード情報によってディスクリプタ毎に指定される入力モードに応じて、前記第1演算器群としてグループ化された複数の演算器に対し
て前記第1出力データ
の一部を出力
し、且つ、前記第2演算器群としてグループ化された複数の演算器に対して前記第1出力データの残りを出力するか、又は、前記データ処理部から前記第2出力データが出力された場合において、前記第1演算器群としてグループ化された複数の演算器に対して前記第1出力データを出力し、且つ、前記第2演算器群としてグループ化された複数の演算器に対して前記第2出力データを出力するか、を切り替え可能に構成されている、
請求項
1に記載の半導体装置。
【請求項7】
第2データ転送部をさらに備え、
前記第2データ転送部は、レジスタ設定によって固定的に指定され、又は、ディスクリプタに含まれるモード情報によってディスクリプタ毎に指定される入力モードに応じて、前記第1出力データを前記第1演算器群に対して出力し、且つ、前記第2出力データを前記第2演算器群に対して出力するか、又は、前記第1出力データ及び前記第2出力データを順番に選択して前記第1演算器群に対して出力すると共に、
前記第1出力データ及び前記第2出力データを順番に選択して前記第2演算器群に対しても出力
するか、を切り替え可能に構成されている、
請求項
1に記載の半導体装置。
【請求項8】
第2データ転送部をさらに備え、
前記第2データ転送部は、前記データ処理部の処理速度に対する前記アクセラレータの処理速度に基づいて、前記第1出力データを前記第1演算器群に対して出力し、且つ、前記第2出力データを前記第2演算器群に対して出力するか、又は、前記第1出力データ及び前記第2出力データを順番に選択して前記第1演算器群に対して出力すると共に、前記第1出力データ及び前記第2出力データを順番に選択して前記第2演算器群に対しても出力するか、を切り替え可能に構成されている、
請求項
1に記載の半導体装置。
【請求項9】
前記アクセラレータは、
前記複数の所定データが格納されるローカルメモリをさらに有する、
請求項1に記載の半導体装置。
【請求項10】
前記並列演算器を構成する複数の演算器のうち、第1演算器群としてグループ化された複数の演算器、及び、第2演算器群としてグループ化された複数の演算器には、前記ローカルメモリから読み出された共通の前記複数の所定データが供給される、
請求項
9に記載の半導体装置。
【請求項11】
前記並列演算器を構成する複数の演算器のうち、第1演算器群としてグループ化された複数の演算器、及び、第2演算器群としてグループ化された複数の演算器には、前記ローカルメモリから読み出されたそれぞれ異なる前記複数の所定データが供給される、
請求項
9に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は半導体装置及びその制御方法に関し、例えば効率の良い演算処理を実現するのに適した半導体装置及びその制御方法に関する。
【背景技術】
【0002】
演算処理を行う装置には、CPU(Central Processing Unit)以外にも、処理性能の高い動的再構成プロセッサ(DRP(Dynamically Reconfigurable Processor)、アレイ型プロセッサとも称す)がある。動的再構成プロセッサは、逐次与えられる動作命令に従って、複数のプロセッサエレメントのそれぞれの演算内容、及び、複数のプロセッサエレメント間の接続関係を動的に切り替えることにより、回路を動的に再構成することが可能なプロセッサである。動的再構成プロセッサに関する技術は、例えば、特許文献1にアレイ型プロセッサとして開示されている。
【0003】
その他、非特許文献1及び非特許文献2には、並列演算処理に関する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【非特許文献】
【0005】
【文献】"SIMD", [online], [平成30年1月26日検索], インターネット<URL:https://ja.wikipedia.org/wiki/SIMD>
【文献】"GoogleのTensor Processing Unit(TPU)で機械学習が30倍速くなるメカニズム", [online], [平成30年1月26日検索], インターネット<URL:https://cloudplatform-jp.googleblog.com/2017/05/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu.html>
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に開示されたDRPでは、例えばディープラーニング処理等の大規模な演算処理を行うには処理性能が不十分であるという問題があった。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態によれば、半導体装置は、逐次入力される第1入力データに対してデータ処理を行うとともに、データ処理の結果を第1出力データとして逐次出力するデータ処理部と、前記データ処理部から逐次出力される前記第1出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第1入力データとして逐次出力する第1データ転送部と、を備える。
【0008】
他の実施の形態によれば、半導体装置の制御方法は、データ処理部を用いて、逐次入力される第1入力データに対して演算処理を行うとともに、演算処理の結果を第1出力データとして逐次出力し、アクセラレータを用いて、前記データ処理部から逐次出力される前記第1出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行い、前記アクセラレータから出力された複数の演算処理結果を順番に選択して前記第1入力データとして逐次出力する。
【発明の効果】
【0009】
前記一実施の形態によれば、効率の良い演算処理を実現することが可能な半導体装置及びその制御方法を提供することができる。
【図面の簡単な説明】
【0010】
【
図1】実施の形態1にかかる半導体装置が搭載された半導体システムの構成例を示すブロック図である。
【
図2】
図1に示す半導体装置の具体的な構成例を示すブロック図である。
【
図3】
図2に示す並列演算器MAC256_0の構成例を示すブロック図である。
【
図4】ニューラルネットワーク構造の例を示す図である。
【
図5】ニューラルネットワークの演算処理の流れを模式的に示す図である。
【
図6】実施の形態1にかかる半導体システムの処理の流れを示すタイミングチャートである。
【
図8】ローカルメモリに格納される初期設定情報を説明するための図である。
【
図9】行列データInの1行目のデータと、行列データWと、の乗算式を具体的に示す図である。
【
図10】実施の形態1にかかるアクセラレータの具体的な構成例を示す図である。
【
図11】動的再構成プロセッサのデータ出力及びデータ入力の関係を説明するためのタイミングチャートである。
【
図12】アクセラレータによる各層の行列データに対する演算処理の関係を説明するためのタイミングチャートである。
【
図13】実施の形態1にかかる半導体システムの動作を示すフローチャートである。
【
図14】比較例にかかるアクセラレータの構成例を示す図である。
【
図15】並列演算器MAC64_0の具体的な構成例を示す図である。
【
図16】並列演算器MAC64_0の第1の変形例を示す図である。
【
図17】並列演算器MAC64_0の第2の変形例を示す図である。
【
図18】並列演算器MAC64_0の第3の変形例を示す図である。
【
図19】並列演算器MAC64_0の第4の変形例を示す図である。
【
図20】並列演算器MAC64_0の第5の変形例を示す図である。
【
図21】並列演算器MAC64_0の第6の変形例を示す図である。
【
図22】入力モードが第1入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図23】入力モードが第2入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図24】入力モードが第3入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図25】入力モードが第4入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図26】入力モードが第5入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図27】入力モードが第6入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図28】入力モードが第7入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。
【
図29】出力モードが第1出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図30】出力モードが第2出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図31】出力モードが第3出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図32】出力モードが第4出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図33】出力モードが第5出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図34】出力モードが第6出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図35】出力モードが第7出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。
【
図36】入力データに対して並列度を最大にして演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
【
図37】入力データに対して並列度を最小にして演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
【
図38】入力データに対して並列度を中程度にして演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
【
図39】2つの入力データのそれぞれに対して並列演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
【
図40】実施の形態2にかかる半導体装置が搭載された半導体システムの構成例を示すブロック図である。
【発明を実施するための形態】
【0011】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0012】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD-ROM(Read Only Memory)、CD-R、CD-R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0013】
<実施の形態1>
図1は、実施の形態1にかかる半導体装置1が搭載された半導体システムSYS1の構成例を示すブロック図である。本実施の形態にかかる半導体装置1は、並列に演算処理を行う並列演算器を有するアクセラレータと、データ授受を逐次行う動的再構成プロセッサ等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して逐次出力するデータ転送部と、を備える。それにより、本実施の形態にかかる半導体装置1及びそれを備えた半導体システムSYS1は、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、効率の良い演算処理を実現することができる。以下、具体的に説明する。
【0014】
図1に示すように、半導体システムSYS1は、半導体装置1と、CPU2と、外部メモリ3と、を備える。半導体装置1は、動的再構成プロセッサ(以下、DRPと称す)11と、アクセラレータ12と、データ転送部13と、データ転送部14と、DMA(Direct Memory Access)15と、を備える。
【0015】
DRP11は、例えば外部メモリ3から逐次入力されるデータに対して演算処理を実行して、その演算処理の結果をデータDQoutとして逐次出力する。このように、DRP11は、毎サイクルのデータ授受が可能なものである。ここで、DRP11は、DRP11内に備えられている構成情報メモリから読み出される動作命令に従って、複数のプロセッサエレメントのそれぞれの演算内容、及び、複数のプロセッサエレメント間の接続関係を動的に切り替えることにより、回路を動的に再構成することが可能なデータ処理部である。
【0016】
例えば、DRP11は、アレイ状に設けられた複数のプロセッサエレメントと、複数のプロセッサエレメントに対応して設けられた複数のスイッチエレメントと、状態管理部と、を備える。状態管理部は、予めプログラムにより決められた命令ポインタを各プロセッサエレメントに発行する。各プロセッサエレメントは、例えば、命令メモリ及び演算ユニットを少なくとも有する。演算ユニットは、命令メモリに格納された複数の動作命令のうち、状態管理部からの命令ポインタによって指定された動作命令に従って演算処理を実行する。演算ユニットは、例えば16ビット幅のデータに対して演算処理を行う16ビット演算器であるが、その他のビット幅のデータに対して演算処理を行う演算器であってもよい。あるいは、演算ユニットは、複数の演算器によって構成されていてもよい。また、各スイッチエレメントは、対応するプロセッサエレメントの命令メモリから読み出された動作命令に従って、対応するプロセッサエレメントと他のプロセッサエレメントとの間の接続関係を設定する。それにより、DRP11は、逐次与えられる動作命令に従って動的に回路構成を切り替えることができる。
【0017】
なお、本実施の形態では、半導体装置1にDRP11が設けられた場合を例に説明しているが、これに限られない。逐次入力されるデータに対して演算処理を実行するものであれば、例えばDRP11の代わりにCPUが設けられていてもよい。
【0018】
データ転送部13は、データDQoutを、例えば並列演算部121に要求される演算処理の並列度に応じて分配したり逐次化したりして、データDPinとして出力する。
【0019】
アクセラレータ12は、データ転送部13から逐次出力されるデータDPinと、n(nは2以上の整数)個の所定データD_0~D_(n-1)のそれぞれと、の間で並列に演算処理を行う。なお、以下では、所定データD_0~D_(n-1)を区別せずに単に所定データDとも称す場合がある。
【0020】
具体的には、アクセラレータ12は、並列演算部121と、ローカルメモリ122と、を備える。ローカルメモリ122には、例えば、外部メモリ3から読み出された複数の所定データD_0~D_(n-1)及びバイアス値bなどの初期設定情報が格納されている。
【0021】
例えば、k行×m列の行列データを構成するk×m個の要素がデータDPinとしてアクセラレータ12に逐次入力される場合、1行分のデータであるm個のデータがk行分、即ち、k×m個のデータがアクセラレータ12に逐次入力されることになる。しかし、アクセラレータ12では、kの値に関わらず、1行分の入力データであるm個のデータの各々に対して、所定データD_0~D_(n-1)が演算処理に用いられる。そのため、ローカルメモリ122には、入力データ1行分のデータであるm個のデータの各々に対応するn個の所定データD_0~D_(n-1)、即ち、m×n個のデータが格納されていることになる。並列演算部121は、並列に演算処理を行う複数の演算器によって構成され、データDPinと、複数の所定データD_0~D_(n-1)のそれぞれと、の間で並列に演算処理を行い、n個の演算処理結果をデータDPoutとして出力する。
【0022】
データ転送部14は、アクセラレータ12から並列に出力されたn個のデータDPoutを順番に選択して、データDQinとして順次出力する。
【0023】
DRP11は、データ転送部14から逐次出力されるデータDQinに対して演算処理を実行し、その演算処理の結果を例えば外部メモリ3に向けて逐次出力する。
【0024】
CPU2は、例えば外部メモリ3から読み出された制御命令に従い、半導体装置1の動作を制御する。具体的には、CPU2は、アクセラレータ12及びデータ転送部13,14の各動作を詳細に指示するデータ列(ディスクリプタ)を用意して、外部メモリ3に格納する。
【0025】
DMA15は、ディスクリプタを外部メモリ3から読み出して内容を解釈し、アクセラレータ12及びデータ転送部13,14に対して動作の指示を出す。例えば、DMA15は、ディスクリプタに記載された指示に従って、外部メモリ3に格納された初期設定情報をローカルメモリ122に転送する。また、DMA15は、データ転送部13に対して、並列演算部121による演算処理の並列度等に応じてデータDPinを分配させたり逐次化させたりするように指示する。さらに、DMA15は、データ転送部14に対して、並列演算部121による演算処理の並列度等に応じて並列に出力されたn個のデータDPoutを合成させたり逐次化させたりするように指示する。
【0026】
1つのディクスリプタで指定された動作が完了すると、DMA15は、次のディスクリプタを外部メモリ3から読み出し、再びアクセラレータ12及びデータ転送部13,14に対して動作の指示を出す。なお、ディスクリプタは一つ前に読み出されたディスクリプタによる動作の完了前に先行して読み出されることが好ましい。それにより、処理レイテンシを隠蔽することができる。
【0027】
なお、上記したディスクリプタは、CPU2によって用意される代わりに、DRP11において動作しているプログラムから出力されてもよいし、予め生成しておいたものを使用しても良い。
【0028】
図2は、半導体装置1の具体的な構成例を示すブロック図である。
図2の例では、DRP11は、4チャネルの64ビット幅のデータDQoutをデータDQout_0~DQout_3として出力している。なお、当然ながら、DRP11は、4チャネルのデータDQout_0~DQout_3を出力する場合に限られず、任意のチャネル数及び任意のビット幅の少なくも何れかのデータを出力する構成に適宜変更可能である。
【0029】
また、
図2の例では、データ転送部13は、DRP11から逐次出力される64ビット幅のデータDQout_0~DQout_3をそのままデータDPin_0~DPin_3として出力している。なお、
図2の例では、各データDPin_0~DPin_3が、浮動小数点方式によって表される4つの16ビット幅の演算結果を束ねることによって64ビット幅のデータを構成しているが、これに限られない。例えば1~3つの16ビット幅の演算結果を束ねることによってそれぞれ16ビット幅、32ビット幅、48ビット幅のデータを構成していてもよい。
【0030】
並列演算部121は、例えば、並列演算器MAC256_0~MAC256_3を備える。並列演算器MAC256_0~MAC256_3は、何れも並列に演算処理を行う256個の演算器によって構成されている。データDPin_0~DPin_3は、それぞれ並列演算器MAC256_0~MAC256_3に入力されている。
【0031】
並列演算器MAC256_0は、64ビット幅(16ビット幅×4組)のデータDPin_0に対して、最大で256個(64個を1組として4組分)の演算器を用いて並列に演算処理を実行することにより、最大で256個の演算処理結果を出力することが可能である。
【0032】
同様にして、並列演算器MAC256_1は、64ビット幅(16ビット幅×4組)のデータDPin_1に対して、最大で256個(64個を1組として4組分)の演算器を用いて並列に演算処理を実行することにより、最大で256個の演算処理結果を出力することが可能である。並列演算器MAC256_2は、64ビット幅(16ビット幅×4組)のデータDPin_2に対して、最大で256個(64個を1組として4組分)の演算器を用いて並列に演算処理を実行することにより、最大で256個の演算処理結果を出力することが可能である。並列演算器MAC256_3は、64ビット幅(16ビット幅×4組)のデータDPin_3に対して、最大で256個の演算器を用いて並列に演算処理を実行することにより、最大で256個の演算処理結果を出力することが可能である。
【0033】
図3は、並列演算器MAC256_0の構成例を示すブロック図である。なお、
図3には、並列演算器MAC256_0の前後に設けられたデータ転送部13,14も示されている。
【0034】
図3に示すように、並列演算器MAC256_0は、並列演算器MAC64_0~MAC64_3を備える。並列演算器MAC64_0~MAC64_3は、何れも並列に演算処理を行う64個の演算器によって構成されている。
【0035】
64ビット幅のデータDPin_0の第0ビット~第15ビット(以下、データDPin_00と称す)は、並列演算器MAC64_0に入力されている。64ビット幅のデータDPin_0の第16ビット~第31ビット(以下、データDPin_01と称す)は、並列演算器MAC64_1に入力されている。64ビット幅のデータDPin_0の第32ビット~第47ビット(以下、データDPin_02と称す)は、並列演算器MAC64_2に入力されている。64ビット幅のデータDPin_0の第48ビット~第63ビット(以下、データDPin_03と称す)は、並列演算器MAC64_3に入力されている。
【0036】
並列演算器MAC64_0は、16ビット幅のデータDPin_00に対して、最大で64個の演算器を用いて並列に演算処理を実行し、最大で64個の16ビット幅の演算処理結果を出力することが可能である。並列演算器MAC64_1は、16ビット幅のデータDPin_01に対して、最大で64個の演算器を用いて並列に演算処理を実行し、最大で64個の16ビット幅の演算処理結果を出力することが可能である。並列演算器MAC64_2は、16ビット幅のデータDPin_02に対して、最大で64個の演算器を用いて並列に演算処理を実行し、最大で64個の16ビット幅の演算処理結果を出力することが可能である。並列演算器MAC64_3は、16ビット幅のデータDPin_03に対して、最大で64個の演算器を用いて並列に演算処理を実行し、最大で64個の16ビット幅の演算処理結果を出力することが可能である。
【0037】
なお、並列演算器MAC256_1~MAC256_1については、並列演算器MAC256_0の場合と同様の構成であるため、その説明を省略する。
【0038】
図2に戻って説明を続ける。
つまり、並列演算器MAC256_0は、64ビット幅(16ビット幅×4組)のデータDPin_0に対して演算処理を実行して、最大で64個の16ビット幅の演算処理結果を4組分、データDPout_0として出力する。
【0039】
同様にして、並列演算器MAC256_1は、データDPin_1に対して演算処理を実行して、最大で64個の16ビット幅の演算処理結果を4組分、データDPout_1として出力する。並列演算器MAC256_2は、データDPin_2に対して演算処理を実行して、最大で64個の16ビット幅の演算処理結果を4組分、データDPout_2として出力する。並列演算器MAC256_3は、データDPin_3に対して演算処理を実行して、最大で64個の16ビット幅の演算処理結果を4組分、データDPout_3として出力する。
【0040】
データ転送部14は、例えば、並列演算器MAC256_0から並列に出力された4組の64個の16ビット幅のデータDPout_0を、各組において1個ずつ順番に選択して、4組の16ビット幅のデータDQin_0(即ち、64ビット幅のデータDQin_0)として逐次出力する。このように、データ転送部14は、各組から1個ずつ16ビット幅のデータを選択して逐次出力してもよいし、一組の64個の16ビット幅のデータを出力してから、次の組の64個の16ビット幅のデータを出力するように、一組毎に全データを優先して逐次出力してもよいが、これに限定されることはない。また、データ転送部14のデータ出力方法はモードによって切り替えられるようにしてもよい。
【0041】
同様にして、データ転送部14は、例えば、並列演算器MAC256_1から並列に出力された4組の64個の16ビット幅のデータDPout_1を、各組において1個ずつ順番に選択して、4組の16ビット幅のデータDQin_1(即ち、64ビット幅のデータDQin_1)として逐次出力する。また、データ転送部14は、例えば、並列演算器MAC256_2から並列に出力された4組の64個の16ビット幅のデータDPout_2を、各組において1個ずつ順番に選択して、4組の16ビット幅のデータDQin_2(即ち、64ビット幅のデータDQin_2)として逐次出力する。データ転送部14は、例えば、並列演算器MAC256_3から並列に出力された4組の64個の16ビット幅のデータDPout_3を、各組において1個ずつ順番に選択して、4組の16ビット幅のデータDQin_3(即ち、64ビット幅のデータDQin_3)として逐次出力する。
【0042】
これら64ビット幅のデータDQin_0~DQin_3は、DRP11に入力される。DRP11は、データDQin_0~DQin_3に対して演算処理を実行して、演算処理結果をそれぞれ外部メモリ3に向けて逐次出力する。なお、データDQin_0~DQin_3は、データDQout_0~DQout_3の演算に用いられてもよい。
【0043】
このように、本実施の形態にかかる半導体装置1は、並列に演算処理を行う並列演算器を有するアクセラレータと、データの授受を逐次行うDRP等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して出力するデータ転送部と、を備える。それにより、本実施の形態にかかる半導体装置及びそれを備えた半導体システムは、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、例えば、ディープラーニング処理等の大規模な演算処理おいても効率の良い演算処理を実現することができる。
【0044】
以下、
図4及び
図5を用いて、本実施の形態にかかる半導体装置1を用いたニューラルネットワークの演算方法を説明する。
図4は、ニューラルネットワーク構造の例を示す図である。
図5は、ニューラルネットワークの演算処理の流れを模式的に示す図である。
【0045】
図4に示すように、ニューラルネットワークの演算は、入力データに対して重みづけw(w’)を乗じる積和演算を行い、その結果に対して活性化等の演算を行い、演算結果を出力する、という手順をとる。
【0046】
図5に示すように、DRP11は、外部メモリ3からアクセラレータ12の演算処理に必要なデータを読み出し(ステップS1)、必要に応じて演算器やデータの並べ替えを行う(ステップS2)。その後、外部メモリ3から読み出されたデータは、アクセラレータ12の入力データとして、DRP11からアクセラレータ12に逐次出力される(ステップS3)。アクセラレータ12は、DRP11から逐次出力されたデータに対して、受け取ったデータから順に、ローカルメモリに格納されたデータ(重みづけに対応)を乗じることにより並列積和演算処理を行う(ステップS4)。アクセラレータ12による演算結果は、DRP11に逐次出力される(ステップS5)。DRP11は、アクセラレータ12から受け取ったデータに対して、必要に応じて足し合わせや活性化等の演算を行う(ステップS6)。DRP11による演算結果は、外部メモリ3に格納される(ステップS7)。このような処理によってニューラルネットワークの処理を実現し、この処理を繰り返すことで、ディープラーニングに必要な演算処理を実行させることができる。
【0047】
このように、ニューラルネットワークでは、必要な演算処理のうち、規則的な並列積和演算処理をアクセラレータ12で実行することで、高速性を実現することが可能となる。また、規則的な並列積和演算処理以外の演算処理を、回路を動的に再構成可能なDRP(動的再構成プロセッサ)11で実行することで、異なる層(
図5の例では第一層と第二層)での活性化等の処理を柔軟に設定可能となる。また、DRP11は、アクセラレータ12での同時に処理可能な並列演算規模に合わせて、積和演算に必要な入力データを分割して外部メモリ3から読み出してアクセラレータ12に出力するように回路構成を再構成することも可能である。それにより、並列演算部121の演算形式の自由度を持たせることもできる。
【0048】
続いて、半導体システムSYS1の動作について、
図6を用いて説明する。
図6は、半導体システムSYS1の処理の流れを示すタイミングチャートである。
【0049】
以下では、アクセラレータ12によって行列演算が実行される場合を例に説明する。
図7は、行列演算式を模式的に示した図である。
図7の例では、k行×m列の要素からなる行列データInと、m行×n列の要素からなる行列データWと、の乗算を行い、その乗算結果の各要素に対してバイアス値bを加算した結果を、k行×n列の要素からなる行列データOutとして出力している。
【0050】
アクセラレータ12によって第1層の行列データInに対する演算処理が実行される場合、まず、第1層の行列データInに対応する行列データW及びバイアス値b等の初期設定情報がアクセラレータ12のローカルメモリ122に格納される(
図6の時刻t1~t2)(
図8参照)。より具体的には、DMA15が、CPU2が生成したディスクリプタの指示に従って、外部メモリ3から読み出された初期設定情報をローカルメモリ122に転送する。なお、DMA15とは別にアクセラレータ12専用のDMA(不図示)を設け、このアクセラレータ12専用のDMAを用いて外部メモリ3から読み出された初期設定情報をローカルメモリ122に転送してもよい。
【0051】
その後、外部メモリ3から行列データInの1行目のデータ(以下、行データIn1とも称す)が読み出される(
図6の時刻t2)。DRP11は、外部メモリ3から読み出された行データIn1に対して必要に応じて所定の処理を施したうえでアクセラレータ12に向けて出力する(
図6の時刻t3)。
【0052】
アクセラレータ12は、ローカルメモリ122から読み出されたバイアス値bを初期値として並列演算部121の各演算器に設定した後、行データIn1(データDPinに相当)と、ローカルメモリ122から読み出された行列データW(所定データDに相当)と、の演算処理を行う(
図6の時刻t4)。
【0053】
図9は、行データIn1(行列データInの1行目のデータ)と、行列データWと、の乗算式の具体例を示す図である。なお、
図9の例では、行データIn1が20列の要素b0~b19によって構成されているものとする。また、行列データWでは、1行目のデータが20列の要素a0,0 a0,1 ・・・ a0,19によって構成され、2行目のデータが20列の要素a1,0 a1,1 ・・・ a1,19によって構成され、最終行である20行目のデータが20列の要素a19,0 a19,1 ・・・ a19,19によって構成されているものとする。
【0054】
ここで、アクセラレータ12は、行データIn1の各列の要素(例えばb0)と、行列データWの各行の20列の要素(例えばa0,0 a0,1 ・・・ a0,19)のそれぞれと、で並列に乗算処理を行い、その後、各列において20個分の乗算結果を加算することにより、行列データOutの各列の要素を算出している。
【0055】
図10は、アクセラレータ12の具体的な構成例を示す図である。
図10の例では、並列演算部121に設けられた複数の演算器のうち20個の演算器121_0~121_19が使用されている。各演算器121_0~121_19は、乗算器MX1と、加算器AD1と、レジスタRG1と、レジスタRG2と、を有する。
【0056】
演算器121_j(jは0~19の何れか)では、まず、ローカルメモリ122から読み出されたバイアス値bが初期値としてレジスタRG1に設定される(バイアス値bは
図10において不図示)。
【0057】
その後、乗算器MX1は、行データIn1の一列目の要素b0(16ビット幅のデータDPinに相当)と、ローカルメモリ122から読み出された行列データWの1行目のデータの要素a0,j(16ビット幅の所定データD_jに相当)と、を乗算する。加算器AD1は、乗算器MX1による乗算結果(a0,j×b0)と、レジスタRG1に格納されている値(バイアス値b)と、を加算して、加算結果をレジスタRG1に転送する。
【0058】
その後、乗算器MX1は、続いて入力された行データIn1の二列目の要素b1と、ローカルメモリ122から読み出された行列データWの2行目のデータの要素a1,jと、を乗算する。加算器AD1は、乗算器MX1による乗算結果(a1,j×b1)と、レジスタRG1に格納されている値(a0,j×b0)と、を加算して、加算結果をレジスタRG1に転送する。
【0059】
上述のような乗算、加算、格納の動作が20サイクル繰り返されることにより、レジスタRG1には、行列データOutの1行目のデータの要素にあたる((a0,j×b0)+(a1,j×b1)+・・・+(a19,j×b19))が格納される。その後、レジスタRG1に格納されたこの値は、レジスタRG2に転送され、レジスタRG2に格納された値は、行列データOutの1行目のデータの要素として出力される(
図6の時刻t5以降)。
【0060】
なお、レジスタRG1からレジスタRG2へのデータ転送が完了すると(
図6の時刻t5)、行列データInの次の行である2行目のデータ(行データIn2とも称す)に対する演算器121_jによる演算処理を開始することができる(
図6の時刻t6)。それにより、アクセラレータ12は、レジスタRG2に格納された演算処理結果をデータ転送部14に転送しつつ(
図6の時刻t7~t10に相当)、行データIn2に対する並列演算処理を実行することができる(
図6の時刻t6~t9)。それにより、並列演算処理の効率を高めることができる。
【0061】
そのため、DRP11は、行列データInの1行目のデータIn1の出力完了後、かつ、3行目のデータIn3の出力開始前、の期間である2行目のデータIn2の出力期間中に、アクセラレータ12による行データIn1の演算処理結果を取り込むように処理することが好ましい(
図11参照)。
【0062】
データ転送部14は、演算器121_0~121_19から出力された20個の16ビット幅の演算処理結果(データDPoutに相当)を順番に選択して、16ビット幅のデータDQinとして逐次出力する。換言すると、データ転送部14は、行列データOutの1行目の20列の要素をデータDQinとして逐次出力する。逐次出力されたデータDQinは、DRP11によって受信される(
図6の時刻t7~t10)。
【0063】
DRP11では、例えば、加算器AD2がデータ転送部14から逐次出力されるデータDQinに対して加算処理を実行したり、演算器TN1が双曲線正接関数に基づいて所定の演算処理を実行したり、乗算器MX2が乗算処理を実行したりする。その処理結果は、例えば、外部メモリ3に書き込まれる(
図6の時刻t8~t11)。
【0064】
アクセラレータ12において、第1層の行列データInの1行目からk行目までの全ての行データについての演算処理が完了すると、続いて、第2層の行列データInについても同様の演算処理が行われる。なお、第2層の行列データInについての演算処理が行われる前に、第2層の行列データInに対応する初期設定情報(行列データW及びバイアス値b)がローカルメモリ122に格納される。アクセラレータ12では、このような並列演算処理が繰り返される。
【0065】
なお、ローカルメモリ122は、行列データInに対応する初期設定情報(行列データW及びバイアス値b)を少なくとも2層分格納できる程度の記憶領域を有することが好ましい。それにより、第1層の行列データInに対する行列演算の実行中に、第2層の行列データInに対する演算処理に用いられる初期設定情報を、ローカルメモリ122の空き領域に転送することができる。それにより、第1層の行列データに対する演算処理の完了後、初期設定情報の転送を待つことなく、速やかに第2層の行列データに対する行列演算を実行することができる(
図12参照)。なお、この場合には、ローカルメモリ122は、データの読み出し及び書き込みを同時に行うことが可能に構成されていることが好ましい。
【0066】
他方、ローカルメモリ122が、1層分の行列データInに対応する初期設定情報を格納できる程度の記憶領域を有していない場合、あるいは、1層分の行列データInに対応する初期設定情報を格納できる記憶領域を有している場合でも、当該初期設定情報は分割して格納されてもよい。以下、
図13を用いて簡単に説明する。
【0067】
図13は、半導体システムSYS1の動作を示すフローチャートである。
図13の例では、ローカルメモリ122が、第3層の行列データInに対応する初期設定情報を格納できる程度の記憶領域を有していないものとする。
【0068】
図13に示すように、まず、第1層の行列データInに対応する初期設定情報がローカルメモリ122に格納される(ステップS101)。その後、第1層の行列データInに対する演算処理が並列演算部121によって実行される(ステップS102)。その後、第2層の行列データInに対応する初期設定情報がローカルメモリ122に格納される(ステップ103)。その後、第2層の行列データInに対する演算処理が並列演算部121によって実行される(ステップS104)。その後、第3層の行列データInの一部に対応する初期設定情報がローカルメモリ122に格納される(ステップS105)。その後、第3層の行列データInの一部に対する演算処理が並列演算部121によって実行される(ステップS106)。その後、第3層の行列データInの残りに対応する初期設定情報がローカルメモリ122に格納される(ステップS107)。その後、第3層の行列データInの残りに対する演算処理が並列演算部121によって実行される(ステップS108)。その後、ステップS106において実行された演算処理の結果と、ステップS108において実行された演算処理の結果と、をDRP11において加算する(ステップS109)。それにより、第3層の行列データInに対する演算処理を実現することが可能となる。
【0069】
このように、本実施の形態にかかる半導体装置1は、並列に演算処理を行う並列演算器を有するアクセラレータと、データの授受を逐次行うDRP等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して出力するデータ転送部と、を備える。それにより、本実施の形態にかかる半導体装置及びそれを備えた半導体システムは、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、例えば、ディープラーニング処理等の大規模な演算処理おいても効率の良い演算処理を実現することができる。
【0070】
本実施の形態では、各演算器121_0~121_19が、乗算器MX1、加算器AD1、及び、レジスタRG1に加えて、レジスタRG2を有する場合を例に説明したが、これに限られない。各演算器121_0~121_19は、乗算器MX1、加算器AD1、及び、レジスタRG1のみを備え、レジスタRG2を備えていなくてもよい。それにより、回路規模がさらに抑制される。
【0071】
また、本実施の形態では、バイアス値bがローカルメモリ122内に格納される場合を例に説明したが、これに限られない。例えば、バイアス値bは、ローカルメモリ122とは別に設けられたレジスタ等に格納されても良いし、バイアス値bを0等の固定値にしてローカルメモリ11内に格納しないようにしても良い。
【0072】
図14は、比較例に係るアクセラレータ52の構成例を示す図である。
図14に示すように、アクセラレータ52では、各演算器121_0~121_19が、乗算器MX1、加算器AD1、レジスタRG1、加算器AD2、演算器TN1及び乗算器MX2を備えている。つまり、アクセラレータ52では、アクセラレータ12の場合にはDRP11に設けられていた加算器AD2、演算器TN1及び乗算器MX2を、各演算器121_0~121_19が備えている。
【0073】
しかしながら、アクセラレータ52では、各演算器において、乗算器MX1、加算器AD1及びレジスタRG1による演算処理が20サイクル繰り返された後、加算器AD2、演算器TN1及び乗算器MX2による演算処理が1サイクルのみ実行されるにすぎない。つまり、アクセラレータ52では、複数の演算器の全てに、使用頻度の低い加算器AD2、演算器TN1及び乗算器MX2が設けられているため、回路規模が増大してしまうという問題がある。
【0074】
それに対し、アクセラレータ12では、各演算器121_0~121_19が、使用頻度の低い加算器AD2、演算器TN1及び乗算器MX2を備えておらず、これら演算器は、DRP11の前段において構成され共通利用されている。それにより、回路規模の増大を抑制することができる。
【0075】
(並列演算器を構成する複数の演算器の具体的な構成例)
続いて、並列演算部121に設けられた複数の演算器の具体的な構成例を説明する。
図15は、並列演算器MAC64_0の具体的な構成例を示す図である。
図15に示すように、並列演算器MAC64_0は、並列に演算処理を行う64個の演算器121_0~121_63を備える。各演算器121_0~121_63は、乗算器MX1、加算器AD1、レジスタRG1、及び、レジスタRG2を備える。ここで、各演算器121_0~121_63における乗算器MX1、加算器AD1、レジスタRG1、及び、レジスタRG2のパスは、16ビット幅のデータに対して所定の演算処理を施して16ビット幅のデータを出力する。
【0076】
並列演算器MAC64_1~MAC64_3については、並列演算器MAC64_0の構成と同様であるため、その説明を省略する。
【0077】
(並列演算器を構成する複数の演算器の第1の変形例)
図16は、並列演算器MAC64_0の第1の変形例を並列演算器MAC64a_0として示す図である。
図16に示すように、並列演算器MAC64a_0は、64個の演算器121a_0~121a_63を備える。各演算器121a_0~121a_63は、セレクタSL1、乗算器MX1、加算器AD1、レジスタRG1、及び、レジスタRG2を有する。
【0078】
ここで、セレクタSL1は、ローカルメモリ122から読み出された16ビットのデータを1ビットずつ順次選択して出力する。乗算器MX1、加算器AD1、レジスタRG1、及び、レジスタRG2のパスは、セレクタSL1から出力された1ビット幅のデータと、データ転送部13からの16ビット幅のデータと、を用いて演算処理を行い、16ビット幅のデータを出力する。
【0079】
このように、並列演算器MAC64a_0は、ローカルメモリ122から読み出された1ビット幅のデータに対して演算処理を施す場合でも、ローカルメモリ122から16ビット幅のデータを読み出した後、16ビット幅のデータの中から1ビットずつ順次選択して演算処理を施すことにより、ローカルメモリ122からの読み出し回数の増大を抑制することができる。その結果、消費電力を削減することが可能である。
【0080】
並列演算器MAC64a_1~MAC64a_3については、並列演算器MAC64a_0の構成と同様であるため、その説明を省略する。
【0081】
なお、ローカルメモリ122から読み出された1ビット幅のデータに対して演算処理を施す場合、乗算処理は、データ転送部13からのデータに対して、+1及び-1の何れかを乗ずることを意味する。そのため、積和演算は、レジスタRG1に格納されたデータに対して、データ転送部13からのデータを加算又は減算することになる。これは、
図17に示すような並列演算器の構成でも実現可能である。
【0082】
(並列演算器を構成する複数の演算器の第2の変形例)
図17は、並列演算器MAC64_0の第2の変形例を並列演算器MAC64b_0として示す図である。
図17に示すように、並列演算器MAC64b_0は、64個の演算器121b_0~121b_63を備える。各演算器121b_0~121b_63は、セレクタSL1、加算器AD1、減算器SB1、セレクタSL2、レジスタRG1、及び、レジスタRG2を有する。
【0083】
ここで、セレクタSL1は、ローカルメモリ122から読み出された16ビットのデータを1ビットずつ順次選択して出力する。加算器AD1は、データ転送部13からの16ビット幅のデータと、レジスタRG1に格納されたデータと、を加算する。減算器SB1は、データ転送部13からの16ビット幅のデータからレジスタRG1に格納されたデータを減算する。セレクタSL2は、セレクタSL1から出力された1ビット幅のデータの値に基づいて、加算器AD1による加算結果、及び、減算器SB1による減算結果、の何れかを選択して出力する。セレクタSL2から出力されたデータは、レジスタRG1に格納される。その後、レジスタRG1に格納されたデータは、レジスタRG2に格納された後、データ転送部14に出力される。
【0084】
並列演算器MAC64b_0は、並列演算器MAC64a_0と同様の動作を実現することができる。
【0085】
並列演算器MAC64b_1~MAC64b_3については、並列演算器MAC64b_0の構成と同様であるため、その説明を省略する。
【0086】
(並列演算器を構成する複数の演算器の第3の変形例)
図18は、並列演算器MAC64_0の第3の変形例を並列演算器MAC64c_0として示す図である。
図18に示すように、並列演算器MAC64c_0は、64個の演算器121c_0~121c_63を備える。各演算器121c_0~121c_63は、データ転送部13からの16個の1ビットデータと、ローカルメモリ122から読み出された16個の1ビットデータと、の間の演算処理を1ビット単位で行うものである。
【0087】
各演算器121c_0~121c_63は、乗算器MX1、加算器AD1、レジスタRG1、及び、レジスタRG2からなるパスを16個備える。ここで、各パスは、データ転送部13からの16個の1ビットデータの一つと、ローカルメモリ122から読み出された16個の1ビットデータの一つと、を用いて演算処理を行い、1ビットデータを出力する。この1ビットデータは、ハードウェアでは1、0の2値で表現されているが、これら1、0の値は、意味としてはそれぞれ+1,-1として計算に用いられる。
【0088】
このように、並列演算器MAC64c_0は、データ転送部13からの1ビットデータと、ローカルメモリ122から読み出された1ビットデータと、を用いて演算処理を行う場合でも、16ビットデータパスを用いてデータ転送及び読み出しを行うことにより、1ビットデータに対する演算処理を16個並列に行うことができる。
【0089】
なお、
図18に示す構成の動作は、
図19に示すような並列演算器の構成でも実現可能である。
【0090】
(並列演算器を構成する複数の演算器の第4の変形例)
図19は、並列演算器MAC64_0の第4の変形例を並列演算器MAC64d_0として示す図である。
図19に示すように、並列演算器MAC64d_0は、64個の演算器121d_0~121d_63を備える。各演算器121d_0~121d_63は、否定排他的論和(XNOR)回路XNR1、ポップカウンタCNT1、加算器AD1、レジスタRG1、及び、レジスタRG2を有する。
【0091】
XNOR回路XNR1は、データ転送部13からの16個の1ビットデータと、ローカルメモリ122から読み出された16個の1ビットデータと、の否定排他的論理和を1ビット単位で行って出力する。ポップカウンタCNT1は、XNOR回路XNR1の出力値を2進数単位で見たときに、その出力値の“1”の個数をカウントする。ここで、ポップカウンタCNT1の出力値は、データ転送部13からの16ビットのデータと、ローカルメモリ122から読み出された16ビットのデータと、をそれぞれ2進数で見た場合に、互いの値が一致するビットの個数を表している。このポップカウンタCNT1の出力データは、加算器AD1によって、レジスタRG1に格納されたデータに加算される。ただし、本来は+1,-1とすべき値を1,0として演算しているため、出力値を補正する必要がある。なお、補正に必要なバイアス値を予め加工しておくことで対応することも可能である。
【0092】
このように、並列演算器MAC64d_0は、データ転送部13からの16個の1ビットデータと、ローカルメモリ122から読み出された16個の1ビットデータと、の間の1ビット単位の演算処理を16個並列に行って、これらを加算したうえで、16ビットのデータとして出力している。それにより、並列演算器MAC64d_0は、並列演算器MAC64d_0と同様の動作を実現することができる。
【0093】
並列演算器MAC64d_1~MAC64d_3については、並列演算器MAC64d_0の構成と同様であるため、その説明を省略する。
【0094】
(並列演算器を構成する複数の演算器の第5の変形例)
図20は、並列演算器MAC64_0の第5の変形例を並列演算器MAC64e_0として示す図である。並列演算器MAC64e_0は、64個の演算器121e_0~121e_63を備える。
【0095】
演算器121e_0~121e_63は、演算器121d_0~121d_63と比較して、レジスタRG1に格納された16ビット幅のデータを1ビット幅のデータに変換する1ビット化回路CNV1をさらに備える。1ビット化回路CNV1は、例えば、バイアス値を活用して、演算結果が負の時は0、それ以外では1を出力することで、活性化後の値を1ビット値として出力することが可能になる。この場合、データ転送部14には、演算器121e_0~121e_63からの64個の1ビットデータが入力されることになる。なお、データ転送部14は、64個の1ビットデータを16個ずつ束ねて16ビット幅のデータとして出力することも可能である。それにより、データ転送部14は、64個の1ビットデータを4サイクルで出力することができる。
【0096】
(並列演算器を構成する複数の演算器の第6の変形例)
図21は、並列演算器MAC64_0の第6の変形例を並列演算器MAC64f_0として示す図である。並列演算器MAC64f_0は、64個の演算器121e_0~121e_63を備える。
【0097】
演算器121e_0は、演算器(演算回路)121_0、121a_0、121c_0、121e_0及びセレクタSL3を備える。セレクタSL3は、演算器121_0、121a_0、121c_0、121e_0の何れかをモードに応じて選択して出力する。演算器121e_1~121e_63については、演算器121e_0の構成と同様であるため、その説明を省略する。なお、演算器121e_0の一部は演算器121c_0の一部と回路を共通化することができ、1bit化回路を介さず16ビットのまま出力するか、1bit化回路を介して出力するのかを選択するようにしてもよい。また、モードは、例えば、CPUがレジスタ設定することによって固定的に指定されても良いし、ディスクリプタに指定先のモードの情報を記載しておき、ディスクリプタ毎に指定されても良い。
【0098】
このように、並列演算器MAC64f_0は、要求される演算精度、メモリ使用量、スループットに応じて演算処理の内容を切り替えることができる。並列演算器MAC64e_1~MAC64e_3については、並列演算器MAC64e_0の構成と同様であるため、その説明を省略する。
【0099】
(データ転送部13によるデータ転送の例)
続いて、データ転送部13によるDRP11からアクセラレータ12へのデータ転送の例について説明する。以下では、DRP11からデータ転送部13を介してアクセラレータ12にデータが入力される動作のモード(以下、入力モードと称す)に応じた、データ転送部13によるデータ転送の例について説明する。
【0100】
図22は、入力モードが第1入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、64ビット(16ビット×4)のデータDQout_0をそのままデータDPin_0として出力する。そして、64ビットのデータDPin_0を構成する16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0101】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0102】
図23は、入力モードが第2入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、32ビット(16ビット×2)のデータDQout_0を構成する16ビットのデータDQout_00,DQout_02のうち、データDQout_00を2つに分配して16ビットのデータDPin_00,DPin_01として出力するとともに、データDQout_02を2つに分配して16ビットのデータDPin_02,DPin_03として出力する。これら16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0103】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0104】
図24は、入力モードが第3入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、16ビットのデータDQout_0を4つに分配して16ビットのデータDPin_00~DPin_03として出力する。これら16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0105】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0106】
図25は、入力モードが第4入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、64ビット(16ビット×4)のデータDQout_0を構成する16ビットのデータDQout_00~DQout_03のうち、16ビットのデータDQout_00,DQout_01を交互に選択し(
図25の例では、B1、B2、B3、B4の順に選択し)、かつ、その選択結果を2つに分配して16ビットのデータDPin_00,DPin_01として出力する。また、残りの16ビットのデータDQout_02,DQout_03を交互に選択し(
図25の例では、A1、A2、A3、A4の順に選択し)、かつ、その選択結果を2つに分配して16ビットのデータDPin_02,DPin_03として出力する。これら16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0107】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0108】
このとき、アクセラレータ12には、それぞれの入力端子において、DRP11の1回の出力処理で出力されるデータの2個分が入力されることになる。したがって、アクセラレータ12の処理速度をDRP11の処理速度の2倍にするとバランスが良い。また、アクセラレータ12の処理性能を最大限に活かすためには、アクセラレータ12の処理速度がDRP11の処理速度の2倍より少し遅くなるように調整すると好ましい。なお、DRP11から間欠的にデータが出力される場合には、その間欠度合いに応じてDRP11の処理速度を上げるとアクセラレータ12の処理性能を最大限に活かせるようになり好ましくなる。
【0109】
図26は、入力モードが第5入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、32ビット(16ビット×2)のデータDQout_0を構成する16ビットのデータDQout_00,DQout_01を交互に選択し(
図26の例では、A1、A2、A3、A4の順に選択し)、かつ、その選択結果を4つに分配して16ビットのデータDPin_00~DPin_03として出力する。これら16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0110】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0111】
このとき、アクセラレータ12には、それぞれの入力端子において、DRP11の1回の出力処理で出力されるデータの2個分が入力されることになる。したがって、アクセラレータ12の処理速度をDRP11の処理速度の2倍にするとバランスが良い。また、アクセラレータ12の処理性能を最大限に活かすためには、アクセラレータ12の処理速度がDRP11の処理速度の2倍より少し遅くなるように調整すると好ましい。なお、DRP11から間欠的にデータが出力される場合には、その間欠度合いに応じてDRP11の処理速度を上げるとアクセラレータ12の処理性能を最大限に活かせるようになり好ましくなる。
【0112】
図27は、入力モードが第6入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、48ビット(16ビット×3)のデータDQout_0を構成する16ビットのデータDQout_00~DQout_02を順番に選択し(
図27の例では、A1、A2、A3、A4、A5、A6の順に選択し)、かつ、その選択結果を4つに分配して16ビットのデータDPin_00~DPin_03として出力する。これら16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0113】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0114】
このとき、アクセラレータ12には、それぞれの入力端子において、DRP11の1回の出力処理で出力されるデータの3個分が入力されることになる。したがって、アクセラレータ12の処理速度をDRP11の処理速度の3倍にするとバランスが良い。また、アクセラレータ12の処理性能を最大限に活かすためには、アクセラレータ12の処理速度がDRP11の処理速度の3倍より少し遅くなるように調整すると好ましい。なお、DRP11から間欠的にデータが出力される場合には、その間欠度合いに応じてDRP11の処理速度を上げるとアクセラレータ12の処理性能を最大限に活かせるようになり好ましくなる。
【0115】
図28は、入力モードが第7入力モードである場合における、データ転送部13、及び、アクセラレータ12の並列演算器MAC256_0を示す図である。この場合、データ転送部13は、選択回路131を用いて、64ビット(16ビット×4)のデータDQout_0を構成する16ビットのデータDQout_00~DQout_03を順番に選択し(
図28の例では、A1、A2、A3、A4、A5、A6、A7、A8の順に選択し)、かつ、その選択結果を4つに分配して16ビットのデータDPin_00~DPin_03として出力する。これら16ビットのデータDPin_00~DPin_03は、それぞれ並列演算器MAC64_0~MAC64_3に入力される。
【0116】
データ転送部13と並列演算器MAC256_1~MAC256_3との関係については、データ転送部13と並列演算器MAC256_0との関係と同様であるため、その説明を省略する。
【0117】
このとき、アクセラレータ12には、それぞれの入力端子において、DRP11の1回の出力処理で出力されるデータの4個分が入力されることになる。したがって、アクセラレータ12の処理速度をDRP11の処理速度の4倍にするとバランスが良い。また、アクセラレータ12の処理性能を最大限に活かすためには、アクセラレータ12の処理速度がDRP11の処理速度の4倍より少し遅くなるように調整すると好ましい。なお、DRP11から間欠的にデータが出力される場合には、その間欠度合いに応じてDRP11の処理速度を上げるとアクセラレータ12の処理性能を最大限に活かせるようになり好ましくなる。
【0118】
このように、本実施の形態に係る半導体装置1は、DRP11からデータ転送部13を介してアクセラレータ12に入力されるデータに対する並列演算処理の並列度を任意に変更することができる。なお、アクセラレータ12の処理スループットに合うようDRP11からのデータ出力レートを調整するとデータ処理の効率が良い。特に、アクセラレータ12の処理スループットよりもDRP11からのデータ出力レートを少し速くなるようにしておくと、アクセラレータ12の処理性能を最大限に活かすことができる。
【0119】
(データ転送部14によるデータ転送の例)
続いて、データ転送部14によるアクセラレータ12からDRP11へのデータ転送の例について説明する。以下では、アクセラレータ12からデータ転送部14を介してDRP11に向けてデータが出力される動作のモード(以下、出力モードと称す)に応じた、データ転送部14によるデータ転送の例について説明する。なお、後述するデータDPout_00~DPout_03によってデータDPout_0が構成されている。
【0120】
図29は、出力モードが第1出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、選択回路141を用いて、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02として逐次出力する。さらに、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03として逐次出力する。即ち、データ転送部14は、16ビットのデータDQin_00~DQin_03からなる64ビット幅のデータDQin_0を逐次出力する。
【0121】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0122】
図30は、出力モードが第2出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、第1の選択回路141_1及び第2の選択回路141_2からなる選択回路141を備える。
【0123】
まず、選択回路141_1は、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02として逐次出力する。また、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03として逐次出力する。
【0124】
その後、選択回路141_2は、16ビットのデータDQin_00を出力した後に、続けて16ビットのデータDQin_01を出力する。また、それに並行して、16ビットのデータDQin_02を出力した後に、続けて16ビットのデータDQin_03を出力する。即ち、データ転送部14は、選択回路141_2から出力されるデータDQin_00およびDQin_01のいずれか一方と、データDQin_02およびDQin_03のいずれか一方からなる32ビット幅のデータDQin_0を逐次出力する。
【0125】
なお、データ転送部14は、選択回路141_2を用いて、16ビットのデータDQin_00と、16ビットのデータDQin_01と、を交互に出力してもよい。また、16ビットのデータDQin_02と、16ビットのデータDQin_03と、を交互に出力してもよい。
【0126】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0127】
図31は、出力モードが第3出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、第1の選択回路141_1及び第2の選択回路141_2からなる選択回路141を備える。
【0128】
まず、選択回路141_1は、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02として逐次出力する。また、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03として逐次出力する。
【0129】
その後、選択回路141_2は、16ビットのデータDQin_00~DQin_03の中から1個ずつ順番に選択して16ビット幅のデータDQin_0として逐次出力する。
【0130】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0131】
図32は、出力モードが第4出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、第1の選択回路141_1及び第2の選択回路141_2からなる選択回路141を備える。
【0132】
まず、選択回路141_1は、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00(
図32の例では、C1,C2,C3,C4・・・)として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01(
図32の例では、D1,D2,D3,D4・・・)として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02(
図32の例では、E1,E2,E3,E4・・・)として逐次出力する。また、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03(
図32の例では、F1,F2,F3,F4・・・)として逐次出力する。
【0133】
その後、選択回路141_2は、16ビットのデータDQin_00と、16ビットのデータDQin_01と、を交互に(本例では4要素ずつ交互に)かつ2個分のデータを纏めて32ビットのデータとして出力する。また、それに並行して、16ビットのデータDQin_02と、16ビットのデータDQin_03と、を順番に(本例では4要素ずつ順番に)かつ2個分のデータを纏めて32ビットのデータとして出力する。即ち、データ転送部14は、64ビット幅のデータDQin_0を逐次出力する。
【0134】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0135】
このとき、DRP11には、アクセラレータ12から出力されるデータの2分の1の速度でデータが入力される。したがって、特にアクセラレータ12の処理速度がDRP11の処理速度の2倍程度である場合、アクセラレータ12がDRP11の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ12から出力されるデータの転送速度をDRP11の処理速度まで低下させることができる。
【0136】
図33は、出力モードが第5出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、第1の選択回路141_1及び第2の選択回路141_2からなる選択回路141を備える。
【0137】
まず、選択回路141_1は、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00(
図33の例では、C1,C2,C3,C4・・・)として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01(
図33の例では、D1,D2,D3,D4・・・)として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02(
図33の例では、E1,E2,E3,E4・・・)として逐次出力する。また、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03(
図33の例では、F1,F2,F3,F4・・・)として逐次出力する。
【0138】
その後、選択回路141_2は、16ビットのデータDQin_00~DQin_03を順番に(本例では4要素ずつ順番に)かつ2個分のデータを纏めて32ビット幅のデータDQin_0として逐次出力する。
【0139】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0140】
このとき、DRP11には、アクセラレータ12から出力されるデータの2分の1の速度でデータが入力される。したがって、特にアクセラレータ12の処理速度がDRP11の処理速度の2倍程度である場合、アクセラレータ12がDRP11の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ12から出力されるデータの転送速度をDRP11の処理速度まで低下させることができる。
【0141】
図34は、出力モードが第6出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、第1の選択回路141_1及び第2の選択回路141_2からなる選択回路141を備える。
【0142】
まず、選択回路141_1は、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00(
図34の例では、C1,C2,C3,C4・・・)として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01(
図34の例では、D1,D2,D3,D4・・・)として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02(
図34の例では、E1,E2,E3,E4・・・)として逐次出力する。また、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03(
図34の例では、F1,F2,F3,F4・・・)として逐次出力する。
【0143】
その後、選択回路141_2は、16ビットのデータDQin_00~DQin_03を順番に(本例では4要素ずつ順番に)かつ3個分のデータを纏めて48ビット幅のデータDQin_0として逐次出力する。
【0144】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0145】
このとき、DRP11には、アクセラレータ12から出力されるデータの3分の1の速度でデータが入力される。したがって、特にアクセラレータ12の処理速度がDRP11の処理速度の3倍程度である場合、アクセラレータ12がDRP11の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ12から出力されるデータの転送速度をDRP11の処理速度まで低下させることができる。
【0146】
図35は、出力モードが第7出力モードである場合における、アクセラレータ12の並列演算器MAC256_0、及び、データ転送部14を示す図である。この場合、データ転送部14は、第1の選択回路141_1及び第2の選択回路141_2からなる選択回路141を備える。
【0147】
まず、選択回路141_1は、並列演算器MAC64_0から並列に出力された最大64個の16ビットのデータDPout_00の中から1個ずつ順番に選択して16ビットのデータDQin_00(
図35の例では、C1,C2,C3,C4・・・)として逐次出力する。また、並列演算器MAC64_1から並列に出力された最大64個の16ビットのデータDPout_01の中から1個ずつ順番に選択して16ビットのデータDQin_01(
図35の例では、D1,D2,D3,D4・・・)として逐次出力する。また、並列演算器MAC64_2から並列に出力された最大64個の16ビットのデータDPout_02の中から1個ずつ順番に選択して16ビットのデータDQin_02(
図35の例では、E1,E2,E3,E4・・・)として逐次出力する。また、並列演算器MAC64_3から並列に出力された最大64個の16ビットのデータDPout_03の中から1個ずつ順番に選択して16ビットのデータDQin_03(
図35の例では、F1,F2,F3,F4・・・)として逐次出力する。
【0148】
その後、選択回路141_2は、16ビットのデータDQin_00~DQin_03を順番(本例では4要素ずつ順番に)にかつ4個分のデータを纏めて64ビット幅のデータDQin_0として逐次出力する。
【0149】
並列演算器MAC256_1~MAC256_3とデータ転送部14との関係については、並列演算器MAC256_0とデータ転送部14との関係と同様であるため、その説明を省略する。
【0150】
このとき、DRP11には、アクセラレータ12から出力されるデータの4分の1の速度でデータが入力される。したがって、特にアクセラレータ12の処理速度がDRP11の処理速度の4倍程度である場合、アクセラレータ12がDRP11の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ12から出力されるデータの転送速度をDRP11の処理速度まで低下させることができる。
【0151】
このように、本実施の形態に係る半導体装置1は、アクセラレータ12からデータ転送部14を介してDRP11に向けて出力されるデータを、任意のビット幅のデータに変更することができる。なお、アクセラレータ12の処理性能を最大限に活かすには、アクセラレータ12の出力データレートよりDRP11が受け取るデータレートが少し高くなるようにすることが好ましい。
【0152】
図36は、入力データに対して並列度を最大にして演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
図36に示すように、DRP11から出力されたデータDQout_0は、データ転送部13によって、データDPin_0~DPin_3として、各並列演算器MAC256_0~MAC256_3に設けられた並列演算器MAC64_0~MAC64_3のそれぞれに分配供給される。このとき、並列演算部121は、最大で1024個の演算器を用いて、データDQout_0(データDPin_0~DPin_3)に対して並列に演算処理を実行することができる。なお、データ転送部14は、1024個の演算器のそれぞれから並列に出力された演算処理結果を選択的に出力するように構成されることにより、これらの演算処理結果を所望のビット幅のデータに変換してDRP11に向けて出力することができる。
【0153】
図37は、入力データに対して並列度を最小単位にして演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
図37に示すように、DRP11から出力されたデータDQout_0は、データ転送部13によって、データDPin_0として、並列演算器MAC256_0に設けられた並列演算器MAC64_0に供給される。このとき、並列演算部121は、並列演算器MAC64_0に設けられた64個の演算器のうち1個~64個の範囲の演算器を用いて、データDQout_0(データDPin_0)に対して並列に演算処理を実行することができる。
【0154】
図38は、入力データに対して並列度を中程度にして演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
図38の例では、DRP11から出力されたデータDQout_0が、データ転送部13によって、データDPin_0,DPin_1として、並列演算器MAC256_0に設けられた並列演算器MAC64_0~MAC64_3、及び、並列演算器MAC256_0に設けられた並列演算器MAC64_0~MAC64_2のそれぞれに分配供給されている。ここで、並列演算部121は、例えば400個の演算器を用いて、データDQout_0(データDPin_0,DPin_1)に対して並列に演算処理を実行することができる。
【0155】
図39は、2つの入力データのそれぞれに対して並列演算処理を行った場合における並列演算部121の演算処理の流れを示す図である。
図39の例では、DRP11から出力されたデータDQout_0が、データ転送部13によって、データDPin_0,DPin_1として、並列演算器MAC256_0に設けられた並列演算器MAC64_0~MAC64_3、及び、並列演算器MAC256_1に設けられた並列演算器MAC64_0~MAC64_2のそれぞれに分配供給されている。さらに、DRP11から出力されたデータDQout_2が、データ転送部13によって、データDPin_2として、並列演算器MAC256_2に設けられた並列演算器MAC64_0,MAC64_1のそれぞれに分配供給されている。このとき、並列演算部121は、例えば400個の演算器を用いて、データDQout_0(データDPin_0,DPin_1)に対して並列に演算処理を実行するとともに、例えば120個の別の演算器を用いて、データDQout_2(データDPin_2)に対して並列に演算処理を実行することができる。
【0156】
なお、2つ以上の入力データに対してそれぞれ異なる複数の演算器を用いて演算処理を実行する場合には、例えば、一方の入力データに対する演算処理に用いられる複数の演算器と、他方の入力データに対する演算処理に用いられる複数の演算器と、には、ローカルメモリ122から読み出された個別の所定データが供給されてもよいし、共通の所定データが供給されてもよい。
【0157】
<実施の形態2>
図40は、実施の形態2にかかる半導体装置1aが搭載された半導体システムSYS1aの構成例を示すブロック図である。
図40に示す半導体装置1aは、
図1に示す半導体装置1と比較して、DRP11に代えてDRP11aを備える。
【0158】
DRP11aは、例えば、2つの状態管理部(STC;State Transition Controller)111,112を有し、一方の状態管理部111を用いて、外部メモリ3から読み出されたデータに対して演算処理を行ってその処理結果をアクセラレータ12に向けて出力するとともに、他方の状態管理部112を用いて、アクセラレータ12から出力されたデータに対して演算処理を行ってその処理結果を外部メモリ3に書き込んでいる。つまり、DRP11aは、アクセラレータ12に送信するデータの処理と、アクセラレータ12から受信したデータの処理と、をそれぞれ独立して動作させている。それにより、DRP11aでは、DRP11の場合よりも、動的再構成を実行する際に与えられる動作命令(アプリケーション)をより簡易なものにすることができる。また、それによって、DRP11aは、DRP11の場合よりも容易に回路の再構成を行うことが可能となる。
【0159】
また、DRP11aは、アクセラレータ12に送信するデータの処理と、アクセラレータ12から受信したデータの処理と、をそれぞれ独立して動作させる2つの状態管理部を備えることにより、例えば、外部メモリ3から読み出されたデータが入力される外部入力端子、アクセラレータ12に向けたデータが出力される外部出力端子、アクセラレータ12からのデータが入力される外部入力端子、及び、外部メモリ3に向けた書き込みデータが出力される外部出力端子、の配置の自由度を高めることができる。
【0160】
以上のように、上記実施の形態1,2にかかる半導体装置は、並列に演算処理を行う並列演算器を有するアクセラレータと、データの授受を逐次行うDRP等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して出力するデータ転送部と、を備える。それにより、上記実施の形態1,2にかかる半導体装置及びそれを備えた半導体システムは、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、例えば、ディープラーニング処理等の大規模な演算処理おいても効率の良い演算処理を実現することができる。
【0161】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【0162】
上記実施の形態1,2では、並列演算部121を構成する複数の演算器に対して、ローカルメモリ122から読み出された個別の所定データがそれぞれ供給される場合について説明したが、これに限られない。並列演算部121を構成する複数の演算器の全部又はグループに対して、ローカルメモリ122から読み出された共通の所定データが供給されていてもよい。この場合、ローカルメモリ122の回路規模及び消費電力を低減させることが可能となる。
【0163】
上記実施の形態の一部または全部は、以下の付記のようにも記載され得るが、以下には限られない。
【0164】
(付記1)
逐次入力される第1入力データに対してデータ処理を行うとともに、データ処理の結果を第1出力データとして逐次出力するデータ処理部と、
前記データ処理部から逐次出力される前記第1出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、
前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第1入力データとして逐次出力する第1データ転送部と、
を備えた、半導体装置。
【0165】
(付記2)
前記データ処理部は、
逐次与えられる動作命令に基づいて動的に再構成可能なプロセッサである、
付記1に記載の半導体装置。
【0166】
(付記3)
付記1に記載の半導体装置と、
外部メモリと、
前記外部メモリから読み出された制御命令に基づいて前記半導体装置の動作を制御する制御部と、
を備えた、半導体システム。
【符号の説明】
【0167】
1 半導体装置
2 CPU
3 外部メモリ
11 DRP
12 アクセラレータ
13 データ転送部
14 データ転送部
15 DMA
111,112 状態管理部
121 並列演算部
121_0~121_63 並列演算器
122 ローカルメモリ
131 選択回路
141 選択回路
AD1 加算器
AD2 加算器
MX1 乗算器
MAC64_0~MAC64_3 並列演算器
MAC256_0~MAC256_3 並列演算器
MX2 乗算器
RG1 レジスタ
RG2 レジスタ
SYS1 半導体システム
TN1 双曲線正接関数の演算器