(57)【要約】【課題】条件分岐命令による実行効率の低下が抑えられた演算処理装置を提供する。【解決手段】それぞれが、命令を順次読み出す読出部と、命令に応じた演算を実行する演算実行部と、演算結果を記録する記録部とを有する２つのパイプライン処理部、２つのパイプライン処理部の一方を演算結果が有効な有効パイプラインとして指定し、他方を無効パイプラインとして指定するパイプライン指定部、および、条件分岐命令が読み出されたこと検知して、有効パイプラインの読出部には分岐命令に続く命令の読出しを継続させるとともに、無効パイプラインの読出部には条件分岐命令による分岐先の命令の読出しを行わせる条件分岐命令検知部を備え、パイプライン指定部は、有効パイプラインの演算実行部による演算の実行結果が条件分岐命令における分岐を意味する場合に、有効パイプラインと無効パイプラインの指定を切り替える。【選択図】        図１
2012043166.tif 000002
【特許請求の範囲】
【請求項１】
条件分岐命令を含む複数の命令を順次処理する演算処理装置であって、
それぞれが、命令を順次読み出す読出部と、該読出部によって読み出された命令に応じた演算を実行する演算実行部と、該実行部によって実行された演算結果を記録する記録部とを有する第１パイプライン処理部および第２パイプライン処理部、
前記第１パイプライン処理部および前記第２パイプライン処理部のうちの一方を、演算実行部による演算結果が有効でかつ記録部により演算結果が記録される有効パイプラインとして指定し、該一方に対する他方を、演算実行部による演算結果が無効でかつ前記記録部による演算結果の記録が禁止される無効パイプラインとして指定するパイプライン指定部、および、
前記有効パイプラインの読出部により条件分岐命令が読み出されたことを検知して、該有効パイプラインの読出部には該分岐命令に続く命令の読出しを継続させるとともに、前記無効パイプラインの読出部には該条件分岐命令による分岐先の命令の読出しを行わせる条件分岐命令検知部を備え、
前記パイプライン指定部は、前記有効パイプラインの演算実行部による演算の実行結果が条件分岐命令における分岐を意味する場合に、有効パイプラインと無効パイプラインの指定を切り替えるものであることを特徴とする演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関する。
【背景技術】
【０００２】
複数の命令を順次読出して実行する演算処理装置において、パイプライン処理を導入して実行時間の効率を高めることが一般的に行われている。パイプラインは、例えば、命令フェッチ、命令デコード、メモリリード、実行、およびメモリライトの各処理を担う複数のステージで構成されており、ある１つの命令を読み出した（フェッチした）次のサイクルでは、この命令をデコードすると同時に、この命令の次の命令をフェッチし、さらに次のサイクルでは、デコードした命令に基づいてデータのメモリリードを行うと同時に、前のサイクルでフェッチした命令をデコードし、さらに次の命令をフェッチするという具合に各ステージで次々に処理が実行される。例えばパイプラインの処理無しで、それぞれが５サイクルかけて実行される５つの命令を実行するには５×５＝２５サイクルの実行時間を要するが、パイプライン処理で各ステージを同時実行する場合、実行時間は９サイクルに短縮され実行効率が向上する。
【０００３】
ただし、プログラムには、通常、多数の条件分岐命令が含まれており、パイプライン処理では、条件分岐命令によるロスサイクル（ペナルティ）が避けられない。条件分岐命令の次に実行される命令の候補のうちの一方は条件分岐命令に続いて配置されているため、分岐が生じない場合にはパイプライン内での処理の連続性が保たれるものの、分岐が生じた場合には、すでにフェッチ等した命令を破棄し、分岐先のアドレスにある命令から各ステージの処理を実行し直すため、ロスサイクルが生じることとなる。ロスサイクルを低減する技術の一つとして、分岐するか否かを予め推測する分岐予測が知られているが、分岐の予測は確実でない。分岐によるロスサイクルはパイプラインにおけるステージの段数が深くなるほど大きくなり、プロセッサにおける命令の実行の効率化を図る上で障害となっている。
【０００４】
ここで、分岐命令の読出しが検出された場合には、分岐命令に続いて読み出された命令をバッファの特定領域に退避しておき、分岐先の命令を先読みする技術が知られている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−１０７６６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、命令をバッファへ退避する技術では、パイプラインの各ステージのうち読出し（フェッチ）についてのロスサイクルはふせげるものの、その先のステージについては実行のし直しが必要であり、ロスサイクルの低減としては不十分である。
【０００７】
本発明は上記問題点を解決し、条件分岐命令による実行効率の低下が抑えられた演算処理装置を提供することを目的とするものである。
【課題を解決するための手段】
【０００８】
上記目的を達成する本発明の演算処理装置は、条件分岐命令を含む複数の命令を順次処理する演算処理装置であって、
それぞれが、命令を順次読み出す読出部と、この読出部によって読み出された命令に応じた演算を実行する演算実行部と、この実行部によって実行された演算結果を記録する記録部とを有する第１パイプライン処理部および第２パイプライン処理部、
上記第１パイプライン処理部および上記第２パイプライン処理部のうちの一方を、演算実行部による演算結果が有効でかつ記録部により演算結果が記録される有効パイプラインとして指定し、この一方に対する他方を、演算実行部による演算結果が無効でかつ上記記録部による演算結果の記録が禁止される無効パイプラインとして指定するパイプライン指定部、および、
上記有効パイプラインの読出部により条件分岐命令が読み出されたことを検知して、この有効パイプラインの読出部にはこの分岐命令に続く命令の読出しを継続させるとともに、上記無効パイプラインの読出部にはこの条件分岐命令による分岐先の命令の読出しを行わせる条件分岐命令検知部を備え、
上記パイプライン指定部は、上記有効パイプラインの演算実行部による演算の実行結果が条件分岐命令における分岐を意味する場合に、有効パイプラインと無効パイプラインの指定を切り替えるものであることを特徴とする。
【０００９】
本発明の演算処理装置には、２つのパイプライン処理部が設けられており、条件分岐命令が検出されると、一方は分岐命令に続く命令の読出しを継続し、他方は分岐先の命令の読出しを行う。そして、演算の実行結果が分岐を意味する場合に、分岐先の命令を処理しているパイプラインを有効パイプラインに切り替えるため、分岐先の命令の処理が読み直しのロスなく継続される。したがって、条件分岐命令による実行効率の低下が抑えられる。
【発明の効果】
【００１０】
以上説明したように、本発明によれば、条件分岐命令による実行効率の低下が抑えられた演算処理装置が実現する。
【図面の簡単な説明】
【００１１】
【図１】本発明の演算処理装置の一実施形態を示すブロック図である。
【図２】図１に示す演算処理装置によって処理されるプログラムの例を示す図である。
【図３】図１に示す演算処理装置が図２に示すプログラムの命令を処理する第１の例を説明するタイムチャートである。
【図４】図１に示す演算処理装置が図２に示すプログラムの命令を処理する第２の例を説明するタイムチャートである。
【図５】本実施形態の演算処理装置の動作と比較するための参考例の処理を説明するタイムチャートである。
【発明を実施するための形態】
【００１２】
以下図面を参照して本発明の実施の形態を説明する。
【００１３】
図１は、本発明の演算処理装置の一実施形態を示すブロック図である。
【００１４】
図１に示す演算処理装置１は、メモリＭＥＭとともに半導体集積回路によって形成されており、命令を処理するパイプラインを２つ備えている。より詳細には、演算処理装置１は、第１パイプライン処理部１０と、第２パイプライン処理部２０と、第１プログラムカウンタ（ＰＣ０）３０と、第２プログラムカウンタ（ＰＣ１）４０と、パイプライン制御部５０と、レジスタ６０と、セレクタ７０と、バス８０とを備えている。演算処理装置１は、アドレスバスＡｂｕｓおよびデータバスＤｂｕｓからなるバス８０を介してメモリＭＥＭと接続されている。メモリＭＥＭには、複数の命令の並びであるプログラムが記憶されており、また、演算対象のデータも記憶されている。
【００１５】
第１パイプライン処理部１０および第２パイプライン処理部２０は、互いに同等の構造を有しており、５ステージのパイプライン処理をそれぞれ行う。第１パイプライン処理部１０および第２パイプライン処理部２０は、命令を読み出す読出部１１Ｆ，２１Ｆと、読み出された命令をデコードするデコード部１１Ｄ，２１Ｄと、命令の処理対象となるアドレスのメモリからデータを読み出すメモリ読出部１１Ｒ，２１Ｒと、命令に応じた演算を実行する演算実行部１１Ｅｘ，２１Ｅｘと、演算結果を記録する記録部１１Ｗ，２１Ｗとをそれぞれ備えている。読出部１１Ｆ，２１Ｆ、デコード部１１Ｄ，２１Ｄ、メモリ読出部１１Ｒ，２１Ｒ、演算実行部１１Ｅｘ，２１Ｅｘ、および記録部１１Ｗ，２１Ｗのそれぞれは、パイプライン処理における、命令の読出し（フェッチ）、デコード、メモリ読出し、演算、および記録の各ステージに対応し、処理を同時に実行する。また、各部の処理は、演算処理装置１の動作の基準となるクロックの１サイクルで実行される。
【００１６】
ここで代表として第１パイプライン処理部１０について説明すると、第１プログラムカウンタ３０は、第１パイプライン処理部１０のためのプログラムカウンタであり、第１パイプライン処理部１０の読出部１１Ｆには、プログラムが記憶されたメモリＭＥＭのうち第１プログラムカウンタ３０が示すアドレスから命令が読み出される。なお本実施形態において１つの命令には、演算・制御の内容を表わすオペコードと演算対象を表わすオペランドが含まれている。読出部１１Ｆは１サイクルごとに命令を読み出し、第１プログラムカウンタ３０は、読出部１１Ｆが命令を読み出すごとにアドレスの値を命令の長さ分だけ増加させる。したがって、読出部１１Ｆは、メモリＭＥＭに記憶された命令を順次読み出す。デコード部１１Ｄは、読出部１１Ｆで読み出された命令をデコードし、実行する演算・制御の内容を確定する。また、デコード部１１Ｄは、命令が、メモリＭＥＭ中のデータを演算対象とする場合には、対象データの読出しのため、命令中のオペランドに基づいて対象データのアドレスの値をアドレスバスＡｂｕｓに出力する。この後、メモリ読出部１１Ｒが、データバスＤｂｕｓからデータを取り込むことで、演算の対象となるデータをメモリＭＥＭから読み出す。演算実行部１１Ｅｘは、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ）１１１を有しており、メモリ読出部１１Ｒで得られたデータおよびレジスタ６０に記憶されたデータに対し、デコードされた命令の内容に応じた演算および制御の処理を行う。記録部１１Ｗは、演算実行部１１Ｅｘによる演算の結果を、メモリＭＥＭまたはレジスタ６０に記録する。
【００１７】
パイプライン制御部５０は、第１パイプライン処理部１０および第２パイプライン処理部２０の動作を制御するブロックであり、条件分岐命令検知部５１およびパイプライン指定部５２を備えている。パイプライン指定部５２は、第１パイプライン処理部１０および第２パイプライン処理部２０のうちの一方を有効パイプラインとして指定し、他方を無効パイプラインとして指定する。ここで、有効パイプラインに指定されたパイプライン処理部は、演算実行部による演算結果が有効であり、記録部により演算結果が記録される。また無効パイプラインに指定されたパイプライン処理部は、演算実行部による演算結果が無効であり、記録部による演算結果の記録が禁止される。パイプライン指定部５２は、指定のための指定信号ＰＣＳＥＬを出力する。指定信号ＰＣＳＥＬの値が”０”の場合は、第１パイプライン処理部１０が有効パイプラインであり、第２パイプライン処理部２０が無効パイプラインである。指定信号ＰＣＳＥＬの値が”１”の場合は、第１パイプライン処理部１０が無効パイプラインであり、第２パイプライン処理部２０が有効パイプラインである。
【００１８】
条件分岐命令検知部５１は、条件分岐命令が読み出されたこと検知する。より具体的には、条件分岐命令検知部５１は、セレクタ７０によって、第１パイプライン処理部１０および第２パイプライン処理部２０のうち、指定信号ＰＣＳＥＬにより有効パイプラインに指定されたパイプライン処理部（以降、単に、有効パイプラインとも称する。）の読出部（１１Ｆまたは２１Ｆ）で読み出される命令を検査することによって、条件分岐命令が読み出されたこと検知する。条件分岐命令検知部５１は、条件分岐命令を検知した場合、有効パイプラインの読出部にはこの分岐命令に続く命令の読出しを継続させるとともに、無効パイプラインの読出部にはこの条件分岐命令による分岐先の命令の読出しを行わせる。より詳細には、例えば、指定信号ＰＣＳＥＬが”０”であり、第１パイプライン処理部１０が有効パイプラインに指定されている場合、条件分岐命令検知部５１には、第１パイプライン処理部１０の読出部１１Ｆで読み出される命令が入力される。入力された命令が条件分岐命令の場合、条件分岐命令検知部５１は、検出された命令中のオペランドと第１プログラムカウンタ３０から条件分岐命令による分岐先アドレスを算出し、第２プログラムカウンタ４０に設定する。また、条件分岐命令検知部５１は、第２パイプライン処理部２０に起動信号ＳＴＡＲＴ１を供給して読出部２１Ｆに命令の読出しを開始させる。この一方、第１プログラムカウンタ３０には、値を命令長分だけ加算させることによって、条件分岐命令の次に配置された命令のアドレスを設定させる。これによって、次のサイクルで、有効パイプラインの読出部１１Ｆには、条件分岐命令の次に配置された命令が引き続き読み出され、無効パイプラインの読出部２１Ｆには、条件分岐命令の分岐先に配置された命令が読み出される。条件分岐命令検知部５１は、起動信号ＳＴＡＲＴ０，ＳＴＡＲＴ１の供給を停止することによって、対応するパイプライン処理部内の各部のデータを初期化して（パイプラインフラッシュ）、動作を停止させる機能も有している。
【００１９】
パイプライン指定部５２は、第１パイプライン処理部１０および第２パイプライン処理部２０のうち、有効パイプラインとして指定されたパイプライン処理部の演算実行部（１１Ｅｘまたは２１Ｅｘ）による演算の実行結果が条件分岐命令における分岐を意味する場合に、有効パイプラインと待機パイプラインの指定を切り替える。例えば、指定信号ＰＣＳＥＬが”０”であり、第１パイプライン処理部１０が有効パイプラインと指定されている場合に、第１パイプライン処理部１０の演算実行部１１Ｅｘは、条件分岐命令を処理するときには、この条件分岐命令の前の命令の演算結果に基づいて、分岐か否かを判定する。パイプライン指定部５２は、演算実行部１１Ｅｘと並行して、演算実行部１１Ｅｘで処理中の条件分岐命令の種類とその前の命令の演算結果とから分岐か否かを判定し、分岐の場合には、指定信号ＰＣＳＥＬを”１”として、有効パイプラインと待機パイプラインの指定を切り替える。また、パイプライン指定部５２は、条件分岐命令検知部５１に、それまで、有効パイプラインであったパイプライン処理部に対する起動信号（ＳＴＡＲＴ０またはＳＴＡＲＴ１）の供給を停止させる。これによって、それまで有効パイプラインであった第１パイプライン処理部１０は、各部のデータをリセット状態としてから（パイプラインフラッシュ）第１パイプライン処理部１０の動作を停止する。
【００２０】
これまで、第１パイプライン処理部１０が有効パイプラインと指定されている場合の例を説明したが、これとは逆に、第２パイプライン処理部２０が有効パイプラインと指定されている場合には、第１パイプライン処理部１０の各部と第２パイプライン処理部２０の各部の役割が入れ替わって、上述したのと同様の動作が実行される。
【００２１】
本実施形態の演算処理装置１では、例えば、第１パイプライン処理部１０が有効パイプラインに指定されている場合、まず、条件分岐命令検知部５１によって、第１パイプライン処理部１０の読出部１１Ｆでの条件分岐命令の読出しが検知されると、読出部１１Ｆが、条件分岐命令の次に配置された命令から命令の列を引き続き読み出し、無効パイプラインである第２パイプライン処理部２０の読出部２１Ｆが、条件分岐命令の分岐先に配置された命令から命令の列を読み出す。したがって、分岐しない場合の命令と、分岐先の命令とが、第１パイプライン処理部１０と第２パイプライン処理部２０にそれぞれ分担されて並列に処理される。この後、パイプライン指定部５２によって上記の条件分岐命令の実行結果が分岐しないと判定された場合には、第１パイプライン処理部１０で処理が引き続き実行され、分岐すると判定された場合には、第２パイプライン処理部２０が有効パイプラインとなって、分岐先の命令の実行を引き継ぐ。ここで、分岐先の命令は、第２パイプライン処理部２０によって、読出し、デコード、およびメモリリードの各ステージの処理が予め実行されており、分岐先の命令について、改めて読出し・デコード等をせずに済むので、分岐先の命令の処理が読み直しのロスなく継続される。したがって、演算処理装置１では、条件分岐命令による実行効率の低下が抑えられる。
【００２２】
続いて、演算処理装置１の動作をより具体的に説明する。
【００２３】
図２は、図１に示す演算処理装置によって処理されるプログラムの例を示す図である。
【００２４】
図２に示すプログラムＰはメモリＭＥＭに記憶されており、複数の命令で構成されている。各命令は、順に配列されて記憶されている。図２には、プログラムＰのうち、プログラムメモリアドレス（単にアドレスと称する）Ａ１０〜Ａ２６に記憶された命令（ｚ），（Ｂｒ  Ａ２１），（ａ），（ｂ），…（ｆ），…（ａ’），（ｂ’），…（ｆ’）が示されている。本実施形態における各命令は、すでに説明したように、機械語のオペコードに加えてオペランドも含まれる。ここで命令（Ｂｒ  Ａ２１）は、条件分岐命令であり、分岐条件が成立すれば、この次に分岐先のアドレスＡ２１の命令を実行し（分岐）、この前に実行された命令（例えば命令（ｚ））の実行結果に基づく分岐条件が不成立の場合には、この命令（Ｂｒ  Ａ２１）の次に記憶された命令を実行する（分岐しない）命令である。命令（Ｂｒ  Ａ２１）は、例えば、ＢＮＥ（Ｂｒａｎｃｈ  ｉｆ  Ｎｏｔ  Ｅｑｕａｌ  ０）命令である。なお、分岐命令による分岐先指定の方式には、分岐命令（Ｂｒ  Ａ２１）配置が配置されたアドレスを基準として相対的に指定する相対アドレッシングと、アドレス値を直接に指定する絶対アドレッシングとがあるが、ここでは、相対アドレッシングによるものとして説明を続ける。命令（ｚ）は、例えば加算命令ＡＤＤである。図２に示す残りの命令も演算命令であるが、本実施形態では条件分岐命令の処理が重要であるので、この他の命令の種類については説明を省略し、条件分岐命令（Ｂｒ  Ａ２１）の次に配置された命令（ａ）〜（ｆ）、および条件分岐命令（Ｂｒ  Ａ２１）の分岐先に配置された命令（ａ’）〜（ｆ’）として単にアルファベットで表わす。
【００２５】
図２に示す命令の処理を、条件分岐命令で分岐しない場合と、分岐する場合とに分けて説明する。
【００２６】
図３は、図１に示す演算処理装置が図２に示すプログラムの命令を処理する第１の例を説明するタイムチャートである。
【００２７】
図３には、演算処理装置１の第１パイプライン処理部１０および第２パイプライン処理部２０が、メモリＭＥＭのアドレスＡ１０に記憶された命令から順に命令の処理を実行する様子が、サイクルＣ１からサイクルＣ８まで順を追って示されている。ここでは、初期設定として、パイプライン指定部５２から出力される指定信号ＰＣＳＥＬの値が”０”であり、すなわち、第１パイプライン処理部１０がアクティブすなわち有効パイプラインとして指定され、第２パイプライン処理部２０がインアクティブすなわち無効パイプラインとして指定されているものとする。また、第１プログラムカウンタ３０の値は、アドレスＡ１０の値を示しているものとして説明する。
【００２８】
まず、サイクルＣ１で、有効パイプラインとして指定された第１パイプライン処理部１０では、読出部１１Ｆが、メモリＭＥＭのアドレスＡ１０に記憶された命令（ｚ）を読み出す。第１プログラムカウンタ３０は、次のアドレスＡ１１を示す。第２パイプライン処理部２０は停止している。
【００２９】
次に、サイクルＣ２で、デコード部１１Ｄが、命令（ｚ）のデコードを行い、読出部１１Ｆが、アドレスＡ１１に記憶された命令（Ｂｒ）（図２に示す命令（Ｂｒ  Ａ２１））を読み出す。第１パイプライン処理部１０で条件分岐命令が読み出されたことは、パイプライン制御部５０の条件分岐命令検知部５１によって検知される。条件分岐命令検知部５１は、無効パイプラインとして指定された第２パイプライン処理部２０に命令（Ｂｒ）の分岐先の命令の読み出しを行わせる。すなわち、条件分岐命令検知部５１は、命令（Ｂｒ）のオペランドの値と第１プログラムカウンタ３０の値から得られる分岐先のアドレスＡ２１を、第２プログラムカウンタ４０に設定し、第２パイプライン処理部２０に対する起動信号ＳＴＡＲＴ１を供給する。
【００３０】
次に、サイクルＣ３で、第１パイプライン処理部１０のメモリ読出部１１Ｒが、命令（ｚ）の対象データを読み出す。また、デコード部１１Ｄが、命令（Ｂｒ）のデコードを行い、読出部１１ＦがアドレスＡ１２の命令（ａ）を読み出す。この一方、第２パイプライン処理部２０では、読出部２１Ｆが、命令（Ｂｒ）による分岐先のアドレスＡ２１の命令（ａ’）を読み出す。
【００３１】
次に、サイクルＣ４で、第１パイプライン処理部１０の演算実行部１１Ｅｘが、命令（ｚ）の演算を実行する。図３に示す第１の例では、命令（ｚ）の演算結果は”０”であるとする。また、サイクルＣ４では、命令（Ｂｒ）はメモリ読出部１１Ｒのステージに移動するが、特に処理は行われない。また、デコード部１１Ｄは、命令（ａ）のデコードを行い、読出部１１ＦがアドレスＡ１３の命令（ｂ）を読み出す。第２パイプライン処理部２０では、デコード部２１Ｄが命令（ａ’）のデコードを行い、読出部２１Ｆが、アドレスＡ２２の命令（ｂ’）を読み出す。
【００３２】
次に、サイクルＣ５で、第１パイプライン処理部１０の記録部１１Ｗが、命令（ｚ）の演算結果をメモリＭＥＭに記録する。また、演算実行部１１Ｅｘは、命令（Ｂｒ）の分岐条件を判定する。この例では、命令（Ｂｒ）はＢＮＥであり、前のサイクルＣ４における演算結果は”０”であるため、分岐はしない。したがって、命令（Ｂｒ）に続いて配置された命令（ａ）が引き続き処理されることとなる。命令（Ｂｒ）の分岐条件は、パイプライン指定部５２でも演算実行部１１Ｅｘと同様に判定される。また、このサイクルＣ５では、メモリ読出部１１Ｒが、命令（ａ）の演算対象のデータを読み出し、デコード部１１Ｄが、命令（ｂ）のデコードを行い、読出部１１ＦがアドレスＡ１４の命令（ｃ）を読み出す。第２パイプライン処理部２０では、メモリ読出部２１Ｒが命令（ａ’）の演算対象のデータを読み出し、デコード部２１Ｄが命令（ｂ’）のデコードを行い、読出部２１Ｆが、アドレスＡ２３の命令（ｃ’）を読み出す。ただし、第１パイプライン処理部１０で処理されている命令（Ｂｒ）の分岐条件は、分岐しないと判定されており、第２パイプライン処理部２０で処理されている分岐先の命令は実行されない。
【００３３】
次の、サイクルＣ６で、パイプライン指定部５２は、分岐条件が不成立つまり分岐しないと判定していることから、条件分岐命令検知部５１は、第２パイプライン処理部２０に対する起動信号ＳＴＡＲＴ１の供給を停止させる。これによって、第２パイプライン処理部２０は、各部のデータをリセット状態としてから（パイプラインフラッシュ）動作を停止する。また、このサイクルＣ６で、命令（Ｂｒ）は記録部１１Ｗのステージに移動するが、条件分岐命令に対する記録の処理は行われない。また、演算実行部１１Ｅｘは、命令（ａ）の演算を実行し、メモリ読出部１１Ｒが、命令（ｂ）の演算対象のデータを読み出し、デコード部１１Ｄが、命令（ｃ）のデコードを行い、読出部１１ＦがアドレスＡ１５の命令（ｄ）を読み出す。第１パイプライン処理部１０は、有効パイプラインと指定されているため、演算実行部１１Ｅｘによる命令（ａ）の演算結果は有効なものとして扱われ、次のサイクルで記録がなされる。
【００３４】
次の、サイクルＣ７で、第１パイプライン処理部１０の記録部１１Ｗは、命令（ａ）の演算結果を書き込み、演算実行部１１Ｅｘは命令（ｂ）の演算を実行する。さらに次のサイクルＣ８で、第１パイプライン処理部１０の記録部１１Ｗは、命令（ｂ）の演算結果を書き込み、演算実行部１１Ｅｘは命令（ｃ）の演算を実行する。このようにして、第１パイプライン処理部１０は、有効パイプラインとして、条件分岐命令（Ｂｒ）に続く命令（ａ）〜（ｆ）の処理を引き続きパイプライン処理で実行する。
【００３５】
図４は、図１に示す演算処理装置が図２に示すプログラムの命令を処理する第２の例を説明するタイムチャートである。
【００３６】
図３に示す第１の例では、第１パイプライン処理部１０の演算実行部１１Ｅｘが命令（ｚ）の演算を実行した演算結果は”０”であったが、図４に示す第２の例では、演算実行部１１Ｅｘが命令（ｚ）の演算を実行した演算結果が”０”以外の値である。したがって、図４に示す第２の例では、サイクルＣ４までは、命令（ｚ）の演算結果を除き第１の例と同じ動作であるので説明を省略し、サイクルＣ５から説明する。
【００３７】
図４に示す第２の例では、サイクルＣ５で、第１パイプライン処理部１０の記録部１１Ｗが、命令（ｚ）の演算結果をメモリＭＥＭに記録する。また、演算実行部１１Ｅｘは、命令（Ｂｒ）の分岐条件を判定する。この例では、命令（Ｂｒ）はＢＮＥであり、前のサイクルＣ４における演算結果は”０”以外であるため、分岐条件は成立、つまり分岐する。したがって、命令（Ｂｒ）の分岐先のアドレスＡ２１に配置された命令（ａ’）が処理されることとなる。命令（Ｂｒ）の分岐条件は、パイプライン指定部５２でも演算実行部１１Ｅｘと同様に判定される。また、サイクルＣ５では、メモリ読出部１１Ｒが、命令（ａ）の演算対象のデータを読み出し、デコード部１１Ｄが、命令（ｂ）のデコードを行い、読出部１１ＦがアドレスＡ１４の命令（ｃ）を読み出す。ただし、命令（Ｂｒ）の分岐条件は分岐すると判定されており、これらの命令（ａ），（ｂ），（ｃ）は最終的には実行されない。この一方、第２パイプライン処理部２０では、メモリ読出部２１Ｒが命令（ａ’）の演算対象のデータを読み出し、デコード部２１Ｄが命令（ｂ’）のデコードを行い、読出部２１Ｆが、アドレスＡ２３の命令（ｃ’）を読み出す。
【００３８】
次の、サイクルＣ６で、パイプライン指定部５２は、指定信号ＰＣＳＥＬの値を”１”にして、第１パイプライン処理部１０を無効パイプラインとし、第２パイプライン処理部２０を有効パイプラインとする。第２パイプライン処理部２０の演算実行部２１Ｅｘは、分岐先の命令（ａ’）の演算を実行し、メモリ読出部２１Ｒが、命令（ｂ’）の演算対象のデータを読み出し、デコード部２１Ｄが、命令（ｃ’）のデコードを行い、読出部２１ＦがアドレスＡ２４の命令（ｄ’）を読み出す。第２パイプライン処理部２０は、有効パイプラインと指定されているため、演算実行部２１Ｅｘによる命令（ａ’）の演算結果は有効なものとして扱われ、次のサイクルで記録がなされる。第１パイプライン処理部１０は無効パイプラインと指定されることによって、記録部１１Ｗを除いた各部のデータをリセット状態としてから（パイプラインフラッシュ）動作を停止する。また、サイクルＣ６で、命令（Ｂｒ）は記録部１１Ｗのステージに移動するが、条件分岐命令に対する記録の処理は行われない。
【００３９】
次の、サイクルＣ７で、第２パイプライン処理部２０の記録部２１Ｗは、分岐先の命令（ａ’）の演算結果を書き込み、演算実行部２１Ｅｘは命令（ｂ’）の演算を実行する。このようにして、有効パイプラインの指定が切り替わることによって、条件分岐命令（Ｂｒ  Ａ２１）が演算実行部１１Ｅｘで実行された次のサイクルで、分岐先の命令（ａ’）が演算実行部２１Ｅｘで実行される。さらに次のサイクルＣ８で、第２パイプライン処理部２０の記録部２１Ｗは、命令（ｂ’）の演算結果を書き込み、演算実行部２１Ｅｘは命令（ｃ’）の演算を実行する。このようにして、第２パイプライン処理部２０は、有効パイプラインとして、条件分岐命令（Ｂｒ）の分岐先に配置された命令（ａ’）〜（ｆ’）の処理をパイプライン処理で実行する。
【００４０】
本実施形態の演算処理装置１では、条件分岐命令（Ｂｒ  Ａ２１）の読出しが検出されると、有効パイプラインとして指定された第１パイプライン処理部１０は分岐命令に続く命令の読出しを継続し、無効パイプラインとして指定された第２パイプライン処理部２０は分岐先の命令の読出しを行う。そして、演算の実行結果が条件分岐命令（Ｂｒ）の分岐を意味する場合に、分岐先の命令を処理している第２パイプライン処理部２０を有効パイプラインに切り換えるため、分岐先の命令（ａ’），（ｂ’），（ｃ’）…の処理が読み直しのロスなく継続される。また、演算の実行結果が条件分岐命令（Ｂｒ）で分岐しないことを意味する場合には、第１パイプライン処理部１０が引き続き条件分岐命令（Ｂｒ）の次の命令（ａ），（ｂ）…を実行する。したがって、条件分岐命令によるペナルティが回避され、実行効率の低下が抑えられる。
【００４１】
この後、演算処理装置１において、第２パイプライン処理部２０が有効パイプラインとして処理を実行している場合に、第２パイプライン処理部２０の読出部１１Ｆが条件分岐命令を読み出したときには、第１パイプライン処理部１０で条件分岐命令の分岐先の命令を読み出させるとともに、第２パイプライン処理部２０では条件分岐命令の次の命令を引き続き読み出させ、条件分岐命令の分岐条件が分岐の場合には、有効パイプラインを第１パイプライン処理部１０に切り替えることで、条件分岐命令によるペナルティが回避された処理が引き続き実行される。
【００４２】
図５は、本実施形態の演算処理装置の動作と比較するための参考例の処理を説明するタイムチャートである。
【００４３】
図５は、仮に１つのパイプライン処理部だけで処理を実行する演算処理装置によって図２に示すプログラムＰが実行される場合の動作を参考例として説明するものである。図５のパート（Ａ）は、条件分岐命令で分岐をしない場合の動作を示し、図５のパート（Ｂ）は、分岐する場合の動作を示している。
【００４４】
図５に動作を示す参考例の演算処理装置は、条件分岐命令（Ｂｒ）を読み出した後、この条件分岐命令（Ｂｒ）の次に配置された命令を引き続き読み出す。このため、図５のパート（Ａ）に示すように、条件分岐命令（Ｂｒ）で分岐をしない場合には、各命令がパイプラインの各ステージでサイクルごとに順次実行されていく。しかし、図５のパート（Ｂ）に示すように、条件分岐命令（Ｂｒ）で分岐をする場合には、パイプライン処理部の各部のデータが一旦リセット状態とされ（パイプラインフラッシュ）、分岐先の命令（ａ’）の読み出しから処理が再開される。このため、条件分岐命令（Ｂｒ）の実行から、分岐先の命令（ａ’）の実行までには５サイクルのロスサイクルが生じ、命令の実行効率が低下している。
【００４５】
この一方、図１に示す本実施形態の演算処理装置１によれば、条件分岐命令で分岐の場合および分岐しない場合のいずれでもブランクが回避され、実行効率の低下が抑えられる。
【００４６】
なお、上述した実施形態では、本発明にいう第１パイプライン処理部および第２パイプライン処理部の例として、５ステージのパイプライン処理を行う２つのパイプライン処理部を示したが、本発明はこれに限られるものではなく、例えば、パイプラインのステージ数は４ステージ以下のものであってもよく、また６ステージ以上のものであってもよい。
【００４７】
また、上述した実施形態では、本発明にいう条件分岐命令の例として、ＢＮＥを示したが、本発明はこれに限られるものではなく、演算処理装置が処理するあらゆる条件分岐命令であってよい。
【００４８】
また、上述した実施形態では、本発明にいう演算処理装置の例として、メモリＭＥＭとともに半導体集積回路によって形成されている例を示したが、本発明はこれに限られるものではなく、例えばメモリは外付けのものであってもよく、また、例えばタイマといった各種周辺機能がともに形成されたものであってもよい。
【符号の説明】
【００４９】
１    演算処理装置
１０    第１パイプライン処理部
２０    第２パイプライン処理部
１１Ｆ，２１Ｆ    読出部
１１Ｄ，２１Ｄ    デコード部
１１Ｒ，２１Ｒ    メモリ読出部
１１Ｅｘ，２１Ｅｘ    演算実行部
１１Ｗ，２１Ｗ    記録部
３０    第１プログラムカウンタ
４０    第２プログラムカウンタ
５０    パイプライン制御部
５１    条件分岐命令検知部
５２    パイプライン指定部
【図１】
2012043166.tif 000003
【図２】
2012043166.tif 000004
【図３】
2012043166.tif 000005
【図４】
2012043166.tif 000006
【図５】
2012043166.tif 000007