(57)【要約】【課題】隣接するプロセッサエレメントとのデータ通信が可能なＳＩＭＤ型マイクロプロセッサにおいて適切なフォワディング制御を行うことができるＳＩＭＤ型マイクロプロセッサおよび演算方法を提供する。【解決手段】ＳＩＭＤ型マイクロプロセッサ１のＰＥ３に、自ＰＥ内のＡレジスタ３ｈのデータをフォワディング経路に加えて、隣接するＰＥ間でもＡレジスタのデータをフォワディングする経路と、それらの経路をＧＰ部２からの制御により選択する第３ＰＥシフト３ｅと、を設け、ＧＰ部２のＳＣＵ内の制御回路が先行命令の書き込み先ＰＥと後続命令の読み出し先ＰＥとの距離に応じてフォワディング経路を第３ＰＥシフト３ｅに選択させる。【選択図】図２
2010033426.tif 000002
【特許請求の範囲】
【請求項１】
演算回路および前記演算回路による演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読して前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサにおいて、
前記プロセッサエレメントには、
（イ）隣接する複数個の前記プロセッサエレメントの前記演算回路による演算結果を自身の演算回路の入力側にフォワディングする経路と、
（ロ）前記自身の演算回路の演算結果を入力側にフォワディングする経路および隣接する複数個の前記プロセッサエレメントの前記演算回路による演算結果を自身の演算回路の入力側にフォワディングする経路のうちのいずれか１つを選択する選択手段と、
が設けられていることを特徴とするＳＩＭＤ型マイクロプロセッサ。
【請求項２】
前記グローバルプロセッサでプログラム実行した際にリードアフターライトハザードが発生したことを検出する検出手段と、
前記検出手段がリードアフターライトハザードを検出した際に、前記グローバルプロセッサで実行する前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと、前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントと、の距離に応じて、前記選択手段に前記フォワディングする経路を選択させる制御手段と、
が設けられていることを特徴とする請求項１に記載のＳＩＭＤ型マイクロプロセッサ。
【請求項３】
演算回路および前記演算回路の演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読して前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサにおいて、
前記グローバルプロセッサで実行する前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと、前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントと、が一致することを検出して、前記演算手段に前記フォワディングを用いた演算を行わせる制御手段が設けられていることを特徴とするＳＩＭＤ型マイクロプロセッサ。
【請求項４】
演算回路および前記演算回路の演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読して前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサを用いた演算方法において、
前記グローバルプロセッサで実行される前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントとの距離に応じて、自身の演算結果および隣接する複数個の前記プロセッサエレメントの演算結果のうちいずれか１つを選択して前記演算回路の入力とすることを特徴とする演算方法。
【請求項５】
演算回路および前記演算回路の演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読し前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサを用いた演算方法において、
前記グローバルプロセッサで実行される前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと、前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントと、が一致することを検出して、前記フォワディングする経路を前記演算回路の入力とすることを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は１つの演算命令により複数のデータ等を並列処理するＳＩＭＤ（Single Instruction-stream, Multiple Data-stream）型マイクロプロセッサおよびＳＩＭＤ型マイクロプロセッサを用いた演算方法に関する。
【背景技術】
【０００２】
近年、デジタル複写機やファクシミリ装置などの画像処理装置において、画素数を増加させたりカラー対応にするなど性能の向上が図られている。そして、この性能の向上に伴い、処理すべきデータ数が増加している。また、複写機等の画像処理装置におけるデータ処理は全ての画素に対して同じ演算処理を施すことが多い。そこで、１つの命令で複数のデータに対して同時に同じ演算処理を行うＳＩＭＤ型マイクロプロセッサ（特許文献１、２を参照）が用いられることが多くなっている。
【０００３】
従来からの一般的なＳＩＭＤ型マイクロプロセッサを図９に示す。ＳＩＭＤ型マイクロプロセッサ１００は図９に示すように、グローバルプロセッサ部１０１と、プロセッサエレメント部１０２と、外部入出力部１０３と、画像メモリ１０４と、を備えている。
【０００４】
グローバルプロセッサ部１０１は、いわゆるＳＩＳＤ（Single Instruction-stream, Single Data-stream）型のマイクロプロセッサであり、プログラムＲＡＭとデータＲＡＭを内蔵し、プログラムを解読し各種制御信号を生成する。この制御信号は内蔵する各種ブロックの制御以外にも後述するプロセッサエレメント部１０２のレジスタファイル１０２１ａや演算部１０２１ｂに供給される。また、グローバルプロセッサ部１０１内の図示しない演算器を利用して演算処理を行うグローバルプロセッサ命令実行時は内蔵する汎用レジスタ、ＡＬＵ（算術論理演算器）等を使用して各種演算処理、プログラム制御処理を行う。
【０００５】
プロセッサエレメント部１０２は、複数のプロセッサエレメント１０２１を備えている。プロセッサエレメント部１０２は、グローバルプロセッサ部１０１にて実行されるプロセッサエレメント命令によって制御される。プロセッサエレメント命令はＳＩＭＤ型の命令であり、後述するレジスタファイル１０２１ａに保持されている複数のデータに対して同時に同じ処理を行う。プロセッサエレメント１０２１は、レジスタファイル１０２１ａと、演算部１０２１ｂと、を備えている。
【０００６】
レジスタファイル１０２１ａでは、プロセッサエレメント命令で処理されるデータを保持している。このレジスタファイル１０２１ａからのデータの読み出し／書き込みの制御はグローバルプロセッサ部１０１からの制御によって行われる。読み出されたデータは演算部１０２１ｂに送られ、演算部１０２１ｂでの演算処理後にレジスタファイル１０２１ａに書き込まれる。また、レジスタファイル１０２１ａはプロセッサ外部からのアクセスが可能であり、グローバルプロセッサ部１０１の制御とは別に外部から特定のレジスタを読み出し／書き込みが行われる。
【０００７】
演算部１０２１ｂでは、プロセッサエレメント命令の演算処理が行われる。処理の制御は全てグローバルプロセッサ部１０１から行われる。
【０００８】
外部入出力部１０３は、後述する画像メモリ１０４から処理する元の画像データを読み出しレジスタファイル１０２１ａに書き込む、あるいはレジスタファイル１０２１ａから処理後の画像データを読み出し画像メモリ１０４に書き込む。
【０００９】
画像メモリ１０４は、処理する元の画像データおよび処理後の画像データを記憶する。
【００１０】
この種のプロセッサにおけるパイプラインハザードの一つで、あるレジスタを書き替える先行命令の次に、後続命令で同一のレジスタからデータを読み出そうとした場合に、先行命令の書き替える動作を終了していないうちに、後続命令の読み出しを行ってしまうリードアフターライト（ＲＡＷ）ハザードが発生する。このようなハザードが発生すると、パイプラインをストールさせることによりデータの整合性を取ることが多い。この場合、パイプラインをストールされると余分なサイクルがかかってしまう。従って、データの整合性を取り、かつ、余分なサイクルを発生させないために、プロセッサエレメントなどのデータパス中で、ＡＬＵの演算結果を入力側へとバイパスするフォワディング経路を備えて、それを制御することにより、フォワディング（バイパッシング）を実現することが行われている。これにより、パイプラインのストールを回避できる。
【特許文献１】特許４０２０８０４号公報
【特許文献２】特表２０００−１８７７２９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、隣接するプロセッサエレメント（もしくは自プロセッサエレメント）からのデータを読み出して、自プロセッサエレメント内のＡＬＵで演算し、隣接するプロセッサエレメント（もしくは自プロセッサエレメント）に書き込む機能を備えるＳＩＭＤ型マイクロプロセッサにおいて、書き込み先プロセッサエレメントと読み出し先プロセッサエレメントとが異なる場合に、従来のように例えば単純にレジスタファイルのアドレスが一致することのみでフォワディング経路を選択する制御では、演算処理の整合性がとれなくなってしまうという問題があった。
【００１２】
本発明はかかる問題を解決することを目的としている。
【００１３】
すなわち、本発明は、隣接するプロセッサエレメントとのデータ通信が可能なＳＩＭＤ型マイクロプロセッサにおいて適切なフォワディング制御を行うことができるＳＩＭＤ型マイクロプロセッサおよび演算方法を提供することを目的としている。
【課題を解決するための手段】
【００１４】
請求項１に記載された発明は、演算回路および前記演算回路による演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読して前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサにおいて、前記プロセッサエレメントには、（イ）隣接する複数個の前記プロセッサエレメントの前記演算回路による演算結果を自身の演算回路の入力側にフォワディングする経路と、（ロ）前記自身の演算回路の演算結果を入力側にフォワディングする経路および隣接する複数個の前記プロセッサエレメントの前記演算回路による演算結果を自身の演算回路の入力側にフォワディングする経路のうちのいずれか１つを選択する選択手段と、が設けられていることを特徴とするＳＩＭＤ型マイクロプロセッサである。
【００１５】
請求項２に記載された発明は、請求項１に記載された発明において、前記グローバルプロセッサでプログラム実行した際にリードアフターライトハザードが発生したことを検出する検出手段と、前記検出手段がリードアフターライトハザードを検出した際に、前記グローバルプロセッサで実行する前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと、前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントと、の距離に応じて、前記選択手段に前記フォワディングする経路を選択させる制御手段と、が設けられていることを特徴とするものである。
【００１６】
請求項３に記載された発明は、演算回路および前記演算回路の演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読して前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサにおいて、前記グローバルプロセッサで実行する前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと、前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントと、が一致することを検出して、前記演算手段に前記フォワディングを用いた演算を行わせる制御手段が設けられていることを特徴とするＳＩＭＤ型マイクロプロセッサである。
【００１７】
請求項４に記載された発明は、演算回路および前記演算回路の演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読して前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサを用いた演算方法において、前記グローバルプロセッサで実行される前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントとの距離に応じて、自身の演算結果および隣接する複数個の前記プロセッサエレメントの演算結果のうちいずれか１つを選択して前記演算回路の入力とすることを特徴とする演算方法である。
【００１８】
請求項５に記載された発明は、演算回路および前記演算回路の演算結果を入力側にフォワディングする経路が設けられたプロセッサエレメントを複数個備えたプロセッサエレメント部と、予めメモリに記録されたプログラムを解読し前記プロセッサエレメント部に制御信号を供給するグローバルプロセッサと、を有するＳＩＭＤ型マイクロプロセッサを用いた演算方法において、前記グローバルプロセッサで実行される前記プログラムの先行命令による演算結果の書き込み先となる前記プロセッサエレメントと、前記プログラムの後続命令によるデータの読み出し先となる前記プロセッサエレメントと、が一致することを検出して、前記フォワディングする経路を前記演算回路の入力とすることを特徴とする演算方法である。
【発明の効果】
【００１９】
請求項１に記載の発明によれば、隣接するプロセッサエレメントのレジスタファイル内のデータを読み出して、自プロセッサエレメント内のＡＬＵで演算し、その結果を隣接するプロセッサエレメントのレジスタへ書き戻すＳＩＭＤ型マイクロプロセッサにおいて、ＲＡＷハザードが起こった場合に、隣接するプロセッサエレメントからのフォワディング経路と、そのフォワディング経路を選択する選択手段と、が設けられているので、自プロセッサエレメント内に加えて、隣接するプロセッサエレメントとのフォワディングが可能となり、ＲＡＷハザードを回避できる。そのため、ストールによるハザード回避と比較して実行サイクルを削減することができる。
【００２０】
請求項２に記載の発明によれば、隣接するプロセッサエレメントのレジスタファイル内のデータを読み出して、自プロセッサエレメント内のＡＬＵで演算し、その結果を隣接するプロセッサエレメントのレジスタへ書き戻すＳＩＭＤ型マイクロプロセッサにおいて、ＲＡＷハザードが起こった場合に、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとの距離に応じてフォワディング経路を選択手段に選択させるように制御手段が制御しているので、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとの距離に応じて隣接するＰＥとのフォワディング制御を行うことができ、ＲＡＷハザードを回避できる。これによって、ストールによるハザード回避に比べて実行サイクルを削減することができる。
【００２１】
請求項３に記載の発明によれば、隣接するプロセッサエレメントのレジスタファイル内のデータを読み出して、自プロセッサエレメント内のＡＬＵで演算し、その結果を隣接するプロセッサエレメントのレジスタへ書き戻すＳＩＭＤ型マイクロプロセッサにおいて、ＲＡＷハザードが起こった場合に、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとが一致した場合にフォワディングを行うように制御手段が制御しているので、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとが一致する場合のＲＡＷハザードを回避できる。これによって、ストールによるハザード回避に比べて実行サイクルを削減することができる。
【００２２】
請求項４に記載の発明によれば、隣接するプロセッサエレメントのレジスタファイル内のデータを読み出して、自プロセッサエレメント内のＡＬＵで演算し、その結果を隣接するプロセッサエレメントのレジスタへ書き戻すＳＩＭＤ型マイクロプロセッサを用いて、ＲＡＷハザードが起こった場合に、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとが一致しない場合でも、その距離に応じてフォワディング経路を選択するようにしているので、ＲＡＷハザードを回避できる。これによって、ストールによるハザード回避に比べて実行サイクルを削減することができる。
【００２３】
請求項５に記載の発明によれば、隣接するプロセッサエレメントのレジスタファイル内のデータを読み出して、自プロセッサエレメント内のＡＬＵで演算し、その結果を隣接するプロセッサエレメントのレジスタへ書き戻すＳＩＭＤ型マイクロプロセッサにおいて、ＲＡＷハザードが起こった場合に、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとが一致した場合にフォワディングを行うように制御しているので、先行命令の書き込み先プロセッサエレメントと後続命令の読み出し先プロセッサエレメントとが一致する場合のＲＡＷハザードを回避できる。これによって、ストールによるハザード回避に比べて実行サイクルを削減することができる。
【発明を実施するための最良の形態】
【００２４】
［第１実施形態］
以下、本発明の第１の実施形態を、図１ないし図５を参照して説明する。図１は、本発明の第１の実施形態にかかるＳＩＭＤ型マイクロプロセッサのブロック図である。図２は、図１に示したＳＩＭＤ型マイクロプロセッサのプロセッサエレメントの詳細を示したブロック図である。図３は、図１に示したＳＩＭＤ型マイクロプロセッサのパイプラインを示す説明図である。図４は、先行命令と後続命令のプロセッサエレメント間のデータの書き込みと読み出しの関係を示す説明図である。図５は、図１に示したＳＩＭＤ型マイクロプロセッサのフォワディング経路制御を行う制御回路のブロック図である。
【００２５】
図１に示したＳＩＭＤ型マイクロプロセッサ１は、グローバルプロセッサ（以降ＧＰとする）部２と、プロセッサエレメント（以降ＰＥとする）部３と、を備えている。
【００２６】
ＧＰ部２は、プログラム格納用のプログラムＲＡＭと、演算データ格納用のデータＲＡＭと、プログラムのアドレスを保持するプログラムカウンタＰＣと、演算処理のデータ格納のための汎用レジスタであるＧ０〜Ｇ３レジスタと、ＧＰ用のＡＬＵと、レジスタ退避及び復帰時に退避先データＲＡＭのアドレスを保持しているスタックポインタＳＰと、サブルーチンコール時にコール元のアドレスを保持するリンクレジスタＬＳと、割り込み時とＮＭＩ（マスク不可割り込み）時の分岐元アドレスを保持するＬＩ、ＬＮレジスタと、ＧＰ部２の状態を保持しているプロセッサステータスレジスタＰと、命令を解読し各種制御信号を生成するシーケンスユニットＳＣＵ２１と、を備えている。これらを用いて、ＧＰ命令の実行が行われる。
【００２７】
ＧＰ部２は、ＰＥ命令実行時はＳＣＵ２１で生成されたＧＰ部２からの制御信号を、図示しないパイプラインレジスタにより、一旦データを保持してから各ＰＥ部３に供給することにより行われる。
【００２８】
ＰＥ部３は、複数のＰＥ３０を備えている。本実施形態の場合、ＰＥ０〜ＰＥ５１１の５１２個のＰＥ３０で構成されている。図１に示したようなＰＥ３０の番号（０〜５１１）は予めＧＮＤやＶＤＤなどの組み合わせやレジスタなどに設定することで付与されている。
【００２９】
ＰＥ３０は、図２に示すように、汎用レジスタファイル３ａと、第１ＰＥシフト３ｂと、第２ＰＥシフト３ｃと、パイプラインレジスタ３ｄと、第３ＰＥシフト３ｅと、セレクタ３ｆと、ＡＬＵ３ｇと、Ａレジスタ３ｈと、を備えている。
【００３０】
汎用レジスタファイル３ａは、１６ビットのレジスタをＲ０〜Ｒ１５の１６本備えており、ＰＥ命令で処理されるデータを保持している。この汎用レジスタファイル３ａからのデータの読み出し／書き込みの制御はＧＰ部２によって行われる。読み出されたデータは後述する第１ＰＥシフト３ｂ、パイプラインレジスタ３ｄ、セレクタ３ｆを介してＡＬＵ３ｇに出力され、ＡＬＵ３ｇでの演算処理後に第２ＰＥシフト３ｃを介して汎用レジスタファイル３ａに書き込まれる。
【００３１】
第１ＰＥシフト３ｂは、自ＰＥ３０の汎用レジスタファイル３ａからのデータと、隣接するＰＥ３０の汎用レジスタファイル３ａからのデータとを、ＧＰ部２からの制御信号により選択してパイプラインレジスタ３ｄに出力する。この自ＰＥ３０または隣接するＰＥ３０のデータを選択することをＰＥシフトと呼ぶ。本実施形態では自ＰＥ３０の±２ＰＥ（図１の場合上下２ＰＥ）の範囲でデータをシフト可能、つまり選択可能としている。
【００３２】
第２ＰＥシフト３ｃは、ＡＬＵ３ｈの演算結果を格納するＡレジスタ３ｈのデータを自ＰＥ３０の汎用レジスタファイル３ａと、隣接するＰＥ３０の汎用レジスタファイル３ａと、のうちいずれかへＧＰ部２からの制御信号により選択して出力する。本実施形態では自ＰＥ３０の±２ＰＥ（図１の場合上下２ＰＥ）の範囲の汎用レジスタファイル３ａへシフト可能、つまり選択可能としている。
【００３３】
パイプラインレジスタ３ｄは、第１ＰＥシフト３ｂが出力したデータを格納して１サイクルディレイさせてセレクタ３ｆに出力する。
【００３４】
選択手段としての第３ＰＥシフト３ｅは、自ＰＥのＡレジスタ３ｈのデータと、隣接するＰＥのＡレジスタ３ｈからのデータとを、ＧＰ部２からの制御信号により選択してセレクタ３ｆに出力する。第３ＰＥシフト３ｅは±２ＰＥ（図１の場合上下２ＰＥ）の範囲のＡレジスタ３ｈの出力を選択可能としている。すなわち、自ＰＥ３０内でＡＬＵ３ｇの演算結果を該ＡＬＵ３ｇの入力側にフォワディングする経路と、隣接するＰＥ３０ＡＬＵ３ｇの演算結果を自ＰＥ３０のＡＬＵ３ｇの入力側にフォワディングする経路と、を選択している。
【００３５】
セレクタ３ｆは、パイプラインレジスタ３ｄが出力したデータと、第３ＰＥシフト３ｅが出力したデータと、をＧＰ部２からの制御信号（フォワディング経路選択信号）により選択してＡＬＵ３ｇに出力する。
【００３６】
演算回路としてのＡＬＵ３ｇは、算術論理演算回路であり、セレクタ３ｆが出力したデータとＡレジスタ３ｈのデータとをＧＰ部２からの制御信号に基づいて演算を行いＡレジスタ３ｈに出力する。
【００３７】
Ａレジスタ３ｈは、ＡＬＵ３ｇの演算結果を格納するレジスタ（アキュムレータ）であり、格納したデータは、ＡＬＵ３ｇ、第２ＰＥシフト３ｃ、第３ＰＥシフト３ｅ、及び、隣接するＰＥ３０の第２ＰＥシフト３ｃ、第３ＰＥシフト３ｅに出力する。本実施形態では、上述しているように隣接する±２ＰＥへ出力している。
【００３８】
また、Ａレジスタ３ｈの出力は、第３ＰＥシフト３ｅに接続されているが、これは、セレクタ３ｆを含めてパイプラインハザードを回避するための自ＰＥ３０内でＡＬＵ３ｇの演算結果を該ＡＬＵ３ｇの入力側にフォワディングする経路となっている。さらに、隣接するＰＥ３０のＡレジスタがＰＥシフト３ｅに接続されている経路も、隣接するＰＥ３０ＡＬＵ３ｇの演算結果（Ａレジスタ３ｈ）を、自ＰＥ３０のＡＬＵ３ｇの入力側にフォワディングする経路となっている（図２中の隣接ＰＥのＡレジスタからのデータ）。
【００３９】
次に、上述した構成のＳＩＭＤ型マイクロプロセッサ１のパイプラインについて図３を参照して説明する。ＳＩＭＤ型マイクロプロセッサ１は、基本的に５段のパイプラインで動作し、それぞれのステージは、ＩＦ：インストラクションフェッチ、ＤＥＣ：デコード、ＲＲ：汎用レジスタ３ａリード、ＥＸ：ＡＬＵ実行、ＷＢ：汎用レジスタ３ａライトバックとなっている。ＩＦステージでは、プログラムＲＡＭのデータをＧＰ部２内の図示しないインストラクションレジスタに格納するまでを実行する。ＤＥＣステージでは、インストラクションレジスタに格納した命令のデコードを行う。ＲＲステージでは、自ＰＥ３０内または隣接する±２ＰＥの汎用レジスタファイル３ａからデータを選択して読み出して、パイプラインレジスタ３ｄに格納するまでを実行する。ＥＸステージでは、パイプラインレジスタ３ｄのデータもしくは、第３ＰＥシフト３ｅの出力データをセレクタ３ｆで選択したデータを入力の一つとしてＡＬＵ３ｇで演算を行い、結果をＡレジスタ３ｈに格納するまでを実行する。ＷＢステージでは、Ａレジスタの結果データを自ＰＥ３０内または隣接する±２ＰＥの汎用レジスタファイル３ａのうちいずれかに書き込む動作を実行する。
【００４０】
図３に示したパイプラインで、ＰＥシフトがある命令でＲＡＷハザードが起こる場合を図４を用いて説明する。先行命令は、演算結果を下へ２つ離れたＰＥ３０のＲ０レジスタに書き込みする命令である。後続命令は、自ＰＥ３０のＲ０レジスタから読み出しを行う命令である。この時、Ｒ０レジスタに関するＲＡＷハザードが起こっている。
【００４１】
この場合、図５に示すような制御手段としての制御回路２１ａをＧＰ部２のＳＣＵ２１内に設けてフォワディング制御を行う。制御回路２１ａは、先行命令のＰＥシフトの量及び方向より、先行命令の書き込み先ＰＥ３０を決定し、後続命令のＰＥシフトの量及び方向より、後続命令の読み出し先ＰＥ３０を決定する。そして、先行命令の書き込み先ＰＥ３０と後続命令の読み出し先ＰＥ３０とを比較し、その距離と方向に応じてフォワディング経路選択信号を出力する。ＰＥシフトの量とは、隣接するＰＥ３０からデータを読み出す場合と書き込む場合に、自分自身を０として、上下（あるいは左右）に離れた距離を示す。ＰＥシフトの方向は、自分自身を含めて下側を下、上側を上とする。上下２つまで参照できる場合、対象となるＰＥを上２、上１、下０、下１、下２と指定できる。例えば、図１の場合、ＰＥ１から見てＰＥ０はシフト量が上１、つまり方向が上で距離が１離れているとなる。
【００４２】
図５の制御回路２１ａを設けることで、図３の後続命令のＤＥＣステージで、フォワディング経路選択信号を発生させることができ、後続命令のＲＲステージの実行時には、先行命令の書き込みは終了していないが、後続命令のＥＸステージではＰＥ間に設けられたフォワディング経路からのデータを選択して演算を行うことができる（図３の矢印Ｘ）。これによりＲＡＷハザードを回避することができる。
【００４３】
本実施例によれば、ＰＥ３０に、自ＰＥ３０内のＡレジスタ３ｈデータのフォワディング経路に加えて、隣接するＰＥ３０間でもＡレジスタ３ｈデータをフォワディング経路と、それらの経路をＧＰ部２からの制御により選択する第３ＰＥシフト３ｅと、を設けたので、自ＰＥ３０内に加えて、隣接するＰＥ３０とのフォワディングが可能となり、ＲＡＷハザードを回避できる。これによって、ストールによるハザード回避に比べて実行サイクルを削減できる。
【００４４】
また、ＧＰ部２では、ＲＡＷハザードが起こった場合に、先行命令の書き込み先ＰＥと後続命令の読み出し先ＰＥ３０との距離に応じてフォワディング経路を第３ＰＥシフト３ｅに選択させるような制御回路２１ａを設けたので、先行命令の書き込み先ＰＥ３０と後続命令の読み出し先ＰＥ３０との距離に応じて隣接するＰＥ３０とのフォワディング制御を行うことができ、ＲＡＷハザードを回避できる。これによって、ストールによるハザード回避に比べて実行サイクルを削減できる。
【００４５】
［第２実施形態］
次に、本発明の第２の実施形態を図６ないし図８を参照して説明する。なお、前述した第１の実施形態と同一部分には、同一符号を付して説明を省略する。図６は、本発明の第２の実施形態にかかるＳＩＭＤ型マイクロプロセッサ１のＰＥ３０の詳細を示したブロック図である。図７は、先行命令と後続命令のＰＥ間のデータの書き込みと読み出しの関係を示す説明図である。図８は、先行命令と後続命令のＰＥ間のデータの書き込みと読み出しの関係を示す説明図である。
【００４６】
本実施形態では、第１の実施形態でＰＥ部３に設けていた第３ＰＥシフト３ｅおよび隣接するＰＥ３０のＡレジスタ３ｈをフォワディングする経路が削除されている点が異なる。このため、Ａレジスタ３ｈからのフォワディング経路がセレクタ３ｆに直接入力されている。
【００４７】
本実施形態の場合、隣接するＰＥ３０間のフォワディングは行えないが、例えば図７や図８に示すような場合は、ＲＡＷハザードを回避することができる。図７の場合は、先行命令は、演算結果を下へ２つ離れたＰＥ３０のＲ０レジスタに書き込みする命令である。後続命令は、下へ２つ離れたＰＥ３０のＲ０レジスタから読み出しを行う命令である。この時、Ｒ０レジスタに関するＲＡＷハザードが起こっている。この場合にＧＰ部２のＳＣＵ２１内の制御回路２１ａでは先行命令の書き込みＰＥ３０と後続命令の読み出しＰＥ３０とが一致する、つまり同じ番号のＰＥを指していることを検出して、フォワディング経路選択信号を出力することによって、セレクタ３ｆを切替えてＡレジスタ３ｈのデータをフォワディングすることができる。これによりＲＡＷハザードを回避することができる。
【００４８】
図８の場合は、先行命令は、ＰＥシフトなしで、Ｒ０レジスタに書き込みする命令である。後続命令は、ＰＥシフトなしで、Ｒ０レジスタから読み出しを行う命令である。この場合も図７と同様にＧＰ部２のＳＣＵ２１内の制御回路２１ａでは先行命令の書き込みＰＥ３０と後続命令の読み出しＰＥ３０とが一致する、つまり同じ番号のＰＥを指していることを検出して、フォワディング経路選択信号を出力することによって、セレクタ３ｆを切替えてＡレジスタ３ｈのデータをフォワディングすることができる。これによりＲＡＷハザードを回避することができる。
【００４９】
本実施形態によれば、自ＰＥ内のＡレジスタ３ｈのデータをフォワディング経路が設けられたＰＥ３０に対して、ＧＰ部２のＳＣＵ２１内の制御回路２１ａで、先行命令の書き込みＰＥ３０と後続命令の読み出しＰＥ３０とが一致することを検出して、フォワディング経路選択信号を出力してＡレジスタ３ｈのデータをフォワディングしているので、自ＰＥ３０内でフォワディングする経路が設けられているＰＥ３０であれば、ＧＰ部２に制御回路２１ａを設けることで、先行命令の書き込みＰＥ３０と後続命令の読み出しＰＥ３０とが一致することによるＲＡＷハザードを回避することができる。
【００５０】
なお、制御回路２１ａは、ＧＰ部２のＳＣＵ２１内に設けることに限らないが、ＧＰ部２内部で実行される命令を参照するので、少なくともＧＰ部２内に設けることが望ましい。
【００５１】
なお、本発明は上記実施形態に限定されるものではない。即ち、本発明の骨子を逸脱しない範囲で種々変形して実施することができる。
【図面の簡単な説明】
【００５２】
【図１】本発明の第１の実施形態にかかるＳＩＭＤ型マイクロプロセッサのブロック図である。
【図２】図１に示したＳＩＭＤ型マイクロプロセッサのプロセッサエレメントの詳細を示したブロック図である。
【図３】図１に示したＳＩＭＤ型マイクロプロセッサのパイプラインを示す説明図である。
【図４】先行命令と後続命令のＰＥ間のデータの書き込みと読み出しの関係を示す説明図である。
【図５】図１に示したＳＩＭＤ型マイクロプロセッサのフォワディング経路制御を行う制御回路のブロック図である。
【図６】本発明の第２の実施形態にかかるＳＩＭＤ型マイクロプロセッサ１のプロセッサエレメントの詳細を示したブロック図である。
【図７】先行命令と後続命令のＰＥ間のデータの書き込みと読み出しの関係を示す説明図である。
【図８】先行命令と後続命令のＰＥ間のデータの書き込みと読み出しの関係を示す説明図である。
【図９】従来のＳＩＭＤ型マイクロプロセッサのブロック図である。
【符号の説明】
【００５３】
１          ＳＩＭＤ型マイクロプロセッサ
２          グローバルプロセッサ部
３          プロセッサエレメント部
２１        ＳＣＵ
２１ａ      制御回路（制御手段）
３０        プロセッサエレメント
３ｅ        第３ＰＥシフト（選択手段）
３ｇ        ＡＬＵ（演算回路）
３ｈ        Ａレジスタ（演算結果）
【図１】
2010033426.tif 000003
【図２】
2010033426.tif 000004
【図３】
2010033426.tif 000005
【図４】
2010033426.tif 000006
【図５】
2010033426.tif 000007
【図６】
2010033426.tif 000008
【図７】
2010033426.tif 000009
【図８】
2010033426.tif 000010
【図９】
2010033426.tif 000011