(57)【特許請求の範囲】
【請求項１】
ストリーム型処理を行う演算処理装置であって、
入力オペランドのストリーム長が出力オペランドのストリーム長に比して短い場合に入力される命令であって、前記入力オペランドを読み出す際の繰り返し規則を規定するデータを含む命令が入力されると、該命令に含まれる繰り返し規則に従ってメモリから前記入力オペランドを読み出して演算部に供給すると共に、該演算部による演算結果を前記出力オペランドとして前記メモリに書き込むデータ入出力部と、
前記データ入出力部が読み出した入力オペランドに対して演算を行って、演算結果を前記データ入出力部に出力する前記演算部と、
を備える演算処理装置。
【請求項２】
前記繰り返し規則は、前記入力オペランドの読み出しを、前記入力オペランドの先頭から前記ストリーム長に等しい回数行うと、前記入力オペランドの先頭に戻り読み出しを行うことを繰り返す規則を含む、
請求項１記載の演算処理装置。
【請求項３】
前記繰り返し規則は、前記入力オペランドの一データを除算の分母に等しい回数繰り返し読み出すと、次の入力オペランドの一データに移行する規則を含む、
請求項１又は２記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリーム型処理を行う演算処理装置に関する。
【背景技術】
【０００２】
無線通信ベースバンド処理などで、大量の行列演算処理が必要となる場合がある。このような同一の行列処理を大量のデータに施す際には、メモリから一連のデータを連続して読み出して演算を行い、一連の演算結果をメモリにおける連続したアドレスに書き込むストリーム型処理を行う演算処理装置が、好適に用いられる。
【０００３】
ストリーム型処理を行う演算処理装置では、入力される命令に、演算種別、入力オペランド（ソース）の格納アドレス、出力オペランドの格納先（デスティネーション）の他、処理する単位データの数（ストリーム長又はベクトル長）が含まれる。そして、ストリーム型処理を行う演算処理装置は、ストリーム長が規定する長さに相応する処理を連続して行う。従来、この種の演算処理を行うベクトルユニットが知られている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】J.L.Hennessy，D.A.Patterson，”Computer  Architecture:  A  Quantitative  Approach:  Appendix  G  Vector  Processors,  3rd  Edition,”  2002
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のストリーム型処理を行う演算処理装置においては、入力オペランドと出力オペランドのストリーム長が同一であることが前提とされていた。このため、従来の演算処理装置は、例えば入力オペランドの一方を繰り返し用いて演算を行いたい場合、一命令で実行することができず、複数命令に分割しないと処理できなかった。しかしながら、例えば行列演算を行う場合等、演算処理装置内部のデータパスの規模が大きい場合、命令の切り替わる際のデータパスの切替に時間がかかり、演算性能が大幅に低下してしまうという問題があった。
【０００６】
一つの側面では、本発明は、ストリーム型処理を行う演算処理装置において、ストリーム長が一致しない場合の繰り返し処理を一命令で実行することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様は、ストリーム型処理を行う演算処理装置であって、入力オペランドのストリーム長が出力オペランドのストリーム長に比して短い場合に入力される命令であって、前記入力オペランドを読み出す際の繰り返し規則を規定するデータを含む命令が入力されると、該命令に含まれる繰り返し規則に従ってメモリから前記入力オペランドを読み出して演算部に供給すると共に、該演算部による演算結果を前記出力オペランドとして前記メモリに書き込むデータ入出力部と、前記データ入出力部が読み出した入力オペランドに対して演算を行って、演算結果を前記データ入出力部に出力する前記演算部と、を備える演算処理装置である。
【発明の効果】
【０００８】
一実施態様によれば、ストリーム型処理を行う演算処理装置において、ストリーム長が一致しない場合の繰り返し処理を一命令で実行することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の第１実施例に係る演算処理装置１が、携帯電話のベースバンド処理ＬＳＩ１００に適用された適用例である。
【図２】本発明の一実施例に係る演算処理装置１のハードウェア構成例である。
【図３】演算データパス２０が行列演算を行う場合の演算データパス２０のハードウェア構成例である。
【図４】ＤＭＡ１０の内部構成を示す図である。
【図５】本実施例の演算処理装置１により実行される基本的なストリーム型処理を説明するための図である。
【図６】ラップアラウンド時に、本実施例の演算処理装置１により実行される処理を説明するための図である。
【図７】wm_src0＝1（剰余モード）である場合に、本実施例の演算処理装置１により実行される処理を説明するための図である。
【図８】wm_src0＝2（商モード）である場合に、本実施例の演算処理装置１により実行される処理を説明するための図である。
【図９】wm_src0＝2（商モード）且つwm_src1＝1（剰余モード）である場合に、本実施例の演算処理装置１により実行される処理を説明するための図である。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００１１】
以下、図面を参照し、本発明の一実施例に係る演算処理装置１について説明する。
【００１２】
［適用例］
図１は、本発明の第１実施例に係る演算処理装置１が、携帯電話のベースバンド処理ＬＳＩ（Large  Scale  Integrated  circuit）１００に適用された適用例である。ベースバンド処理ＬＳＩ１００は、ＲＦ部１１０と、専用ハードウェア１２０と、ＤＳＰ（Digital  Signal  Processor）１３０＃１〜１３０＃３とを備える。
【００１３】
ＲＦ部１１０は、アンテナ１５０を介して受信された無線信号の周波数をダウンコンバートし、デジタル信号に変換してバス１４０に出力する。また、ＲＦ部１０は、バス１５０に出力されたデジタル信号をアナログ信号に変換し、無線周波数にアップコンバートして、アンテナ１５０に出力する。
【００１４】
専用ハードウェア１２０は、例えば誤り訂正符号を扱うturbo、ビタビアルゴリズムを実行するviterbi、複数のアンテナでデータの送受信を行なうためのMIMO（Multi  Input  Multi  Output）等を含む。
【００１５】
以下、いずれのＤＳＰであるかを区別せず、ＤＳＰ１３０と称する。ＤＳＰ１３０は、プロセッサ１３１と、プログラムメモリ１３２と、周辺回路１３３と、データメモリ１３４とを備える。プロセッサ１３１は、ＣＰＵ１３５と、本実施例の行列演算装置１とを有する。各ＤＳＰ１３０にはSearcher（同期）、Demodulator（復調）、Decoder（復号）、Codec（符号化）、Modulator（変調）等、無線通信信号処理の各要素処理が割り当てられる。
【００１６】
［演算処理装置］
図２は、本発明の一実施例に係る演算処理装置１のハードウェア構成例である。演算処理装置１は、ＤＭＡ（Direct  Memory  Access）１０と、演算データパス２０と、演算回数ループ制御回路３０と、を備える。
【００１７】
ＤＭＡ１０は、データメモリ１３４からソース（入力オペランド）を読み出すと共に、演算データパス２０がソースに対して行った演算結果を出力オペランドとしてメモリ１００の格納先（デスティネーション）に書き込む。
【００１８】
ＤＭＡ１０に与えられる命令は、例えばＣＰＵ１３５により発行される。ＣＰＵ１３５が発行する命令は、例えば、命令種別を示すopecode、ソースの一方であるソース（０）を指定するためのsrc0、ソースの他方であるソース（１）を指定するためのsrc1、デスティネーションを指定するためのdst、及びwrap  around  modeを含む。wrap  around  modeは、後述するラップアラウンド動作を行うか否か、及びラップアラウンド動作のモードを指定するものであり、例えばソース（０）、ソース（１）、デスティネーション毎に設定される。wrap  around  modeは、例えば、ソース（０）に関しては、wm_src0＝０（ラップアラウンド無し）、wm_src0＝１（剰余モード）、又はwm_src0＝２（商モード）の三種類で指定される。wrap  around  modeは、ソース（１）、デスティネーションに関しても同様に、三種類で指定される。なお、「ラップアラウンド無し」である場合、ソース（０）、ソース（１）、デスティネーションのストリーム長は一致するため、剰余モードとして扱っても結果は同じである。従って、wrap  around  modeは、wm_src0＝１（剰余モード）、又はwm_src0＝２（商モード）の二種類で指定されても構わない。
【００１９】
ＣＰＵ１３５が発行する命令のうち、命令種別を示すopecodeは、演算データパス２０に入力される。演算データパス２０は、図示しない制御回路によって内部の結線を切り替えることにより、種々の演算を行うことができる。図３は、演算データパス２０が行列演算を行う場合の演算データパス２０のハードウェア構成例である。演算データパス２０は、例えば、８個２×２行列乗算モジュール２０Ａと、８個の２×２行列加算モジュール２０Ｂとを有し、モジュール４個に対して１個のマルチプレクサ２０Ｃが取り付けられている。演算データパス２０は、モジュール間の結線を切り替えることで、４×４行列乗算、２×２行列乗算の４並列（ＳＩＭＤ）、２×２逆行列演算の４並列（ＳＩＭＤ）等を行うことができる。
【００２０】
ＣＰＵ１３５が発行する命令のうち、ソース（０）を指定するためのsrc0、ソース（１）を指定するためのsrc1、デスティネーションを指定するためのdstは、アドレスレジスタファイル５０に入力される。ソース（０）とソース（１）は、例えば演算対象となる二つのソースデータであり、三つ目以上のソースが指定されても構わない。
【００２１】
アドレスレジスタファイル５０には、src0、src1、dstによって選択されるデータ列が複数格納されている。各データ列には、データメモリ１３４におけるソースが格納されたアドレスとストリーム長のセット、或いはデスティネーションアドレスとストリーム長のセットが格納されている。アドレスレジスタファイル５０は、src0又はsrc1が入力されると、データメモリ１３４におけるソースが格納されたアドレスと、当該アドレスに格納されたソースのストリーム長をＤＭＡ１０に出力する。また、アドレスレジスタファイル５０は、dstが入力されると、データメモリ１３４におけるデスティネーションアドレスと、当該アドレスに格納されるべきデータのストリーム長をＤＭＡ１０に出力する。更に、アドレスレジスタファイル５０は、dstが入力されると、データメモリ１３４におけるデスティネーションアドレスに格納されるべきデータのストリーム長を演算回数ループ制御回路３０に出力する。
【００２２】
図４は、ＤＭＡ１０の内部構成をしめす図である。図中、addr_src0はソース（０）が格納されたアドレスを示し、addr_src1はソース（１）が格納されたアドレスを示し、addr_dstはデスティネーションアドレスを示す。また、length_src0はソース（０）のストリーム長を示し、length_src1はソース（１）のストリーム長を示し、length_dstはデスティネーションのストリーム長を示す。また、wm_src0はソース（０）に関するwrap  around  modeを示し、wm_src1はソース（０）に関するwrap  around  modeを示し、wm_dstはデスティネーションに関するwrap  around  modeを示す。
【００２３】
ＤＭＡ１０は、例えば、ソース（０）を読み出すロード部１２と、ソース（１）を読み出すロード部１４と、デスティネーションにデータを書き込むストア部１６と、サイクルカウンタ１８とを備える。サイクルカウンタ１８は、例えば１回のストリーム型処理が行われる間、１サイクル毎に、０〜Ｎ（Ｎ＝“length_dst”−１）まで１ずつインクリメントされる値ｉをロード部１２、１４、ストア部１６に出力する。
【００２４】
ロード部１２は、アドレス生成回路１２Ａと、データバッファ１２Ｂとを備える。アドレス生成回路１２Ａには、addr_src0、length_src0、wm_src0が入力される。アドレス生成回路１２Ａは、wm_src0＝０（ラップアラウンド無し）である場合には、データメモリ１３４のaddr_src0が指定するアドレスから、１サイクル毎に単位データを１つずつ読み出してデータバッファ１２Ｂに格納する。単位データとは、演算データパス２０が演算対象とする形式のデータであり、例えば行列、単なる数値等が指定される。wm_src0＝１（剰余モード）、又はwm_src0＝２（商モード）である場合については後述する。データバッファ１２Ｂに格納されたデータは、必要に応じて演算データパス２０に出力され、演算対象とされる。
【００２５】
同様に、ロード部１４は、アドレス生成回路１４Ａと、データバッファ１４Ｂとを備える。アドレス生成回路１４Ａには、addr_src1、length_src1、wm_src1が入力される。アドレス生成回路１４Ａは、wm_src1＝０（ラップアラウンド無し）である場合には、データメモリ１３４のaddr_src1が指定するアドレスから、１サイクル毎に単位データを１つずつ読み出してデータバッファ１４Ｂに格納する。wm_src1＝１（剰余モード）、又はwm_src1＝２（商モード）である場合については後述する。データバッファ１４Ｂに格納されたデータは、必要に応じて演算データパス２０に出力され、演算対象とされる。
【００２６】
ストア部１６は、アドレス生成回路１６Ａと、データバッファ１６Ｂとを備える。アドレス生成回路１６Ａには、addr_dst、length_dst、wm_dstが入力される。アドレス生成回路１６Ａは、wm_dst＝０（ラップアラウンド無し）である場合には、データメモリ１３４のaddr_dstが指定するアドレスに、１サイクル毎に、データバッファ１６Ｂに格納された単位データを１つずつ書き込むwm_dst＝１（剰余モード）、又はwm_dst＝２（商モード）である場合については後述する。データバッファ１６Ｂには、演算データパス２０が行った演算の結果が格納される。
【００２７】
ここで、本実施例の演算処理装置１により実行されるストリーム型処理について説明する。演算処理装置１に与えられる命令は、opecode＝mul（乗算）、addr_src0＝a、length_src0＝100、wm_src0＝0、addr_src1＝b、length_src1＝100、wm_src1＝0、addr_dst＝c、length_dst＝100、wm_dst＝0であるものとする。この場合、wm_src0＝wm_src1＝wm_dst＝0であるため、演算処理装置１は、ソース（０）、ソース（１）、デスティネーションのいずれに対してもラップアラウンド動作は行わない。
【００２８】
［ストリーム型処理（基本）］
図５は、本実施例の演算処理装置１により実行される基本的なストリーム型処理を説明するための図である。
【００２９】
ロード部１２は、addr_src0が指定するデータメモリ１３４のアドレスaから、１サイクル毎に１つの単位データを１００個（図中、a0〜a99）を読み出してデータバッファ１２Ｂに格納する。また、ロード部１４は、addr_src0が指定するデータメモリ１３４のアドレスbから、１サイクル毎に１つの単位データを１００個（図中、b0〜b99）を読み出してデータバッファ１４Ｂに格納する。
【００３０】
これに対し、演算データパス２０は、１サイクル毎に、データバッファ１２Ｂに格納された単位データと、データバッファ１４Ｂに格納された単位データから１つずつデータを取り出し、乗算を行って、演算結果をデータバッファ１６Ｂに格納する。演算データパス２０が演算を行う回数は、演算回数ループ制御回路３０によって制御される。演算回数ループ制御回路３０は、例えばサイクルカウンタやシーケンサを含む。図中、c0〜c99は、１サイクル毎にデータバッファ１６Ｂに格納される単位データである。
【００３１】
このように、本実施例の演算処理装置１は、一命令でストリーム長分の演算を行い、データメモリ１３４に格納することができる。係る処理を、ストリーム型処理と称する。
【００３２】
［ラップアラウンド動作］
以下、本実施例の演算処理装置１により実行されるラップアラウンド時の処理について説明する。図６は、ラップアラウンド時に、本実施例の演算処理装置１により実行される処理を説明するための図である。本図では、演算処理装置１に与えられる命令が、opecode＝mul、addr_src0＝a、length_src0＝1000、addr_src1＝b、length_src1＝20、addr_dst＝c、length_dst＝1000であるものとする（wmは省略）。この場合、演算処理装置１は、length_src1＝20、すなわちソース（１）のストリーム長が２０であり、デスティネーションのストリーム長１０００よりも短いため、ソース（１）に関してはwm_src1が規定する繰り返し規則に従って繰り返し読み出しを行う。
【００３３】
［剰余モード］
図７は、wm_src0＝1（剰余モード）である場合に、本実施例の演算処理装置１により実行される処理を説明するための図である。本図では、演算処理装置１に与えられる命令が、opecode＝mul、addr_src0＝a、length_src0＝5、wm_src0=1、addr_src1＝b、length_src1＝100、wm_src1=0、addr_dst＝c、length_dst＝100、wm_dst=0であるものとする。
【００３４】
剰余モードでは、wm_src0=1が指定されたロード部１２Ａは、ストリーム長分のa0〜a4までデータメモリ１３４からの読み出しが終了すると、再度a0から単位データを読み出すことを、繰り返し実行する。具体的には、ロード部１２Ａは、addr_src0が示すアドレスaに格納された単位データのうち、サイクルカウンタ１８から入力される値ｉをlength_src0＝5で除算した剰余数番目の単位データを読み出してデータバッファ１２Ｂに格納する。この場合、演算処理装置１により実行される演算は、次式（１）で表現される。式中、「％」は剰余を示している。
【００３５】
c［i］＝a［i％length_src0］×b［i］  …（１）
【００３６】
［商モード］
図８は、wm_src0＝2（商モード）である場合に、本実施例の演算処理装置１により実行される処理を説明するための図である。本図では、演算処理装置１に与えられる命令が、opecode＝mul、addr_src0＝a、length_src0＝5、wm_src0=2、addr_src1＝b、length_src1＝100、wm_src1=0、addr_dst＝c、length_dst＝100、wm_dst=0であるものとする。なお、商モードにおいて、ラップアラウンド動作を行うソース又はデスティネーションに関するストリーム長（length_**）は、文言上のストリーム長ではなく、除算の分母を意味する。
【００３７】
商モードでは、wm_src0=2が指定されたロード部１２Ａは、まず、先頭の単位データa0をストリーム長と等しい回数読み出し、次に単位データa1をストリーム長と等しい回数読み出す等、ストリーム長と等しい回数読み出す毎に次の単位データに移行する。具体的には、ロード部１２Ａは、addr_src0が示すアドレスaに格納された単位データのうち、サイクルカウンタ１８から入力される値ｉをlength_src0＝5で除算した商（剰余は切り捨て）番目の単位データを読み出してデータバッファ１２Ｂに格納する。この場合、演算処理装置１により実行される演算は、次式（２）で表現される。式中、「／」は整数除算を示している。
【００３８】
c［i］＝a［i／length_src0］×b［i］  …（２）
【００３９】
［組み合わせ例］
剰余モードと商モードは、組み合わせて設定することもできる。図９は、wm_src0＝2（商モード）且つwm_src1＝1（剰余モード）である場合に、本実施例の演算処理装置１により実行される処理を説明するための図である。図示するように、ソース０に関しては、a0がストリーム長に等しい４回読み出されると、a1に移行し、４回の読み出し毎にロード部１２Ａの読み出す単位データが切り替わる。一方、ソース１に関しては、ロード部１４Ａは、ストリーム長分のb0〜b4までデータメモリ１３４からの読み出しが終了すると、再度b0から単位データを読み出すことを、繰り返し実行する。
【００４０】
なお、ラップアラウンド動作は、デスティネーションに対しても行うことができる。この場合、例えばlength_src0＝100、length_src1＝100、length_dst＝50、wm_dst=0であるとすると、１００回の演算結果のうち前半の５０個がデスティネーションに格納されると、後半の５０個はデスティネーションに上書きされる。
［まとめ］
本実施例の演算処理装置１は、wm＝1又は2を含む命令が入力されると、これが規定する繰り返し規則に従ってデータメモリ１３４からソースを読み出して演算するため、ストリーム長が一致しない場合の繰り返し処理を一命令で実行することができる。
【００４１】
この結果、演算処理装置１は、繰り返し処理を複数命令で実行するものと比較して、処理オーバヘッドを削減することができ、処理を高速化することができる。
【００４２】
また、メモリ上の配列（ストリーム）データを処理する場合、通常のスカラプロセッサでは、ソフトウエアプログラムで先頭アドレスからそのストリーム長のデータをアクセスするため、バッファオーバランが生じる場合がある。バッファオーバランは、発見するのが困難なソフトウェアバグとなる可能性があるが、演算処理装置１は、ＤＭＡ１０等のハードウェアが、先頭アドレスとストリーム長をセットにして扱うため、バグが発生することを抑制することができる。
【００４３】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００４４】
例えば、演算処理装置１に与えられる命令の一部は、アドレスレジスタファイル５０を介して与えられるものとしたが、ＣＰＵ１３５が直接、データメモリ１３４のアドレスやストリーム長を指定してもよい。
【００４５】
以上の説明に関し、さらに以下の項を開示する。
（付記１）
ストリーム型処理を行う演算処理装置であって、
入力オペランドのストリーム長が出力オペランドのストリーム長に比して短い場合に入力される命令であって、前記入力オペランドを読み出す際の繰り返し規則を規定するデータを含む命令が入力されると、該命令に含まれる繰り返し規則に従ってメモリから前記入力オペランドを読み出して演算部に供給すると共に、該演算部による演算結果を前記出力オペランドとして前記メモリに書き込むデータ入出力部と、
前記データ入出力部が読み出した入力オペランドに対して演算を行って、演算結果を前記データ入出力部に出力する前記演算部と、
を備える演算処理装置。
（付記２）
前記繰り返し規則は、前記入力オペランドの読み出しを、前記入力オペランドの先頭から前記ストリーム長に等しい回数行うと、前記入力オペランドの先頭に戻り読み出しを行うことを繰り返す規則を含む、
付記１記載の演算処理装置。
（付記３）
前記繰り返し規則は、前記入力オペランドの一データを前記ストリーム長に等しい回数繰り返し読み出すと、次の入力オペランドの一データに移行する規則を含む、
付記１又は２記載の演算処理装置。
（付記４）
ストリーム型処理を行う演算処理装置であって、
出力オペランドのストリーム長が入力オペランドのストリーム長に比して短い場合に入力される命令であって、前記出力オペランドをメモリに書き込む際の繰り返し規則を規定するデータを含む命令が入力されると、前記メモリから前記入力オペランドを読み出して演算部に供給すると共に、前記命令に含まれる繰り返し規則に従って、前記演算部による演算結果を前記出力オペランドとして前記メモリに書き込むデータ入出力部と、
前記データ入出力部が読み出した入力オペランドに対して演算を行って、演算結果を前記データ入出力部に出力する前記演算部と、
を備える演算処理装置。
【符号の説明】
【００４６】
１      演算処理装置
１０    ＤＭＡ
１２、１４  ロード部
１２Ａ、１４Ａ、１６Ａ  アドレス生成回路
１２Ｂ、１４Ｂ、１６Ｂ  データバッファ
１６    ストア部
１８    サイクルカウンタ
２０    演算データパス
３０    演算回数ループ制御回路
１３４  データメモリ
１３５  ＣＰＵ
【図１】
0005862397.tif 000002
【図２】
0005862397.tif 000003
【図３】
0005862397.tif 000004
【図４】
0005862397.tif 000005
【図５】
0005862397.tif 000006
【図６】
0005862397.tif 000007
【図７】
0005862397.tif 000008
【図８】
0005862397.tif 000009
【図９】
0005862397.tif 000010