(57)【要約】【課題】ＶＬＩＷ命令の演算スロットに含まれる無効演算ＮＯＰの割合を低下させるとともに、同時並列に動作可能な実行資源の数に応じてＶＬＩＷ命令列を生成可能とする動的な命令列生成方法および装置を提供すること。【解決手段】命令生成部１によって、メモリ２から有効演算又は無効演算を格納する複数の演算スロットを含み逐次実行される１つ以上の命令で構成される命令列を２つ以上参照し併合して併合命令列を生成する動的な命令列生成方法であって、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令と、各演算スロットに格納された命令の有効演算が何れの併合前命令列の命令から選択されたかを示す命令列識別子の情報とを生成し、命令実行部３に入力する動的な命令列生成方法を構成する。【選択図】    図２
2004362026.tif 000002
【特許請求の範囲】
【請求項１】
命令実行時に使用する実行資源に対応した複数の演算スロットを含み逐次実行される命令１つ以上で構成される命令列２つ以上を、複数の命令列を格納している記憶装置から参照し併合して併合命令列を生成する動的な命令列生成方法であって、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令を該併合命令列の命令として生成するとともに、該併合命令列の命令の有効演算が何れの併合前命令列の命令から選択された有効演算であるかを識別する命令列識別子の情報を生成することを特徴とする動的な命令列生成方法。
【請求項２】
命令実行時に使用する実行資源に対応した複数の演算スロットを含み逐次実行される命令１つ以上で構成される命令列２つ以上を、複数の命令列を格納している記憶装置から参照し併合して併合命令列を生成する動的な命令列生成装置であって、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令を該併合命令列の命令として生成するとともに、該併合命令列の命令の有効演算が何れの併合前命令列の命令から選択された有効演算であるかを識別する命令列識別子の情報を生成することを特徴とする動的な命令列生成装置。
【請求項３】
請求項１に記載の動的な命令列生成方法において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、同一の演算資源を使用する演算スロットに共に有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成方法。
【請求項４】
請求項１又は３に記載の動的な命令列生成方法において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、次に実行する命令列の先頭を変更する可能性のある分岐演算又は分岐に影響を与える演算が少なくとも一方の演算スロットに格納されており、他方の対応する演算スロットには有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成方法。
【請求項５】
請求項２に記載の動的な命令列生成装置において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、同一の演算資源を使用する演算スロットに共に有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成装置。
【請求項６】
請求項２又は５に記載の動的な命令列生成装置において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、次に実行する命令列の先頭を変更する可能性のある分岐演算又は分岐に影響を与える演算が少なくとも一方の演算スロットに格納されており、他方の対応する演算スロットには有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサにおける動的な命令列生成方法および装置に関する。
【０００２】
【従来の技術】
【非特許文献１】「高橋義造編、並列処理機構、ｐｐ．  １３４−１６６、丸善、１９８９」
【非特許文献２】「論文：  Ｍａｎｖｉ  Ａｇａｒｗａｌ，  Ｓ．  Ｋ．  Ｎａｎｄｙ，  Ｊ．  ｖ．  Ｅｉｎｄｈｏｖｅｎ  ａｎｄ  Ｓ．  Ｂａｌａｋｒｉｓｈａｎａｎ，“Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ａｒｃｈｉｔｅｃｔｕｒａｌ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｓｐｅｃｕｌａｔｉｖｅ  Ｔｒａｃｅ  Ｓｃｈｅｄｕｌｉｎｇ  ｉｎ  ＶＬＩＷ  Ｐｒｏｃｅｓｓｏｒｓ”，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  １５ｔｈ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ  ａｎｄ  Ｓｙｓｔｅｍｓ  Ｄｅｓｉｇｎ  （ＳＢＣＣＩ’０２），  ｐｐ．  ４３−４８，  ２００２．」１つの命令に、複数の演算（ロード、ストア、算術演算、分岐など）スロットを定義し、それらの演算スロットに格納された演算をすべて同時に実行する形式のプロセッサアーキテクチャとして、上記非特許文献１に説明されているように、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令アーキテクチャがある。このアーキテクチャでは、同一の命令に含まれる演算が同時にパイプラインに投入され、同時並列に動作可能な実行資源を利用して実行される。各演算間には依存関係がないように事前にコンパイラによってＶＬＩＷ命令列は生成されることが前提となるが、同時並列に実行できる演算がないときは該当する演算スロットに、実行資源を使用しない無効演算ＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）を格納しておく。ＶＬＩＷ命令アーキテクチャは依存関係を命令実行時にチェックするオーバヘッドが不要となるので、スーパースカラー（Ｓｕｐｅｒ  ｓｃａｌａｒ）のような動的な実行順序制御機構が不要となり、ハードウェアの簡素化が図られ、シリコン領域の有効利用や高速動作が可能となる。
【０００３】
上記非特許文献２には、ＶＬＩＷプロセッサにおいて、キャッシュミスやページフォルトの際に生じる空きサイクルを活用してスレッドを動作させる技術が記載されている。
【０００４】
【発明が解決しようとする課題】
しかし、ＶＬＩＷ命令アーキテクチャには以下の欠点がある。まず、一般的なソフトウェアの場合、演算を逐次的に処理していくものが大部分であり、同時並列に実行可能な演算を抽出してＶＬＩＷ命令列を生成しても演算スロットの大部分にＮＯＰが格納されてしまうことが多く、同時並列に動作可能な実行資源の有効利用が充分に図れないという点である。さらに、ＬＳＩの微細加工技術が向上してシリコン領域上に実装可能な同時並列に動作可能な実行資源の数が増加した場合に、ＶＬＩＷ命令を再度生成する手続きを経なくては増加した実行資源が利用できないという欠点もある。
【０００５】
図７にＶＬＩＷ命令の例を示す。この例では命令当たりの演算スロット数は３であり、３つの同時並列実行可能な、それぞれの演算スロットに対応する実行資源を使用して演算が実行される。命令１では演算スロットＡのみに、演算スロットＡに対応する実行資源を使用して実行される有効演算が格納されている。命令１の演算スロットＢに無効演算ＮＯＰが格納されているのは、命令２の演算Ｂ２が演算Ａ１の実行結果を利用している等の理由が挙げられる。他の無効演算ＮＯＰが格納されているスロットに関しても同様である。この例では演算スロットＡ、ＢおよびＣの利用率はそれぞれ５０％、７５％および２５％である。
【０００６】
このように同時並列に動作可能な実行資源の利用率が低下する傾向はＶＬＩＷ命令の演算スロット数の増加に従って顕著となることは容易に推測することができる。
【０００７】
本発明は上記のＶＬＩＷ命令アーキテクチャにおける実行資源の利用率が低下する欠点を除去するためになされたものであり、本発明の目的は、ＶＬＩＷ命令の演算スロットに含まれる無効演算ＮＯＰの割合を低下させるとともに、同時並列に動作可能な実行資源の数に応じてＶＬＩＷ命令列を生成可能とする動的な命令列生成方法および装置を提供することにある。
【０００８】
【課題を解決するための手段】
上記課題を解決するために、本発明においては、請求項１に記載のように、
命令実行時に使用する実行資源に対応した複数の演算スロットを含み逐次実行される命令１つ以上で構成される命令列２つ以上を、複数の命令列を格納している記憶装置から参照し併合して併合命令列を生成する動的な命令列生成方法であって、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令を該併合命令列の命令として生成するとともに、該併合命令列の命令の有効演算が何れの併合前命令列の命令から選択された有効演算であるかを識別する命令列識別子の情報を生成することを特徴とする動的な命令列生成方法を構成する。
【０００９】
また、本発明においては、請求項２に記載のように、
命令実行時に使用する実行資源に対応した複数の演算スロットを含み逐次実行される命令１つ以上で構成される命令列２つ以上を、複数の命令列を格納している記憶装置から参照し併合して併合命令列を生成する動的な命令列生成装置であって、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令を該併合命令列の命令として生成するとともに、該併合命令列の命令の有効演算が何れの併合前命令列の命令から選択された有効演算であるかを識別する命令列識別子の情報を生成することを特徴とする動的な命令列生成装置を構成する。
【００１０】
また、本発明においては、請求項３に記載のように、
請求項１に記載の動的な命令列生成方法において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、同一の演算資源を使用する演算スロットに共に有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成方法を構成する。
【００１１】
また、本発明においては、請求項４に記載のように、
請求項１又は３に記載の動的な命令列生成方法において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、次に実行する命令列の先頭を変更する可能性のある分岐演算又は分岐に影響を与える演算が少なくとも一方の演算スロットに格納されており、他方の対応する演算スロットには有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成方法を構成する。
【００１２】
また、本発明においては、請求項５に記載のように、
請求項２に記載の動的な命令列生成装置において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、同一の演算資源を使用する演算スロットに共に有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成装置を構成する。
【００１３】
また、本発明においては、請求項６に記載のように、
請求項２又は５に記載の動的な命令列生成装置において、上記併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を上記併合命令列の命令として生成する際に、次に実行する命令列の先頭を変更する可能性のある分岐演算又は分岐に影響を与える演算が少なくとも一方の演算スロットに格納されており、他方の対応する演算スロットには有効演算が格納されている場合には該優先順位に応じた予め定められた選択規則によって何れかの有効演算が選択されることを特徴とする動的な命令列生成装置を構成する。
【００１４】
【発明の実施の形態】
本発明に係る動的な命令列生成方法および装置においては、同時並列に動作可能な演算のための実行資源を複数有するハードウェア上で、複数の命令列によって与えられた処理を混在させて実行するために、実行資源に演算を再割り当てした命令列を生成する。
【００１５】
以下に、実施の形態例によって、本発明の構成を説明するが、本発明はこれに限られるものではない。
【００１６】
（実施の形態例１）
図１は、請求項１に記載の発明に係る動的な命令列生成方法の一実施の形態例を説明する図であり、命令列Ｘと命令列Ｙから生成される併合命令列Ｚを示している。図において、縦１列に並んだ有効演算（Ａ１、Ｂ２、Ｃ３  等）あるいは無効演算ＮＯＰが同一の演算スロットに格納され、有効演算は、それぞれが格納されている演算スロットに対応する実行資源を使用して実行される。
【００１７】
図１が示すように、２つの命令列ＸおよびＹから新たに併合命令列Ｚを生成することで、命令に含まれる無効演算ＮＯＰの割合を削減できることがわかる。このことは、従来技術において命令列Ｘおよび命令列Ｙを逐次的に実行した場合８個の命令を実行する必要があるのに対して、本発明においてはこの２つの命令列と等価な処理を行う併合命令列Ｚでは６個の命令を実行するのみでよいことからも明らかである。
【００１８】
ただし、本発明においては、生成された命令を実行する際には各演算スロットに格納されている有効演算が何れの命令列に格納されていたものであるかを識別可能とするための命令列識別子の情報を生成した命令に対応させて生成する必要がある（図１の例では、大文字と小文字とで識別可能としている）。これは、有効演算を実行する際には、使用する命令列毎に独立な状態情報（プログラムカウンタ値、データレジスタ値、状態レジスタ値等）の参照先を指定するために必要となるからである。命令とともに命令を構成している各演算がどの状態情報を参照／更新するかを指定する命令列識別子の情報を命令の実行部に通知することによって複数の命令列が矛盾無く実行部で処理されることになる。
【００１９】
ここでは、２個の命令列を参照して新たに併合命令列を生成する方法について説明するが３個以上の命令列を参照して生成する実施の形態例も本実施の形態例より容易に導くことができる。
【００２０】
図２は本実施の形態例における、命令、データ等の情報の流れを説明するための図である。ここで、命令列生成部１は命令実行部３から指定されたアドレスで指定された命令列に対して、図３、４に示すフローチャートに従って、複数の命令列を格納している記憶装置であるメモリ２を参照して併合命令列と命令列識別子の情報を生成して命令実行部３に出力する。命令実行部３は命令列生成部１から入力した併合命令列を実行し、実行により新たな併合命令列の先頭アドレスが確定するとそのアドレスを命令列生成部１に通知する。
【００２１】
図３、４は命令列生成部１での処理を説明するためのフローチャートである。ここで、以下に示す６つの操作を定義し使用する。以下でＮＵＬＬは命令内の演算に関しては無効演算ＮＯＰに対応し、命令列識別子の情報に関しては対応する命令列識別子が存在しないことを示す。
【００２２】
Ｃ←Ｍｅｒｇｅ（Ａ，  Ｂ）；
Ａ＝（ａ１，  ａ２，  ａ３），  Ｂ＝（ｂ１，  ｂ２，  ｂ３），  Ｃ＝（ｃ１，  ｃ２，  ｃ３）
ａｉ，  ｂｉ，  ｃｉ  は演算、命令列識別子又はＮＵＬＬ
ｃｉ＝ａｉ  （ａｉ≠ＮＵＬＬ），  ｃｉ＝ｂｉ  （ａｉ＝ＮＵＬＬ）
Ｃ←Ｓｕｂ（Ａ，Ｂ）；
Ａ＝（ａ１，  ａ２，  ａ３），  Ｂ＝（ｂ１，  ｂ２，  ｂ３），  Ｃ＝（ｃ１，  ｃ２，  ｃ３）
ａｉ，  ｂｉ，  ｃｉ  は演算、命令列識別子又はＮＵＬＬ
ｃｉ＝ａｉ  （ａｉ≠ｂｉ），  ｃｉ＝ｂｉ  （ａｉ＝ｂｉ）
Ｃ←Ｆｉｌｌ（Ａ，  ｋ）；
Ａ＝（ａ１，  ａ２，  ａ３），  ｋは命令列識別子，  Ｃ＝（ｃ１，  ｃ２，  ｃ３）
ａｉ  は演算又はＮＵＬＬ、ｃｉ  は命令列識別子又はＮＵＬＬ
ｃｉ＝ｋ  （ａｉ≠ＮＵＬＬ），  ｃｉ＝ＮＵＬＬ（ａｉ＝ＮＵＬＬ）
Ｃ←Ｆｅｔｃｈ（ＡＤＤ）；
ＡＤＤはメモリ２のアドレス，Ｃ＝（ｃ１，  ｃ２，  ｃ３）、
ｃｉはメモリ２のアドレスＡＤＤに格納されている命令の演算又はＮＵＬ  Ｌであり、ＡＤＤが無効なアドレスの揚合は全ての  ｃｉ  にＮＵＬＬが格納  される
Ｆ←Ｅｍｐｔｙ（Ａ）；
Ａ＝（ａ１，  ａ２，  ａ３）、Ｆはフラグであり‘真’又は‘偽’の何れかの値と  なる
Ｆ＝真（∀ｃｉ  ＝  ＮＵＬＬ）、Ｆ＝偽（∃ｃｉ≠ＮＵＬＬ）
Ｓｗａｐ（Ｌ，Ｍ）；
Ｌ，Ｍは命令識別子である。
【００２３】
図３、４に示す動作について説明する。
【００２４】
命令列識別子を変数  ｉ  および  ｊ  に設定するとともに、命令列識別子  ｉ  および  ｊ  で特定される各命令列の先頭アドレス  Ａｉ  および  Ａｊ  をそれぞれ使用して命令を取り出す。取り出した命令をそれぞれ変数  Ｓｉ  および  Ｓｊ  に格納する（３０１、図中の各手順に付した番号であり、以下同様）。
【００２５】
Ｓｉ  と  Ｓｊ  に対して上記で定義した手続き  Ｍｅｒｇｅ  を適用し、新たに生成した命令を変数  Ｎｅｗ  に格納するとともに  Ｓｊ  に格納されている命令に含まれている演算の中で  Ｎｅｗ  に格納されている命令に組み込まれた演算のみからなる命令を  Ｄｉｆｆ  に格納する（３０２）。
【００２６】
Ｎｅｗ  に格納されている命令の各演算スロットが何れの命令列の命令から選択されたものであるかを示す命令列識別子の情報を生成して変数  Ｉｄ  に格納する（３０３）。
【００２７】
上記  ３０２  および  ３０３  で生成した命令および命令列識別子の情報を命令実行部３へ出力する（３０４）。
【００２８】
Ｓｊ  に格納されている命令に含まれている演算から  Ｎｅｗ  に組み込まれた演算を取り除いた演算のみからなる命令を  Ｓｊ  に格納した後、命令列識別子を格納している変数  ｉ  と  ｊ  との内容を入れ替える。ここで、命令列識別子を格納している変数
ｉ  および  ｊ  の入れ替えにより、以降の処理では  Ａｉ、Ａｊ  および  Ｓｉ、Ｓｊ  の内容が入れ替わることと等価の意味となる。これは２つの命令列に適用する本処理の手続きを交互に入れ替えることとなり、Ｎｅｗ  に組み込まれる演算が何れの命令列から選択された演算であるかの頻度を均衡させる効果をもたらす（３０５）。
【００２９】
Ｓｉ  に格納されている命令の演算スロットに格納されている演算が全てＮＵＬＬであれば  Ｓｉ  に格納されていた命令に含まれていた全ての演算が新たに生成された命令に組み込まれたこととなることから、Ａｉ  に無効アドレスが格納されていない場合に  Ａｉ  の内容を命令列の次の命令を指定するアドレスに更新した後、更新したアドレスで指定される命令をメモリ２から読み出して変数  Ｓｉ  に格納する（３０６−３０７）。
【００３０】
Ａｉ  に無効アドレスが格納されており、かつ命令実行部３が命令列識別子  ｉ  の命令列を指定するアドレス（通常命令実行部３で命令を実行した結果確定した分岐先アドレス）を出力している場合、そのアドレスを  Ａｉ  に格納するとともに  Ａｉ  に格納されたアドレスで指定される命令をメモリ２から読み出して変数  Ｓｉ  に格納する（３０６−３１０）。
【００３１】
Ａｊ  に無効アドレスが格納されていない場合、Ａｊ  の内容を命令列の次の命令を指定するアドレスに更新した後、更新したアドレスで指定される命令をメモリ２から読み出して変数  Ｓｊ  に格納する（３１１−３１２）。
【００３２】
Ａｊ  に無効アドレスが格納されており、かつ命令実行部３が命令列識別子  ｊ  の命令列を指定するアドレス（通常命令実行部３で命令を実行した結果確定した分岐先アドレス）を出力している場合、そのアドレスを  Ａｊ  に格納するとともに  Ａｊ  に格納されたアドレスで指定される命令をメモリ２から読み出して変数  Ｓｊ  に格納する（３１１−３１４）。
【００３３】
Ｓｊ  に格納されている命令に含まれる演算に分岐演算が含まれている場合、Ｓｊ  に対して手続き  Ｆｉｌｌ  を適用することで命令列識別子の情報を生成するとともに、生成した命令列識別子の情報と  Ｓｊ  に格納されている命令を命令実行部３へ出力する。通常、分岐演算を含む命令の場合その実行結果によって次に実行すべき命令のアドレスが確定するため、命令列識別子  ｊ  で特定される命令列に対する処理は  ３１０  又は  ３１４  で新たな命令列が指定されるまでアイドル状態とする必要がある。命令列識別子  ｊ  で特定される命令列に対する処理をアイドル状態とするため、Ａｊ  に無効アドレスを格納するとともに手続き  Ｆｅｔｃｈ  により  Ｓｊ  に  Ａｊ  で指定される命令を格納することで、Ｓｊ  に格納されている命令の全ての演算スロットに無効演算を格納する（３１５−３１６）。
【００３４】
Ｓｉ  に格納されている命令に含まれる演算に分岐演算が含まれている場合も上記と同様であり、Ｓｉ  に対して手続き  Ｆｉｌｌ  を適用することで命令列識別子の情報を生成するとともに、生成した命令列識別子の情報と  Ｓｉ  に格納されている命令を命令実行部３へ出力する。さらに、命令列識別子  ｉ  で特定される命令列に対する処理をアイドル状態とするため、Ａｉ  に無効アドレスを格納するとともに手続き  Ｆｅｔｃｈ  により  Ｓｉ  に  Ａｉ  で指定される命令を格納する（３１７−３１８）。
【００３５】
以上説明した方法を用いることによって、Ａｉ  および  Ａｊ  が有効なアドレスを格納していれば新たな命令および命令列識別子の情報が順次生成され出力される。命令列識別子  ｉ  で指定される命令の演算スロットに格納されている演算又は命令列識別子  ｊ  で指定される命令の当該演算スロットに格納されている演算の少なくとも一方が生成される命令の演算スロットに格納されることから本方法で生成された命令に含まれる無効演算の割合を削減することが可能となり、同時並列に動作可能な実行資源を有効に利用可能とする命令列を生成することができる。
【００３６】
上記の命令列生成方法において、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令を併合命令列の命令として生成するとともに、併合命令列の命令の有効演算が何れの併合前命令列の命令から選択された有効演算であるかを識別する命令列識別子の情報を生成することが可能となる。
【００３７】
ここで、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納すれば、図１に示したように、併合前に同一の演算スロットに格納されていた演算は、併合後においても、同一の演算スロットに格納されることになる。
【００３８】
（実施の形態例２）
請求項２に記載の発明に係る動的な命令列生成装置の一実施の形態例を説明するための命令列生成部１の装置構成を図５に示す。この動的な命令列生成装置は実施の形態例１の実施を可能とする動的な命令列生成装置でもある。ここで、Ｓｉには命令列識別子  ｉ  で指定される命令列に含まれる命令又は全ての演算スロットに無効演算が格納されている命令が格納され、Ｓｊ  には命令列識別子  ｊ  で指定される命令列に含まれる命令又は全ての演算スロットに無効演算が格納されている命令が格納され、Ａｉ  には  Ｓｉ  に格納されている命令のメモリ２上のアドレス又は無効アドレスが格納され、Ａｊ  には  Ｓｊ  に格納されている命令のメモリ２上のアドレス又は無効アドレスが格納される。生成部４は図３、４に示すフローチャートに示す方法で上記の  Ｓｉ、Ｓｊ、Ａｉ  および  Ａｊ  の内容を参照しつつ必要に応じてそれらの内容を更新することによって新たな命令および命令列識別子の情報を生成して命令実行部３へ出力する手段を有する。
【００３９】
以上説明した動的な命令列生成装置を用いることによって、実施の形態例１で述べたのと同様に、Ａｉ  および  Ａｊ  に有効なアドレスが格納されていれば新たな命令および命令列識別子の情報が生成部から順次出力される。命令列識別子  ｉで指定される命令の演算スロットに格納されている演算又は命令列識別子  ｊ  で指定される命令の当該演算スロットに格納されている演算の少なくとも一方が本発明の装置で生成される命令の演算スロットに格納されることから生成された命令に含まれる無効演算の割合を削減することが可能となり、同時並列に動作可能な実行資源を有効に利用可能とする併合命令列を生成することができる。
【００４０】
本実施の形態例は、実施の形態例１の実施に必要となる手段をすべて備え、特に、一方の併合前命令列の命令Ｘと他方の併合前命令列の命令Ｙとの有効演算が格納されている各演算スロットに関して演算資源が重複しないように演算スロットに有効演算を格納した命令を併合前命令列の命令として生成するとともに、併合命令列の命令の有効演算が何れの併合前命令列の命令から選択された有効演算であるかを識別する命令列識別子の情報を生成する手段を備えている。
【００４１】
実施の形態例１および２の何れにおいても、メモリ２から読み出した命令の演算スロットの種類と数が生成される命令の演算スロットの種類と数に一致していたが、本発明は、図６に示すように、生成する命令スロットの数がメモリ２から読み出した命令の演算スロット数より増加している場合に対しても適用が可能である。図６の例では、命令の先頭の演算スロットが２つ存在しており、この演算を同時並列に２つ実行可能な実行資源を有する命令実行部で実行される命令列を生成する例である。これを実現するためには、生成する命令に組み込まれる演算の種類をグループ化し、メモリから読み出した命令に含まれる各演算スロットが何れのグループに組み込まれる必要があるかという制約条件に基づいて組み込み先となる演算スロットを決定すればよい。このような制約条件を満足する手続き  Ｍｅｒｇｅ  の定義例を以下に示す。ここに示す例では読み出す命令列の数が３で生成する命令の先頭の演算スロットが２の場合である。
【００４２】
Ｄ←Ｍｅｒｇｅ（Ａ，  Ｂ，  Ｃ）；
Ａ＝（ａ１，  ａ２，  ａ３），  Ｂ＝（ｂ１，  ｂ２，  ｂ３），  Ｃ＝（ｃ１，  ｃ２，  ｃ３）
Ｄ＝（ｄ（１，１），ｄ（１，２），ｄ（２，１），ｄ（３，１））
ａｉ，  ｂｉ，  ｃｉ，  ｄ（ｍ，ｎ）  は演算、命令列識別子又はＮＵＬＬ
ｄ（ｉ，１）＝ａｉ  （ａｉ≠ＮＵＬＬ），  ｄ（ｉ，１）＝ｂｉ  （ａｉ＝ＮＵＬＬ），  ｄ（ｉ，１）＝ｃｉ
（ａｉ＝ｂｉ＝ＮＵＬＬ），
ｄ（ｉ，２）＝ｃｉ  （（ａｉ≠ＮＵＬＬかつｂｉ＝ＮＵＬＬ）又は
（ａｉ＝ＮＵＬＬかつｂｉ≠ＮＵＬＬ））
上記で述べた拡張は生成する命令の全ての演算スロットに対して適用可能であるとともにさらにこれらを組み合わせて実施することも可能である。このことから、ＬＳＩの微細加工技術が向上してシリコン領域上に実装可能な同時並列に動作可能な実行資源の数が増加した場合や、再構成可能ハードウェア等を用いて実行する命令列の特徴に適応させて実行資源の種類や数を変化させた場合でもメモリ上に格納されている既存のＶＬＩＷ命令列を再度生成する手続きを経ることなくこれらの実行資源を利用可能となる。
【００４３】
実施の形態例１および２の何れにおいても、生成した命令と命令列識別子の情報の組を分割して命令実行部３へ出力しているが、命令の制御フィールドや演算スロットの付加情報として命令内に組み込む方法もある。
【００４４】
本発明において、同時並列に命令列を実行する際には各命令列が想定した優先順位で実行される手段を提供することが重要となる。これは、実行を優先すべき命令列が必ずしも優先される必要のない処理によって完了を遅らされたり、特定の処理に実行の終了が他の処理によって不当に遅延されたりすることを排除する必要があることから明らかである。以下に説明する実施の形態例は、命令列に与えられた優先順位を反映させて命令列および命令列識別子の情報を生成する手段の実施の形態例である。
【００４５】
（実施の形態例３）
請求項３に記載の発明に係る動的な命令列生成方法の一実施の形態例を説明する。図３の手順  ３０５  で説明したように、上記の実施の形態例ではメモリ２から取り出した命令の対応する演算スロットに共に有効演算が格納され、何れかの有効演算のみしか選択できない場合、優先して選択する命令列を交互に入れ替えることで２つの命令列の命令に含まれる演算を公平に選択するようにしている。このことは、逆に言えば、命令列に与えられている優先順位が異なる場合、優先順位の高い命令列の命令に含まれる演算を優先的に選択することで、命令列に与えられた優先順位を反映した命令列を生成可能となることを意味する。上記の実施の形態例においては、このような命令列の選択に関わる手続きは  Ｍｅｒｇｅ  および  Ｓｗａｐ  である。
【００４６】
手続き  Ｍｅｒｇｅ  で優先順位を反映した演算の選択を行う一実施の形態例について説明する。ここで、命令列  ｍ  および命令列  ｎ  の中から選択されて現時点までに新たに生成した命令に組み込まれた演算数がそれぞれの命令列毎に変数  Ｋｍ  および  Ｋｎ  で計数されているとする。命令列  ｍ  の優先順位が命令列  ｎ  のα（α＞０）倍である場合、手続き  Ｍｅｒｇｅ  において生成する命令の同一の演算スロットに割り当てる有効演算が対応する両方の命令に存在する時にはα×Ｋｍ＝Ｋｎ  に近づくか又は一致するように何れかの演算を選択して生成する命令に組み込む。
【００４７】
手続き  Ｓｗａｐ  で優先順位を反映した演算の選択を行う一実施の形態例について説明する。ここで、命令列  ｍ  および命令列  ｎ  が図３、４に示すフローチャートの中で命令列  ｉ  に割り当てられた数がそれぞれ命令列毎に変数  Ｌｍ  および  Ｌｎ  で計数されているとする。命令列  ｍ  の優先順位が命令列  ｎ  のα（α＞０）倍である場合、手続き  Ｓｗａｐ  において  ｉ  および  ｊ  にそれぞれ命令列  ｍ  および命令列  ｎ  を割り当てるときにα×Ｌｍ＝Ｌｎ  に近づくか又は一致するように命令列の割り当てを行う。
【００４８】
以上述べた何れの方法又は手段およびこれらを組み合わせることによって命令列に与えられた優先順位を反映した命令列を生成することが可能となる。
【００４９】
このようにして、併合前命令列毎に優先順位が与えられており、相異なる併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を生成する際に、同一の演算資源を使用する演算スロットに共に有効演算が格納されている場合には優先順位に応じた予め定められた選択規則によって何れかの有効演算を選択することが可能となる。
【００５０】
上記の動的な命令列生成方法を実施する場合には、その実施を可能とする動的な命令列生成装置（請求項５に記載の発明の一実施の形態例に該当する）を構成して使用する。
【００５１】
（実施の形態例４）
請求項４に記載の発明に係る動的な命令列生成方法の一実施の形態例を説明する。他の演算と異なる特別な動作を行う演算として分岐演算がある。通常、分岐演算の実行結果によってメモリ上の次に実行される命令が格納されているアドレスが確定する。すなわち、分岐命令の実行結果を待たなければ、当該命令に含まれる全ての演算を生成した命令の演算スロットに組み込んだとしても原則として後続の命令を取り出して命令および命令列識別子の情報を生成することはできない。この特徴を利用して、分岐演算を含む命令が属する命令列の優先順位が高い場合には当該分岐演算を優先的に選択して生成する命令の演算スロットに組み込ことによって、分岐演算以外の残りの演算の命令実行部３での実行に先行又は並行して命令実行部３から命令列生成部１への次命令のアドレス通知が可能となる。
【００５２】
上記で述べた命令内に含まれる分岐演算を優先して生成する命令に組み込むための実施の形態例について説明する。図４の手順  ３１５  の直前に命令列識別子  ｉ  および  ｊ  で特定される命令列の優先順位を判断する手続き又は手段を追加し、ｉで特定される命令列の優先順位が他の命令列よりも高い場合には
３１５、３１６、３１７、３１８  の順に処理を実行し、ｊ  で特定される命令列の優先順位が他の命令列よりも高い場合には
３１７、３１８、３１５、３１６  の順に処理を実行する。
【００５３】
以上述べた方法又は手段によって命令列に与えられた優先順位を反映した命令列を生成することが可能となる。このように早期に分岐先アドレスが確定することによってメモリ２から命令に含まれる全ての演算の実行を待たずに次の命令を先行して読み出すことが可能となるので、命令列生成部１や命令実行部３の動作速度に比べてメモリ２へのアクセスが遅い場合には特に有効である。
【００５４】
このようにして、併合前命令列毎に優先順位が与えられており、相異なる上記併合前命令列の命令から有効演算が重複しないように演算スロットに有効演算を格納した命令を生成する際に、次に実行する命令列の先頭を変更する可能性のある分岐演算又は分岐に影響を与える演算が少なくとも一方の演算スロットに格納されており、他方の対応する演算スロットには有効演算が格納されている場合には優先順位に応じた予め定められた選択規則によって何れかの有効演算を選択することが可能となる。
【００５５】
上記の動的な命令列生成方法を実施する場合には、その実施を可能とする動的な命令列生成装置（請求項６に記載の発明の一実施の形態例に該当する）を構成して使用する。
【００５６】
以上の実施の形態例によって明らかなように、本発明の実施によって、実行可能な状態にある複数の命令列から新たにＶＬＩＷ命令を生成することで生成したＶＬＩＷ命令の演算スロットに含まれる無効演算ＮＯＰの割合を低下させることが可能となり、ＶＬＩＷ命令アーキテクチャに基づいて設計されたプロセッサ内の実行部に含まれる同時並列動作可能な実行資源を有効に活用することが可能になるとともに、利用可能な実行資源の数が変化した場合でも既存のＶＬＩＷ命令列を再作成することなく増加した実行資源を利用可能となる。
【００５７】
また、生成する命令列に含まれる演算の選択を優先順位に基づいて行うことで、優先順位の異なる命令列から優先順位を反映した命令列を生成することが可能となる。
【００５８】
【発明の効果】
本発明の実施によって、ＶＬＩＷ命令の演算スロットに含まれる無効演算ＮＯＰの割合を低下させるとともに、同時並列に動作可能な実行資源の数に応じてＶＬＩＷ命令列を生成可能とする動的な命令列生成方法および装置を提供することが可能となる。
【図面の簡単な説明】
【図１】本発明に係る動的な命令列を生成する方法の一例を説明する図である。
【図２】本発明に係る動的な命令列を生成する方法における、命令、データ等の情報の流れを説明するための図である。
【図３】本発明に係る動的な命令列を生成する方法を説明するためのフローチャートである。
【図４】本発明に係る動的な命令列を生成する方法を説明するためのフローチャートであり、図３の続きである。
【図５】本発明に係る動的な命令列を生成する装置の構成を示す図である。
【図６】本発明に係る動的な命令列を生成する方法の一例を説明する図である。
【図７】ＶＬＩＷ命令の例を示す図である。
【符号の説明】
１…命令列生成部、２…メモリ、３…命令実行部、４…生成部。
【図１】
2004362026.tif 000003
【図２】
2004362026.tif 000004
【図３】
2004362026.tif 000005
【図４】
2004362026.tif 000006
【図５】
2004362026.tif 000007
【図６】
2004362026.tif 000008
【図７】
2004362026.tif 000009