(57)【要約】【課題】処理ステップ数の低減およびプログラムの簡素化を図るとともに製造コストを低減するのに好適な並列演算処理装置を提供する。【解決手段】ＳＩＭＤ型プロセッサ１００は、４つのＰＥ０〜３と、命令コードをデコードして各ＰＥ０〜３の動作を制御する制御装置１１０とで構成されている。各ＰＥ０〜３は、フラグビットを記憶するためのフラグビット記憶部１４と、フラグビット記憶部１４のフラグビットに基づいてそのＰＥの演算対象となるデータを演算対象オペランドのなかから選択する演算部１２とを備える。【選択図】  図１
2004334297.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算器を備え、単一の命令コードに基づいて、前記複数の演算器を並列に動作させて複数のデータを並列に処理する装置であって、
前記複数のデータは、前記各演算器に対応したサブセットを含み、
前記各演算器は、フラグ情報を記憶するためのフラグ情報記憶手段と、前記フラグ情報記憶手段のフラグ情報に基づいて当該演算器の演算対象となるデータを当該演算器に対応するサブセットのなかから選択するデータ選択手段とを有することを特徴とする並列演算処理装置。
【請求項２】
請求項１において、
前記データ選択手段は、前記フラグ情報が第１の状態であるときは、前記複数のデータのうち当該演算器に対応する第１の位置のデータを取得し、前記フラグ情報が第２の状態であるときは、前記複数のデータのうち当該演算器に対応する第２の位置のデータを取得するようになっていることを特徴とする並列演算処理装置。
【請求項３】
単一の命令コードに基づいて、複数の演算器を並列に動作させて複数のデータを並列に処理する方法であって、
前記複数のデータは、前記各演算器に対応したサブセットを含み、
前記各演算器ごとにフラグ情報を記憶するフラグ情報記憶ステップと、
前記各演算器ごとに、前記フラグ情報記憶ステップで記憶したフラグ情報のうち当該演算器に対応するものに基づいて、当該演算器の演算対象となるデータを当該演算器に対応するサブセットのなかから選択するデータ選択ステップとを含むことを特徴とする並列演算処理方法。
【請求項４】
請求項３において、
前記データ選択ステップは、前記各演算器ごとに、当該演算器に対応するフラグ情報が第１の状態であるときは、前記複数のデータのうち当該演算器に対応する第１の位置のデータを取得し、当該演算器に対応するフラグ情報が第２の状態であるときは、前記複数のデータのうち当該演算器に対応する第２の位置のデータを取得することを特徴とする並列演算処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、単一の命令コードに基づいて複数のデータを並列に処理する装置および方法に係り、特に、処理ステップ数の低減およびプログラムの簡素化を図るとともに製造コストを低減するのに好適な並列演算処理装置および並列演算処理方法に関する。
【０００２】
【従来の技術】
ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ  ｓｔｒｅａｍ）型プロセッサは、複数のプロセッシング・エレメント（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）（以下、ＰＥと略記する。）を備え、演算対象となる複数のデータを同一の命令で並列に処理するプロセッサである。そのため、条件分岐命令のように各ＰＥごとに異なる処理を単一の命令では実行することができない。例えば、条件が真なら第１の値を用いて演算を行い、条件が偽なら第２の値を用いて演算を行うということを各ＰＥごとに独立に行うためには、マスク演算を利用して４つの処理を経なければならない。
【０００３】
従来のＳＩＭＤ型プロセッサの構成を図６を参照しながら説明する。なお、説明の理解を容易にするため、以下、ＰＥが４つの場合の構成を例にとって説明する。実際には、さらに複数のＰＥを備えているものもある。
図６は、従来のＳＩＭＤ型プロセッサ２００の構成を示すブロック図である。
ＳＩＭＤ型プロセッサ２００は、図６に示すように、４つのＰＥ０〜３と、命令コードをデコードして各ＰＥ０〜３の動作を制御する制御装置２１０とで構成されており、データを転送するための信号線であるバス３９でＤ−ＲＯＭ３２ａ、Ｐ−ＲＯＭ３２ｂ、Ｄ−ＲＡＭ３４ａおよびＰ−ＲＡＭ３４ｂと相互にかつデータ授受可能に接続されている。そして、単一の命令コードに基づいて、演算対象となる複数のデータ（以下、演算対象オペランドという。）を読み込み、読み込んだ演算対象オペランドの各データをＰＥ０〜３で並列に処理するようになっている。
【０００４】
各ＰＥ０〜３は、複数のレジスタと、マスク演算に必要なマスク演算回路とを有し、制御装置２１０の制御により、Ｄ−ＲＡＭ３４ａのデータをレジスタに読み込み、レジスタのデータに対してマスク演算その他の演算を行い、演算結果をレジスタに格納するようになっている。
マスク演算回路は、マスクベクトル（後述）を生成するマスクベクトル生成回路と、論理積（ＡＮＤ）演算を行うＡＮＤ回路と、論理和（ＯＲ）演算を行うＯＲ回路とで構成されている。
【０００５】
各ＰＥ０〜３ごとに異なる処理を実行する場合を図７ないし図１３を参照しながら説明する。
図７は、プロセッサを用いて処理させるための演算処理プログラムの例である。
図７の演算処理プログラムの目的は、各々Ｎ（＝８０）個の要素をもつデータＡ，Ｂ，Ｘ，Ｙをもとに、要素を特定する添字「ｉ」ごとに、所定条件の成立の有無に応じて演算対象となるデータを選択し、データＺに格納することである。
【０００６】
図７の演算処理プログラムのデータと処理は、すべて添字「ｉ」に対して相関をもたない。すなわち、異なる「ｉ」ごとに独立して演算処理を行うことが可能であり、図７の演算処理プログラムは、Ｎ回の繰り返しを伴う処理をＭ個の並列プロセッサを用いることで、ＮがＭの倍数の場合、繰り返しを伴う処理をＮ／Ｍ回に低減させることが可能である（それ以外ではＮ／Ｍ＋１回となる。以下、単純化のためＮはプロセッサ並列度の倍数と仮定する。）。
【０００７】
図８は、図７の演算処理プログラムを４並列、すなわちＰＥを４個もつＳＩＭＤプロセッサ上で処理する際に、その過程を実際のＳＩＭＤプロセッサ上での処理に即したかたちで書き直したものである。
まず、図８においては、ループカウンタ「ｉ」による繰り返しは、４個のＰＥで並列処理されることから、ループカウンタ「ｉ」の増分ステップは、「１」から「４」となり、図７中で「ｉ＋＋」と記述されている部分が「ｉ＋＝４」と変更される。これは、並列数４のプロセッサを用いることで繰り返しを伴う処理がＮ／４回に減少することに相当する。
【０００８】
ここで、図８中で宣言されている変数「ｊ」に関連した処理はＳＩＭＤプロセッサ上では、各々の演算が「ｊ」番目のＰＥで処理されることを表しており、繰り返しのためのループカウンタではない。また、配列変数「ａ」、「ｂ］、「ｘ」、［ｙ」、「ｚ」は、ＰＥが取り扱うレジスタに相当する。ａ［０］、ｂ［０］、ｘ［０］、ｙ［０］、ｚ［０］は、ＰＥ０に属するレジスタを表し、ａ［１］、ｂ［１］、ｘ［１］、ｙ［１］、ｚ［１］は、ＰＥ１に属するレジスタを表し、ａ［２］、ｂ［２］、ｘ［２］、ｙ［２］、ｚ［２］は、ＰＥ２に属するレジスタを表し、ａ［３］、ｂ［３］、ｘ［３］、ｙ［３］、ｚ［３］は、ＰＥ３に属するレジスタを表す。
【０００９】
ステップＳ１００は、Ｄ−ＲＡＭ３４ａのデータを各ＰＥ０〜３のレジスタに格納するロード処理相当部であり、ステップＳ１０２は、所定条件の成立の有無に応じて演算対象となるデータを選択する演算処理相当部であり、ステップＳ１０４は、各ＰＥ０〜３のレジスタの内容をＤ−ＲＡＭ３４ａに格納するストア処理相当部である。
【００１０】
次に、ステップＳ１００のロード処理相当部について詳細に説明する。
ステップＳ１００のロード処理相当部は、ループカウンタ変数「ｊ」によって繰り返し処理が行われるのではなく、実際には「ｊ」番目のＰＥに処理が割り振られ並列に動作する。すなわち、ステップＳ２００の処理は、「ａ［ｊ］＝Ａ［ｉ＋ｊ］」という処理がｊ＝０〜３の４回繰り返して処理が行われるのではなく、「ａ［０］＝Ａ［ｉ＋０］」、「ａ［１］＝Ａ［ｉ＋１］」、「ａ［２］＝Ａ［ｉ＋２］」および「ａ［３］＝Ａ［ｉ＋３］」という処理が各ＰＥ０〜３で同時並行して実行される。
【００１１】
同様に、ステップＳ２０２，Ｓ２０４，Ｓ２０６についても各ＰＥ０〜３で同時並列処理される。このように、Ｓ２００，Ｓ２０２，Ｓ２０４，Ｓ２０６のような単一の命令で各ＰＥ０〜３が複数のデータを取り扱うのがＳＩＭＤプロセッサの基本原理である。
次に、ステップＳ１０２の処理の前にステップＳ４００のストア処理相当部について説明する。
【００１２】
ステップＳ４００の処理もステップＳ１００のロード処理相当部と同じように、ループカウンタ変数「ｊ」によって繰り返し処理が行われるのではなく、実際には「ｊ」番目のＰＥに処理が割り振られ並列に動作する。すなわち、「Ｚ［ｉ＋ｊ］＝ｚ［ｊ］」という処理がｊ＝０〜３の４回繰り返して処理が行われるのではなく、「Ｚ［ｉ＋０］＝ｚ［０］」、「Ｚ［ｉ＋１］＝ｚ［１］」、「Ｚ［ｉ＋２］＝ｚ［２］」および「Ｚ［ｉ＋３］＝ｚ［３］」という処理が各ＰＥ０〜３で同時並行して実行される。
【００１３】
戻って、ステップＳ１０２の処理について詳細に説明する。
ステップＳ１０２の処理内容も各々のデータ間に相関がないため、ステップＳ１００やステップＳ１０４と同じように一見するとＳＩＭＤプロセッサによる処理が可能なように見受けられるが、ステップＳ３００の処理結果に応じてステップＳ３０２を実行しなければならないＰＥと、ステップＳ３０４を実行しなければならないＰＥが現れるため、そのままでは単一の命令を旨とするＳＩＭＤプロセッサでの処理は行えない。
【００１４】
この問題を解決するために従来のＳＩＭＤプロセッサでは、マスク演算処理と呼ばれる技法を用いて処理をしていた。
ステップＳ１０２の処理をマスク演算を用いて記述し直したものを図１３に示し、その詳細について説明する。
図９は、ＰＥ０〜３でマスクベクトルを生成する場合を示す図である。
【００１５】
マスク演算のうち第１の処理では、図９に示すように、各ＰＥ０〜３ごとに、条件の成立の有無に応じたマスクベクトルを生成する。マスクベクトルとは、変数ｘ［］，ｙ［］，ｚ［］のデータ長に応じたビット数を有し、それらすべてのビットが「１」または「０」となるデータである。各ＰＥ０〜３では、変数ａ［ｊ］の値が変数ｂ［ｊ］の値よりも小さいときは、条件が真であるとして、すべてのビットが「１」となるマスクベクトルを生成する。また、変数ａ［ｊ］の値が変数ｂ［ｊ］の値以上であるときは、条件が偽であるとして、すべてのビットが「０」となるマスクベクトルを生成する。図９の例では、ＰＥ０、ＰＥ１およびＰＥ３については条件が真となっているので、すべてのビットが「１」となるマスクベクトルが生成されるのに対して、ＰＥ２については条件が偽となっているので、すべてのビットが「０」となるマスクベクトルが生成される。
【００１６】
図１０は、ＰＥ０〜３で変数ｘ［ｊ］の値とマスクベクトルとを論理積演算する場合を示す図である。
マスク演算のうち第２の処理では、図１０に示すように、各ＰＥ０〜３ごとに、条件が真の場合にＰＥ０〜３の各レジスタに代入する値である変数ｘ［ｊ］の値と、第１の処理で生成したマスクベクトルとの論理積をとる。図１０の例では、ＰＥ０、ＰＥ１およびＰＥ３についてはマスクベクトルが「１」となっているので、論理積演算の結果として変数ｘ［ｊ］の値が出力されるのに対して、ＰＥ２についてはマスクベクトルが「０」となっているので、論理積演算の結果としてマスクベクトルの値「０」が出力される。
【００１７】
図１１は、ＰＥ０〜３で変数ｙ［ｊ］の値とマスクベクトルの反転値とを論理積演算する場合を示す図である。
マスク演算のうち第３の処理では、図１１に示すように、各ＰＥ０〜３ごとに、条件が偽の場合にＰＥ０〜３の各レジスタに代入する値である変数ｙ［ｊ］の値と、第１の処理で生成したマスクベクトルの反転値との論理積をとる。図１１の例では、ＰＥ０、ＰＥ１およびＰＥ３についてはマスクベクトルの反転値が「０」となるので、論理積演算の結果としてマスクベクトルの反転値「０」が出力されるのに対して、ＰＥ２についてはマスクベクトルの反転値が「１」となるので、論理積演算の結果として変数ｙ［ｊ］の値が出力される。
【００１８】
図１２は、ＰＥ０〜３で第２の処理の演算結果と第３の処理の演算結果とを論理和演算する場合を示す図である。
マスク演算のうち第４の処理では、図１２に示すように、各ＰＥ０〜３ごとに、第２の処理の演算結果と第３の処理の演算結果との論理和をとる。図１２の例では、ＰＥ０、ＰＥ１およびＰＥ３については、第２の処理の演算結果が変数ｘ［ｊ］の値であり、第３の処理の演算結果がマスクベクトルの反転値「０」であるので、論理和演算の結果として変数ｘ［ｊ］の値が出力されるのに対して、ＰＥ２については、第２の処理の演算結果がマスクベクトル「０」であり、第３の処理の演算結果が変数ｙ［ｊ］の値であるので、論理和演算の結果として変数ｙ［ｊ］の値が出力される。
【００１９】
したがって、ステップＳ１０２のデータ演算処理をマスク演算を用いた処理として書き換えると、図１３に示すようになる。
図１３は、マスク演算を用いたデータ演算処理を示すプログラムである。
データ演算処理は、ステップＳ１０２において実行されると、図１３に示すように、まず、配列型の変数ｔ［４］を確保し、ループカウンタ変数ｊに「０」を設定し、ステップＳ３１０に移行するようになっている。
【００２０】
ステップＳ３１０では、変数ａ［ｊ］の値が変数ｂ［ｊ］の値よりも小さいときは、すべてのビットが「１」となるマスクベクトルを変数ｔ［ｊ］に設定し、変数ａ［ｊ］の値が変数ｂ［ｊ］の値以上であるときは、すべてのビットが「０」となるマスクベクトルを変数ｔ［ｊ］に設定し、ステップＳ３１２に移行する。なお、図１３においては、すべてのビットが「１」となるマスクベクトルを補数表現しているため「−１」と表記している。
【００２１】
ステップＳ３１２では、変数ｘ［ｊ］の値と変数ｔ［ｊ］の値との論理積をとったものを変数ｘ［ｊ］の新たな値として設定し、ステップＳ３１４に移行して、変数ｙ［ｊ］の値と変数ｔ［ｊ］の反転値との論理積をとったものを変数ｙ［ｊ］の新たな値として設定し、ステップＳ３１６に移行して、変数ｘ［ｊ］の値と変数ｙ［ｊ］の値との論理和をとったものを変数ｚ［ｊ］の値として設定する。
【００２２】
なお、従来のＳＩＭＤ型プロセッサについては、例えば、非特許文献１に開示されている技術が広く知られている。
【００２３】
【非特許文献１】
「インテル（Ｒ）アーキテクチャ最適化リファレンスマニュアル」５−２２ページ「条件付移動」、ｈｔｔｐ：／／ｗｗｗ．ｉｎｔｅｌ．ｃｏ．ｊｐ／ｊｐ／ｄｅｖｅｌｏｐｅｒ／ｄｏｗｎｌｏａｄ／ｉｎｄｅｘ．ｈｔｍ、資料番号：７３０７９５Ｊ−００１
【００２４】
【発明が解決しようとする課題】
このように、従来のＳＩＭＤ型プロセッサ２００では、各ＰＥ０〜３ごとに条件の成立の有無に応じて演算対象となるデータを選択する処理を実行する場合に、マスク演算として４つの処理を経なければならないため、プログラムとしてマスクベクトル生成命令語および論理演算命令語を用意し、さらに、ＳＩＭＤ型プロセッサ２００にマスク演算回路を実装する必要がある。したがって、処理ステップ数が大きくなるとともにプログラムが煩雑となり、マスク演算回路の実装にコストを要するという問題があった。
【００２５】
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、処理ステップ数の低減およびプログラムの簡素化を図るとともに製造コストを低減するのに好適な並列演算処理装置および並列演算処理方法を提供することを目的としている。
【００２６】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る請求項１記載の並列演算処理装置は、複数の演算器を備え、単一の命令コードに基づいて、前記複数の演算器を並列に動作させて複数のデータを並列に処理する装置であって、前記複数のデータは、前記各演算器に対応したサブセットを含み、前記各演算器は、フラグ情報を記憶するためのフラグ情報記憶手段と、前記フラグ情報記憶手段のフラグ情報に基づいて当該演算器の演算対象となるデータを当該演算器に対応するサブセットのなかから選択するデータ選択手段とを有する。
【００２７】
このような構成であれば、各演算器についてのフラグ情報が各フラグ情報記憶手段に記憶され、単一の命令コードが与えられると、各演算器では、データ選択手段により、フラグ情報記憶手段のフラグ情報に基づいてその演算器の演算対象となるデータがその演算器に対応するサブセットのなかから選択される。
これにより、条件の成立の有無を示すフラグ情報を各フラグ情報記憶手段に設定するだけで、各演算器ごとに、条件の成立の有無に応じて演算対象となるデータを単一の命令コードで選択することができる。
【００２８】
ここで、フラグ情報は、演算器の演算対象となるデータをサブセットのなかから選択するのに必要な情報であって、例えば、「０」または「１」の２値の状態を取り得る情報であってもよいし、より多値の状態を取り得る情報であってもよい。以下、請求項３記載の並列演算処理方法において同じである。
さらに、本発明に係る請求項２記載の並列演算処理装置は、請求項１記載の並列演算処理装置において、前記データ選択手段は、前記フラグ情報が第１の状態であるときは、前記複数のデータのうち当該演算器に対応する第１の位置のデータを取得し、前記フラグ情報が第２の状態であるときは、前記複数のデータのうち当該演算器に対応する第２の位置のデータを取得するようになっている。
【００２９】
このような構成であれば、各演算器では、設定されたフラグ情報が第１の状態であると、データ選択手段により、複数のデータのうちその演算器に対応する第１の位置のデータが取得される。また、設定されたフラグ情報が第２の状態であると、データ選択手段により、複数のデータのうちその演算器に対応する第２の位置のデータが取得される。
【００３０】
一方、上記目的を達成するために、本発明に係る請求項３記載の並列演算処理方法は、単一の命令コードに基づいて、複数の演算器を並列に動作させて複数のデータを並列に処理する方法であって、前記複数のデータは、前記各演算器に対応したサブセットを含み、前記各演算器ごとにフラグ情報を記憶するフラグ情報記憶ステップと、前記各演算器ごとに、前記フラグ情報記憶ステップで記憶したフラグ情報のうち当該演算器に対応するものに基づいて、当該演算器の演算対象となるデータを当該演算器に対応するサブセットのなかから選択するデータ選択ステップとを含む。
【００３１】
さらに、本発明に係る請求項４記載の並列演算処理方法は、請求項３記載の並列演算処理方法において、前記データ選択ステップは、前記各演算器ごとに、当該演算器に対応するフラグ情報が第１の状態であるときは、前記複数のデータのうち当該演算器に対応する第１の位置のデータを取得し、当該演算器に対応するフラグ情報が第２の状態であるときは、前記複数のデータのうち当該演算器に対応する第２の位置のデータを取得する。
【００３２】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照しながら説明する。図１ないし図５は、本発明に係る並列演算処理装置および並列演算処理方法の実施の形態を示す図である。
本実施の形態は、本発明に係る並列演算処理装置および並列演算処理方法を、図１に示すように、条件の成立の有無に応じて演算対象となるデータを選択する処理をＳＩＭＤ型プロセッサ１００に実行させる場合について適用したものである。
【００３３】
まず、本発明に係るＳＩＭＤ型プロセッサ１００の構成を図１を参照しながら説明する。なお、発明の理解を容易にするため、以下、ＰＥが４つの場合の構成を例にとって説明する。実際には、さらに複数のＰＥを備えていてもよい。
図１は、本発明に係るＳＩＭＤ型プロセッサ１００の構成を示すブロック図である。
【００３４】
ＳＩＭＤ型プロセッサ１００は、図１に示すように、４つのＰＥ０〜３と、命令コードをデコードして各ＰＥ０〜３の動作を制御する制御装置１１０とで構成されており、データを転送するための信号線であるバス３９でＤ−ＲＯＭ３２ａ、Ｐ−ＲＯＭ３２ｂ、Ｄ−ＲＡＭ３４ａおよびＰ−ＲＡＭ３４ｂと相互にかつデータ授受可能に接続されている。そして、単一の命令コードに基づいて、演算対象オペランドを読み込み、読み込んだ演算対象オペランドの各データをＰＥ０〜３で並列に処理するようになっている。
【００３５】
次に、ＰＥ０の構成を図２を参照しながら詳細に説明する。なお、各ＰＥ０〜３は、いずれも同一機能を有して構成されているため、以下、ＰＥ０の構成について説明し、ＰＥ１〜３の構成については説明を省略する。
図２は、ＰＥ０の構成を示すブロック図である。
ＰＥ０は、図２に示すように、複数のレジスタ１０と、レジスタ１０のデータに対して演算を行う演算部１２と、フラグビットを記憶するためのフラグビット記憶部１４とで構成されている。
【００３６】
演算部１２は、制御装置１１０の制御により、Ｄ−ＲＡＭ３４ａのデータをレジスタ１０に読み込み、レジスタ１０のデータに対して演算を行い、演算結果をレジスタ１０に格納するようになっている。また、フラグビットが「０」であるときは、演算対象オペランドのうちＰＥ０に対応する第１の位置のデータをレジスタ１０に読み込み、フラグビットが「１」であるときは、演算対象オペランドのうちＰＥ０に対応する第２の位置のデータをレジスタ１０に読み込むようになっている。
【００３７】
次に、ＳＩＭＤ型プロセッサ１００に実行させるための処理を図３を参照しながら説明する。
図３は、図８の演算処理のうち、ステップＳ１０２の部分を本発明によるＳＩＭＤプロセッサに実装する際の動作を表したものである。
図８の演算処理のうち、ステップＳ１００，Ｓ１０４については従来のＳＩＭＤプロセッサと同じように処理が行われる。
【００３８】
図３に表したデータ処理の特徴は、各ＰＥ内にプログラム上では、＿Ｂｏｏｌ型（Ｃ言語では、ＩＳＯ／ＩＥＣ  ９８９９：１９９９から導入された整数型であり、真偽値のみを表す）に相当するフラグを設け、条件判断の結果を格納することにある。
ここで、図８中で宣言されている変数「ｊ」に関連した処理は従来のＳＩＭＤプロセッサに関する説明で用いた意味と同じであり、各々の演算が「ｊ］番目のＰＥで処理されることを表しており、繰り返しのためのループカウンタではない。プログラム上の変数についても同様で、配列変数「ａ」、「ｂ」、「ｘ」、「ｙ」、「ｚ」は、ＰＥ取り扱うレジスタに相当する。ａ［０］、ｂ［０］、ｘ［０］、ｙ［０］、ｚ［０］は、ＰＥ０に属するレジスタを表し、ａ［１］、ｂ［１］、ｘ［１］、ｙ［１］、ｚ［１］は、ＰＥ１に属するレジスタを表し、ａ［２］、ｂ［２］、ｘ［２］、ｙ［２］、ｚ［２］は、ＰＥ２に属するレジスタを表し、ａ［３］、ｂ［３］、ｘ［３］、ｙ［３］、ｚ［３］は、ＰＥ３に属するレジスタを表す。加えて、「ｔ」は各ＰＥに含まれるフラグを表し、ｔ［０］はＰＥ０に属するフラグ、ｔ［１］はＰＥ１に属するフラグ、ｔ［２］はＰＥ２に属するフラグ、ｔ［３］はＰＥ３に属するフラグを意味する。
【００３９】
図３中ステップＳ３０２では、各ＰＥ０〜３がａ［ｊ］とｂ［ｊ］に相当するレジスタの値を比較し、ａ［ｊ］の値がｂ［ｊ］の値より小さい場合にはフラグｔ［ｊ］に真値「ｔｒｕｅ」を設定し、ａ［ｊ］の値がｂ［ｊ］の値以上である場合にはフラグｔ［ｊ］に偽値「ｆａｌｓｅ」を設定するという動作を同時並列に行う。
図４は、ステップＳ３２０に対応する本発明のＳＩＭＤプロセッサの動作とデータの流れを表したものである。
【００４０】
図４中では、演算結果のフラグ値として、ｔ［０］＝１、ｔ［１］＝１、ｔ［２］＝０、ｔ［３］＝１となる場合を表している。
次に、図３のステップＳ３２２では、各ＰＥ０〜３がステップＳ３２０で設定されたフラグ値ｔ［ｊ］に応じてｔ［ｊ］が真値であるときは、ｘ［ｊ］の値を演算結果レジスタｚ［ｊ］に代入し、ｔ［ｊ］が偽値であるときは、ｙ［ｊ］の値を演算結果レジスタｚ［ｊ］に代入する動作を同時並列に行う。
【００４１】
図５は、ステップＳ３２２に対応する本発明のＳＩＭＤプロセッサの動作とデータの流れを表したものである。
各ＰＥ０〜３では、フラグビットが設定され、単一の命令コードが与えられると、図５に示すように、演算部１２により、フラグビットが「１」であるときは、演算対象オペランドのうち変数ｘ［ｊ］の値がレジスタ１０に設定される。これに対して、フラグビットが「０」であるときは、演算対象オペランドのうち変数ｙ［ｊ］の値がレジスタ１０に設定される。図５の例では、ＰＥ０、ＰＥ１およびＰＥ３についてはフラグビットが「１」なので、それらＰＥの各レジスタ１０に変数ｘ［ｊ］の値が設定されるのに対して、ＰＥ２についてはフラグビットが「０」なので、ＰＥ２のレジスタ１０に変数ｙ［ｊ］の値が設定される。
【００４２】
したがって、従来のＳＩＭＤ型プロセッサ２００と比較した場合、従来のＳＩＭＤ型プロセッサ２００は、図１３に示すように、１つのＰＥにつきステップＳ３１０〜Ｓ３１６の４つの処理を要していたのに対して、本発明に係るＳＩＭＤ型プロセッサ１００は、図３に示すように、１つのＰＥにつきステップＳ３２０，Ｓ３２２の２つの処理で足りる。
【００４３】
このようにして、本実施の形態では、各ＰＥ０〜３は、フラグビットを記憶するためのフラグビット記憶部１４と、フラグビット記憶部１４のフラグビットに基づいてそのＰＥの演算対象となるデータを演算対象オペランドのなかから選択する演算部１２とを備える。
これにより、条件の成立の有無を示すフラグビットをフラグビット記憶部１４に設定するだけで、条件の成立の有無に応じて演算対象となるデータを単一の命令コードで選択することができる。したがって、従来に比して、処理ステップ数を低減することができるとともにプログラムを簡素化することができる。また、ＳＩＭＤ型プロセッサ１００にマスク演算回路を実装する必要がないので、従来に比して、製造コストを比較的低減することができる。
【００４４】
さらに、本実施の形態では、演算部１２は、フラグビットが「０」であるときは、演算対象オペランドのうちＰＥ０に対応する第１の位置のデータをレジスタ１０に読み込み、フラグビットが「１」であるときは、演算対象オペランドのうちＰＥ０に対応する第２の位置のデータをレジスタ１０に読み込むようになっている。
【００４５】
これにより、条件が真なら第１の値を用いて演算を行い、条件が偽なら第２の値を用いて演算を行うという条件分岐処理を単一の命令コードで実現することができる。
上記実施の形態において、ＰＥ０〜３は、請求項１ないし４記載の演算器に対応し、フラグビット記憶部１４は、請求項１記載のフラグ情報記憶手段に対応し、演算部１２は、請求項１または２記載のデータ選択手段に対応している。
【００４６】
なお、上記実施の形態においては、４つのＰＥを設けて構成したが、これに限らず、２つまたは３つのＰＥを設けて構成することもできるし、５つ以上のＰＥを設けて構成することもできる。
また、上記実施の形態においては、本発明に係る並列演算処理装置および並列演算処理方法を、図１に示すように、条件の成立の有無に応じて演算対象となるデータを選択する処理をＳＩＭＤ型プロセッサ１００に実行させる場合について適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合にも適用可能である。
【００４７】
【発明の効果】
以上説明したように、本発明に係る請求項１または２記載の並列演算処理装置によれば、条件の成立の有無を示すフラグ情報をフラグ情報記憶手段に設定するだけで、条件の成立の有無に応じて演算対象となるデータを単一の命令コードで選択することができる。したがって、従来に比して、処理ステップ数を低減することができるとともにプログラムを簡素化することができるという効果が得られる。また、マスク演算回路を実装する必要がないので、従来に比して、製造コストを比較的低減することができるという効果も得られる。
【００４８】
さらに、本発明に係る請求項２記載の並列演算処理装置によれば、条件が真なら第１の値を用いて演算を行い、条件が偽なら第２の値を用いて演算を行うという条件分岐処理を単一の命令コードで実現することができるという効果も得られる。
一方、本発明に係る請求項３または４記載の並列演算処理方法によれば、請求項１の並列演算処理装置と同等の効果が得られる。
【００４９】
さらに、本発明に係る請求項４記載の並列演算処理方法によれば、請求項２の並列演算処理装置と同等の効果も得られる。
【図面の簡単な説明】
【図１】本発明に係るＳＩＭＤ型プロセッサ１００の構成を示すブロック図である。
【図２】ＰＥ０の構成を示すブロック図である。
【図３】図８の演算処理のうち、ステップＳ１０２の部分を本発明によるＳＩＭＤプロセッサに実装する際の動作を表したものである。
【図４】ステップＳ３２０に対応する本発明のＳＩＭＤプロセッサの動作とデータの流れを表したものである。
【図５】ステップＳ３２２に対応する本発明のＳＩＭＤプロセッサの動作とデータの流れを表したものである。
【図６】従来のＳＩＭＤ型プロセッサ２００の構成を示すブロック図である。
【図７】プロセッサを用いて処理させるための演算処理プログラムの例である。
【図８】図７の演算処理プログラムを４並列、すなわちＰＥを４個もつＳＩＭＤプロセッサ上で処理する際に、その過程を実際のＳＩＭＤプロセッサ上での処理に即したかたちで書き直したものである。
【図９】ＰＥ０〜３でマスクベクトルを生成する場合を示す図である。
【図１０】ＰＥ０〜３で変数ｘ［ｊ］の値とマスクベクトルとを論理積演算する場合を示す図である。
【図１１】ＰＥ０〜３で変数ｙ［ｊ］の値とマスクベクトルの反転値とを論理積演算する場合を示す図である。
【図１２】ＰＥ０〜３で第２の処理の演算結果と第３の処理の演算結果とを論理和演算する場合を示す図である。
【図１３】マスク演算を用いたデータ演算処理を示すプログラムである。
【符号の説明】
１０                    レジスタ
１２                    演算部
１４                    フラグビット記憶部
３２ａ                  Ｄ−ＲＯＭ
３２ｂ                  Ｐ−ＲＯＭ
３４ａ                  Ｄ−ＲＡＭ
３４ｂ                  Ｐ−ＲＡＭ
１００，２００          ＳＩＭＤ型プロセッサ
１１０，２１０          制御装置
ＰＥ０〜３              プロセッシング・エレメント
【図１】
2004334297.tif 000003
【図２】
2004334297.tif 000004
【図３】
2004334297.tif 000005
【図４】
2004334297.tif 000006
【図５】
2004334297.tif 000007
【図６】
2004334297.tif 000008
【図７】
2004334297.tif 000009
【図８】
2004334297.tif 000010
【図９】
2004334297.tif 000011
【図１０】
2004334297.tif 000012
【図１１】
2004334297.tif 000013
【図１２】
2004334297.tif 000014
【図１３】
2004334297.tif 000015