(57)【要約】【課題】レジスタに余分なビットを設けることなく、演算にかかる時間を短縮すると共に、データの処理速度を速くする。【解決手段】  レジスタ９１−１および９１−４が、複数のデータのそれぞれを、演算における上位側へのシフトのビット数とオーバーフローの表現に必要なビット数とを加算したビット数の下位２ビットと上位６ビットとに分割し、レジスタ９１−１乃至９１−３がビット数毎に複数のデータの下位２ビットを格納し、レジスタ９１−４乃至９１−６がビット数毎に複数のデータの上位６ビットを格納し、レジスタ９１−６が、ビット数毎に格納されている複数のデータの下位２ビットに対して演算を適用し、レジスタ９１−３が、ビット数毎に格納されている複数のデータの上位６ビットに対して演算を適用し、レジスタ９１−３が２つの演算の結果を加算する。本発明はパーソナルコンピュータに適用することができる。【選択図】図３
2006085467.tif 000002
【特許請求の範囲】
【請求項１】
２進数で表現されている複数のデータのそれぞれを、前記データに適用される演算における上位側へのシフトのビット数と前記演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割手段と、
前記データのビット数毎に、複数の前記データの前記第１の値を格納する第１の格納手段と、
前記データのビット数毎に、複数の前記データの前記第２の値を格納する第２の格納手段と、
前記データのビット数毎に格納されている複数の前記データの前記第１の値に対して前記演算を適用する第１の演算手段と、
前記データのビット数毎に格納されている複数の前記データの前記第２の値に対して前記演算を適用する第２の演算手段と、
前記データ毎に、前記第１の演算手段による演算の結果および前記第２の演算手段による演算の結果を加算する加算手段と
を含むことを特徴とする情報処理装置。
【請求項２】
２進数で表現されている複数のデータのそれぞれを、前記データに適用される演算における上位側へのシフトのビット数と前記演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割ステップと、
前記データのビット数毎に、複数の前記データの前記第１の値を第１の格納手段に格納する第１の格納ステップと、
前記データのビット数毎に、複数の前記データの前記第２の値を第２の格納手段に格納する第２の格納ステップと、
前記第１の格納手段に前記データのビット数毎に格納されている複数の前記データの前記第１の値に対して前記演算を適用する第１の演算ステップと、
前記第２の格納手段に前記データのビット数毎に格納されている複数の前記データの前記第２の値に対して前記演算を適用する第２の演算ステップと、
前記データ毎に、前記第１の演算ステップによる演算の結果および前記第２の演算ステップによる演算の結果を加算する加算ステップと
を含むことを特徴とする情報処理方法。
【請求項３】
２進数で表現されている複数のデータのそれぞれを、前記データに適用される演算における上位側へのシフトのビット数と前記演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割ステップと、
前記データのビット数毎に、複数の前記データの前記第１の値を第１の格納手段に格納する第１の格納ステップと、
前記データのビット数毎に、複数の前記データの前記第２の値を第２の格納手段に格納する第２の格納ステップと、
前記第１の格納手段に前記データのビット数毎に格納されている複数の前記データの前記第１の値に対して前記演算を適用する第１の演算ステップと、
前記第２の格納手段に前記データのビット数毎に格納されている複数の前記データの前記第２の値に対して前記演算を適用する第２の演算ステップと、
前記データ毎に、前記第１の演算ステップによる演算の結果および前記第２の演算ステップによる演算の結果を加算する加算ステップと
を含むことを特徴とする情報処理をコンピュータに実行させるプログラムが記録されている記録媒体。
【請求項４】
２進数で表現されている複数のデータのそれぞれを、前記データに適用される演算における上位側へのシフトのビット数と前記演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割ステップと、
前記データのビット数毎に、複数の前記データの前記第１の値を第１の格納手段に格納する第１の格納ステップと、
前記データのビット数毎に、複数の前記データの前記第２の値を第２の格納手段に格納する第２の格納ステップと、
前記第１の格納手段に前記データのビット数毎に格納されている複数の前記データの前記第１の値に対して前記演算を適用する第１の演算ステップと、
前記第２の格納手段に前記データのビット数毎に格納されている複数の前記データの前記第２の値に対して前記演算を適用する第２の演算ステップと、
前記データ毎に、前記第１の演算ステップによる演算の結果および前記第２の演算ステップによる演算の結果を加算する加算ステップと
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および方法、記録媒体、並びにプログラムに関し、特に、より迅速に並列演算をすることができるようにした情報処理装置および方法、記録媒体、並びにプログラムに関する。
【背景技術】
【０００２】
従来、パーソナルコンピュータ（以下、PCと称する）などが整数型の並列演算を行う場合、整数型を表現するためのビット（bit）幅の他に、レジスタに余分なビットを設け、所定の演算によって、桁が上がってしまった数値を表現することが可能なようにする必要があった。これは、レジスタに余分なビットを設けないと、演算によって数値の桁が上がってしまうことで（オーバーフローが起こることで）、エラーが発生してしまうためである。
【０００３】
ここで、図１を参照して、オーバーフローの具体例を説明する。例えば、レジスタ１１−１およびレジスタ１１−２は、１２８ビットのレジスタであり、レジスタ１１−１およびレジスタ１１−２においては、８ビットの値が１６個格納され、１６並列で演算が行われる。
【０００４】
このとき、レジスタ１１−１に格納されている上位から９ビット目乃至１６ビット目の８ビットの値に、その８ビットの値に対応するレジスタ１１−２に格納されている上位から９ビット目乃至１６ビット目の８ビットの値が加算される場合、図１の下側で示されるように、８ビットの値の加算によって、オーバーフローが生じることが考えられる。オーバーフローが生じることで、図１の下側で示されるように加算された結果の表現には９ビットが必要となり、レジスタ１１−１の上位から８ビット目の値に加算の結果の影響が生じることになる。
【０００５】
換言すれば、図１の下側の斜線で示されるように、レジスタ１１−１では、算出された９ビットの値が、オーバーフローによって、並列に演算している隣の値を破壊してしまうことになる。したがって、レジスタ１１−１においては、扱うことが可能な最大の桁数を超えてしまい、エラーが発生する。
【０００６】
オーバーフローを補正する技術としては、例えば、特許文献１に、倍精度データの演算を行う場合に、オーバーフローが発生し、上位桁を最大値に設定するとき、下位桁を「１１１・・・」に設定し、上位桁を最小値に設定するとき、下位桁を「０００・・・」に設定する技術が開示されている。
【特許文献１】特開平７−１８２１４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
このように、整数型の並列演算においては、４並列、８並列、および１６並列で演算を行うことが可能であっても、整数型のビット幅とオーバーフローを避けるためのビット幅とをレジスタに設ける必要があり、並列演算の並列度を上げることができないという課題があった。
【０００８】
なお、ここで並列度とは、並列に演算することが可能な数値（ビット幅）の数を示している。
【０００９】
また、同様に、従来は、画像処理において、係数１：２：１を用いる３タップ（Tap）のローパスフィルタ（以下、LPFと称する）を画像の水平方向に対して実現する場合、レジスタにおいて、画素値の格納のための８ビット分に加え、オーバーフローを回避するための２ビット分の容量が必要となり、並列演算の並列度が下がってしまうという課題があった。
【００１０】
画像処理などの２次元データを並列演算する場合、メモリに記憶されている画像の画面の垂直方向に並んでいる画素値を取得し、取得した画面の素直方向に並んでいる画素値をレジスタに格納して、演算を行っていた。これにより、画素値の演算を行うためには、画面の垂直方向に並んでいる画素値の数だけ、レジスタの数が必要だった。
【００１１】
また、係数１：２：１を用いる３タップのLPFを画像の水平方向に対して実現する場合、画面上のレジスタにおける処理の方向（水平方向）に対して垂直に並ぶレジスタ（異なるレジスタ）にそれぞれ画素値を格納するため、３つのレジスタが演算で用いる画素値を保持するために必要になってしまう。
【００１２】
したがって、多くのレジスタが画素値の処理に利用され、レジスタの数が足りなくなってしまい、レジスタからメモリへ、またはメモリからレジスタへのデータの転送回数が増加してしまっていた。このデータの転送回数の増加によって、演算にかかる時間が長くなってしまうと共に、データの処理速度が遅くなってしまうという課題があった。
【００１３】
一般的なSIMD（Single Instruction/Multiple Data）演算方法においても、利用可能なレジスタの本数が足りない場合、レジスタの値を一時的にメモリに退避させる必要があるため、メモリからレジスタに値を転送し、演算し、またメモリに書き戻すという処理が連続して起こってしまい、演算にかかる時間が長くなってしまうという課題があった。
【００１４】
また、オーバーフローを避けるために、ビット幅をさらに長くし、例えば、１２８ビットのレジスタに、１６ビットの値が８個格納され、８並列で演算することが考えされるが、この場合、オーバーフローが発生しない小さな値でも、１６ビットで演算されるため、余ったビットだけ無駄が生じてしまうという課題があった。
【００１５】
本発明は、このような状況に鑑みてなされたものであり、レジスタに余分なビットを設けることなく、演算にかかる時間を短縮すると共に、データの処理速度を速くすることができるようにするものである。
【課題を解決するための手段】
【００１６】
本発明の情報処理装置は、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割手段と、データのビット数毎に、複数のデータの第１の値を格納する第１の格納手段と、データのビット数毎に、複数のデータの第２の値を格納する第２の格納手段と、データのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算手段と、データのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算手段と、データ毎に、第１の演算手段による演算の結果および第２の演算手段による演算の結果を加算する加算手段とを含むことを特徴とする。
【００１７】
本発明の情報処理方法は、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割ステップと、データのビット数毎に、複数のデータの第１の値を第１の格納手段に格納する第１の格納ステップと、データのビット数毎に、複数のデータの第２の値を第２の格納手段に格納する第２の格納ステップと、第１の格納手段にデータのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算ステップと、第２の格納手段にデータのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算ステップと、データ毎に、第１の演算ステップによる演算の結果および第２の演算ステップによる演算の結果を加算する加算ステップとを含むことを特徴とする。
【００１８】
本発明の記録媒体のプログラムは、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割ステップと、データのビット数毎に、複数のデータの第１の値を第１の格納手段に格納する第１の格納ステップと、データのビット数毎に、複数のデータの第２の値を第２の格納手段に格納する第２の格納ステップと、第１の格納手段にデータのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算ステップと、第２の格納手段にデータのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算ステップと、データ毎に、第１の演算ステップによる演算の結果および第２の演算ステップによる演算の結果を加算する加算ステップとを含むことを特徴とする。
【００１９】
本発明のプログラムは、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割する分割ステップと、データのビット数毎に、複数のデータの第１の値を第１の格納手段に格納する第１の格納ステップと、データのビット数毎に、複数のデータの第２の値を第２の格納手段に格納する第２の格納ステップと、第１の格納手段にデータのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算ステップと、第２の格納手段にデータのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算ステップと、データ毎に、第１の演算ステップによる演算の結果および第２の演算ステップによる演算の結果を加算する加算ステップとをコンピュータに実行させることを特徴とする。
【００２０】
本発明においては、２進数で表現されている複数のデータのそれぞれが、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割され、データのビット数毎に、複数のデータの第１の値が格納され、データのビット数毎に、複数のデータの第２の値が第格納され、データのビット数毎に格納されている複数のデータの第１の値に対して演算が適用され、データのビット数毎に格納されている複数のデータの第２の値に対して演算が適用され、データ毎に、複数のデータの第１の値に対して適用された演算の結果および複数のデータの第２の値に対して適用された演算の結果が加算される。
【発明の効果】
【００２１】
本発明によれば、オーバーフローによるエラーの発生を防ぐことができる。また、本発明によれば、レジスタに余分なビットを設けることなく、演算にかかる時間を短縮すると共に、データの処理速度を速くすることができる。
【発明を実施するための最良の形態】
【００２２】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００２３】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
【００２４】
請求項１に記載の情報処理装置（例えば、図２のパーソナルコンピュータ５１）は、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値（例えば、図１０Ｂのレジスタ９１−４の“ＸＸ”）と、残りの上位のビットで表される第２の値（例えば、図１０Ａのレジスタ９１−１の“ＸＸＸＸＸＸ”）とに分割する分割手段（例えば、図８のステップＳ３２の処理を実行するレジスタ９１−４およびレジスタ９１−１）と、データのビット数毎に、複数のデータの第１の値を格納する第１の格納手段（例えば、図８のステップＳ３４の処理を実行するレジスタ９１−１乃至９１−３）と、データのビット数毎に、複数のデータの第２の値を格納する第２の格納手段（例えば、図８のステップＳ３３の処理を実行するレジスタ９１−４乃至９１−６）と、データのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算手段（例えば、図９のステップＳ４４の処理を実行するレジスタ９１−４乃至９１−６）と、データのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算手段（例えば、図９のステップＳ３９の処理を実行するレジスタ９１−１乃至９１−３）と、データ毎に、第１の演算手段による演算の結果および第２の演算手段による演算の結果を加算する加算手段（例えば、図９のステップＳ４６の処理を実行するレジスタ９１−３とレジスタ９１−６）とを含むことを特徴とする。
【００２５】
請求項２に記載の情報処理方法は、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値（例えば、図１０Ｂのレジスタ９１−４の“ＸＸ”）と、残りの上位のビットで表される第２の値（例えば、図１０Ａのレジスタ９１−１の“ＸＸＸＸＸＸ”）とに分割する分割ステップ（例えば、図８のステップＳ３２の処理）と、データのビット数毎に、複数のデータの第１の値を第１の格納手段（例えば、図１０Ｂのレジスタ９１−４乃至レジスタ９１−６）に格納する第１の格納ステップ（例えば、図８のステップＳ３４の処理）と、データのビット数毎に、複数のデータの第２の値を第２の格納手段（例えば、図１０Ａのレジスタ９１−１乃至レジスタ９１−３）に格納する第２の格納ステップ（例えば、図８のステップＳ３３の処理）と、第１の格納手段にデータのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算ステップ（例えば、図９のステップＳ４４の処理）と、第２の格納手段にデータのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算ステップ（例えば、図９のステップＳ３９の処理）と、データ毎に、第１の演算ステップによる演算の結果および第２の演算ステップによる演算の結果を加算する加算ステップ（例えば、図９のステップＳ４６の処理）とを含むことを特徴とする。
【００２６】
請求項３に記載の記録媒体のプログラムは、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値（例えば、図１０Ｂのレジスタ９１−４の“ＸＸ”）と、残りの上位のビットで表される第２の値（例えば、図１０Ａのレジスタ９１−１の“ＸＸＸＸＸＸ”）とに分割する分割ステップ（例えば、図８のステップＳ３２の処理）と、データのビット数毎に、複数のデータの第１の値を第１の格納手段（例えば、図１０Ｂのレジスタ９１−４乃至レジスタ９１−６）に格納する第１の格納ステップ（例えば、図８のステップＳ３４の処理）と、データのビット数毎に、複数のデータの第２の値を第２の格納手段（例えば、図１０Ａのレジスタ９１−１乃至レジスタ９１−３）に格納する第２の格納ステップ（例えば、図８のステップＳ３３の処理）と、第１の格納手段にデータのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算ステップ（例えば、図９のステップＳ４４の処理）と、第２の格納手段にデータのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算ステップ（例えば、図９のステップＳ３９の処理）と、データ毎に、第１の演算ステップによる演算の結果および第２の演算ステップによる演算の結果を加算する加算ステップ（例えば、図９のステップＳ４６の処理）とを含むことを特徴とする。
【００２７】
請求項４に記載のプログラムは、２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値（例えば、図１０Ｂのレジスタ９１−４の“ＸＸ”）と、残りの上位のビットで表される第２の値（例えば、図１０Ａのレジスタ９１−１の“ＸＸＸＸＸＸ”）とに分割する分割ステップ（例えば、図８のステップＳ３２の処理）と、データのビット数毎に、複数のデータの第１の値を第１の格納手段（例えば、図１０Ｂのレジスタ９１−４乃至レジスタ９１−６）に格納する第１の格納ステップ（例えば、図８のステップＳ３４の処理）と、データのビット数毎に、複数のデータの第２の値を第２の格納手段（例えば、図１０Ａのレジスタ９１−１乃至レジスタ９１−３）に格納する第２の格納ステップ（例えば、図８のステップＳ３３の処理）と、第１の格納手段にデータのビット数毎に格納されている複数のデータの第１の値に対して演算を適用する第１の演算ステップ（例えば、図９のステップＳ４４の処理）と、第２の格納手段にデータのビット数毎に格納されている複数のデータの第２の値に対して演算を適用する第２の演算ステップ（例えば、図９のステップＳ３９の処理）と、データ毎に、第１の演算ステップによる演算の結果および第２の演算ステップによる演算の結果を加算する加算ステップ（例えば、図９のステップＳ４６の処理）とを実行させる。
【００２８】
以下に、本発明の実施の形態について図面を参照して説明する。
【００２９】
図１は、本発明に係るPC５１の構成の例を示すブロック図である。
【００３０】
CPU（Central Processing Unit）６１は、ROM（Read Only Memory）６２に記憶されているプログラム、または記憶部６９からRAM（Random Access Memory）６３にロードされたプログラムに従って各種の処理を実行する。RAM６３にはまた、CPU６１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００３１】
CPU６１，ROM６２、およびRAM６３は、バス６４を介して相互に接続されている。このバス６４にはまた、入出力インターフェース６５も接続されている。
【００３２】
入出力インターフェース６５には、キーボード、マウスなどよりなる入力部６６，CRT（Cathode Ray Tube），LCD（Liquid Crystal Display）などよりなるディスプレイ、並びにスピーカなどよりなる出力部６７、モデム、ターミナルアダプタなどより構成される通信部６８、ハードディスクなどより構成される記憶部６９が接続されている。通信部６８は、図示せぬLAN（Local Area Network）やインターネットを介して他の装置との通信処理を行う。
【００３３】
入出力インターフェース６５にはまた、ドライブ７０が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア７１が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部６９にインストールされる。
【００３４】
図３は、PC５１のCPU６１の構成の例を示すブロック図である。
【００３５】
レジスタ９１−１乃至９１−ｎは、バス９６を介して供給された演算に必要な、２進数で表現される数値を記憶（格納）しておく記憶素子である。また、このレジスタ９１−１乃至９１−ｎのそれぞれは、例えば、１２８ビット（bit）であり、８ビットの値を１６個格納（記憶）可能なレジスタである。このとき、レジスタ９１−１乃至９１−ｎは、１６並列で演算を行うことができる。
【００３６】
ALU（Arithmetic and Logic Unit）９２は、供給されたデータに対して四則演算や論理演算などの各種の算術的な処理を実行する。
【００３７】
プログラムカウンタ９３は、CPU６１がプログラムを実行中に、何番目の命令を実行しているかを示すカウンタである。ROM６２またはRAM６３に格納されているプログラムから、プログラムカウンタ９３によって指示される命令が命令デコーダ９４に読み込まれる。
【００３８】
命令デコーダ９４は、ROM６２やRAM６３などのメモリから読み込まれたｍ桁の２進数およびビットパターンからなる命令（インストラクション）を解読して、命令によって指令された処理内容を特定する。命令デコーダ９４は、特定された処理内容を示す信号をCPUコントローラ９５に供給する。
【００３９】
CPUコントローラ９５は、命令デコーダ９４によって解読された命令に従って、必要な制御信号をレジスタ９１−１乃至９１−ｎ，ALU９２、プログラムカウンタ９３、命令デコーダ９４、データバスコントローラ９７、およびアドレスバスコントローラ９８に出力することによって、レジスタ９１−１乃至９１−ｎ，ALU９２、プログラムカウンタ９３、命令デコーダ９４、データバスコントローラ９７、およびアドレスバスコントローラ９８を制御する。
【００４０】
レジスタ９１−１乃至９１−ｎ、ALU９２、プログラムカウンタ９３、命令デコーダ９４は、バス９６を介して相互に接続されている。このバス９６にはまた、データバスコントローラ９７が接続されている。
【００４１】
データバスコントローラ９７は、CPUコントローラ９５からの制御信号によりバス６４における図示せぬデータバスを制御し、各種データをバス９６を介し、読み込んだデータをレジスタ９１−１乃至９１−ｎ、ALU９２、プログラムカウンタ９３、命令デコーダ９４に供給する。
【００４２】
また、データバスコントローラ９７は、CPUコントローラ９５からの制御信号を基に、レジスタ９１−１乃至９１−ｎ，ALU９２、またはプログラムカウンタ９３に格納されているデータをバス９６を介して読み出して、バス６４のデータバスを介して出力する。
【００４３】
アドレスバスコントローラ９８は、CPUコントローラ９５からの制御信号を基に、バス６４における図示せぬアドレスバスを制御し、ROM６２またはRAM６３上の、データを読み出すかまたはデータを書き込むアドレスを特定する。
【００４４】
以下、レジスタ９１−１乃至９１−ｎを個々に区別する必要のないとき、単に、レジスタ９１と称する。
【００４５】
図４のフローチャートを参照して、ROM６２またはRAM６３に記憶（実装）されているプログラムを実行するCPU６１による、レジスタ９１−１乃至９１−ｎにおける、オーバーフローが発生しないときの演算の処理を説明する。なお、この演算の処理は、１２８ビットのレジスタ９１において、係数１：２：１を用いる３タップ（Tap）のLPFの処理を、RAM６３に記憶されている各画素値が８ビットで表現される画像に対して水平方向に１６並列演算にて行う処理である。
【００４６】
また、所定の画像の画素値にLPFの処理を適用することは、例えば、画像の輝度変化の激しい部分を平滑化することを意味する。
【００４７】
ステップＳ１１において、CPUコントローラ９５は、アドレスバスコントローラ９８およびデータバスコントローラ９７を制御して、データバスコントローラ９７に、メモリであるRAM６３上の画像の画素値を画面の水平方向に取り出させる。なお、画像の画素値は２進数で表現される。
【００４８】
図５は、RAM６３に記憶されている画像の画素値の画面上の並びの例を示す図である。図５で示される、ａ［０］［０］乃至ａ［４］［９］のそれぞれは、RAM６３に記憶されている画像の８ビット（＝１バイト（byte））画素値を示している。以下、例えば、画素値であるａ［０］［０］を画素値ａ［０］［０］のように称する。
【００４９】
例えば、CPUコントローラ９５は、データバスコントローラ９７に、ステップＳ１１において、RAM６３に記憶され、画面の水平方向に並んでいる画素値、例えば、画素値ａ［０］［０］乃至ａ［０］［１５］を取り出させる。
【００５０】
ステップＳ１２において、CPUコントローラ９５は、データバスコントローラ９７を制御し、ステップＳ１１の処理で取り出された画素値、例えば、画素値ａ［０］［０］乃至ａ［０］［１５］を３つのレジスタ９１に格納させる。すなわち、図６で示されるように、３つのレジスタ９１、例えば、レジスタ９１−１乃至９１−３は画素値ａ［０］［０］乃至ａ［０］［１５］を順に格納する。
【００５１】
このとき、ステップＳ１１の処理で取り出された画素値ａ［０］［０］乃至ａ［０］［１５］は、画面の水平方向に並ぶ画素値であり、演算を進める方向に並ぶ画素値であるので、ステップＳ１２の処理において、画素値ａ［０］［０］乃至ａ［０］［１５］は、１つのレジスタ９１（３つのレジスタ９１−１乃至９１−３のそれぞれ）に格納される。
【００５２】
なお、ステップＳ１２において、CPUコントローラ９５は、データバスコントローラ９７に、画素値ａ［０］［０］乃至ａ［０］［１５］を１つのレジスタ９１に格納させ、そのレジスタ９１の値を他の２つのレジスタ９１にムーブするようにしても良い。
【００５３】
ステップＳ１３において、CPUコントローラ９５は、１つ目のレジスタ９１−１に、レジスタ９１−１に格納されている値、すなわち、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイト（＝８ビット）だけ左方向にロール（roll）させる。すなわち、レジスタ９１−１は、格納しているデータを左に８ビットシフトし、これによって、あふれた上位８ビットのデータを下位８ビットに格納する。
【００５４】
図７は、係数１：２：１でのLPFの演算方法を説明する図である。ステップＳ１３の処理において、CPUコントローラ９５が、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイトだけ左方向にロール（roll）させるとは、例えば、図７のレジスタ９１−１における矢印で示されるように、図６で示されるレジスタ９１−１の画素値ａ［０］［１］乃至ａ［０］［１５］のそれぞれが１つ（１バイト）だけ、左方向に移動し、画素値ａ［０］［０］が、レジスタ９１−１の下位８ビットに移動することを表す。
【００５５】
ステップＳ１４において、CPUコントローラ９５は、２つ目のレジスタ９１−２に、レジスタ９１−２に格納されている値、すなわち、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイト（＝８ビット）だけ右方向にロール（roll）させる。すなわち、レジスタ９１−２は、格納しているデータを右に８ビットシフトし、これによって、あふれた下位８ビットのデータを上位８ビットに格納する。
【００５６】
ここで、ステップＳ１４の処理において、CPUコントローラ９５が、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイトだけ右方向にロール（roll）させるとは、例えば、図７のレジスタ９１−２における矢印で示されるように、図６で示されるレジスタ９１−２の画素値ａ［０］［０］乃至ａ［０］［１４］のそれぞれが１つ（１バイト）だけ、右方向に移動し、画素値ａ［０］［１５］が、レジスタ９１−２の上位８ビットに移動することを表す。
【００５７】
ステップＳ１５において、CPUコントローラ９５は、レジスタ９１−１に、ステップＳ１３の処理により値がロールされた１つ目のレジスタ９１−１に格納されている値とステップＳ１４の処理により値がロールされた２つ目のレジスタ９１−２に格納されている値とを加算させる。すなわち、例えば、図７で示されるレジスタ９１−１に格納されている画素値ａ［０］［１］乃至ａ［０］［１５］および画素値ａ［０］［０］のそれぞれに、レジスタ９１−２に格納されている画素値ａ［０］［１５］および画素値ａ［０］［０］乃至ａ［０］［１４］のそれぞれが加算される。
【００５８】
より詳細に説明すれば、レジスタ９１−１に格納されている画素値ａ［０］［１］と、レジスタ９１−２に格納されている画素値ａ［０］［１５］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［２］と、レジスタ９１−２に格納されている画素値ａ［０］［０］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［３］と、レジスタ９１−２に格納されている画素値ａ［０］［１］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［４］と、レジスタ９１−２に格納されている画素値ａ［０］［２］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［５］と、レジスタ９１−２に格納されている画素値ａ［０］［３］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［６］と、レジスタ９１−２に格納されている画素値ａ［０］［４］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［７］と、レジスタ９１−２に格納されている画素値ａ［０］［５］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［８］と、レジスタ９１−２に格納されている画素値ａ［０］［６］とが加算される。
【００５９】
また、レジスタ９１−１に格納されている画素値ａ［０］［９］と、レジスタ９１−２に格納されている画素値ａ［０］［７］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［１０］と、レジスタ９１−２に格納されている画素値ａ［０］［８］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［１１］と、レジスタ９１−２に格納されている画素値ａ［０］［９］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［１２］と、レジスタ９１−２に格納されている画素値ａ［０］［１０］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［１３］と、レジスタ９１−２に格納されている画素値ａ［０］［１１］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［１４］と、レジスタ９１−２に格納されている画素値ａ［０］［１２］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［１５］と、レジスタ９１−２に格納されている画素値ａ［０］［１３］とが加算され、レジスタ９１−１に格納されている画素値ａ［０］［０］と、レジスタ９１−２に格納されている画素値ａ［０］［１４］とが加算される。
【００６０】
ステップＳ１５の処理により、加算された結果は、レジスタ９１−１に格納される。
【００６１】
ステップＳ１６において、CPUコントローラ９５は、３つ目のレジスタ９１−３に、レジスタ９１−３に格納されている値を１ビットだけ左方向にシフト（sift）させる。すなわち、図７で示されるレジスタ９１−３に格納されている画素値ａ［０］［０］乃至ａ［０］［１５］は、２進数なので、１ビットだけ左方向にシフトされることで、２倍の画素値となる。
【００６２】
ステップＳ１７において、CPUコントローラ９５は、レジスタ９１−１とレジスタ９１−３に、ステップＳ１３の処理により値が左方向にロールされた１つ目のレジスタ９１−１に格納されている値とステップＳ１４の処理により値が右方向にロールされた２つ目のレジスタ９１−２に格納されている値とを加算した値、すなわち、ステップＳ１５の処理により算出され、レジスタ９１−１に格納されている値を、ステップＳ１６の処理により左方向にシフトされた３つ目のレジスタ９１−３に格納されている値に加算させる。
【００６３】
ステップＳ１７の処理により、加算された結果はレジスタ９１−３に格納される。
【００６４】
ステップＳ１８において、CPUコントローラ９５は、レジスタ９１−３に、ステップＳ１７の処理により加算された３つ目のレジスタ９１−３に格納されている値を２ビットだけ右方向にシフトさせる。すなわち、２進数である、ステップＳ１７の処理により加算され、レジスタ９１−３に格納されている値が２ビットだけ右方向にシフトされることで、値が１バイトだけ左方向にロールされたレジスタ９１−１、値が１バイトだけ右方向にロールされたレジスタ９１−２、および値が左方向に１ビットだけシフトされたレジスタ９１−３に格納されている値を全て加算したレジスタ９１−３に格納されている値が、図７で示されるように、“４”で除算されることになる。
【００６５】
以上のように、ステップＳ１３の処理で、レジスタ９１−１に格納されている値を左方向に１バイトだけロールした値と、ステップＳ１４の処理で、レジスタ９１−２に格納されている値を右方向に１バイトだけロールした値と、ステップＳ１６の処理で、レジスタ９１−３に格納されている値を１ビットだけシフトした値とを加算し、ステップＳ１８の処理で加算した値を右方向に２ビットだけシフトする、すなわち、“４”で除算することで、３タップ（３つの画素）に係数１：２：１のLPFをかけることになる。
【００６６】
ステップＳ１８の後、処理は終了する。
【００６７】
以上のように、複数の画素値をそれぞれのレジスタに格納することにより、必要なレジスタの数が、最低限ですむ。これにより、他のレジスタが他の処理に利用できる。結果として、レジスタ９１からRAM６３またはRAM６３からレジスタ９１へのデータの転送回数も減少し、演算にかかる時間が短縮される。したがって、PC５１の全体の処理速度（演算速度）が速くなる。
【００６８】
テレビ信号用の画像処理などの場合、テレビ信号の画像処理では画面の水平方向に広くフィルタなどの処理を行うときが多い。このような画像処理を実行する場合に、このレジスタ９１への値の格納方法によって、画面の水平方向に並ぶ複数の値を１つのレジスタに格納することで、演算に必要な値を保持するレジスタの数を減らすことができる。
【００６９】
また、以上のような演算処理（方法）を行う場合、例えば、図７で示される演算の終了した（演算結果である）レジスタ９１−３における上位から０バイト目の画素値（レジスタ９１−３の左端の“×”）および１５バイト目の画素値（レジスタ９１−３の右端の“×”）は、値としての意味を持たない。
【００７０】
すなわち、図７で示されるレジスタ９１−１では、１バイトだけ左方向にロールし、レジスタ９１−２では１バイトだけ右方向にロールしているため、レジスタ９１−１の画素値ａ［０］［１］、レジスタ９１−２の画素値ａ［０］［１５］、およびレジスタ９１−３の画素値ａ［０］［０］を加算した値、並びにレジスタ９１−１の画素値ａ［０］［０］、レジスタ９１−２の画素値ａ［０］［１４］、およびレジスタ９１−３の画素値ａ［０］［１５］を加算した値は、隣接した画素の画素値ではないので、LPFの処理による値としての意味をもたない。
【００７１】
このため、上述した演算処理自体は１６並列で行われるが、結果としては１４並列の演算結果が得られることになる。このとき、一般的なSIMD演算の場合、１６並列の演算を行えば、１６個の演算結果を得られるのに対して、効率が悪いように見える。
【００７２】
簡単な処理だけで演算が終了する場合、すなわち、数十のインストラクション（instruction）で演算が全て終了され、結果がメモリであるRAM６３上に書き戻され、それ以後、RAM６３上の値に対して何も処理を施さないときは、一般的なSIMDの演算方法(ここでは、複数のレジスタに必要な画素値を、画面の垂直方向に格納して計算する)の方が、効率がよいときもある。
【００７３】
しかしながら、複雑な処理の場合、一般的なSIMD演算方法では、RAM６３からレジスタ９１に値を転送し、演算を行い、またRAM６３に書き戻すといった処理が連続して起こってしまう。これは、レジスタの数が足らず、レジスタの値を一時的にメモリ（RAM６３）に退避させなければならないためである。
【００７４】
したがって、複雑な処理の場合、上述したように、本発明においては、利用されるレジスタの数を減らすことが出来る。すなわち、レジスタの値を一時的にメモリに退避させなければならない事態の起こる回数を減少させることができる。また、これにより、レジスタに格納されている演算結果をそのまま次の演算に用いる回数を増加させることができ、並列演算の演算結果の数が、並列演算の数よりも少なくなってしまうという本発明の弱点を補うだけの効果が期待できる。
【００７５】
次に、図８および図９のフローチャートを参照して、ROM６２またはRAM６３に記憶（実装）されているプログラムを実行するCPU６１による、レジスタ９１−１乃至９１−ｎにおける、オーバーフローが発生するときの演算の処理を説明する。なお、図４のフローチャートを参照して上述した演算の処理と同様に、図８を参照して説明する演算の処理は、１２８ビットのレジスタ９１において、係数１：２：１を用いる３タップ（Tap）のLPFの処理を、RAM６３に記憶されている各画素値が８ビットで表現される画像に対して、水平方向に１６並列演算を行う処理である。
【００７６】
ステップＳ３１の処理は、図４のステップＳ１１の処理と同様であるので、その説明は省略する。
【００７７】
ステップＳ３２において、CPUコントローラ９５は、データバスコントローラ９７を制御し、レジスタ９１−１およびレジスタ９１−４に、ステップＳ３１の処理で取り出された画素値を記憶、すなわち、格納させ、画素値を上位ビットと下位ビットとに分割させる。すなわち、例えば、８ビットの画素値が上位６ビットと下位２ビットに分割される。
【００７８】
より具体的には、ステップＳ３３において、CPUコントローラ９５は、データバスコントローラ９７を制御して、画素値a［０］［０］乃至ａ［０］［１５］をレジスタ９１−１に格納させる。そして、CPUコントローラ９５は、レジスタ９１−１に、１６進数の“FCFCFC・・・・FC”と格納している値との論理積を演算させる。
【００７９】
また、CPUコントローラ９５は、データバスコントローラ９７を制御して、画素値a［０］［０］乃至ａ［０］［１５］をレジスタ９１−４に格納させる。そして、CPUコントローラ９５は、レジスタ９１−４に、１６進数の“０３０３０３・・・０３”と格納している値との論理積を演算させる。
【００８０】
このように、レジスタ９１−１乃至９１−６は、画素値ａ［０］［０］乃至ａ［０］［１５］を所定のビット数の下位ビットで表される値と、残りの上位のビットで表される値として分割することができる。
【００８１】
すなわち、CPUコントローラ９５は、図１０Ａで示されるように、RAM６３から取り出された画素値ａ［０］［０］乃至ａ［０］［１５］のそれぞれの、例えば、上位６ビット、すなわち、図１０Ａで示される“ＸＸＸＸＸＸ”をレジスタ９１−１に記憶（格納）させる。また、CPUコントローラ９５は、図１０Ｂで示されるように、RAM６３から取り出された画素値ａ［０］［０］乃至ａ［０］［１５］のそれぞれの、例えば、残りの下位２ビット、すなわち、図１０Ｂで示される“ＸＸ”をレジスタ９１−４に記憶（格納）させる。
【００８２】
このとき、図１０で示されるように、レジスタ９１−１に格納されている各画素値における、８ビットの値のうち下位２ビットには、“００”が記憶される。また、レジスタ９１−４に格納されている各画素値における、８ビットの値のうち上位６ビットには、“００００００”が記憶される。なお、“Ｘ”の値は、“０”または“１”である。
【００８３】
ここで、RAM９３に記憶されている各画素値を上位６ビットおよび下位２ビットに分けて、レジスタ９１に記憶されるのは、後述する演算によって、レジスタ９１において、２ビットだけオーバーフローするためである。
【００８４】
すなわち、レジスタ９１の内部の値は、画素値を想定しているため、レジスタ９１には、０乃至２５５（８ビット）の値が格納されることになる。ここで、ＮビットとＮビットとの和は（Ｎ＋１）ビットとなるため、LPFの処理により、係数を１：２：１にするため、レジスタ９１に格納されている値を１ビットだけ左方向にシフトさせる場合に、（Ｎ＋１）ビットの値を加算するには、演算処理において、（Ｎ＋２）ビットの値を保持する必要がある。すなわち、オーバーフローとシフトとを考慮したビット数を確保する必要がある。
【００８５】
これにより、レジスタ９１においては、８ビットの値を演算させることが可能でも、値の桁上がり（オーバーフロー）による隣の値への破壊を回避するためには、０乃至６４（６ビット）までの値の演算しか行えないことになる。
【００８６】
ステップＳ３３において、CPUコントローラ９５は、レジスタ９１−１に、ステップＳ３２の処理で分割された、レジスタ９１−１の値を２つのレジスタ９１−２およびレジスタ９１−３にムーブさせることで、レジスタ９１−１の値、すなわち、画素値の上位６ビットをレジスタ９１−２および９１−３に記憶（格納）させる。これにより、３つのレジスタ９１−１乃至９１−３は、画素値の上位６ビットが格納されることになる。
【００８７】
ステップＳ３４において、CPUコントローラ９５は、レジスタ９１−４に、ステップＳ３２の処理で分割された、レジスタ９１−４の値を２つのレジスタ９１−５およびレジスタ９１−６にムーブさせることで、レジスタ９１−４の値、すなわち、画素値の下位２ビットをレジスタ９１−５および９１−６に記憶（格納）させる。これにより、３つのレジスタ９１−４乃至９１−６は、画素値の下位２ビットが格納されることになる。
【００８８】
ステップＳ３５において、CPUコントローラ９５は、１つ目のレジスタ９１−１に、図４のステップＳ１３の処理と同様に、ステップＳ３３の処理により、上位６ビットが記憶された、レジスタ９１−１に格納されている値、すなわち、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイト（＝８ビット）だけ左方向にロール（roll）させる。
【００８９】
ステップＳ３６において、CPUコントローラ９５は、２つ目のレジスタ９１−２に、図４のステップＳ１４の処理と同様に、ステップＳ３４の処理により、上位６ビットが記憶された、レジスタ９１−２に格納されている値、すなわち、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイト（＝８ビット）だけ右方向にロール（roll）させる。
【００９０】
ステップＳ３７において、CPUコントローラ９５は、１つ目のレジスタ９１−１に、図４のステップＳ１５の処理と同様に、ステップＳ３５の処理により値がロールされた１つ目のレジスタ９１−１に格納されている値とステップＳ３６の処理により値がロールされた２つ目のレジスタ９１−２に格納されている値とを加算させる。
【００９１】
ステップＳ３７の処理により加算された結果は、レジスタ９１−１に格納される。
【００９２】
ステップＳ３８において、CPUコントローラ９５は、３つ目のレジスタ９１−３に、図４のステップＳ１６の処理と同様に、ステップＳ３３の処理により、上位６ビットが記憶された、レジスタ９１−３に格納されている値を１ビットだけ左方向にシフト（sift）させる。これにより、レジスタ９１−３に格納されている画素値は２倍となる。
【００９３】
図９のステップＳ３９において、CPUコントローラ９５は、レジスタ９１−１とレジスタ９１−３に、図４のステップＳ１７の処理と同様に、ステップＳ３５の処理により値が左方向にロールされた１つ目のレジスタ９１−１に格納されている値とステップＳ３６の処理により値が右方向にロールされた２つ目のレジスタ９１−２に格納されている値とを加算した値、すなわち、ステップＳ３７の処理により算出され、レジスタ９１−１に格納されている値を、ステップＳ３８の処理により左方向にシフトされた３つ目のレジスタ９１−３に格納されている値に加算させる。
【００９４】
図１１は、ステップＳ３９の処理により値が加算されたレジスタ９１−３を説明する図である。図１１で示されるように、レジスタ９１−３においては、ステップＳ３３の処理により記憶された６ビットの値が、ステップＳ３５乃至Ｓ３９の処理により８ビットの値になり、結果的には、レジスタ９１−３の各画素値は、“００”である下位の２ビットもあわせて、結果的に、１つの画素値が１０ビットとなり、隣の画素値を侵食（破壊）してしまうことになる。
【００９５】
しかしながら、レジスタ９１−３における、画素値の下位２ビットは、上述したように、“００”であるため、桁上がりによって、２ビットだけ隣の画素値に侵食することによる影響はない。
【００９６】
ステップＳ４０において、CPUコントローラ９５は、レジスタ９１−４に、図４のステップＳ１３の処理と同様に、ステップＳ３４の処理により、下位２ビットが記憶された、１つ目のレジスタ９１−４に格納されている値、すなわち、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイト（＝８ビット）だけ左方向にロール（roll）させる。
【００９７】
ステップＳ４１において、CPUコントローラ９５は、レジスタ９１−５に、図４のステップＳ１４の処理と同様に、ステップＳ３４の処理により、下位２ビットが記憶された、２つ目のレジスタ９１−５に格納されている値、すなわち、画素値ａ［０］［０］乃至ａ［０］［１５］を１バイト（＝８ビット）だけ右方向にロール（roll）させる。
【００９８】
ステップＳ４２において、CPUコントローラ９５は、レジスタ９１−４に、図４のステップＳ１５の処理と同様に、ステップＳ４０の処理により値がロールされた１つ目のレジスタ９１−４に格納されている値とステップＳ４１の処理により値がロールされた２つ目のレジスタ９１−５に格納されている値とを加算させる。
【００９９】
ステップＳ４２の処理により加算された結果は、レジスタ９１−４に格納される。
【０１００】
ステップＳ４３において、CPUコントローラ９５は、レジスタ９１−６に、図４のステップＳ１６の処理と同様に、ステップＳ３４の処理により、下位２ビットが記憶された、３つ目のレジスタ９１−６に格納されている値を１ビットだけ左方向にシフト（sift）させる。これにより、レジスタ９１−６に格納されている画素値は２倍となる。
【０１０１】
ステップＳ４４において、CPUコントローラ９５は、レジスタ９１−４とレジスタ９１−６に、図４のステップＳ１７の処理と同様に、ステップＳ４０の処理により値が左方向にロールされた１つ目のレジスタ９１−４に格納されている値とステップＳ４１の処理により値が右方向にロールされた２つ目のレジスタ９１−５に格納されている値とを加算した値、すなわち、ステップＳ４２の処理により算出され、レジスタ９１−４に格納されている値を、ステップＳ４３の処理により左方向にシフトされた３つ目のレジスタ９１−６に格納されている値に加算させる。
【０１０２】
図１２は、ステップＳ４４の処理により値が加算されたレジスタ９１−６を説明する図である。図１２で示されるように、レジスタ９１−６においては、ステップＳ３４の処理により記憶された下位２ビットの値は、ステップＳ４０乃至Ｓ４４の処理により、８ビットの値のうち、上位４ビットが“００００”になり、下位４ビットが“ＸＸＸＸ”となる。すなわち、下位４ビットのみに値が格納されていることになる。
【０１０３】
なお、ここで、レジスタ９１の値を四捨五入したい場合には、CPUコントローラ９５が、レジスタ９１−６に、ステップＳ４４の処理により演算されたレジスタ９１−６に格納されているそれぞれの画素値（８ビットの要素）の下位１ビットに“１”を加算させるようにすればよい。
【０１０４】
ステップＳ４５において、CPUコントローラ９５は、レジスタ９１−６に、ステップＳ３４の処理により下位２ビットが記憶され、ステップＳ４４の処理により値が加算された、３つ目のレジスタ９１−６における個々の８ビットの値（画素値）のうちの下位の２ビットを“０”に設定させる。すなわち、図１２で示される、８ビットの値のうちの“ＸＸＸＸ”の下位２ビットが“０”に設定され、８ビットの値は、“００００ＸＸ００”に設定される。
【０１０５】
ステップＳ４６において、CPUコントローラ９５は、レジスタ９１−３とレジスタ９１−６に、ステップＳ３９の処理により加算され、ステップＳ３４の処理により、上位６ビットが記憶された、３つ目のレジスタ９１−３に格納されている値に、下位２ビットが記憶された、３つ目のレジスタ９１−６に格納されている値を加算させる。
【０１０６】
ステップＳ４６の処理により加算された結果は、レジスタ９１−３に格納される。
【０１０７】
図１３は、ステップＳ４５の処理まで行われたレジスタ９１−３および９１−６を示す図である。ステップＳ４６の処理においては、図１３Ａで示されるレジスタ９１−３の各画素値（８ビットの要素）の白い部分の“ＸＸ”の値に、図１３Ｂで示されるレジスタ９１−６の各画素値（８ビットの要素）の斜線部分の“ＸＸ”の値が加算されることになる。
【０１０８】
ステップＳ４７において、CPUコントローラ９５は、レジスタ９１−３に、ステップＳ４６の処理により加算されたレジスタ９１−３に格納されている値を２ビットだけ右方向にシフトさせる。すなわち、ステップＳ４６の処理により加算されたレジスタ９１−３に格納されている値が２ビットだけ右方向にシフトされることで、レジスタ９１−３に格納されている値が、“４”で除算されることになる。
【０１０９】
ステップＳ４６の処理で加算された値が２ビットだけ右方向にシフトされることで、すなわち、ステップＳ４６の処理で加算された値が“４”で除算されることで、３タップ（３つの画素）に係数１：２：１のLPFをかけることになる。
【０１１０】
ステップＳ４７の後、処理は終了する。
【０１１１】
なお、図７を参照して上述したように、以上のような演算処理（方法）を行う場合、ステップＳ４６において算出される、レジスタ９１−３における上位から０バイト目の画素値および１５バイト目の画素値は、値としての意味を持たない。
【０１１２】
以上のように、レジスタ９１において、演算時に発生する桁上がり（オーバーフロー）を表現するための余分なビットを設ける必要がなくなり、並列演算における並列度を上げることが可能になる。並列度が上がることで、演算にかかる時間を短縮することができる。また、これにより、PC５１全体の処理速度を速くすることができる。
【０１１３】
また、オーバーフローによって、８並列で並列演算しなければならない演算と、オーバーフローがおきずに１６並列で演算できる演算が混在している場合、オーバーフローが起きる部分だけ８並列で演算を行おうとすると、１６並列から８並列へと値を入れ替えるためのインストラクションが発生してしまう。また、そのインストラクションを避けるために全ての演算を８並列で行おうとすると、今度は１６並列で演算できる部分まで８並列で演算しなければならず、演算に時間がかかってしまうが、上述した処理を行うことで、全ての演算を１６並列で行うことができ、演算にかかる時間を短縮することができる。これにより、PC５１全体の処理速度を速くすることができる。
【０１１４】
本発明が適用される情報処理装置の実施の形態は、図１に示されるPC５１に限定されず、記録媒体の記録および読み出しの制御が可能な情報処理装置であれば構わない。具体的には、例えば、PDA（Personal Digital Assistants）、携帯電話機、または、デジタル電化製品（例えば、ハードディスク録画装置）等様々な実施の形態が可能である。
【０１１５】
また、本発明は、ソフトウェアセルを利用するセルコンピュータにおいても適用することが可能である。
【０１１６】
このように、1つのレジスタに複数のデータを格納するようにした場合、データを並列に演算することができる。２進数で表現されている複数のデータのそれぞれを、データに適用される演算における上位側へのシフトのビット数と演算において発生が予測されるオーバーフローの表現に必要なビット数とを加算したビット数の下位のビットで表される第１の値と、残りの上位のビットで表される第２の値とに分割し、データのビット数毎に、複数のデータの第１の値を格納し、データのビット数毎に、複数のデータの第２の値を格納し、データのビット数毎に格納されている複数のデータの第１の値に対して演算を適用し、データのビット数毎に格納されている複数のデータの第２の値に対して演算を適用し、データ毎に、２つの演算の結果を加算するようにした場合には、より少ないハードウェアリソースで、より迅速に並列演算を実行することができる。
【０１１７】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０１１８】
この記録媒体は、図１で示されるリムーバブルメディア７１のように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM（Compact Disk Read-Only Memory），DVD（Digital Versatile Disc）を含む）、光磁気ディスク（MD（Mini Disc）（商標）を含む）、若しくは半導体メモリなどよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM（Read Only Memory）もしくはハードディスクなどで構成される。
【０１１９】
なお、上述した一連の処理を実行させるプログラムは、必要に応じてルータ、モデムなどのインターフェースを介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を介してコンピュータにインストールされるようにしてもよい。
【０１２０】
また、本明細書において、記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくても、並列的あるいは個別に実行される処理を含むものである。
【図面の簡単な説明】
【０１２１】
【図１】並列演算における、オーバーフローを説明する図である。
【図２】本発明に係るパーソナルコンピュータの構成の例を示すブロック図である。
【図３】図２のCPUの構成の例を示すブロック図である。
【図４】オーバーフローが発生しないときの演算の処理を説明するフローチャートである。
【図５】図２のRAMに記憶されている画像の画素値の画面上の並びの例を示す図である。
【図６】図２のRAMから水平方向に取り出した画素値が格納されたレジスタを説明する図である。
【図７】ローパスフィルタの演算方法を説明する図である。
【図８】オーバーフローが発生するときの演算の処理を説明するフローチャートである。
【図９】オーバーフローが発生するときの演算の処理を説明するフローチャートである。
【図１０】レジスタに格納されているデータを説明する図である。
【図１１】レジスタに格納されているデータを説明する図である。
【図１２】レジスタに格納されているデータを説明する図である。
【図１３】レジスタに格納されているデータを説明する図である。
【符号の説明】
【０１２２】
５１  パーソナルコンピュータ，  ６１  CPU，  ６２  ROM，  ６３  RAM，  ７１  リムーバブルメディア，  ９１並びに９１−１乃至９１−ｎ  レジスタ，  ９５  CPUコントローラ，  ９７  データバスコントローラ
【図１】
2006085467.tif 000003
【図２】
2006085467.tif 000004
【図３】
2006085467.tif 000005
【図４】
2006085467.tif 000006
【図５】
2006085467.tif 000007
【図６】
2006085467.tif 000008
【図７】
2006085467.tif 000009
【図８】
2006085467.tif 000010
【図９】
2006085467.tif 000011
【図１０】
2006085467.tif 000012
【図１１】
2006085467.tif 000013
【図１２】
2006085467.tif 000014
【図１３】
2006085467.tif 000015