(57)【要約】【課題】分岐予測ミスのペナルティを緩和し、無駄となる処理の量を低減してプロセッサの消費電力の低減と高速化を図ることができる制御フローコードの分離によるプロセッサの実現方法及びそれを用いたマイクロプロセッサを提供する。【解決手段】制御フローコードの分離によるプロセッサの実現方法において、分岐命令と分岐の条件を計算するための命令を、それらを除く通常の命令から分離するための命令セット形式を備え、この命令セット形式で構築された実行コードを処理する。【選択図】    図３
2004171248.tif 000002
【特許請求の範囲】
【請求項１】
分岐命令と分岐の条件を計算するための命令を、それらを除く通常の命令から分離するための命令セット形式を備え、この命令セット形式で構築された実行コードを処理することを特徴とする制御フローコードの分離によるプロセッサの実現方法。
【請求項２】
請求項１記載の制御フローコードの分離によるプロセッサの実現方法において、フェッチされた命令は、続くステアリングステージにおいて制御フローコードとそれ以外の命令に分けられ、それぞれの命令キューに格納され、制御フローコードの実行ユニットでは、命令キューから制御フローコードを取り出してインオーダに処理を進め、それ以外の命令は、既存のスーパースカラプロセッサと同様にアウトオブオーダ実行のバックエンドに投入されるようにしたことを特徴とする制御フローコードの分離によるプロセッサの実現方法。
【請求項３】
（ａ）分岐命令と分岐の条件を計算するための命令を、それらを除く通常の命令から分離するための命令セット手段と、
（ｂ）上記の命令セット手段で構築された実行コードを処理する実行コードの処理手段とを具備することを特徴とする制御フローコードの分離によるマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、低消費電力あるいは高速なプロセッサを構築するための命令セット形式、及びプロセッサを構築するための方式（プロセッサアーキテクチャ）に関するものであり、特に、制御フローコードの分離による高性能プロセッサの実現方法及びそれを用いたマイクロプロセッサに関するものである。
【０００２】
【従来の技術】
従来、高性能な汎用プロセッサはスーパースカラ方式を利用して実現されてきた。この方式では、多数の命令パイプラインをプロセッサのチップ上に実装し、同時に複数の命令をフェッチして実行することにより、命令レベル並列性の向上を狙っていた。しかしながら、このスーパースカラ方式の命令の流れは、１本の連続した流れとして処理されており、分岐命令と分岐条件を計算するための命令を明示的に分離して複数の命令流として処理するという概念は利用されていなかった。
【０００３】
下記特許文献１や非特許文献１において、分岐命令に対応するフェッチ命令と呼ばれる命令のみを異なるパイプラインで処理するフェッチ分岐方式が検討されている。しかし、この方式でも、分岐条件を計算するための命令を分岐することに関しては検討されていない。
【０００４】
【特許文献１】
特開平１０−６３５０１号公報  第３−４頁  図１
【非特許文献１】
情報処理学会論文誌  Ｖｏｌ．３９  Ｎｏ．８  １９９８年８月  ｐｐ．２５０９−２５１８「命令フェッチをプログラム制御するプロセッサ・アーキテクチャ」
【０００５】
【発明が解決しようとする課題】
上記したように、従来、汎用プロセッサの速度向上手法として命令レベル並列性の利用が検討されてきたが、分岐命令の存在により十分な命令をプロセッサの実行機構に供給できないことが並列性の抽出を妨げる原因の一つとなっていた。
【０００６】
この問題を緩和するために、分岐予測を用いて制御の流れを予測しながら投機的に命令を供給してきたが、一定の割合で発生する予測ミスが性能向上の足枷となっていた。
【０００７】
また、分岐予測を用いて投機的に処理する命令を増やすに従い、予測ミスが起こった際に無駄となる処理の量が多くなり、このことがプロセッサの消費電力を増加させていた。
【０００８】
本発明は、上記状況に鑑みて、分岐予測ミスのペナルティを緩和し、無駄となる処理の量を低減してプロセッサの消費電力の低減と高速化を図ることができる制御フローコードの分離によるプロセッサの実現方法及びそれを用いたマイクロプロセッサを提供することを目的とする。
【０００９】
【課題を解決するための手段】
本発明は、上記目的を達成するために、
〔１〕制御フローコードの分離によるプロセッサの実現方法において、分岐命令と分岐の条件を計算するための命令を、それらを除く通常の命令から分離するための命令セット形式を備え、この命令セット形式で構築された実行コードを処理することを特徴とする。
【００１０】
〔２〕上記〔１〕記載の制御フローコードの分離によるプロセッサの実現方法において、フェッチされた命令は、続くステアリングステージにおいて制御フローコードとそれ以外の命令に分けられ、それぞれの命令キューに格納され、制御フローコードの実行ユニットでは、命令キューから制御フローコードを取り出してインオーダに処理を進め、それ以外の命令は、既存のスーパースカラプロセッサと同様にアウトオブオーダ実行のバックエンドに投入されるようにしたことを特徴とする。
【００１１】
〔３〕制御フローコードの分離によるマイクロプロセッサにおいて、分岐命令と分岐の条件を計算するための命令を、それらを除く通常の命令から分離するための命令セット手段と、この命令セット手段で構築された実行コードを処理する実行コードの処理手段とを具備することを特徴とする。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態について詳細に説明する。
【００１３】
まず、制御フローコードを分離するための命令セット形式について説明する。
【００１４】
ここでは、分岐命令や分岐の条件を計算するための幾つかの機械命令のことを、制御フローコードと呼ぶことにする。制御フローコードをその他の命令から分離するために、制御フローコードの実行結果を格納するレジスタセット（Ｃ０からＣ３１という名前の付けられた３２個のレジスタ、これを制御フローレジスタセットと呼ぶことにする）をアーキテクチャステートに追加する。ここに、命令セット方式の新しさがある。
【００１５】
プロセッサのアーキテクチャステートは、Ｒ０からＲ３１までの整数レジスタセット、Ｆ０からＦ３１までの浮動小数点レジスタセット、Ｃ０からＣ３１までの制御フローレジスタセット、プログラムカウンタから構成される。
【００１６】
この命令セット方式を用いることで、オペランドとして制御フローレジスタを利用している命令を制御フローコードとして機械的に識別することが可能となる。
【００１７】
即値あるいは制御フローレジスタのみが制御フローコードのオペランドとして指定される。ただし、整数レジスタあるいは浮動小数点レジスタの内容を制御フローレジスタにコピーする命令のみ、入力オペランドの一つとして整数レジスタあるいは浮動小数点レジスタを指定できる。制御フローコードに、浮動小数点演算命令とロードストア命令は存在しないが、それ以外の算術論理演算やシフト命令などは整数レジスタを対象とした命令と同様のものを利用できる。
【００１８】
メモリからロードした値により分岐先を決定するコードの場合には、メモリの内容を整数レジスタにロードした後に、整数レジスタの値を制御フローレジスタにコピーすることで分岐を実現する。
【００１９】
図１は本発明にかかる制御フローコードを分離する命令セット形式のコード例を示す図であり、図１（ａ）はそのソースコードを示す図、図１（ｂ）は制御フローコードを分離するプロセッサのアセンブラを示す図である。
【００２０】
図１（ａ）に示すコードは、配列ｂの要素を定数ｃと掛け合わせ、配列ｚにより指定された配列ａの要素にストアする。アセンブラにおける最初の１個の命令と最後の３個の命令が制御フローコードとなる。
【００２１】
次いで、制御フローコードの分離による高性能プロセッサの実現方式について説明する。
【００２２】
図２は本発明の実施例を示す制御フローコードを処理する実行ユニットの構成例を示す図である。
【００２３】
この図において、１は制御フローコードを処理する実行ユニット、２は制御フローコードを転送するためのパス、３は命令キュー、１０は１６ビットデータパス、１１は１６ビット長のレジスタ、１２〜１５，２２，２３，３２は演算論理装置（ＡＬＵ）、２０は３２ビットデータパス、２１は３２ビット長のレジスタ、３０は６４ビットデータパス、３１は６４ビット長のレジスタである。１６ビットのデータパス１０は、３２ビットのデータバス２０同様にカスケードＡＬＵに接続されている。
【００２４】
制御フローコードのための実行機構では、インオーダ実行によるシンプルな命令パイプライン構成を採用することにより、分岐命令の早期実行を目指す。
【００２５】
制御フローコードの命令には、ループの誘導変数を計算するためのコードや、データ値をゼロと比較する処理が多く現れる。この様なコードにおいては、主流となりつつある６４ビット長のレジスタを必要としない場合が頻繁に出現する。本発明のプロセッサの実現方式では、制御フローコードが利用するオペランドのレジスタ長により適切なレジスタと演算器を選択できる機構を利用する。
【００２６】
具体的には、Ｃ０からＣ３１までの制御フローレジスタを、データ長に応じて次の１６ビット長のレジスタ１１、３２ビット長のレジスタ２１、６４ビット長のレジスタ３１という３つの領域に分割する。
【００２７】
演算に必要となる時間（ＡＬＵの動作速度）は、扱うデータのビット長に依存する。これを有効に利用するために制御フローコードの実行ユニットとしてカスケードＡＬＵアーキテクチャを利用する。１６ビット長、３２ビット長のレジスタ１１，２１の計算のためにカスケードＡＬＵアーキテクチャを利用した制御フローコードのための実行機構が図２に示されている。例えば、１６ビットのデータ長の演算であれば、データ依存の有無に関係なくサイクル当たり４つの命令を処理できる。
【００２８】
図３は本発明の実施例を示す制御フローコードを分離するプロセッサの命令パイプラインを示す図である。
【００２９】
この図において、１０１はＩＦ（命令フェッチ）、１０２は命令デコードおよびステアリング、１０３は命令キュー、１０４は名前替え（ｒｅｎａｍｅ）ユニット、１０５はイシュー（発行）キュー、１０６はイシュー（発行）ユニット、１０７はＲｅｇ・Ｒｅａｄ（レジスタ読み出し）、１０８は実行ユニット、１０９はメモリである。
【００３０】
点線で囲った部分は、図２に示した制御フローコードのための実行ユニット１を表している。比較のためにスーパースカラ方式の命令パイプラインを図４に示している。図４において、２０１はＩＦ（命令フェッチ）、２０２は命令デコード、２０３は名前替え（ｒｅｎａｍｅ）ユニット、２０４は発行キュー、２０５はイシュー（発行）ユニット、２０６はＲｅｇ・Ｒｅａｄ（レジスタ読み出し）、２０７は実行ユニット、２０８はメモリである。
【００３１】
本発明のプロセッサの実現方式において、フェッチされた命令は続くステアリングステージ（ＩＤステアリング）１０２において制御フローコードとそれ以外の命令に分けられ、それぞれの命令キュー３（図２参照），１０３（図３参照）に格納される。
【００３２】
そして、制御フローコードの実行ユニット１０８では、命令キュー３から制御フローコードを取り出してインオーダに処理を進める。それ以外の命令は、既存のスーパースカラプロセッサ（図４参照）と同様にアウトオブオーダ実行のバックエンドに投入される。
【００３３】
このように構成したので、本発明によれば、以下のような作用効果を奏することができる。
【００３４】
図５は本発明の制御フローコードを分離するプロセッサ方式と既存のスーパースカラ方式を比較した図であり、図５（ａ）はそのソースコードを示す図、図５（ｂ）は制御フローコードを分離するプロセッサのアセンブラを示す図、図５（ｃ）は制御フローコードを分離するプロセッサを示す図、図５（ｄ）は既存のスーパースカラプロセッサを示す図である。
【００３５】
このように、本発明の制御フローコードの分離による高性能プロセッサの実現方式の実行タイミングが図５（ｃ）に、これに対して、既存のスーパースカラ方式の実行タイミングが図５（ｂ）に示されている。先に示したサンプルコードの３回のループボディを３本のパイプラインで処理する場合の様子を描いた。３回のループボディを処理するために、スーパースカラ方式で１０サイクルを必要とするのに対して、本発明の実現方法では６サイクルで処理可能であり、この例では４サイクル分の高速化が達成されることが分かる。
【００３６】
制御フローコードをメインのパイプラインから分離することで、従来は１本の流れとして処理されていた部分を２本の流れとして扱うことができるので、個々のフローに必要となる発行（イシュー）の幅を削減できる。これにより、既存のスーパースカラ方式と比較して、プロセッサ全体のハードウェアの複雑さを緩和することができる。
【００３７】
制御フローコードを分離して分岐命令を早期に実行することにより、プロセッサでフラッシュする命令の数を削減できる。このことは、本発明により開発した実現方式が性能の向上をもたらすだけではなく、プロセッサ内の無駄な処理を削減できることを意味する。この結果として、アプリケーションを実行するための消費電力を削減することができる。また、制御フローコードの実行ユニットはインオーダに命令を処理するため、アウトオブオーダの実行機構に命令を投入する場合と比較して、制御フローコードを実行するための電力を節約できる。
【００３８】
これら、複雑さの軽減と消費電力の低減という特徴から、本発明の実現方式は高速なプロセッサの実現方式としてだけではなく、高速かつ低消費電力という条件を重視する組み込み用プロセッサやモバイル用プロセッサの実現方式としても適している。
【００３９】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づいて種々の変形が可能であり、これらを本発明の範囲から排除するものではない。
【００４０】
【発明の効果】
以上、詳細に説明したように、本発明によれば、以下に示すような効果を奏することができる。
【００４１】
（１）性能の向上をもたらすだけではなく、プロセッサ内の無駄な処理を削減できる。
【００４２】
（２）高速、かつ、低消費電力化を重視する組み込み用プロセッサやモバイル用プロセッサに好適である。
【図面の簡単な説明】
【図１】本発明にかかる制御フローコードを分離する命令セット形式のコード例を示す図である。
【図２】本発明の実施例を示す制御フローコードを処理する実行ユニットの構成例を示す図である。
【図３】本発明の実施例を示す制御フローコードを分離するプロセッサの命令パイプラインを示す図である。
【図４】既存のスーパースカラプロセッサの実現方式を示す図である。
【図５】本発明の制御フローコードを分離するプロセッサ方式と既存のスーパースカラ方式を比較した図である。
【符号の説明】
１    制御フローコードを処理する実行ユニット
２    制御フローコードを転送するためのパス
３，１０３    命令キュー
１０    １６ビットデータパス
１１    １６ビット長のレジスタ
１２〜１５，２２，２３，３２    演算論理装置（ＡＬＵ）
２０    ３２ビットデータパス
２１    ３２ビット長のレジスタ
３０    ６４ビットデータパス
３１    ６４ビット長のレジスタ
１０１    ＩＦ（命令フェッチ）
１０２    命令デコードおよびステアリング
１０４    名前替え（ｒｅｎａｍｅ）ユニット
１０５    イシュー（発行）キュー
１０６    イシュー（発行）ユニット
１０７    Ｒｅｇ・Ｒｅａｄ（レジスタ読み出し）
１０８    実行ユニット
１０９    メモリ
【図１】
2004171248.tif 000003
【図２】
2004171248.tif 000004
【図３】
2004171248.tif 000005
【図４】
2004171248.tif 000006
【図５】
2004171248.tif 000007