(57)【要約】【課題】過去のソフトウェア資産を引き継ぎ、十分な並列性を引き出すことができ、かつ消費エネルギーの少ない細粒度並列プロセッサを提供する。【解決手段】複数の命令を並列に実行可能な細粒度並列プロセッサにおいて、特定の命令、あるいは命令の置かれていたアドレス、外部割込みによって命令間の並列実行可能性の解析を行う能力を変化させる手段を有することを特徴とする、能力可変細粒度並列プロセッサとする。該解析を行う能力を変化させる手段とはスーパースカラとして動作するか一つ以上の命令を並べられたまま実行するかである。スーパースカラとして動作させるときは、プロセッサ内の依存性解析器を動作させて解析結果に従って並列処理可能な複数命令を同時発行し、一つ以上の命令を並べられたまま発行する場合は該依存性解析器を停止させる。依存性解析器で解析する命令数及び並べられたまま発行する命令数を可変とすると一層効果が高い。【選択図】図１
2009289142.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令を並列に実行可能な細粒度並列プロセッサにおいて、命令間の並列実行可能性の解析を行う能力を変化させる手段を有することを特徴とする、能力可変細粒度並列プロセッサ。
【請求項２】
前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、解析の対象とする命令の数を変化させるか解析を完全に停止させる手段であり、停止させる場合は、一つ以上、所定の数の命令を並べられたまま実行することを特徴とする、請求項１に記載の能力可変細粒度並列プロセッサ。
【請求項３】
前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、特定の命令に従って命令間の並列実行可能性の解析を行う能力を変化させる手段であることを特徴とする、請求項１または２に記載の能力可変細粒度並列プロセッサ。
【請求項４】
前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、命令がどのアドレスに置かれていたかによって命令間の並列実行可能性の解析を行う能力を変化させる手段であることを特徴とする、請求項１または２に記載の能力可変細粒度並列プロセッサ。
【請求項５】
前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、特定の外部割り込みによって並列実行可能性の解析を行う能力を変化させる手段であることを特徴とする、請求項１または２に記載の能力可変細粒度並列プロセッサ。
【請求項６】
デコードされた命令を複数蓄積する命令ウインドウと、
複数命令を並列処理するための複数の機能ユニットと、
該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えていることを特徴とする請求項１ないし５のいずれか一項に記載の能力可変細粒度並列プロセッサ。
【請求項７】
デコードされた命令を複数蓄積する命令ウインドウと、
複数命令を並列処理するための複数の機能ユニットと、
該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、
該命令ウインドウにおける特定の場所に配置された命令が特定の命令であるか、または該命令ウインドウにおかれた命令がどのアドレスに置かれていたか、または外部割込み検出器を備え、外部割込みの内容が何であったかのいずれかによって該依存性解析器及び該命令発行器の動作モードを変化させることを特徴とする能力可変細粒度並列プロセッサ。
【請求項８】
前記動作モードは第１のモード及び第２のモードからなり、第１モードのときには前記依存性解析器は停止しかつ前記命令発行器が前記命令ウインドウの、一つ以上、所定の数を前記機能ユニットに並べられたまま発行し、第２のモードのときは、前記依存性解析器が所定の数だけ依存性解析を行い、前記命令発行器が前記機能ユニットに、一つ以上、可能な数だけ同時発行することを特徴とする、請求項７記載の能力可変細粒度並列プロセッサ。
【請求項９】
デコーダから送られる命令の種類によっていずれの動作モードで実行されるかを判断するモード判断手段をさらに有し、動作モードを変化させることを特徴とする請求項８記載の能力可変細粒度並列プロセッサ。
【請求項１０】
前記命令ウインドウの特定の場所に配置された命令がサブルーチン呼び出し命令であるとき、動作モードを第１のモードに設定し、サブルーチンから戻る命令であるときは動作モードを第２のモードに設定するかまたは前記命令ウインドウの特定の場所に配置された命令がサブルーチン呼び出し命令であるとき、動作モードを第２のモードに設定し、サブルーチンから戻る命令であるときは動作モードを第１のモードに設定することを特徴とする請求項８記載の能力可変細粒度並列プロセッサ。
【請求項１１】
デコードされた命令を複数蓄積する命令ウインドウと、
複数命令を並列処理するための複数の機能ユニットと、
該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、
該命令ウインドウは保存する各命令に対応するエントリをさらに有し、
該エントリの内容で示される動作モードが第１のモードを示しているときは前記依存性解析器は停止し、かつ該命令発行器が該命令ウインドウの、一つ以上、所定の数の命令を該機能ユニットに並べられたまま発行し、該エントリの内容で示される動作モードが第２のモードのときは、所定の数だけ依存性解析を行い、一つ以上、可能な数だけ同時発行することを特徴とする能力可変細粒度並列プロセッサ。
【請求項１２】
デコードされた命令を複数蓄積する命令ウインドウと、
複数命令を並列処理するための複数の機能ユニットと、
該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、
該命令ウインドウは保存する各命令に対応するエントリをさらに有し、
記憶領域を有したモード検出器であって、デコードされた命令を調べ、該命令が第１の動作モードまたは第２の動作モードにする命令である場合に、該第１または第２のモード並びに該特定命令が有する主記憶上のアドレス及び／又は命令数に関するオペランド情報をそのまま又は演算した結果を該記憶領域に保存するモード検出器と、
各命令が実行されるべき第１または第２のモードを、該モード検出器中の該記憶領域の内容を参照して該命令ウインドウ中の該命令に対応する該エントリに記載するモード設定器とをさらに有し、
該命令ウインドウ中の命令に対する該エントリが第１のモードを示しているときには該依存性解析器は停止しかつ該命令発行器が前記命令ウインドウ中の、一つ以上、所定の数の命令を該機能ユニットに並べられたまま発行し、該特定エントリが第２のモードを示しているときは、該依存性解析器は動作しかつ該命令発行器は抽出された命令を該機能ユニットに一つ以上、可能な数だけ同時発行することを特徴とする能力可変細粒度並列プロセッサ。
【請求項１３】
前記モード設定器は、前記デコーダから前記命令ウインドウに取り込まれた命令の数に依存して動作するカウンタを有することにより、前記命令数に相当する数だけ、前記命令ウインドウ中の前記エントリに第１または第２のモードであることを記載することを特徴とする請求項１２記載の能力可変細粒度並列プロセッサ。
【請求項１４】
前記モード検出器中の前記記憶領域は、開始アドレスと終了アドレスとを保存する領域をさらに有し、
前記モード設定器は、デコードされた命令が主記憶上に保存されていたアドレスと、前記開始アドレス及び前記終了アドレスとを比較した結果から、該命令が第１のモードで実行されるか第２のモードで実行されるかを判断する比較器を有し、該比較器の判断結果を前記命令ウインドウ中に配置される該デコードされた命令に対応する前記エントリに記載することを特徴とする請求項１２記載の能力可変細粒度並列プロセッサ。
【請求項１５】
前記モード検出器は、前記特定命令がさらに有する発行数に関するオペランド情報を前記記憶領域にさらに保存し、第１のモードに対しては、前記命令発行器が同時発行する命令数である前記所定数は、一つ以上の、該発行数とすることを特徴とする、請求項１２ないし１４記載の能力可変細粒度並列プロセッサ。
【請求項１６】
前記モード検出器は、前記特定命令がさらに有する解析数に関するオペランド情報を前記記憶領域にさらに保存し、第２のモードに対しては、前記依存性解析器は該解析数の命令を対象として、前記命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出することを特徴とする、請求項１２ないし１５記載の能力可変細粒度並列プロセッサ。
【請求項１７】
デコードされた命令を複数蓄積する命令ウインドウと、
複数命令を並列処理するための複数の機能ユニットと、
該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、
該命令ウインドウは保存されるデコードされた各命令に対応して第１のエントリ及び第２のエントリをさらに有し、
一つ以上の記憶領域を有したモード検出器であって、デコードされた命令を調べ、該命令が特定のアドレスの命令を第１の動作モードまたは第２の動作モードで動作するよう設定する命令である場合に、該第１または第２のモード並びに該特定のアドレス及び／又は命令数に関するオペランド情報をそのまま又は演算した結果を該記憶領域に保存するモード検出器と、
該特定のアドレスの命令が実行されるべき第１または第２のモードを、該モード検出器中の該記憶領域の内容を参照して該命令ウインドウ中の該命令に対応する第１のエントリに記載し、該命令に対応する第２のエントリには該モード検出器に一つ以上ある該記憶領域のどれであったかを記録するモード設定器とをさらに有し、
該命令ウインドウ中に置かれた命令に対応する第１のエントリが第１の動作モードを示しているときには該依存性解析器は停止しかつ該命令発行器が前記命令ウインドウ中の、該第２のエントリで決定される、一つ以上、所定の数の命令を該機能ユニットに発行し、第１のエントリが第２の動作モードを示しているときは、該依存性解析器は動作して、該第２のエントリで上限が決定される数の命令間の依存性解析を行いかつ該命令発行器は抽出された命令を該機能ユニットに、一つ以上、可能な数だけ同時発行することを特徴とする能力可変細粒度並列プロセッサ。
【請求項１８】
前記モード検出器中の前記一つ以上の記憶領域は、開始アドレスと終了アドレスとを保存する領域をさらに有し、前記モード設定器は、前記デコードされた命令が主記憶上に保存されていたアドレスと、該開始アドレス及び該終了アドレスとを比較した結果から、前記デコードされた命令が第１のモードで実行されるか第２のモードで実行されるかを判断する比較器を有し、該比較器の判断結果を前記命令ウインドウ中に配置される前記デコードされた命令に対応する第１のエントリに記載し、前記デコードされた命令に対応する第２のエントリには前記比較器によって判断された前記一つ以上の記憶領域のどれに格納されたアドレスに該当するかを記載することを特徴とする請求項１７記載の能力可変細粒度並列プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、並列処理するプロセッサにおいて並列処理の単位が命令レベルになっている場合、すなわち細粒度並列プロセッサに関する発明である。
【背景技術】
【０００２】
並列処理マイクロプロセッサにおいて、並列処理の単位を粒度(granularity)という。並列処理の単位がサブルーチンレベルのときは粗粒度(coarse grain)、並列処理の単位がループのときは中粒度(medium grain)、並列処理の単位が命令レベルになっている場合が細粒度(fine grain)のように分類される。細粒度並列処理は最も高い並列度が期待でき、商用のマイクロプロセッサで主流になっている。
細粒度マイクロプロセッサの具体的な実現方法としてはパイプライン、スーパースカラ（ＳＳ）、及び very long instruction word（ＶＬＩＷ）が代表的である。パイプラインはいわゆるバケツリレー方式であり、ＳＳは複数の命令をフェッチしておいて可能なら複数の命令（機械語）を同時発行する技術であり、ＶＬＩＷは命令の幅を大きくとって複数の機能ユニットを同時に働かせることで処理を高速化する技術である。
【０００３】
スーパースカラを採用したプロセッサでは、実行時に動的に取り込んだ命令列の間で並列実行の可能性を調べていたため実行時にしかわからない場合を含めて十分な並列性を引き出せていたが、必要なハードウェア量が増えてかつ消費電力が大きい。
ＶＬＩＷを採用したプロセッサでは、並列実行の可能性をコンパイラに委ねているためハードウェア量は少なくて良く、消費電力が少ないが、十分な並列性を引き出せずにいた。また、ＶＬＩＷ命令という新たな形態をとるため、過去のソフトウェア資産を引き継げないという欠点があった。
【０００４】
特許文献１には、命令発行部から発行された命令が登録される記憶部のエントリ毎の動作を停止させることで、情報処理装置の性能低下を抑えつつ、消費電力を低減する情報処理装置が記載されている。
【特許文献１】特開２００７−２００２１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
過去のソフトウェア資産を引き継ぎつつ十分な並列性を引き出すことができ、かつ消費エネルギーの少ないプロセッサを提示することが本願発明の課題である。
【０００６】
コンパイル時に並列実行の可能性を検出できる命令列はＶＬＩＷの命令として解析無しに発行させることで消費電力を抑え、コンパイル時には並列実行の可能性がわからず、動的に並列実行の可能性を解析すべき命令列についてはスーパースカラの命令として動的にデータ依存関係を調べて可能なら並列に命令を発行させることにより十分な並列実行を温存したままでエネルギー消費を抑える能力可変細粒度並列プロセッサを提供する。
このため、並列実行の可能性を調べるためのデータ依存関係の解析をするためのユニットを停止したり稼働させたり、能力を変えたりする手段を具備する。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本願発明は、複数の命令を並列に実行可能な細粒度並列プロセッサにおいて、命令間の並列実行可能性の解析を行う能力を変化させる手段を有することを特徴とする。
【０００８】
また、前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、解析の対象とする命令の数を変化させるか解析を完全に停止させる手段であり、停止させる場合は、一つ以上、所定の数の命令を並べられたまま実行することを特徴とする。
【０００９】
また、前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、特定の命令に従って命令間の並列実行可能性の解析を行う能力を変化させる手段であることを特徴とする。
【００１０】
また、前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、命令がどのアドレスに置かれていたかによって命令間の並列実行可能性の解析を行う能力を変化させる手段であることを特徴とする。
【００１１】
また、前記命令間の並列実行可能性の解析を行う能力を変化させる手段は、特定の外部割り込みによって並列実行可能性の解析を行う能力を変化させる手段であることを特徴とする。
【００１２】
また、デコードされた命令を複数蓄積する命令ウインドウと、複数命令を並列処理するための複数の機能ユニットと、該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えていることを特徴とする。
【００１３】
一方、本願発明は、デコードされた命令を複数蓄積する命令ウインドウと、複数命令を並列処理するための複数の機能ユニットと、該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、
該命令ウインドウにおける特定の場所に配置された命令が特定の命令であるか、または該命令ウインドウにおかれた命令がどのアドレスに置かれていたか、または外部割込み検出器を備え、外部割込みの内容が何であったかのいずれかによって該依存性解析器及び該命令発行器の動作モードを変化させることを特徴とする。
【００１４】
また、前記動作モードは第１のモード及び第２のモードからなり、第１モードのときには前記依存性解析器は停止しかつ前記命令発行器が前記命令ウインドウの、一つ以上、所定の数を前記機能ユニットに並べられたまま発行し、第２のモードのときは、前記依存性解析器が所定の数だけ依存性解析を行い、前記命令発行器が前記機能ユニットに、一つ以上、可能な数だけ同時発行することを特徴とする。
【００１５】
また、デコーダから送られる命令の種類によっていずれの動作モードで実行されるかを判断するモード判断手段をさらに有し、動作モードを変化させることを特徴とする。  
【００１６】
また、前記命令ウインドウの特定の場所に配置された命令がサブルーチン呼び出し命令であるとき、動作モードを第１のモードに設定し、サブルーチンから戻る命令であるときは動作モードを第２のモードに設定するかまたは前記命令ウインドウの特定の場所に配置された命令がサブルーチン呼び出し命令であるとき、動作モードを第２のモードに設定し、サブルーチンから戻る命令であるときは動作モードを第１のモードに設定することを特徴とする。
【００１７】
一方、本願発明は、デコードされた命令を複数蓄積する命令ウインドウと、複数命令を並列処理するための複数の機能ユニットと、該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、該命令ウインドウは保存する各命令に対応するエントリをさらに有し、該エントリの内容で示される動作モードが第１のモードを示しているときは前記依存性解析器は停止し、かつ該命令発行器が該命令ウインドウの、一つ以上、所定の数の命令を該機能ユニットに並べられたまま発行し、該エントリの内容で示される動作モードが第２のモードのときは、所定の数だけ依存性解析を行い、一つ以上、可能な数だけ同時発行することを特徴とする。
【００１８】
一方、本願発明は、デコードされた命令を複数蓄積する命令ウインドウと、複数命令を並列処理するための複数の機能ユニットと、該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、該命令ウインドウは保存する各命令に対応するエントリをさらに有し、記憶領域を有したモード検出器であって、デコードされた命令を調べ、該命令が第１の動作モードまたは第２の動作モードにする命令である場合に、該第１または第２のモード並びに該特定命令が有する主記憶上のアドレス及び／又は命令数に関するオペランド情報をそのまま又は演算した結果を該記憶領域に保存するモード検出器と、各命令が実行されるべき第１または第２のモードを、該モード検出器中の該記憶領域の内容を参照して該命令ウインドウ中の該命令に対応する該エントリに記載するモード設定器とをさらに有し、該命令ウインドウ中の命令に対する該エントリが第１のモードを示しているときには該依存性解析器は停止しかつ該命令発行器が前記命令ウインドウ中の、一つ以上、所定の数の命令を該機能ユニットに並べられたまま発行し、該特定エントリが第２のモードを示しているときは、該依存性解析器は動作しかつ該命令発行器は抽出された命令を該機能ユニットに一つ以上、可能な数だけ同時発行することを特徴とする
【００１９】
また、前記モード設定器は、前記デコーダから前記命令ウインドウに取り込まれた命令の数に依存して動作するカウンタを有することにより、前記命令数に相当する数だけ、前記命令ウインドウ中の前記エントリに第１または第２のモードであることを記載することを特徴とする。
【００２０】
また、前記モード検出器中の前記記憶領域は、開始アドレスと終了アドレスとを保存する領域をさらに有し、前記モード設定器は、デコードされた命令が主記憶上に保存されていたアドレスと、前記開始アドレス及び前記終了アドレスとを比較した結果から、該命令が第１のモードで実行されるか第２のモードで実行されるかを判断する比較器を有し、該比較器の判断結果を前記命令ウインドウ中に配置される該デコードされた命令に対応する前記エントリに記載することを特徴とする。
【００２１】
また、前記モード検出器は、前記特定命令がさらに有する発行数に関するオペランド情報を前記記憶領域にさらに保存し、第１のモードに対しては、前記命令発行器が同時発行する命令数である前記所定数は、一つ以上の、該発行数とすることを特徴とする。
【００２２】
また、前記モード検出器は、前記特定命令がさらに有する解析数に関するオペランド情報を前記記憶領域にさらに保存し、第２のモードに対しては、前記依存性解析器は該解析数の命令を対象として、前記命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出することを特徴とする。
【００２３】
一方、本願発明は、デコードされた命令を複数蓄積する命令ウインドウと、複数命令を並列処理するための複数の機能ユニットと、該命令ウインドウに配置された命令間のデータ依存関係の解析をし、並列処理可能な命令を抽出する依存性解析器と命令発行器とを備えた細粒度並列プロセッサにおいて、該命令ウインドウは保存されるデコードされた各命令に対応して第１のエントリ及び第２のエントリをさらに有し、一つ以上の記憶領域を有したモード検出器であって、デコードされた命令を調べ、該命令が特定のアドレスの命令を第１の動作モードまたは第２の動作モードで動作するよう設定する命令である場合に、該第１または第２のモード並びに該特定のアドレス及び／又は命令数に関するオペランド情報をそのまま又は演算した結果を該記憶領域に保存するモード検出器と、該特定のアドレスの命令が実行されるべき第１または第２のモードを、該モード検出器中の該記憶領域の内容を参照して該命令ウインドウ中の該命令に対応する第１のエントリに記載し、該命令に対応する第２のエントリには該モード検出器に一つ以上ある該記憶領域のどれであったかを記録するモード設定器とをさらに有し、該命令ウインドウ中に置かれた命令に対応する第１のエントリが第１の動作モードを示しているときには該依存性解析器は停止しかつ該命令発行器が前記命令ウインドウ中の、該第２のエントリで決定される、一つ以上、所定の数の命令を該機能ユニットに発行し、第１のエントリが第２の動作モードを示しているときは、該依存性解析器は動作して、該第２のエントリで上限が決定される数の命令間の依存性解析を行いかつ該命令発行器は抽出された命令を該機能ユニットに、一つ以上、可能な数だけ同時発行することを特徴とする。
【００２４】
また、前記モード検出器中の前記一つ以上の記憶領域は、開始アドレスと終了アドレスとを保存する領域をさらに有し、前記モード設定器は、前記デコードされた命令が主記憶上に保存されていたアドレスと、該開始アドレス及び該終了アドレスとを比較した結果から、前記デコードされた命令が第１のモードで実行されるか第２のモードで実行されるかを判断する比較器を有し、該比較器の判断結果を前記命令ウインドウ中に配置される前記デコードされた命令に対応する第１のエントリに記載し、前記デコードされた命令に対応する第２のエントリには前記比較器によって判断された前記一つ以上の記憶領域のどれに格納されたアドレスに該当するかを記載することを特徴とする。
【発明の効果】
【００２５】
命令やどのアドレスの命令であるかや外部割込みによってデータ依存関係の解析能力を変化させることで全体としてエネルギー消費の削減を行うという効果を有する。すなわち、データ依存関係の解析をする必要が無い場合はデータ依存関係解析器を停止または機能低下することができるので、消費電力を節減できる。
【発明を実施するための最良の形態】
【００２６】
以下に本願発明の実施形態を説明する。
【００２７】
図１は本願発明による細粒度並列プロセッサの第１の実施形態を説明する図面である。
細粒度並列プロセッサ１００は、機械語で記載された命令を格納するインストラクションメモリー１０、命令を一時的に格納するインストラクションレジスター２０、及びインストラクションレジスター２０内の命令が転送され、命令をデコードする複数のデコーダ３０を有する。インストラクションメモリー１０は、主記憶である場合もあり、キャッシュである場合もある。後者の場合別途主記憶（図示せず）を有する。主記憶は命令以外にデータを格納していてもよく、命令を格納している領域をインストラクションメモリー１０とみなす。キャッシュについても同様である。デコーダ３０でデコードされた命令は、一時的な命令記憶領域である命令ウインドウ４０に格納される。
【００２８】
命令ウインドウ４０は複数（図１の構成では１２個）の命令を格納可能である命令領域４４からなっている。その中の一つが先頭命令４５となる。命令ウインドウ内の全命令につき、依存性解析器５０が命令間の並列処理可能性を解析する。さらに並列処理可能な複数の命令を命令発行器６０にて複数の機能ユニットに発行することで並列処理が行われる。図１の構成では４つの機能ユニット７０−１〜４を有するので、最大４並列の処理が行われる。以上は、従来のスーパースカラ（ＳＳ）プロセッサと同様である。
【００２９】
図１に示す構成の細粒度並列プロセッサ１００ではさらに、モード検出器８０を有する。モード検出器８０には動作モードフラグ８１を備えている。
動作モードフラグとは、プロセッサがＶＬＩＷとして動作する（ＶＬＩＷモード）か、スーパースカラとして動作する（ＳＳモード）かを決定するフラグである。以下の説明では便宜上、該フラグの値が１のときはＶＬＩＷモード、０のときはＳＳモードであるとする。
本願発明の細粒度並列プロセッサでは、動作に該２つのモードを有し、ＳＳモードのときにのみ依存性解析器５０を動作（オン）させ、ＶＬＩＷモードのときには停止（オフ）させる点に特徴がある。第１実施形態の細粒度並列プロセッサにおいては、依存性解析器５０が動作モードフラグ８１の値を参照して、これが０のとき動作し１のとき停止する。ＶＬＩＷモードでの動作は一つの命令だけで動作する場合を含んでおり、一つの命令だけで動作する場合は命令を一つずつ逐次処理する。
【００３０】
モード検出器８０は、先頭命令４５を調べ、これが特定の命令である場合は、動作モードフラグ８１の値を１（ＶＬＩＷモード）または０（ＳＳモード）に設定する。
【００３１】
本実施形態の細粒度並列プロセッサの動作を説明する前に、該プロセッサが用いる命令列である、コンパイル後に主記憶６００に配置される命令列の例を図２に示す。命令列中の命令として、（ａ）に示すように、本発明の細粒度並列プロセッサ特有の命令である「動作モードをＶＬＩＷにする命令」６４０、「動作モードをＳＳする命令」６４１を有する場合がある。
また、（ｂ）においてはサブルーチン呼び出し命令６３０及びサブルーチンから戻る命令６３１を有するところ、それらをそれぞれ「ＶＬＩＷモードにする」または「ＳＳモードにする」命令と設定することができる。（ｂ）の場合は、新種の命令を含まないので、従来のソフトウェアとの互換性が保たれるという有利な点がある。
【００３２】
つぎに、本実施形態の細粒度並列プロセッサの動作を説明する。プロセッサの初期状態モードは、ＳＳとＶＬＩＷのいずれで有っても良い。コンパイル後の主記憶６００には、図２（ａ）または（ｂ）のように命令が配置されているとする。
【００３３】
まず、（ａ）の場合を説明する。（ａ）においては、動的に依存解析を行う必要のある命令列６１１と４命令ずつ同時発行可能な命令列６１０が交互に配置されており、その間にモードを設定する命令が挟まれている。すなわち、命令列６１１の直前にはＳＳモードにする命令６４１が、命令列６１０の直前にはＶＬＩＷモードにする命令６４０が配置される。命令列６１０では、依存解析を行うことなしに、同時発行できる命令列が含まれるように、コンパイル時にＶＬＩＷとして動作可能なように処理を行ったものとする。６４０と６４１は単にモードを変えるだけの同一の命令であってもよい。
【００３４】
細粒度並列プロセッサ１００中のモード検出器８０は、命令ウインドウ４０の先頭命令４５を監視する。この際、動作モードをＶＬＩＷモードにする命令６４０が命令ウインドウ４０の先頭命令４５に来たとき、モード検出器８０は、動作モードフラグ８１の値を１にして、ＶＬＩＷモードとする。この状態になると、依存性解析器５０は停止する。さらに、命令発行器６０は、機能ユニットの数に相当する４つの命令を同時に発行する。すなわち、細粒度並列プロセッサ１００はＶＬＩＷプロセッサの如く動作する。ただし、命令列６１０の中にはコンパイラによって適宜何もしない命令（ＮＯＰ）が含まれていても良いものとする。この場合、ＮＯＰに対応する機能ユニットは動作しない。
【００３５】
その後、動作モードをＳＳモードにする命令６４１が先頭命令４５に来たとき、モード検出器８０は、動作モードフラグ８１の値を０にして、ＳＳモードとする。この状態になると、依存性解析器５０が動作を開始する。依存性解析器５０は命令ウインドウ４０中に収容した１２の命令の依存性を解析する。さらに、命令発行器６０は、依存性解析器５０の処理結果にしたがって、命令ウインドウ４０内の命令を発行する。すなわち、細粒度並列プロセッサ１００はスーパースカラプロセッサの如く動作する。
【００３６】
ただし、依存性解析器５０が処理動作中にＶＬＩＷモードにする命令を検出すると、これ以降の命令については依存性を調べないものとする。すなわち、ＶＬＩＷモードにする命令の手前までを依存性解析の対象とする。この場合、当該ＶＬＩＷモードにする命令が先頭命令４５になると、モード検出器８０により、ＶＬＩＷモードに変化する。
【００３７】
つぎに（ｂ）の場合を説明する。サブルーチンには、４命令ずつ同時に発行できる命令列を有するものとする。サブルーチン呼び出し命令６３０が命令ウインドウ４０の先頭命令４５に来たとき、モード検出器８０は、動作モードフラグ８１の値を１にして、ＶＬＩＷモードとする。この状態になると、依存性解析器５０は停止する。さらに、命令発行器６０は、機能ユニットの数に相当する４つの命令を同時に発行する。すなわち、細粒度並列プロセッサ１００はＶＬＩＷプロセッサの如く動作する。
その後、サブルーチンから戻る命令６３１が先頭命令４５に来たとき、モード検出器８０は、動作モードフラグ８１の値を０にして、ＳＳモードとする。この状態になると、依存性解析器５０が処理動作を再開する。依存性解析器５０は命令ウインドウ４０中に収容した１２の命令の依存性を解析する。命令発行器６０は、依存性解析器５０の処理結果にしたがって、命令ウインドウ４０内の命令を発行する。すなわち、細粒度並列プロセッサ１００はスーパースカラプロセッサの如く動作する。
【００３８】
依存性解析器５０はＳＳモードのときのみ動作し、ＶＬＩＷモードのときは停止する。したがって、並列動作させるためのデータ依存関係の解析を行う必要が無い場合は依存性関係解析器５０を停止させることによって、消費電力を節減できる。全体としてエネルギー消費の削減を行うという効果を有する。
【００３９】
本実施形態で、命令ウインドウ４０中の命令数を１２，機能ユニットの数を４としたが、この数値はかならずしも、このように限定されるものではなく、プロセッサにおいて必要に応じて設定可能である。ＶＬＩＷモードのときの発行数は１であってもよく、１である場合は逐次処理が行われる。
【００４０】
図３に本発明による第２の実施形態の細粒度並列プロセッサ２００を示す。本実施形態では、命令ウインドウ４０中の各命令を入れる領域には命令領域４４のほかエントリ４６を有している。エントリ４６は、命令領域中の各命令に付加された１ビット記憶領域であり、対応する命令がＶＬＩＷモードで動作すべきか（エントリの値１に対応するものとする）またはＳＳモードで動作すべきか（エントリの値０に対応するものとする）を示す。
【００４１】
モード検出器８０には、モード命令数発行数記録器８６を有する。モード命令数発行数記録器８６は、動作モードフラグ８１のほか一定の命令数（Ｌ）の間、所定のモードとする数値を示す領域である命令数領域８４及び好ましくは発行数領域８３を有する。さらに、モード設定器９０を有し、その中にはカウンタ９１を備えている。そのほかは第１の実施形態と同様な構成である。
コンパイル後の主記憶６００には、図４（ａ）または（ｂ）のように命令列が配置されたものとする。これらには、ＶＬＩＷモードにする命令６５０及びＳＳモードにする命令６５１を有するが、これらの命令が図２におけるＶＬＩＷモードにする命令６４０及びＳＳモードにする命令６４１と異なるのは、所定の命令数Ｌだけそのようなモードに変化させる点である。このために、命令６５０及び６５１は該所定命令数を示す値Ｌ及び好ましくは発行数を示す数値ｍをオペランドに有する。発行数を示す数値ｍを有する場合は、モード命令数発行数記録器８６において発行数記憶領域８３を有する場合に対応するものとする。
【００４２】
「発行数を示す数値ｍ」によって、プロセッサは「ｍ個ずつの処理を行う」動作をする。これは、モードがＶＬＩＷのときは、命令発行器６０はモード検出器８０中の発行数領域８３に記録された値ｍを参照してｍ個ずつ同時発行し、モードがＳＳのときは、依存性解析器５０はモード検出器８０中の発行数領域８３に記録された値ｍを参照してｍ個の命令の依存性解析を行うことを意味する。  なお、命令中にｍの値がなく、モード命令数発行数記録器８６に発行数領域８３を有さない場合、ｍの値は、プロセッサの構成により各モード別に固定される。ｍが１である場合は、いずれのモードにおいても逐次処理が行われる。
【００４３】
「モードがＶＬＩＷのときは、命令発行器６０にてｍ個ずつ同時発行する」ｍ可変の機能と「モードがＳＳのときは、依存性解析器５０にてｍ個の命令の依存性解析を行う」ｍ可変の機能はいずれか一方のみを備えることも可能である。可変機能を有さない場合のｍの値は、そのモードで固定される。固定されるｍは１であってもよく、１である場合は逐次処理が行われる。
図３中モード検出器８０と命令発行器６０との信号のやりとり及びモード検出器８０と依存性解析器５０との信号のやりとりとは、それぞれ前述の「ｍ個ずつ同時発行する」及び「ｍ個の命令の依存性解析を行う」機能に対応する。したがって、それらを結ぶ破線は、各機能を有する場合のみ対応する信号のやりとりが発生することを意味する。
【００４４】
モード検出器８０は、先頭命令４５がＶＬＩＷまたはＳＳモードにする命令６５０または６５１であることを判断すると、オペランドにあるＬの値及び必要ならばｍの値を読み込み、モード命令数発行数記録器中の８６の動作モードフラグ８１を設定し、命令数領域８４及び必要ならば発行数領域８３にそれぞれＬ及びｍの値を書き込む。  
【００４５】
「ＭＯＤＥＶＬＩＷ，２５６，４」すなわち、「以下の２５６個の命令を（Ｌ＝２５６）、４個ずつ（ｍ＝４）、ＶＬＩＷとして処理せよ」という命令が主記憶６００上に設定されたときのプロセッサ２００の動作を下記に示す。
この命令が命令ウインドウ４０の先頭命令４５に入り、モード検出器８０がそれを検出した場合は、モード検出器８０は、動作モードフラグ８１、命令数領域８４及び発行数領域８３にそれぞれ、１、２５６、４を置く。一方モード設定器９０は次の動作をなす。
Ｌの値がエントリ数（命令ウインドウに格納される命令数）より大なら、カウンタ９１にＬがセットされると同時にエントリ４６の各ビットをすべて１にし、カウンタ９１をエントリ数だけデクリメントする。その後は新たな命令が命令ウインドウ４０に取り込まれるたびにその数だけカウンタ９１をデクリメントさせ、０になるまで１を当該命令に対するエントリに立て続ける。新たに１を立てるタイミングはデコードされた命令を命令ウインドウ４０に置くのと同じタイミングとする。
Ｌの値がエントリ数より小ならば、命令ウインドウ４０の下のＬ個の命令に１を立てて、カウンタ９１を０にする。
【００４６】
一方、「ＭＯＤＥＳＳ，２５６，１２」すなわち、「以下の２５６個の命令を（Ｌ＝２５６）、１２個ずつ（ｍ＝１２）、ＳＳとして処理せよ」という命令が主記憶６００上に設定されたときのプロセッサ２００の動作を下記に示す。
この命令が命令ウインドウ４０の先頭命令４５に入り、モード検出器８０がそれを検出した場合は、モード検出器８０は、動作モードフラグ８１、命令数領域８４及び発行数領域８３にそれぞれ、０、２５６、１２を置く。一方モード設定器９０は次の動作をなす。
Ｌの値がエントリ数より大なら、カウンタ９１にＬがセットされると同時にエントリ４６の各ビットをすべて０にし、カウンタ９１をエントリ数だけデクリメントする。その後は新たな命令が命令ウインドウ４０に取り込まれるたびにその数だけカウンタ９１をデクリメントさせ、０になるまで０を当該命令に対するエントリに立て続ける。新たに０を立てるタイミングはデコードされた命令を命令ウインドウ４０に置くのと同じタイミングとする。
Ｌの値がエントリ数より小ならば、命令ウインドウ４０の下のＬ個の命令に０を立てて、カウンタ９１を０にする。
いずれの場合にも初期動作モードがＳＳならば０，ＶＬＩＷなら１がエントリのデフォルト値になる。
【００４７】
また、ＭＯＤＥＣＨという、モードを変更するだけの命令も用い得る。ＭＯＤＥＣＨに遭遇する以前の動作モードがＳＳならば「ＭＯＤＥＣＨ，２５６，４」は「以下の２５６個の命令を（Ｌ＝２５６）、４個ずつ（ｍ＝４）、ＶＬＩＷとして処理せよ」と解釈される。ＭＯＤＥＣＨに遭遇する以前の動作モードがＶＬＩＷならば「ＭＯＤＥＣＨ，２５６，１２」は「以下の２５６個の命令を（Ｌ＝２５６）、１２個ずつ（ｍ＝１２）、ＳＳとして処理せよ」と解釈される。
【００４８】
この実施形態では、エントリ４６を有しているので、ＶＬＩＷモードで動作すべきかＳＳモードで動作すべきかを決定するのは、先頭命令に対応したエントリの値が１か０かによる。依存性解析器５０及び命令発行器６０は、先頭命令に対応したエントリの値が１か０かにより、ＶＬＩＷモードまたはＳＳモードで動作する。すなわち、ＶＬＩＷモードの場合は、依存性解析器５０は動作せず、命令発行器６０はｍ個の命令を複数の機能ユニット７０に同時発行し、ＳＳモードの場合は、ｍ個の命令を依存性解析器５０にて依存性解析を行い、その結果に依存して命令発行器６０が複数の機能ユニット７０に命令を同時発行する。
【００４９】
なお、依存性解析器５０で依存性解析を行う際、ＶＬＩＷとして実行すべきである命令は依存性解析の対象としない。これは、各命令に対するエントリが「１」になっていることを、依存性解析器５０が判断することにより実現可能である。
【００５０】
この実施形態では、特定の動作モードとこのモードで実行すべき命令数Ｌが記録されており、この命令を読み込むと直ちに指定のモードにする動作がなされる。そして、命令数Ｌにわたって指定の動作モードで動作する。この変形形態として、特定のモードで命令開始すべき命令の開始アドレスを指定することもできる。この場合、モード検出器８０中のモード命令数発行数記録器８６は開始アドレス領域を有する。この場合、モードを指定する命令は、当該モードで実行すべき命令の直前に置かれる必要はなくなる。
【００５１】
依存性解析器５０はＳＳモードのときのみ動作し、ＶＬＩＷモードのときは停止する。したがって、並列動作させるためのデータ依存関係の解析を行う必要が無い場合は依存性解析器５０を停止させることによって、消費電力を節減できる。全体としてエネルギー消費の削減を行うという効果を有する。
【００５２】
本実施形態で、命令ウインドウ４０中の命令数を１２，機能ユニットの数を４としたが、この数値はかならずしも、このように限定されるものではなく、プロセッサにおいて必要に応じて設定可能である。ｍの値は１であってもよく、１である場合は逐次処理が行われる。    
【００５３】
図５に本発明による第３の実施形態の細粒度並列プロセッサ３００を示す。この実施形態ではモード検出器８０に、モード命令数発行数記録器でなくモード領域発行数記録器８７を有する。モード領域発行数記録器８７は、動作モードフラグ８１のほか、開始アドレス領域８８、終了アドレス領域８９，発行数領域８３の組を一つ以上有する記憶領域である。これらの組はそれぞれがＩＤ領域８２を有している。例えば、図５のように、３組有すると、それぞれの組に０１、１０、１１の２ビットからなるＩＤを付与する。７組有する場合は、それぞれの組に００１〜１１１の３ビットからなるＩＤを付与できる。ここで００及び０００は後で説明するように特別な意味を持たせるために使用しない。
動作モードフラグ８１は動作モードがＶＬＩＷかＳＳかを示すフラグであり、第２実施形態等と同様、ここでは１のときＶＬＩＷ、０のときＳＳと設定される。開始アドレス領域８８及び終了アドレス領域８９にはそれぞれ開始アドレス、終了アドレスが記載される。これらのアドレスの意味は後述する。発行数領域８３は、第２実施形態と同じ意味である発行数を示す数値ｍが記載される。
また、モード設定器９０には、カウンタでなく、比較器９２を有している。またデコーダ３０からは、命令自体のみでなく、各命令が主記憶上で記憶されていたアドレス情報も送付される。
【００５４】
命令ウインドウ４０には命令領域４４のほか第１エントリ４６及び第２エントリ４７を有している。第１エントリ４６は、第２の実施形態におけるエントリ４６と同様な意味を持つ。すなわち、命令領域中の各命令に１ビットが対応させてあり、対応する命令がＶＬＩＷモードで動作する命令であるか（エントリの値１に対応するものとする）またはＳＳモードであるか（エントリの値０に対応するものとする）を示す。第２エントリ４７の意味は後で説明する。
【００５５】
この実施形態では、開始アドレスから終了アドレスまでに属する命令を、対応する動作モードでｍ個ずつの処理を行うと規定される。
上記において、「ｍ個ずつの処理を行う」とは、第２実施形態と同様、モードがＶＬＩＷのときは、命令発行器６０はモード検出器８０中の発行数領域８３に記録された値ｍを参照してｍ個ずつ同時発行し、モードがＳＳのときは、依存性解析器５０はモード検出器８０中の発行数領域８３に記録された値ｍを参照してｍ個の命令の依存性解析を行うことを意味する。ｍの値は１であってもよく、１である場合は逐次処理が行われる。
【００５６】
上記の処理を実行するため、モードを設定する命令において、オペランドにてそのモードをカバーする領域を指定する。「領域」の指定方法は４通り考えられる。下記に各指定方法による命令を示す。
xxは、ＶＬＩＷまたはＳＳであり、Ｌ及びｍは第２の実施形態で説明したものと同じ意味である。なお、下記（１）以外の命令は、主記憶のどこに配置されることも可能である。
【００５７】
（１）直ちに所定のモードで動作する命令
ＭＯＤＥxx，Ｌ，ｍ
この命令は、「当該アドレスの次のアドレスから、Ｌ個の命令を、指定のモードxxで、ｍ個ずつ処理する。」を意味する。これは第２の実施形態にて用いられる命令６５０，６５１（図４）と同じである。
（２）開始アドレスと命令数Ｌとを指定する命令
ＭＯＤＥxx，（開始アドレス），Ｌ，ｍ
「（開始アドレス）以下、Ｌ個の命令を、指定のモードxxで、ｍ個ずつ処理する」を意味する。
（３）開始アドレスと終了アドレスとを指定する命令
ＭＯＤＥxx，（開始アドレス）、（終了アドレス），ｍ
「（開始アドレス）から（終了アドレス）のアドレスに含まれる命令を指定のモードxxでｍ個ずつ処理する」
（４）上位ビットを指定する命令
ＭＯＤＥxx，（アドレスの上位ビット），ｍ
「指定されたアドレスの上位ビットに該当するアドレス中の命令を指定のモードxxでｍ個ずつ処理する。」
【００５８】
上記（１）〜（４）すべての場合について、モード領域発行数記録器８７で記録可能である。
以下、各命令を読み込む際のモード検出器８０による記録方法とモード領域発行数記録器８７にて記録される記録形態とを例示する。アドレスは８ビットで指定されるものとする。
【００５９】
（１−１）ＭＯＤＥＶＬＩＷ、３２、４
「当該命令以下、３２個の命令を、４つずつ、ＶＬＩＷとして同時発行せよ」という命令が “１０１０００００”番地に配置された場合。
モード検出器８０は、この命令を読み込んだら、動作モードフラグにはＶＬＩＷである１、開始アドレス領域８８には当該命令のアドレスの次のアドレスを書き込む。さらに、終了アドレス領域８９には、開始アドレスから３２個目のアドレスを計算して書き込む。すなわち、モード領域発行数記録器８７の内容は、動作モードフラグ８１、開始アドレス領域８８、終了アドレス領域８９、発行数領域８３の順に、
１  １０１００００１  １１００００００  ０００００１００
となる。
【００６０】
（１−２）ＭＯＤＥＳＳ、３２、４
「当該命令以下、３２個の命令を、４つずつ、ＳＳとして依存解析せよ」という命令が“１０１０００００”番地にあった場合
動作モードフラグがＳＳを意味する０となる以外は（１）と同様になり、モード領域発行数記録器８７の内容は
０  １０１００００１  １１００００００  ０００００１００
となる。
この場合、依存性解析器５０が依存性を解析し、命令発行器６０が処理を続けた結果、残った命令（解析対象である開始アドレスと終了アドレス間のうち未解析の命令）が４個を下回った場合は、残った命令のみ依存性解析を行う。この先の命令は、対応するエントリにはＶＬＩＷとして実行すべき「１」が付いているため、エントリの値を判断して、依存性解析器５０はそれらの命令は解析対象としないものとする。ＳＳモードのときのこの処理は下記（２−２）（３−２）（４−２）についても同様である。
【００６１】
（２−１）ＭＯＤＥＶＬＩＷ、“１０１０００００”、３２，４
「１０１０００００番地以下、３２個の命令を、４つずつ、ＶＬＩＷとして同時発行せよ」  という命令がある場合。（この命令は、主記憶のどこに置かれることも可能である。（２−２）以下も同じである。）
この命令をモード検出器８０が検出した時点で、その中のモード領域発行数記録器８７に下記が記録される。終了アドレスは開始アドレス１０１０００００から３２個目に当たる。
１  １０１０００００  １０１１１１１１  ０００００１００
【００６２】
（２−２）ＭＯＤＥＳＳ、“１０１０００００”、３２，４
「１０１０００００番地以下、３２個の命令を、４つずつ、ＳＳとして依存性解析せよ」という命令がある場合。
この命令をモード検出器８０が検出した時点で、その中のモード領域発行数記録器８７に下記が記録される。
０  １０１０００００  １０１１１１１１  ０００００１００
【００６３】
（３−１）ＭＯＤＥＶＬＩＷ、“１０１０００００”、“１０１１１１１１”、４
「１０１０００００番地から、１０１１１１１１番地までの命令を、４つずつ、ＶＬＩＷ命令として同時発行せよ」という命令がある場合。
この命令をモード検出器８０が検出した時点で、その中のモード領域発行数記録器８７に下記が記録される。該命令には開始アドレス及び終了アドレスが記載されているので、それらのアドレスをそれぞれ、モード領域発行数記録器８７の開始アドレス領域８８、終了アドレス領域８９に記録する。
１  １０１０００００  １０１１１１１１  ０００００１００
【００６４】
（３−２）ＭＯＤＥＳＳ、“１０１０００００”、“１０１１１１１１”、４
「１０１０００００番地から、１０１１１１１１番地までの命令を、４つずつ、ＳＳとして依存性解析せよ」という命令がある場合。
この命令をモード検出器８０が検出した時点で、その中のモード領域発行数記録器８７に下記が記録される。
０  １０１０００００  １０１１１１１１  ０００００１００
【００６５】
（４−１）ＭＯＤＥＶＬＩＷ、ＭＳＢ，３，“１０１”、４
「上位３ビットが１０１である命令を、４つずつ、ＶＬＩＷ命令として同時発行せよ」
という命令がある場合。この命令をモード検出器８０が検出した時点で、内部のモード領域発行数記録器８７には下記が記録される。アドレスが「上位３ビットが１０１である」を「１０１０００００番地から１０１１１１１１番地まで」と解釈して、それぞれの値を開始アドレス領域８８及び終了アドレス領域８９にそれぞれ記録する。モード領域発行数記録器８７には下記が記録される。
１  １０１０００００  １０１１１１１１  ０００００１００
【００６６】
（４−２）ＭＯＤＥＳＳ、ＭＳＢ，３，“１０１”、４
「上位３ビットが１０１である命令を、４つずつ、ＳＳとして依存性解析せよ」という命令がある場合。同様に、モード領域発行数記録器８７には下記が記録される。
０  １０１０００００  １０１１１１１１  ０００００１００
【００６７】
モード設定器９０は、モード領域発行数記録器８７に記録された、開始アドレス及び終了アドレスとデコーダ３０から送られる各命令のアドレスとを比較器９２を利用して、その命令がどのアドレス領域に属するかを判断する。開始アドレス及び終了アドレスの組が複数あるときは、すべてについて判断する。そして、その命令が属するアドレス領域に対応する、ＩＤ及び動作モードを決定する。そして、各命令が命令ウインドウ４０に収容されるときに、動作モード及びＩＤを各命令に対する第１エントリ４６及び第２エントリ４７に書き込む。もし、ある命令に対して属するアドレス領域がない場合、すなわちＩＤが定まらない場合は、第１エントリはデフォルト値を書き込み（予めデフォルト値を決めておくものとする）、第２エントリは所定の値（ＩＤ領域８２に付与されることのない値であり、図５の場合ならば００である。また、３ビットでＩＤを指定する場合には、例えば０００となる。）を書き込む。
【００６８】
例えば、モード領域発行数記録器８７に下記のような記録がされた場合を考える。左から順に動作モードフラグ８１，開始アドレス領域８８，終了アドレス領域８９及び発行数領域８３の記録内容とし、さらに対応するＩＤ領域８２の値を付記する（アドレスは８ビット指定、ＩＤ領域は２ビットとする）。
１  ００００００００  １００００００１  ００００００１１  ０１  （ＩＤ＝１）
０  １０１０００００  １０１１１１１１  ０００００１００  １０  （ＩＤ＝２）
１  １１００００００  １１１１１０００  ０００００１００  １１  （ＩＤ＝３）
これは、「アドレス００００００００番地から１００００００１番地までＶＬＩＷモードで３命令ずつ同時発行し（ＩＤ＝１に対応）、アドレス１０１０００００番地から１０１１１１１１番地までＳＳモードで４命令解析し（ＩＤ＝２に対応）、アドレス１１００００００番地から１１１１１０００番地までＶＬＩＷモードで４命令ずつ同時発行（ＩＤ＝３に対応）する」という意味である。
【００６９】
デコーダ３０で処理された命令が命令ウインドウ４０に入るときのモード検出器８０の動作例を下記に示す。
（１）１０１１００００番地の命令に対して
このアドレスは、ＩＤ＝２に対応する領域にあるので、モードは０（ＳＳ）である。したがって、対応する第１エントリに０、第２エントリに１０を書き込む。
（２）１１１０００００番地の命令に対して
このアドレスは、ＩＤ＝３に対応する領域にあるので、モードは１（ＶＬＩＷ）である。したがって、対応する第１エントリに１、第２エントリに１１を書き込む。
（３）１０００００１０番地の命令に対して
このアドレスは、どの領域にも属さない。従ってＩＤは定まらない。この場合、‘００’を、第２エントリに書き込む。モードはデフォルト値（プロセッサによって規定する）を第１エントリに書き込む。
【００７０】
この実施形態では、ＶＬＩＷモードで動作すべきかＳＳモードで動作すべきかを決定するのは、先頭命令に対応した第１エントリの値が１か０かによる。依存性解析器５０及び命令発行器６０は、その値が１か０かにより、それぞれＶＬＩＷモードまたはＳＳモードで動作する。
【００７１】
すなわち、本実施形態では、つぎのようになる。ＶＬＩＷモードの場合は、依存性解析器５０は動作せず、命令発行器６０は、先頭命令に対応した第２エントリのＩＤをキーとしてモード領域発行数記録器８７を検索して、該当する発行数ｍを決定し、決定したｍ個の命令を複数の機能ユニット７０に同時発行する。ＳＳモードの場合は、同様にしてｍを決定し、ｍ個の命令を依存性解析器５０にて依存性解析を行い、その結果に依存して命令発行器６０が複数の機能ユニット７０に命令を同時発行する。
第２エントリに００が入っている場合、ＩＤが００に対応するｍの値が定まらないが、このときは、依存性解析器５０及び命令発行器６０はそれぞれ所定のデフォルト値を使用するものと定めればよい。
ｍのデフォルト値は１であって良く、１である場合は逐次処理が行われる。
【００７２】
なお、依存性解析器５０で依存性解析を行う際、ＶＬＩＷとして実行すべきである命令は依存性解析の対象としない。これは、各命令に対するエントリが「１」になっていることを、依存性解析器５０が判断することにより実現可能である。
【００７３】
本実施形態では、第２エントリ４７には、ＩＤを書き込んだが、直接ｍの値を記載することも可能である。このとき、モード検出器８０はＩＤ領域８２を必要としない。第２エントリに記載されたＩＤからモード検出器８０内の発行数領域８２を検索することなく、第２エントリに記載されたｍの値をよんで、命令発行器または依存性解析器は所定の動作を実施することができる。
【００７４】
一方、つぎのような構成も考えられる。第２エントリ４７にＩＤが記載され、このＩＤをキーとして、モード領域発行数記録器８７の内容が検索される。したがって、該当するＩＤ領域８２から、発行数領域８３のみならず動作モードフラグ８１を決定することができるので、第２エントリ４７のみとし、第１エントリ４６を有さない構成とすることも可能である。
【００７５】
本実施形態においても、命令中にｍの指定を有さない場合が可能であり、このときｍの値は、プロセッサの構成により各モード別に固定される。図６に、このような構成の細粒度並列プロセッサ３５０を示す。図６の細粒度並列プロセッサは、図５のものと部分的には同様な構成であるので相違点をのみを説明する。モード検出器８０にモード領域発行数記録器８７を有するが、図６のものは図５のものと異なり、モード命令数発行数記録器８７に発行数領域もＩＤ領域も有さない。また、図６のものにおいて依存性解析器５０−モード検出器８０間、命令発行器６０−モード検出器８０間の情報のやりとりはなくなる。さらに、命令ウインドウ４０には、第１エントリ４６のみを有し、第２エントリは有さない。モード設定器９０は発行数ｍの記録に関する動作をせず、モード検出器８０はｍに関する検索をする必要がない。また、依存性解析器５０及び命令発行器６０は、各モード別に固定された発行数ｍの値を使用する。この他は、図５の場合と同様な動作を行う。
【００７６】
第３実施形態（図６に示した変形形態も含める）でも、依存性解析器５０はＳＳモードのときのみ動作し、ＶＬＩＷモードのときは停止する。したがって、並列動作させるためのデータ依存関係の解析を行う必要が無い場合は依存性関係解析器５０を停止させることによって、消費電力を節減できる。全体としてエネルギー消費の削減を行うという効果を有する。
また、本実施形態でも、命令ウインドウ４０中の命令数を１２，機能ユニットの数を４としたが、この数値はかならずしも、このように限定されるものではなく、プロセッサにおいて必要に応じて設定可能である。
【００７７】
ＶＬＩＷモードのとき、つねに同じ命令数ずつ同時発行するのではなく、同時発行する命令の数ｍを可変とすることによって効率的なプロセッサ動作をさせることが可能である。
また、ＳＳモードでデータ依存解析を行うべき命令数が少ないときの方が、依存性解析器において、少ない回路数を動作とすることが可能であるので、消費電力が小さい。従って、依存性解析対象とする命令数ｍを可変とすると必要に応じてその数を減らすことによって、トータルの消費エネルギーを減らすことが可能である。
以上の効果は、第２及び第３の実施形態の場合に共通である。
【００７８】
後者の効果を詳しく説明する。従来のスーパースカラ型並列プロセッサの場合、命令ウインドウ４０にｎ個の命令が蓄積されると仮定すると、依存性解析器では、その中の任意の２つの命令が並列実行可能であるかを調べていた。最悪総当たりで調べるので、（ｎ＊（ｎ−１）／２）通りの組み合わせにつき、並列実行可能性を調べていた。組み合わせ数がほぼｎの２乗に比例するので、特にｎを大きくすると依存性解析器における消費電力が増大することが問題となる。本願発明では発行数ｍを設定し、依存性解析対象命令数をｍとすることで、実質的にｎの値が可変とされる。したがって、必要に応じてｎが小さくなるので、ＳＳモード時の消費エネルギーを減らすことが可能である。
【００７９】
図７に本発明による第４の実施形態の細粒度並列プロセッサ４００を示す。この細粒度並列プロセッサは、図５に示した第３実施形態の細粒度並列プロセッサと同様な構成であるがモード検出器を有さない点が異なる。この実施形態では、各命令が主記憶に配置されたアドレスによって、ＶＬＩＷモードで実施されるかＳＳモードで実施されるかが決まるものとする。すなわち、主記憶上の一部をＶＬＩＷモードで実施される命令が占有し、主記憶上の残りをＳＳモードで実施される命令が占有する。アドレスのどの部分をどのモードにするかは該プロセッサにて固定されるものとする。例えばアドレス領域と動作モードとを対応させたテーブル（図示せず）を読み出し専用メモリーまたは不揮発性メモリーに備えるという構成が考えられる。後者の例だとアドレス領域を変更できて便利である。また、テーブルをＲＡＭで構成し、プログラムで領域を設定できるようにした場合が、第３の実施形態に相当すると考えられる。したがって、本実施形態では、第２及び第３の実施形態と異なり、モード検出器は不要である。
【００８０】
本構成に対応するために、コンパイラは、コンパイラ時にＶＬＩＷモードで実施できる命令（依存性解析器で判断することなく、無条件に同時発行できる命令）を、ＶＬＩＷモードで実施されるアドレス領域に配置するものとする。コンパイル後の主記憶上の命令配置例を図９（ａ）に示す。この例では、主記憶における前半部をＳＳで実行される領域、後半部をＶＬＩＷで実行される領域としたので、それぞれの領域にＳＳで実行される命令列６２１及びＶＬＩＷで実行される命令列６２０が配置される。
【００８１】
また、デコーダ３０からは、命令自体のみでなく、各命令が主記憶上で記憶されていたアドレス情報も送付される。モード設定器９０内の比較器９２は送られたアドレスが、ＶＬＩＷモードとするアドレス領域かＳＳモードとするアドレス領域かのいずれかに属するかを判断する。例えば、前述のテーブルを備えた場合だと、該テーブル参照することによって実現できる。モード設定器９０は、該命令が命令ウインドウ４０に格納されるときに、該命令に対するエントリ４６にその判断結果を設定する。すなわち、ＶＬＩＷモードに対応するならば１、ＳＳモードに対応するならば０にする。
【００８２】
例えば、アドレスの最上位ビットが０ならＳＳモード、１ならばＶＬＩＷモード（すなわち、８ビットアドレス空間として、００００００００〜０１１１１１１１のアドレス領域に位置した命令はＳＳモードで、１０００００００〜１１１１１１１１のアドレス領域に位置した命令はＶＬＩＷモード）で実施されると構成した場合を考える。
【００８３】
コンパイラはコンパイル時にＶＬＩＷモードで実施される命令を抽出する際、そのような命令は、主記憶の１０００００００以後のアドレス領域に配置するようにする。（必要に応じてジャンプ命令などを挿入して実現する。）
【００８４】
モード設定器９０中の比較器９２は、デコーダから命令とそのアドレスが送られてくる際、そのアドレスが０１１１１１１１までか１０００００００以後かを判断する。その命令が命令ウインドウ４０に配置されるとき、モード設定器９０は該アドレスが前者ならば、該命令に対するエントリを０、後者ならば１に設定する。
複雑なアドレス領域を設定した場合でも、同様に対応することが可能である。なお、前記の例では、デコーダ３０からアドレスを送るときに、アドレスの最上位１ビットのみを送り、最上位の値をそのまま、エントリに配置することで必要な機能が実現されるので、構成が簡単化されうる。
【００８５】
依存性解析器５０及び命令発行器６０は、先頭命令に対応したエントリの値が１か０かにより、ＶＬＩＷモードまたはＳＳモードで動作する。すなわち、ＶＬＩＷモードの場合は、依存性解析器５０は動作せず、命令発行器６０は、一つ以上、所定数の命令を複数の機能ユニット７０に同時発行し、ＳＳモードの場合は、所定数の命令を依存性解析器５０にて依存性解析を行い、その結果に依存して命令発行器６０が複数の機能ユニット７０に命令を同時発行する。
同様に、依存性解析器５０で依存性解析を行う際、ＶＬＩＷとして実行すべきである命令は依存性解析の対象としない。これは、各命令に対するエントリが「１」になっていることを、依存性解析器５０が判断することにより実現可能である。
【００８６】
本実施形態でも、依存性解析器５０はＳＳモードのときのみ動作し、ＶＬＩＷモードのときは停止する。したがって、並列動作させるためのデータ依存関係の解析を行う必要が無い場合は依存性関係解析器５０を停止させることによって、消費電力を節減できる。全体としてエネルギー消費の削減を行うという効果を有する。
また、本実施形態でも、命令ウインドウ４０中の命令数を１２，機能ユニットの数を４としたが、この数値はかならずしも、このように限定されるものではなく、プロセッサにおいて必要に応じて設定可能である。ＶＬＩＷの場合の発行数は１であっても良く、１である場合は逐次処理が行われる。
【００８７】
図８に本発明による第５の実施形態の細粒度並列プロセッサ５００を示す。この細粒度並列プロセッサは、図７に示した第４実施形態の細粒度並列プロセッサと同様な構成であるがモード判断手段９５を有する点が異なる。
この実施形態では、特定命令によって以後の命令が所定のモードで実施されたり、特定のアドレスに配置された命令が所定のモードで実施されたりするものではなく、命令自体がいずれのモードで実施されるかが指定されているものである。例えば、算術論理演算命令と何もしない（ＮＯＰ）命令はすべてＶＬＩＷで実行されるという指定が考えられる。コンパイル後の主記憶には、図９（ｂ）に示すように、ＶＬＩＷで実行される命令列６２０及びＳＳで実行される命令列６２１がランダムに配置される。
【００８８】
モード判断手段９５は、命令がＳＳモードで実行されるか、ＶＬＩＷモードで実行されるかを判断する。モード判断手段９５の判断結果に依存して、命令が命令ウインドウ４０に配置されるとき、モード設定器９０は、該命令がＶＬＩＷモードまたはＳＳモードであることを示すために、対応するエントリ４６をそれぞれ１または０にセットする。モード設定器９０ではアドレスを考慮する必要がないので、第３及び第４実施形態で有するような比較器は不要である。また、本実施形態でも第４実施形態と同様モード検出器は不要である。
この図では、該モード判断手段９５は、デコーダ３０と命令ウインドウ４０の間に配置したがモード設定器９０またはデコーダ３０内に配置することも可能である。
【００８９】
依存性解析器５０及び命令発行器６０は、先頭命令に対応したエントリの値が１か０かにより、ＶＬＩＷモードまたはＳＳモードで動作する。すなわち、ＶＬＩＷモードの場合は、依存性解析器５０は動作せず、命令発行器６０は所定数の命令を複数の機能ユニット７０に同時発行し、ＳＳモードの場合は、所定数の命令を依存性解析器５０にて依存性解析を行い、その結果に依存して命令発行器６０が複数の機能ユニット７０に命令を同時発行する。
【００９０】
同様に、依存性解析器５０で依存性解析を行う際、ＶＬＩＷとして実行すべきである命令は依存性解析の対象としない。これは、各命令に対するエントリが「１」になっていることを、依存性解析器５０が判断することにより実現可能である。
【００９１】
本実施形態でも、依存性解析器５０はＳＳモードのときのみ動作し、ＶＬＩＷモードのときは停止する。したがって、並列動作させるためのデータ依存関係の解析を行う必要が無い場合は依存性関係解析器５０を停止させることによって、消費電力を節減できる。全体としてエネルギー消費の削減を行うという効果を有する。
また、本実施形態でも、命令ウインドウ４０中の命令数を１２，機能ユニットの数を４としたが、この数値はかならずしも、このように限定されるものではなく、プロセッサにおいて必要に応じて設定可能である。エントリを複数ビットとして逐次動作をさせる命令を含める変形も容易に実施できる。
【００９２】
また、前記第１ないし第５実施形態の細粒度プロセッサに外部割り込み検出器を備え、特定の割り込み形態に対して、下記のようなそれぞれの処理を行わせるようにすることも可能である。割り込みが発生する例としては、電源切断、プリンタ用紙切れなどのＩＯ関連のトラブルが含まれる。
（１）特定の外部割り込みによって並列実行可能性の解析を行う能力を変化させる。
（２）特定の外部割り込みによって、並列実行可能性解析の対象とする命令の数を変化させるか並列実行可能性解析を完全に停止するかし、停止したときは、一つ以上、所定の数の命令を並べられたまま並列に実行する。
（３）特定の外部割り込みによって、該デコーダから送られる命令のアドレスの全部または一部を受け、該アドレスの全部または一部の内容によって並列実行可能性の解析を行う能力を変化させる。
（４）外部割り込みの内容によって並列実行可能性の解析を行う能力を変化させる。
（５）外部割り込みの内容によって所定の動作モードを設定し、依存性解析器及び命令発行器の動作状況が該動作モードによって変化する。
（６）該動作モードは第１のモード及び第２のモードからなり、第１モードのときには依存性解析器は停止しかつ命令発行器が命令ウインドウの、一つ以上、所定数の命令を前記機能ユニットに並べられたまま同時発行し、第２のモードのときは、依存性解析器が所定の数または割り込みの内容やどのアドレスの命令であるかによって定められた命令の数だけ依存性解析を行い、命令発行器が前記機能ユニットに、一つ以上、可能な数だけ同時発行する。
【００９３】
一般的に、プロセッサは外部割り込みによって、所定のアドレスに分岐することがある。さらに、割り込みの内容によって、分岐アドレスが相違する場合もある。本願発明でも、同様な構成とすることができるが、さらに並列実行可能性の解析を行う能力が変化し、また分岐アドレスによっても解析能力が異なるとすることができる。
【００９４】
図１０には、第１の実施形態に外部割り込み検出器３５を備えた細粒度プロセッサ１５０を示す。この細粒度プロセッサ１５０は電源切断（停電のほかシャットダウンの手続を経ずに電源を切る場合等も含めることが可能である）という外部割り込みによりつぎのように動作する。
（１）電源切断によりプロセッサは電灯線動作から電池動作に切り替わる。
（２）外部割り込み検出器３５は、該外部割り込みを検知し、モード検出器８０の動作モードフラグ８１を強制的に、ＶＬＩＷモードを示す“１”に設定する。
（３）動作モードフラグ８１が“１”に設定されたため、プロセッサはＶＬＩＷモードで動作する。すなわち、依存性解析器５０の動作が止まる。これによって、消費電力の節減を図る。このとき、さらにｍ＝１とすることにより、命令を一つずつ発行させることもできる。これは、逐次処理を行う場合に相当する。これにより一層消費電力が節減できる。
【００９５】
なお、第２または第３の実施形態の細粒度プロセッサに外部割り込み検出器を設けると、さらに、電池動作の際、電池のエネルギー残量により、依存性解析器によって並列実行可能性の解析を行う能力を変化させることも可能である。残量がまだ十分あるときは、依存性解析器の動作の能力を低下させる（すなわちＳＳモードの際、前述のｍの値を小さくする）に留めるが、残量が逼迫したときは依存性解析器の動作を完全に停止させる（すなわち逐次処理のＶＬＩＷモードに固定する）等である。
【００９６】
以上本発明の実施形態を説明した。特許請求の範囲に記載された発明の技術的思想から逸脱することなく、これらに変更を施すことができることは明らかである。
【産業上の利用可能性】
【００９７】
本発明は、並列処理プロセッサに適用することが可能である。
【図面の簡単な説明】
【００９８】
【図１】本発明による細粒度並列プロセッサの第１の実施形態を示す。
【図２】第１の実施形態の細粒度並列プロセッサに使用されるコンパイル後に主記憶に配置された命令列の例を示す。
【図３】本発明による細粒度並列プロセッサの第２の実施形態を示す。
【図４】第２の実施形態の細粒度並列プロセッサに使用されるコンパイル後に主記憶に配置された命令列の例を示す。
【図５】本発明による細粒度並列プロセッサの第３の実施形態を示す。
【図６】第３の実施形態による細粒度並列プロセッサの変形形態を示す。
【図７】本発明による細粒度並列プロセッサの第４の実施形態を示す。
【図８】本発明による細粒度並列プロセッサの第５の実施形態を示す。
【図９】第４及び第５の実施形態の細粒度並列プロセッサに使用されるコンパイル後に主記憶に配置された命令列の例を示す。
【図１０】第１の実施形態の変形形態として、外部割り込み検出器を備えた細粒度並列プロセッサの例を示す。
【符号の説明】
【００９９】
１０：インストラクションメモリー
２０：インストラクションレジスター
３０：デコーダ
３５：外部割り込み検出器
４０：命令ウインドウ
４４：命令領域
４５：先頭命令
４６：（第１）エントリ
４７：第２エントリ
５０：依存性解析器
６０：命令発行器
７０：複数の機能ユニット
７０−１：機能ユニット＃１
７０―２：機能ユニット＃２
７０―３：機能ユニット＃３
７０―４：機能ユニット＃４
８０：モード検出器
８１：動作モードフラグ
８２：ＩＤ領域
８３：発行数（ｍ）領域
８４：命令数（Ｌ）領域
８６：モード命令数発行数記録器
８７：モード領域発行数記録器
８８：開始アドレス領域
８９：終了アドレス領域
９０：モード設定器
９１：カウンタ
９２：比較器
９５：モード判断手段
１００：第１実施形態の細粒度並列プロセッサ
１５０：第１実施形態の細粒度並列プロセッサの変型形態
２００：第２実施形態の細粒度並列プロセッサ
３００：第３実施形態の細粒度並列プロセッサ
３５０：第３実施形態の細粒度並列プロセッサの変型形態
４００：第４実施形態の細粒度並列プロセッサ
５００：第５実施形態の細粒度並列プロセッサ
６００：主記憶
６０１：主記憶の０番地
６１０：４命令ずつ同時発行可能な命令列
６１１：動的に依存解析を行う必要のある命令列
６２０：ＶＬＩＷで実行される命令列
６２１：スーパースカラで実行される命令列
６３０：サブルーチン呼び出し命令
６３１：サブルーチンから戻る命令
６４０：動作モードをＶＬＩＷモードにする命令
６４１：動作モードをスーパースカラモードにする命令
６５０：Ｌの命令長にわたって動作モードをＶＬＩＷモードにする命令
６５１：Ｌの命令長にわたって動作モードをスーパースカラモードにする命令
６６０：動作モードがＶＬＩＷである領域の命令（４命令ずつ同時発行できる命令列）
６６１：動作モードがスーパースカラである領域の命令（動的に依存解析を行う必要のある命令列）
６６２：動作モードがＶＬＩＷである領域の命令かつモード領域発行数記録器の０１で指定されるｍずつ発行する命令
６６３：モード領域発行数記録器の１０で指定されるｍずつ依存性解析する命令
【図１】
2009289142.tif 000003
【図２】
2009289142.tif 000004
【図３】
2009289142.tif 000005
【図４】
2009289142.tif 000006
【図５】
2009289142.tif 000007
【図６】
2009289142.tif 000008
【図７】
2009289142.tif 000009
【図８】
2009289142.tif 000010
【図９】
2009289142.tif 000011
【図１０】
2009289142.tif 000012