(57)【要約】【課題】サイクルオーバヘッドを低減して処理を高速化することができる演算処理装置の提供を図る。【解決手段】演算を実行する演算器１５、および、ストリーム処理を実行するストリームエンジン２を含み、前記演算器１５のデータパスと前記ストリームエンジン２のデータパスを密結合する。【選択図】図２
2014215624.tif 000002
【特許請求の範囲】
【請求項１】
演算を実行する演算器、および、ストリーム処理を実行するストリームエンジンを含み、前記演算器のデータパスと前記ストリームエンジンのデータパスを密結合した、
ことを特徴とする演算処理装置。
【請求項２】
さらに、
命令を発行する命令発行部を有し、
前記命令発行部は、前記演算器に対する命令を発行すると共に、前記ストリームエンジンに対する命令も発行する、
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記ストリームエンジンは、
メモリからデータを読み出す読出回路と、
前記読み出したデータに対してストリーム処理を実行する実行回路と、
前記ストリーム処理された演算結果を前記メモリに書き込む書込回路と、を含む、
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記読出回路は、ＰＯＰ部および第１レジスタを含み、
前記ＰＯＰ部は、前記メモリにおける、先頭アドレスおよびストリーム長で示された第１メモリ部からデータを読み出して前記第１レジスタに格納する、
ことを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記実行回路は、ＥＸＥＣ部および第２レジスタを含み、
前記ＥＸＥＣ部は、前記第１レジスタに格納されたデータに対してストリーム処理を実行し、前記ストリーム処理された演算結果を前記第２レジスタに格納する、
ことを特徴とする請求項４に記載の演算処理装置。
【請求項６】
前記書込回路は、ＰＵＳＨ部を含み、
前記ＰＵＳＨ部は、前記第２レジスタに格納された演算結果を、前記メモリにおける、先頭アドレスおよびストリーム長で示された第２メモリ部に書き込む、
ことを特徴とする請求項５に記載の演算処理装置。
【請求項７】
前記命令発行部が前記ストリームエンジンに発行する命令は、ステップ命令であり、
前記ストリームエンジンの各パイプラインステージは、１つのステップ命令に従ってそれぞれ１つの処理を実行する、
ことを特徴とする請求項２乃至請求項６のいずれか１項に記載の演算処理装置。
【請求項８】
さらに、
前記ストリーム処理に使用するパラメータ情報を一括してセットするパラメータレジスタを含み、
前記ストリームエンジンの各パイプラインステージは、前記パラメータレジスタからパラメータ情報を参照してパイプライン実行する、
ことを特徴とする請求項７に記載の演算処理装置。
【請求項９】
前記命令発行部が前記ストリームエンジンに発行する命令は、ステップ命令を分解して、前記ストリームエンジンの各パイプラインステージの操作を制御する短ビット長のマイクロ命令であり、
前記各パイプラインステージは、それぞれ対応する前記マイクロ命令に従って独立して処理を実行する、
ことを特徴とする請求項２乃至請求項６のいずれか１項に記載の演算処理装置。
【請求項１０】
前記演算器がＶＬＩＷ命令により制御されるとき、
前記ストリームエンジンの各パイプラインステージの操作を制御するマイクロ命令をＶＬＩＷ命令に埋め込む、
ことを特徴とする請求項９に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で言及する実施例は、演算処理装置に関する。
【背景技術】
【０００２】
近年、スマートフォンやタブレットコンピュータといった携帯端末の通信量の増大に伴って、より高速な無線通信方式が注目されている。このような高速無線通信方式として、例えば、ＬＴＥ(Long Term Evolution)が普及されてきており、さらに高性能な次世代移動通信システムのＬＴＥアドバンスト(LTE-Advanced)も標準化が完了し、実用化に向けて様々な提案がなされている。
【０００３】
ところで、例えば、ＬＴＥアドバンストを適用する場合、無線通信ベースバンド処理として、膨大な行列演算処理を行うことになる。これは、ＬＴＥアドバンストに限ったことではなく、ＷｉＭＡＸ２(Worldwide Interoperability for Microwave Access 2)や現在使用されている方式を含めて様々な無線通信方式(規格)でも同様である。
【０００４】
一般的に、無線通信ベースバンド処理において、通信速度の向上に比例して膨大な行列演算を行うことになるが、例えば、上述したＬＴＥアドバンストでは、行列演算が全体の演算量の多くを占めている。
【０００５】
行列演算処理(ストリーム処理のひとつ)を高速に実行するためには、行列データが格納されたメモリと演算器を直列に接続し、メモリから読み出したデータに対して、行列演算を行ない、演算結果をメモリに書き出すストリームエンジンが適している。
【０００６】
そこで、例えば、ＬＴＥアドバンストの無線通信ベースバンド処理を行う演算処理装置(演算処理システム)として、汎用プロセッサであるベースプロセッサと、ストリームエンジンを持つコプロセッサを組み合わせたものが提案されている。
【０００７】
ところで、従来、ベースプロセッサと、ストリームエンジンを持つコプロセッサを組み合わせた演算処理システムとしては、様々なものが提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−１９７７７４号公報
【特許文献２】特開平０８−０６９３７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
前述したように、無線通信ベースバンド処理を行う演算処理システムとして、ベースプロセッサと、ストリームエンジンを持つコプロセッサを組み合わせたものが提案されている。
【００１０】
このような演算処理システムでは、例えば、コプロセッサ命令であるストリーム命令を実行するとき、ベースプロセッサは、ハンドシェイクにより、コプロセッサの状態監視、データ転送および実行制御等を行うため，オーバーヘッドが生じる。このオーバーヘッドは、例えば、通信サイクルオーバヘッドと呼ばれている。
【００１１】
さらに、例えば、コプロセッサのストリームエンジンがストリーム処理を実行中に割り込みが発生した場合、割り込み処理は、ストリーム処理の実行が完了するまで待機して行うことになる。
【００１２】
すなわち、割り込み発生時にコプロセッサがビジー状態の場合、ベースプロプロセッサはコプロセッサがアイドル状態になるまで待機することになり、通信サイクルオーバヘッドはさらに増加してしまう。
【課題を解決するための手段】
【００１３】
一実施形態によれば、演算を実行する演算器、および、ストリーム処理を実行するストリームエンジンを含み、前記演算器のデータパスと前記ストリームエンジンのデータパスを密結合した演算処理装置が提供される。
【発明の効果】
【００１４】
開示の演算処理装置は、サイクルオーバヘッドを低減して処理を高速化することができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、演算処理装置の一例を示すブロック図である。
【図２】図２は、本実例に係る演算処理装置の一例を示すブロック図である。
【図３】図３は、本実例の演算処理装置における動作を説明するための図である。
【図４】図４は、本実施例の演算処理装置におけるストリームエンジンの停止動作を説明するための図である。
【図５】図５は、図４を参照して説明したストリームエンジンの停止動作による効果の一例を説明するための図である。
【図６】図６は、本実施例の演算処理装置における読出回路の動作の一例を説明するための図である。
【図７】図７は、本実施例の演算処理装置における読出回路の動作の他の例を説明するための図である。
【図８】図８は、本実施例の演算処理装置における実行回路の動作の一例を説明するための図である。
【図９】図９は、本実施例の演算処理装置における実行回路の動作の他の例を説明するための図である。
【図１０】図１０は、本実施例の演算処理装置における書込回路の動作の一例を説明するための図である。
【図１１】図１１は、本実施例の演算処理装置における書込回路の動作の他の例を説明するための図である。
【図１２】図１２は、本実施例の演算処理装置におけるパラメータ情報の一例を説明するための図である。
【図１３】図１３は、本実施例の演算処理装置におけるステップ命令を説明するための図(その１)である。
【図１４】図１４は、本実施例の演算処理装置におけるステップ命令を説明するための図(その２)である。
【図１５】図１５は、本実施例の演算処理装置におけるステップ命令の変形を説明するための図である。
【図１６】図１６は、本実施例の演算処理装置におけるマイクロ命令を説明するための図(その１)である。
【図１７】図１７は、本実施例の演算処理装置におけるマイクロ命令を説明するための図(その２)である。
【図１８】図１８は、本実施例の演算処理装置におけるマイクロ命令によるアクセス制御を説明するための図である。
【図１９】図１９は、本実施例の演算処理装置におけるマイクロ命令をＶＬＩＷ命令に埋め込む様子を示す図である。
【図２０】図２０は、図１９に示すＶＬＩＷ命令のプロローグ処理を説明するための図である。
【図２１】図２１は、図１９に示すＶＬＩＷ命令のエピローグ処理を説明するための図である。
【発明を実施するための形態】
【００１６】
まず、演算処理装置の実施例を詳述する前に、図１を参照して、演算処理装置の一例およびその問題点を説明する。
【００１７】
図１は、演算処理装置の一例を示すブロック図であり、汎用プロセッサであるベースプロセッサと、ストリームエンジンを持つコプロセッサを組み合わせた演算処理装置(演算処理システム)を示すものである。
【００１８】
図１において、参照符号ＩＦは命令読出(Instruction Fetch)ステージ、ＩＤは命令解釈(Instruction Decode)ステージ、そして、ＲＲ／ＩＩはレジスタ読出(Register Read)および命令発行(Instruction Issue)ステージを示す。
【００１９】
また、参照符号ＥＸは実行(EXecution)ステージ、ＭＡはメモリアクセス(Memory Access)ステージ、そして、ＲＷはレジスタ書込(Register Write)ステージを示す。図１に示す演算処理システムは、例えば、汎用プロセッサであるベースプロセッサ１００と、ストリームエンジン２００を含むコプロセッサ３００を有する。
【００２０】
ベースプロセッサ１００において、ＩＦステージでは、命令読出部１０１が命令メモリ１０８から命令をフェッチ(読み出)し、また、ＩＤステージでは、命令解釈部１０２が命令読出部１０１で読み出されたた命令を受け取ってデコード(解釈)する。
【００２１】
ＲＲ／ＩＩステージでは、レジスタ読出部１０３がレジスタ１１０のリード(読み出し)を行うと共に、命令発行部１０４が命令解釈部１０２で解釈された命令を演算器１０５へ発行する。
【００２２】
ＥＸステージでは、演算器１０５が命令発行部１０４から発行された命令に従った演算を実行し、また、ＭＡステージでは、メモリアクセス部１０６がメモリ(データメモリ)１０９に対するロード(読み出し)またはストア(書き込み)のアクセスを行う。
【００２３】
ＲＷステージでは、レジスタ書込部１０７が演算器１０５による演算結果、または、データメモリ１０９からロードされたデータをレジスタ１１０に書き込む。
【００２４】
ここで、図１の参照符号Ｐ１００で示されるように、ベースプロセッサ１００では、レジスタ−メモリ間またはレジスタ−演算器間の処理を１命令としてパイプライン実行するようになっている。
【００２５】
コプロセッサ３００において、ＩＦステージでは、命令読出部３０１が命令メモリ１０８から命令を読み出し、また、ＩＤステージでは、命令解釈部３０２が命令読出部３０１で読み出された命令を受け取って解釈する。
【００２６】
ＲＲ／ＩＩステージでは、レジスタ読出部３０３がレジスタ３１０のリードを行うと共に、命令発行部３０４が命令解釈部３０２で解釈された命令をストリームエンジン２００へ発行する。ここで、ストリームエンジン２００は、演算器２０５、および、データメモリ４００に対するロードまたはストアのアクセスを行うメモリアクセス部２０６を含む。
【００２７】
図１の参照符号Ｐ２００で示されるように、命令発行部３０４からストリームエンジン２００への命令はストリーム命令であり、１ストリーム命令が発行されると、メモリ−演算器間の１ストリーム処理が完了するまでパイプライン実行するようになっている。
【００２８】
すなわち、ＥＸおよびＭＡステージでは、ストリームエンジン２００における演算器２０５およびメモリアクセス部２０６が命令発行部３０４から発行されたストリーム命令に従ってストリーム処理が完了するまで処理を行う。なお、ＲＷステージでは、レジスタ書込部３０７がストリームエンジン２００によりストリーム処理されたデータ(演算結果)をレジスタ３１０に書き込む。
【００２９】
ここで、図１において、参照符号Ｐ１５０は、ベースプロセッサ１００によるコプロセッサ３００の処理を示し、例えば、コプロセッサ３００のストリーム命令発行によりコプロセッサ３００とハンドシェイクする処理を示す。すなわち、ベースプロセッサ１００は、例えば、コプロセッサ３００の状態を監視し、コプロセッサ３００の実行制御を行い、そして、コプロセッサ３００へのデータ転送を制御する。
【００３０】
図１を参照して説明したベースプロセッサ１００と、ストリームエンジン２００を持つコプロセッサ３００を組み合わせた演算処理システムは、ストリームエンジン２００によりストリーム処理を実行するとき、サイクルオーバヘッドの問題がある。
【００３１】
すなわち、コプロセッサ命令であるストリーム命令を実行するとき、ベースプロセッサ１００は、ハンドシェイクにより、コプロセッサ３００の状態を監視し、コプロセッサ３００との間のデータ転送を行ない、そして、コプロセッサ３００の実行を制御する。
【００３２】
そのため、ベースプロセッサ１００とコプロセッサ３００の間には、オーバーヘッド(通信サイクルオーバヘッド)が生じる。また、例えば、コプロセッサ３００のストリームエンジン２００がストリーム処理を実行中に割り込みが発生した場合、そのストリーム処理の実行が完了するまで待機することになり、通信サイクルオーバヘッドはさらに増加する。
【００３３】
以下、本実施例の演算処理装置を、添付図面を参照して詳述する。図２は、本実例に係る演算処理装置の一例を示すブロック図である。図２と上述した図１の比較から明らかなように、図２に示す演算処理装置(プロセッサ)１は、図１におけるベースプロセッサ１００に対応する構成を含み、さらに、ストリームエンジン２を内蔵している。
【００３４】
すなわち、図２に示されるように、プロセッサ１は、レジスタ１０，命令読出部１１，命令解釈部１２，レジスタ読出部１３，命令発行部１４，演算器１５，メモリアクセス部１６，レジスタ書込部１７，命令メモリ１８およびデータメモリ１９を含む。ここで、命令発行部１４は、演算器１５に命令を発行するだけでなく、ストリームエンジン２に対しても命令(例えば、ステップ命令)を発行するようになっている。
【００３５】
ストリームエンジン２は、データメモリ４からデータを読み出してレジスタ２２１，２２２に書き込むＰＯＰ部２１、レジスタ２２１，２２２に書き込まれたデータに対してストリーム処理を実行してレジスタ２４に書き込むＥＸＥＣ部２３を含む。さらに、ストリームエンジン２は、レジスタ２４に書き込まれたデータをデータメモリ４に書き込むＰＵＳＨ部２５も含む。
【００３６】
図２において、参照符号ＩＦ，ＩＤ，ＲＲ／ＩＩ，ＥＸ，ＭＡおよびＲＷは、それぞれ図１を参照して説明したのと同様のステージを示す。
【００３７】
すなわち、ＩＦステージでは、命令読出部１１が命令メモリ１８から命令をフェッチ(読み出)し、また、ＩＤステージでは、命令解釈部１０２が命令読出部１０１でフェッチされた命令を受け取ってデコード(解釈)する。
【００３８】
ＲＲ／ＩＩステージでは、レジスタ読出部１３がレジスタ１０のリード(読み出し)を行うと共に、命令発行部１４が命令解釈部１２で解釈された命令を演算器１５およびストリームエンジン２へ発行する。
【００３９】
ＥＸステージでは、演算器１５が命令発行部１４から発行された命令に従った演算を実行すると共に、ストリームエンジン２が命令発行部１４から発行された命令に従ったストリーム処理を実行する。ここで、命令発行部１４からストリームエンジン２への命令は、上述したように、ステップ命令とされている。
【００４０】
ＭＡステージでは、メモリアクセス部１６がメモリ(データメモリ)１９に対するロードまたはストアのアクセスを行う。さらに、ＭＡステージでは、ストリームエンジン２(ＰＯＰ部２１またはＰＵＳＨ部２５)がメモリ(データメモリ)４に対するロード(読み出し)またはストア(書き込み)のアクセスを行う。
【００４１】
ＲＷステージでは、レジスタ書込部１７が演算器１５による演算結果またはデータメモリ１９からロードされたデータをレジスタ１０に書き込むと共に、レジスタ書込部１７がストリームエンジン２によりストリーム処理されたデータをレジスタ１０に書き込む。
【００４２】
図３は、本実例の演算処理装置における動作を説明するための図である。図３の参照符号Ｐ１と、前述した図１の参照符号Ｐ１００の比較から明らかなように、図１におけるベースプロセッサ１００の対応個所では、レジスタ−メモリ間またはレジスタ−演算器間の処理を１命令としてパイプライン実行するようになっている。
【００４３】
また、図３の参照符号Ｐ２１〜Ｐ２３に示されるように、プロセッサ１に内蔵されたストリームエンジン２では、命令発行部１４から発行されたステップ命令に従って、ステップ毎の処理を実行する。
【００４４】
ここで、処理Ｐ２１は、ストリームエンジン２のＰＯＰ部２１がデータメモリ４からデータを読み出してレジスタ２２１，２２２に書き込む処理である。また、処理Ｐ２２は、ＥＸＥＣ部２３がレジスタ２２１，２２２に書き込まれたデータに対してストリーム処理を実行してレジスタ２４に書き込む処理である。
【００４５】
さらに、処理Ｐ２３は、ＰＵＳＨ部２５がレジスタ２４に書き込まれたデータをデータメモリ４に書き込む処理である。これらの処理Ｐ２１〜Ｐ２３は、命令発行部１４から発行されたステップ命令に従ってパイプライン実行される。
【００４６】
なお、本明細書では、ストリームエンジン２は、３つの処理Ｐ２１〜Ｐ２３を３つのステップ命令で処理(３ステップ命令で１回転)する場合を例として示している。しかしながら、これは単なる例であり、４つ以上の処理で１回転の処理とし、この１回転の処理を多数回繰り返すことでストリーム処理を実行してもよいのはいうまでもない。
【００４７】
図４は、本実施例の演算処理装置におけるストリームエンジンの停止動作を説明するための図である。例えば、プロセッサ１に内蔵されたストリームエンジン２がストリーム処理を実行中に割り込みが発生した場合、命令発行部１４がストリームエンジン２に対するステップ命令の発行を停止する。
【００４８】
このように、命令発行部１４がストリームエンジン２に対するステップ命令の発行を停止すると、ストリームエンジン２における全ての処理Ｐ２１〜Ｐ２３が停止する。すなわち、ＰＯＰ部２１は、データメモリ４からデータを読み出してレジスタ２２１，２２２に書き込む処理Ｐ２１を停止する。
【００４９】
また、ＥＸＥＣ部２３は、レジスタ２２１，２２２に書き込まれたデータに対してストリーム処理を実行してレジスタ２４に書き込む処理Ｐ２２を停止する。そして、ＰＵＳＨ部２５は、レジスタ２４に書き込まれたデータをデータメモリ１９に書き込む処理Ｐ２３を停止する。
【００５０】
このように、本実施例の演算処理装置は、ストリームエンジン２の動作をステップ命令により細粒度で制御しているため、ストリーム処理中に割り込みが発生した場合には、ストリーム処理を直ちに停止して割り込み処理を行うことができる。
【００５１】
すなわち、本実施例の演算処理装置によれば、例えば、割り込み発生時にステップ命令の発行を止めることにより、ストリームエンジン２を直ちに停止することができる。換言すると、本実施例の演算処理装置によれば、命令発行を止めた後、ストリームエンジン２の各パイプラインステージ(処理Ｐ２１〜Ｐ２３)は自律的に停止することができ、サイクルオーバヘッドを低減して処理を高速化することが可能になる。
【００５２】
図５は、図４を参照して説明したストリームエンジンの停止動作による効果の一例を説明するための図であり、図５(a)は、前述した図１に示す演算処理システムによる動作を示し、図５(b)は、図４を参照して説明した演算処理装置による動作を示す。
【００５３】
ここで、前提として、１ストリーム処理のサイクル数(クロックサイクル数)を２００サイクル、演算データパスのレイテンシを１０サイクル、そして、１ストリーム処理に使用するパラメータ情報のビット幅を３２０ビットとする。
【００５４】
また、外部−メモリ間のデータ転送はストリーム処理とオーバラップ動作し、データ転送サイクルは隠蔽されているものとする。さらに、図５(a)において、ベースプロセッサ１００−コプロセッサ３００間のデータパスを３２ビットとし、パラメータ情報は、ベースプロセッサ１００からコプロセッサ３００へ１０サイクルで転送されるものとする。
【００５５】
従って、図５(a)では、通信サイクルオーバヘッドは、例えば、１０[サイクル](データ転送)＋１０[サイクル](演算データパス)＝２０[サイクル]となる。
【００５６】
また、図５(b)において、データパスは密結合されているため、パラメータ情報は１サイクルで転送されるとする。なお、本明細書において、密結合とは、バスレベルで結合された複数のプロセッサが共通のメモリにアクセスするというのではなく、共通の命令発行部１４が演算器１５およびストリームエンジン２に対して命令を発行して制御することを意味する。
【００５７】
従って、図５(b)では、通信サイクルオーバヘッドは、例えば、１[サイクル](データ転送)＋１０[サイクル](演算データパス)＝１１[サイクル]となる。
【００５８】
まず、図５(a)に示されるように、図１に示す演算処理システムにおいて、例えば、３回目のストリーム処理(Ａ２)における５０サイクル目で割り込みが発生した場合、その３回目のストリーム処理を全て完了した後に、別のストリーム処理(Ｂ０)を実行する。
【００５９】
そのため、演算処理システムでは、別のストリーム処理(Ｂ０)を完了するまでに、２００＋２０＋２００＋２０＋５０＋１５０＋２０＋２００＝８６０[サイクル]だけ要することになる。
【００６０】
一方、図４を参照して説明した本実施例の演算処理装置(プロセッサ)１において、例えば、３回目のストリーム処理(Ａ２)における５０サイクル目で割り込みが発生した場合、直ちにその３回目のストリーム処理を止めて別のストリーム処理(Ｂ０)を実行する。
【００６１】
そのため、本実施例のプロセッサ１では、別のストリーム処理(Ｂ０)を完了するまでに、２００＋１１＋２００＋１１＋５０＋１１＋２００＝６８３[サイクル]だけ要することになる。
【００６２】
すなわち、本実施例のプロセッサ１によれば、同じ処理を行うのに、８６０[サイクル]から６８３[サイクル]へ１７７[サイクル]だけ処理を高速化することが可能なことが分かる。
【００６３】
なお、図５は、単なるストリーム処理の一例を説明するためのもので、例えば、１ストリーム命令による処理サイクル数が多いほど、或いは、ストリーム処理を実行中の割り込み発生頻度が高いほど、より一層高速化の効果が大きくなるのはいうまでもない。
【００６４】
図６は、本実施例の演算処理装置における読出回路の動作の一例を説明するための図であり、図７は、本実施例の演算処理装置における読出回路の動作の他の例を説明するための図である。
【００６５】
図６および図７に示されるように、読出回路２１０は、ＰＯＰ部２１およびレジスタ２２１，２２２を含み、データメモリ４は、メモリ部４１，４２を含む。なお、メモリ部４１および４２は、例えば、データメモリ４における異なる番地(先頭アドレス)のバンク化されたメモリ領域を示すもので、２つのメモリを持たなくてもよいのはもちろんである。
【００６６】
図６に示されるように、読出回路２１０において、ＰＯＰ部２１は、データメモリ４のメモリ部(第１バンク)４１から先頭アドレスおよびストリーム長を指定して第１データを読み出し、レジスタ２２１に格納する。
【００６７】
さらに、読出回路２１０において、ＰＯＰ部２１は、データメモリ４のメモリ部(第２バンク)４２から先頭アドレスおよびストリーム長を指定して第２データを読み出し、レジスタ２２２に格納する。この読出回路２１０の処理は、例えば、前述した図３の演算処理装置における処理Ｐ２１に対応する。
【００６８】
すなわち、ＰＯＰ部２１は、データメモリ４からストリームデータを読み出し、ストリーム処理の読出ステージ(ＰＯＰ部２１)と実行ステージ(ＥＸＥＣ部２３)の間のレジスタ(パイプラインレジスタ)２２１，２２２に投入(格納)してパイプライン処理を実行する。
【００６９】
このように、例えば、第１バンク４１および第２バンク４２にバンク化されたデータメモリ４から、先頭アドレスおよびストリーム長を指定してストリームデータを読み出すことにより、メモリのポート数およびサイクルオーバヘッドを解消することができる。
【００７０】
また、図７に示されるように、例えば、ＤＭＡ(Direct Memory Access)５により、メモリ部(第１および第２バンク)４１，４２から読み出されたデータをＦＩＦＯ(First In First Out)バッファ６１，６２を介して読出回路２１０に供給することもできる。すなわち、データメモリ４からのデータ転送をＤＭＡ５に任せ、ＦＩＦＯバッファ６１，６２から読み出しデータを取り出すこともできる。
【００７１】
図８は、本実施例の演算処理装置における実行回路の動作の一例を説明するための図である。図８に示されるように、実行回路２３０は、ＥＸＥＣ部２３およびレジスタ２４を含む。
【００７２】
実行回路２３０において、ＥＸＥＣ部２３は、レジスタ２２１および２２２に書き込まれたデータに対してストリーム処理を実行し、その演算結果をレジスタ２４に書き込む。この実行回路２３０の処理は、例えば、前述した図３の演算処理装置における処理Ｐ２２に対応する。
【００７３】
すなわち、ＥＸＥＣ部２３は、レジスタ２２１および２２２に投入されたデータに対してストリーム処理を実行し、その演算結果をＥＸＥＣ部２３とＰＵＳＨ部２５の間のレジスタ(パイプラインレジスタ)２４に投入してパイプライン処理を実行する。
【００７４】
図９は、本実施例の演算処理装置における実行回路の動作の他の例を説明するための図であり、実行回路２３０を多段のＥＸＥＣ部２３１〜２３３およびレジスタ２４１〜２４３としたものである。
【００７５】
このとき、読出回路２１０のレジスタは、初段の２つのＥＸＥＣ部２３１および２３２に対応させて、４つのレジスタ２２１ａ，２２１ｂおよび２２２ａ，２２２ｂとされている。
【００７６】
また、実行回路２３０のレジスタも、３つのＥＸＥＣ部２３１〜２３３による演算結果を格納するために３つのレジスタ２４１〜２４３とされている。なお、図９に示す実行回路は単なる例であり、様々な構成を適用することができるのはもちろんである。
【００７７】
このように、実行回路２３０(演算器データパス)は多段構成でもよく、演算結果を毎サイクルＥＸＥＣ部２３３とＰＵＳＨ部２５の間のレジスタ(パイプラインレジスタ)２４３に投入してパイプライン処理を実行することができる。
【００７８】
図１０は、本実施例の演算処理装置における書込回路の動作の一例を説明するための図であり、図１１は、本実施例の演算処理装置における書込回路の動作の他の例を説明するための図である。
【００７９】
図１０に示されるように、書込回路２５０は、ＰＵＳＨ部２５を含み、レジスタ２４に格納された演算結果をデータメモリ４のメモリ部４３に書き込む。すなわち、ＥＸＥＣ部２３とＰＵＳＨ部２５間のパイプラインレジスタ２４から出力データを取り出し、例えば、先頭アドレスとストリーム長で示されたメモリ領域へ書き込む。
【００８０】
この書込回路２５０の処理は、例えば、前述した図３の演算処理装置における処理Ｐ２３に対応する。ここで、メモリ部４３は、例えば、データメモリ４において、メモリ部４１，４２とは異なるメモリ領域とすることができる。
【００８１】
図１０に示す書込回路２５０は、レジスタ２４に格納された演算結果を直接データメモリ部４３に書き込む。これに対して、図１１に示す書込回路２５０は、レジスタ２４に格納された演算結果をＦＩＦＯバッファ７に書き込み、そのＦＩＦＯバッファ７に書き込まれたデータをＤＭＡ８がメモリ部４３に転送する。
【００８２】
すなわち、図１１に示す書込回路２５０は、レジスタ２４に格納された演算結果を順にＦＩＦＯバッファ７に書き込み、ＦＩＦＯバッファ７からメモリ部４３(データメモリ４)へのデータ転送は、ＤＭＡ８に任せるようになっている。
【００８３】
図１２は、本実施例の演算処理装置におけるパラメータ情報の一例を説明するための図である。ストリーム処理に使用するパラメータ情報は、例えば、各ストリーム(ｉ)の先頭アドレス(ａｉ)、ストリーム長(ｌｉ)、演算オペコード(ｏ)および演算モード(ｍ)は単一かつ長ビット長の命令(セット命令：ｓｅｔ)で表現することができる。
【００８４】
このセット命令(パラメータ情報)は、参照符号Ｐ１０で示されるように、命令メモリ１８から読み出されて、パラメータレジスタ１４０へ一括して代入(セット)される。そして、各パイプラインステージ(ＰＯＰ部２１，ＥＸＥＣ部２３およびＰＵＳＨ部２５)は、参照符号Ｐ１１で示されるように、パラメータレジスタ１４０からパラメータ情報を参照してパイプライン実行する。
【００８５】
図１３および図１４は、本実施例の演算処理装置におけるステップ命令を説明するための図である。図１３および図１４に示されるように、本実施例の演算処理装置(ストリームエンジン２)は、セット命令により制御することができる。
【００８６】
すなわち、参照符号Ｐ２０で示されるように、命令メモリ１８からステップ命令を読み出し、そのステップ命令の実行により、ストリームエンジン２の各パイプラインステージの処理Ｐ２１〜Ｐ２３を制御することができる。なお、ステップ命令は、例えば、予めプログラマーにより作成されたものが使用される。
【００８７】
ここで、ステップ命令 step 1〜step N は、命令メモリ１８から順番に読み出されて命令発行部１４からストリームエンジン２へ発行され、各パイプライン処理Ｐ２１〜Ｐ２３が実行される。
【００８８】
図１３に示されるように、ステップ命令は、命令発行部１４からストリームエンジン２へ発行され、１つのステップ命令により、ＰＯＰ部２１，ＥＸＥＣ部２３およびＰＵＳＨ部２５が１つの処理(Ｐ２１，Ｐ２２，Ｐ２３)を実行する。
【００８９】
すなわち、図１４(a)に示されるように、処理Ｐ２１は、ＰＯＰ部２１がデータメモリ４からデータを読み出してレジスタ２２１，２２２に書き込む処理である。また、図１４(b)に示されるように、処理Ｐ２２は、ＥＸＥＣ部２３がレジスタ２２１，２２２に書き込まれたデータに対してストリーム処理を実行してレジスタ２４に書き込む処理である。
【００９０】
さらに、図１４(c)に示されるように、処理Ｐ２３は、ＰＵＳＨ部２５がレジスタ２４に書き込まれたデータをデータメモリ１９に書き込む処理である。これらの処理Ｐ２１〜Ｐ２３は、命令発行部１４から発行されたステップ命令に従ってパイプライン実行される。
【００９１】
図１５は、本実施例の演算処理装置におけるステップ命令の変形を説明するための図である。前述した図１３では、Ｎ個のステップ命令 step 1〜step N は、そのまま命令メモリ１８から読み出されて命令発行部１４からストリームエンジン２へ発行されている。
【００９２】
これに対して、図１５に示す変形例では、セット命令を、連続する繰り返し処理(ループ処理)を効率よく実行するためのループ処理専用の命令(ゼロオーバヘッドループ命令)と組み合わせるようになっている。
【００９３】
すなわち、Ｎ個のステップ命令 step 1〜step N は、ゼロオーバヘッドループ命令（loop N  step)とすることで、命令列を増加させないようにすることができる。なお、ゼロオーバヘッドループ命令においても、例えば、割り込み発生時、ストリームは、直ちに実行中のステップで処理を停止するようになっている。
【００９４】
図１６および図１７は、本実施例の演算処理装置におけるマイクロ命令を説明するための図である。図１６に示されるように、命令発行部１４からストリームエンジン２へ発行される命令は、マイクロ命令とされている。
【００９５】
すなわち、図１６の参照符号Ｐ３０で示されるように、命令メモリ１８からマイクロ命令を読み出し、そのマイクロ命令の実行により、ストリームエンジン２の各パイプラインステージの処理Ｐ２１〜Ｐ２３を制御するようになっている。
【００９６】
例えば、図１７(a)に示す処理Ｐ２１に対してｐｏｐ命令を割り当て、図１７(b)に示す処理Ｐ２２に対してｅｘｅｃ命令を割り当て、そして、図１７(c)に示す処理Ｐ２３に対してｐｕｓｈ命令を割り当て、各マイクロ命令により実行する。これにより、各パイプラインステージの処理Ｐ２１〜Ｐ２３をマイクロ命令により個別に制御することができる。
【００９７】
図１８は、本実施例の演算処理装置におけるマイクロ命令によるアクセス制御を説明するための図である。
【００９８】
ここで、図１８(a)は、ｐｏｐ，ｅｘｅｃおよびｐｕｓｈ命令を全て発行した場合を示し、図１８(ｂ)は、ｐｏｐ命令を停止した場合を示し、そして、図１８(c)は、ｐｕｓｈ命令を停止した場合を示す。なお、演算処理装置には、前述した図７および図１１のように、ＤＭＡ５，８およびＦＩＦＯバッファ６１，６２，７が設けられている。
【００９９】
まず、図１８(a)に示されるように、ｐｏｐ命令，ｅｘｅｃ命令およびｐｕｓｈ命令の全てが発行されると、各パイプラインステージの処理Ｐ２１〜Ｐ２３が毎サイクル実行される。
【０１００】
次に、図１８(ｂ)に示されるように、ｐｏｐ命令を停止すると、すなわち、ｅｘｅｃ命令およびｐｕｓｈ命令のみ実行すると、ＰＯＰ部２１は、ＦＩＦＯバッファ６１，６２からのデータ読み出しを停止する。
【０１０１】
これにより、ＦＩＦＯバッファ６１，６２は、ＤＭＡ(入力ＤＭＡ)５によるデータ転送で満状態となり、ＤＭＡ５がＦＩＦＯバッファ６１，６２の満状態を検出して自動停止する。すなわち、マイクロ命令であるｐｏｐ命令を停止することにより、ストリームエンジン２のパイプライン処理を停止することができる。
【０１０２】
さらに、図１８(c)に示されるように、ｐｕｓｈ命令を停止すると、すなわち、ｐｏｐ命令およびｅｘｅｃ命令のみ実行すると、ＰＵＳＨ部２５は、レジスタ２４からデータを読み出してＦＩＦＯバッファ７に格納する動作を停止する。
【０１０３】
これにより、ＦＩＦＯバッファ７は空状態となり、ＤＭＡ(出力ＤＭＡ)８がＦＩＦＯバッファ７の空状態を検出して自動停止する。すなわち、マイクロ命令であるｐｕｓｈ命令を停止することにより、ストリームエンジン２のパイプライン処理を停止することができる。
【０１０４】
このように、ｐｏｐ命令，ｅｘｅｃ命令およびｐｕｓｈ命令のマイクロ命令を使用することで、例えば、割り込み発生時でも、ＤＭＡ５，８がメモリアクセスを自律的に制御することができる。すなわち、メモリ−演算器間のデータ転送の制御を簡略化することができ、メモリアクセス制御のハードウェア量を削減することが可能になる。
【０１０５】
図１９は、本実施例の演算処理装置におけるマイクロ命令をＶＬＩＷ命令に埋め込む(パックする)様子を示す図である。図１６〜図１８を参照して説明したように、マイクロ命令を使用する場合、例えば、ＶＬＩＷ(Very Long Instruction Word：超長命令語)命令に埋め込むことで各処理を同時に実行することができ、実行サイクル数を削減することが可能となる。
【０１０６】
すなわち、複数のマイクロ命令をＶＬＩＷ命令に埋め込むことで、ループ処理の命令数を削減することができ、さらに、ループの実行サイクル数を削減することもできる。また、ベースプロセッサ(ＶＬＩＷプロセッサを想定：演算処理装置１)の命令セットアーキテクチャを有効に活用することも可能になる。
【０１０７】
図１９は、Ｍ個のマイクロ命令をＮ個のＶＬＩＷ命令にパックする様子を示しているが、ここで、VLIW 1命令〜VLIW 3命令によるプロローグ処理、および、VLIW N-2命令〜VLIW N命令によるエピローグ処理を、図２０および図２１を参照して説明する。
【０１０８】
図２０は、図１９に示すＶＬＩＷ命令のプロローグ処理を説明するための図であり、図２０(a)はVLIW 1命令の処理を示し、図２０(b)はVLIW 2命令の処理を示し、そして、図２０(c)はVLIW 3命令の処理を示す。
【０１０９】
ここで、図１９に示されるように、プロローグ処理は、停止しているストリームエンジン２起動させる処理で、VLIW 1[pop            ]、VLIW 2[pop, exec      ]およびVLIW 3[pop, exec, push]の３つの命令を実行することで達成される。
【０１１０】
まず、図２０(a)に示されるように、VLIW 1命令によるｐｏｐ命令のみ実行する。すなわち、ｐｏｐ命令により、ＰＯＰ部２１がデータメモリ４からデータを読み出してレジスタ２２１，２２２に書き込む処理Ｐ２１を実行する。これにより、レジスタ２２１，２２２には、ＥＸＥＣ部２３が演算処理を行うデータが投入されたことになる。
【０１１１】
次に、図２０(b)に示されるように、VLIW 2命令によるｐｏｐ命令およびｅｘｅｃ命令を実行する。すなわち、ｐｏｐ命令により上述した処理Ｐ２１を実行すると共に、ｅｘｅｃ命令により、ＥＸＥＣ部２３がレジスタ２２１，２２２に書き込まれたデータに対してストリーム処理を実行してレジスタ２４に書き込む処理Ｐ２２を実行する。
【０１１２】
これにより、レジスタ２２１，２２２には、ＥＸＥＣ部２３が演算処理を行うデータが投入され、また、レジスタ２４には、ＰＵＳＨ部２５がデータメモリ４に書き込む演算結果のデータが投入されたことになる。
【０１１３】
そして、図２０(c)に示されるように、VLIW 3命令によるｐｏｐ命令，ｅｘｅｃ命令およびＰＵＳＨ命令を実行する。すなわち、ｐｏｐ命令により処理Ｐ２１を実行すると共に、ｅｘｅｃ命令により処理Ｐ２２を実行し、さらに、ＰＵＳＨ命令により、ＰＵＳＨ部２５がレジスタ２４に書き込まれた演算結果データをデータメモリ４に書き込む処理Ｐ２３を実行する。
【０１１４】
なお、このエピローグ処理以降、図２１を参照して説明するエピローグ処理まで、VLIW 3命令と同じ命令(VLIW 4命令，VLIW 5命令，…)により処理Ｐ２１〜Ｐ２３によるパイプライン処理が継続して実行される。
【０１１５】
図２１は、図１９に示すＶＬＩＷ命令のエピローグ処理を説明するための図であり、図２１(a)はVLIW N-2命令の処理を示し、図２１(b)はVLIW N-1命令の処理を示し、そして、図２１(c)はVLIW N命令の処理を示す。
【０１１６】
ここで、図１９に示されるように、エピローグ処理は、図２０を参照して説明したプロローグ処理と逆に動作中のストリームエンジン２を停止させる処理である。このエピローグ処理は、VLIW N-2[pop, exec, push]、VLIW N-1[     exec, push]およびVLIW N[           push]、の３つの命令を実行することで達成される。
【０１１７】
まず、図２１(a)に示されるように、VLIW N-2命令によるｐｏｐ命令，ｅｘｅｃ命令およびｐｕｓｈ命令を行う。このVLIW N-2命令は、図２０(c)を参照して説明したVLIW 3命令、すなわち、処理Ｐ２１〜Ｐ２３により継続して実行されるパイプライン処理と同じものである。
【０１１８】
次に、図２１(b)に示されるように、VLIW N-1命令によるｅｘｅｃ命令およびｐｕｓｈ命令を実行する。すなわち、ｐｏｐ命令を除くことにより、ＰＯＰ部２１がデータメモリ４からデータを読み出してレジスタ２２１，２２２に書き込む処理Ｐ２１を停止する。これにより、レジスタ２２１，２２２は空状態となる。
【０１１９】
そして、図２１(c)に示されるように、VLIW N命令によるＰＵＳＨ命令のみ実行する。すなわち、ｐｏｐ命令およびｅｘｅｃ命令を除くことで、レジスタ２２１，２２２だけでなく、レジスタ２４も、空状態となる。
【０１２０】
なお、ｐｏｐ命令，ｅｘｅｃ命令およびｐｕｓｈ命令の３つのマイクロ命令によりストリームエンジン２を制御するのは、単なる例であり、さらなるマイクロ命令を追加し、或いは、異なるマイクロ命令を適用するといった様々な変更が可能なのはいうまでもない。
【０１２１】
なお、上述した実施例では、ＬＴＥアドバンスト等における行列演算処理を行う演算処理装置を例として説明したが、本実施例は、このような無線通信デバイスに適用する演算処理装置に限定されず、様々な演算処理装置に幅広く適用することが可能である。
【０１２２】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１２３】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
演算を実行する演算器、および、ストリーム処理を実行するストリームエンジンを含み、前記演算器のデータパスと前記ストリームエンジンのデータパスを密結合した、
ことを特徴とする演算処理装置。
【０１２４】
（付記２）
さらに、
命令を発行する命令発行部を有し、
前記命令発行部は、前記演算器に対する命令を発行すると共に、前記ストリームエンジンに対する命令も発行する、
ことを特徴とする付記１に記載の演算処理装置。
【０１２５】
（付記３）
前記ストリームエンジンは、
メモリからデータを読み出す読出回路と、
前記読み出したデータに対してストリーム処理を実行する実行回路と、
前記ストリーム処理された演算結果を前記メモリに書き込む書込回路と、を含む、
ことを特徴とする付記２に記載の演算処理装置。
【０１２６】
（付記４）
前記読出回路は、ＰＯＰ部および第１レジスタを含み、
前記ＰＯＰ部は、前記メモリにおける、先頭アドレスおよびストリーム長で示された第１メモリ部からデータを読み出して前記第１レジスタに格納する、
ことを特徴とする付記３に記載の演算処理装置。
【０１２７】
（付記５）
前記実行回路は、ＥＸＥＣ部および第２レジスタを含み、
前記ＥＸＥＣ部は、前記第１レジスタに格納されたデータに対してストリーム処理を実行し、前記ストリーム処理された演算結果を前記第２レジスタに格納する、
ことを特徴とする付記４に記載の演算処理装置。
【０１２８】
（付記６）
前記実行回路は、階層化された複数のＥＸＥＣ部および各階層の前記ＥＸＥＣ部間に設けられた複数の第３レジスタを含む、
ことを特徴とする付記５に記載の演算処理装置。
【０１２９】
（付記７）
前記書込回路は、ＰＵＳＨ部を含み、
前記ＰＵＳＨ部は、前記第２レジスタに格納された演算結果を、前記メモリにおける、先頭アドレスおよびストリーム長で示された第２メモリ部に書き込む、
ことを特徴とする付記５または付記６に記載の演算処理装置。
【０１３０】
（付記８）
前記命令発行部が前記ストリームエンジンに発行する命令は、ステップ命令であり、
前記ストリームエンジンの各パイプラインステージは、１つの前記ステップ命令に従ってそれぞれ１つの処理を実行する、
ことを特徴とする付記２乃至付記７のいずれか１項に記載の演算処理装置。
【０１３１】
（付記９）
前記ストリーム処理に使用するパラメータ情報は、単一かつ長ビット長のセット命令で表現される、
ことを特徴とする付記８に記載の演算処理装置。
【０１３２】
（付記１０）
前記ストリーム処理に使用するパラメータ情報は、各ストリームの先頭アドレス，ストリーム長および演算モードを含む、
ことを特徴とする付記９に記載の演算処理装置。
【０１３３】
（付記１１）
さらに、
前記ストリーム処理に使用するパラメータ情報を一括してセットするパラメータレジスタを含み、
前記ストリームエンジンの各パイプラインステージは、前記パラメータレジスタからパラメータ情報を参照してパイプライン実行する、
ことを特徴とする付記８に記載の演算処理装置。
【０１３４】
（付記１２）
前記命令発行部が前記ストリームエンジンに発行する命令は、ステップ命令を分解して、前記ストリームエンジンの各パイプラインステージの操作を制御する短ビット長のマイクロ命令であり、
前記各パイプラインステージは、それぞれ対応する前記マイクロ命令に従って独立して処理を実行する、
ことを特徴とする付記２乃至付記７のいずれか１項に記載の演算処理装置。
【０１３５】
（付記１３）
さらに、
前記メモリと前記読出回路の間に設けられた第１ＦＩＦＯバッファを有し、
前記メモリはＤＭＡ制御され、前記メモリからデータを読み出す読出回路の処理を制御する第１マイクロ命令を停止することで、前記第１ＦＩＦＯバッファを満状態として、前記ストリームエンジンのパイプライン処理を停止する、
ことを特徴とする付記１２に記載の演算処理装置。
【０１３６】
（付記１４）
さらに、
前記書込回路と前記メモリの間に設けられた第２ＦＩＦＯバッファを有し、
前記メモリはＤＭＡ制御され、前記メモリへデータを書き込む書込回路の処理を制御する第２マイクロ命令を停止することで、前記第２ＦＩＦＯバッファを空状態として、前記ストリームエンジンのパイプライン処理を停止する、
ことを特徴とする付記１２に記載の演算処理装置。
【０１３７】
（付記１５）
前記演算器がＶＬＩＷ命令により制御されるとき、
前記ストリームエンジンの各パイプラインステージの操作を制御するマイクロ命令をＶＬＩＷ命令に埋め込む、
ことを特徴とする付記１２乃至付記１４のいずれか１項に記載の演算処理装置。
【符号の説明】
【０１３８】
１    プロセッサ
２，２００    ストリームエンジン
４，４００    データメモリ
５，８    ＤＭＡ
７，６１，６２    ＦＩＦＯバッファ
１０，１１０，３１０    レジスタ
１１，１０１，３０１    命令読出部
１２，１０２，３０２    命令解釈部
１３，１０３，３０３    レジスタ読出部
１４，１０４，３０４    命令発行部
１５，１０５    演算器
１６，１０６    メモリアクセス部
１７，１０７    レジスタ書込部
１８，１０８    命令メモリ
１９，１０９    データメモリ
２１    ＰＯＰ部
２３    ＥＸＥＣ部
２４，２２１，２２２，２２１ａ，２２１ｂ，２２２ａ，２２２ｂ，２４１〜２４３    レジスタ
２５    ＰＵＳＨ部
４１〜４３    メモリ部
１００    ベースプロセッサ
１４０    パラメータレジスタ
２１０    読出回路
２３０    実行回路
２５０    書込回路
３００    コプロセッサ
【図１】
2014215624.tif 000003
【図２】
2014215624.tif 000004
【図３】
2014215624.tif 000005
【図４】
2014215624.tif 000006
【図５】
2014215624.tif 000007
【図６】
2014215624.tif 000008
【図７】
2014215624.tif 000009
【図８】
2014215624.tif 000010
【図９】
2014215624.tif 000011
【図１０】
2014215624.tif 000012
【図１１】
2014215624.tif 000013
【図１２】
2014215624.tif 000014
【図１３】
2014215624.tif 000015
【図１４】
2014215624.tif 000016
【図１５】
2014215624.tif 000017
【図１６】
2014215624.tif 000018
【図１７】
2014215624.tif 000019
【図１８】
2014215624.tif 000020
【図１９】
2014215624.tif 000021
【図２０】
2014215624.tif 000022
【図２１】
2014215624.tif 000023