(57)【要約】【課題】効率の良い演算処理を実現することが可能な半導体装置及びその制御方法を提供すること。【解決手段】一実施の形態によれば、半導体装置１は、逐次入力される入力データに対してデータ処理を行うとともに、データ処理の結果を出力データとして逐次出力する動的再構成プロセッサ１１と、動的再構成プロセッサ１１から逐次出力される出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータ１２と、アクセラレータ１２によって保持された複数の演算処理結果を順番に選択して動的再構成プロセッサ１１に向けて出力するデータ転送部１４と、を備える。【選択図】図１
2019219753.tif 000002
【特許請求の範囲】
【請求項１】
逐次入力される第１入力データに対してデータ処理を行うとともに、データ処理の結果を第１出力データとして逐次出力するデータ処理部と、
前記データ処理部から逐次出力される前記第１出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、
前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第１入力データとして逐次出力する第１データ転送部と、
を備えた、半導体装置。
【請求項２】
前記第１データ転送部は、
前記並列演算器を構成する複数の演算器のうち、第１演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して前記第１入力データとして出力するように構成されている、
請求項１に記載の半導体装置。
【請求項３】
前記第１データ転送部は、さらに、
前記並列演算器を構成する複数の演算器のうち、前記第１演算器群とは異なる第２演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して第２入力データとして逐次出力するように構成され、
前記データ処理部は、
前記第１入力データと並行して前記第２入力データに対してさらにデータ処理を行うように構成されている、
請求項２に記載の半導体装置。
【請求項４】
前記第１データ転送部は、さらに、
前記第１及び前記第２演算器群のそれぞれによる複数の演算処理結果を順番に選択して前記第１入力データとして出力可能に構成されている、
請求項３に記載の半導体装置。
【請求項５】
前記第１データ転送部では、前記データ処理部の処理速度に対する前記アクセラレータの処理速度に基づいて、前記第１演算器群による複数の演算処理結果を順番に選択して前記第１入力データとして出力するか、前記第１演算器群による複数の演算処理結果を２つ以上ずつ纏めて選択して前記第１入力データとして出力するか、の何れかが設定される、
請求項３に記載の半導体装置。
【請求項６】
前記第１データ転送部は、さらに、
前記並列演算器を構成する複数の演算器のうち、前記第１及び前記第２演算器群とは異なる第３演算器群としてグループ化された複数の演算器による演算処理結果を順番に選択して第３入力データとして逐次出力するように構成され、
前記データ処理部は、
前記第１及び前記第２入力データと並行して前記第３入力データに対してさらにデータ処理を行うように構成されている、
請求項３に記載の半導体装置。
【請求項７】
前記第１データ転送部は、さらに、
前記第１乃至前記第３演算器群のそれぞれによる複数の演算処理結果を順番に選択して前記第１入力データとして出力可能に構成されている、
請求項６に記載の半導体装置。
【請求項８】
前記第１データ転送部では、前記データ処理部の処理速度に対する前記アクセラレータの処理速度に基づいて、前記第１演算器群による複数の演算処理結果を順番に選択して前記第１入力データとして出力するか、前記第１演算器群による複数の演算処理結果を２つ以上ずつ纏めて選択して前記第１入力データとして出力するか、の何れかが設定される、
請求項６に記載の半導体装置。
【請求項９】
前記並列演算器を構成する複数の演算器のうち、第１演算器群としてグループ化された複数の演算器に対して選択的に前記第１出力データを出力する第２データ転送部をさらに備えた、
請求項１に記載の半導体装置。
【請求項１０】
前記データ処理部は、
前記第１出力データと並行して第２出力データをさらに逐次出力するように構成され、
前記第２データ転送部は、さらに、
前記並列演算器を構成する複数の演算器のうち、前記第１演算器群とは異なる第２演算器群としてグループ化された複数の演算器に対して選択的に前記第２出力データを出力するように構成されている、
請求項９に記載の半導体装置。
【請求項１１】
前記第２データ転送部は、さらに、
前記データ処理部から逐次出力される前記第２出力データを、又は、前記データ処理部から逐次出力される前記第１出力データを、選択的に前記第２演算器群に対して出力するように構成されている、
請求項１０に記載の半導体装置。
【請求項１２】
前記第２データ転送部は、さらに、
前記第１出力データ及び前記第２出力データを順番に選択して前記第１演算器群に対して出力すると共に、前記第２演算器群に対しても出力可能に構成されている、
請求項１０に記載の半導体装置。
【請求項１３】
前記第２データ転送部では、前記データ処理部の処理速度に対する前記アクセラレータの処理速度に基づいて、前記データ処理部から逐次出力される前記第１及び前記第２出力データをそれぞれ前記第１及び前記第２演算器群に対して出力するか、前記第１出力データ及び前記第２出力データを順番に選択してその選択結果を前記第１及び前記第２演算器群のそれぞれに対して出力するか、の何れかが設定される、
請求項１０に記載の半導体装置。
【請求項１４】
前記並列演算器を構成する複数の演算器の各々は、
演算処理内容の異なる複数の演算回路と、
前記複数の演算回路の出力結果を選択的に出力するセレクタと、
を備えた、請求項１に記載の半導体装置。
【請求項１５】
前記データ処理部は、外部メモリから読み出されたデータに対してデータ処理した結果を前記第１出力データとして逐次出力するとともに、逐次入力される第１入力データに対してデータ処理した結果を前記外部メモリに出力する、
請求項１に記載の半導体装置。
【請求項１６】
前記データ処理部は、
前記第１出力データを生成するための演算処理を制御する第１状態管理部と、
前記第１入力データに対する演算処理を制御する、前記第１状態管理部とは異なる第２状態管理部と、
を備えた、請求項１５に記載の半導体装置。
【請求項１７】
前記アクセラレータは、
前記複数の所定データが格納されるローカルメモリをさらに有する、
請求項１に記載の半導体装置。
【請求項１８】
前記並列演算器を構成する複数の演算器のうち、第１演算器群としてグループ化された複数の演算器、及び、第２演算器群としてグループ化された複数の演算器には、前記ローカルメモリから読み出された共通の前記複数の所定データが供給される、
請求項１７に記載の半導体装置。
【請求項１９】
前記並列演算器を構成する複数の演算器のうち、第１演算器群としてグループ化された複数の演算器、及び、第２演算器群としてグループ化された複数の演算器には、前記ローカルメモリから読み出されたそれぞれ異なる前記複数の所定データが供給される、
請求項１７に記載の半導体装置。
【請求項２０】
データ処理部を用いて、逐次入力される第１入力データに対して演算処理を行うとともに、演算処理の結果を第１出力データとして逐次出力し、
アクセラレータを用いて、前記データ処理部から逐次出力される前記第１出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行い、
前記アクセラレータから出力された複数の演算処理結果を順番に選択して前記第１入力データとして逐次出力する、
半導体装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置及びその制御方法に関し、例えば効率の良い演算処理を実現するのに適した半導体装置及びその制御方法に関する。
【背景技術】
【０００２】
演算処理を行う装置には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）以外にも、処理性能の高い動的再構成プロセッサ（ＤＲＰ（Ｄｙｎａｍｉｃａｌｌｙ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐｒｏｃｅｓｓｏｒ）、アレイ型プロセッサとも称す）がある。動的再構成プロセッサは、逐次与えられる動作命令に従って、複数のプロセッサエレメントのそれぞれの演算内容、及び、複数のプロセッサエレメント間の接続関係を動的に切り替えることにより、回路を動的に再構成することが可能なプロセッサである。動的再構成プロセッサに関する技術は、例えば、特許文献１にアレイ型プロセッサとして開示されている。
【０００３】
その他、非特許文献１及び非特許文献２には、並列演算処理に関する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３６７４５１５号公報
【非特許文献】
【０００５】
【非特許文献１】"SIMD", [online], [平成３０年１月２６日検索], インターネット<URL:https://ja.wikipedia.org/wiki/SIMD>
【非特許文献２】"GoogleのTensor Processing Unit(TPU)で機械学習が30倍速くなるメカニズム", [online], [平成３０年１月２６日検索], インターネット<URL:https://cloudplatform-jp.googleblog.com/2017/05/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示されたＤＲＰでは、例えばディープラーニング処理等の大規模な演算処理を行うには処理性能が不十分であるという問題があった。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、半導体装置は、逐次入力される第１入力データに対してデータ処理を行うとともに、データ処理の結果を第１出力データとして逐次出力するデータ処理部と、前記データ処理部から逐次出力される前記第１出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第１入力データとして逐次出力する第１データ転送部と、を備える。
【０００８】
他の実施の形態によれば、半導体装置の制御方法は、データ処理部を用いて、逐次入力される第１入力データに対して演算処理を行うとともに、演算処理の結果を第１出力データとして逐次出力し、アクセラレータを用いて、前記データ処理部から逐次出力される前記第１出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行い、前記アクセラレータから出力された複数の演算処理結果を順番に選択して前記第１入力データとして逐次出力する。
【発明の効果】
【０００９】
前記一実施の形態によれば、効率の良い演算処理を実現することが可能な半導体装置及びその制御方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１にかかる半導体装置が搭載された半導体システムの構成例を示すブロック図である。
【図２】図１に示す半導体装置の具体的な構成例を示すブロック図である。
【図３】図２に示す並列演算器ＭＡＣ２５６＿０の構成例を示すブロック図である。
【図４】ニューラルネットワーク構造の例を示す図である。
【図５】ニューラルネットワークの演算処理の流れを模式的に示す図である。
【図６】実施の形態１にかかる半導体システムの処理の流れを示すタイミングチャートである。
【図７】行列演算式を模式的に示した図である。
【図８】ローカルメモリに格納される初期設定情報を説明するための図である。
【図９】行列データＩｎの１行目のデータと、行列データＷと、の乗算式を具体的に示す図である。
【図１０】実施の形態１にかかるアクセラレータの具体的な構成例を示す図である。
【図１１】動的再構成プロセッサのデータ出力及びデータ入力の関係を説明するためのタイミングチャートである。
【図１２】アクセラレータによる各層の行列データに対する演算処理の関係を説明するためのタイミングチャートである。
【図１３】実施の形態１にかかる半導体システムの動作を示すフローチャートである。
【図１４】比較例にかかるアクセラレータの構成例を示す図である。
【図１５】並列演算器ＭＡＣ６４＿０の具体的な構成例を示す図である。
【図１６】並列演算器ＭＡＣ６４＿０の第１の変形例を示す図である。
【図１７】並列演算器ＭＡＣ６４＿０の第２の変形例を示す図である。
【図１８】並列演算器ＭＡＣ６４＿０の第３の変形例を示す図である。
【図１９】並列演算器ＭＡＣ６４＿０の第４の変形例を示す図である。
【図２０】並列演算器ＭＡＣ６４＿０の第５の変形例を示す図である。
【図２１】並列演算器ＭＡＣ６４＿０の第６の変形例を示す図である。
【図２２】入力モードが第１入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２３】入力モードが第２入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２４】入力モードが第３入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２５】入力モードが第４入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２６】入力モードが第５入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２７】入力モードが第６入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２８】入力モードが第７入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。
【図２９】出力モードが第１出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３０】出力モードが第２出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３１】出力モードが第３出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３２】出力モードが第４出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３３】出力モードが第５出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３４】出力モードが第６出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３５】出力モードが第７出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。
【図３６】入力データに対して並列度を最大にして演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。
【図３７】入力データに対して並列度を最小にして演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。
【図３８】入力データに対して並列度を中程度にして演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。
【図３９】２つの入力データのそれぞれに対して並列演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。
【図４０】実施の形態２にかかる半導体装置が搭載された半導体システムの構成例を示すブロック図である。
【発明を実施するための形態】
【００１１】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１３】
＜実施の形態１＞
図１は、実施の形態１にかかる半導体装置１が搭載された半導体システムＳＹＳ１の構成例を示すブロック図である。本実施の形態にかかる半導体装置１は、並列に演算処理を行う並列演算器を有するアクセラレータと、データ授受を逐次行う動的再構成プロセッサ等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して逐次出力するデータ転送部と、を備える。それにより、本実施の形態にかかる半導体装置１及びそれを備えた半導体システムＳＹＳ１は、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、効率の良い演算処理を実現することができる。以下、具体的に説明する。
【００１４】
図１に示すように、半導体システムＳＹＳ１は、半導体装置１と、ＣＰＵ２と、外部メモリ３と、を備える。半導体装置１は、動的再構成プロセッサ（以下、ＤＲＰと称す）１１と、アクセラレータ１２と、データ転送部１３と、データ転送部１４と、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）１５と、を備える。
【００１５】
ＤＲＰ１１は、例えば外部メモリ３から逐次入力されるデータに対して演算処理を実行して、その演算処理の結果をデータＤＱｏｕｔとして逐次出力する。このように、ＤＲＰ１１は、毎サイクルのデータ授受が可能なものである。ここで、ＤＲＰ１１は、ＤＲＰ１１内に備えられている構成情報メモリから読み出される動作命令に従って、複数のプロセッサエレメントのそれぞれの演算内容、及び、複数のプロセッサエレメント間の接続関係を動的に切り替えることにより、回路を動的に再構成することが可能なデータ処理部である。
【００１６】
例えば、ＤＲＰ１１は、アレイ状に設けられた複数のプロセッサエレメントと、複数のプロセッサエレメントに対応して設けられた複数のスイッチエレメントと、状態管理部と、を備える。状態管理部は、予めプログラムにより決められた命令ポインタを各プロセッサエレメントに発行する。各プロセッサエレメントは、例えば、命令メモリ及び演算ユニットを少なくとも有する。演算ユニットは、命令メモリに格納された複数の動作命令のうち、状態管理部からの命令ポインタによって指定された動作命令に従って演算処理を実行する。演算ユニットは、例えば１６ビット幅のデータに対して演算処理を行う１６ビット演算器であるが、その他のビット幅のデータに対して演算処理を行う演算器であってもよい。あるいは、演算ユニットは、複数の演算器によって構成されていてもよい。また、各スイッチエレメントは、対応するプロセッサエレメントの命令メモリから読み出された動作命令に従って、対応するプロセッサエレメントと他のプロセッサエレメントとの間の接続関係を設定する。それにより、ＤＲＰ１１は、逐次与えられる動作命令に従って動的に回路構成を切り替えることができる。
【００１７】
なお、本実施の形態では、半導体装置１にＤＲＰ１１が設けられた場合を例に説明しているが、これに限られない。逐次入力されるデータに対して演算処理を実行するものであれば、例えばＤＲＰ１１の代わりにＣＰＵが設けられていてもよい。
【００１８】
データ転送部１３は、データＤＱｏｕｔを、例えば並列演算部１２１に要求される演算処理の並列度に応じて分配したり逐次化したりして、データＤＰｉｎとして出力する。
【００１９】
アクセラレータ１２は、データ転送部１３から逐次出力されるデータＤＰｉｎと、ｎ（ｎは２以上の整数）個の所定データＤ＿０〜Ｄ＿（ｎ−１）のそれぞれと、の間で並列に演算処理を行う。なお、以下では、所定データＤ＿０〜Ｄ＿（ｎ−１）を区別せずに単に所定データＤとも称す場合がある。
【００２０】
具体的には、アクセラレータ１２は、並列演算部１２１と、ローカルメモリ１２２と、を備える。ローカルメモリ１２２には、例えば、外部メモリ３から読み出された複数の所定データＤ＿０〜Ｄ＿（ｎ−１）及びバイアス値ｂなどの初期設定情報が格納されている。
【００２１】
例えば、ｋ行×ｍ列の行列データを構成するｋ×ｍ個の要素がデータＤＰｉｎとしてアクセラレータ１２に逐次入力される場合、１行分のデータであるｍ個のデータがｋ行分、即ち、ｋ×ｍ個のデータがアクセラレータ１２に逐次入力されることになる。しかし、アクセラレータ１２では、ｋの値に関わらず、１行分の入力データであるｍ個のデータの各々に対して、所定データＤ＿０〜Ｄ＿（ｎ−１）が演算処理に用いられる。そのため、ローカルメモリ１２２には、入力データ１行分のデータであるｍ個のデータの各々に対応するｎ個の所定データＤ＿０〜Ｄ＿（ｎ−１）、即ち、ｍ×ｎ個のデータが格納されていることになる。並列演算部１２１は、並列に演算処理を行う複数の演算器によって構成され、データＤＰｉｎと、複数の所定データＤ＿０〜Ｄ＿（ｎ−１）のそれぞれと、の間で並列に演算処理を行い、ｎ個の演算処理結果をデータＤＰｏｕｔとして出力する。
【００２２】
データ転送部１４は、アクセラレータ１２から並列に出力されたｎ個のデータＤＰｏｕｔを順番に選択して、データＤＱｉｎとして順次出力する。
【００２３】
ＤＲＰ１１は、データ転送部１４から逐次出力されるデータＤＱｉｎに対して演算処理を実行し、その演算処理の結果を例えば外部メモリ３に向けて逐次出力する。
【００２４】
ＣＰＵ２は、例えば外部メモリ３から読み出された制御命令に従い、半導体装置１の動作を制御する。具体的には、ＣＰＵ２は、アクセラレータ１２及びデータ転送部１３，１４の各動作を詳細に指示するデータ列（ディスクリプタ）を用意して、外部メモリ３に格納する。
【００２５】
ＤＭＡ１５は、ディスクリプタを外部メモリ３から読み出して内容を解釈し、アクセラレータ１２及びデータ転送部１３，１４に対して動作の指示を出す。例えば、ＤＭＡ１５は、ディスクリプタに記載された指示に従って、外部メモリ３に格納された初期設定情報をローカルメモリ１２２に転送する。また、ＤＭＡ１５は、データ転送部１３に対して、並列演算部１２１による演算処理の並列度等に応じてデータＤＰｉｎを分配させたり逐次化させたりするように指示する。さらに、ＤＭＡ１５は、データ転送部１４に対して、並列演算部１２１による演算処理の並列度等に応じて並列に出力されたｎ個のデータＤＰｏｕｔを合成させたり逐次化させたりするように指示する。
【００２６】
１つのディクスリプタで指定された動作が完了すると、ＤＭＡ１５は、次のディスクリプタを外部メモリ３から読み出し、再びアクセラレータ１２及びデータ転送部１３，１４に対して動作の指示を出す。なお、ディスクリプタは一つ前に読み出されたディスクリプタによる動作の完了前に先行して読み出されることが好ましい。それにより、処理レイテンシを隠蔽することができる。
【００２７】
なお、上記したディスクリプタは、ＣＰＵ２によって用意される代わりに、ＤＲＰ１１において動作しているプログラムから出力されてもよいし、予め生成しておいたものを使用しても良い。
【００２８】
図２は、半導体装置１の具体的な構成例を示すブロック図である。
図２の例では、ＤＲＰ１１は、４チャネルの６４ビット幅のデータＤＱｏｕｔをデータＤＱｏｕｔ＿０〜ＤＱｏｕｔ＿３として出力している。なお、当然ながら、ＤＲＰ１１は、４チャネルのデータＤＱｏｕｔ＿０〜ＤＱｏｕｔ＿３を出力する場合に限られず、任意のチャネル数及び任意のビット幅の少なくも何れかのデータを出力する構成に適宜変更可能である。
【００２９】
また、図２の例では、データ転送部１３は、ＤＲＰ１１から逐次出力される６４ビット幅のデータＤＱｏｕｔ＿０〜ＤＱｏｕｔ＿３をそのままデータＤＰｉｎ＿０〜ＤＰｉｎ＿３として出力している。なお、図２の例では、各データＤＰｉｎ＿０〜ＤＰｉｎ＿３が、浮動小数点方式によって表される４つの１６ビット幅の演算結果を束ねることによって６４ビット幅のデータを構成しているが、これに限られない。例えば１〜３つの１６ビット幅の演算結果を束ねることによってそれぞれ１６ビット幅、３２ビット幅、４８ビット幅のデータを構成していてもよい。
【００３０】
並列演算部１２１は、例えば、並列演算器ＭＡＣ２５６＿０〜ＭＡＣ２５６＿３を備える。並列演算器ＭＡＣ２５６＿０〜ＭＡＣ２５６＿３は、何れも並列に演算処理を行う２５６個の演算器によって構成されている。データＤＰｉｎ＿０〜ＤＰｉｎ＿３は、それぞれ並列演算器ＭＡＣ２５６＿０〜ＭＡＣ２５６＿３に入力されている。
【００３１】
並列演算器ＭＡＣ２５６＿０は、６４ビット幅（１６ビット幅×４組）のデータＤＰｉｎ＿０に対して、最大で２５６個（６４個を１組として４組分）の演算器を用いて並列に演算処理を実行することにより、最大で２５６個の演算処理結果を出力することが可能である。
【００３２】
同様にして、並列演算器ＭＡＣ２５６＿１は、６４ビット幅（１６ビット幅×４組）のデータＤＰｉｎ＿１に対して、最大で２５６個（６４個を１組として４組分）の演算器を用いて並列に演算処理を実行することにより、最大で２５６個の演算処理結果を出力することが可能である。並列演算器ＭＡＣ２５６＿２は、６４ビット幅（１６ビット幅×４組）のデータＤＰｉｎ＿２に対して、最大で２５６個（６４個を１組として４組分）の演算器を用いて並列に演算処理を実行することにより、最大で２５６個の演算処理結果を出力することが可能である。並列演算器ＭＡＣ２５６＿３は、６４ビット幅（１６ビット幅×４組）のデータＤＰｉｎ＿３に対して、最大で２５６個の演算器を用いて並列に演算処理を実行することにより、最大で２５６個の演算処理結果を出力することが可能である。
【００３３】
図３は、並列演算器ＭＡＣ２５６＿０の構成例を示すブロック図である。なお、図３には、並列演算器ＭＡＣ２５６＿０の前後に設けられたデータ転送部１３，１４も示されている。
【００３４】
図３に示すように、並列演算器ＭＡＣ２５６＿０は、並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３を備える。並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３は、何れも並列に演算処理を行う６４個の演算器によって構成されている。
【００３５】
６４ビット幅のデータＤＰｉｎ＿０の第０ビット〜第１５ビット（以下、データＤＰｉｎ＿００と称す）は、並列演算器ＭＡＣ６４＿０に入力されている。６４ビット幅のデータＤＰｉｎ＿０の第１６ビット〜第３１ビット（以下、データＤＰｉｎ＿０１と称す）は、並列演算器ＭＡＣ６４＿１に入力されている。６４ビット幅のデータＤＰｉｎ＿０の第３２ビット〜第４７ビット（以下、データＤＰｉｎ＿０２と称す）は、並列演算器ＭＡＣ６４＿２に入力されている。６４ビット幅のデータＤＰｉｎ＿０の第４８ビット〜第６３ビット（以下、データＤＰｉｎ＿０３と称す）は、並列演算器ＭＡＣ６４＿３に入力されている。
【００３６】
並列演算器ＭＡＣ６４＿０は、１６ビット幅のデータＤＰｉｎ＿００に対して、最大で６４個の演算器を用いて並列に演算処理を実行し、最大で６４個の１６ビット幅の演算処理結果を出力することが可能である。並列演算器ＭＡＣ６４＿１は、１６ビット幅のデータＤＰｉｎ＿０１に対して、最大で６４個の演算器を用いて並列に演算処理を実行し、最大で６４個の１６ビット幅の演算処理結果を出力することが可能である。並列演算器ＭＡＣ６４＿２は、１６ビット幅のデータＤＰｉｎ＿０２に対して、最大で６４個の演算器を用いて並列に演算処理を実行し、最大で６４個の１６ビット幅の演算処理結果を出力することが可能である。並列演算器ＭＡＣ６４＿３は、１６ビット幅のデータＤＰｉｎ＿０３に対して、最大で６４個の演算器を用いて並列に演算処理を実行し、最大で６４個の１６ビット幅の演算処理結果を出力することが可能である。
【００３７】
なお、並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿１については、並列演算器ＭＡＣ２５６＿０の場合と同様の構成であるため、その説明を省略する。
【００３８】
図２に戻って説明を続ける。
つまり、並列演算器ＭＡＣ２５６＿０は、６４ビット幅（１６ビット幅×４組）のデータＤＰｉｎ＿０に対して演算処理を実行して、最大で６４個の１６ビット幅の演算処理結果を４組分、データＤＰｏｕｔ＿０として出力する。
【００３９】
同様にして、並列演算器ＭＡＣ２５６＿１は、データＤＰｉｎ＿１に対して演算処理を実行して、最大で６４個の１６ビット幅の演算処理結果を４組分、データＤＰｏｕｔ＿１として出力する。並列演算器ＭＡＣ２５６＿２は、データＤＰｉｎ＿２に対して演算処理を実行して、最大で６４個の１６ビット幅の演算処理結果を４組分、データＤＰｏｕｔ＿２として出力する。並列演算器ＭＡＣ２５６＿３は、データＤＰｉｎ＿３に対して演算処理を実行して、最大で６４個の１６ビット幅の演算処理結果を４組分、データＤＰｏｕｔ＿３として出力する。
【００４０】
データ転送部１４は、例えば、並列演算器ＭＡＣ２５６＿０から並列に出力された４組の６４個の１６ビット幅のデータＤＰｏｕｔ＿０を、各組において１個ずつ順番に選択して、４組の１６ビット幅のデータＤＱｉｎ＿０（即ち、６４ビット幅のデータＤＱｉｎ＿０）として逐次出力する。このように、データ転送部１４は、各組から１個ずつ１６ビット幅のデータを選択して逐次出力してもよいし、一組の６４個の１６ビット幅のデータを出力してから、次の組の６４個の１６ビット幅のデータを出力するように、一組毎に全データを優先して逐次出力してもよいが、これに限定されることはない。また、データ転送部１４のデータ出力方法はモードによって切り替えられるようにしてもよい。
【００４１】
同様にして、データ転送部１４は、例えば、並列演算器ＭＡＣ２５６＿１から並列に出力された４組の６４個の１６ビット幅のデータＤＰｏｕｔ＿１を、各組において１個ずつ順番に選択して、４組の１６ビット幅のデータＤＱｉｎ＿１（即ち、６４ビット幅のデータＤＱｉｎ＿１）として逐次出力する。また、データ転送部１４は、例えば、並列演算器ＭＡＣ２５６＿２から並列に出力された４組の６４個の１６ビット幅のデータＤＰｏｕｔ＿２を、各組において１個ずつ順番に選択して、４組の１６ビット幅のデータＤＱｉｎ＿２（即ち、６４ビット幅のデータＤＱｉｎ＿２）として逐次出力する。データ転送部１４は、例えば、並列演算器ＭＡＣ２５６＿３から並列に出力された４組の６４個の１６ビット幅のデータＤＰｏｕｔ＿３を、各組において１個ずつ順番に選択して、４組の１６ビット幅のデータＤＱｉｎ＿３（即ち、６４ビット幅のデータＤＱｉｎ＿３）として逐次出力する。
【００４２】
これら６４ビット幅のデータＤＱｉｎ＿０〜ＤＱｉｎ＿３は、ＤＲＰ１１に入力される。ＤＲＰ１１は、データＤＱｉｎ＿０〜ＤＱｉｎ＿３に対して演算処理を実行して、演算処理結果をそれぞれ外部メモリ３に向けて逐次出力する。なお、データＤＱｉｎ＿０〜ＤＱｉｎ＿３は、データＤＱｏｕｔ＿０〜ＤＱｏｕｔ＿３の演算に用いられてもよい。
【００４３】
このように、本実施の形態にかかる半導体装置１は、並列に演算処理を行う並列演算器を有するアクセラレータと、データの授受を逐次行うＤＲＰ等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して出力するデータ転送部と、を備える。それにより、本実施の形態にかかる半導体装置及びそれを備えた半導体システムは、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、例えば、ディープラーニング処理等の大規模な演算処理おいても効率の良い演算処理を実現することができる。
【００４４】
以下、図４及び図５を用いて、本実施の形態にかかる半導体装置１を用いたニューラルネットワークの演算方法を説明する。図４は、ニューラルネットワーク構造の例を示す図である。図５は、ニューラルネットワークの演算処理の流れを模式的に示す図である。
【００４５】
図４に示すように、ニューラルネットワークの演算は、入力データに対して重みづけｗ（ｗ’）を乗じる積和演算を行い、その結果に対して活性化等の演算を行い、演算結果を出力する、という手順をとる。
【００４６】
図５に示すように、ＤＲＰ１１は、外部メモリ３からアクセラレータ１２の演算処理に必要なデータを読み出し（ステップＳ１）、必要に応じて演算器やデータの並べ替えを行う（ステップＳ２）。その後、外部メモリ３から読み出されたデータは、アクセラレータ１２の入力データとして、ＤＲＰ１１からアクセラレータ１２に逐次出力される（ステップＳ３）。アクセラレータ１２は、ＤＲＰ１１から逐次出力されたデータに対して、受け取ったデータから順に、ローカルメモリに格納されたデータ（重みづけに対応）を乗じることにより並列積和演算処理を行う（ステップＳ４）。アクセラレータ１２による演算結果は、ＤＲＰ１１に逐次出力される（ステップＳ５）。ＤＲＰ１１は、アクセラレータ１２から受け取ったデータに対して、必要に応じて足し合わせや活性化等の演算を行う（ステップＳ６）。ＤＲＰ１１による演算結果は、外部メモリ３に格納される（ステップＳ７）。このような処理によってニューラルネットワークの処理を実現し、この処理を繰り返すことで、ディープラーニングに必要な演算処理を実行させることができる。
【００４７】
このように、ニューラルネットワークでは、必要な演算処理のうち、規則的な並列積和演算処理をアクセラレータ１２で実行することで、高速性を実現することが可能となる。また、規則的な並列積和演算処理以外の演算処理を、回路を動的に再構成可能なＤＲＰ（動的再構成プロセッサ）１１で実行することで、異なる層（図５の例では第一層と第二層）での活性化等の処理を柔軟に設定可能となる。また、ＤＲＰ１１は、アクセラレータ１２での同時に処理可能な並列演算規模に合わせて、積和演算に必要な入力データを分割して外部メモリ３から読み出してアクセラレータ１２に出力するように回路構成を再構成することも可能である。それにより、並列演算部１２１の演算形式の自由度を持たせることもできる。
【００４８】
続いて、半導体システムＳＹＳ１の動作について、図６を用いて説明する。
図６は、半導体システムＳＹＳ１の処理の流れを示すタイミングチャートである。
【００４９】
以下では、アクセラレータ１２によって行列演算が実行される場合を例に説明する。
図７は、行列演算式を模式的に示した図である。図７の例では、ｋ行×ｍ列の要素からなる行列データＩｎと、ｍ行×ｎ列の要素からなる行列データＷと、の乗算を行い、その乗算結果の各要素に対してバイアス値ｂを加算した結果を、ｋ行×ｎ列の要素からなる行列データＯｕｔとして出力している。
【００５０】
アクセラレータ１２によって第１層の行列データＩｎに対する演算処理が実行される場合、まず、第１層の行列データＩｎに対応する行列データＷ及びバイアス値ｂ等の初期設定情報がアクセラレータ１２のローカルメモリ１２２に格納される（図６の時刻ｔ１〜ｔ２）（図８参照）。より具体的には、ＤＭＡ１５が、ＣＰＵ２が生成したディスクリプタの指示に従って、外部メモリ３から読み出された初期設定情報をローカルメモリ１２２に転送する。なお、ＤＭＡ１５とは別にアクセラレータ１２専用のＤＭＡ（不図示）を設け、このアクセラレータ１２専用のＤＭＡを用いて外部メモリ３から読み出された初期設定情報をローカルメモリ１２２に転送してもよい。
【００５１】
その後、外部メモリ３から行列データＩｎの１行目のデータ（以下、行データＩｎ１とも称す）が読み出される（図６の時刻ｔ２）。ＤＲＰ１１は、外部メモリ３から読み出された行データＩｎ１に対して必要に応じて所定の処理を施したうえでアクセラレータ１２に向けて出力する（図６の時刻ｔ３）。
【００５２】
アクセラレータ１２は、ローカルメモリ１２２から読み出されたバイアス値ｂを初期値として並列演算部１２１の各演算器に設定した後、行データＩｎ１（データＤＰｉｎに相当）と、ローカルメモリ１２２から読み出された行列データＷ（所定データＤに相当）と、の演算処理を行う（図６の時刻ｔ４）。
【００５３】
図９は、行データＩｎ１（行列データＩｎの１行目のデータ）と、行列データＷと、の乗算式の具体例を示す図である。なお、図９の例では、行データＩｎ１が２０列の要素ｂ０〜ｂ１９によって構成されているものとする。また、行列データＷでは、１行目のデータが２０列の要素ａ０，０  ａ０，１  ・・・  ａ０，１９によって構成され、２行目のデータが２０列の要素ａ１，０  ａ１，１  ・・・  ａ１，１９によって構成され、最終行である２０行目のデータが２０列の要素ａ１９，０  ａ１９，１  ・・・  ａ１９，１９によって構成されているものとする。
【００５４】
ここで、アクセラレータ１２は、行データＩｎ１の各列の要素（例えばｂ０）と、行列データＷの各行の２０列の要素（例えばａ０，０  ａ０，１  ・・・  ａ０，１９）のそれぞれと、で並列に乗算処理を行い、その後、各列において２０個分の乗算結果を加算することにより、行列データＯｕｔの各列の要素を算出している。
【００５５】
図１０は、アクセラレータ１２の具体的な構成例を示す図である。
図１０の例では、並列演算部１２１に設けられた複数の演算器のうち２０個の演算器１２１＿０〜１２１＿１９が使用されている。各演算器１２１＿０〜１２１＿１９は、乗算器ＭＸ１と、加算器ＡＤ１と、レジスタＲＧ１と、レジスタＲＧ２と、を有する。
【００５６】
演算器１２１＿ｊ（ｊは０〜１９の何れか）では、まず、ローカルメモリ１２２から読み出されたバイアス値ｂが初期値としてレジスタＲＧ１に設定される（バイアス値ｂは図１０において不図示）。
【００５７】
その後、乗算器ＭＸ１は、行データＩｎ１の一列目の要素ｂ０（１６ビット幅のデータＤＰｉｎに相当）と、ローカルメモリ１２２から読み出された行列データＷの１行目のデータの要素ａ０，ｊ（１６ビット幅の所定データＤ＿ｊに相当）と、を乗算する。加算器ＡＤ１は、乗算器ＭＸ１による乗算結果（ａ０，ｊ×ｂ０）と、レジスタＲＧ１に格納されている値（バイアス値ｂ）と、を加算して、加算結果をレジスタＲＧ１に転送する。
【００５８】
その後、乗算器ＭＸ１は、続いて入力された行データＩｎ１の二列目の要素ｂ１と、ローカルメモリ１２２から読み出された行列データＷの２行目のデータの要素ａ１，ｊと、を乗算する。加算器ＡＤ１は、乗算器ＭＸ１による乗算結果（ａ１，ｊ×ｂ１）と、レジスタＲＧ１に格納されている値（ａ０，ｊ×ｂ０）と、を加算して、加算結果をレジスタＲＧ１に転送する。
【００５９】
上述のような乗算、加算、格納の動作が２０サイクル繰り返されることにより、レジスタＲＧ１には、行列データＯｕｔの１行目のデータの要素にあたる（（ａ０，ｊ×ｂ０）＋（ａ１，ｊ×ｂ１）＋・・・＋（ａ１９，ｊ×ｂ１９））が格納される。その後、レジスタＲＧ１に格納されたこの値は、レジスタＲＧ２に転送され、レジスタＲＧ２に格納された値は、行列データＯｕｔの１行目のデータの要素として出力される（図６の時刻ｔ５以降）。
【００６０】
なお、レジスタＲＧ１からレジスタＲＧ２へのデータ転送が完了すると（図６の時刻ｔ５）、行列データＩｎの次の行である２行目のデータ（行データＩｎ２とも称す）に対する演算器１２１＿ｊによる演算処理を開始することができる（図６の時刻ｔ６）。それにより、アクセラレータ１２は、レジスタＲＧ２に格納された演算処理結果をデータ転送部１４に転送しつつ（図６の時刻ｔ７〜ｔ１０に相当）、行データＩｎ２に対する並列演算処理を実行することができる（図６の時刻ｔ６〜ｔ９）。それにより、並列演算処理の効率を高めることができる。
【００６１】
そのため、ＤＲＰ１１は、行列データＩｎの１行目のデータＩｎ１の出力完了後、かつ、３行目のデータＩｎ３の出力開始前、の期間である２行目のデータＩｎ２の出力期間中に、アクセラレータ１２による行データＩｎ１の演算処理結果を取り込むように処理することが好ましい（図１１参照）。
【００６２】
データ転送部１４は、演算器１２１＿０〜１２１＿１９から出力された２０個の１６ビット幅の演算処理結果（データＤＰｏｕｔに相当）を順番に選択して、１６ビット幅のデータＤＱｉｎとして逐次出力する。換言すると、データ転送部１４は、行列データＯｕｔの１行目の２０列の要素をデータＤＱｉｎとして逐次出力する。逐次出力されたデータＤＱｉｎは、ＤＲＰ１１によって受信される（図６の時刻ｔ７〜ｔ１０）。
【００６３】
ＤＲＰ１１では、例えば、加算器ＡＤ２がデータ転送部１４から逐次出力されるデータＤＱｉｎに対して加算処理を実行したり、演算器ＴＮ１が双曲線正接関数に基づいて所定の演算処理を実行したり、乗算器ＭＸ２が乗算処理を実行したりする。その処理結果は、例えば、外部メモリ３に書き込まれる（図６の時刻ｔ８〜ｔ１１）。
【００６４】
アクセラレータ１２において、第１層の行列データＩｎの１行目からｋ行目までの全ての行データについての演算処理が完了すると、続いて、第２層の行列データＩｎについても同様の演算処理が行われる。なお、第２層の行列データＩｎについての演算処理が行われる前に、第２層の行列データＩｎに対応する初期設定情報（行列データＷ及びバイアス値ｂ）がローカルメモリ１２２に格納される。アクセラレータ１２では、このような並列演算処理が繰り返される。
【００６５】
なお、ローカルメモリ１２２は、行列データＩｎに対応する初期設定情報（行列データＷ及びバイアス値ｂ）を少なくとも２層分格納できる程度の記憶領域を有することが好ましい。それにより、第１層の行列データＩｎに対する行列演算の実行中に、第２層の行列データＩｎに対する演算処理に用いられる初期設定情報を、ローカルメモリ１２２の空き領域に転送することができる。それにより、第１層の行列データに対する演算処理の完了後、初期設定情報の転送を待つことなく、速やかに第２層の行列データに対する行列演算を実行することができる（図１２参照）。なお、この場合には、ローカルメモリ１２２は、データの読み出し及び書き込みを同時に行うことが可能に構成されていることが好ましい。
【００６６】
他方、ローカルメモリ１２２が、１層分の行列データＩｎに対応する初期設定情報を格納できる程度の記憶領域を有していない場合、あるいは、１層分の行列データＩｎに対応する初期設定情報を格納できる記憶領域を有している場合でも、当該初期設定情報は分割して格納されてもよい。以下、図１３を用いて簡単に説明する。
【００６７】
図１３は、半導体システムＳＹＳ１の動作を示すフローチャートである。図１３の例では、ローカルメモリ１２２が、第３層の行列データＩｎに対応する初期設定情報を格納できる程度の記憶領域を有していないものとする。
【００６８】
図１３に示すように、まず、第１層の行列データＩｎに対応する初期設定情報がローカルメモリ１２２に格納される（ステップＳ１０１）。その後、第１層の行列データＩｎに対する演算処理が並列演算部１２１によって実行される（ステップＳ１０２）。その後、第２層の行列データＩｎに対応する初期設定情報がローカルメモリ１２２に格納される（ステップ１０３）。その後、第２層の行列データＩｎに対する演算処理が並列演算部１２１によって実行される（ステップＳ１０４）。その後、第３層の行列データＩｎの一部に対応する初期設定情報がローカルメモリ１２２に格納される（ステップＳ１０５）。その後、第３層の行列データＩｎの一部に対する演算処理が並列演算部１２１によって実行される（ステップＳ１０６）。その後、第３層の行列データＩｎの残りに対応する初期設定情報がローカルメモリ１２２に格納される（ステップＳ１０７）。その後、第３層の行列データＩｎの残りに対する演算処理が並列演算部１２１によって実行される（ステップＳ１０８）。その後、ステップＳ１０６において実行された演算処理の結果と、ステップＳ１０８において実行された演算処理の結果と、をＤＲＰ１１において加算する（ステップＳ１０９）。それにより、第３層の行列データＩｎに対する演算処理を実現することが可能となる。
【００６９】
このように、本実施の形態にかかる半導体装置１は、並列に演算処理を行う並列演算器を有するアクセラレータと、データの授受を逐次行うＤＲＰ等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して出力するデータ転送部と、を備える。それにより、本実施の形態にかかる半導体装置及びそれを備えた半導体システムは、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、例えば、ディープラーニング処理等の大規模な演算処理おいても効率の良い演算処理を実現することができる。
【００７０】
本実施の形態では、各演算器１２１＿０〜１２１＿１９が、乗算器ＭＸ１、加算器ＡＤ１、及び、レジスタＲＧ１に加えて、レジスタＲＧ２を有する場合を例に説明したが、これに限られない。各演算器１２１＿０〜１２１＿１９は、乗算器ＭＸ１、加算器ＡＤ１、及び、レジスタＲＧ１のみを備え、レジスタＲＧ２を備えていなくてもよい。それにより、回路規模がさらに抑制される。
【００７１】
また、本実施の形態では、バイアス値bがローカルメモリ１２２内に格納される場合を例に説明したが、これに限られない。例えば、バイアス値ｂは、ローカルメモリ１２２とは別に設けられたレジスタ等に格納されても良いし、バイアス値ｂを０等の固定値にしてローカルメモリ１１内に格納しないようにしても良い。
【００７２】
図１４は、比較例に係るアクセラレータ５２の構成例を示す図である。
図１４に示すように、アクセラレータ５２では、各演算器１２１＿０〜１２１＿１９が、乗算器ＭＸ１、加算器ＡＤ１、レジスタＲＧ１、加算器ＡＤ２、演算器ＴＮ１及び乗算器ＭＸ２を備えている。つまり、アクセラレータ５２では、アクセラレータ１２の場合にはＤＲＰ１１に設けられていた加算器ＡＤ２、演算器ＴＮ１及び乗算器ＭＸ２を、各演算器１２１＿０〜１２１＿１９が備えている。
【００７３】
しかしながら、アクセラレータ５２では、各演算器において、乗算器ＭＸ１、加算器ＡＤ１及びレジスタＲＧ１による演算処理が２０サイクル繰り返された後、加算器ＡＤ２、演算器ＴＮ１及び乗算器ＭＸ２による演算処理が１サイクルのみ実行されるにすぎない。つまり、アクセラレータ５２では、複数の演算器の全てに、使用頻度の低い加算器ＡＤ２、演算器ＴＮ１及び乗算器ＭＸ２が設けられているため、回路規模が増大してしまうという問題がある。
【００７４】
それに対し、アクセラレータ１２では、各演算器１２１＿０〜１２１＿１９が、使用頻度の低い加算器ＡＤ２、演算器ＴＮ１及び乗算器ＭＸ２を備えておらず、これら演算器は、ＤＲＰ１１の前段において構成され共通利用されている。それにより、回路規模の増大を抑制することができる。
【００７５】
（並列演算器を構成する複数の演算器の具体的な構成例）
続いて、並列演算部１２１に設けられた複数の演算器の具体的な構成例を説明する。
図１５は、並列演算器ＭＡＣ６４＿０の具体的な構成例を示す図である。図１５に示すように、並列演算器ＭＡＣ６４＿０は、並列に演算処理を行う６４個の演算器１２１＿０〜１２１＿６３を備える。各演算器１２１＿０〜１２１＿６３は、乗算器ＭＸ１、加算器ＡＤ１、レジスタＲＧ１、及び、レジスタＲＧ２を備える。ここで、各演算器１２１＿０〜１２１＿６３における乗算器ＭＸ１、加算器ＡＤ１、レジスタＲＧ１、及び、レジスタＲＧ２のパスは、１６ビット幅のデータに対して所定の演算処理を施して１６ビット幅のデータを出力する。
【００７６】
並列演算器ＭＡＣ６４＿１〜ＭＡＣ６４＿３については、並列演算器ＭＡＣ６４＿０の構成と同様であるため、その説明を省略する。
【００７７】
（並列演算器を構成する複数の演算器の第１の変形例）
図１６は、並列演算器ＭＡＣ６４＿０の第１の変形例を並列演算器ＭＡＣ６４ａ＿０として示す図である。図１６に示すように、並列演算器ＭＡＣ６４ａ＿０は、６４個の演算器１２１ａ＿０〜１２１ａ＿６３を備える。各演算器１２１ａ＿０〜１２１ａ＿６３は、セレクタＳＬ１、乗算器ＭＸ１、加算器ＡＤ１、レジスタＲＧ１、及び、レジスタＲＧ２を有する。
【００７８】
ここで、セレクタＳＬ１は、ローカルメモリ１２２から読み出された１６ビットのデータを１ビットずつ順次選択して出力する。乗算器ＭＸ１、加算器ＡＤ１、レジスタＲＧ１、及び、レジスタＲＧ２のパスは、セレクタＳＬ１から出力された１ビット幅のデータと、データ転送部１３からの１６ビット幅のデータと、を用いて演算処理を行い、１６ビット幅のデータを出力する。
【００７９】
このように、並列演算器ＭＡＣ６４ａ＿０は、ローカルメモリ１２２から読み出された１ビット幅のデータに対して演算処理を施す場合でも、ローカルメモリ１２２から１６ビット幅のデータを読み出した後、１６ビット幅のデータの中から１ビットずつ順次選択して演算処理を施すことにより、ローカルメモリ１２２からの読み出し回数の増大を抑制することができる。その結果、消費電力を削減することが可能である。
【００８０】
並列演算器ＭＡＣ６４ａ＿１〜ＭＡＣ６４ａ＿３については、並列演算器ＭＡＣ６４ａ＿０の構成と同様であるため、その説明を省略する。
【００８１】
なお、ローカルメモリ１２２から読み出された１ビット幅のデータに対して演算処理を施す場合、乗算処理は、データ転送部１３からのデータに対して、＋１及び−１の何れかを乗ずることを意味する。そのため、積和演算は、レジスタＲＧ１に格納されたデータに対して、データ転送部１３からのデータを加算又は減算することになる。これは、図１７に示すような並列演算器の構成でも実現可能である。
【００８２】
（並列演算器を構成する複数の演算器の第２の変形例）
図１７は、並列演算器ＭＡＣ６４＿０の第２の変形例を並列演算器ＭＡＣ６４ｂ＿０として示す図である。図１７に示すように、並列演算器ＭＡＣ６４ｂ＿０は、６４個の演算器１２１ｂ＿０〜１２１ｂ＿６３を備える。各演算器１２１ｂ＿０〜１２１ｂ＿６３は、セレクタＳＬ１、加算器ＡＤ１、減算器ＳＢ１、セレクタＳＬ２、レジスタＲＧ１、及び、レジスタＲＧ２を有する。
【００８３】
ここで、セレクタＳＬ１は、ローカルメモリ１２２から読み出された１６ビットのデータを１ビットずつ順次選択して出力する。加算器ＡＤ１は、データ転送部１３からの１６ビット幅のデータと、レジスタＲＧ１に格納されたデータと、を加算する。減算器ＳＢ１は、データ転送部１３からの１６ビット幅のデータからレジスタＲＧ１に格納されたデータを減算する。セレクタＳＬ２は、セレクタＳＬ１から出力された１ビット幅のデータの値に基づいて、加算器ＡＤ１による加算結果、及び、減算器ＳＢ１による減算結果、の何れかを選択して出力する。セレクタＳＬ２から出力されたデータは、レジスタＲＧ１に格納される。その後、レジスタＲＧ１に格納されたデータは、レジスタＲＧ２に格納された後、データ転送部１４に出力される。
【００８４】
並列演算器ＭＡＣ６４ｂ＿０は、並列演算器ＭＡＣ６４ａ＿０と同様の動作を実現することができる。
【００８５】
並列演算器ＭＡＣ６４ｂ＿１〜ＭＡＣ６４ｂ＿３については、並列演算器ＭＡＣ６４ｂ＿０の構成と同様であるため、その説明を省略する。
【００８６】
（並列演算器を構成する複数の演算器の第３の変形例）
図１８は、並列演算器ＭＡＣ６４＿０の第３の変形例を並列演算器ＭＡＣ６４ｃ＿０として示す図である。図１８に示すように、並列演算器ＭＡＣ６４ｃ＿０は、６４個の演算器１２１ｃ＿０〜１２１ｃ＿６３を備える。各演算器１２１ｃ＿０〜１２１ｃ＿６３は、データ転送部１３からの１６個の１ビットデータと、ローカルメモリ１２２から読み出された１６個の１ビットデータと、の間の演算処理を１ビット単位で行うものである。
【００８７】
各演算器１２１ｃ＿０〜１２１ｃ＿６３は、乗算器ＭＸ１、加算器ＡＤ１、レジスタＲＧ１、及び、レジスタＲＧ２からなるパスを１６個備える。ここで、各パスは、データ転送部１３からの１６個の１ビットデータの一つと、ローカルメモリ１２２から読み出された１６個の１ビットデータの一つと、を用いて演算処理を行い、１ビットデータを出力する。この１ビットデータは、ハードウェアでは１、０の２値で表現されているが、これら１、０の値は、意味としてはそれぞれ＋１，−１として計算に用いられる。
【００８８】
このように、並列演算器ＭＡＣ６４ｃ＿０は、データ転送部１３からの１ビットデータと、ローカルメモリ１２２から読み出された１ビットデータと、を用いて演算処理を行う場合でも、１６ビットデータパスを用いてデータ転送及び読み出しを行うことにより、１ビットデータに対する演算処理を１６個並列に行うことができる。
【００８９】
なお、図１８に示す構成の動作は、図１９に示すような並列演算器の構成でも実現可能である。
【００９０】
（並列演算器を構成する複数の演算器の第４の変形例）
図１９は、並列演算器ＭＡＣ６４＿０の第４の変形例を並列演算器ＭＡＣ６４ｄ＿０として示す図である。図１９に示すように、並列演算器ＭＡＣ６４ｄ＿０は、６４個の演算器１２１ｄ＿０〜１２１ｄ＿６３を備える。各演算器１２１ｄ＿０〜１２１ｄ＿６３は、否定排他的論和（ＸＮＯＲ）回路ＸＮＲ１、ポップカウンタＣＮＴ１、加算器ＡＤ１、レジスタＲＧ１、及び、レジスタＲＧ２を有する。
【００９１】
ＸＮＯＲ回路ＸＮＲ１は、データ転送部１３からの１６個の１ビットデータと、ローカルメモリ１２２から読み出された１６個の１ビットデータと、の否定排他的論理和を１ビット単位で行って出力する。ポップカウンタＣＮＴ１は、ＸＮＯＲ回路ＸＮＲ１の出力値を２進数単位で見たときに、その出力値の“１”の個数をカウントする。ここで、ポップカウンタＣＮＴ１の出力値は、データ転送部１３からの１６ビットのデータと、ローカルメモリ１２２から読み出された１６ビットのデータと、をそれぞれ２進数で見た場合に、互いの値が一致するビットの個数を表している。このポップカウンタＣＮＴ１の出力データは、加算器ＡＤ１によって、レジスタＲＧ１に格納されたデータに加算される。ただし、本来は＋１，−１とすべき値を１，０として演算しているため、出力値を補正する必要がある。なお、補正に必要なバイアス値を予め加工しておくことで対応することも可能である。
【００９２】
このように、並列演算器ＭＡＣ６４ｄ＿０は、データ転送部１３からの１６個の１ビットデータと、ローカルメモリ１２２から読み出された１６個の１ビットデータと、の間の１ビット単位の演算処理を１６個並列に行って、これらを加算したうえで、１６ビットのデータとして出力している。それにより、並列演算器ＭＡＣ６４ｄ＿０は、並列演算器ＭＡＣ６４ｄ＿０と同様の動作を実現することができる。
【００９３】
並列演算器ＭＡＣ６４ｄ＿１〜ＭＡＣ６４ｄ＿３については、並列演算器ＭＡＣ６４ｄ＿０の構成と同様であるため、その説明を省略する。
【００９４】
（並列演算器を構成する複数の演算器の第５の変形例）
図２０は、並列演算器ＭＡＣ６４＿０の第５の変形例を並列演算器ＭＡＣ６４ｅ＿０として示す図である。並列演算器ＭＡＣ６４ｅ＿０は、６４個の演算器１２１ｅ＿０〜１２１ｅ＿６３を備える。
【００９５】
演算器１２１ｅ＿０〜１２１ｅ＿６３は、演算器１２１ｄ＿０〜１２１ｄ＿６３と比較して、レジスタＲＧ１に格納された１６ビット幅のデータを１ビット幅のデータに変換する１ビット化回路ＣＮＶ１をさらに備える。１ビット化回路ＣＮＶ１は、例えば、バイアス値を活用して、演算結果が負の時は０、それ以外では１を出力することで、活性化後の値を１ビット値として出力することが可能になる。この場合、データ転送部１４には、演算器１２１ｅ＿０〜１２１ｅ＿６３からの６４個の１ビットデータが入力されることになる。なお、データ転送部１４は、６４個の１ビットデータを１６個ずつ束ねて１６ビット幅のデータとして出力することも可能である。それにより、データ転送部１４は、６４個の１ビットデータを４サイクルで出力することができる。
【００９６】
（並列演算器を構成する複数の演算器の第６の変形例）
図２１は、並列演算器ＭＡＣ６４＿０の第６の変形例を並列演算器ＭＡＣ６４ｆ＿０として示す図である。並列演算器ＭＡＣ６４ｆ＿０は、６４個の演算器１２１ｅ＿０〜１２１ｅ＿６３を備える。
【００９７】
演算器１２１ｅ＿０は、演算器（演算回路）１２１＿０、１２１ａ＿０、１２１ｃ＿０、１２１ｅ＿０及びセレクタＳＬ３を備える。セレクタＳＬ３は、演算器１２１＿０、１２１ａ＿０、１２１ｃ＿０、１２１ｅ＿０の何れかをモードに応じて選択して出力する。演算器１２１ｅ＿１〜１２１ｅ＿６３については、演算器１２１ｅ＿０の構成と同様であるため、その説明を省略する。なお、演算器１２１ｅ＿０の一部は演算器１２１ｃ＿０の一部と回路を共通化することができ、１ｂｉｔ化回路を介さず１６ビットのまま出力するか、１ｂｉｔ化回路を介して出力するのかを選択するようにしてもよい。また、モードは、例えば、ＣＰＵがレジスタ設定することによって固定的に指定されても良いし、ディスクリプタに指定先のモードの情報を記載しておき、ディスクリプタ毎に指定されても良い。
【００９８】
このように、並列演算器ＭＡＣ６４ｆ＿０は、要求される演算精度、メモリ使用量、スループットに応じて演算処理の内容を切り替えることができる。並列演算器ＭＡＣ６４ｅ＿１〜ＭＡＣ６４ｅ＿３については、並列演算器ＭＡＣ６４ｅ＿０の構成と同様であるため、その説明を省略する。
【００９９】
（データ転送部１３によるデータ転送の例）
続いて、データ転送部１３によるＤＲＰ１１からアクセラレータ１２へのデータ転送の例について説明する。以下では、ＤＲＰ１１からデータ転送部１３を介してアクセラレータ１２にデータが入力される動作のモード（以下、入力モードと称す）に応じた、データ転送部１３によるデータ転送の例について説明する。
【０１００】
図２２は、入力モードが第１入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、６４ビット（１６ビット×４）のデータＤＱｏｕｔ＿０をそのままデータＤＰｉｎ＿０として出力する。そして、６４ビットのデータＤＰｉｎ＿０を構成する１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１０１】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１０２】
図２３は、入力モードが第２入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、３２ビット（１６ビット×２）のデータＤＱｏｕｔ＿０を構成する１６ビットのデータＤＱｏｕｔ＿００，ＤＱｏｕｔ＿０２のうち、データＤＱｏｕｔ＿００を２つに分配して１６ビットのデータＤＰｉｎ＿００，ＤＰｉｎ＿０１として出力するとともに、データＤＱｏｕｔ＿０２を２つに分配して１６ビットのデータＤＰｉｎ＿０２，ＤＰｉｎ＿０３として出力する。これら１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１０３】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１０４】
図２４は、入力モードが第３入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、１６ビットのデータＤＱｏｕｔ＿０を４つに分配して１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３として出力する。これら１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１０５】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１０６】
図２５は、入力モードが第４入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、６４ビット（１６ビット×４）のデータＤＱｏｕｔ＿０を構成する１６ビットのデータＤＱｏｕｔ＿００〜ＤＱｏｕｔ＿０３のうち、１６ビットのデータＤＱｏｕｔ＿００，ＤＱｏｕｔ＿０１を交互に選択し（図２５の例では、Ｂ１、Ｂ２、Ｂ３、Ｂ４の順に選択し）、かつ、その選択結果を２つに分配して１６ビットのデータＤＰｉｎ＿００，ＤＰｉｎ＿０１として出力する。また、残りの１６ビットのデータＤＱｏｕｔ＿０２，ＤＱｏｕｔ＿０３を交互に選択し（図２５の例では、Ａ１、Ａ２、Ａ３、Ａ４の順に選択し）、かつ、その選択結果を２つに分配して１６ビットのデータＤＰｉｎ＿０２，ＤＰｉｎ＿０３として出力する。これら１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１０７】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１０８】
このとき、アクセラレータ１２には、それぞれの入力端子において、ＤＲＰ１１の１回の出力処理で出力されるデータの２個分が入力されることになる。したがって、アクセラレータ１２の処理速度をＤＲＰ１１の処理速度の２倍にするとバランスが良い。また、アクセラレータ１２の処理性能を最大限に活かすためには、アクセラレータ１２の処理速度がＤＲＰ１１の処理速度の２倍より少し遅くなるように調整すると好ましい。なお、ＤＲＰ１１から間欠的にデータが出力される場合には、その間欠度合いに応じてＤＲＰ１１の処理速度を上げるとアクセラレータ１２の処理性能を最大限に活かせるようになり好ましくなる。
【０１０９】
図２６は、入力モードが第５入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、３２ビット（１６ビット×２）のデータＤＱｏｕｔ＿０を構成する１６ビットのデータＤＱｏｕｔ＿００，ＤＱｏｕｔ＿０１を交互に選択し（図２６の例では、Ａ１、Ａ２、Ａ３、Ａ４の順に選択し）、かつ、その選択結果を４つに分配して１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３として出力する。これら１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１１０】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１１１】
このとき、アクセラレータ１２には、それぞれの入力端子において、ＤＲＰ１１の１回の出力処理で出力されるデータの２個分が入力されることになる。したがって、アクセラレータ１２の処理速度をＤＲＰ１１の処理速度の２倍にするとバランスが良い。また、アクセラレータ１２の処理性能を最大限に活かすためには、アクセラレータ１２の処理速度がＤＲＰ１１の処理速度の２倍より少し遅くなるように調整すると好ましい。なお、ＤＲＰ１１から間欠的にデータが出力される場合には、その間欠度合いに応じてＤＲＰ１１の処理速度を上げるとアクセラレータ１２の処理性能を最大限に活かせるようになり好ましくなる。
【０１１２】
図２７は、入力モードが第６入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、４８ビット（１６ビット×３）のデータＤＱｏｕｔ＿０を構成する１６ビットのデータＤＱｏｕｔ＿００〜ＤＱｏｕｔ＿０２を順番に選択し（図２７の例では、Ａ１、Ａ２、Ａ３、Ａ４、Ａ５、Ａ６の順に選択し）、かつ、その選択結果を４つに分配して１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３として出力する。これら１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１１３】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１１４】
このとき、アクセラレータ１２には、それぞれの入力端子において、ＤＲＰ１１の１回の出力処理で出力されるデータの３個分が入力されることになる。したがって、アクセラレータ１２の処理速度をＤＲＰ１１の処理速度の３倍にするとバランスが良い。また、アクセラレータ１２の処理性能を最大限に活かすためには、アクセラレータ１２の処理速度がＤＲＰ１１の処理速度の３倍より少し遅くなるように調整すると好ましい。なお、ＤＲＰ１１から間欠的にデータが出力される場合には、その間欠度合いに応じてＤＲＰ１１の処理速度を上げるとアクセラレータ１２の処理性能を最大限に活かせるようになり好ましくなる。
【０１１５】
図２８は、入力モードが第７入力モードである場合における、データ転送部１３、及び、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０を示す図である。この場合、データ転送部１３は、選択回路１３１を用いて、６４ビット（１６ビット×４）のデータＤＱｏｕｔ＿０を構成する１６ビットのデータＤＱｏｕｔ＿００〜ＤＱｏｕｔ＿０３を順番に選択し（図２８の例では、Ａ１、Ａ２、Ａ３、Ａ４、Ａ５、Ａ６、Ａ７、Ａ８の順に選択し）、かつ、その選択結果を４つに分配して１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３として出力する。これら１６ビットのデータＤＰｉｎ＿００〜ＤＰｉｎ＿０３は、それぞれ並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３に入力される。
【０１１６】
データ転送部１３と並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３との関係については、データ転送部１３と並列演算器ＭＡＣ２５６＿０との関係と同様であるため、その説明を省略する。
【０１１７】
このとき、アクセラレータ１２には、それぞれの入力端子において、ＤＲＰ１１の１回の出力処理で出力されるデータの４個分が入力されることになる。したがって、アクセラレータ１２の処理速度をＤＲＰ１１の処理速度の４倍にするとバランスが良い。また、アクセラレータ１２の処理性能を最大限に活かすためには、アクセラレータ１２の処理速度がＤＲＰ１１の処理速度の４倍より少し遅くなるように調整すると好ましい。なお、ＤＲＰ１１から間欠的にデータが出力される場合には、その間欠度合いに応じてＤＲＰ１１の処理速度を上げるとアクセラレータ１２の処理性能を最大限に活かせるようになり好ましくなる。
【０１１８】
このように、本実施の形態に係る半導体装置１は、ＤＲＰ１１からデータ転送部１３を介してアクセラレータ１２に入力されるデータに対する並列演算処理の並列度を任意に変更することができる。なお、アクセラレータ１２の処理スループットに合うようＤＲＰ１１からのデータ出力レートを調整するとデータ処理の効率が良い。特に、アクセラレータ１２の処理スループットよりもＤＲＰ１１からのデータ出力レートを少し速くなるようにしておくと、アクセラレータ１２の処理性能を最大限に活かすことができる。
【０１１９】
（データ転送部１４によるデータ転送の例）
続いて、データ転送部１４によるアクセラレータ１２からＤＲＰ１１へのデータ転送の例について説明する。以下では、アクセラレータ１２からデータ転送部１４を介してＤＲＰ１１に向けてデータが出力される動作のモード（以下、出力モードと称す）に応じた、データ転送部１４によるデータ転送の例について説明する。なお、後述するデータＤＰｏｕｔ＿００〜ＤＰｏｕｔ＿０３によってデータＤＰｏｕｔ＿０が構成されている。
【０１２０】
図２９は、出力モードが第１出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、選択回路１４１を用いて、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２として逐次出力する。さらに、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３として逐次出力する。即ち、データ転送部１４は、１６ビットのデータＤＱｉｎ＿００〜ＤＱｉｎ＿０３からなる６４ビット幅のデータＤＱｉｎ＿０を逐次出力する。
【０１２１】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１２２】
図３０は、出力モードが第２出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、第１の選択回路１４１＿１及び第２の選択回路１４１＿２からなる選択回路１４１を備える。
【０１２３】
まず、選択回路１４１＿１は、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２として逐次出力する。また、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３として逐次出力する。
【０１２４】
その後、選択回路１４１＿２は、１６ビットのデータＤＱｉｎ＿００を出力した後に、続けて１６ビットのデータＤＱｉｎ＿０１を出力する。また、それに並行して、１６ビットのデータＤＱｉｎ＿０２を出力した後に、続けて１６ビットのデータＤＱｉｎ＿０３を出力する。即ち、データ転送部１４は、選択回路１４１＿２から出力されるデータＤＱｉｎ＿００およびＤＱｉｎ＿０１のいずれか一方と、データＤＱｉｎ＿０２およびＤＱｉｎ＿０３のいずれか一方からなる３２ビット幅のデータＤＱｉｎ＿０を逐次出力する。
【０１２５】
なお、データ転送部１４は、選択回路１４１＿２を用いて、１６ビットのデータＤＱｉｎ＿００と、１６ビットのデータＤＱｉｎ＿０１と、を交互に出力してもよい。また、１６ビットのデータＤＱｉｎ＿０２と、１６ビットのデータＤＱｉｎ＿０３と、を交互に出力してもよい。
【０１２６】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１２７】
図３１は、出力モードが第３出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、第１の選択回路１４１＿１及び第２の選択回路１４１＿２からなる選択回路１４１を備える。
【０１２８】
まず、選択回路１４１＿１は、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２として逐次出力する。また、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３として逐次出力する。
【０１２９】
その後、選択回路１４１＿２は、１６ビットのデータＤＱｉｎ＿００〜ＤＱｉｎ＿０３の中から１個ずつ順番に選択して１６ビット幅のデータＤＱｉｎ＿０として逐次出力する。
【０１３０】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１３１】
図３２は、出力モードが第４出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、第１の選択回路１４１＿１及び第２の選択回路１４１＿２からなる選択回路１４１を備える。
【０１３２】
まず、選択回路１４１＿１は、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００（図３２の例では、Ｃ１，Ｃ２，Ｃ３，Ｃ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１（図３２の例では、Ｄ１，Ｄ２，Ｄ３，Ｄ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２（図３２の例では、Ｅ１，Ｅ２，Ｅ３，Ｅ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３（図３２の例では、Ｆ１，Ｆ２，Ｆ３，Ｆ４・・・）として逐次出力する。
【０１３３】
その後、選択回路１４１＿２は、１６ビットのデータＤＱｉｎ＿００と、１６ビットのデータＤＱｉｎ＿０１と、を交互に（本例では４要素ずつ交互に）かつ２個分のデータを纏めて３２ビットのデータとして出力する。また、それに並行して、１６ビットのデータＤＱｉｎ＿０２と、１６ビットのデータＤＱｉｎ＿０３と、を順番に（本例では４要素ずつ順番に）かつ２個分のデータを纏めて３２ビットのデータとして出力する。即ち、データ転送部１４は、６４ビット幅のデータＤＱｉｎ＿０を逐次出力する。
【０１３４】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１３５】
このとき、ＤＲＰ１１には、アクセラレータ１２から出力されるデータの２分の１の速度でデータが入力される。したがって、特にアクセラレータ１２の処理速度がＤＲＰ１１の処理速度の２倍程度である場合、アクセラレータ１２がＤＲＰ１１の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ１２から出力されるデータの転送速度をＤＲＰ１１の処理速度まで低下させることができる。
【０１３６】
図３３は、出力モードが第５出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、第１の選択回路１４１＿１及び第２の選択回路１４１＿２からなる選択回路１４１を備える。
【０１３７】
まず、選択回路１４１＿１は、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００（図３３の例では、Ｃ１，Ｃ２，Ｃ３，Ｃ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１（図３３の例では、Ｄ１，Ｄ２，Ｄ３，Ｄ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２（図３３の例では、Ｅ１，Ｅ２，Ｅ３，Ｅ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３（図３３の例では、Ｆ１，Ｆ２，Ｆ３，Ｆ４・・・）として逐次出力する。
【０１３８】
その後、選択回路１４１＿２は、１６ビットのデータＤＱｉｎ＿００〜ＤＱｉｎ＿０３を順番に（本例では４要素ずつ順番に）かつ２個分のデータを纏めて３２ビット幅のデータＤＱｉｎ＿０として逐次出力する。
【０１３９】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１４０】
このとき、ＤＲＰ１１には、アクセラレータ１２から出力されるデータの２分の１の速度でデータが入力される。したがって、特にアクセラレータ１２の処理速度がＤＲＰ１１の処理速度の２倍程度である場合、アクセラレータ１２がＤＲＰ１１の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ１２から出力されるデータの転送速度をＤＲＰ１１の処理速度まで低下させることができる。
【０１４１】
図３４は、出力モードが第６出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、第１の選択回路１４１＿１及び第２の選択回路１４１＿２からなる選択回路１４１を備える。
【０１４２】
まず、選択回路１４１＿１は、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００（図３４の例では、Ｃ１，Ｃ２，Ｃ３，Ｃ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１（図３４の例では、Ｄ１，Ｄ２，Ｄ３，Ｄ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２（図３４の例では、Ｅ１，Ｅ２，Ｅ３，Ｅ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３（図３４の例では、Ｆ１，Ｆ２，Ｆ３，Ｆ４・・・）として逐次出力する。
【０１４３】
その後、選択回路１４１＿２は、１６ビットのデータＤＱｉｎ＿００〜ＤＱｉｎ＿０３を順番に（本例では４要素ずつ順番に）かつ３個分のデータを纏めて４８ビット幅のデータＤＱｉｎ＿０として逐次出力する。
【０１４４】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１４５】
このとき、ＤＲＰ１１には、アクセラレータ１２から出力されるデータの３分の１の速度でデータが入力される。したがって、特にアクセラレータ１２の処理速度がＤＲＰ１１の処理速度の３倍程度である場合、アクセラレータ１２がＤＲＰ１１の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ１２から出力されるデータの転送速度をＤＲＰ１１の処理速度まで低下させることができる。
【０１４６】
図３５は、出力モードが第７出力モードである場合における、アクセラレータ１２の並列演算器ＭＡＣ２５６＿０、及び、データ転送部１４を示す図である。この場合、データ転送部１４は、第１の選択回路１４１＿１及び第２の選択回路１４１＿２からなる選択回路１４１を備える。
【０１４７】
まず、選択回路１４１＿１は、並列演算器ＭＡＣ６４＿０から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿００の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿００（図３５の例では、Ｃ１，Ｃ２，Ｃ３，Ｃ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿１から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０１の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０１（図３５の例では、Ｄ１，Ｄ２，Ｄ３，Ｄ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿２から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０２の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０２（図３５の例では、Ｅ１，Ｅ２，Ｅ３，Ｅ４・・・）として逐次出力する。また、並列演算器ＭＡＣ６４＿３から並列に出力された最大６４個の１６ビットのデータＤＰｏｕｔ＿０３の中から１個ずつ順番に選択して１６ビットのデータＤＱｉｎ＿０３（図３５の例では、Ｆ１，Ｆ２，Ｆ３，Ｆ４・・・）として逐次出力する。
【０１４８】
その後、選択回路１４１＿２は、１６ビットのデータＤＱｉｎ＿００〜ＤＱｉｎ＿０３を順番（本例では４要素ずつ順番に）にかつ４個分のデータを纏めて６４ビット幅のデータＤＱｉｎ＿０として逐次出力する。
【０１４９】
並列演算器ＭＡＣ２５６＿１〜ＭＡＣ２５６＿３とデータ転送部１４との関係については、並列演算器ＭＡＣ２５６＿０とデータ転送部１４との関係と同様であるため、その説明を省略する。
【０１５０】
このとき、ＤＲＰ１１には、アクセラレータ１２から出力されるデータの４分の１の速度でデータが入力される。したがって、特にアクセラレータ１２の処理速度がＤＲＰ１１の処理速度の４倍程度である場合、アクセラレータ１２がＤＲＰ１１の処理に律速されることなく効率よく並列演算処理を実行した後、アクセラレータ１２から出力されるデータの転送速度をＤＲＰ１１の処理速度まで低下させることができる。
【０１５１】
このように、本実施の形態に係る半導体装置１は、アクセラレータ１２からデータ転送部１４を介してＤＲＰ１１に向けて出力されるデータを、任意のビット幅のデータに変更することができる。なお、アクセラレータ１２の処理性能を最大限に活かすには、アクセラレータ１２の出力データレートよりＤＲＰ１１が受け取るデータレートが少し高くなるようにすることが好ましい。
【０１５２】
図３６は、入力データに対して並列度を最大にして演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。図３６に示すように、ＤＲＰ１１から出力されたデータＤＱｏｕｔ＿０は、データ転送部１３によって、データＤＰｉｎ＿０〜ＤＰｉｎ＿３として、各並列演算器ＭＡＣ２５６＿０〜ＭＡＣ２５６＿３に設けられた並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３のそれぞれに分配供給される。このとき、並列演算部１２１は、最大で１０２４個の演算器を用いて、データＤＱｏｕｔ＿０（データＤＰｉｎ＿０〜ＤＰｉｎ＿３）に対して並列に演算処理を実行することができる。なお、データ転送部１４は、１０２４個の演算器のそれぞれから並列に出力された演算処理結果を選択的に出力するように構成されることにより、これらの演算処理結果を所望のビット幅のデータに変換してＤＲＰ１１に向けて出力することができる。
【０１５３】
図３７は、入力データに対して並列度を最小単位にして演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。図３７に示すように、ＤＲＰ１１から出力されたデータＤＱｏｕｔ＿０は、データ転送部１３によって、データＤＰｉｎ＿０として、並列演算器ＭＡＣ２５６＿０に設けられた並列演算器ＭＡＣ６４＿０に供給される。このとき、並列演算部１２１は、並列演算器ＭＡＣ６４＿０に設けられた６４個の演算器のうち１個〜６４個の範囲の演算器を用いて、データＤＱｏｕｔ＿０（データＤＰｉｎ＿０）に対して並列に演算処理を実行することができる。
【０１５４】
図３８は、入力データに対して並列度を中程度にして演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。図３８の例では、ＤＲＰ１１から出力されたデータＤＱｏｕｔ＿０が、データ転送部１３によって、データＤＰｉｎ＿０，ＤＰｉｎ＿１として、並列演算器ＭＡＣ２５６＿０に設けられた並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３、及び、並列演算器ＭＡＣ２５６＿０に設けられた並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿２のそれぞれに分配供給されている。ここで、並列演算部１２１は、例えば４００個の演算器を用いて、データＤＱｏｕｔ＿０（データＤＰｉｎ＿０，ＤＰｉｎ＿１）に対して並列に演算処理を実行することができる。
【０１５５】
図３９は、２つの入力データのそれぞれに対して並列演算処理を行った場合における並列演算部１２１の演算処理の流れを示す図である。図３９の例では、ＤＲＰ１１から出力されたデータＤＱｏｕｔ＿０が、データ転送部１３によって、データＤＰｉｎ＿０，ＤＰｉｎ＿１として、並列演算器ＭＡＣ２５６＿０に設けられた並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿３、及び、並列演算器ＭＡＣ２５６＿１に設けられた並列演算器ＭＡＣ６４＿０〜ＭＡＣ６４＿２のそれぞれに分配供給されている。さらに、ＤＲＰ１１から出力されたデータＤＱｏｕｔ＿２が、データ転送部１３によって、データＤＰｉｎ＿２として、並列演算器ＭＡＣ２５６＿２に設けられた並列演算器ＭＡＣ６４＿０，ＭＡＣ６４＿１のそれぞれに分配供給されている。このとき、並列演算部１２１は、例えば４００個の演算器を用いて、データＤＱｏｕｔ＿０（データＤＰｉｎ＿０，ＤＰｉｎ＿１）に対して並列に演算処理を実行するとともに、例えば１２０個の別の演算器を用いて、データＤＱｏｕｔ＿２（データＤＰｉｎ＿２）に対して並列に演算処理を実行することができる。
【０１５６】
なお、２つ以上の入力データに対してそれぞれ異なる複数の演算器を用いて演算処理を実行する場合には、例えば、一方の入力データに対する演算処理に用いられる複数の演算器と、他方の入力データに対する演算処理に用いられる複数の演算器と、には、ローカルメモリ１２２から読み出された個別の所定データが供給されてもよいし、共通の所定データが供給されてもよい。
【０１５７】
＜実施の形態２＞
図４０は、実施の形態２にかかる半導体装置１ａが搭載された半導体システムＳＹＳ１ａの構成例を示すブロック図である。図４０に示す半導体装置１ａは、図１に示す半導体装置１と比較して、ＤＲＰ１１に代えてＤＲＰ１１ａを備える。
【０１５８】
ＤＲＰ１１ａは、例えば、２つの状態管理部（ＳＴＣ；Ｓｔａｔｅ  Ｔｒａｎｓｉｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ）１１１，１１２を有し、一方の状態管理部１１１を用いて、外部メモリ３から読み出されたデータに対して演算処理を行ってその処理結果をアクセラレータ１２に向けて出力するとともに、他方の状態管理部１１２を用いて、アクセラレータ１２から出力されたデータに対して演算処理を行ってその処理結果を外部メモリ３に書き込んでいる。つまり、ＤＲＰ１１ａは、アクセラレータ１２に送信するデータの処理と、アクセラレータ１２から受信したデータの処理と、をそれぞれ独立して動作させている。それにより、ＤＲＰ１１ａでは、ＤＲＰ１１の場合よりも、動的再構成を実行する際に与えられる動作命令（アプリケーション）をより簡易なものにすることができる。また、それによって、ＤＲＰ１１ａは、ＤＲＰ１１の場合よりも容易に回路の再構成を行うことが可能となる。
【０１５９】
また、ＤＲＰ１１ａは、アクセラレータ１２に送信するデータの処理と、アクセラレータ１２から受信したデータの処理と、をそれぞれ独立して動作させる２つの状態管理部を備えることにより、例えば、外部メモリ３から読み出されたデータが入力される外部入力端子、アクセラレータ１２に向けたデータが出力される外部出力端子、アクセラレータ１２からのデータが入力される外部入力端子、及び、外部メモリ３に向けた書き込みデータが出力される外部出力端子、の配置の自由度を高めることができる。
【０１６０】
以上のように、上記実施の形態１，２にかかる半導体装置は、並列に演算処理を行う並列演算器を有するアクセラレータと、データの授受を逐次行うＤＲＰ等のデータ処理部と、アクセラレータによる複数の演算処理結果を順番に選択してデータ処理部に対して出力するデータ転送部と、を備える。それにより、上記実施の形態１，２にかかる半導体装置及びそれを備えた半導体システムは、大量の規則的なデータ処理についてはアクセラレータを用いて行い、かつ、それ以外のデータ処理についてはデータ処理部を用いて行うことができるため、例えば、ディープラーニング処理等の大規模な演算処理おいても効率の良い演算処理を実現することができる。
【０１６１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【０１６２】
上記実施の形態１，２では、並列演算部１２１を構成する複数の演算器に対して、ローカルメモリ１２２から読み出された個別の所定データがそれぞれ供給される場合について説明したが、これに限られない。並列演算部１２１を構成する複数の演算器の全部又はグループに対して、ローカルメモリ１２２から読み出された共通の所定データが供給されていてもよい。この場合、ローカルメモリ１２２の回路規模及び消費電力を低減させることが可能となる。
【０１６３】
上記実施の形態の一部または全部は、以下の付記のようにも記載され得るが、以下には限られない。
【０１６４】
（付記１）
逐次入力される第１入力データに対してデータ処理を行うとともに、データ処理の結果を第１出力データとして逐次出力するデータ処理部と、
前記データ処理部から逐次出力される前記第１出力データと、複数の所定データのそれぞれと、の間で並列に演算処理を行う並列演算器、及び、それらの演算処理結果を保持する保持回路、を有するアクセラレータと、
前記アクセラレータによって保持された複数の演算処理結果を順番に選択して前記第１入力データとして逐次出力する第１データ転送部と、
を備えた、半導体装置。
【０１６５】
（付記２）
前記データ処理部は、
逐次与えられる動作命令に基づいて動的に再構成可能なプロセッサである、
付記１に記載の半導体装置。
【０１６６】
（付記３）
付記１に記載の半導体装置と、
外部メモリと、
前記外部メモリから読み出された制御命令に基づいて前記半導体装置の動作を制御する制御部と、
を備えた、半導体システム。
【符号の説明】
【０１６７】
１  半導体装置
２  ＣＰＵ
３  外部メモリ
１１  ＤＲＰ
１２  アクセラレータ
１３  データ転送部
１４  データ転送部
１５  ＤＭＡ
１１１，１１２  状態管理部
１２１  並列演算部
１２１＿０〜１２１＿６３  並列演算器
１２２  ローカルメモリ
１３１  選択回路
１４１  選択回路
ＡＤ１  加算器
ＡＤ２  加算器
ＭＸ１  乗算器
ＭＡＣ６４＿０〜ＭＡＣ６４＿３  並列演算器
ＭＡＣ２５６＿０〜ＭＡＣ２５６＿３  並列演算器
ＭＸ２  乗算器
ＲＧ１  レジスタ
ＲＧ２  レジスタ
ＳＹＳ１  半導体システム
ＴＮ１  双曲線正接関数の演算器
【図１】
2019219753.tif 000003
【図２】
2019219753.tif 000004
【図３】
2019219753.tif 000005
【図４】
2019219753.tif 000006
【図５】
2019219753.tif 000007
【図６】
2019219753.tif 000008
【図７】
2019219753.tif 000009
【図８】
2019219753.tif 000010
【図９】
2019219753.tif 000011
【図１０】
2019219753.tif 000012
【図１１】
2019219753.tif 000013
【図１２】
2019219753.tif 000014
【図１３】
2019219753.tif 000015
【図１４】
2019219753.tif 000016
【図１５】
2019219753.tif 000017
【図１６】
2019219753.tif 000018
【図１７】
2019219753.tif 000019
【図１８】
2019219753.tif 000020
【図１９】
2019219753.tif 000021
【図２０】
2019219753.tif 000022
【図２１】
2019219753.tif 000023
【図２２】
2019219753.tif 000024
【図２３】
2019219753.tif 000025
【図２４】
2019219753.tif 000026
【図２５】
2019219753.tif 000027
【図２６】
2019219753.tif 000028
【図２７】
2019219753.tif 000029
【図２８】
2019219753.tif 000030
【図２９】
2019219753.tif 000031
【図３０】
2019219753.tif 000032
【図３１】
2019219753.tif 000033
【図３２】
2019219753.tif 000034
【図３３】
2019219753.tif 000035
【図３４】
2019219753.tif 000036
【図３５】
2019219753.tif 000037
【図３６】
2019219753.tif 000038
【図３７】
2019219753.tif 000039
【図３８】
2019219753.tif 000040
【図３９】
2019219753.tif 000041
【図４０】
2019219753.tif 000042