(57)【要約】  所定の順番に並んだ複数の入力データの中から演算に使用される入力データの組及びそれらの入力順を自由に選択することができ、かつ、入力データの組ごとに演算方法を自由に指定可能な演算ユニット及びこれを用いたプロセッサ、並びに並列演算方法を提供する。所定順序で入力されるＫ個の入力データに対してＬ個の演算器を用いて並列に演算処理を行う演算ユニットであり、演算器はＭ個の入力データに対して演算を行うように構成されており、複数の入力データのうち、演算対象情報により演算器ごとに指定された任意の位置にある入力データを演算対象として、演算器ごとに演算対象情報により指定された順番で選択するデータ選択器４４と、演算器を含み、データ選択器４４により選択されたデータに対して、演算方法情報により指定されたＬ個の演算を、各演算器において並列に実行する並列演算器４２とを有する（Ｋ、Ｌ、Ｍは１以上の整数）。
2010067522.tif 000002
【特許請求の範囲】
【請求項１】
所定の順序にて入力されるＫ個の入力データ（Ｋは１以上の整数）に対して、並列に演算処理を行うＬ個の演算器（Ｌは１以上の整数）を備え、
前記演算器はＭ個（Ｍは１以上の整数）の入力データに対して演算を行うように構成され、
演算対象情報は、前記演算器のそれぞれへ入力する前記Ｋ個のうち前記Ｍ個の入力データの組み合わせ及びそれらの入力順を表す情報であり、
演算方法情報は、前記演算器のそれぞれの演算の種類を表す情報であり、
前記複数の入力データのうち、前記演算対象情報により前記演算器ごとに指定された任意の位置にある入力データを、演算の対象として、前記演算器ごとに前記演算対象情報によって指定された順番で選択するデータ選択手段と、
前記演算器を含み、前記データ選択手段によって選択されたデータに対して、前記演算方法情報により指定されたＬ個の演算を、前記各演算器において並列に実行する並列演算手段と、を有することを特徴とする演算ユニット。
【請求項２】
前記演算対象情報は、前記Ｋ個の入力データのうちいずれか二つを指す情報の組（Ｍ＝２）であり、
前記並列演算手段中の各演算器は、二つのデータを入力とし、
前記データ選択手段は、前記演算器ごとに二つずつデータを選択して出力することを特徴とする請求項１記載の演算ユニット。
【請求項３】
請求項１又は２記載の演算ユニットと、
並列演算の対象である入力データを含むストレージユニットと、
前記ストレージユニットから入力データを読み込み、演算を行い、出力データを前記ストレージユニットに書き込むように前記演算ユニットを制御するプロセッサ制御ユニットと、を有し、
前記演算方法情報及び前記演算対象情報が、
複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタに格納されることを特徴とするプロセッサ。
【請求項４】
前記演算対象情報及び前記演算方法情報は命令ごとに定められており、
前記プロセッサ制御ユニットから前記演算ユニットに与えられることを特徴とする請求項３記載のプロセッサ。
【請求項５】
前記演算方法情報及び前記演算対象情報が、
前記プロセッサが入力とするプログラム中の命令語に格納されることを特徴とする請求項３又は４記載のプロセッサ。
【請求項６】
前記演算方法情報及び前記演算対象情報が、
専用のレジスタファイル中のレジスタに格納されることを特徴とする請求項３又は４記載のプロセッサ。
【請求項７】
前記演算方法情報及び前記演算対象情報が、
前記プロセッサに接続されたメモリ中の専用の演算情報領域に格納されることを特徴とする請求項３又は４記載のプロセッサ。
【請求項８】
前記演算方法情報と前記演算対象情報とが、
複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタか、前記プロセッサが入力とするプログラム中の命令語か、専用のレジスタファイル中のレジスタか、前記プロセッサに接続されたメモリ中の専用の演算情報領域か、のいずれかの場所のうちそれぞれ異なる場所に格納されたことを特徴とする請求項３又は４記載のプロセッサ。
【請求項９】
所定の順序にて入力されるＫ個の入力データの（Ｋは１以上の整数）うち、Ｍ個（Ｍは１以上の整数）の入力データの組み合わせ及びそれらの入力順を表す演算対象情報によって、それぞれが前記Ｍ個の入力データに対して演算を行うように構成されたＬ個（Ｌは１以上の整数）の演算器ごとに指定された任意の位置にある入力データを、前記演算器のそれぞれでの演算の対象とするＭ個の入力データとして、前記演算器ごとに前記演算対象情報によって指定された順番で選択し、
選択されたデータに対して、前記演算器のそれぞれの演算の種類を表す前記演算方法情報によって指定されたＬ個の演算を、前記各演算器において並列に実行することを特徴とする並列演算方法。
【請求項１０】
前記演算対象情報は、前記Ｋ個の入力データのうちいずれか二つを指す情報の組（Ｍ＝２）であり、
前記各演算器は、二つのデータを入力とすることを特徴とする請求項９記載の並列演算方法。
【請求項１１】
請求項９又は１０記載の並列演算方法を実行する演算ユニットと、
並列演算の対象である入力データを含むストレージユニットと、
前記ストレージユニットから入力データを読み込み、演算を行い、出力データを前記ストレージユニットに書き込むように前記演算ユニットを制御するプロセッサ制御ユニットと、を有するプロセッサを用いた並列演算方法であって、
前記演算方法情報及び前記演算対象情報を、複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタに格納することを特徴とする並列演算方法。
【請求項１２】
前記演算対象情報及び前記演算方法情報を命令ごとに定め、
前記プロセッサ制御ユニットから前記演算ユニットに与えることを特徴とする請求項１１記載の並列演算方法。
【請求項１３】
前記演算方法情報及び前記演算対象情報を、前記プロセッサが入力とするプログラム中の命令語に格納することを特徴とする請求項１１又は１２記載の並列演算方法。
【請求項１４】
前記演算方法情報及び前記演算対象情報を、
専用のレジスタファイル中のレジスタに格納することを特徴とする請求項１１又は１２記載の並列演算方法。
【請求項１５】
前記演算方法情報及び前記演算対象情報を、
前記プロセッサに接続されたメモリ中の専用の演算情報領域に格納することを特徴とする請求項１１又は１２記載の並列演算方法。
【請求項１６】
前記演算方法情報と前記演算対象情報とを、
複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタか、前記プロセッサが入力とするプログラム中の命令語か、専用のレジスタファイル中のレジスタか、前記プロセッサに接続されたメモリ中の専用の演算情報領域か、のいずれかの場所のうちそれぞれ異なる場所に格納することを特徴とする請求項１１又は１２記載の並列演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算ユニットに関し、特に複数の入力データを使用して複数の演算を実行し、複数のデータを出力する演算ユニット及びその演算ユニットを含むプロセッサに関する。
【背景技術】
【０００２】
ＳＩＭＤ（Single Instruction Multiple Data）命令とは複数の入力データに対して同一の演算を並列に実行する命令である。一般的に、演算に使用される複数の入力データは一つのレジスタに格納される。以降では、レジスタに格納する複数の入力データの一つ一つをサブワードと呼ぶことにする。一つのレジスタに格納されるサブワードの一般的な数は２のべき乗個である。代表的なＳＩＭＤ命令として、レジスタに格納された四つのサブワードを使った加算演算を実行するＳＩＭＤ命令が考えられる。ＳＩＭＤ命令は画像処理のようなたくさんのデータを並列に処理できるような性質を持つアプリケーションに適している。【０００３】
ＳＩＭＤ命令を使うときの課題は、処理対象のサブワードを並び替えることである。すなわち、一つのＳＩＭＤ命令で処理できるように入力データ中のサブワードを並び替える必要がある。また、プログラム中に異種の演算が混在する場合には、それぞれの演算種ごとに別のＳＩＭＤ命令で実行するために、出力データを並び替える必要がある。すなわち、複数の命令から出力されたデータを、次の演算に利用したりメモリに格納したりするために、再び一つのレジスタにまとめる並び替え処理が必要となる。【０００４】
並び替え処理が必要となる例として、二つのレジスタ中の同じ位置のサブワード同士を加算する命令や減算する命令など単純なＳＩＭＤ演算命令のみを使用して実装した複素ＦＦＴ（Fast Fourier Transform）処理プログラムについて説明する。複素ＦＦＴ処理プログラムにおいては、実数部と虚数部との間で加算及び減算を行う必要があるが、実数部と虚数部とは通常異なる位置のサブワードに格納されている（異なるサブワードとして格納されている）ため、レジスタ内でサブワードを並び替える処理が必要となる。また、加算命令と減算命令とに分けて処理した出力を一つのレジスタにまとめるためにもサブワードの並び替えが必要となる。【０００５】
ＳＩＭＤ命令利用における課題について、さまざまな方法で解決が試みられている。非特許文献１には、加算と減算とを一つの命令で行うＳＩＭＤ命令や、異なる位置のサブワード間で演算を行うＳＩＭＤ命令が示されている。加算と減算とを一つの命令で行うことにより、加算と減算との２種類の出力データを一つのレジスタにまとめる並び替え処理が不要となることがある。また、異なる位置のサブワード間で演算することにより、入力データを並び替える処理が不要となることがある。【０００６】
特許文献１には、ソフトウェアで定義される情報に従って並び替えを柔軟に行える命令が示されている。この命令により、並び替え処理に要する実行サイクル数を削減できる。特許文献２には、並び替えと演算とを同時に行うことで、さらに実行サイクル数を減らす方法が示されている。また、特許文献３には、異種の演算を同時に行うプロセッサが示されている。特許文献４には、命令語中の情報により演算対象及び演算の種類を指定できるプロセッサが示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第５９９６０５７号明細書
【特許文献２】特開２００８−１０８２２０号公報
【特許文献３】特開２００８−４７０３１号公報
【特許文献４】米国特許出願公開第２００８／００７２０１０号明細書
【特許文献５】特開平０５−８１３４３号公報
【非特許文献】
【０００８】
【非特許文献１】インテル社：「IA-32 インテルR アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 上巻：基本アーキテクチャ」
【発明の概要】
【発明が解決しようとする課題】
【０００９】
非特許文献１中１２章５頁に示されるＡＤＤＳＵＢＰＳ命令は、加算と減算とを同時に行う。また、非特許文献１中１２章６頁に示されるＨＡＤＤＰＳ命令は、隣接したサブワード同士の加算を行う。サブワードの並び順や演算の種類に応じてＡＤＤＳＵＢＰＳ命令のようなＳＩＭＤ命令を何種類も定義すれば、命令の数が多くなってしまう。また、あらゆるプログラムで必要となるサブワードの並び順を予めすべて検討した上でＳＩＭＤ命令を定義することも現実的ではない。【００１０】
特許文献１に示される並び替え命令は、デスティネーション・オペランドで指定された一つのレジスタ中のそれぞれのサブワードに対して、ソース・オペランドに指定された二つのレジスタ中から任意のサブワードを選択して格納できる。このときのサブワードの選択方法は、ソース・オペランドに指定されたレジスタ中の情報により指定される。これにより、サブワードの並び替えに要する実行サイクル数を減らすことができる。【００１１】
特許文献２には、演算器の直前に並び替え回路を配置する演算装置が示されている。並び替えを演算と同じ命令で実行することができるため、サブワードの並び替えに要する実行サイクル数をさらに減らすことができる。ここで、並び替えは命令語中又は汎用レジスタ中に格納された並び替えの情報に基づいて行われる。ただし、特許文献２による方法では、一つのレジスタ中での並び替えしかできない。また、すべての演算器で同じ演算を行うため、プログラム中に異種の演算が混在する場合には、演算の種類ごとに命令を複数回実行し、演算結果をまとめる処理が必要となる。【００１２】
特許文献３に示されたマトリクス型超並列ＳＩＭＤプロセッサは、演算器ごとに対応するメモリ中の領域に演算内容を格納しておき、これに従って演算を行う。しかし、特許文献３の方法は一般的なＳＩＭＤプロセッサとは大きく異なる非常に小さい演算器を持ったプロセッサを対象としている。このため、ソース・オペランド、デスティネーション・オペランドとして自由にデータを移動することができないなど演算対象データの移動に制限がある。また、プログラミングモデルが大幅に異なるため、プログラム作成が容易ではない。【００１３】
特許文献４に示されたプロセッサは、命令語に含まれた情報に基づいて、演算器の動作を変更し、また、演算対象を選択して処理することができる。しかし、特許文献４の方法では、一つのレジスタ中のサブワードからの演算対象の選択しかできない。また、サブワードごとに異なる演算を行えるとは明示されていない。また、演算対象や演算方法の指定情報は命令語に格納することが強調されており、汎用レジスタなどに格納することは示されていない。【００１４】
特許文献５に示されたプロセッサは、一つの命令（コマンド）によりデータの並び替えを含んだ複数の処理を指定する。また、このプロセッサはそれらの処理を並列に行うこともできる。しかしながら、特許文献５のプロセッサはデータベース処理の効率化を目的としたものであり、データベース処理の複数のコマンドを一つの複合コマンドで指定することを特徴とする。このため、本発明が対象とするＳＩＭＤプロセッサとは扱うデータの粒度及び並列度が異なり、例えば複素ＦＦＴ処理などに応用することはできない。【００１５】
上記文献のいずれの方法においても、レジスタに格納された複数のサブワードの中から演算に使用されるサブワードの組合わせ及びそれらの入力順序を自由に選択し、なおかつ、サブワードの組ごとに演算方法を自由に指定して並列に演算を実行することはできない。すなわち、所定の順番に並んだ複数の入力データの中から演算に使用される入力データの組合わせ及びそれらの入力順序を自由に選択し、なおかつ、入力データの組ごとに演算方法を自由に指定して並列に演算を実行することはできない。【００１６】
本発明は係る問題に鑑みてなされたものであり、複数の入力データを使用して複数の演算を実行し、複数のデータを出力する演算ユニットであって、所定の順番に並んだ複数の入力データの中から演算に使用される入力データの組合わせ及びそれらの入力順序を自由に選択することができ、なおかつ、入力データの組ごとに演算方法を自由に指定可能な演算ユニット及びこれを用いたプロセッサ、並びに並列演算方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記目的を達成するため、本発明は、第１の態様として、所定の順序にて入力されるＫ個の入力データ（Ｋは１以上の整数）に対してＬ個の演算器（Ｌは１以上の整数）を用いて並列に演算処理を行う演算ユニットにおいて、演算器はＭ個（Ｍは１以上の整数）の入力データに対して演算を行うように構成され、演算対象情報は、演算器のそれぞれへ入力するＫ個のうちＭ個の入力データの組み合わせ及びそれらの入力順を表す情報であり、演算方法情報は、演算器のそれぞれの演算の種類を表す情報であり、複数の入力データのうち、演算対象情報により演算器ごとに指定された任意の位置にある入力データを、演算の対象として、演算器ごとに演算対象情報によって指定された順番で選択するデータ選択手段と、演算器を含み、データ選択手段によって選択されたデータに対して、演算方法情報により指定されたＬ個の演算を、各演算器において並列に実行する並列演算手段と、を有することを特徴とする演算ユニットを提供するものである。【００１８】
また、上記目的を達成するため、本発明は、第２の態様として、上記本発明の第１の態様に係る演算ユニットと、並列演算の対象である入力データを含むストレージユニットと、ストレージユニットから入力データを読み込み、演算を行い、出力データをストレージユニットに書き込むように演算ユニットを制御するプロセッサ制御ユニットと、を有し、演算方法情報及び演算対象情報が、複数のレジスタを備えた汎用レジスタファイルとして実現されたストレージユニットの汎用レジスタファイル中のレジスタに格納されることを特徴とするプロセッサを提供するものである。【００１９】
また、上記目的を達成するため、本発明は、第３の態様として、所定の順序にて入力されるＫ個の入力データ（Ｋは１以上の整数）に対する並列演算処理を、Ｍ個（Ｍは１以上の整数）の入力データに対して演算を行うように構成された演算器をＬ個（Ｌは１以上の整数）用いて行う並列演算方法であって、Ｋ個のうちＭ個の入力データの組み合わせ及びそれらの入力順を表す演算対象情報によって演算器ごとに指定された任意の位置にある入力データを、演算器のそれぞれでの演算の対象とするＭ個の入力データとして、演算器ごとに演算対象情報によって指定された順番で選択し、選択されたデータに対して、演算器のそれぞれの演算の種類を表す演算方法情報によって指定されたＬ個の演算を、各演算器において並列に実行することを特徴とする並列演算方法を提供するものである。
【発明の効果】
【００２０】
本発明によれば、所定の順番に並んだ複数の入力データの中から演算に使用される入力データの組合わせ及びそれらの入力順序を自由に選択することができ、なおかつ、入力データの組ごとに演算方法を自由に指定可能な演算ユニット及びこれを用いたプロセッサ、並びに並列演算方法を提供できる。
【図面の簡単な説明】
【００２１】
【図１】本発明の好適な実施の形態に係る演算ユニットの構成を示す図である。
【図２】本発明の好適な実施の形態に係る演算ユニットの動作を示す図である。
【図３】本発明の好適な実施の形態の第１の実施例に係るプロセッサの構成例を示すブロック図である。
【図４】第１の実施例における命令語の構成の一例を示す図である。
【図５】第１の実施例における演算情報の構成例を示す図である。
【図６】演算方法情報の例を示す図である。
【図７】演算対象情報の例を示す図である。
【図８】第１の実施例における演算ユニット４０の構成例を示す図である。
【図９】第１の実施例における並列演算器４２の構成例を示す図である。
【図１０】第１の実施例におけるデータ選択器４４の構成例を示す図である。
【図１１】第１の実施例に係るプロセッサの動作を示すフローチャートである。
【図１２】第１の実施例に係るプロセッサにおける並列演算命令の動作を示すフローチャートである。
【図１３】第１の実施例における有用なプログラム例を示す図である。
【図１４】第１の実施例に係るプロセッサ１０の並列演算命令の仕様及び図１３の処理を実現するための演算情報の構成例を示す図である。
【図１５】図１３の処理を実現するための命令のアセンブリコード及びレジスタの内容を示す図である。
【図１６】図１３の処理を実行したときのデータフローを示す図である。
【図１７Ａ】第１の実施例における別の有用なＣプログラム例を示す図である。
【図１７Ｂ】第１の実施例における別の有用なアセンブリ・プログラム例を示す図である。
【図１７Ｃ】第１の実施例における別の有用なアセンブリ・プログラムのデータフローを示す図である。
【図１８】ｖｃａｌｃ．ｗ命令の仕様及び図１７の処理を実現するための演算情報の構成例を示す図である。
【図１９】本発明の好適な実施の形態の第２の実施例に係るプロセッサの構成例を示すブロック図である。
【図２０】図１３に示す処理を本実施例に係る演算装置を用いて実装した場合の命令のアセンブリコード及び命令語の内容を示す図である。
【図２１】本発明の好適な実施の形態の第３の実施例に係るプロセッサの構成例を示すブロック図である。
【図２２】図１３に示す処理を本実施例に係る演算装置を用いて実装した場合の、命令のアセンブリコード及び演算情報レジスタの内容を示す図である。
【図２３】本発明の好適な実施の形態の第４の実施例に係るプロセッサの構成例を示すブロック図である。
【図２４】図１３に示す処理を本実施例に係る演算装置を用いて実装した場合の、命令のアセンブリコード及び演算情報領域の内容を示す図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施形態及びその実施例について、図面を参照して詳細に説明する。
図１は、本発明の好適な実施の形態に係る演算ユニットの構成を示す図である。本実施形態に係る演算ユニット４０は、図１に示すように、出力データごとに実行すべき演算の演算対象を入力データ中の対応する入力データのインデックスとして表す演算対象情報と、出力データごとに実行すべき演算の種類（種別）を表す演算方法情報と、を含む演算情報を基に入力データを選択するデータ選択器４４と、並列演算の演算ごとに異なる演算を行う並列演算器４２と、を備える。
具体的には、演算ユニット４０は、所定の順序にて入力されるＫ個の入力データ（Ｋは１以上の整数）に対してＬ個の演算器（Ｌは１以上の整数）を用いて並列に演算処理を行う演算ユニットであり、演算器はＭ個（Ｍは１以上の整数）の入力データに対して演算を行うように構成されており、複数の入力データのうち、演算対象情報によって演算器ごとに指定された任意の位置にある入力データを演算の対象として、演算器ごとに演算対象情報によって指定された順番で選択するデータ選択器４４と、演算器を含み、データ選択器４４によって選択されたデータに対して、演算方法情報により指定されたＬ個の演算を、各演算器において並列に実行する並列演算器４２とを有する。なお、演算対象情報は、演算器のそれぞれへ入力するＫ個のうちＭ個の入力データの組み合わせ及びそれらの入力順を表す情報であり、演算方法情報は、演算器のそれぞれの演算の種類を表す情報である。ここで、任意の入力データを演算の対象として重複して選択することを妨げることはない。
【００２３】
以下、演算方法情報と演算対象情報とを合わせて演算情報と称する場合もある。
【００２４】
図２は、本実施形態に係る演算ユニットの動作を示す図である。図２は、演算ユニットの動作を分かりやすく説明するための概念図であり、所定の順序にて入力される入力データの数が８、演算器の数が４であり、各々の演算器が２個の入力データに対して演算を行う場合（本実施形態においてはＫが８、Ｌが４、Ｍが２の場合）の例である。
並列演算器４２はＬ個の演算器を備える。データ選択器４４は、外部から与えられた演算情報から演算対象情報（ＴＡ０〜ＴＡ３、ＴＢ０〜ＴＢ３）を取り出し、その演算対象情報に基づいて、Ｋ個（ここではＫ＝８）の入力データ（ｄ０〜ｄ７）の中から各演算器へ与える入力データの組合わせ及びそれらの入力順序を選択する。並列演算器４２は、外部から与えられた演算情報から演算方法情報（ＯＰ０〜ＯＰ３）を取り出し、各演算器へ与える。並列演算器４２の中の各演算器は、演算対象情報によって指定された順序でデータ選択器４４から与えられた入力データの組を使用して、演算方法情報で指定された演算を実行し、演算結果を出力する。各演算器の演算結果は演算ユニット４０の出力データ（ｅ０〜ｅ３）となる。演算方法情報（ＯＰ０〜ＯＰ３）は、演算器ごとに演算の種類を指定する情報である。演算対象情報（ＴＡ０〜ＴＡ３、ＴＢ０〜ＴＢ３）は、演算器ごとに演算対象を指定する情報であり、入力データに付与されたインデックス（ｄ０〜ｄ７）を用いて表される。Ｌ個（ここではＬ＝４）の演算器のそれぞれは、一つのデータを出力する。図２では、演算器のそれぞれは、Ｍ個（ここではＭ＝２）の演算対象入力データをとる。図２では、出力データｅ０に対する演算方法（ＯＰ０）は加算（＋）であり、二つの演算対象（ＴＡ０及びＴＢ０）はｄ７及びｄ３であることを表している。
この演算ユニットを用いれば、入力データの並び順がいかなる順序であっても、演算対象情報を用いることで、それぞれの演算手段に対して適切な入力データを供給することができる。そのため、プログラム中で別途並び替え命令を用いて入力データを並び替える必要がなくなる。
【００２５】
以下、本実施形態に係る演算ユニット及びプロセッサの実施例について図面を参照して詳細に説明する。
【００２６】
なお、演算情報の格納場所として、（汎用）ストレージユニット、命令語、演算情報専用ストレージユニット、メモリ中の演算情報領域、の四つが考えられる。以下、演算情報の格納場所として考えられる四つの場所に対応させて各実施例を説明する。
【００２７】
〔第１の実施例〕
本実施形態を好適に実施した第１の実施例について説明する。
【００２８】
図３は、本発明の好適な実施の形態の第１の実施例に係るプロセッサの構成例を示すブロック図である。図３を参照すると、演算ユニット４０を用いた第１の実施例に係るプロセッサ１０は、プログラム及びプログラムの入出力データを含むメモリ２と、並列演算の対象である入出力データ及び演算情報を含むストレージユニット６と、演算情報に従って演算を行う演算ユニット４０と、メモリ２中のプログラムに従ってストレージユニット６及び演算ユニット４０を制御するプロセッサ制御ユニット２０と、を有する。
【００２９】
ストレージユニット６は、複数のレジスタを備える。ストレージユニット６は、演算情報と並列演算の対象である入力データとを格納する。
ストレージユニット６は、メモリから並列演算の対象である入力データを読み込む。また、ストレージユニット６は、プログラムの入力データとして格納された演算情報をメモリから読み込む。なお、演算情報をプログラムの入力データとして格納せず、プログラム中の命令によってストレージユニット６に演算情報を作成するようにプログラムを作成してもよい。
【００３０】
演算ユニット４０は、演算対象情報によって指定された入力データに対して、演算方法情報によって指定された演算を行う。
プロセッサ制御ユニット２０は、ストレージユニット６から入力データを読み込み、演算ユニット４０を用いて演算を行い、演算結果をストレージユニット６に書き込む制御を行う。
【００３１】
すなわち、本実施例に係るプロセッサ１０においては、プロセッサ制御ユニット２０は、メモリ２に格納されたプログラムに従って、演算ユニット４０やストレージユニット６を動作させる。ストレージユニット６は、プロセッサ制御ユニット２０の制御に従い、メモリ２から演算情報やプログラムの入力データを読み込んだり、あるいは、プログラムの出力データを書き込んだりすることができる。また、演算ユニット４０は、プロセッサ制御ユニット２０の制御に従って、ストレージユニット６からデータ及び演算情報８を読んで演算する。
【００３２】
このような構成をとることにより、上記演算ユニット４０及びプロセッサ１０は、複数の入力データの並び順がどのような順序であってもその中から演算対象の入力データ組合わせ及びそれらの入力順序を適切に選び、かつ、入力データ組ごとに異なる種類の演算を実行可能となる。
【００３３】
以下の説明では、ストレージユニット６として複数の６４ビットレジスタを持つ構成を例として説明する。ここで、それぞれのレジスタは、四つの１６ビットサブワードを格納する。また、演算ユニットは最大二つの演算対象の間で演算を行い、一つの演算結果を出力するものとする。すなわち、所定の順序にて入力される入力データの数が８、演算器の数が４であり、各々の演算器が２個の入力データに対して演算を行う場合（本実施形態においてはＫ＝８、Ｌ＝４、Ｍ＝２の場合）を、例として説明する。
【００３４】
メモリ２にはプログラムが格納されている。プロセッサ制御ユニット２０は、このプログラムに従って演算ユニット４０を制御することにより、ストレージユニット６中のデータを処理する。プログラムは複数の命令語を含む。命令語は複数種類あるが、演算ユニット４０を動作させるための命令語の構成の一例を図４に示す。図４は、第１の実施例における命令語の構成の一例を示す図である。図４中の命令語６０は、ＯＰＣＯＤＥ６１、ＲＳ６２、ＲＴ６３、ＲＤ６４、ＲＩ６５の五つのフィールドから構成される。ＯＰＣＯＤＥ６１は命令の種類を示すオペコードフィールドである。ＲＳ６２、ＲＴ６３はそれぞれ入力オペランドのフィールドであり、ＲＤ６４は出力オペランドのフィールドである。ＲＩ６５は演算情報を格納するレジスタを指定するフィールドである。ここで、図４を始めとする各図において、ＭＳＢはMost Significant Bitの略であり、最上位ビットを意味する。また、ＬＳＢはLeast Significant Bitの略であり、最下位ビットを意味する。
【００３５】
図５は、第１の実施例における演算情報の構成例を示す図である。演算情報は、サブワードごとの演算方法と演算対象とを表す。それぞれのサブワード用演算情報には、ＯＰｘ、ＴＡｘ、ＴＢｘ（ｘ＝０〜３）の三つのフィールドがあり、それぞれ、演算方法情報、第１オペランド用の演算対象情報、第２オペランド用の演算対象情報を表す。
【００３６】
図６は、演算方法情報の例を示す図である。ここでは、ＯＰｘ部は５ビットのフィールドであるとし、加算（Ａｄｄ）や減算（Ｓｕｂ）などの演算に対応する演算方法情報の値が２進数で定義されている。すなわち、図５に示す演算情報のＯＰ０〜ＯＰ３に、図６で示す５ビットの値のいずれかを格納する。なお、ここに示した演算方法はあくまで例であり、本実施例の利用者が演算ユニットを実現する際に必要に応じて演算方法を定義してもよい。なお、「０ｂ」は、続く文字列が２進数であることを表す。
【００３７】
図７は、演算対象情報の例を示す図である。ＴＡｘ及びＴＢｘは、第１オペランド用の演算対象情報（ＴＡ０〜３）及び第２オペランド用の演算対象情報（ＴＢ０〜３）である。それぞれの演算対象情報は２進数で示されている。ここでは、二つの６４ビットオペランド（ＲＳ、ＲＴ）の合計八つのサブワードが、３ビットの演算対象情報で表現されている。例えば、サブワード０においてＲＳ［１５：０］とＲＴ［３１：１６］とに対する演算を行う場合、ＴＡ０＝０ｂ０００、ＴＢ０＝０ｂ１０１として演算情報に格納する。なお、ＲＳ［１５：０］は、レジスタＲＳの１５ビット目から０ビット目までの１６ビット幅の値を表す。
【００３８】
図７の構成では、サブワードあたり二つの演算対象を指定するために必要なビット数は、３×２＝６ビットである。演算方法情報の指定に５ビットを使用している図６の構成のように、演算方法情報が１０ビット以内であればサブワードあたり１６ビット以内となる。つまり、四つのサブワードから構成される演算情報全体を（６＋１０）×４＝６４ビット以内に収めることができる。また、演算方法の指定に２ビット確保する場合、演算情報全体では（６＋２）×４＝３２ビットとなり、一般的なプロセッサのデータ幅に収めることができる。
【００３９】
図８は、第１の実施例における演算ユニット４０の構成例を示す図である。図８に示すように演算ユニット４０は、並列演算器４２、データ選択器４４を備える。
【００４０】
図９は、第１の実施例における並列演算器４２の構成例を示す図である。並列演算器４２は、複数のサブワード演算器７３〜７６及び並列演算器制御ユニット７２を備える。並列演算器制御ユニット７２は、演算情報とプロセッサ制御ユニット２０からの制御信号とに従って、それぞれのサブワード演算器で実行する演算を決定し、サブワード演算器に指示する。つまり、並列演算器制御ユニット７２は、図６で示されるような２進表現の演算情報と演算方法との対応に従って、演算情報中の演算方法情報をサブワードごとに解読し、それぞれのサブワード演算器に指示する。サブワード演算器７３〜７６のそれぞれは、データ選択器４４から与えられた２個のデータを入力とし、並列演算器制御ユニット７２からサブワード演算器ごとに個別に指示された演算を行い、演算結果を表す出力データをストレージユニット６に格納する。
【００４１】
図１０は、第１の実施例におけるデータ選択器４４の構成例を示す図である。データ選択器４４は、複数のデータセレクタ１０２〜１０９及びデータ選択器制御ユニット１０１を備える。並列演算器４２中の四つのサブワード演算器７３〜７６がそれぞれ入力オペランドを二つずつ必要とするため、データ選択器４４は、合計八つのデータセレクタ１０２〜１０９を持つ。データ選択器４４は、ストレージユニットから与えられた二つのワード・オペランドを合計八つのサブワード・データに分解し、データセレクタ１０２〜１０９を用いて、サブワード演算器７３〜７６の入力オペランド用のデータを選択して出力する。データセレクタ１０２及び１０３は、サブワード演算器７３の第１及び第２オペランドのためのセレクタであり、同様に、データセレクタ１０４〜１０５、１０６〜１０７、１０８〜１０９は、それぞれサブワード演算器７４、７５、７６のオペランドのためのセレクタである。データ選択器制御ユニット１０１は、図７で示されるような演算対象とその２進数表現との対応に従って、演算情報中の演算対象情報をサブワードのオペランドごとに解読し、それぞれのデータセレクタに指示する。
【００４２】
なお、演算ユニット４０は、プロセッサ制御ユニット２０からの制御信号を用いることで、演算情報８を用いた並列演算だけではなく、従来の一般的なＳＩＭＤ演算を実行することもできる。つまり、並列演算器制御ユニット７２は、プロセッサ制御ユニット２０から単一種類の演算方法情報と、ストレージユニット６からの演算情報に含まれる演算方法情報ではなくプロセッサ制御ユニット２０からの演算方法情報を用いる制御信号とを受け取ったときには、演算情報を使わずにプロセッサ制御ユニット２０からの単一種類の演算方法情報を用いてサブワード演算器７３〜７６を制御する。このときサブワード演算器７３〜７６はすべて同じ演算を行う。また、データ選択器制御ユニット１０１は、プロセッサ制御ユニット２０から、演算対象情報と、プロセッサ制御ユニット２０からの演算対象情報を用いる制御信号とを受け取ったときには、ストレージユニット６からの演算情報に含まれる演算対象情報を使わずにプロセッサ制御ユニット２０からの演算対象情報を用いてデータセレクタ１０４〜１０９を制御する。ここで、プロセッサ制御ユニット２０からの演算対象情報は、所定の第一オペランド及び第二オペランドの対応する位置にあるサブワードを入力データの組合わせ及びそれらの入力順序として表すものである。
【００４３】
なお、サブワードのビット幅及び個数が異なる構成の場合には、並列演算器４２中のサブワード演算器７３〜７６のビット幅及び個数もそれぞれ変わる。例えば、ストレージユニット６が３２ビットサブワード八つで構成される２５６ビットレジスタを持つ構成の場合は、並列演算器４２は３２ビットのサブワード演算器を八つ持ち、データ選択器４４は１６個の１６入力データセレクタを持つ。これは、所定の順序にて入力される入力データの数が１６、演算器の数が８であり、各々の演算器が２個の入力データに対して演算を行う場合（本実施形態においてはＫ＝１６、Ｌ＝８、Ｍ＝２の場合）である。
【００４４】
次に、図１１のフローチャートを参照して、本実施例に係るプロセッサ１０の全体の動作について詳細に説明する。図１１は、第１の実施例に係るプロセッサの動作を示すフローチャートである。
図３中のメモリ２は、複数の命令語を含むプログラムを格納する。まず、プロセッサ制御ユニット２０がメモリ２から命令語を一つフェッチする（ステップＳ１）。そして、プロセッサ制御ユニット２０は、命令語の各フィールドをデコードする（ステップＳ２）。デコードしたフィールドの情報に従って、プロセッサ制御ユニット２０は、演算ユニット４０及びストレージユニット６の制御信号（データパス制御信号）を生成する（ステップＳ３）。次に、プロセッサ制御ユニット２０からの制御に従って、演算ユニット４０は、ストレージユニット６のレジスタのいずれかからデータを読み出し（ステップＳ４）、演算を行い（ステップＳ５）、最後に、演算結果をストレージユニット６に書き戻す（ステップＳ６）。プロセッサ１０は、ステップＳ１からＳ６をメモリ２中の後続の命令語について処理することを繰り返し、プログラムの実行を進める。
【００４５】
次に、図１２のフローチャートを参照して、本実施例におけるステップＳ５の詳細な動作について詳細に説明する。図１２は、第１の実施例に係るプロセッサにおける並列演算命令の動作を示すフローチャートである。ステップＳ５１〜Ｓ５４は、ステップＳ５を詳細に説明したものである。まず、演算ユニット４０は、データ選択器４４中のデータ選択器制御ユニット１０１を用い、ストレージユニット６から読み出された演算情報８中の演算対象情報をデコードし（ステップＳ５１）、データ選択器４４中のデータセレクタを用いてストレージユニット６から読み出したデータからサブワードごとに演算対象を適切に選択し、並列演算器４２に送る（ステップＳ５２）。これと並行して、演算ユニット４０は、並列演算器４２中の並列演算器制御ユニット７２を用い、演算情報８中の演算方法情報を解釈する（ステップＳ５３）。最後に、演算ユニット４０は、並列演算器４２中のサブワード演算器を用い、データ選択器４４から送られたデータを、並列演算器制御ユニット７２からの制御に従って処理し（ステップＳ５４）、ストレージユニット６に書き込む（ステップＳ６）。
【００４６】
〔第１の実施例の動作の説明〕
次に、本実施例の具体的な動作を説明する。
図１３は、第１の実施例における有用なプログラム例を示す図である。図１３では、加算二つと減算二つを組み合わせた処理のＣ言語プログラムを示す。この処理は、配列ｃ及び配列ｄ中の連続したデータである入力データｃ［０］〜ｃ［３］、ｄ［０］〜ｄ［３］に対する、加算二つと減算二つとが組み合わされた処理である。この処理では、配列ｃ中のデータに対しては連続してアクセスしているが、配列ｄ中のデータに対するアクセス順序は連続ではない。この処理は、ＦＦＴの最内ループに見られる処理であり、従来の一般的なＳＩＭＤ命令では実現しにくかったものである。
図１４は、第１の実施例に係るプロセッサ１０の並列演算命令の仕様及び図１３の処理を実現するための演算情報の構成例を示す図である。図１４に示すｖｃａｌｃ．ｈは、演算情報を用いた並列演算命令であり、図中に示す２種類の演算方法と８種類の演算対象とをサブワードごとに自由に選択して、４並列の演算を行うことができる。
図１１のフローチャート中のステップＳ１において、プロセッサ制御ユニット２０がｖｃａｌｃ．ｈをフェッチした後、プロセッサ制御ユニット２０はそれをデコードし（ステップＳ２）、データパス制御信号を生成する（ステップＳ３）。そして、演算ユニット４０は、命令語６０中の二つの入力オペランドＲＳ６２及びＲＴ６３に対応する入力データと、演算情報を格納するレジスタオペランドＲＩ６５に対応する演算情報と、をプロセッサ制御ユニット２０の指示に従ってストレージユニット６の汎用レジスタファイルから読み出す（ステップＳ４）。そして、プロセッサ制御ユニット２０は、入力データと演算情報とを演算ユニット４０に与える（ステップＳ５）。次に、図１２のフローチャート中のステップＳ５３に示すように、演算ユニット４０中のデータ選択器４４中のデータ選択器制御ユニット１０１は、プロセッサ制御ユニット４０から与えられた演算情報をデコードし、データセレクタ１０２〜１０９に指示する（ステップＳ５１）。そして、演算ユニット４０中のデータセレクタ１０２〜１０９は、入力データ中のサブワードを適切に選択し、並列演算器４２に与える（ステップＳ５２）。演算ユニット４０中の並列演算器４２中の並列演算器制御ユニット７２は、プロセッサ制御ユニット４０から与えられた演算情報を解釈し、サブワード演算器７３〜７６に指示する（ステップＳ５３）。そして、サブワード演算器７３〜７６は、データ選択器４４から与えられたデータに対して、並列演算器制御ユニット７２から指示された演算を行う（ステップＳ５４）。最後に、演算ユニット４０は、命令語６０の出力オペランドＲＤ６４に対応する汎用レジスタファイル中のレジスタに、結果を書き込む（ステップＳ６）。
【００４７】
例えば、図１４のレジスタＲＩに格納されているサブワード３に対する演算情報（ＯＰ３、ＴＡ３、ＴＢ３）は、第１入力オペランドＲＳのビット範囲［６３：４８］の値から第２入力オペランドＲＴのビット範囲［４７：３２］の値を減算することを表している。
【００４８】
図１５は、図１３の処理を実現するための命令のアセンブリコード及びレジスタの内容を示す図である。図１５に示す例では、演算情報がレジスタｒ４に格納されており、ｖｃａｌｃ．ｈ命令の第３オペランドでレジスタｒ４を指定している。すなわち、図１５に示す命令は、レジスタｒ０及びｒ１の入力データに対して、レジスタｒ４で指定した演算情報に基づいた演算を行い、レジスタｒ２に出力する処理である。図１６は、図１３の処理を実行したときのデータフローを示す図である。ここで、図１４のサブワード３に対する演算情報（ＯＰ３、ＴＡ３、ＴＢ３）は、図１６のｒ２の最上位サブワードに格納される演算結果に対応している。
【００４９】
図１６の命令のデータフローでは、二つの入力レジスタｒ０、ｒ１中の八つのサブワードに対して加減算を行い、出力レジスタｒ２に格納している。ここで、ｒ２に格納される演算結果は、サブワード同士の加算と減算との演算結果が混在している。また、ｒ２のサブワード１及びサブワード０に対するサブワード間演算は、レジスタ中の異なるサブワード位置にあるデータ同士の演算である。ＦＦＴの最内ループでは、複素数の実部と虚部との間で複雑に演算する必要があるため、このようなデータフローが存在する。
【００５０】
このデータフローを、本実施例に係るプロセッサ１０によらず、同じサブワード位置同士の演算を行う単純なＳＩＭＤ加算命令とＳＩＭＤ減算命令とを用いて実装する場合、加減算の前及び後に並び替え命令を複数回実行する必要がある。また、加算と減算とを別の命令で実行する必要があるため、並び替えはさらに複雑なものとなる。本実施例で示した演算装置を使えば、演算装置の中でサブワードを自由に選択して演算でき、さらに、加算及び減算という複数種類の演算を同時に実行できるため、上記処理を１命令で実現可能である。
【００５１】
次に、ストレージユニット６中のレジスタが、サブワードのビット幅が３２ビット二つで構成される場合における本実施例に係るプロセッサ１０を例として説明する。このときプロセッサ１０は、３２ビットのサブワード演算器を二つ含んだ並列演算器と、４入力の３２ビットデータセレクタ四つで構成されたデータ選択器を備える。すなわち、所定の順序にて入力される入力データの数が４、演算器の数が２であり、各々の演算器が２個の入力データに対して演算を行う場合（本実施形態においてはＫ＝４、Ｌ＝２、Ｍ＝２の場合）の例である。
【００５２】
図１７は、第１の実施例における別の有用なプログラム例を示す図である。図１７では、条件によって演算の内容が変わる処理を本実施例に係るプロセッサ１０に実行させるプログラムの一例を示す。図１７Ａに対象とするＣ言語プログラムを示す。このプログラムは、条件によって、変数ｐｏｓに変数ｕｎｉｔの値を加算するか減算すると同時に、変数ｖａｌをインクリメントするかゼロクリアする処理である。本実施例に係るプロセッサ１０はこの処理を図１７Ｂに示すように３命令で実現する。
このプログラムでは、１行目のｖｃｍｐｌｔ．ｗ命令は、条件判定を行い、比較結果をレジスタｒ３に出力する。２行目のｃｍｏｖ．ｗ命令は、条件付転送命令であり、比較結果が真のときの演算情報ｒ４と比較結果が偽のときの演算情報ｒ５とを、ｒ３の値を用いて選択してｒ６に書き込む。そして、３行目のｖｃａｌｃ．ｗ命令は、指定された演算を実行する。つまり本実施例に係るプロセッサ１０は、ｖｃｍｐｌｔ．ｗ命令で条件判定を行い、ｃｍｏｖ．ｗ命令でｉｆ節又はｅｌｓｅ節の演算情報を選択し、ｖｃａｌｃ．ｗ命令で選択された演算情報に従って演算を行うことで、図１７Ａに示す処理を３命令のみで実現する。
なお、レジスタｒ１の上位ワード（ｒ１［６３：３２］）及び下位ワード（ｒ１［３１：０］）には、条件判定に用いる値ａが格納されており、レジスタｒ２の上位ワード（ｒ２［６３：３２］）及び下位ワード（ｒ２［３１：０］）には、条件判定に用いる値ｂが格納されている。
【００５３】
ｖｃｍｐｌｔ．ｗ命令は、第１オペランドよりも第２オペランドが大きいかを３２ビットサブワードごとに比較し、比較結果を第３オペランドにサブワードごとに格納する。なお、比較結果は、真のときオール１、偽のときオール０として表される。すなわち、図１７Ｂに示すように第１オペランドの値がｒ１、第２オペランドの値がｒ２、第３オペランドの値がｒ３である場合には、ａ＜ｂであれば、レジスタｒ３の上位ワード及び下位ワードはそれぞれオール１となり、比較結果全体としてもオール１となる。一方、ａ≧ｂであれば、レジスタｒ３の上位ワード及び下位ワードはそれぞれオール０となり、比較結果全体としてもオール０となる。
【００５４】
ｃｍｏｖ．ｗ命令は、第１オペランドの値が１のビットについては第２オペランドの値を、０のビットについては第３オペランドの値をそれぞれ第４オペランドの対応するビットに格納することにより条件代入を実現する命令である。図１７の例では、レジスタｒ３の中身はオール１又はオール０である。すなわち、レジスタｒ３の中身がオール１の場合（ａ＜ｂの場合）にはｒ４の中身が、レジスタｒ３の中身がオール０の場合（ａ≧ｂの場合）にはレジスタｒ５の中身がレジスタｒ６へ代入される。
【００５５】
ｖｃａｌｃ．ｗ命令は演算情報を用いた並列演算命令である。図１８は、ｖｃａｌｃ．ｗ命令の仕様及び図１７の処理を実現するための演算情報の構成例を示す図である。図１８は、ｖｃａｌｃ．ｗ命令のフォーマットと、演算方法情報の仕様と、演算対象情報の仕様と、図１７の処理を実現するための演算情報とを表している。ｖｃａｌｃ．ｈ命令と同様に、ｖｃａｌｃ．ｗ命令は、演算ユニット２０は汎用レジスタから入力データ及び演算情報を読み出し（ステップＳ４）、データ選択器４４及び並列演算器４２を用いて演算情報にもとづいた演算を行い（ステップＳ５１〜Ｓ５４）、汎用レジスタファイルに結果を格納する（ステップＳ６）。
【００５６】
図１７Ｂの処理のデータフローを図１７Ｃに示す。ここで、レジスタｒ４の中身は比較結果が真の場合に用いられる演算情報、レジスタｒ５の中身は比較結果が偽の場合に用いられる演算情報である。レジスタｒ４の上位ワードと下位ワードとはそれぞれ"ＲＴ［６３：３２］＋ＲＳ［６３：３２］"、"ＲＴ［３１：０］＋ＲＳ［３１：０］"という演算情報を表している。また、レジスタｒ５の上位ワードと下位ワードとはそれぞれ"ＲＴ［６３：３２］  ｘｏｒ  ＲＴ［６３：３２］"、"ＲＴ［３１：０］−ＲＳ［３１：０］"という演算情報を表している。ここで、ｘｏｒは排他的論理和を表す演算子である。すなわち、レジスタｒ５の上位ワードが表す演算は、同じ値の排他的論理和をとることで、ゼロクリアを実現する演算である。また、レジスタｒ８には変数ｖａｌと変数ｐｏｓとが、レジスタｒ７にはｖａｌのインクリメントに用いる定数１と変数ｕｎｉｔとが格納されており、ｖｃａｌｃ．ｗ命令はレジスタｒ７の値とレジスタｒ８の値とをそれぞれ図１８中のＲＳ及びＲＴとして扱っている。
【００５７】
図１７に示す例においては、ａ＜ｂであった場合には、レジスタｒ３はオール１となっているため、レジスタｒ６にはレジスタｒ４の値である"００１１０１００１０００"が格納されている。従って、ｖｃａｌｃ．ｗ命令としては、ｖａｌを１インクリメントした値をレジスタｒ８の上位ワードに格納し、変数ｐｏｓと変数ｕｎｉｔとを加算した値をレジスタｒ８の下位ワードに格納することとなる。
一方、ａ≧ｂであった場合には、レジスタｒ３はオール０となっているため、レジスタｒ６にはレジスタｒ５の値である"１０１１１１０１１０００"が格納されている。従って、ｖｃａｌｃ．ｗ命令としては、ｖａｌをゼロクリアしてレジスタｒ８の上位ワードに格納し、変数ｐｏｓから変数ｕｎｉｔを減算した値をレジスタｒ８の下位ワードに格納することとなる。
【００５８】
本実施例によらないプロセッサの場合、図１７Ａのｉｆ節の処理は一般的なＳＩＭＤ加算命令でも実現できるが、図１７Ａのｅｌｓｅ節の処理は一般的なＳＩＭＤ命令では実現困難である。そこで、本実施例によらないプロセッサは、条件判定の後に条件分岐を行い、条件節の中の文を２命令に分けて実行することとなる。すなわち、最低４命令実行することになる。また、条件分岐は一般的に分岐ペナルティを伴うため、実行サイクル数はさらに多くなる。
【００５９】
このように、本実施例に係るプロセッサ１０によれば、サブワードごとに異なる演算方法を実現できるだけではなく、サブワードごとの演算方法を他の命令の実行結果を用いてプログラム中で動的に変更して実行することができる。これにより、従来技術では性能の向上が難しかったプログラムについても性能向上を図ることができる。
【００６０】
以上のように、本実施例に係るプロセッサ１０は、複数の入力データの並び順がどのような順序であってもその中から演算対象の入力データの組合わせ及びそれらの入力順序を適切に選び、かつ、入力データ組ごとに異なる種類の演算を実行可能である。
すなわち、異種の演算を同時に行えることにより、異種の演算を行う複数のＳＩＭＤ命令に分割して処理を実行する必要がなくなり、プログラムの実行サイクル数及びプログラム中の命令数を削減できる。
また、複数のレジスタから自由にサブワードを選択して演算を行うことにより、並び替え命令を不要又は削減することができ、プログラムの実行サイクル数及びプログラム中の命令数を削減できる。
【００６１】
また、演算情報のフォーマットが演算ユニットの制御信号のフォーマットと一致する場合と一致しない場合とが考えられる。すなわち、ストレージユニット６にはエンコードされた演算情報が格納されており、演算方法情報と並列演算器４２の制御信号とのフォーマット、及び演算対象情報とデータ選択器４４の制御信号とのフォーマットがそれぞれ異なる場合がある。フォーマットが一致する場合には、演算情報を直接演算ユニットの制御信号として接続するが、一致しない場合には、並列演算器制御ユニット７２及びデータ選択器制御ユニット１０１による変換が必要となる。
【００６２】
なお、上記の説明においては、並列演算器制御ユニット７２及びデータ選択器制御ユニット１０１が、演算ユニット内に配置されている場合を例としたが、これらは演算ユニット以外の場所に配置してもよく、たとえば、プロセッサ制御ユニット２０内に配置したり、独立したユニットとして配置したりしてもよい。
【００６３】
〔第２の実施例〕
本実施形態を好適に実施した第２の実施例に係るプロセッサについて説明する。
図１９は、本発明の好適な実施の形態の第２の実施例に係るプロセッサの構成例を示すブロック図である。以下の説明において、図３と同一部分には同一符号を付し、異なる部分についてのみ説明する。
第２の実施例では、第１の実施例と異なり、演算情報８は命令語中に格納される。第２の実施例に係るプロセッサ２１０では、プロセッサ制御ユニット２２０は命令語をデコードする際に、命令語の中から演算情報８を取り出す。そして、プロセッサ制御ユニット２２０は、取り出した演算情報８を演算ユニット４０に与える。
【００６４】
命令語中に演算情報８を格納することにより、演算情報８をストレージユニット６に格納する命令が不要となる。また、ストレージユニット６の使用容量も削減することができる。
【００６５】
〔第２の実施例の動作の説明〕
次に、本実施例の具体的な動作を説明する。
図２０は、図１３に示した処理を本実施例に係る演算装置を用いて実装した場合の命令のアセンブリコード及び命令語の内容を示す図である。図中、「０ｘ」は、続く文字列が１６進数であることを表す。なお、図２０の命令を用いて図１３の処理を実行したときのデータフローは、図１６と同様である。
【００６６】
命令語は、オペコードフィールド（ｏｐｃ）と、三つのレジスタオペランドフィールド（ｒ０、ｒ１、ｒ２又はｒ３）と、３２ビットの演算情報フィールド（ＯＰ０〜ＯＰ３、ＴＡ０〜３、ＴＢ０〜ＴＢ３）とで構成されている。演算情報フィールドの値は、図２０中のアセンブリコードの第３オペランドに１６進数即値として指定されたものである。プロセッサ制御ユニット２２０は、命令語をフェッチした後に演算情報を取り出し、演算ユニット４０に与える。演算ユニット４０は、プロセッサ制御ユニット２２０から与えられた演算情報を用いて演算を行う。
【００６７】
第２の実施例でも、第１の実施例と同様に、演算ユニット４０は演算情報に従って演算を行う。しかし、演算情報は、プログラム中の命令語に即値として格納される。演算情報を命令語中で即値として与えることができるため、プログラマは、命令ごとに異なる演算方法及び演算対象を指定してプログラムを記述することができる。このため、プログラミングの自由度が向上する。また、演算情報を設定する命令が不要になるため、実行性能の向上が達成できる。
【００６８】
〔第３の実施例〕
本実施形態を好適に実施した第３の実施例に係るプロセッサについて説明する。
図２１は、本発明の好適な実施の形態の第３の実施例に係るプロセッサの構成例を示すブロック図である。第３の実施例では、第１、第２の実施例と異なり、演算情報８は専用の演算情報専用ストレージユニット５０中に格納される。第３の実施例に係るプロセッサ３１０は、演算情報専用ストレージユニット５０から演算情報８を読み出し、演算ユニット４０で演算を行う。
【００６９】
このように構成することで、プログラム開始時に予め複数の演算処理パターンを演算情報８として演算情報専用ストレージユニット５０中に格納しておくことができるため、プログラムの実行効率を向上できる。また、ストレージユニットの使用容量も削減することができる。
なお、演算情報専用ストレージユニット５０は、少なくとも一つのエントリを持っている。エントリが複数個あると、一つのプログラム中で複数の演算情報を使い分けられるため、演算情報を再利用しやすくなる。このため、演算情報の設定に必要な命令を減らすことができ、命令数削減及びプログラムの実行性能向上につながる。
【００７０】
また、演算方法情報と演算対象情報とを別のレジスタとして実現してもよい。このように構成することで、さまざまな演算方法や演算指定を組み合わせてより多くの処理のバリエーションを指定できるため、ハードウェアコストを大きく増やすことなく、さまざまな処理を実行することができる。
【００７１】
〔第３の実施例の動作の説明〕
次に、本実施例の具体的な動作を説明する。
図２２は、図１３に示した処理を本実施例に係る演算装置を用いて実装した場合の、命令のアセンブリコード及び演算情報レジスタの内容を示す図である。なお、図２２の命令を用いて図１３の処理を実行したときのデータフローは図１６と同様である。本実施例においては、演算情報８は演算情報専用レジスタファイル内に含まれており、命令語中にはそれへのインデックスが格納される。図２２の例では、ｖｃａｌｃ．ｈ命令の第３オペランドｏｐｒ０が、演算情報レジスタファイル中の演算情報レジスタの番号を表す。この例では、演算情報レジスタは３２ビットの長さであり、それぞれサブワードに対応したフィールドＯＰ３〜ＴＢ０で構成されている。演算情報レジスタの内容は、ｖｃａｌｃ．ｈ命令実行前に、別の命令を用いて予め設定しておく。汎用レジスタとは別のレジスタに演算情報を格納するため、汎用レジスタを他のデータのために使用することができる。ｖｃａｌｃ．ｈ命令実行時には、演算ユニット４０は、演算情報レジスタファイルから演算情報を読み出し、並列演算器制御ユニット７２とデータ選択器制御ユニット１０１とに与え、出力される制御信号を用いてサブワード演算器７３〜７６とデータセレクタ１０２〜１０９とを制御し、演算を行う。
【００７２】
第３の実施例でも、第１及び第２の実施例と同様に、演算ユニット４０は演算情報に従って演算を行う。しかし、演算ユニット４０は、演算情報専用ストレージユニット５０中に格納された演算情報を用いて演算を行う。このように構成することで、プログラム開始時に予め複数のパターンを演算情報８として演算情報専用ストレージユニット５０中に格納しておくことができるため、プログラムの実行効率を向上できる。また、ストレージユニット６の使用容量も削減することができる。
【００７３】
〔第４の実施例〕
本実施形態を好適に実施した第４の実施例に係るプロセッサについて説明する。
図２３は、本発明の好適な実施の形態の第４の実施例に係るプロセッサの構成例を示すブロック図である。上記第１、第２、第３の実施例では、演算情報８は、ストレージユニット６中又は命令語中又は専用の演算情報専用ストレージユニット５０中に格納される。これらに対し、第４の実施例では、演算情報８は、メモリ２中の専用領域である演算情報領域１２０に格納される。
【００７４】
第４の実施例に係るプロセッサ４１０では、プロセッサ制御ユニット４２０は、命令語６０中のフィールドＲＩ６５を演算情報領域１２０中の演算情報８へのポインタとして解釈する。そして、プロセッサ制御ユニット４２０は、ポインタの指すアドレスにある演算情報８を、メモリ２中の演算情報領域１２０から読み込んで演算ユニット４０に送り、演算ユニット４０を用いて演算を行う。
【００７５】
〔第４の実施例の動作の説明〕
次に、本実施例の具体的な動作を説明する。
図２４は、図２３に示す処理を本実施例に係る演算装置を用いて実装した場合の、命令のアセンブリコード及び演算情報領域の内容を示す図である。なお、図２４の命令を用いて図１３の処理を実行したときのデータフローは図１６と同様である。第４の実施例においては、演算情報８はメモリ中の演算情報領域１２０内に含まれており、演算情報領域１２０の先頭アドレスは、定数ＯＰＭＢＡＳＥによって示される。命令語中には使用する演算情報へのインデックスが格納される。プロセッサ制御ユニット４２０は、上記定数ＯＰＭＢＡＳＥと上記インデックスとを加算することで、演算情報を読み込むためのアドレスを計算する。図２４の例では、ｖｃａｌｃ．ｈ命令の第３オペランドｏｐｍ０は、演算情報領域１２０中のｏｐｍ０番目のエントリを指す。この例では、演算情報は３２ビットの長さであり、それぞれサブワードに対応したフィールドＯＰ３〜ＴＢ０で構成されている。演算情報領域へは、別の命令を用いて演算情報を予め設定しておく。命令語中には、演算領域１２０中の演算情報へのインデックスのみを格納するので、命令語長の増加を防ぐことができる。また、プログラムのロードと同時に演算情報領域１２０へ演算情報をロードしておくことで、演算情報の設定に必要な実行サイクル数を削減することができ、実行性能が向上する。ｖｃａｌｃ．ｈ命令実行時には、プロセッサ制御ユニット４２０はメモリにアクセスし、演算情報領域１２０中から演算情報を読み出して、演算ユニット４０に与える。
【００７６】
なお、演算情報領域中のエントリの指定は、上記のようにインデックスを命令語中で与える方式のほかに、命令語中で指定したレジスタ中の値を用いるレジスタ間接方式でもよい。また、演算情報領域の先頭アドレスは、プロセッサ固有の定数アドレスとしてもよいし、レジスタなどに格納されたベースアドレスを先頭アドレスとして用いてもよい。また、メモリ２とプロセッサ制御ユニット４２０との間にキャッシュを設けて、頻繁に使う演算情報を格納することでメモリアクセスに係るオーバーヘッドを削減し、性能向上を図ってもよい。
【００７７】
第４の実施例でも、第１及び第２及び第３の実施例と同様に、演算ユニット４０は、演算情報に従って演算を行う。しかし、演算ユニット４０は、メモリ２中の演算情報領域１２０中に格納された演算情報を用いて演算を行う。このように構成することで、プログラムのロードと同時に、演算情報領域１２０へ演算情報をロードすることができる。このため、第１、第３の実施例と比較して、実行性能が向上する。また、命令語中には演算領域１２０中の演算情報へのインデックスのみを格納するため、第２の実施例と比較して、命令語長が短くなる。
【００７８】
上記各実施形態及び実施例は本発明の好適な実施の一例であり、本発明はこれに限定されることはない。
例えば、本発明が適用できる構成は上記の構成に限らない。一例を挙げると、３２ビットのサブワード四つや８ビットのサブワード八つなどの構成に適用してもよい。また、三つの演算対象（本実施形態においてＭ＝３）をとる演算に適用してもよい。上記の構成例では、本実施形態において、Ｋ＝Ｌ×Ｍとなる例を示したが、Ｋ＜Ｌ×Ｍとなる場合にも、Ｋ＞Ｌ×Ｍとなる場合にも本発明は適用できる。
また、演算情報と演算対象のデータは異なるビット幅でもよい。例えば、６４ビットの演算情報を用いて、３２ビットのデータに対して演算を行ってもよい。また、ストレージユニット６はレジスタファイルではなくメモリであってもよい。
また、第１、第３、第４の実施例における演算情報の汎用レジスタ、演算情報レジスタ、演算情報領域への格納は、ＤＭＡ（Direct Memory Access）転送などを用いて効率的に行うこともできる。
なお、上記四つの実施例を組み合わせ、演算対象情報と演算方法情報とを異なる場所に格納することもできる。例えば、演算対象情報のみを命令語に格納して演算方法情報はストレージユニットに格納したりすることもできる。
【００７９】
なお、演算器外で入力データの並び替えが必要となるが、異なる演算を並列に実行可能な演算ユニットとして、演算情報中に演算方法情報のみを格納するように構成することもできる。例えば、演算対象は命令ごとに定義されたサブワードであるが、演算方法を演算方法情報によって自由に変更できるようにすることもできる。このように構成することでデータ選択器を取り除くことができるため、演算対象の並び替えは必要ではないが、異種の演算が混在することが多いプログラムを、回路規模を抑えたまま少ない実行命令数で実行できるプロセッサを実現できる。
【００８０】
また、演算対象情報のフォーマットを変更し、限られた範囲の演算対象のみ指定できるようにしたり、逆に、３個以上のレジスタのサブワードの中から演算対象を指定するように構成したりしてもよい。
【００８１】
また、演算方法情報で指定する演算方法に他の演算を追加したり、定義済みの演算を削除したりしてもよい。例えば、ローテート演算を追加したり、乗算を削除したりしてもよい。演算の種類が減ると、並列演算器の回路規模が減るので、プログラムに適した演算の種類を定義することで、回路規模を抑えたまま少ない実行命令数でプログラムを実行できるプロセッサを実現できる。
【００８２】
なお、本発明は演算器が一つの場合や、演算器数とレジスタ中のサブワードの数が異なる場合に適用してもよい。
また、並列演算器中のサブワード演算器を連結して動作させることで、異なるビット幅のデータを演算できるようにしてもよい。例えば、１６ビットのサブワード演算器を四つ含む並列演算器において、２並列の３２ビット演算、及び、１並列の６４ビット演算も行えるように構成してもよい。
このように、本発明は様々な変形が可能である。
【００８３】
この出願は、２００８年１２月１１日に出願された日本出願特願２００８−３１６０４４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００８４】
本発明によれば、映像や音楽のデータの符号化装置や復号化装置、エンジン制御装置を含むディジタル信号処理装置におけるＦＦＴ処理といった用途に適用できる。
【符号の説明】
【００８５】
２    メモリ
６    ストレージユニット
８    演算情報
１０、２１０、３１０、４１０    プロセッサ
２０、２２０、４２０    プロセッサ制御ユニット
４０    演算ユニット
４２    並列演算器
４４    データ選択器
６０    命令語
７２    並列演算器制御ユニット
１０１    データ選択器制御ユニット
７３〜７６    サブワード演算器
１０２〜１０９    データセレクタ
【図１】
2010067522.tif 000003
【図２】
2010067522.tif 000004
【図３】
2010067522.tif 000005
【図４】
2010067522.tif 000006
【図５】
2010067522.tif 000007
【図６】
2010067522.tif 000008
【図７】
2010067522.tif 000009
【図８】
2010067522.tif 000010
【図９】
2010067522.tif 000011
【図１０】
2010067522.tif 000012
【図１１】
2010067522.tif 000013
【図１２】
2010067522.tif 000014
【図１３】
2010067522.tif 000015
【図１４】
2010067522.tif 000016
【図１５】
2010067522.tif 000017
【図１６】
2010067522.tif 000018
【図１７Ａ】
2010067522.tif 000019
【図１７Ｂ】
2010067522.tif 000020
【図１７Ｃ】
2010067522.tif 000021
【図１８】
2010067522.tif 000022
【図１９】
2010067522.tif 000023
【図２０】
2010067522.tif 000024
【図２１】
2010067522.tif 000025
【図２２】
2010067522.tif 000026
【図２３】
2010067522.tif 000027
【図２４】
2010067522.tif 000028
【手続補正書】
【提出日】平成23年6月13日(2011.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算ユニットと、
並列演算の対象である入力データを含むストレージユニットと、
前記ストレージユニットから入力データを読み込み、演算を行い、出力データを前記ストレージユニットに書き込むように前記演算ユニットを制御するプロセッサ制御ユニットと、を備え、
前記演算ユニットは、所定の順序にて入力されるＫ個の入力データ（Ｋは１以上の整数）に対して、並列に演算処理を行うＬ個の演算器（Ｌは１以上の整数）を有し、
前記演算器はＭ個（Ｍは１以上の整数）の入力データに対して演算を行うように構成され、
演算対象情報は、前記演算器のそれぞれへ入力する前記Ｋ個のうち前記Ｍ個の入力データの組み合わせ及びそれらの入力順を表す情報であり、
演算方法情報は、前記演算器のそれぞれの演算の種類を表す情報であって、
前記演算ユニットは、
前記複数の入力データのうち、前記演算対象情報により前記演算器ごとに指定された任意の位置にある入力データを、演算の対象として、前記演算器ごとに前記演算対象情報によって指定された順番で選択するデータ選択手段と、
前記演算器を含み、前記データ選択手段によって選択されたデータに対して、前記演算方法情報により指定されたＬ個の演算を、前記各演算器において並列に実行する並列演算手段と、を有し、
前記演算方法情報及び前記演算対象情報が、
複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタに格納されることを特徴とするプロセッサ。
【請求項２】
前記演算対象情報は、前記Ｋ個の入力データのうちいずれか二つを指す情報の組（Ｍ＝２）であり、
前記並列演算手段中の各演算器は、二つのデータを入力とし、
前記データ選択手段は、前記演算器ごとに二つずつデータを選択して出力することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記演算対象情報及び前記演算方法情報は命令ごとに定められており、
前記プロセッサ制御ユニットから前記演算ユニットに与えられることを特徴とする請求項１又は２記載のプロセッサ。
【請求項４】
前記演算方法情報及び前記演算対象情報が、
前記プロセッサが入力とするプログラム中の命令語に格納されることを特徴とする請求項１乃至３のいずれか１項に記載のプロセッサ。
【請求項５】
前記演算方法情報及び前記演算対象情報が、
専用のレジスタファイル中のレジスタに格納されることを特徴とする請求項１乃至３のいずれか１項に記載のプロセッサ。
【請求項６】
前記演算方法情報及び前記演算対象情報が、
前記プロセッサに接続されたメモリ中の専用の演算情報領域に格納されることを特徴とする請求項１乃至３のいずれか１項に記載のプロセッサ。
【請求項７】
前記演算方法情報と前記演算対象情報とが、
複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタか、専用のレジスタファイル中のレジスタか、前記プロセッサに接続されたメモリ中の専用の演算情報領域か、のいずれかの場所のうちそれぞれ異なる場所に格納されたことを特徴とする請求項１乃至３のいずれか１項に記載のプロセッサ。
【請求項８】
データ並列演算方法を実行する演算ユニットと、
並列演算の対象である入力データを含むストレージユニットと、
前記ストレージユニットから入力データを読み込み、演算を行い、出力データを前記ストレージユニットに書き込むように前記演算ユニットを制御するプロセッサ制御ユニットと、を有するプロセッサを用いた並列演算方法であって、
前記データ並列演算方法は、
所定の順序にて入力されるＫ個の入力データの（Ｋは１以上の整数）うち、Ｍ個（Ｍは１以上の整数）の入力データの組み合わせ及びそれらの入力順を表す演算対象情報によって、それぞれが前記Ｍ個の入力データに対して演算を行うように構成されたＬ個（Ｌは１以上の整数）の演算器ごとに指定された任意の位置にある入力データを、前記演算器のそれぞれでの演算の対象とするＭ個の入力データとして、前記演算器ごとに前記演算対象情報によって指定された順番で選択し、
選択されたデータに対して、前記演算器のそれぞれの演算の種類を表す演算方法情報によって指定されたＬ個の演算を、前記各演算器において並列に実行するものであって、
前記演算方法情報及び前記演算対象情報を、複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタに格納することを特徴とする並列演算方法。
【請求項９】
前記演算対象情報は、前記Ｋ個の入力データのうちいずれか二つを指す情報の組（Ｍ＝２）であり、
前記各演算器は、二つのデータを入力とすることを特徴とする請求項８記載の並列演算方法。
【請求項１０】
前記演算対象情報及び前記演算方法情報を命令ごとに定め、
前記プロセッサ制御ユニットから前記演算ユニットに与えることを特徴とする請求項１８又は９記載の並列演算方法。
【請求項１１】
前記演算方法情報及び前記演算対象情報を、前記プロセッサが入力とするプログラム中の命令語に格納することを特徴とする請求項８乃至１０のいずれか１項に記載の並列演算方法。
【請求項１２】
前記演算方法情報及び前記演算対象情報を、
専用のレジスタファイル中のレジスタに格納することを特徴とする請求項８乃至１０のいずれか１項に記載の並列演算方法。
【請求項１３】
前記演算方法情報及び前記演算対象情報を、
前記プロセッサに接続されたメモリ中の専用の演算情報領域に格納することを特徴とする請求項８乃至１０のいずれか１項に記載の並列演算方法。
【請求項１４】
前記演算方法情報と前記演算対象情報とを、
複数のレジスタを備えた汎用レジスタファイルとして実現された前記ストレージユニットの前記汎用レジスタファイル中のレジスタか、専用のレジスタファイル中のレジスタか、前記プロセッサに接続されたメモリ中の専用の演算情報領域か、のいずれかの場所のうちそれぞれ異なる場所に格納することを特徴とする請求項８乃至１０のいずれか１項に記載の並列演算方法。
【国際調査報告】
2010067522.tif 000029
2010067522.tif 000030