(57)【要約】マイクロプロセッサシステムは、計算配列とベクトル計算ユニットとを備える。計算配列は、複数の計算ユニットを含む。ベクトル計算ユニットは、計算配列と通信しており、複数の処理要素を含む。処理要素は、計算配列から出力データ要素を受け取り、受け取った出力データ要素を並列処理するように構成される。【選択図】図１
2020529070.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算ユニットを含む計算配列と、
該計算配列と通信するベクトル計算ユニットと、を備える、マイクロプロセッサシステム。
【請求項２】
前記ベクトル計算ユニットは、複数の処理要素を含み、該処理要素は、前記計算配列から出力データ要素を受け取り、該受け取った出力データ要素を並列処理するように構成される、請求項１に記載のシステム。
【請求項３】
前記処理要素は、単一のプロセッサ命令に応答して、前記受け取った出力データ要素を並列処理する、請求項２に記載のシステム。
【請求項４】
前記計算配列がマトリクスプロセッサを含む、請求項１に記載のシステム。
【請求項５】
前記計算配列は、２つのベクトル入力オペランドを受け取るように構成される、請求項１に記載のシステム。
【請求項６】
前記複数の計算ユニットの各計算ユニットは、算術論理演算ユニット、アキュムレータおよびシャドウレジスタを含む、請求項１に記載のシステム。
【請求項７】
前記複数の計算ユニットの各計算ユニットは、乗算演算および加算演算を実行するように構成される、請求項１に記載のシステム。
【請求項８】
前記複数の計算ユニットの各計算ユニットは、ドット積成分演算を実行するように構成される、請求項１に記載のシステム。
【請求項９】
前記複数の計算ユニットの各計算ユニットは、単一の計算配列命令に応答して、ドット積結果成分を並列して計算するように構成される、請求項１に記載のシステム。
【請求項１０】
前記複数の処理要素の各処理要素は、他の処理要素と並列して算術論理演算ユニット操作を実行するように構成された算術論理演算ユニットを含む、請求項２に記載のシステム。
【請求項１１】
通知信号が、前記計算配列からの出力データ要素が前記ベクトル計算ユニット用に準備ができていることを識別する、請求項２に記載のシステム。
【請求項１２】
前記計算配列は、先入れ先出しキューとして動作するように構成される、請求項１に記載のシステム。
【請求項１３】
前記計算配列からの前記出力データ要素は、ドット積結果に相当する、請求項２に記載のシステム。
【請求項１４】
前記計算配列からの前記出力データ要素は、画像データに対して実行された畳み込み結果に相当する、請求項２に記載のシステム。
【請求項１５】
前記単一のプロセッサ命令は、非線形関数の結果を計算するために使用される、請求項３に記載のシステム。
【請求項１６】
前記非線形関数は、正規化線形ユニット関数またはシグモイド関数である、請求項１５に記載のシステム。
【請求項１７】
前記ベクトル計算ユニットと通信する後処理ユニットをさらに備える、請求項１に記載のシステム。
【請求項１８】
前記後処理ユニットは、プーリング機能を実行するように構成される、請求項１７に記載のシステム。
【請求項１９】
前記計算配列から受け取った前記出力データ要素はアキュムレータに格納される、請求項２に記載のシステム。
【請求項２０】
前記複数の処理要素の各処理要素は、前記アキュムレータのスライスおよび１つまたは複数のベクトルレジスタのスライスにアクセスするように構成される、請求項１９に記載のシステム。
【請求項２１】
前記ベクトル計算ユニットは、前記計算配列からの出力データ要素に適合するサイズの複数のベクトルレジスタをさらに含む、請求項２に記載のシステム。
【請求項２２】
複数の計算ユニットを含み、該複数の計算ユニットの各計算ユニットが単一の計算配列命令に応答してドット積成分演算を実行するように構成された計算配列と、
該計算配列と通信するベクトル計算ユニットであって、該ベクトル計算ユニットは複数の処理要素を含み、該処理要素は、前記計算配列から出力データ要素を受け取り、単一のベクトル計算ユニット命令に応答して、該受け取った出力データ要素を並列処理するように構成されるベクトル計算ユニットと、
を備える、マイクロプロセッサシステム。
【請求項２３】
前記単一の計算配列命令を前記計算配列に提供し、前記単一のベクトル計算ユニット命令を前記ベクトル計算ユニットに提供するように構成された制御ユニットをさらに備える、請求項２２に記載のシステム。
【請求項２４】
前記制御ユニットは、前記計算配列から転送された前記出力データ要素を前記ベクトル計算ユニットの前記処理要素に同期させる、請求項２３に記載のシステム。
【請求項２５】
ベクトル計算ユニットのための単一のプロセッサ命令を受け取り、該ベクトル計算ユニットは計算配列と通信しており、該計算配列から出力データ要素を受け取るように構成された複数の処理要素を含む工程と、
前記計算配列から該出力データ要素を受け取り、該計算配列は複数の計算ユニットを含む工程と、
該単一のプロセッサ命令に応答して、該受け取った出力データ要素を並列処理する工程と、を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、２０１８年２月１日に出願されたＶＥＣＴＯＲ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＵＮＩＴというタイトルが付けられた米国仮特許出願第６２／６２５，２５１号の優先権を主張し、かつ２０１７年７月２４日に出願されたＡＣＣＥＬＥＲＡＴＥＤ  ＭＡＴＨＥＭＡＴＩＣＡＬ  ＥＮＧＩＮＥというタイトルが付けられた米国仮特許出願第６２／５３６，３９９号の優先権を主張しており、また２０１７年７月２４日に出願されたＡＣＣＥＬＥＲＡＴＥＤ  ＭＡＴＨＥＭＡＴＩＣＡＬ  ＥＮＧＩＮＥというタイトルが付けられた米国仮特許出願第６２／５３６，３９９号の優先権を主張する２０１７年９月２０日に出願されたＡＣＣＥＬＥＲＡＴＥＤ  ＭＡＴＨＥＭＡＴＩＣＡＬ  ＥＮＧＩＮＥというタイトルが付けられた同時出願中の米国特許出願第１５／７１０，４３３号の一部継続であり、これらの特許はすべて、あらゆる目的のために参照により本明細書に組み込まれている。
【背景技術】
【０００２】
機械学習および人工知能の処理には、通常、大量のデータセットに対して数学的演算を実行する必要があり、多くの場合、複数の畳み込み層とプーリング層の解明を伴う。機械学習および人工知能技術は通常、行列演算および活性化関数などの非線形関数を利用する。機械学習のアプリケーションには、自動運転およびドライバ支援自動車が含まれる。一部のシナリオでは、コンピュータプロセッサを使用して機械学習のトレーニングと推論を実行する。従来のコンピュータプロセッサは、１つの数学的演算を非常に高速に実行することは可能であるが、通常、限られた量のデータにしか同時に作用することができない。１つの代替として、グラフィカル処理ユニット（ＧＰＵ）が利用される場合もあり、より大きなデータセットに対して同じ数学的演算を並列して実行することが可能である。複数のプロセッサコアを利用することによって、ＧＰＵは複数のタスクを並列して実行してもよく、通常、従来のコンピュータプロセッサよりも高速で並列処理を利用した大規模なグラフィックス処理タスクを完了することが可能である。ただし、ＧＰＵも従来のコンピュータプロセッサも、もともと機械学習や人工知能操作用に設計されたものではない。機械学習および人工知能操作は、非常に大きなデータセットに対して一セットの特定の機械学習プロセッサ操作を繰り返し適用することに依存している場合が多い。したがって、各並列操作に関して複数の処理コアのオーバーヘッドなしで、大きなデータセットに対して機械学習および人工知能固有の処理操作を並列して実行することをサポートするマイクロプロセッサシステムに対する要望がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明の様々な実施形態は、以下の詳細な説明および添付の図面に開示されている。
【図面の簡単な説明】
【０００４】
【図１】機械学習処理を実行するためのマイクロプロセッサシステムの一実施形態を示すブロック図である。
【０００５】
【図２】機械学習処理を実行するためのマイクロプロセッサシステムの一実施形態を示すブロック図である。
【０００６】
【図３】機械学習処理を実行するためのマイクロプロセッサシステムの一実施形態を示すブロック図である。
【０００７】
【図４Ａ】機械学習処理を実行するためのベクトル計算ユニットの一実施形態を示すブロック図である。
【０００８】
【図４Ｂ】ベクトルレジスタの例示的なエイリアシングを示す表である。
【０００９】
【図５】マイクロプロセッサシステムに関するプロセッサ命令を決定するためのプロセスの一実施形態を示すフロー図である。
【００１０】
【図６Ａ】ベクトル計算ユニットの実行を進行させるためのプロセスの一実施形態を示すフロー図である。
【００１１】
【図６Ｂ】ベクトル計算ユニットによりベクトルデータを処理するためのプロセスの一実施形態を示すフロー図である。
【００１２】
【図７】ベクトル計算ユニット命令の符号化フォーマットの一実施形態を示すブロック図である。
【００１３】
【図８】ベクトル計算ユニットにより単一のベクトル計算ユニット命令を実行するためのプロセスの実施形態を示すフロー図である。
【００１４】
【図９】ベクトル計算ユニットの例示的な命令サイクルを示す図である。
【００１５】
【図１０】計算配列の計算ユニットの一実施形態を示すブロック図である。
【発明を実施するための形態】
【００１６】
本発明は、プロセス、装置、システム、物質の組成、コンピュータ可読記憶媒体で具現化されるコンピュータプログラム製品、ならびに／またはプロセッサに結合されたメモリに格納された、および／もしくはプロセッサに結合されたメモリによって提供される命令を実行するように構成されたプロセッサなどのプロセッサとして含め、多数の方法で実行することができる。本明細書では、これらの実装形態、または本発明が採り得る他の任意の形態は、技術と呼ばれる場合がある。一般に、開示されるプロセスのステップの順序は、本発明の範囲内で変更されてもよい。特に明記しない限り、タスクを実行するように構成されていると説明されるプロセッサやメモリなどのコンポーネントは、特定の時間にタスクを実行するように一時的に構成されている一般的なコンポーネント、またはタスクを実行するように製造された特定のコンポーネントとして実装されてもよい。本明細書で使用される「プロセッサ」という用語は、コンピュータプログラム命令などのデータを処理するように構成された１つまたは複数のデバイス、回路、および／または処理コアを指す。
【００１７】
本発明の１つまたは複数の実施形態の詳細な説明が、本発明の原理を説明する添付の図とともに以下に提供される。本発明はそのような実施形態に関連して説明されるが、本発明はいかなる実施形態にも限定されない。本発明の範囲は、特許請求の範囲によってのみ制限され、本発明は、多数の代替形態、修正形態および均等物を包含する。本発明の完全な理解を提供するために、多数の特定の詳細が以下の説明に記載されている。これらの詳細は例の目的のために提供されており、本発明はこれらの特定の詳細の一部またはすべてがなくても、特許請求の範囲に従って実施され得る。明確にするために、本発明が不必要に不明瞭にならないように、本発明に関連する技術分野で知られている技術資料は詳細には説明されていない。
【００１８】
ベクトル計算ユニットおよびベクトル計算ユニット命令セットアーキテクチャを利用するマイクロプロセッサシステムが開示されている。例えば、マイクロプロセッサシステムは、ベクトル計算ユニットと通信する計算配列を含む。様々な実施形態において、計算配列は、２つの入力ベクトルに対して算術演算を実行することが可能なマトリクスプロセッサであり、入力ベクトルからＭ個のオペランドとＮ個のオペランドを受け取る複数の計算ユニットを含む。いくつかの実施形態では、計算ユニットは、ドット積の生成および畳み込みのための様々な処理の実行などの操作を実行するための算術論理演算ユニット、アキュムレータおよびシャドウレジスタを含むサブ回路である。各コアがその固有の独自の処理命令を受け取るように構成されている従来のグラフィカル処理ユニット（ＧＰＵ）または中央処理ユニット（ＣＰＵ）処理コアとは異なり、計算配列の計算ユニットは各々、計算配列が受け取った個々の命令に応答して同じ計算を並列して実行する。様々な実施形態において、ベクトル計算ユニットは、入力データのベクトルに対してロード操作、算術演算およびストア操作を並列して実行するための複数の処理要素を含む。ベクトル計算ユニットの処理要素は、計算配列から出力を受け取るように構成される。様々な実施形態において、計算配列の出力およびベクトル計算ユニットへの入力は、データの配列である。ベクトル計算ユニットに受け取られた入力は、単一のプロセッサ命令に応答して並列処理される。計算配列と同様に、ベクトル計算ユニットの処理要素はそれぞれ、ベクトル計算ユニットが受け取った個々の命令に応答して同じ計算を並列して実行する。いくつかの実施形態では、マイクロプロセッサシステムは、ベクトル計算ユニットに命令を提供するように構成された制御ユニットをさらに含む。各単一のプロセッサ命令は、ベクトル計算ユニットによって実行される複数のコンポーネント命令を指定してもよい。単一の命令に応答して、ベクトル計算ユニットの複数の処理要素のそれぞれは、他の処理要素と並列してベクトル入力の異なるデータ要素を処理する。いくつかの実施形態では、ベクトル計算ユニットの出力は、プーリング作業などの後処理を実行するための後処理ユニットに供給される。
【００１９】
いくつかの実施形態では、マイクロプロセッサシステムは、少なくとも計算配列と、ベクトル計算ユニットとを含む。例えば、計算配列の出力がベクトル計算ユニットへの入力として供給されるように、計算配列はベクトル計算ユニットに通信可能に接続される。様々な実施形態において、計算配列は複数の計算ユニットを含む。例えば、計算ユニットは、１つまたは複数の乗算、加算およびシフト演算を実行する機能を含むマトリクスプロセッサのサブ回路であり得る。別の例として、計算ユニットは、ドット積演算を実行する機能を含むサブ回路であり得る。様々な実施形態において、計算配列には、データ入力に対して複数の操作を並列して実行するのに十分な数の計算ユニットが含まれる。例えば、Ｍ個のオペランドとＮ個のオペランドを受け取るように構成された計算配列には、少なくともＭ×Ｎ個の計算ユニットが含まれてよい。様々な実施形態において、マイクロプロセッサシステムは、計算配列とベクトル計算ユニットとの間の処理を調整するための制御ユニットをさらに含む。例えば、制御ユニットは、メモリから計算配列に供給されるデータ、計算配列からベクトル計算ユニットに供給されるデータ、および／またはベクトル計算ユニットからメモリに格納される、または後処理ユニットに供給されるデータを調整してもよい。いくつかの実施形態では、制御ユニットは、計算配列命令を計算配列に提供する、ベクトル計算ユニット命令をベクトル計算ユニットに提供する、および／または後処理命令を後処理ユニットに提供するように構成される。
【００２０】
いくつかの実施形態では、計算配列と通信するベクトル計算ユニットは、入力として計算配列から出力データ要素を受け取るように構成された複数の処理要素を含む。例えば、ベクトルエンジンなどのベクトル計算ユニットは、処理するためのベクトルを入力として受け取る。ベクトル計算ユニットは、入力ベクトルの各要素に対する処理要素を含んでもよい。Ｎ個の要素（またはオペランド）のベクトルを受け取るように構成された例示的なベクトル計算ユニットは、Ｎ個の要素を並列して処理するためのＮ個の処理要素を含んでよい。様々な実施形態において、処理要素は、計算配列から出力データ要素を受け取るように構成される。例えば、計算配列からの出力は、ベクトル計算ユニットの処理要素が受け取るように供給されるデータ要素のベクトルであり得る。様々な実施形態において、各ベクトル計算ユニットは、単一のプロセッサ命令に応答して、計算配列から受け取った出力データ要素を並列処理する。例えば、単一のプロセッサ命令が、対応するデータ要素に対して実行されるベクトル計算ユニットの処理要素のそれぞれに適用される。
【００２１】
いくつかの実施形態では、制御ユニットは、ベクトル計算ユニットに少なくとも単一のプロセッサ命令を提供するように構成される。単一のプロセッサ命令は、（例えば、単一のプロセッサ命令に応答して）ベクトル計算ユニットによって実行される複数のコンポーネント命令を指定する。例えば、制御ユニットは、複数のコンポーネント命令を含む命令トライアドなどの単一のベクトル命令をベクトル計算ユニットに提供する。いくつかの実施形態では、命令トライアドは、別個のロード命令、算術論理演算ユニット（ＡＬＵ）命令およびストア命令などの最大３つのコンポーネント命令を含む簡素なプロセッサ命令である。３つのコンポーネント命令は、ベクトル計算ユニットによって受け取られ、（例えば、命令トライアドに応じて）実行される。例えば、ロード命令、ＡＬＵ命令およびストア命令をバンドルする命令トライアドを受け取るベクトル計算ユニットは、そのロード命令、算術命令およびストア命令を実行する。様々な実施形態では、単一のプロセッサ命令に応答して、ベクトル計算ユニットの複数の処理要素は、他の処理要素と並列して異なるデータ要素を処理するように構成される。例えば、各処理要素は、入力ベクトルからベクトル計算ユニットへの異なるデータ要素を並列処理することが可能である。
別の例として、単一のベクトルプロセッサ命令トライアドのコンポーネント命令の各々がベクトル入力の各要素に適用されて、ベクトル計算ユニットを使用してＮ個の要素の入力ベクトル全体の処理を並列して完了する場合もある。
【００２２】
図１は、機械学習処理を実行するためのマイクロプロセッサシステムの一実施形態を示すブロック図である。示される例では、マイクロプロセッサシステム１００は、制御ユニット１０１、データ入力１０３、重み入力１０５、マトリクスプロセッサ１０７、ベクトルエンジン１１１および後処理ユニット１１５を含む。データ入力１０３および重み入力１０５は、マトリクスプロセッサ１０７のためのデータを準備するための入力モジュールである。いくつかの実施形態では、データ入力１０３および重み入力１０５はそれぞれ、入力データフォーマッタ、キャッシュもしくはバッファ、および／またはマトリクスプロセッサ１０７のためのデータを準備するための論理回路を含む。例えば、データ入力１０３は、画像データに対応する２次元配列からＮ個のオペランドを準備し、重み入力１０５は、マトリクスプロセッサ１０７によって処理される重み値のベクトルに対応するＭ個のオペランドを準備することができる。いくつかの実施形態では、図５のプロセスは、マトリクスプロセッサ１０７に対するマトリクスプロセッサ命令およびベクトルエンジン１１１に対するベクトルエンジン命令を含む、マイクロプロセッサシステム１００上で機能するための命令を準備するために実行される。いくつかの実施形態では、ベクトルエンジン１１１を含むマイクロプロセッサシステム１００は、図６Ａ、図６Ｂおよび図８に関して以下で説明するプロセスを実行する。
【００２３】
いくつかの実施形態では、マトリクスプロセッサ１０７は、複数の計算ユニットを含む計算配列である。例えば、重み入力１０５およびデータ入力１０３からそれぞれＭ個のオペランドおよびＮ個のオペランドを受け取るマトリクスプロセッサはＭ×Ｎ個の計算ユニットを含む。示される図では、マトリクスプロセッサ１０７の内部の小さな正方形は、マトリクスプロセッサ１０７が計算ユニットの論理的２次元配列を含むことを示している。計算ユニット１０９は、マトリクスプロセッサ１０７の複数の計算ユニットのうちの１つである。いくつかの実施形態では、各計算ユニットは、データ入力１０３から１つのオペランドを受け取り、重み入力１０５から１つのオペランドを受け取るように構成される。いくつかの実施形態では、計算ユニットは論理的二次元配列に従って構成されるが、マトリクスプロセッサは必ずしも物理的な二次元配列として配置された計算ユニットで製造されるわけではない。例えば、データ入力１０３のｉ番目のオペランドおよび重み入力１０５のｊ番目のオペランドは、マトリクスプロセッサ１０７のｉ番目×ｊ番目の計算ユニットによって処理されるように構成される。
【００２４】
様々な実施形態において、コンポーネントデータ入力１０３、重み入力１０５、マトリクスプロセッサ１０７、ベクトルエンジン１１１および後処理ユニット１１５のデータ幅は広いデータ幅であり、複数のオペランドを並列して転送する能力を含む。いくつかの実施形態では、データ入力１０３および重み入力１０５はそれぞれ９６バイト幅である。いくつかの実施形態では、データ入力１０３は１９２バイト幅であり、重み入力１０５は９６バイト幅である。様々な実施形態において、データ入力１０３および重み入力１０５の幅は動的に構成することが可能である。例えば、データ入力１０３は、９６バイトまたは１９２バイトに動的に構成されてもよく、重み入力１０５は、９６バイトまたは４８バイトに動的に構成されてもよい。いくつかの実施形態では、動的な構成は制御ユニット１０１によって制御される。さまざまな実施形態において、９６バイトのデータ幅により、９６個のオペランドを並列して処理することが可能になる。例えば、データ入力１０３が９６バイト幅になるように構成された実施形態では、データ入力１０３は、９６のオペランドをマトリクスプロセッサ１０７に並列して転送することができる。
【００２５】
様々な実施形態において、マトリクスプロセッサ１０７は、データ入力１０３からＮバイトを受け取り、重み入力１０５からＭバイトを受け取るように構成されており、少なくともＭ×Ｎの計算ユニットを含む。例えば、マトリクスプロセッサ１０７は、データ入力１０３から９６バイトを受け取り、重み入力１０５から９６バイトを受け取るように構成されてもよく、少なくとも９６×９６の計算ユニットを含む。別の例として、マトリクスプロセッサ１０７は、データ入力１０３から１９２バイトを受け取り、重み入力１０５から４８バイトを受け取るように構成されてもよく、少なくとも１９２×４８の計算ユニットを含む。様々な実施形態において、マトリクスプロセッサ１０７の次元は動的に構成されてもよい。例えば、マトリクスプロセッサ１０７のデフォルト次元は、データ入力１０３から９６バイトを受け取り、重み入力１０５から９６バイトを受け取るように構成され得るが、入力次元は、１９２バイトおよび４８バイトにそれぞれ動的に構成されてもよい。様々な実施形態において、各計算ユニットの出力サイズは、入力サイズと等しいか、それより大きい。例えば、いくつかの実施形態では、各計算ユニットへの入力は２つの１バイトのオペランドであり、１つはデータ入力１０３からのオペランドに相当し、もう１つは重み入力１０５からのものであり、２つのオペランドの処理の出力は４バイトの結果である。別の例として、マトリクスプロセッサ１０７は、データ入力１０３から９６バイトを受け取り、重み入力１０５から９６バイトを受け取り、９６個の４バイト結果を出力するように構成されてもよい。いくつかの実施形態では、マトリクスプロセッサ１０７の出力はベクトルである。例えば、入力ベクトルの各要素（またはオペランド）のサイズが１バイトである２つの９６幅の入力ベクトルを受け取るように構成されたマトリクスプロセッサは、ベクトル結果の各要素が４バイトのサイズである９６幅のベクトル結果を出力することができる。
【００２６】
様々な実施形態において、マトリクスプロセッサ１０７の各計算ユニットは、算術論理演算ユニット、アキュムレータおよびシャドウレジスタを含むサブ回路である。示される例では、マトリクスプロセッサ１０７の計算ユニットは、重み入力１０５およびデータ入力１０３それぞれからのＭ個のオペランドおよびＮ個のオペランドに対して算術演算を実行することができる。様々な実施形態において、各計算ユニットは、１つまたは複数の乗算、加算、累積および／またはシフト演算を実行するように構成される。いくつかの実施形態では、各計算ユニットはドット積演算を実行するように構成される。例えば、いくつかの実施形態では、計算ユニットは、ドット積結果を計算するために複数のドット積成分演算を実行してもよい。例えば、マトリクスプロセッサ１０７の計算ユニットの配列は、機械学習モデルを使用して推論を実行するために必要な畳み込みステップを実行するために利用されてもよい。画像などの二次元データセットは、フォーマットされ、一度に１つのベクトルで、データ入力１０３を使用してマトリクスプロセッサ１０７に供給されてもよい。並行して、重みをフォーマットし、重み入力１０５を使用してそれらをベクトルとしてマトリクスプロセッサ１０７に供給することにより、重みのベクトルが２次元データセットに適用されてもよい。マトリクスプロセッサ１０７の対応する計算ユニットは、重み入力およびデータ入力の対応するオペランドに対してマトリクスプロセッサ命令を並列して実行する。
【００２７】
いくつかの実施形態では、ベクトルエンジン１１１は、マトリクスプロセッサ１０７に通信可能に結合されたベクトル計算ユニットである。ベクトルエンジン１１１は、処理要素１１３を含めた複数の処理要素を含む。示される図では、ベクトルエンジン１１１内の小さな正方形は、ベクトルエンジン１１１が、ベクトルとして配置された複数の処理要素を含むことを示している。いくつかの実施形態では、処理要素は、データ入力１０３と同じ方向でベクトル内に配置される。いくつかの実施形態では、処理要素は、重み入力１０５と同じ方向でベクトル内に配置される。様々な実施形態において、ベクトルエンジン１１１の処理要素のデータサイズは、マトリクスプロセッサ１０７の計算ユニットのデータサイズと同じサイズか、またはそれより大きい。例えば、いくつかの実施形態では、計算ユニット１０９は、サイズがそれぞれ１バイトの２つのオペランドを受け取り、サイズが４バイトの結果を出力する。処理要素１１３は、計算ユニット１０９からの４バイトの結果をサイズが４バイトの入力として受け取る。様々な実施形態において、ベクトルエンジン１１１の出力は、ベクトルエンジン１１１への入力と同じサイズである。いくつかの実施形態では、ベクトルエンジン１１１の出力は、ベクトルエンジン１１１への入力と比較してサイズが小さい。例えば、ベクトルエンジン１１１は、サイズがそれぞれ４バイトの最大９６個の要素を受け取り、サイズがそれぞれ１バイトの９６個の要素を出力する場合もある。様々な実施形態において、ベクトルエンジン１１１は、出力結果に対して量子化を実行し、その結果、ベクトルエンジン１１１の出力は、ベクトルエンジン１１１への入力と比較してサイズが小さくなる。様々な実施形態において、量子化が単一の命令の一部として実行される。例えば、量子化および非線形関数は、単一のプロセッサ命令として実行される。上記のように、いくつかの実施形態では、データ入力１０３および重み入力１０５からマトリクスプロセッサ１０７への通信チャネルは、各要素が１バイトのサイズの９６要素幅であり、ベクトルエンジン１１１の出力サイズ（各要素のサイズが１バイトの９６個の要素幅）に一致する。
【００２８】
いくつかの実施形態では、処理要素１１３を含めたベクトルエンジン１１１の処理要素はそれぞれ、算術論理演算ユニット（ＡＬＵ）（図示せず）を含む。例えば、いくつかの実施形態では、各処理要素のＡＬＵは算術演算を実行することが可能である。いくつかの実施形態では、処理要素の各ＡＬＵは、正規化線形ユニット（ＲｅＬＵ）関数および／またはスケーリング関数を並列して実行することが可能である。いくつかの実施形態では、各ＡＬＵは、非線形活性化関数を含む非線形関数を実行することが可能である。様々な実施形態において、ベクトルエンジン１１１の各処理要素は、入力オペランドを受け取るための１つまたは複数のフリップフロップを含む。いくつかの実施形態では、各処理要素は、ベクトルエンジンアキュムレータのスライスおよび／またはベクトルエンジン１１１のベクトルレジスタにアクセスできる。例えば、９６個の要素を受け取ることが可能なベクトルエンジンは、９６個の要素幅のアキュムレータと、１つまたは複数の９６個の要素のベクトルレジスタとを含む。各処理要素は、アキュムレータおよび／またはベクトルレジスタの１要素スライスにアクセスできる。いくつかの実施形態では、各要素はサイズが４バイトである。さまざまな実施形態において、アキュムレータおよび／またはベクトルレジスタは、少なくとも入力データベクトルのサイズに適合するサイズにされている。いくつかの実施形態では、ベクトルエンジン１１１は、ベクトルエンジン１１１の出力に適合するサイズの追加のベクトルレジスタを含む。
【００２９】
いくつかの実施形態では、ベクトルエンジン１１１の処理要素は、マトリクスプロセッサ１０７からデータを受け取るように構成され、各処理要素は、データの受け取った部分を並列処理することができる。処理要素の一例として、ベクトルエンジン１１１の処理要素１１３は、マトリクスプロセッサ１０７の計算ユニット１０９からデータを受け取る。様々な実施形態において、ベクトルエンジン１１１は単一のベクトルプロセッサ命令を受け取り、次いで各処理要素は他の処理要素と並列してこのプロセッサ命令を実行する。いくつかの実施形態では、プロセッサ命令は、ロード操作、ストア操作および／または算術論理演算ユニット操作などの１つまたは複数のコンポーネント命令を含む。様々な実施形態では、ｎｏ−ｏｐ操作を使用して、コンポーネント命令を置き換えることができる。
【００３０】
示される例では、データ入力１０３とマトリクスプロセッサ１０７との間、重み入力１０５とマトリクスプロセッサ１０７との間、マトリクスプロセッサ１０７とベクトルエンジン１１１との間、ベクトルエンジン１１１と後処理ユニット１１５との間の点線の矢印は、データ要素のベクトルなど、複数のデータ要素を送信することが可能なコンポーネントのそれぞれのペア間の結合を示している。一例として、マトリクスプロセッサ１０７とベクトルエンジン１１１との間の通信チャネルは、９６×３２ビット幅であり、各要素のサイズが３２ビットである９６個の要素の並行した転送をサポートすることができる。別の例として、ベクトルエンジン１１１と後処理ユニット１１５との間の通信チャネルは９６×１バイト幅であり、各要素のサイズが１バイトである場合の９６個の要素の並列した転送をサポートしてもよい。様々な実施形態において、データ入力１０３および重み入力１０５は、メモリモジュール（図１には図示せず）に結合され、メモリモジュールからそれぞれ入力データを受け取ってもよい。いくつかの実施形態では、ベクトルエンジン１１１は、メモリモジュール（図１には示されない）に追加的に結合され、マトリクスプロセッサ１０７からの入力に加えて、またはその代わりにメモリモジュールから入力データを受け取る場合もある。様々な実施形態では、メモリモジュールは通常、スタティックランダムアクセスメモリ（ＳＲＡＭ）である。
【００３１】
いくつかの実施形態では、マトリクスプロセッサ１０７の１つまたは複数の計算ユニットは、マトリクスプロセッサ１０７が複数のレーンを有するように、１つのレーンに一緒にグループ化されてもよい。様々な実施形態において、マトリクスプロセッサ１０７のレーンは、データ入力１０３または重み入力１０５のいずれかと整列されてよい。例えば、重み入力１０５と整列されたレーンには、重み入力１０５のすべてのオペランドを入力として受け取るように構成された一セットの計算ユニットが含まれる。同様に、データ入力１０３と整列されたレーンには、データ入力１０３のすべてのオペランドを入力として受け取るように構成された計算ユニットのセットが含まれる。図１に示される例では、レーンは重み入力１０５に沿って垂直列に並べられ、各レーンはベクトルエンジン１１１の対応するレーンに供給される。いくつかの実施形態において、各レーンは、乗算、加算および／または累積ならびにシフト機能を含むサブ回路の垂直列である。いくつかの実施形態では、マトリクスプロセッサ１０７はタイルの行列を含み、各タイルは計算ユニットの行列である。例えば、９６ｘ９６マトリクスプロセッサには６ｘ６タイルの行列が含まれ、各タイルには１６ｘ１６の計算ユニットが含まれる。いくつかの実施形態では、垂直レーンはタイルの単一の列である。いくつかの実施形態では、水平レーンはタイルの単一の行である。様々な実施形態において、レーンの次元は動的に構成されてもよく、マトリクスプロセッサ１０７、ベクトルエンジン１１１および／または後処理ユニット１１５への入力に対して整列操作を実行するために利用されてもよい。いくつかの実施形態では、動的構成は、制御ユニット１０１によって、もしくは制御ユニット１０１を使用して、および／または制御ユニット１０１によって制御されるプロセッサ命令を使用して実行される。
【００３２】
いくつかの実施形態では、制御ユニット１０１は、マトリクスプロセッサ１０７、ベクトルエンジン１１１および後処理ユニット１１５によって実行される処理を同期させる。例えば、制御ユニット１０１は、マトリクスプロセッサ１０７、ベクトルエンジン１１１および後処理ユニット１１５のそれぞれにプロセッサ固有の命令を送ることができる。制御ユニット１０１は、マトリクスプロセッサ命令をマトリクスプロセッサ１０７に送信してもよい。マトリクスプロセッサ命令は、データ入力１０３および／または重み入力１０５からの指定されたオペランドを使用して、ドット積またはドット積成分などの算術演算を実行するように計算配列に指示する計算配列命令であり得る。制御ユニット１０１は、ベクトルエンジン１１１にベクトルプロセッサ命令を送ることができる。例えば、ベクトルプロセッサ命令は、ベクトル計算ユニットによって一緒に実施される複数のコンポーネント命令を備えた単一のプロセッサ命令を含んでもよい。制御ユニット１０１は、後処理ユニット１１５に後処理命令を送信してもよい。様々な実施形態において、制御ユニット１０１は、データ入力１０３および重み入力１０５からマトリクスプロセッサ１０７に、マトリクスプロセッサ１０７からベクトルエンジン１１１に、およびベクトルエンジン１１１から後処理ユニット１１５に供給されるデータを同期させる。いくつかの実施形態では、制御ユニット１０１は、プロセッサ固有のメモリ、キューおよび／またはデキュー操作を利用することにより、データ入力１０３、重み入力１０５、マトリクスプロセッサ１０７、ベクトルエンジン１１１および／または後処理ユニット１１５を含む、マイクロプロセッサシステム１００の異なるコンポーネント間でデータを同期させる。いくつかの実施形態では、データと命令の同期は制御ユニット１０１によって実行される。いくつかの実施形態では、データおよび命令の同期は、マトリクスプロセッサ１０７、ベクトルエンジン１１１および／または後処理ユニット１１５の間で処理を同期させるための１つまたは複数のシーケンサを含む制御ユニット１０１によって実行される。
【００３３】
いくつかの実施形態では、マトリクスプロセッサ１０７およびベクトルエンジン１１１は、畳み込み層を処理するために利用される。いくつかの実施形態において、ベクトルエンジン１１１を利用して、マトリクスプロセッサ１０７の出力に対して活性化関数などの非線形関数を実行する。例えば、マトリクスプロセッサ１０７を使用してドット積を計算し、ベクトルエンジン１１１を使用して、正規化線形ユニット（ＲｅＬＵ）関数またはシグモイド関数などの活性化関数を実行することができる。いくつかの実施形態では、プーリング作業を実行するのに後処理ユニット１１５が使用される。いくつかの実施形態において、後処理ユニット１１５は、処理されたデータをフォーマットし、メモリに格納するために利用され、メモリ書き込みレイテンシを同期させるために利用されてもよい。
【００３４】
図２は、機械学習処理を実行するためのマイクロプロセッサシステムの一実施形態を示すブロック図である。示される例では、マイクロプロセッサシステム２００は、制御ユニット２０１、ベクトル入力２０３、ベクトルエンジン入力キュー２０７、ベクトルエンジン２１１および後処理ユニット２１５を含む。ベクトルエンジン入力キュー２０７は、計算ユニット２０９および２２１〜２２９を含む複数の計算ユニットを含み、ベクトルエンジン２１１は、処理要素２１３および２３１を含む複数の処理要素を含む。ベクトル入力２０３は、ベクトルエンジン入力キュー２０７にデータを供給するための入力モジュールである。いくつかの実施形態では、ベクトル入力２０３は、入力データフォーマッタ、キャッシュもしくはバッファおよび／またはベクトルエンジン入力キュー２０７用のデータを準備するための論理回路を含む。例えば、ベクトル入力２０３は、ベクトルエンジン入力キュー２０７を先入れ先出し（ＦＩＦＯ）入力キューとして利用するベクトルエンジン２１１によって処理される２次元配列からＮ個のオペランドを準備することができる。いくつかの実施形態では、ベクトル入力２０３は、データを取り出すためのスタティックランダムアクセスメモリ（ＳＲＡＭ）などのメモリ（図２には示されていない）に結合されている。
【００３５】
様々な実施形態において、制御ユニット２０１、ベクトル入力２０３、ベクトルエンジン入力キュー２０７、ベクトルエンジン２１１および後処理ユニット２１５はそれぞれ、図１の制御ユニット１０１、データ入力１０３、マトリクスプロセッサ１０７、ベクトルエンジン１１１、および後処理ユニット１１５である。例えば、図１のマトリクスプロセッサ１０７は、図１のデータ入力１０３からデータを受け取り、入力の各ベクトルを図１のベクトルエンジン１１１に繰り返しシフトすることにより、ベクトルエンジン入力キュー２０７などの入力キューを実装するために使用されてよい。
【００３６】
いくつかの実施形態では、ベクトルエンジン入力キュー２０７は計算配列ユニットであり、その列が先入れ先出し（ＦＩＦＯ）キューである計算ユニットの行列を含む。示される例では、ベクトルエンジン入力キュー２０７はベクトル入力２０３の入力キューであり、複数のデータ要素をベクトル入力２０３からベクトルエンジン２１１に供給するワイド先入れ先出し（ＦＩＦＯ）キューとして機能する。例えば、計算ユニット２２１〜２２９は、単一のＦＩＦＯキューとして一緒に機能する計算ユニットの垂直列を構成する。様々な実施形態において、ベクトルエンジン入力キュー２０７は、計算ユニット２２１〜２２９と同様の計算ユニットの垂直列で構成される複数のＦＩＦＯキューを含む。例えば、ベクトルエンジン入力キュー２０７が９６計算ユニット幅である実施形態では、ベクトルエンジン入力キュー２０７は９６のＦＩＦＯキューに対応する９６の垂直列の計算ユニットを有する。さらなる例として、ベクトルエンジン入力キュー２０７が９６計算ユニット長である実施形態では、ベクトルエンジン入力キュー２０７は９６段長のＦＩＦＯキューを有する。
【００３７】
様々な実施形態において、各先入れ先出し（ＦＩＦＯ）キューは並列して機能し、ベクトル入力２０３から受け取った入力をＦＩＦＯキューに沿ってベクトルエンジン２１１にシフトする。計算ユニット２２１を含むベクトルエンジン入力キュー２０７の計算ユニットの第１の行は、ベクトル入力２０３に接続されている。計算ユニットの最初の行は、ベクトル入力２０３からのデータの行全体を並行して受け取るように構成される。ベクトルエンジン入力キュー２０７の計算ユニットの最後の行は、ベクトルエンジン２１１の処理要素の行に接続されている。例えば、ベクトルエンジン入力キュー２０７の計算ユニットの最後の行には、計算ユニット２２９および２０９が含まれる。計算ユニット２０９は処理要素２１３に接続され、計算ユニット２２９は処理要素２３１に接続される。処理要素２１３および２３１は、それぞれ計算ユニット２０９および２２９のデータ出力要素を受け取るように構成される。ベクトルエンジン２１１の処理要素は、ベクトルエンジン入力キュー２０７の計算ユニットの最後の行からデータの行全体を並行して受け取る。様々な実施形態において、ベクトルエンジン入力キュー２０７の計算ユニットの最後の行にデキューするのに利用可能なデータがある場合、ベクトルエンジン入力キュー２０７がキュー操作を受け取る準備ができていることを示すデキュー準備信号をベクトルエンジン２１１が受け取る。
【００３８】
説明される例では、計算ユニットの最初の行からのデータは、ベクトルエンジン２１１に向かう論理方向で計算ユニットの次の行にその列を下にシフトされる。例えば、ベクトル入力２０３のデータ要素に対応する入力は、計算ユニット２２１においてオペランドとして受け取られ、計算ユニット２２１で受け取ったオペランドが計算ユニット２２１から、中間計算ユニット２２２〜２２８を介して計算ユニット２２９まで増分式にシフトされるまで、計算ユニット２２１から計算ユニット２２２にシフトされ、計算ユニット２２２から計算ユニット２２３にシフトされ、計算ユニット２２３から計算ユニット２２４にシフトされるなどする。様々な実施形態において、ＦＩＦＯに押し込まれたデータ要素は、ＦＩＦＯが計算ユニット内での深さと同じ数のシフトを取る。例えば、９６の計算ユニットと、９６の段とを有するＦＩＦＯキューでは、挿入された要素をデキューするには９６回のシフトが必要である。様々な実施形態において、ＦＩＦＯの各段は、他の段と並列してオペランドをシフトすることができる。例えば、ＦＩＦＯキューにおける各中間計算ユニットは、そのオペランドを次の計算ユニットにシフトする一方で、最初の計算ユニットはベクトル入力２０３から次のデータ要素を取り出し、最後の計算ユニットは、ベクトルエンジン２１１の対応する処理要素によって受け取られるデータ要素をデキューすることができる。説明した例では、計算ユニットの各行に沿った各計算ユニットは、ベクトル入力２０３から最初に受け取った対応するデータ要素をベクトルエンジン２１１にシフトするために並列して動作する。
【００３９】
いくつかの実施形態では、ベクトルエンジン入力キュー２０７はベクトル入力２０３に結合され、計算ユニットの行列の一次元はベクトル入力２０３の次元と一致する。例えば、９６バイトの幅を有するベクトル入力２０３を備えた実施形態では、ベクトルエンジン入力キュー２０７は、少なくとも９６バイトの幅を有する計算ユニットの行列を有する。いくつかの実施形態では、ベクトル入力２０３の幅およびベクトルエンジン入力キュー２０７への入力の対応する幅は動的に構成可能である。例えば、ベクトル入力２０３は９６バイトまたは９６×２バイトになるように動的に構成することができ、ベクトルエンジン入力キュー２０７への入力の対応する幅は９６バイトまたは９６×２バイトにそれぞれ構成可能である。いくつかの実施形態では、構成は、制御ユニット２０１および／またはベクトルエンジン入力キュー２０７へのプロセッサ命令を使用して実行される。
【００４０】
いくつかの実施形態では、ベクトルエンジン２１１は、ベクトルエンジン入力キュー２０７に通信可能に結合されたベクトル計算ユニットである。ベクトルエンジン２１１は、処理要素２１３および２３１を含む複数の処理要素を含む。示される図では、ベクトルエンジン２１１内の小さな正方形は、ベクトルエンジン２１１が、ベクトルとして配置された複数の処理要素を含むことを示している。いくつかの実施形態では、処理要素は、ベクトル入力２０３と同じ方向でベクトルに配置される。様々な実施形態では、ベクトルエンジン２１１の処理要素のデータサイズは、ベクトルエンジン入力キュー２０７の計算ユニットのデータサイズと同じか、それより大きい。例えば、いくつかの実施形態において、計算ユニット２０９は、サイズが１バイトのオペランドを受け取り、やはり１バイトのサイズを有する処理要素２１３への出力をデキューする。処理要素２１３は、サイズが１バイトの入力として計算セル２０９から１バイトの出力を受け取る。様々な実施形態において、ベクトルエンジン２１１の出力は、ベクトルエンジン２１１への入力と同じサイズである。様々な実施形態において、ベクトルエンジン２１１の出力は、ベクトルエンジン２１１への入力と比較してサイズが小さい。例えば、ベクトルエンジン２１１は、サイズがそれぞれ４バイトの最大９６個の要素を受け取り、サイズがそれぞれ１バイトの９６個の要素を出力する場合もある。いくつかの実施形態では、ベクトル入力２０３からベクトルエンジン入力キュー２０７への通信チャネルは、各要素が１バイトのサイズの９６要素幅であり、ベクトルエンジン２１１の出力サイズ（各要素が１バイトのサイズの９６要素幅）に一致する。
【００４１】
いくつかの実施形態では、処理要素２１３および２３１を含む、ベクトルエンジン２１１の処理要素はそれぞれ、算術論理演算ユニット（図示せず）を含み、図１のベクトルエンジン１１１に関してさらに詳細に説明される。いくつかの実施形態では、ベクトルエンジン２１１の処理要素は、ベクトルエンジン入力キュー２０７からデータを受け取るように構成されており、各処理要素は、受け取ったデータの部分を並列処理することができる。処理要素の一例として、ベクトルエンジン２１１の処理要素２１３および２３１は、ベクトルエンジン入力キュー２０７の計算ユニット２０９および２２９からそれぞれデータを受け取る。様々な実施形態では、ベクトルエンジン２１１は単一のベクトルプロセッサ命令を受け取り、次いで各処理要素は他の処理要素と並列してプロセッサ命令を実行する。いくつかの実施形態では、プロセッサ命令は、ロード操作、ストア操作および／または算術論理演算ユニット操作などの１つまたは複数のコンポーネント命令を含む。様々な実施形態では、ｎｏ−ｏｐ操作を使用して、コンポーネント命令を置き換えることができる。
【００４２】
示される例では、ベクトル入力２０３とベクトルエンジン入力キュー２０７、ベクトルエンジン入力キュー２０７とベクトルエンジン２１１、およびベクトルエンジン２１１と後処理ユニット２１５の間の点線の矢印は、複数のデータ要素を送信することが可能なコンポーネントのそれぞれのペア間の結合を示している。一例として、ベクトルエンジン入力キュー２０７とベクトルエンジン２１１との間の通信チャネルは、９６×３２ビット幅であり、各要素のサイズが３２ビットである９６個の要素の並列転送をサポートすることができる。別の例として、ベクトルエンジン２１１と後処理ユニット２１５との間の通信チャネルは、９６×１バイト幅であり、各要素のサイズが１バイトである９６個の要素の並列転送をサポートすることができる。様々な実施形態において、ベクトル入力２０３はメモリモジュール（図２には示されていない）に結合され、メモリモジュールから入力データを受け取る場合もある。いくつかの実施形態では、ベクトルエンジン２１１は、メモリモジュール（図１には図示せず）に追加的に結合され、ベクトルエンジン入力キュー２０７からの入力に加えて、または代替として、メモリモジュールから入力データを受け取る場合もある。様々な実施形態では、メモリモジュールは通常、スタティックランダムアクセスメモリ（ＳＲＡＭ）である。
【００４３】
いくつかの実施形態では、ベクトルエンジン入力キュー２０７の１つまたは複数の計算ユニットは、ベクトルエンジン入力キュー２０７が複数の垂直列レーンを有するように、特定の垂直列に一緒にグループ化され得る。図２に示す例では、レーンは上記の先入れ先出し（ＦＩＦＯ）キューと同じ垂直列に沿って配置され、各レーンはベクトルエンジン２１１の対応するレーンに供給される。いくつかの実施形態において、各レーンは、乗算、加算および／または累積ならびにシフト機能を含むサブ回路の垂直列である。いくつかの実施形態では、垂直レーンは計算ユニットの単一の列である。いくつかの実施形態では、垂直レーンは、隣接する計算ユニットの複数の列のグループである。様々な実施形態において、レーンの次元は動的に構成されてもよく、ベクトルエンジン入力キュー２０７、ベクトルエンジン２１１および／または後処理ユニット２１５への入力に対して整列操作を実行するために利用されてもよい。いくつかの実施形態では、動的構成は、制御ユニット２０１によって、もしくは制御ユニット２０１を使用して、および／または制御ユニット２０１によって制御されるプロセッサ命令を使用して実行される。
【００４４】
いくつかの実施形態では、制御ユニット２０１は、ベクトルエンジン入力キュー２０７、ベクトルエンジン２１１、および／または後処理ユニット２１５によって実行される処理を同期させる。例えば、制御ユニット２０１は、プロセッサ固有の命令をベクトルエンジン入力キュー２０７、ベクトルエンジン２１１および後処理ユニット２１５のそれぞれに送信することができる。制御ユニット２０１は、ベクトルエンジン入力キュー命令をベクトルエンジン入力キュー２０７に送信してもよい。いくつかの実施形態では、ベクトルエンジン入力キュー命令は、図１のマトリクスプロセッサ１０７が応答することが可能なマトリクスプロセッサ命令のサブセットであり、図１に関してさらに説明される。ベクトルエンジン入力キュー命令は、ロード操作、シフト操作、または入力キューとインターフェースするための他の適切な命令を実行するように計算配列に指示する計算配列命令であり得る。制御ユニット２０１は、ベクトルエンジン２１１にベクトルプロセッサ命令を送ることができる。例えば、ベクトルプロセッサ命令は、ベクトル計算ユニットによって一緒に実施される複数のコンポーネント命令を備えた単一のプロセッサ命令を含んでもよい。制御ユニット２０１は、後処理ユニット２１５に後処理命令を送信してもよい。様々な実施形態において、制御ユニット２０１は、ベクトル入力２０３からベクトルエンジン入力キュー２０７に、ベクトルエンジン入力キュー２０７からベクトルエンジン２１１に、およびベクトルエンジン２１１から後処理ユニット２１５に供給されるデータを同期させる。いくつかの実施形態では、制御ユニット２０１は、プロセッサ固有のメモリ、キューおよび／またはデキュー操作を利用することにより、異なるコンポーネントのベクトル入力２０３、ベクトルエンジン入力キュー２０７、ベクトルエンジン２１１および／または後処理ユニット２１５の間でデータを同期させる。制御ユニット２０１の機能は、図１の制御ユニット１０１に関してさらに詳細に説明される。
【００４５】
いくつかの実施形態では、制御ユニット２０１は、ベクトルエンジン入力キュー２０７、ベクトルエンジン２１１および／または後処理ユニット２１５によって受け取られるデータ要素のサイズおよび数を構成するために利用される。例えば、いくつかの実施形態では、制御ユニット２０１を使用して、ベクトルエンジン入力キュー２０７への入力を、各々がサイズ１バイトの９６個の要素、または各々がサイズ２バイトの４８個の要素、各々がサイズ２バイトの９６個の要素、各々がサイズ４バイトの１９２個の要素などの他の適切な変動値として構成してもよい。いくつかの実施形態では、ベクトルエンジン入力キュー２０７は、一連のロード操作および論理シフト演算を実行することにより、それが受け取ることが可能なものよりも大きいサイズのデータ要素を出力することが可能である。例えば、４バイトの入力データ要素の４つの連続する１バイト部分を読み取り、各バイトを適切なビットフィールドに論理的にシフトすることにより、４バイトの入力データ要素がベクトルエンジン入力キュー２０７にロードされる。別の例として、いくつかの実施形態では、制御ユニット２０１を使用して、ベクトルエンジン２１１への入力を、各々がサイズ４バイトの９６個の要素、または各々がサイズ１バイトの各９６個の要素、各々がサイズ２バイトの４８個の要素などの他の適切な変動値として構成してもよい。
【００４６】
様々な実施形態において、後処理ユニット２１５は、ベクトルエンジン２１１からの出力の後処理を実行するために利用される。後処理ユニット２１５の後処理機能は、図１の後処理ユニット１１５に関してさらに詳細に説明される。
【００４７】
図３は、機械学習処理を実行するためのマイクロプロセッサシステムの一実施形態を示すブロック図である。示される例では、マイクロプロセッサシステム３００は、制御ユニット３０１、メモリ３０７、ベクトルエンジン３１１、および後処理ユニット３１５を含む。様々な実施形態において、メモリ３０７は通常、スタティックランダムアクセスメモリ（ＳＲＡＭ）である。様々な実施形態において、後処理ユニット３１５は、ベクトルエンジン３１１から入力データを受け取り、ベクトルエンジン３１１からの出力の後処理を実行するために利用される。後処理ユニット３１５の後処理機能は、図１の後処理ユニット１１５に関してさらに詳細に説明される。
【００４８】
図３のブロック図は、ベクトルエンジン３１１がメモリ３０７に結合され、メモリ３０７から直接データを取り出すことができるシステムアーキテクチャの実施形態を描いている。様々な実施形態において、メモリ３０７とベクトルエンジン３１１との間の通信チャネルのサイズは、メモリ３０７からベクトルエンジン３１１に複数のデータ要素を並列して転送するように構成され得る。例えば、ベクトルエンジン３１１が各々が３２ビットサイズの９６個の要素を並行して受け取ることが可能な実施形態では、メモリ３０７とベクトルエンジン３１１間の通信チャネルのサイズは、各々が３２ビットサイズの９６個の要素をメモリ３０７からベクトルエンジン３１１に並列して転送するように構成される。いくつかの実施形態では、メモリ３０７は、ベクトルエンジン３１１に転送する前にメモリからのデータをフォーマットするためのデータキャッシュもしくはバッファおよび／または論理回路を含み得るデータフォーマッタ（図示せず）を含む。例えば、サイズ１バイトのデータ要素がメモリ３０７内のワード境界に格納される場合もあり、データフォーマッタを利用して、データをバイト境界にフォーマットする、および／またはマスクする。様々な実施形態において、制御ユニット３０１、ベクトルエンジン３１１および後処理ユニット３１５は、それぞれ、図１の制御ユニット１０１、ベクトルエンジン１１１および後処理ユニット１１５である。様々な実施形態では、ベクトルエンジン３１１は、図１のマトリクスプロセッサ１０７に関して説明したように、マトリクスプロセッサ（図示せず）にさらに結合されてもよい。
【００４９】
いくつかの実施形態では、ベクトルエンジン３１１は、メモリ３０７に通信可能に結合されたベクトル計算ユニットである。ベクトルエンジン３１１は、処理要素３１３を含む複数の処理要素を含む。示される図では、ベクトルエンジン３１１内の小さな正方形は、ベクトルエンジン３１１がベクトルとして配置された複数の処理要素を含むことを示している。いくつかの実施形態では、処理要素３１３を含むベクトルエンジン３１１の処理要素はそれぞれ、算術論理演算ユニット（図示せず）を含む。ベクトルエンジン３１１の処理要素は、メモリ３０７からデータを受け取するように構成され、処理要素のそれぞれは、受け取ったデータの一部を並列して処理することができる。様々な実施形態において、ベクトルエンジン３１１は単一のベクトルプロセッサ命令を受け取り、次いで処理要素の各々は他の処理要素と並列してプロセッサ命令を実行する。いくつかの実施形態では、プロセッサ命令は、ロード操作、ストア操作および／または算術論理演算ユニット操作などの１つまたは複数のコンポーネント命令を含む。ベクトルエンジン３１１の機能は、それぞれ図１および図２のベクトルエンジン１１１および２１１に関してさらに詳細に説明される。
【００５０】
いくつかの実施形態では、制御ユニット３０１は、ベクトルエンジン３１１および後処理ユニット３１５によって実行される処理と、メモリ３０７へのアクセスを同期させる。例えば、制御ユニット３０１は、プロセッサ固有の命令をベクトルエンジン３１１および後処理ユニット３１５のそれぞれに送ることができる。いくつかの実施形態では、制御ユニット３０１は、ベクトルプロセッサ命令をベクトルエンジン３１１に送信してもよい。例えば、ベクトルプロセッサ命令は、ベクトル計算ユニットによって一緒に実施される複数のコンポーネント命令を備えた単一のプロセッサ命令を含んでもよい。いくつかの実施形態では、制御ユニット３０１は、後処理ユニット３１５に後処理命令を送信してもよい。様々な実施形態において、制御ユニット３０１は、ベクトルエンジン３１１によってメモリ３０７から受け取り、後処理ユニット３１５によってベクトルエンジン３１１から受け取るデータを同期させる。いくつかの実施形態では、制御ユニット３０１は、ベクトルエンジンおよび／または後処理ユニットプロセッサ固有の動作を利用することにより、異なるコンポーネントベクトルエンジン３１１および／または後処理ユニット３１５の間でデータを同期させる。制御ユニット３０１の機能は、図１の制御ユニット１０１に関してさらに詳細に説明される。
【００５１】
いくつかの実施形態において、制御ユニット３０１は、ベクトルエンジン３１１および／または後処理ユニット３１５が受け取るデータ要素のサイズおよび数を構成するために利用される。例えば、いくつかの実施形態では、制御ユニット３０１を使用して、各々がサイズ４バイトの９６個のデータ要素、または各々がサイズ１バイトの９６個の要素、各々がサイズ２バイトの４８個の要素などの他の適切な変動値を受け取るようにベクトルエンジン３１１を構成することができる。図１および２に関してさらに説明されるように、ベクトルエンジン３１１と後処理ユニット３１５との間の点線の矢印は、複数のデータ要素を送信することができるコンポーネントのそれぞれのペア間の結合を描いている。一例として、ベクトルエンジン３１１と後処理ユニット３１５との間の通信チャネルは、９６×１バイト幅であり、各要素のサイズが１バイトである９６個の要素の並列転送をサポートすることができる。
【００５２】
図４Ａは、機械学習処理を実行するためのベクトル計算ユニットの一実施形態を示すブロック図である。示される例では、マイクロプロセッサシステム４００は、ベクトル計算ユニット４０１、入力バス４１１および出力バス４３１を含む。ベクトル計算ユニット４０１への入力は、入力バス４１１から届く。ベクトル計算ユニット４０１からの出力は、出力バス４３１に書き込まれる。いくつかの実施形態では、入力バス４１１および出力バス４３１は、入力バス４１１と出力バス４３１の両方の機能を含む単一のバスである。様々な実施形態において、入力バス４１１および出力バス４３１は、複数のデータ要素の並列転送を可能にするワイドデータバスである。例えば、計算ユニット４０１の並列処理機能に対応するために、入力バス４１１は９６×３２ビット幅であり、出力バス４３１は９６バイト幅であり得る。いくつかの実施形態では、ベクトル計算ユニット４０１は、入力バス４１１を介してベクトル計算ユニット命令を受け取る。いくつかの実施形態では、ベクトル計算ユニット４０１は、命令バス（図示せず）などの入力バス４１１以外の通信チャネルを介してベクトル計算ユニット命令を受け取る。
【００５３】
様々な実施形態において、ベクトル計算ユニット４０１は、それぞれ図１、図２および図３のベクトルエンジン１１１、２１１および／または３１１である。いくつかの実施形態では、入力バス４１１は、図１のマトリクスプロセッサ１０７、図２のベクトルエンジン入力キュー２０７および／または図３のメモリ３０７に接続される。いくつかの実施形態では、出力バス４３１は、それぞれ図１、図２および図３の後処理ユニット１１５、２１５および／または３１５に接続される。様々な実施形態では、ベクトル計算ユニット４０１は、図１、図２および図３の制御ユニット１０１、２０１および／または３０１など、ベクトル計算ユニット４０１の外部にある、マイクロプロセッサシステム４００の制御ユニット（図示せず）に双方向で結合される。様々な実施形態において、マイクロプロセッサシステム４００の制御ユニットは、ベクトル計算ユニット命令をベクトル計算ユニット４０１に送信する。いくつかの実施形態では、マイクロプロセッサシステム４００の制御ユニットは、命令およびデータをベクトル計算ユニット４０１に同期させるための１つまたは複数のシーケンサを含む。
【００５４】
示される例では、ベクトル計算ユニット４０１は、レジスタ４２１、ベクトルエンジン制御論理４２３、入力バッファ４２５、算術論理演算ユニット（ＡＬＵ）４２７および出力バッファ４２９を含む。入力バス４１１からの入力データは入力バッファ４２５によって受け取られ、出力バス４３１に書き込まれる出力は出力バッファ４２９から書き込まれる。いくつかの実施形態において、入力バッファ４２５および出力バッファ４２９はデータバッファまたはキャッシュであり、メモリ同期機能を提供する。例えば、いくつかの実施形態では、入力バス４１１からの入力読み取りおよび／または出力バス４３１への出力書き込みは、入力バッファ４２５を利用して入力データを受け取り、計算した結果を格納するために出力バッファ４２９を利用することにより平滑化することができる予測不可能なレイテンシを有する。別の例として、ＡＬＵ４２７からの出力が書き込みのための準備ができているとき、出力バス４３１を利用できない場合がある。いくつかの実施形態では、出力バッファ４２９は、出力バス４３１が出力バッファ４２９に格納された結果を書き込むために利用可能になるまで、ＡＬＵ４２７が保留中のデータの処理を継続することを許可する。様々な実施形態において、入力バス４１１および出力バス４３１は、マイクロプロセッサシステム４００の制御ユニット（図示せず）によって制御される通信チャネルである。
【００５５】
上述のように、様々な実施形態において、ベクトル計算ユニットは複数の処理要素を含む。いくつかの実施形態では、各処理要素は、データをロードし、データを格納し、算術論理演算ユニット操作を実行するための個々の機能を含む。個々の処理要素は、図４Ａのブロック図には示されない。様々な実施形態において、算術論理演算ユニット（ＡＬＵ）４２７は、各処理ユニットの対応する算術論理演算ユニット（ＡＬＵ）を含む。同様に、入力バッファ４２５および出力バッファ４２９は、各処理ユニットに対応する入力バッファおよび出力バッファを含む。様々な実施形態において、ＡＬＵ４２７は、ベクトル計算ユニット４０１への入力ベクトルのすべての要素を並列処理するためのＡＬＵ論理を含む。いくつかの実施形態では、ＡＬＵ４２７は、ＡＬＵ結果を量子化するための論理を含む。様々な実施形態において、ＡＬＵ論理、例えば、非線形関数および量子化を実行するための論理は、単一のプロセッサ命令に応答して実行することができる。
【００５６】
様々な実施形態において、レジスタ４２１は、ベクトル計算ユニット４０１の機能を実施するためのレジスタを含む。例えば、レジスタ４２１を使用して、他の適切な機能の中でもベクトル計算ユニット命令を実行するためのオペランドを格納する、ビットマスクを実装する、および異なるメモリサイズのレジスタエイリアスを使用してベクトル要素を参照することができる。いくつかの実施形態では、レジスタ４２１は、算術命令ベクトルレジスタ、マスクレジスタ、加算、減算、浮動小数点演算などの算術演算を実行するためのレジスタ、および／またはベクトル要素のエイリアシング用のレジスタを含む。いくつかの実施形態では、ベクトル要素のエイリアシングに使用されるレジスタは、算術演算を実行するためにも利用される。
【００５７】
いくつかの実施形態では、レジスタ４２１は算術命令ベクトルレジスタを含む。例えば、レジスタは、ロード操作、ストア操作および算術論理演算ユニット（ＡＬＵ）操作のオペランドとして使用されてもよい。別の例として、いくつかの実施形態では、ＡＬＵ操作は、ソースレジスタとして３つ、および宛先レジスタとして１つの最大４つのベクトルレジスタを引数として取ってもよい。様々な実施形態において、プロセッサ動作によって使用されるベクトルレジスタは、ベクトル要素のサイズに基づいて異なるベクトル要素にエイリアスされる。例えば、いくつかの実施形態では、８ビット、１６ビット、３２ビットで、および／または浮動小数点値で動作するためにベクトルレジスタの異なるセットが利用可能である。いくつかの実施形態では、３２ビット値用のベクトルレジスタのセットは、浮動小数点値にも使用される。様々な実施形態において、３２ビットのベクトルレジスタは、１６ビットのベクトルレジスタおよび８ビットのベクトルレジスタにエイリアスされる。例えば、１つの３２ビットベクトルレジスタは、２つの１６ビットベクトルレジスタと、４つの８ビットベクトルレジスタにエイリアスされる。別の例として、８つの９６×３２ビットベクトルレジスタ（レジスタＲＤ０〜ＲＤ７）を備えたベクトル計算ユニット４０１は、１６個の９６×１６ビットベクトルレジスタ（レジスタＲＷ０〜ＲＷ１５）と３２個の９６×８ビットベクトルレジスタ（レジスタＲＢ０〜ＲＢ３１）にエイリアスされる。ＲＤ０は９６×３２ビットのベクトルレジスタであり、ＲＷ０は９６×１６ビットのベクトルレジスタであり、ＲＢ０は９６×８ビットのベクトルレジスタである。ベクトルレジスタのエイリアシングの別の例が図４Ｂに描かれる。
【００５８】
いくつかの実施形態では、レジスタ４２１は、ベクトル計算ユニット４０１の処理要素の数に基づいた１つまたは複数のビットマスクレジスタを含む。例えば、９６個の処理要素を持つベクトル計算ユニットには、１つまたは複数の９６個のビットマスクレジスタが含まれてよい。様々な実施形態において、マスクレジスタは、メモリからビットマスクをロードすることにより設定されてよい。マスクレジスタを使用して、ベクトル計算ユニット４０１への入力データに対して実行された論理演算の結果を格納することができる。
【００５９】
いくつかの実施形態では、レジスタ４２１は、加算、減算および浮動小数点演算などの算術演算を実行するためのレジスタを含む。例えば、いくつかの実施形態では、ベクトル計算ユニット４０１は、ベクトル加算命令およびベクトル減算命令のキャリーアウトビットならびに浮動小数点命令に対応するステータスビットを格納するためのレジスタを含む。
【００６０】
いくつかの実施形態では、ベクトル計算ユニット４０１は、ベクトル計算ユニット命令のシーケンスを格納するための命令バッファ（図示せず）を含む。いくつかの実施形態では、命令バッファはコマンドキューである。さまざまな実施形態において、命令バッファは、実行される現在および／または最後の命令を参照するための１つまたは複数のポインタを含む。様々な実施形態において、命令バッファは、ベクトル計算ユニット命令のキャッシュとして機能する。例えば、１つまたは複数のベクトル計算ユニット命令は、ベクトル計算ユニット４０１の命令バッファにロードされ、命令を実行することができるようになるまでキャッシュされる。命令が実行されて不要になると、新しい命令が命令バッファにロードされてよい。いくつかの実施形態では、マイクロプロセッサシステム４００の制御論理（図示せず）を介して外部命令コマンドキューからベクトル計算ユニット命令を受け取る。
【００６１】
いくつかの実施形態では、ベクトル計算ユニット４０１は、ベクトルエンジン制御論理４２３を含む。ベクトルエンジン制御論理４２３は、ベクトル計算ユニット命令のフェッチ、命令の復号化および／または命令の実行を含めたベクトル計算ユニット４０１の機能を実装するために利用される。様々な実施形態において、ベクトルエンジン制御論理４２３は、入力バッファ４２５、出力バッファ４２９およびレジスタ４２１を介して、データを読み取る、書き込む、マスキングする、および／またはエイリアシングするための論理を含む。いくつかの実施形態では、ベクトル計算ユニット４０１は、デキュー準備完了信号を受け取り、ベクトルエンジン制御論理４２３を使用して、データが入力バス４１１を介して利用可能であると判定する。例えば、ベクトルエンジン制御論理４２３は、デキュー準備信号を受け取ると、入力バス４１１に取り付けられた入力先入れ先出しキュー（図示せず）からデータをデキューすることができる。
【００６２】
図４Ｂは、ベクトルレジスタの例示的なエイリアシングを示す表である。表４５０は、１６個の９６×１６ビットベクトルレジスタ（レジスタＲＷ０〜ＲＷ１５）と３２個の９６×８ビットベクトルレジスタ（レジスタＲＢ０〜ＲＢ３１）にエイリアスされた８個の９６×３２ビットベクトルレジスタ（レジスタＲＤ０〜ＲＤ７）を有するベクトル計算ユニットの実施形態のベクトルレジスタのエイリアシングを例示する。いくつかの実施形態では、表４５０のベクトルレジスタは、図４Ａのベクトル計算ユニット４０１のレジスタ４２１のベクトルレジスタである。示される例では、行４５１には、バイト０、１、２および３の列が含まれており、これらの列は、その下の行に列記される各レジスタにエイリアスされる。行４５３、４６３および４７３は、９６×３２ビットのベクトルレジスタＲＤ０、ＲＤ１およびＲＤ７に対応している。行４５５、４６５および４７５は、９６×１６ビットのベクトルレジスタＲＷ０〜ＲＷ３およびＲＷ１４〜ＲＷ１５に対応していている。行４５７、４６７および４７７は、９６×８ビットのベクトルレジスタＲＢ０〜ＲＢ７およびＲＢ２８〜ＲＢ３１に対応している。この例では、バイト０〜３は、それぞれ図１、図２、図３のベクトルエンジン１１１、２１１、および／または３１１などのベクトル計算ユニットの９６個のレーンのうちの１つである。
【００６３】
示される例では、表４５０は、ベクトル計算ユニットの実施形態の９６個のレーンのうちの単一レーンに関するベクトルレジスタエイリアシングを示している。９６ｘ３２ビットのベクトルレジスタＲＤ０は、バイト０からバイト３までの順の４バイトを利用する。９６×１６ビットのベクトルレジスタＲＷ０およびＲＷ１は、それぞれ２バイトにエイリアスされる。ベクトルレジスタＲＷ０は、バイト０とバイト１にエイリアスされ、ベクトルレジスタＲＷ１は、バイト２とバイト３にエイリアスされる。９６×８ビットベクトルレジスタＲＢ０〜ＲＢ３は、各々がバイト０〜３にそれぞれ対応する１バイトにエイリアスされる。同様に、９６×３２ビットベクトルレジスタＲＤ１は、９６×１６ビットベクトルレジスタＲＷ２（バイト０および１）およびＲＷ３（バイト２および３）に、そしてバイト０〜３に関して９６×８ビットベクトルレジスタＲＢ４〜ＲＢ７にそれぞれエイリアスされる。別の例として、９６×３２ビットベクトルレジスタＲＤ７は、９６×１６ビットベクトルレジスタＲＷ１４（バイト０および１）およびＲＷ１５（バイト２および３）に、そしてバイト０〜３に関して９６×８ビットベクトルレジスタＲＢ２８〜Ｂ３１にそれぞれエイリアスされる。
【００６４】
様々な実施形態において、ベクトル計算ユニット命令は、ベクトルレジスタの９６個のレーンすべてにおいて並列して動作する。例えば、９６個のレーンのそれぞれについて、ベクトルレジスタＲＢ０はバイト０で動作し、ベクトルレジスタＲＢ５はバイト１で動作し、ベクトルレジスタＲＷ２はバイト０および１で動作し、ベクトルレジスタＲＷ１５はバイト２および３で動作し、ベクトルレジスタＲＤ７は並列してバイト０〜３で動作する。
【００６５】
図５は、マイクロプロセッサシステムのためのプロセッサ命令を決定するためのプロセスの一実施形態を示すフロー図である。いくつかの実施形態では、図５のプロセスは、高レベルのプログラミング言語で書かれたソフトウェアプログラムを、計算配列およびベクトル計算ユニットを備えたマイクロプロセッサシステムのための計算配列命令およびベクトル計算ユニット命令のシーケンスに変換する。様々な実施形態において、マイクロプロセッサシステムは図１のマイクロプロセッサシステム１００であり、計算配列は図１のマトリクスプロセッサ１０７であり、ベクトル計算ユニットは図１のベクトルエンジン１１１である。様々な実施形態において、図５のプロセスは、自動運転および運転者支援自動車などの機械学習モデルを使用して推論を実行するアプリケーションを含む、機械学習に依存するアプリケーションを実装するために利用される。
【００６６】
５０１において、実行される処理、ならびに計算配列、ベクトル計算ユニットおよび／または後処理ユニットなどの異なる共処理コンポーネントに割り当てられる処理のサブセットに関する決定がなされる。様々な実施形態では、処理は、異なる共処理コンポーネントの機能および効率に基づいて割り当てられる。例えば、特定の行列関連の作業は計算配列に割り当てられ、活性化関数などの非線形関数を含む作業はベクトル計算ユニットに割り当てられる。いくつかの実施形態では、プーリング作業が後処理ユニットに割り当てられる。別の例として、いくつかの実施形態では、５０１において、畳み込み演算がドット積演算を必要とすること、およびドット積演算は、計算配列によって実行される行列処理を最適に利用するという決定がなされる。いくつかの実施形態では、この決定は、本明細書に記載されるマイクロプロセッサシステムを対象とするように機械学習アプリケーションをコンパイルすることによって実行される。
【００６７】
５０３において、５０１で決定され、割り当てられた処理に対応する１つまたは複数のマトリクスプロセッサ命令が決定される。例えば、５０１でマトリクスプロセッサにより実行されると決定されたドット積演算が１つまたは複数のマトリクスプロセッサ命令に変換される。様々な実施形態において、マトリクスプロセッサ命令は計算配列命令である。一例として、計算配列命令は、図１のデータ入力１０３などのデータ入力コンポーネントから１つまたは複数のデータベクトルを受け取り、図１の重み入力１０５などの対応する重み入力コンポーネントから１つまたは複数の重みベクトルを受け取ることを要求する場合がある。追加の計算配列命令は、ドット積演算を処理するための乗算、累積およびシフト演算を含む場合がある。例えば、１つまたは複数のドット積成分演算を使用してドット積結果を計算してもよい。様々な実施形態において、計算配列命令は、計算配列の対応する計算ユニットが受け取った入力データに対して実行される処理に向けられる。いくつかの実施形態では、追加の計算配列命令は、ベクトル計算ユニットによる処理のためにドット積結果を準備するための命令を含む。
【００６８】
５０５において、ベクトル計算ユニットによって実行されるベクトルエンジン命令に関して決定がなされる。例えば、５０１でベクトルエンジンにより実行されると決定された活性化関数に関連する動作は、１つまたは複数のベクトルエンジン命令に変換される。様々な実施形態では、ベクトルエンジン命令はベクトル計算ユニット命令である。一例として、ベクトル計算ユニット命令は、図１のマトリクスプロセッサ１０７などの計算配列から１つまたは複数のデータベクトルを受け取ることを要求する場合がある。追加のベクトル計算ユニット命令には、正規化線形ユニット（ＲｅＬｕ）関数などの非線形活性化関数を実行する作業が含まれる場合もある。様々な実施形態において、ベクトル計算ユニット命令は、ベクトル計算ユニットの対応する処理要素が受け取った入力データに対して実行される処理に向けられる。いくつかの実施形態では、追加のベクトル計算ユニット命令は、後処理ユニットによる後処理のために処理要素の結果を準備するための命令を含む。
【００６９】
様々な実施形態において、各ベクトル計算ユニット命令は、ベクトル計算ユニットによって一緒に実行される複数のコンポーネント命令を指定する単一のプロセッサ命令である。複数のコンポーネント命令の実行は、単一のベクトル計算ユニット命令に応答して、異なるデータ入力要素上で並列してベクトル計算ユニットの処理要素によって実行される。例えば、いくつかの実施形態では、単一のプロセッサ命令は、３つのコンポーネント命令、すなわち別個のロード命令、算術論理演算ユニット命令およびストア命令を含む。３つのコンポーネント命令は、ベクトル計算ユニットによって受け取られ、実行される。いくつかの実施形態では、コンポーネント命令を単一の処理命令にバンドルする作業が５０５で実行される。様々な実施形態において、ベクトル計算ユニット命令にバンドルするためのコンポーネント命令の順序および選択は、決定されたデータハザードに基づいている。
【００７０】
５０７において、後処理ユニットによって実行される後処理命令に関して決定がなされる。例えば、後処理機能に関連する動作は、５０１で後処理ユニットにより実行されると決定され、１つまたは複数の後処理命令に変換される。一例として、後処理命令は、図１のベクトルエンジン１１１などのベクトル計算ユニットから１つまたは複数のデータベクトルを受け取ることを要求する場合がある。追加の後処理命令には、マックスプーリング（ｍａｘｐｏｏｌｉｎｇ）などのプーリング層機能を実行する操作が含まれる場合がある。様々な実施形態において、後処理命令は、とりわけカーネルサイズ、ストライドおよび／または空間範囲などのプーリング機能を構成するための命令を含んでもよい。いくつかの実施形態では、追加の後処理命令は、後処理の結果を準備し書き出すための命令を含む。
【００７１】
５０９において、５０３、５０５および５０７で決定されたコプロセッサ命令のコレクションの実行に対応するシーケンスがスケジューリングされる。例えば、計算配列、ベクトル計算ユニットおよび／または後処理ユニットなどの様々なコプロセッサのそれぞれのプロセッサ命令の相対的な順序および／またはシーケンスが決定される。いくつかの実施形態では、シーケンスは、コプロセッサ間の相互作用および依存関係に依存している。例えば、ベクトル計算ユニットへの入力は、計算配列からの出力結果の可用性に依存する場合がある。様々な実施形態において、データハザードを含む依存関係が決定され、考慮される。例えば、様々な実施形態において、ベクトル計算ユニット命令は複数のコンポーネント命令を含み、複数のベクトル計算ユニット命令が並列に実行されるように実行することができる。利用できないデータリソースに基づいたデータハザードが特定され、考慮される。例えば、ロード操作の完了に依存する算術論理演算ユニット操作が実行される前にロード操作を完了することができるように、ベクトル計算ユニット命令のコンポーネント命令にｎｏ−ｏｐが挿入されてもよい。いくつかの実施形態では、コンポーネント命令を単一のベクトル計算ユニット命令にバンドルする作業が５０９で決定される。いくつかの実施形態では、コプロセッサ命令の順序付けなどの命令スケジューリングの一部またはすべてが、マトリクスプロセッサおよびベクトルエンジンに対して５０３および５０５でそれぞれ実行される。例えば、いくつかの実施形態では、各単一のベクトル計算ユニット命令のコンポーネント命令をバンドルする作業は５０５で決定される。
【００７２】
いくつかの実施形態では、マイクロプロセッサシステムの制御ユニットおよび／または１つもしくは複数のシーケンサを使用して、コプロセッサ命令のコレクションの処理を開始し調整する。例えば、５０９で決定した命令シーケンスは、図１の制御ユニット１０１などの制御ユニットによって、および／または１つもしくは複数のシーケンサによって使用されて、図１のマトリクスプロセッサ１０７などの計算配列、図１のベクトルエンジン１１１などのベクトル計算ユニットおよび／または図１の後処理ユニット１１３などの後処理ユニットに対して、対応するコプロセッサ命令を発行する。いくつかの実施形態では、１つまたは複数のシーケンサの機能は、制御ユニットによって実行される。例えば、いくつかの実施形態では、制御ユニットは、とりわけ、実行シーケンサ、メモリアクセスシーケンサ、ネットワークシーケンサおよび／またはベクトルエンジンシーケンサを含む。
【００７３】
図６Ａは、ベクトル計算ユニットの実行を進行させるためのプロセスの一実施形態を示すフロー図である。図６Ａのプロセスは、ベクトルの要素を並列に処理するためにベクトル計算ユニットによって実行されてよい。様々な実施形態では、ベクトル計算ユニットは、それぞれ図１、図２、図３および図４Ａのベクトルエンジン１１１、２１１、３１１および／またはベクトル計算ユニット４０１である。いくつかの実施形態では、図６Ａのプロセスは、図１の制御ユニット１０１などの制御ユニットによって開始される。様々な実施形態において、図６Ａのプロセスのステップ間の移行は、図４Ａのベクトルエンジン制御論理４２３などのベクトル計算ユニットの制御論理によって実行される。
【００７４】
６０１において、ベクトルエンジン命令が取得される。様々な実施形態において、ベクトルエンジン命令はベクトル計算ユニット命令であり、複数のコンポーネント命令を指定する。例えば、命令トライアドは、最大３つのコンポーネント命令を指定する単一のベクトル計算ユニット命令である。命令トライアドの例は、単一の命令としてロード操作、算術論理演算ユニット操作およびストア操作を含む。６０１において、命令が取得されると、プロセスは６０３と６０５の両方に進む。
【００７５】
６０３において、追加の命令が保留中であるかどうかについての判定がなされる。例えば、次のベクトルエンジン命令が利用可能であり、取得の準備ができている場合がある。別の例として、保留中の命令をキャッシュするための命令バッファが空である場合があり、次の利用可能な命令を取得する、および／または待機する必要がある。いくつかの実施形態では、追加の命令の可用性は、命令バッファ内の最後の有効な命令を参照するポインタの検査に基づいている。利用可能な追加の命令がないことに応答して、処理はステップ６０９に進む。１つまたは複数の追加の命令が利用可能になったことに応じて処理は６０１に戻る。
【００７６】
６０５において、６０１で取得したベクトルエンジン命令がデコードされる。様々な実施形態において、単一のベクトルエンジン命令は、１つまたは複数のコンポーネント命令を指定する。様々な実施形態において、命令およびコンポーネント命令はデコードされる。例えば、ロードコンポーネント命令、算術論理演算ユニットコンポーネント命令およびストアコンポーネント命令を含む命令トライアドが、個別のコンポーネント操作にデコードされる。いくつかの実施形態では、復号化は、各コンポーネント操作のオペコードと、そのオペコードに対応する引数の両方を決定する。一例として、ロードコンポーネント命令には、バイトベクトルデキュー操作に対応するオペコードと、デキューの結果としてバイトのベクトルを格納する対応する宛先ベクトルレジスタの両方が含まれる。別の例として、追加コンポーネント命令には、符号付き１６ビット加算操作に対応するオペコードと、ソースおよび宛先引数に関する対応するベクトルレジスタの両方が含まれる。
【００７７】
６０７において、６０５でデコードされた命令が実行される。いくつかの実施形態では、複数のコンポーネント命令を指定する単一のベクトルエンジン命令が、ベクトル計算ユニットの処理要素によって実行される。例えば、処理要素のベクトルは、６０５でデコードされた単一のベクトルエンジン命令を実行する。いくつかの実施形態では、単一のベクトルエンジン命令のコンポーネント命令の各々は、処理要素のそれぞれによって並列してさらに実行される。例えば、各処理要素に対して、ロード命令と算術論理演算ユニット命令が並列して実行されてよい。いくつかの実施形態では、ロード命令、算術論理演算ユニット命令およびストア命令が並列に実行されてもよい。例えば、入力データのベクトルが入力アキュムレータからベクトルレジスタにロードされる、算術論理演算ユニット（ＡＬＵ）によって浮動小数点乗算演算が２つの異なるベクトルレジスタに対して実行される、および１６ビット要素のベクトルがベクトルレジスタからメモリに格納されるなどのコンポーネント操作が、ベクトルエンジンの各処理セルによって並列して実行される。様々な実施形態では、処理要素がコンポーネント命令の実行を終えると、ベクトルエンジン命令の処理は完了する。
【００７８】
６０９において、ベクトル計算ユニットは次の命令を待つ。例えば、ベクトル計算ユニットは、保留中の命令をキャッシュするための命令バッファが実行される有効な命令を含むまで待機する。別の例として、ベクトル計算ユニットは、メモリから次の命令を受け取り、ベクトル計算ユニットに対して利用可能になるまで待機する。いくつかの実施形態では、ベクトル計算ユニットは、追加の命令が利用可能になるのを待ちながら６０９で停止する。様々な実施形態では、ベクトル計算ユニットは、追加の命令を待っている間に６０９において割り込みに応答してもよい。追加の命令の到着に応答して、処理は６０１に戻る。
【００７９】
図６Ｂは、ベクトル計算ユニットによってベクトルデータを処理するためのプロセスの一実施形態を示すフロー図である。例えば、図６Ｂは、計算配列および／または先入れ先出し（ＦＩＦＯ）キューなどの入力ソースからベクトル計算ユニットが受け取ったベクトルデータに適用されるプロセスを図示している。いくつかの実施形態では、図６Ｂのプロセスは、ベクトル結果を計算するためにベクトル入力に対してベクトル演算を実行するためにベクトル計算ユニットによって実行されるステップを例示している。様々な実施形態において、図６Ｂのプロセスは、ベクトル計算ユニットの複数の処理要素を利用して、ベクトルの要素に対する処理を並列して実行する。様々な実施形態において、ベクトル計算ユニットは、それぞれ図１、図２、図３および図４Ａのベクトルエンジン１１１、２１１、３１１および／またはベクトル計算ユニット４０１である。
【００８０】
６５１において、ロード操作がデコードされ、発行される。いくつかの実施形態では、データをベクトル計算ユニットに受け入れるためにロード操作が必要である。例えば、いくつかの実施形態において、デキュー操作は、ベクトル計算ユニットの処理要素が受け取る計算配列からのデータ要素のベクトルをデキューするロード操作である。様々な実施形態では、ロード操作は、単一のベクトル計算ユニット命令を構成する複数のコンポーネント命令のうちの１つであり得る。ロード操作の復号化により、特定のタイプのロード操作および適切な操作が決定される。例えば、指定された異なるベクトルレジスタに異なるサイズのベクトル要素をロードするためのさまざまなロード操作が存在する。６５１において、ロード操作がデコードされ発行されて、先入れ先出し（ＦＩＦＯ）キューからのデータ結果のベクトルのデキューなどの入力データの受け取りを開始する。
【００８１】
６５３において、ベクトル計算ユニットは、６５１で発行されたロード操作の結果として、ベクトルの形で入力データを受け取る。例えば、ベクトル計算ユニットは、図１のマトリクスプロセッサ１０７などの計算配列、図２のベクトルエンジン入力キュー２０７などの先入れ先出し（ＦＩＦＯ）キューなどの計算配列、またはその他の適切なデータソースから入力データ要素のベクトルを受け取る。いくつかの実施形態では、入力データは入力バッファに格納される。いくつかの実施形態において、入力バッファは、フリップフロップおよび／または１つもしくは複数のアキュムレータのセットを利用して入力データを格納する。入力データを入力ステップ６５５において１つまたは複数のベクトルレジスタにロードすることができるように、入力ベクトルのサイズの入力バッファを使用して入力データを格納する場合もある。
【００８２】
６５５において、６５３で受け取ったベクトルデータが適切なレジスタにロードされる。例えば、６５３で読み取られたベクトルデータは、ロード命令によって指定されたベクトルレジスタにロードされる。いくつかの実施形態では、レジスタエイリアスを使用して、データがどのようにベクトルレジスタにロードされるかを決定する。例えば、データは同じレジスタのメモリ位置にロードされるが、使用される命令およびエイリアスされたレジスタに基づいて、バイト、ハーフワードまたはワード境界に合わせて調節されてもよい。いくつかの実施形態では、ベクトルレジスタへのベクトルデータのロードは、ベクトルビットマスクなどのビットマスクを利用してベクトルのどのバイトをどのレジスタメモリ位置にロードするかを決定する。例えば、９６ビットマスクを使用して、ベクトルレジスタのどの要素がデータを受け取るかを決定してもよい。
【００８３】
６５７において、追加のデータが必要かどうかに対する判定がなされる。例えば、現在のベクトル計算ユニットの命令に基づいて、算術論理演算ユニット（ＡＬＵ）操作を実行する前に追加のデータが必要になる場合がある。追加のデータが必要とされないことに応じて、処理は６６１に進む。一例として、現在のベクトル計算ユニット命令が、ｎｏ−ｏｐ操作ではないＡＬＵコンポーネント操作（追加操作など）を含む場合には処理は６６１へと続く。追加のデータを必要としていることに応じて、例えば、ロード操作が保留中であり、ＡＬＵ操作が保留中ではない場合、処理は６５９に進む。いくつかの実施形態では、命令トライアドは、ＡＬＵ操作が現在の命令に対して実行されるべきでないことを示すｎｏ−ｏｐでＡＬＵ操作を置き換える場合もある。
【００８４】
６５９において、追加のデータが処理のためにベクトル計算ユニットにロードされる。例えば、入力重みのベクトルなどの追加の入力データは、メモリの読み取り、マトリクスプロセッサの結果の受け取り、先入れ先出し（ＦＩＦＯ）キューのキュー解除、またはその他の適切な手法によってロードされてよい。いくつかの実施形態では、静的ランダムアクセスメモリ（ＳＲＡＭ）などのメモリを読み取ることにより、追加のデータがロードされてもよい。様々な実施形態では、読み取りバッファなどの追加のコンポーネントを利用して、データのロード作業を同期させる、および／または読み取り遅延と待ち時間を考慮してもよい。様々な実施形態において、６５９でロードされるデータは、重み入力のベクトルなどの入力データのベクトルであり得る。
【００８５】
６６１において、ベクトル算術論理演算ユニット（ＡＬＵ）操作が実行される。様々な実施形態において、ベクトルＡＬＵ操作は、とりわけ、加算演算子（符号付きおよび符号なし）、減算演算子（符号付きおよび符号なし）、乗算演算子、絶対値演算子および論理演算子のためのベクトル演算を含む。ベクトルＡＬＵ操作は、異なるオペランドサイズで実行されてよい。オペランドサイズの例には、８ビット、１６ビット、３２ビットおよび浮動小数点の値が含まれる。いくつかの実施形態において、異なるオペランドサイズは、レジスタエイリアシングおよび／または操作のオペコードに基づいて決定される。例えば、８ビットのオペランドのベクトル加算演算では、８ビットのベクトルレジスタを使用する。図４Ａおよび４Ｂに関してより詳細に説明したように、レジスタエイリアシングによって、異なるエイリアスを使用して同じメモリ位置を参照することが可能になる。例えば、３２ビットのメモリブロックは、所望される結果に応じて、単一の４バイトのオペランド、２つの２バイトのオペランド、または４つの１バイトのオペランドとして参照することができる。様々な実施形態において、ベクトル計算ユニットの各処理要素は、他の処理要素と並列して同じＡＬＵ操作（例えば加算、減算、乗算など）を実行する。いくつかの実施形態では、出力結果はＡＬＵ結果の量子化バージョンである。例えば、出力結果は、表現するのにＡＬＵの結果よりも少ないビットしか必要としない量子化されたバージョンである。いくつかの実施形態では、ＡＬＵ結果は、入力オペランドよりも少ないビットを使用して表される結果を使用して計算される。例えば、入力オペランドのサイズはそれぞれ４バイトであり、出力結果のサイズは１バイトであり得る。
【００８６】
６６３において、６６１で実行された算術論理演算ユニット（ＡＬＵ）操作のベクトル結果がベクトル計算ユニットから書き出される。いくつかの実施形態では、出力バスがデータを受け取るのに利用できない場合、次のＡＬＵ操作のために処理を継続することを可能にする出力バッファを利用してベクトル結果が書き出される。いくつかの実施形態では、ベクトル出力の結果は、それぞれ図１、図２および図３の後処理ユニット１１５、２１５および／または３１５などの後処理ユニットに転送される。例えば、ＡＬＵ操作の実行の結果は、後処理プーリング作業を実行するための後処理ユニットに書き込まれる。いくつかの実施形態では、出力ベクトルの結果は、スタティックランダムアクセスメモリ（ＳＲＡＭ）などのメモリに書き込まれる。さまざまな実施形態において、出力は、各要素が１バイトのサイズを有する９６個の要素ベクトルなどの要素のベクトルとして書き出される。
【００８７】
図７は、ベクトル計算ユニット命令の符号化フォーマットの一実施形態を示すブロック図である。示される例では、ベクトル計算ユニット命令７１０は、単一の命令によって指定される複数のコンポーネント命令の符号化を描いている。ベクトル計算ユニット命令７４０は、単一の命令によって指定される複数のコンポーネント命令のそれぞれのフォーマットをさらに詳細に説明する。ベクトル計算ユニット命令７１０は、符号化された命令トライアドであり、ロード操作７１１、算術論理演算ユニット（ＡＬＵ）操作７１３およびストア操作７１５を含む。ベクトル計算ユニット命令７４０は、オペコード７４１、レジスタ７４３、オペコード７５１、レジスタ７５３、オペコード構成フィールド７５５、即値フィールド７５７、オペコード７６１およびレジスタ７６３などのフィールドを含む。ベクトル計算ユニット命令７１０によって表されるコンポーネント命令（ロード操作、ＡＬＵ操作およびストア操作に対応）のフィールドは、ベクトル計算ユニット命令７４０にマッピングされる。ベクトル計算ユニット命令７４０には、符号化されたロード操作（オペコード７４１およびレジスタ７４３）、算術論理演算ユニット操作（オペコード７５１、レジスタ７５３、オペコード構成フィールド７５５および即値フィールド７５７）およびストア操作（オペコード７６１およびレジスタ７６３）が含まれる。
【００８８】
いくつかの実施形態では、ベクトル計算ユニット命令は、３つのコンポーネント命令を指定する命令トライアドである。例えば、ロード操作、算術論理演算ユニット（ＡＬＵ）操作およびストア操作は、１２８ビットフォーマットを使用して単一の命令にバンドルされてもよい。様々な実施形態では、より大きな、またはより小さなビットフォーマットを利用して、必要に応じて３つのコンポーネント命令をバンドルしてもよい。いくつかの実施形態では、ロード操作およびストア操作は１３ビットに符号化され、ＡＬＵ操作は６４ビットに符号化される。様々な実施形態において、バンドルされたロード操作、ストア操作およびＡＬＵ操作によって使用されないいずれの残りのビットも、パディングビットである。いくつかの実施形態では、オペコードは８ビットに符号化され、レジスタは５ビットに符号化され、即値フィールドは３２ビットに符号化される。様々な実施形態では、異なる長さの符号化が適切に利用されてよく、また命令サイズ、サポートされるベクトル演算の数、レジスタの数、ベクトルサイズおよび／または他の適切な要因に基づいている。一部のシナリオでは、１つまたは複数のコンポーネント命令が使用されない場合、ｎｏ−ｏｐ操作が使用される。
【００８９】
示される例では、ベクトル計算ユニット命令７４０の符号化されたロード操作は、オペコード７４１およびレジスタ７４３を含む。オペコード７４１はベクトルロード操作に対応し、レジスタ７４３はそのロード操作に関する対応する宛先ベクトルレジスタである。例えば、オペコード７４１を使用してデータをロードするデキュー操作のためのオペコードを格納することができ、レジスタ７４３はロードされたデータを格納するための宛先レジスタである。様々な実施形態において、ロード操作は、ベクトル計算ユニットによる処理のために、入力データのベクトルをベクトルレジスタにロードするのに使用される。いくつかの実施形態では、オペコード７４１は８ビットフィールドであり、レジスタ７４３は５ビットフィールドである。
【００９０】
示される例では、ベクトル計算ユニット命令７４０の符号化されたストア操作は、オペコード７６１およびレジスタ７６３を含む。オペコード７６１は、ベクトルストア操作に対応しており、レジスタ７６３は、ストア操作がデータのベクトルをそこから読み取るべき対応するソースベクトルレジスタである。例えば、オペコード７６１を使用して、レジスタ７６３からのデータをスタティックランダムアクセスメモリ（ＳＲＡＭ）などの外部メモリに格納するストア操作のためのオペコードを格納することができる。いくつかの実施形態では、格納作業に使用されるメモリの開始アドレスは、メモリ位置を参照するための書き込みポインタを使用して外部シーケンサまたは制御ユニットによって維持される。いくつかの実施形態において、ストア操作は、データのベクトルを出力データバスに書き込むのに使用される。いくつかの実施形態では、オペコード７６１は８ビットフィールドであり、レジスタ７６３は５ビットフィールドである。
【００９１】
示される例では、符号化された算術論理演算ユニット（ＡＬＵ）操作には、オペコード７５１、レジスタ７５３、オペコード構成フィールド７５５および即値フィールド７５７が含まれる。オペコード７５１は、ＡＬＵオペコードの符号化に使用される。例えば、ＡＬＵオペコードには、とりわけ加算演算子（符号付きおよび符号なし）、減算演算子（符号付きおよび符号なし）、乗算演算子、絶対値演算子および論理演算子のためのベクトル演算に対応するオペコードが含まれてよい。ベクトルＡＬＵ操作に応じて、操作はレジスタ７５３、オペコード構成フィールド７５５および即値フィールド７５７といったフィールドを利用してよい。いくつかの実施形態では、レジスタ７５３は、３つのソースレジスタと１つの宛先レジスタを含む最大４つのベクトルレジスタを指定する。いくつかの実施形態では、レジスタ７５３は２０ビットフィールドであり、各レジスタに対して５ビットを利用する。
【００９２】
いくつかの実施形態では、符号化された算術論理演算ユニット（ＡＬＵ）操作は、特定のＡＬＵ操作によって利用されるオペコード構成フィールド７５５を含む。いくつかの実施形態では、オペコード構成フィールド７５５は５ビットフィールドであり、レジスタサイズフィールド（２ビット）、マスクビット（１ビット）および即値有効ビット（１ビット）を含む。例えば、一部のシナリオでは、レジスタサイズフィールド（２ビット）に格納されている値を使用して、レジスタのサイズ（８ビット、１６ビットまたは３２ビット）を指定してもよい。追加の例として、マスクビット（１ビット）を使用して即値フィールド７５７をビットマスクとして処理する場合もあり、即値有効ビット（１ビット）を使用して即値フィールド７５７の有効性を識別してもよい。様々な実施形態において、即値フィールド７５７は、即値フィールドを必要とするＡＬＵ操作に利用される３２ビットのフィールドである。例えば、ベクトル移動操作は、３２ビット値を即値フィールド７５７から宛先ベクトルレジスタに移動するように構成されてよい。
【００９３】
いくつかの実施形態において、ベクトル計算ユニットは、ベクトルビットマスクをベクトルマスクレジスタにロードするために、ベクトルマスク移動命令（図示せず）をサポートする。いくつかの実施形態では、ベクトルマスク移動命令は、対応するオペコードフィールド、宛先レジスタフィールドおよび即値フィールドを含む。一例として、ベクトルマスクの移動は、即値フィールドに格納されているベクトルビットマスクをベクトルマスクレジスタにロードする。いくつかの実施形態において、ベクトル計算ユニットによってサポートされるベクトルのサイズ（例えば、９６個の要素幅）は、ビットマスクを格納するのに十分な大きさの即値フィールド（例えば９６ビット）を必要とする。いくつかの実施形態では、ベクトルマスク移動命令は、ベクトル計算ユニット命令７１０および７４０の符号化フォーマットに制限されない。例えば、即値フィールドのサイズに基づいて、ベクトルマスクの移動は他のコンポーネント命令と一緒にバンドルされない場合もある。
【００９４】
様々な実施形態において、ベクトル計算ユニット命令のコンポーネント命令は、図５のプロセスを使用して一緒にバンドルされる。いくつかの実施形態では、図７の符号化フォーマットは、それぞれ図１、図２、図３および図４Ａのベクトルエンジン１１１、２１１、３１１および／またはベクトル計算ユニット４０１などのベクトル計算ユニットによって利用される。いくつかの実施形態では、ベクトル計算ユニット命令は、マイクロプロセッサシステムのシーケンサまたは特定のシーケンサを含む制御ユニットによってベクトル計算ユニットに対して発行される。
【００９５】
図８は、ベクトル計算ユニットにより単一のベクトル計算ユニット命令を実行するためのプロセスの一実施形態を示すフロー図である。図８のプロセスは、ベクトル計算ユニットの処理要素を利用して、ベクトルの要素に対して並列してベクトル計算ユニットによって実行されてよい。いくつかの実施形態では、図８のプロセスは、それぞれ図１、図２、図３および図４Ａのベクトルエンジン１１１、２１１、３１１および／またはベクトル計算ユニット４０１などのベクトル計算ユニットによって実行される。
【００９６】
８０１において、ベクトル計算ユニット命令がフェッチされる。いくつかの実施形態では、命令は、命令バッファおよび／またはコマンドキューからフェッチされる。様々な実施形態において、命令バッファは、実行される現在の命令を参照するための１つまたは複数のポインタを含む。様々な実施形態において、命令バッファは、ベクトル計算ユニット命令のキャッシュとして機能する。
【００９７】
８２１において、ベクトル計算ユニット命令がデコードされる。例えば、命令トライアドであるベクトル計算ユニット命令は、その３つのコンポーネント命令にデコードされる。様々な実施形態において、各コンポーネント命令によって利用される引数およびフィールドがデコードされる。例えば、図７のレジスタ７５３などのレジスタフィールドで指定されたベクトルレジスタは、ソースレジスタと、宛先レジスタにデコードされる。
【００９８】
８３１において、コンポーネント命令が発行される。いくつかの実施形態では、コンポーネント命令の発行は、リソースハザードおよび／またはデータハザードが存在するかどうかを判定することを含む。ハザードが存在する場合、いくつかの実施形態では、ベクトル計算ユニットはハザードが解決されるのを待つ。例えば、前のクロックサイクルでのロード操作によってリソースハザードが生じた場合、ベクトル計算ユニットは、そのロードが完了し、リソースが利用可能になるまで１つまたは複数のクロックサイクルを待機する。
【００９９】
いくつかの実施形態では、複数のコンポーネント命令が一緒に発行され、並列して実行される。例えば、命令トライアドのロード操作、算術論理演算ユニット（ＡＬＵ）操作およびストア操作は、同じクロックサイクルの中で一緒に実行される。コンポーネント命令が一緒に実行されるシナリオでは、ロード操作（ステップ８４５）、ＡＬＵ操作（ステップ８５５）およびストア操作（ステップ８６５）の実行に対応する各ステップは、対応するｎｏ−ｏｐ代替手段（ステップ８４３、８５４および８６３）と共に、同じクロックサイクル内で開始され、実行は並列して進行する。
【０１００】
いくつかの実施形態では、異なるコンポーネント命令が、開始をずらして実行される。例えば、いくつかの実施形態では、ロード操作が最初に実行され、続いて算術論理演算ユニット（ＡＬＵ）操作が実行され、次にストア操作が実行される。ずらされるシナリオでは、最初のベクトル計算ユニット命令のＡＬＵ操作は、次のベクトル計算ユニット命令のロード操作と並列して実行されてもよい。
【０１０１】
さまざまな実施形態において、異なる算術論理演算ユニット（ＡＬＵ）操作を含む異なる操作は完了するために１つまたは複数のクロックサイクルを要するが、同じクロックサイクルの終わりまでに異なる操作が完了するという保証はない。いくつかの実施形態では、フェッチステップ（ステップ８０１）、デコードステップ（ステップ８２１）および発行ステップ（ステップ８３１）のうちの１つまたは複数が同じ命令サイクル内で実行されてもよい。
【０１０２】
８４１において、ベクトル計算ユニット命令がロード操作を含むかどうかに対する判定がなされる。例えば、一部のシナリオでは、ロード操作が実行されるべきでないことを示すために、ロード操作をｎｏ−ｏｐで置き換える場合もある。ｎｏ−ｏｐに応答して、処理は８４３に続く。ロード操作が存在する場合、処理は８４５に続く。
【０１０３】
８４３において、ｎｏ−ｏｐが処理され、ロード操作は実行されない。例えば、８４１では命令の中にロード命令が存在せず、代わりにｎｏ−ｏｐのオペコードが使用された。
【０１０４】
８４５において、ベクトル計算ユニットによってロード操作が実行される。例えば、ベクトルエンジン入力キュー２０７などの先入れ先出しキューから入力ベクトルをロードするためのデキュー操作が実行される。
【０１０５】
８５１において、ベクトル計算ユニット命令が算術論理演算ユニット（ＡＬＵ）操作を含むかどうかに対する判定がなされる。例えば、一部のシナリオでは、ＡＬＵ操作が実行されるべきではないことを示すために、ＡＬＵ操作をｎｏ−ｏｐで置き換える場合もある。ｎｏ−ｏｐに応答して、処理は８５３に続く。ＡＬＵ操作が存在する場合、処理は８５５に続く。
【０１０６】
８５３において、ｎｏ−ｏｐが処理され、算術論理演算ユニット（ＡＬＵ）操作は実行されない。例えば、８５１の命令にＡＬＵ命令が存在せず、代わりにｎｏ−ｏｐのためのオペコードが使用された。
【０１０７】
８５５において、ベクトル計算ユニットによって算術論理演算ユニット（ＡＬＵ）操作が実行される。例えば、ベクトル加算演算に応答して、ベクトル計算ユニットの算術論理演算ユニットはベクトル加算演算を実行して、２つのソースベクトルレジスタの内容を加算し、その結果を宛先ベクトルレジスタに格納する。いくつかの実施形態では、ベクトル計算ユニットの算術論理演算ユニットは、図４Ａの算術論理演算ユニット（ＡＬＵ）４２７である。
【０１０８】
８６１において、ベクトル計算ユニット命令がストア操作を含むかどうかに対する判定がなされる。例えば、一部のシナリオでは、ストア操作が実行されるべきではないことを示すために、ストア操作をｎｏ−ｏｐで置き換える場合もある。ｎｏ−ｏｐに応答して、処理は８６３に続く。ストア操作が存在する場合、処理は８６５に続く。
【０１０９】
８６３において、ｎｏ−ｏｐが処理され、ストア操作は実行されない。例えば、８６１の命令にはストア命令が存在せず、代わりにｎｏ−ｏｐのためのオペコードが使用された。
【０１１０】
８６５において、ベクトル計算ユニットによってストア操作が実行される。例えば、ベクトルレジスタ内のベクトルデータをメモリに格納するストア操作が実行される。
【０１１１】
図９は、ベクトル計算ユニットの例示的な命令サイクルを示す図である。図９のプロセスは、並列して実行される３つのベクトル計算ユニット命令の順序およびシーケンスの例を示しているが、開始がずらされた状態である。いくつかの実施形態では、図９の例示的な命令サイクルは、それぞれ図１、図２、図３および図４Ａのベクトルエンジン１１１、２１１、３１１および／またはベクトル計算ユニット４０１によって利用される。図９の例では、単一の命令としてバンドルされたコンポーネント命令は、ロード操作が最初に実行され、その後に算術論理演算ユニット（ＡＬＵ）操作が実行され、次にストア操作が実行されるように開始をずらして実行される。いくつかの実施形態では、順次ベクトル計算ユニット命令はパイプライン化されるが、コンポーネント命令は並列に実行され、図９に示されるずらした開始には従わない。
【０１１２】
示される例では、第１の命令サイクル９１０は、最初のベクトル計算ユニット命令に相当するフェッチステップ９１１、デコードステップ９２１、発行ステップ９３１、ロード実行ステップ９４１、算術論理演算ユニット（ＡＬＵ）実行ステップ９５１およびストア実行ステップ９６１を含む。第２の命令サイクル９２０は、第２のベクトル計算ユニット命令に対応するフェッチステップ９２３、デコードステップ９３３、発行ステップ９４３、ロード実行ステップ９５３、算術論理演算ユニット（ＡＬＵ）実行ステップ９６３およびストア実行ステップ９７３を含む。第３の命令サイクル９３０は、第３のベクトル計算ユニット命令に対応するフェッチステップ９３５、デコードステップ９４５、発行ステップ９５５、ロード実行ステップ９６５、算術論理演算ユニット（ＡＬＵ）実行ステップ９７５およびストア実行ステップ９８５を含む。いくつかの実施形態では、点線の垂直線はクロックサイクル境界である。様々な実施形態において、同じクロックサイクル境界内のステップは、同じクロックサイクルの中で開始される。
【０１１３】
いくつかの実施形態では、命令サイクルの開始は、１段分だけずらされている。例えば、第１の命令サイクル９１０は、第２の命令サイクル９２０と比較して処理において１段先であり、第３の命令サイクル９３０の２段先である。任意の所与のクロックサイクルの中で、異なるベクトル計算ユニット命令は、フェッチ、デコード、発行、ロード実行、算術論理演算ユニット（ＡＬＵ）実行、ストア実行といった、異なる段に関連付けられたハードウェアリソースを利用することができる。一例として、第１、第２および第３の命令サイクル９１０、９２０および９３０の発行段９３１、デコード段９３３およびフェッチ段９３５は、それぞれ同じクロックサイクルの中で実行される。別の例として、第１、第２および第３の命令サイクル９１０、９２０および９３０のストア実行ステップ９６１、算術論理演算ユニット（ＡＬＵ）実行ステップ９６３およびロード実行ステップ９６５は、それぞれ同じクロックサイクルの中で実行される。
【０１１４】
いくつかの実施形態では、ベクトル計算ユニットの命令サイクルは、クロックサイクルごとに１つのベクトル計算ユニット命令のスループットを達成する。いくつかの実施形態において、フェッチステップ、デコードステップおよび／または発行ステップは、単一のクロックサイクルに圧縮される。例えば、いくつかの実施形態において、フェッチ時間を最小化するために命令バッファが利用され、フェッチステップとデコードステップは一緒に実行される。いくつかの実施形態では、命令サイクルの各段は、完了するのに１つまたは複数のクロックサイクルを要する場合がある。いくつかの実施形態では、段自体がパイプライン化される。例えば、実行ステップが完了するまでに２サイクル以上かかる場合、複数のクロックサイクルにわたって完了するために、実行ステップがパイプライン化される場合もある。いくつかの実施形態では、複数の実行ステップがパイプライン方式で並列に処理されてもよく、各実行ステップは異なるベクトル計算ユニット命令に対応してもよい。いくつかの実施形態では、フェッチステップ９１１、９２３および９３５は図８のステップ８０１に対応し、デコードステップ９２１、９３３および９４５は図８のステップ８２１に対応し、発行ステップ９３１、９４３および９５５は図８のステップ８３１に対応し、ロード実行ステップ９４１、９５３および９６５は、図８のステップ８４５に対応し、算術論理演算ユニット（ＡＬＵ）実行ステップ９５１、９６３および９７５は、図８のステップ８５５に対応し、ストア実行ステップ９６１、９７３および９８５は図８のステップ８６５に対応している。
【０１１５】
代替の実施形態（図示せず）では、命令サイクルのフェッチ段、デコード段および発行段は図９と同じ順序で実行される。図９の例示的な実施形態とは対照的に、ロード実行ステップ、算術論理演算ユニット（ＡＬＵ）実行ステップおよびストア実行ステップは、同じクロックサイクルの中に一緒に並列して実行される。例えば、同じベクトル計算ユニット命令のロード実行ステップ９４１、ＡＬＵ実行ステップ９５１およびストア実行ステップ９６１は一緒に実行される。
【０１１６】
図１０は、計算配列の計算ユニットの一実施形態を示すブロック図である。示される例では、計算ユニット１０００は、入力値重み１００２、データ１００４およびＲｅｓｕｌｔＩｎ１００６、信号ＣｌｅａｒＡｃｃ信号１００８、Ｃｌｏｃｋ信号１０１０、ＲｅｓｕｌｔＥｎａｂｌｅ信号１０１２、ＲｅｓｕｌｔＣａｐｔｕｒｅ信号１０１４およびＳｈｉｆｔＥｎ信号１０１６、コンポーネントアキュムレータ１０２４、マルチプレクサ１０２６、シャドウレジスタ１０２８、乗算器１０３０および加算器１０３２、論理１０３４、１０３６および１０３８ならびに出力値ＲｅｓｕｌｔＯｕｔ１０５０を含む。いくつかの実施形態では、論理１０３４、１０３６および１０３８はＡＮＤゲートである。いくつかの実施形態では、必要に応じて追加の信号が含まれる。様々な実施形態において、図１０の計算ユニットは、図１のマトリクスプロセッサ１０７などの計算配列の計算ユニット１０９などの複数の計算ユニットのそれぞれに対して繰り返される。計算ユニット１０００を利用して、計算操作を並列して実施することができる。様々な実施形態において、計算配列の各計算ユニットは、他の計算ユニットと並列して計算を実行する。様々な実施形態において、計算ユニット１０００は、１つまたは複数の乗算、加算、累積および／またはシフト演算を実行する機能を含むマトリクスプロセッサのサブ回路である。例えば、計算ユニット１０００は、ドット積演算を実行するための機能を含むサブ回路であってもよい。様々な実施形態において、計算ユニット１０００は、図１の計算ユニット１０９、および／または図２の計算ユニット２０９および／または２２１〜２２９である。
【０１１７】
いくつかの実施形態では、Ｃｌｏｃｋ信号１０１０は、計算ユニット１０００が受け取ったクロック信号である。様々な実施形態において、計算配列の各計算ユニットは同じクロック信号を受け取り、このクロック信号を利用して各計算ユニットの処理を他の計算ユニットと同期させる。
【０１１８】
示される例では、乗算器１０３０は、入力値データ１００４と、重み１００２を受け取り、それらに対して乗算演算を実行する。乗算器１０３０の出力は、加算器１０３２に供給される。加算器１０３２は、乗算器１０３０の出力と、論理１０３４の出力を受け取り、それらに対して加算を実行する。加算器１０３２の出力は、アキュムレータ１０２４に供給される。いくつかの実施形態では、入力値データ１００４および重み１００２は、計算ユニットを横断し、対応するデータおよび／または重みを隣接する計算ユニットに供給するラインである。例えば、いくつかの実施形態では、データ１００４は同じ列のすべての計算ユニットに供給され、重み１００２は同じ行のすべての計算ユニットに供給される。様々な実施形態において、データ１００４および重み１００２は、データ入力１０３および重み入力１０５から計算ユニット１０００にそれぞれ供給される入力要素に対応する。さまざまな実施形態において、データ１００４および重み１００２は、データハードウェアデータフォーマッタおよび重みハードウェアデータフォーマッタから計算ユニット１０００にそれぞれ供給される入力要素に対応する。
【０１１９】
いくつかの実施形態では、ＣｌｅａｒＡｃｃ信号１００８はアキュムレータ１０２４の内容をクリアする。一例として、アキュムレータ１０２４をクリアすることによって累積演算をリセットし、乗算器１０３０の結果を累積するために使用することができる。いくつかの実施形態では、新しいドット積演算を実行するために、ＣｌｅａｒＡｃｃ信号１００８を使用してアキュムレータ１０２４をクリアする。例えば、要素ごとの乗算は乗算器１０３０によって実行され、部分ドット積の結果は加算器１０３２およびアキュムレータ１０２４を使用して加算される。
【０１２０】
様々な実施形態において、アキュムレータ１０２４は、加算器１０３２の結果および間接的に乗算器１０３０の結果を累積することが可能なアキュムレータである。例えば、いくつかの実施形態では、アキュムレータ１０２４は、ＣｌｅａｒＡｃｃ信号１００８のステータスに基づいて、乗算器１０３０の結果をアキュムレータ１０２４の内容と一緒に累積するように構成される。別の例として、ＣｌｅａｒＡｃｃ信号１００８のステータスに基づいて、アキュムレータ１０２４に格納されている現在の結果は加算器１０３２によって無視される場合もある。示される例では、アキュムレータ１０２４は３２ビット幅のアキュムレータである。様々な実施形態において、アキュムレータ１０２４は、必要に応じて異なるサイズ、例えば８ビット、１６ビット、６４ビットなどである場合もある。様々な実施形態において、計算配列の複数の計算ユニットの各アキュムレータは同一サイズである。様々な実施形態において、アキュムレータ１０２４は、データを累積して保存する、データを累積して消去する、または単にデータを消去する場合がある。いくつかの実施形態では、アキュムレータ１０２４は、累積レジスタとして実装されてもよい。いくつかの実施形態では、アキュムレータ１０２４は、レジスタを含む一セットの算術論理演算ユニット（ＡＬＵ）を含む場合もある。
【０１２１】
いくつかの実施形態では、データ１００４が有効であるという決定に応答して、ＲｅｓｕｌｔＥｎａｂｌｅ信号１０１２が起動される。例えば、ＲｅｓｕｌｔＥｎａｂｌｅ信号１０１２が有効にされて、乗算器１０３０および加算器１０３２によるアキュムレータ１０２４への処理などの計算ユニットによる処理を有効にすることができる。
【０１２２】
いくつかの実施形態では、ＲｅｓｕｌｔＣａｐｔｕｒｅ信号１０１４は、マルチプレクサ１０２６の機能を決定するために利用される。マルチプレクサ１０２６は、ＲｅｓｕｌｔＩｎ１００６、アキュムレータ１０２４の出力およびＲｅｓｕｌｔＣａｐｔｕｒｅ信号１０１４を入力として受け取る。様々な実施形態において、ＲｅｓｕｌｔＣａｐｔｕｒｅ信号１０１４は、ＲｅｓｕｌｔＩｎ１００６またはアキュムレータ１０２４の出力のいずれかをマルチプレクサ１０２６の出力として通過させることを可能にするために使用される。いくつかの実施形態では、マルチプレクサ１０２６は出力レジスタとして実装される。いくつかの実施形態では、ＲｅｓｕｌｔＩｎ１００６は、計算ユニット１０００と同じ列の計算ユニットに接続される。例えば、隣接する計算ユニットの出力は、入力値ＲｅｓｕｌｔＩｎ１００６として計算ユニット１０００に供給される。いくつかの実施形態では、隣接する計算ユニットの入力は、計算ユニットの対応するＲｅｓｕｌｔＯｕｔ値である。
【０１２３】
いくつかの実施形態では、シャドウレジスタ１０２８は、マルチプレクサ１０２６の出力を入力として受け取る。いくつかの実施形態では、シャドウレジスタ１０２８は、ＲｅｓｕｌｔＣａｐｔｕｒｅ信号１０１４の値に応じて、マルチプレクサ１０２６を介してアキュムレータ１０２４の出力を受け取るように構成される。示される例では、シャドウレジスタ１０２８の出力は、出力値ＲｅｓｕｌｔＯｕｔ１０５０である  様々な実施形態では、結果がシャドウレジスタ１０２８に挿入されると、アキュムレータ１０２４を使用して新しい計算を開始することができる。例えば、最終的なドット積結果がシャドウレジスタ１０２８に格納されると、アキュムレータ１０２４はクリアされ、新たな重み入力値およびデータ入力値に対する新たなドット積演算の部分結果、ならびに最終的には最終結果を累積し、格納するために使用されてよい。示される例では、シャドウレジスタ１０２８はＳｈｉｆｔＥｎ信号１０１６を受け取る。様々な実施形態において、ＳｈｉｆｔＥｎ信号１０１６は、シャドウレジスタ１０２８への値の格納を有効にする、または無効にするために使用される。いくつかの実施形態では、ＳｈｉｆｔＥｎ信号１０１６は、シャドウレジスタ１０２８に格納された値を出力値ＲｅｓｕｌｔＯｕｔ１０５０にシフトするために使用される。例えば、ＳｈｉｆｔＥｎ信号１０１６が有効な場合、シャドウレジスタ１０２８に格納されている値は、出力値ＲｅｓｕｌｔＯｕｔ１０５０としてシャドウレジスタ１０２８からシフトアウトされる。いくつかの実施形態では、ＲｅｓｕｌｔＯｕｔ１０５０は、隣接する計算ユニットの入力値ＲｅｓｕｌｔＩｎに接続される。いくつかの実施形態では、計算ユニットの列の最後のセルは、計算配列の出力に接続される。様々な実施形態において、計算配列の出力は、ベクトル処理のために図１のベクトルエンジン１１１などのベクトルエンジンに供給される。例えば、図１の計算セル１０９などの計算セルの出力ＲｅｓｕｌｔＯｕｔ１０５０は、図１のベクトルエンジン１１１の処理要素１１３などのベクトルエンジンの処理要素に供給されてもよい。
【０１２４】
示される例では、シャドウレジスタ１０２８は３２ビット幅である。様々な実施形態では、シャドウレジスタ１０２８は、必要に応じて、例えば８ビット、１６ビット、６４ビットなどの異なるサイズにされてもよい。様々な実施形態では、計算配列の複数の計算ユニットの各シャドウレジスタは同じサイズである。様々な実施形態では、シャドウレジスタ１０２８はアキュムレータ１０２４と同じサイズである。様々な実施形態において、マルチプレクサ１０２６のサイズは、アキュムレータ１０２４および／またはシャドウレジスタ１０２８のサイズに基づいている（例えば、同じサイズ、またはそれより大きい）。
【０１２５】
いくつかの実施形態では、論理１０３４、１０３６および１０３８は、制御信号などの信号を受け取って計算ユニット１０００の機能を有効化する、および／または構成する。様々な実施形態では、論理１０３４、１０３６および１０３８は、ＡＮＤゲートを使用して、および／またはＡＮＤゲートに対応する機能を使用して実装される。例えば、上述のように、論理１０３４はＣｌｅａｒＡｃｃ信号１００８と、アキュムレータ１０２４に格納された値に対応する入力値とを受け取る。ＣｌｅａｒＡｃｃ信号１００８に基づいて、論理１０３４の出力が決定され、加算器１０３２に供給される。別の例として、論理１０３６はＲｅｓｕｌｔＥｎａｂｌｅ信号１０１２およびＣｌｏｃｋ信号１０１０を受け取る。ＲｅｓｕｌｔＥｎａｂｌｅ信号１０１２に基づいて、論理１０３６の出力が決定され、アキュムレータ１０２４に供給される。別の例として、論理１０３８はＳｈｉｆｔＥｎ信号１０１６およびＣｌｏｃｋ信号１０１０を受け取る。ＳｈｉｆｔＥｎ信号１０１６に基づいて、論理１０３８の出力が決定され、シャドウレジスタ１０２８に供給される。
【０１２６】
様々な実施形態において、計算ユニットは、乗算、加算演算およびシフト演算を同時に実行する、すなわち単一のサイクルの中で実行することができ、それにより各サイクルで発生する操作の総数が２倍になる。いくつかの実施形態では、結果は、単一のクロックサイクル内で、すなわち中間の実行操作および保存操作を必要とせずに、マルチプレクサ１０２６からシャドウレジスタ１０２８に移動される。様々な実施形態において、クロックサイクルは、Ｃｌｏｃｋ信号１０１０で受け取った信号に基づいている。
【０１２７】
様々な実施形態において、入力値の重み１００２およびデータ１００４は８ビット値である。いくつかの実施形態では、重み１００２は符号付きの値であり、データ１００４は符号なしである。様々な実施形態において、重み１００２およびデータ１００４は、必要に応じて符号が付けられてもよいし、符号が付けられなくてもよい。いくつかの実施形態では、ＲｅｓｕｌｔＩｎ１００６およびＲｅｓｕｌｔＯｕｔ１０５０は３２ビット値である。様々な実施形態において、ＲｅｓｕｌｔＩｎ１００６およびＲｅｓｕｌｔＯｕｔ１０５０は、入力オペランドの重み１００２およびデータ１００４よりも多いビットを使用して実装される。多数のビットを利用することにより、例えばドット積結果を計算するために重み１００２とデータ１００４の複数のペアを乗算した結果が、スカラー結果をオーバーフローさせることなく累積されてよい。
【０１２８】
いくつかの実施形態では、計算ユニット１０００は、アキュムレータ１０２４で中間計算結果および／または最終計算結果を生成する。最終計算結果は、マルチプレクサ１０２６を介してシャドウレジスタ１０２８に格納される。いくつかの実施形態では、マルチプレクサ１０２６は出力レジスタとして機能し、アキュムレータ１０２４の出力を格納する。様々な実施形態において、最終計算結果は畳み込み演算の結果である。例えば、ＲｅｓｕｌｔＯｕｔ１０５０における最終結果は、重み１００２を使用して入力値として計算ユニット１０００が受け取ったフィルタと、データ１００４を使用して入力値として計算ユニット１０００が受け取ったセンサデータの２次元領域との畳み込みの結果である。
【０１２９】
一例として、センサデータの領域に対応する２×２データ入力行列［ｄ０  ｄ１；ｄ２  ｄ３］、および重みの２×２行列［ｗ０  ｗ１；ｗ２  ｗ３］に対応するフィルタに対して、計算ユニット１０００を使用して畳み込み演算を実行することができる。２×２データ入力行列には、１行目［ｄ０  ｄ１］と２行目［ｄ２  ｄ３］がある。フィルタ行列には、１行目［ｗ０  ｗ１］と２行目［ｗ２  ｗ３］がある。様々な実施形態では、計算ユニット１０００は、データ１００４を介してクロックサイクルごとに１要素で１次元入力ベクトル［ｄ０  ｄ１  ｄ２  ｄ３］としてデータ行列を受け取り、重み１００２を介してクロックサイクルごとに１要素で１次元入力ベクトル［ｗ０  ｗ１  ｗ２  ｗ３］として重み行列を受け取る。計算ユニット１０００を使用して、２つの入力ベクトルのドット積が実行され、ＲｅｓｕｌｔＯｕｔ１０５０においてスカラー結果が生成される。例えば、乗算器１０３０を使用して、入力重みとデータベクトルの対応する各要素を乗算し、その結果は格納され、アキュムレータ１０２４における前の結果に追加される。例えば、要素ｄ０に要素ｗ０を乗算した結果（例えば、ｄ０＊ｗ０）が、クリアされたアキュムレータ１０２４に最初に格納される。次に、要素ｄ１に要素ｗ１を乗算し、加算器１０３２を使用して、アキュムレータ１０２４に格納されている前の結果（例えば、ｄ０＊ｗ０）に加算して、ｄ０＊ｗ０＋ｄ１＊ｗ１の等価値を計算する。処理は要素ｄ２とｗ２の３番目のペアに進み、アキュムレータ１０２４でｄ０＊ｗ０＋ｄ１＊ｗ１＋ｄ２＊ｗ２の等価値を計算する。要素の最後のペアが乗算され、ドット積の最終結果（例：ｄ０＊ｗ０＋ｄ１＊ｗ１＋ｄ２＊ｗ２＋ｄ３＊ｗ３）がアキュムレータ１０２４に格納される。次に、ドット積の結果がシャドウレジスタ１０２８にコピーされる。シャドウレジスタ１０２８に格納されると、例えば、センサデータの異なる領域を使用して、新しいドット積演算を開始することができる。ＳｈｉｆｔＥｎ信号１０１６に基づいて、シャドウレジスタ１０２８に格納されたドット積結果はシャドウレジスタ１０２８からＲｅｓｕｌｔＯｕｔ１０５０にシフトされる。様々な実施形態において、重み行列およびデータ行列は、上記の例とは異なる次元である場合もある。例えば、より大きな次元が使用される場合もある。
【０１３０】
いくつかの実施形態では、バイアスパラメータが導入され、アキュムレータ１０２４を使用してドット積結果に追加される。いくつかの実施形態では、他の入力値としての乗算一致素子と共に、重み１００２またはデータ１００４のいずれかにおける入力としてバイアスパラメータを受け取る。バイアスパラメータを一致素子に対して乗算してバイアスパラメータを保持し、乗算の結果（バイアスパラメータなど）は加算器１０３２を使用してドット積結果に可算される。加算結果であるバイアス値によるドット積結果オフセットは、アキュムレータ１０２４に格納され、シャドウレジスタ１０２８を使用してＲｅｓｕｌｔＯｕｔ１０５０でシフトアウトされる。いくつかの実施形態では、図１のベクトルエンジン１１１などのベクトルエンジンを使用してバイアスが導入される。
【０１３１】
前述の実施形態は、理解を明確にする目的で一部の詳細において説明されているが、本発明は提供された詳細に限定されるものではない。本発明を実施する多くの代替方法が存在する。開示された実施形態は例示的であり、限定的ではない。
【図１】
2020529070.tif 000003
【図２】
2020529070.tif 000004
【図３】
2020529070.tif 000005
【図４Ａ】
2020529070.tif 000006
【図４Ｂ】
2020529070.tif 000007
【図５】
2020529070.tif 000008
【図６Ａ】
2020529070.tif 000009
【図６Ｂ】
2020529070.tif 000010
【図７】
2020529070.tif 000011
【図８】
2020529070.tif 000012
【図９】
2020529070.tif 000013
【図１０】
2020529070.tif 000014
【国際調査報告】
2020529070.tif 000015