(57)【特許請求の範囲】
【請求項１】
命令セットに含まれプログラムに従って順次発行される命令をパイプライン方式で実行するプロセッサであって、
前記プロセッサは、
複数のレジスタを含むレジスタファイルと、
前記命令のデコード結果を保持する複数のパイプラインレジスタと、を備え、
前記命令ごとにフォワーディングを禁止するか許可するかが指定可能とされるのに代えて又は加えてフォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを表すフォワーディング元を指定可能とされ、
フォワーディングが禁止された命令を実行するときには前記レジスタファイルを参照し、
前記フォワーディング元を指定された命令を実行するときには、前記複数のパイプラインレジスタの指定されたパイプラインステージに保持されるデスティネーションオペランドコードと、前記フォワーディング元を指定された命令のソースオペランドコードとを比較し、一致するパイプラインレジスタを参照する、
プロセッサ。
【請求項２】
請求項１において、前記プロセッサによって実行可能な命令セットが、フォワーディングを禁止するか許可するかを指定するフィールドを命令コードに有する命令に代えて又は加えて、フォワーディングを禁止するか前記フォワーディング元を指定するフィールドを命令コードに有する命令を含む、プロセッサ。
【請求項３】
請求項２において、前記命令セットに含まれる複数の命令の命令コードから成る命令語が並列に発行され、前記複数の命令が並列に実行され、前記命令語はフォワーディングを禁止するか許可するかを指定するフィールドを個々の命令コードに有する前記命令に代えて又は加えて、フォワーディングを禁止するか前記フォワーディング元を指定するフィールドを個々の命令コードに有する前記命令を１個以上含む、プロセッサ。
【請求項４】
命令セットに含まれプログラムに従って順次発行される命令をパイプライン方式で実行するプロセッサであって、
前記命令をフェッチするフェッチ回路と、複数のレジスタを含むレジスタファイルと、フォワーディングセレクタと、処理実行回路と、前記フェッチされた命令に基づいて前記処理実行回路を制御するプロセッサ制御回路とを備え、
前記命令セットは、レジスタ格納命令とレジスタ参照命令とを含み、
前記レジスタ格納命令は、当該命令によって指定される処理を前記処理実行回路に実行させた結果を、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のデスティネーションオペランドで指定されるレジスタに格納させる命令であり、
前記レジスタ参照命令は、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のソースオペランドで指定されるレジスタに格納されるデータを参照して、当該命令によって指定される処理を前記処理実行回路に実行させる命令であり、
一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定可能なフィールドを命令コードに含み、
前記プロセッサ制御回路は、前記フェッチされた命令をデコードする命令デコーダと、前記命令デコーダによるデコード結果を保持する複数のパイプラインレジスタと、フォワーディング制御回路とを備え、
前記命令デコーダは、前記フェッチされた命令をデコードして、前記命令の実行コードと、前記命令が前記レジスタ格納命令であるときにデスティネーションレジスタを指定するデスティネーションオペランドコードと、前記命令が前記レジスタ参照命令であるときにソースレジスタを指定するソースオペランドコードと、前記命令がフォワーディングを禁止するか許可するかが指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果とを出力し、
前記複数のパイプラインレジスタは、前記デスティネーションオペランドコードをパイプラインステージごとに保持し、
前記フォワーディング制御回路は、フォワーディングを禁止するか許可するかを指定可能なフィールドのデコード結果に基づいて、
フォワーディングが禁止されるときは、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させ、
フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインステージから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる、プロセッサであって、
前記一部又は全てのレジスタ参照命令に代えて又は加えて、一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを表すフォワーディング元を指定可能なフィールドを命令コードに含み、
前記命令デコーダは、前記フェッチされた命令がフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果をさらに出力し、
前記フォワーディング制御回路は、当該デコード結果に基づいて、
フォワーディングが禁止されるときは、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させ、
前記フォワーディング元が指定されるときは、前記複数のパイプラインレジスタの指定されたパイプラインステージに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる、
プロセッサ。
【請求項５】
請求項４において、前記プロセッサは、前記処理実行回路をＮ個（Ｎは任意の自然数）備え、前記命令セットに含まれる前記Ｎ個の命令を１語に含む命令語を対応する処理実行回路により並列に実行可能であり、
前記Ｎ個のうちのＭ個（ＭはＮ以下の任意の自然数）の処理実行回路には、それぞれの入力数に対応する数のフォワーディングセレクタがそれぞれ接続され、
前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記Ｎ個の命令を並列にデコードして、前記Ｎ個の処理実行回路のそれぞれに対応するデコード結果を出力し、前記Ｍ個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果が含まれ、
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路を備え、
前記Ｍ個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する、
プロセッサ。
【請求項６】
請求項５において、
前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持し、
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路を備え、
前記Ｍ個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される１個又は複数のフォワーディングセレクタに対して、
フォワーディングが禁止されるときは、前記１個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させ、
フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記１個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較し、一致するパイプラインステージから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる、
プロセッサ。
【請求項７】
請求項４において、前記プロセッサは、前記処理実行回路をＮ個（Ｎは任意の自然数）備え、前記命令セットに含まれる前記Ｎ個の命令を１語に含む命令語を対応する処理実行回路により並列に実行可能であり、
前記Ｎ個のうちのＭ個（ＭはＮ以下の任意の自然数）の処理実行回路には、それぞれの入力数に対応する数のフォワーディングセレクタがそれぞれ接続され、
前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記Ｎ個の命令を並列にデコードして、前記Ｎ個の処理実行回路のそれぞれに対応するデコード結果を出力し、前記Ｍ個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果またはフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドのデコード結果のうちの一方または両方が含まれ、
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路を備え、
前記Ｍ個のフォワーディング制御回路のそれぞれは、前記デコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する、
プロセッサ。
【請求項８】
請求項７において、
前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持し、
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路を備え、
前記Ｍ個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するか前記フォワーディング元が指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される１個又は複数のフォワーディングセレクタに対して、
フォワーディングが禁止されるときは、前記１個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させ、
フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記１個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させ、
前記フォワーディング元が指定されるときは、前記Ｎ個の処理実行回路に対応してパイプラインステージごとに保持されるデスティネーションオペランドコードのうち、前記フォワーディング元が指定されるパイプラインステージのパイプラインレジスタに保持されるデスティネーションオペランドコードと、前記フォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる、
プロセッサ。
【請求項９】
請求項４において、単一の半導体基板上に形成される、プロセッサ。
【請求項１０】
命令セットに含まれる複数の命令によって構成され、プロセッサによって実行されるプログラムのプログラムコードを変換するプログラムコード変換装置であって、
前記プロセッサは、複数のレジスタで構成されるレジスタファイルと処理実行回路とを含み、前記レジスタファイルを参照するレジスタリードステップと前記レジスタファイルに値を書き込むライトバックステップを含むパイプラインで構成され、
前記命令セットは、レジスタ参照命令とレジスタ格納命令とレジスタ移動命令とを含み、
前記レジスタ参照命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を、前記レジスタリードステップで参照して、当該命令によって規定される処理を前記プロセッサに実行させるための命令であり、
前記レジスタ格納命令は、当該命令によって規定される処理を前記プロセッサに実行させた結果を、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のデスティネーションオペランドで指定されるレジスタに、前記レジスタリードステップから前記パイプラインの段数で規定される遅延量だけ遅延された前記ライトバックステップで格納するための命令であり、
前記レジスタ移動命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を前記レジスタリードステップで読み出して、当該命令のデスティネーションオペランドで指定されるレジスタに前記ライトバックステップで書き込むための命令であり、
全てまたは一部の前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定するフォワーディング無効フラグをオペランドにさらに含み、前記フォワーディング無効フラグによりフォワーディングが禁止されたときには前記プロセッサにより前記レジスタリードステップに前記レジスタファイルを参照させ、前記フォワーディング無効フラグによりフォワーディングが許可されたときには、前記プロセッサが前記レジスタ格納命令又は前記レジスタ移動命令を実行することにより前記デスティネーションオペランドで指定されるレジスタにデータを書き込むパイプラインの途中のステージから、前記ソースオペランドで指定されるレジスタに格納される値を参照させ、
前記プログラムコード変換装置は、
前記命令セットに含まれる複数の命令によって構成される前記プログラムコードからレジスタ移動命令を探索し、
前記探索で発見したレジスタ移動命令のソースオペランドで指定されるレジスタをデスティネーションオペランドで指定するレジスタ格納命令を抽出し、
前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令について、前記レジスタ格納命令から前記遅延量以内の実行ステップで実行される場合には、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換える、
プログラムコード変換装置。
【請求項１１】
請求項１０において、前記プログラムコード変換装置は、
前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令について、前記レジスタ格納命令から前記遅延量より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断し、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを許可する指定を行ったレジスタ参照命令に置き換える、
プログラムコード変換装置。
【請求項１２】
請求項１１において、前記プログラムコード変換装置は、
前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続の全てのレジスタ参照命令について、前記レジスタ格納命令から前記遅延量より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断し、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換え、
前記全てのレジスタ参照命令が、前記遅延量以内に実行される実行ステップに移動されたときには、前記探索で発見した前記レジスタ移動命令を前記プログラムから削除する、
プログラムコード変換装置。
【請求項１３】
請求項１０において、前記プロセッサは、前記処理実行回路をＮ個（Ｎは任意の自然数）備え、前記命令セットに含まれる前記Ｎ個の命令を１語に含む命令語を対応する処理実行回路により並列に実行可能である、
プログラムコード変換装置。
【請求項１４】
請求項１０において、前記プログラムコード変換装置は、高級言語で記述されたプログラムから、前記命令セットに含まれる複数の命令によって構成される前記プログラムコードを生成する、
プログラムコード変換装置。
【請求項１５】
コンピュータによって実行されることにより、請求項１０に記載されるプログラムコード変換装置として機能する、ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、前記プロセッサに好適なプログラムを生成するためのプログラムコード変換装置及びコンピュータによって実行されることによって前記プログラムコード変換装置として機能するソフトウェアに関し、特にパイプライン型VLIW（Very Long Instruction Code）プロセッサに好適に利用できるものである。
【背景技術】
【０００２】
演算性能を高めるために複数命令を並列発行する、VLIW構成の命令語を利用するプロセッサが知られている。すなわち、プロセッサは単一のVLIW命令をフェッチ、デコード、実行し、データパスはそのVLIW命令に含まれる複数個のオペレーションを処理する。
【０００３】
VLIWプロセッサの広い命令発行幅を有効活用する高速化手法として、ソフトウェアパイプライン化手法が知られている。一般的に、ソフトウェアの実行時間の大部分は、ごく一部のループが占めていると言われているが、ソフトウェアパイプライン化は、このループを高速化する手法である。すなわち、ループの複数の繰り返しの間にまたがってオペレーションを移動させる最適化を行うことで、繰り返し１回あたりの実行サイクル数を削減するものである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
VLIWプロセッサのソフトウェアパイプライン化時の性能ボトルネックとして、変数の複数インスタンスを保持しなければならないことが挙げられる。ソフトウェアパイプライン化は、ループ内の並列命令発行数を高め性能を向上させる。しかしながら、ソフトウェアパイプライン化を進める、即ち、イニシエーションインターバル（Initiation interval）を小さくすると、汎用レジスタの使用数が増えるため、レジスタ数がボトルネックとなり性能向上できなくなることが知られている。レジスタ数増の一因は、ループ内の複数の繰り返しにまたがった変数の利用である。すなわち、複数のインスタンスを保持しなければならないことにある。しかしながら、実装するレジスタ数を増やすことはハードウェア増に直結するので好ましくない。
【０００５】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００６】
一実施の形態によれば、下記の通りである。
【０００７】
すなわち、命令ごとにフォワーディングを禁止するか許可するかが指定可能なプロセッサであって、フォワーディングが禁止された命令を実行するときにはレジスタファイルを参照し、フォワーディングが許可された命令を実行するときには、前記レジスタファイルにデータを書き込むパイプラインの途中のステージを参照する。
【発明の効果】
【０００８】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【０００９】
すなわち、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、フォワーディングのオン／オフが指定可能なプロセッサの基本的な構成例を示すブロック図である。
【図２】図２は、図１のプロセッサで実行される命令コードの構成例を示す説明図である。
【図３】図３は、図１のプロセッサに搭載されるフォワーディングセレクタの構成例を示すブロック図である。
【図４】図４は、図１のプロセッサに搭載されるフォワーディング制御回路の機能の一例を示すフローチャートである。
【図５】図５は、フォワーディングのオン／オフが指定可能なプロセッサのＶＬＩＷによる構成例を示すブロック図である。
【図６】図６は、図５のプロセッサで実行される命令語の構成例を示す説明図である。
【図７】図７は、図５のプロセッサに搭載されるプロセッサ制御回路の構成例を示すブロック図である。
【図８】図８は、図５のプロセッサに搭載されるフォワーディングセレクタの構成例を示すブロック図である。
【図９】図９は、図５のプロセッサに搭載されるフォワーディング制御回路の機能の一例を示すフローチャートである。
【図１０】図１０は、図５のプロセッサで実行される、高級言語で記述されたプログラムの例を示す説明図である。
【図１１】図１１は、図５のプロセッサで実行される、アセンブリ言語で記述されたプログラムの例を示す説明図である。
【図１２】図１２は、図１１のプログラムで使用されるアセンブリ言語で記述された命令の動作を示す説明図である。
【図１３】図１３は、図５のプロセッサの動作例を模式的に示すタイミングチャートである。
【図１４】図１４は、図５のプロセッサで実行される、アセンブリ言語で記述されたプログラムであって、フォワーディングのオン／オフ指定を行わない例を示す説明図である。
【図１５】図１５は、図５のプロセッサの動作例を示す説明図である。
【図１６】図１６は、実施形態２のプロセッサで実行される命令コードの構成例を示す説明図である。
【図１７】図１７は、図１６の命令コードにおけるフォワーディング元指定情報フィールドについての説明図である。
【図１８】図１８は、実施形態２のプロセッサに搭載されるフォワーディング制御回路の機能の一例を示すフローチャートである。
【図１９】図１９は、実施形態３に係るプログラム開発装置の機能の一例を示すフローチャートである。
【図２０】図２０は、プログラムコード変換（最適化）装置による変換前のプログラムによる動作を示す、模式的なタイミングチャートである。
【図２１】図２１は、のプログラムコード変換（最適化）装置による変換後のプログラムによる動作を示す、模式的なタイミングチャートである。
【発明を実施するための形態】
【００１１】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１２】
〔１〕＜フォワーディングのオン／オフが指定可能なプロセッサ＞
本願において開示される代表的な実施の形態は、命令ごとにフォワーディングを禁止するか許可するかが指定可能とされるプロセッサである。フォワーディングが禁止された命令を実行するときにはレジスタファイル（ＲＥＧＦ）を参照し、フォワーディングが許可された命令を実行するときには、前記レジスタファイルにデータを書き込むパイプラインの途中のステージを参照する（フォワーディングする）。
【００１３】
これにより、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。実行結果によってレジスタを書き換える命令の発行後、その命令のライトバックよりも前に、フォワーディングオンの（フォワーディングが許可された）命令と、フォワーディングオフの（フォワーディングが禁止されレジスタファイルＲＥＧＦを参照する）命令を、自由に混在させることができるためである。
【００１４】
〔２〕＜フォワーディングのオン／オフを指定するフィールドを含む命令＞
項１において、前記プロセッサによって実行可能な命令セットが、フォワーディングを禁止するか許可するかを指定するフィールド（ｆ）を命令コードに有する命令を含む。
【００１５】
これにより、命令ごとにフォワーディングを禁止するか許可するかを、容易に指定することができる。
【００１６】
〔３〕＜ＶＬＩＷ＞
項２において、前記プロセッサは、前記命令セットに含まれる複数の命令の命令コードから成る命令語（ＩＣＯＤＥ）が並列に発行され、前記複数の命令が並列に実行され、前記命令語はフォワーディングを禁止するか許可するかを指定するフィールドを個々の命令コードに有する前記命令を１個以上含む。
【００１７】
これにより、１命令語が複数の命令によって構成されるＶＬＩＷプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。ＶＬＩＷの１命令語に含まれる複数の命令ごとに独立に、フォワーディングを禁止するか許可するかを指定することができるためである。
【００１８】
〔４〕＜フォワーディング元を指定するフィールドを含む命令＞
項１において、前記プロセッサによって実行可能な命令セットが、フォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを指定するフィールド（ｆｓｒｃ）を命令コードに有する命令を含む。
【００１９】
これにより、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。フォワーディング元が指定されない場合は、より前の、即ち、ライトバックステージからより遠いパイプラインステージからのフォワーディングが優先される。
【００２０】
〔５〕＜ＶＬＩＷ＞
項４において、前記プロセッサは、前記命令セットに含まれる複数の命令の命令コードから成る命令語（ＩＣＯＤＥ）が並列に発行され、前記複数の命令が並列に実行され、前記命令語はフォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを指定するフィールドを個々の命令コードに有する前記命令を１個以上含む。
【００２１】
これにより、１命令語が複数の命令によって構成されるＶＬＩＷプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化によるさらなる性能向上を図ることができる。ＶＬＩＷの１命令語に含まれる複数の命令ごとに独立に、フォワーディングを禁止するか許可するか、さらに、許可する場合にどのパイプラインステージをフォワーディング元とするかを自由に指定することができるためである。
【００２２】
〔６〕＜フォワーディングのオン／オフが指定可能なプロセッサ＞
本願において開示される代表的な実施の形態は、命令セットに含まれプログラムに従って順次発行される命令をパイプライン方式で実行するプロセッサであって、以下のように構成される。
【００２３】
前記命令をフェッチするフェッチ回路（ＩＲ）と、複数のレジスタを含むレジスタファイル（ＲＥＧＦ）と、フォワーディングセレクタ（ＦＳＥＬ）と、処理実行回路（ＥＸＥＣ）と、前記フェッチされた命令に基づいて前記処理実行回路を制御するプロセッサ制御回路（ＣＴＲＬ）とを備える。
【００２４】
前記命令セットは、レジスタ格納命令とレジスタ参照命令とを含む。前記レジスタ格納命令は、当該命令によって指定される処理を前記処理実行回路に実行させた結果を、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のデスティネーションオペランド（ｒｄ）で指定されるレジスタに格納させる命令である。前記レジスタ参照命令は、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のソースオペランド（ｒｓ、ｒｔ）で指定されるレジスタに格納されるデータを参照して、当該命令によって指定される処理を前記処理実行回路に実行させる命令である。一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定可能なフィールド（ｆ）を命令コードに含む。
【００２５】
前記プロセッサ制御回路は、前記フェッチされた命令をデコードする命令デコーダ（ＩＤＥ）と、前記命令デコーダによるデコード結果を保持する複数のパイプラインレジスタ（ＯＰ−ＤＥ，ＯＰ−ＲＲ，ＦＷＤ−ＤＥ，ＳＲＣ−ＤＥ，ＤＳＴ−ＤＥ，ＤＳＴ−ＲＲ，ＤＳＴ−ＥＸ）と、フォワーディング制御回路（ＦＷＤＣＮＴ）とを備える。前記命令デコーダは、前記フェッチされた命令をデコードして、前記命令の実行コードを出力する。前記命令デコーダは、前記命令が前記レジスタ格納命令であるときにデスティネーションレジスタを指定するデスティネーションオペランドコードを出力する。前記命令デコーダは、前記命令が前記レジスタ参照命令であるときにソースレジスタを指定するソースオペランドコードを出力する。前記命令デコーダは、前記命令がフォワーディングを禁止するか許可するかが指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果を出力する。前記複数のパイプラインレジスタは、前記デスティネーションオペランドコードをパイプラインステージごとに保持する（ＤＳＴ−ＤＥ，ＤＳＴ−ＲＲ，ＤＳＴ−ＥＸ）。
【００２６】
前記フォワーディング制御回路は、フォワーディングを禁止するか許可するかを指定可能なフィールドのデコード結果に基づいて、前記フォワーディングセレクタを制御する。前記フォワーディング制御回路は、フォワーディングが禁止されるときは、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させる。前記フォワーディング制御回路は、フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインステージから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる。
【００２７】
これにより、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。ここで、処理実行回路（ＥＸＥＣ）は、算術演算回路（ＡＬＵ）、乗算回路（ＭＵＬ）、バレルシフタ（ＳＦＴ）などの演算回路、または、ロード／ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等であり得る。
【００２８】
〔７〕＜ＶＬＩＷ＞
項６において、前記プロセッサは、前記処理実行回路をＮ個（Ｎは任意の自然数）（ＥＸＥＣ１〜３）備え、前記命令セットに含まれる前記Ｎ個の命令を１語に含む命令語を対応する処理実行回路により並列に実行可能とされる。
【００２９】
前記Ｎ個のうちのＭ個（ＭはＮ以下の任意の自然数）の処理実行回路（ＥＸＥＣ１〜３）には、それぞれの入力数に対応する数のフォワーディングセレクタ（ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３）がそれぞれ接続される。
【００３０】
前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記Ｎ個の命令を並列にデコードして、前記Ｎ個の処理実行回路のそれぞれに対応するデコード結果を出力する。前記Ｍ個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果が含まれる。
【００３１】
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路（ＦＷＤＣＮＴＳ１〜Ｓ３，ＦＷＤＣＮＴＴ１〜Ｔ３）を備え、前記Ｍ個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する。
【００３２】
これにより、１命令語が複数の命令によって構成されるＶＬＩＷプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。ＶＬＩＷの１命令語に含まれる複数の命令ごとに独立に、フォワーディングを禁止するか許可するかを指定することができるためである。上記Ｍ個の処理実行回路は、フォワーディングのオン／オフ制御が可能なスロットであり、他のＮ−Ｍ個の処理実行回路はフォワーディングのオン／オフ制御を採用していないスロットである。全てのスロットにフォワーディングのオン／オフ制御を採用することにより自由度は向上する反面、回路規模は大きくなる一方、一部（Ｍ個）に制限することにより、フォワーディングのオン／オフ制御を行う命令は、当該スロット以外には配置することができないという制約が発生するが、回路規模の増大は抑えられる。
【００３３】
ここで、処理実行回路（ＥＸＥＣ１〜３）は、項６と同様に、算術演算回路（ＡＬＵ）、乗算回路（ＭＵＬ）、バレルシフタ（ＳＦＴ）などの演算回路、または、ロード／ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等であり得る。処理実行回路（ＥＸＥＣ１〜３）は、すべてのスロットに任意にその機能が指定される多機能の処理実行回路をすべてのスロットに搭載してもよいし、上記に例示されるような単純な機能又は単一の機能を持つ処理実行回路を各スロットに適宜搭載しても良い。前者のように、すべてのスロットに多機能の処理実行回路を搭載すると、回路規模が大きくなるがプログラミングの自由度は最大となる一方、後者のように構成すると、プログラミングの自由度はある程度制限されるが回路規模は小さく抑えることができる。両者の中間的な選択肢として、多機能の処理実行回路と単純な機能又は単機能の処理実行回路とを混在させてもよい。
【００３４】
〔８〕＜他のスロットからのフォワーディング＞
項７において、前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持する（ＤＳＴ−ＤＥ１〜３，ＤＳＴ−ＲＲ１〜３，ＤＳＴ−ＥＸ１〜３）。
【００３５】
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路（ＦＷＤＣＮＴＳ１〜Ｓ３，ＦＷＤＣＮＴＴ１〜Ｔ３）を備える。前記Ｍ個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される１個又は複数のフォワーディングセレクタ（ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３）に対して、以下の制御を行う。フォワーディングが禁止されるとき、前記フォワーディング制御回路は、前記１個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させる。フォワーディングが許可されるとき、前記フォワーディング制御回路は、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記１個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較する。前記フォワーディング制御回路は、その結果、一致するパイプラインステージから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる。
【００３６】
これにより、フォワーディングのオン／オフ制御を採用していない上記Ｎ−Ｍ個のスロットからもフォワーディングを可能とすることができる。
【００３７】
〔９〕＜フォワーディング元を指定するフィールドを含む命令＞
項６において、前記一部又は全てのレジスタ参照命令に代えて又は加えて、一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを表すフォワーディング元を指定可能なフィールド（ｆｓｒｃ）を命令コードに含む。
【００３８】
前記命令デコーダは、前記フェッチされた命令がフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果をさらに出力する。
【００３９】
前記フォワーディング制御回路は、当該デコード結果に基づいて、前記フォワーディングセレクタを制御する。フォワーディングが禁止されるとき、前記フォワーディング制御回路は、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させる。前記フォワーディング元が指定されるとき、前記フォワーディング制御回路は、前記複数のパイプラインレジスタの指定されたパイプラインステージに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる。
【００４０】
これにより、項４と同様に、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。
【００４１】
〔１０〕＜ＶＬＩＷ＞
項９において、前記プロセッサは、前記処理実行回路をＮ個（Ｎは任意の自然数）（ＥＸＥＣ１〜３）備え、前記命令セットに含まれる前記Ｎ個の命令を１語に含む命令語を対応する処理実行回路により並列に実行可能とされる。
【００４２】
前記Ｎ個のうちのＭ個（ＭはＮ以下の任意の自然数）の処理実行回路（ＥＸＥＣ１〜３）には、それぞれの入力数に対応する数のフォワーディングセレクタ（ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３）がそれぞれ接続される。
【００４３】
前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記Ｎ個の命令を並列にデコードして、前記Ｎ個の処理実行回路のそれぞれに対応するデコード結果を出力する。前記Ｍ個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果またはフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドのデコード結果のうちの一方または両方が含まれる。
【００４４】
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路（ＦＷＤＣＮＴＳ１〜Ｓ３，ＦＷＤＣＮＴＴ１〜Ｔ３）を備え、前記Ｍ個のフォワーディング制御回路のそれぞれは、前記デコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する。
【００４５】
これにより、項７と同様に、１命令語が複数の命令によって構成されるＶＬＩＷプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。さらに、項４、項９と同様に、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。
【００４６】
〔１１〕＜他のスロットからのフォワーディング＞
項１０において、前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持する（ＤＳＴ−ＤＥ１〜３，ＤＳＴ−ＲＲ１〜３，ＤＳＴ−ＥＸ１〜３）。
【００４７】
前記プロセッサ制御回路は、前記Ｍ個の処理実行回路に対応するＭ個のフォワーディング制御回路（ＦＷＤＣＮＴＳ１〜Ｓ３，ＦＷＤＣＮＴＴ１〜Ｔ３）を備える。前記Ｍ個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するか前記フォワーディング元が指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される１個又は複数のフォワーディングセレクタ（ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３）に対して、以下の制御を行う。
【００４８】
フォワーディングが禁止されるとき、前記フォワーディング制御回路は、前記１個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させる。
【００４９】
フォワーディングが許可されるとき、前記フォワーディング制御回路は、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記Ｎ個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記１個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較する。前記フォワーディング制御回路は、その結果、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる。
【００５０】
前記フォワーディング元が指定されるときは、前記Ｎ個の処理実行回路に対応してパイプラインステージごとに保持されるデスティネーションオペランドコードのうち、前記フォワーディング元が指定されるパイプラインステージのパイプラインレジスタに保持されるデスティネーションオペランドコードと、前記フォワーディングセレクタに対応する前記ソースオペランドコードとを比較する。前記フォワーディング制御回路は、その結果、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる。
【００５１】
これにより、フォワーディングのオン／オフ制御を採用していない上記Ｎ−Ｍ個のスロットからもフォワーディングを可能とすることができる。
【００５２】
〔１２〕＜ＬＳＩ（Large Scale Integrated circuit）＞
項６から項１１のうちのいずれか１項において、前記プロセッサは単一の半導体基板上に形成される。
【００５３】
これにより、プロセッサが単一の半導体チップに集積され、実装面積、消費電力、コストなどが低減される。
【００５４】
〔１３〕＜プログラムコード変換（最適化）装置＞
本願において開示される代表的な実施の形態は、命令セットに含まれる複数の命令によって構成され、プロセッサによって実行されるプログラムのプログラムコードを変換するプログラムコード変換装置であって、以下のように構成される。
【００５５】
前記プロセッサは、複数のレジスタで構成されるレジスタファイル（ＲＥＧＦ）と処理実行回路（ＥＸＥＣ）とを含み、前記レジスタファイルを参照するレジスタリードステップ（ＲＲ）と前記レジスタファイルに値を書き込むライトバックステップ（ＷＢ）を含むパイプラインで構成される。
【００５６】
前記命令セットは、レジスタ参照命令とレジスタ格納命令とレジスタ移動命令とを含む。
【００５７】
前記レジスタ参照命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を、前記レジスタリードステップで参照して、当該命令によって規定される処理を前記プロセッサに実行させるための命令である。
【００５８】
前記レジスタ格納命令は、当該命令によって規定される処理を前記プロセッサに実行させた結果を、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のデスティネーションオペランドで指定されるレジスタに、前記レジスタリードステップから前記パイプラインの段数で規定される遅延量（ＤＡ）だけ遅延された前記ライトバックステップで格納するための命令である。
【００５９】
前記レジスタ移動命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を前記レジスタリードステップで読み出して、当該命令のデスティネーションオペランドで指定されるレジスタに前記ライトバックステップで書き込むための命令である。
【００６０】
全てまたは一部の前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定するフォワーディング無効フラグ（ｆ）をオペランドにさらに含む。前記フォワーディング無効フラグによりフォワーディングが禁止されたときには前記プロセッサにより前記レジスタリードステップに前記レジスタファイルを参照させる。前記フォワーディング無効フラグによりフォワーディングが許可されたときには、前記プロセッサが前記レジスタ格納命令又は前記レジスタ移動命令を実行することにより前記デスティネーションオペランドで指定されるレジスタにデータを書き込むパイプラインの途中のステージから、前記ソースオペランドで指定されるレジスタに格納される値を参照させる。
【００６１】
前記プログラムコード変換装置は、以下の各ステップを実行可能に構成される。
【００６２】
前記命令セットに含まれる複数の命令によって構成される前記プログラムコードからレジスタ移動命令（Ｍ）を探索する（Ｓ４）。
【００６３】
前記探索で発見したレジスタ移動命令のソースオペランド（ＲＳＭ）で指定されるレジスタをデスティネーションオペランドで指定するレジスタ格納命令（Ａ）を抽出する（Ｓ５）
前記探索で発見した前記レジスタ移動命令のデスティネーションオペランド（ＲＤＭ）で指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令（Ｘ）について、前記レジスタ格納命令から前記遅延量（ＤＡ）以内の実行ステップで実行される場合には、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換える（Ｓ７）。
【００６４】
これにより、項１〜項１２に規定されるプロセッサに実行させるプログラムにおいて、ソフトウェアパイプライン化による性能向上を図るための最適化を行うことができる。
【００６５】
〔１４〕＜フォワーディング可能なステップへの命令の移動＞
項１３において、前記プログラムコード変換装置は、前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令（Ｘ）について、以下の処理を実行する。前記レジスタ格納命令から前記遅延量（ＤＡ）より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断し、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを許可する指定を行ったレジスタ参照命令に置き換える（Ｓ７）。
【００６６】
これにより、フォワーディングをより有効に利用することができ、さらなる性能向上を図ることができる。
【００６７】
〔１５〕＜レジスタ移動命令の削除＞
項１４において、前記プログラムコード変換装置は、前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続の全てのレジスタ参照命令について、前記レジスタ格納命令から前記遅延量より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断する。その結果、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換える（Ｓ７）。さらに前記全てのレジスタ参照命令が、前記遅延量以内に実行される実行ステップに移動されたときには、前記探索で発見した前記レジスタ移動命令を前記プログラムから削除する（Ｓ８）。
【００６８】
これにより、フォワーディングをより有効に利用することができ、さらなる性能向上を図ることができる。
【００６９】
〔１６〕＜ＶＬＩＷ＞
項１３から項１５のうちのいずれか１項において、前記プロセッサは、前記処理実行回路をＮ個（Ｎは任意の自然数）（ＥＸＥＣ１〜３）備え、前記命令セットに含まれる前記Ｎ個の命令を１語に含む命令語を対応する処理実行回路により並列に実行可能である。
【００７０】
これにより、１命令語が複数の命令によって構成されるＶＬＩＷプロセッサにおいて、フォワーディングをより有効に利用することができ、さらなる性能向上を図ることができる。
【００７１】
〔１７〕＜コンパイラ＞
項１３から項１６のうちのいずれか１項において、前記プログラムコード変換装置は、高級言語で記述されたプログラムから、前記命令セットに含まれる複数の命令によって構成される前記プログラムコードを生成する。
【００７２】
これにより、項１３〜項１６の効果を奏することができるコンパイラを提供することができる。
【００７３】
〔１８〕＜プログラムコード変換（最適化）ソフトウェア＞
本願において開示される一つの実施の形態は、コンピュータによって実行されることにより、項１３から項１７のうちのいずれか１項に記載されるプログラムコード変換装置として機能する、ソフトウェアである。
【００７４】
これにより、項１３〜項１７の効果を奏することができるプログラムコード変換（最適化）装置を実現するためのソフトウェアを提供することができる。
【００７５】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００７６】
〔実施形態１〕＜フォワーディングのオン／オフが指定可能なプロセッサ＞
図１は、フォワーディングのオン／オフが命令ごとに指定可能なプロセッサの基本的な構成例を示すブロック図である。本実施形態１に係るプロセッサ１は、フェッチ回路ＩＲと、レジスタファイルＲＥＧＦと、フォワーディングセレクタＦＳＥＬと、処理実行回路ＥＸＥＣと、フェッチされた命令に基づいて処理実行回路ＥＸＥＣを制御するプロセッサ制御回路ＣＴＲＬとを備える。処理実行回路ＥＸＥＣは、例えば、算術演算回路ＡＬＵ、乗算回路ＭＵＬ、バレルシフタＳＦＴなどの演算回路、または、ロード／ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等である。多種類の処理を実行可能な多機能の回路を処理実行回路ＥＸＥＣとして実装し、命令コードによって指定されるいずれかの処理が実行されるように構成しても良い。プロセッサ１は、図示が省略された、主にインストラクションメモリとして機能する不揮発性メモリ、主にデータメモリやワークメモリとして機能するＲＡＭ（Random Access Memory）、割り込み制御回路、ダイレクトメモリコントローラ、周辺モジュール、それらを互いに結合するバスなどを含んで構成されてもよい。これらの回路は、特に制限されないが例えば、公知のＣＭＯＳ（Complementary Metal-Oxide-Semiconductor field effect transistor）ＬＳＩの製造技術を用いて、シリコンなどの単一半導体基板上に形成される。プロセッサ１が単一の半導体チップに集積されることにより、実装面積、消費電力、コストなどが低減される。また、図示されるプロセッサの中核部分を複数組備えても良い。図１に示されるブロック図では、ブロック間の配線には多数の信号配線からなるバス配線が含まれるが、表記上はバス記述が省略されている。この点は本願明細書が参照する他の図面に記載されるブロック図についても同様である。
【００７７】
プロセッサ１によって実行される命令の命令セットは、レジスタ参照命令とレジスタ格納命令とを含む。レジスタ参照命令とは、命令の実行に当たってレジスタファイルＲＥＧＦからデータを読み込む命令であって、ソースオペランドを含む。演算命令の他、ロード命令、レジスタを参照する分岐命令などが含まれる。レジスタ格納命令とは、命令を実行した結果をレジスタファイルＲＥＧＦに格納する（書き込む）命令であって、デスティネーションオペランドを含む。演算命令やストア命令の他、レジスタ間接分岐命令のうちレジスタ値のポストインクリメント、プリインクリメントなどにる更新を伴う命令が含まれる。
【００７８】
図２は、図１のプロセッサで実行される命令コードの構成例を示す説明図である。命令コードは、オペコードフィールドｏｐｃｏｄｅ、フォワーディング無効情報フィールドｆ、第１ソースオペランドフィールドｒｓ、第２ソースオペランドフィールドｒｔ、及びデスティネーションオペランドフィールドｒｄを含む。オペコードフィールドｏｐｃｏｄｅは、当該命令によって処理実行回路ＥＸＥＣに実行させる処理を指定するフィールドである。フォワーディング無効情報フィールドｆは、フォワーディングを禁止するか許可するか（フォワーディングオフ／オン）を指定するフィールドである。第１ソースオペランドフィールドｒｓと第２ソースオペランドフィールドｒｔは、当該命令によって処理実行回路ＥＸＥＣに実行させる処理のために、レジスタファイルＲＥＧＦから入力するデータが格納されているレジスタ名或いはレジスタ番号を指定するオペランドである。また、デスティネーションオペランドフィールドｒｄは、その処理結果を格納するべき、レジスタファイルＲＥＧＦのレジスタ名或いはレジスタ番号を指定するオペランドである。プロセッサ１の命令セットには、ソースオペランドとデスティネーションオペランドの数が上述に例示されたそれぞれ２個と１個の命令以外に、ソースオペランドがない命令や３個以上の命令、デスティネーションオペランドがない命令や２個以上の命令を含んでいてもよい。ソースオペランドを少なくとも１個含む命令は、フォワーディング無効情報フィールドｆをさらに含んでいてもよい。図２に例示されるように、ソースオペランドとデスティネーションオペランドの両方を含む命令は、上述のレジスタ参照命令に分類されると同時に、レジスタ格納命令にも分類される。
【００７９】
図１の説明に戻る。
【００８０】
プロセッサ１は、パイプライン動作する。図１には、プロセッサ１が、デコード（ＤＥ）ステージ、レジスタリード（ＲＲ）ステージ、エグゼキューション（ＥＸ）ステージ及びライトバック（ＷＢ）ステージの４段パイプラインで構成される例を示されるが、パイプライン段数は任意に変更可能である。図１に例示されるプロセッサ１は、パイプラインレジスタＰ−ＲＲとＰ−ＥＸとを備える。パイプラインレジスタＰ−ＲＲは、パイプラインのレジスタリード（ＲＲ）ステージにおいて、レジスタファイルＲＥＧＦから読み出されたデータを保持するレジスタであり、パイプラインレジスタＰ−ＥＸは、パイプラインのエグゼキューション（ＥＸ）ステージにおいて、処理実行回路ＥＸＥＣから出力されたデータを保持するレジスタである。フォワーディングセレクタＦＳＥＬには、レジスタファイルＲＥＧＦから読み出されたデータ、処理実行回路ＥＸＥＣから出力されたデータ、及び、パイプラインレジスタＰ−ＥＸから出力されるデータが入力されており、プロセッサ制御回路ＣＴＲＬによる制御の結果、そのうちの１つが選択されて、パイプラインレジスタＰ−ＲＲに入力される。フォワーディングとは、先行する別の命令による処理実行回路ＥＸＥＣからの出力が、ライトバック（ＷＢ）ステージにおいてレジスタファイルＲＥＧＦに書き込まれるよりも前のパイプラインステージに保持されている段階で、そのデータを必要とする後続命令のレジスタリード（ＲＲ）ステージにおいて、パイプラインレジスタＰ−ＲＲに入力する動作である。図１のフォワーディングセレクタＦＳＥＬは、プロセッサ制御回路ＣＴＲＬによる制御の結果、フォワーディングが禁止される場合には、レジスタリード（ＲＲ）ステージにおいて、レジスタファイルＲＥＧＦから読み出されたデータを、パイプラインレジスタＰ−ＲＲに入力する。一方、フォワーディングが許可される場合には、フォワーディングセレクタＦＳＥＬは、レジスタリード（ＲＲ）ステージにおいて処理実行回路ＥＸＥＣから出力されたデータ又はエグゼキューション（ＥＸ）ステージにおいてパイプラインレジスタＰ−ＥＸから出力されたデータを、パイプラインレジスタＰ−ＲＲに入力する。詳しくは後述する。
【００８１】
プロセッサ制御回路ＣＴＲＬは、フェッチされた命令をデコードする命令デコーダＩＤＥと、命令デコーダＩＤＥによるデコード結果を保持する複数のパイプラインレジスタＯＰ−ＤＥ，ＯＰ−ＲＲ，ＦＷＤ−ＤＥ，ＳＲＣ−ＤＥ，ＤＳＴ−ＤＥ，ＤＳＴ−ＲＲ，ＤＳＴ−ＥＸと、フォワーディング制御回路ＦＷＤＣＮＴとを備える。
【００８２】
命令デコーダＩＤＥは、フェッチされた命令をデコードして、命令の実行コードを出力する。出力される実行コードには、例えば、オペコードとフォワーディング無効情報とソースオペランドコードとデスティネーションオペランドコードとが含まれる。パイプラインレジスタＯＰ−ＤＥとＯＰ−ＲＲは、それぞれデコード（ＤＥ）ステージとレジスタリード（ＲＲ）ステージにおいてオペコードを保持するパイプラインレジスタである。パイプラインレジスタＦＷＤ−ＤＥは、デコード（ＤＥ）ステージにおいてフォワーディング無効情報ＩＮＶＦＷＤを保持するパイプラインレジスタである。ＳＲＣ−ＤＥはデコード（ＤＥ）ステージにおいてソースオペランドコードＲＳを保持するパイプラインレジスタである。パイプラインレジスタＤＳＴ−ＤＥとＤＳＴ−ＲＲとＤＳＴ−ＥＸは、デスティネーションオペランドコードを、デコード（ＤＥ）ステージ、レジスタリード（ＲＲ）ステージ及びエグゼキューション（ＥＸ）ステージのパイプラインステージごとに保持するパイプラインレジスタである。パイプラインレジスタＯＰ−ＲＲに保持されるオペコードは、処理実行回路ＥＸＥＣに供給され、次のエグゼキューション（ＥＸ）ステージにおける処理実行回路ＥＸＥＣによる処理の内容を制御する。パイプラインレジスタＳＲＣ−ＤＥに保持されるソースオペランドコードＲＳは、レジスタファイルＲＥＧＦに供給され、レジスタリード（ＲＲ）ステージにおいてソースオペランドコードによって指定されるレジスタ名（又はレジスタ番号）のレジスタからデータを読み出し、フォワーディングセレクタＦＳＥＬを介して、レジスタリード（ＲＲ）ステージのパイプラインレジスタに供給する。パイプラインレジスタＤＳＴ−ＥＸに保持されるデスティネーションオペランドコードＤＳＴ−ＥＸ１は、レジスタファイルＲＥＧＦに供給されＤＳＴ−ＥＸ１によって指定されるレジスタ名（又はレジスタ番号）のレジスタに、ライトバック（ＷＢ）ステージにおいて、処理実行回路ＥＸＥＣの実行結果を書き込む。
【００８３】
フォワーディング制御回路ＦＷＤＣＮＴは、フォワーディングを禁止するか許可するかを指定可能なフィールドｆのデコード結果に基づいて、フォワーディングセレクタＦＳＥＬを制御する。フォワーディング制御回路ＦＷＤＣＮＴは、フォワーディングが禁止されるときは、フォワーディングセレクタＦＳＥＬにより、ソースオペランドコードで指定されるレジスタの値をレジスタファイルＲＥＧＦから読み出して処理実行回路ＥＸＥＣに供給させる。フォワーディング制御回路ＦＷＤＣＮＴは、フォワーディングが許可されるときは、パイプラインレジスタＤＳＴ−ＤＥとＤＳＴ−ＲＲとＤＳＴ−ＥＸにパイプラインステージごとに保持されるデスティネーションオペランドコードと、パイプラインレジスタＳＲＣ−ＤＥに保持されるソースオペランドコードとを比較する。一致するコードがあれば、一致するパイプラインステージから処理実行回路ＥＸＥＣへのフォワーディングを行う。即ち、レジスタファイルＲＥＧＦへのライトバック（ＷＢ）を待つことなく、パイプラインの途中のステップの値（処理実行回路ＥＸＥＣの出力値そのものやパイプラインレジスタＰ−ＥＸの値）を、フォワーディングセレクタＦＳＥＬを介して、処理実行回路ＥＸＥＣのパイプラインレジスタＰ−ＲＲに供給する。
【００８４】
図３は、プロセッサ１に搭載されるフォワーディングセレクタＦＳＥＬの構成例を示すブロック図であり、図４は、フォワーディング制御回路ＦＷＤＣＮＴの機能の一例を示すフローチャートである。フォワーディングセレクタＦＳＥＬには、レジスタファイルＲＥＧＦから読み出されたデータ、処理実行回路ＥＸＥＣのライトバック（ＷＢ）ステージからのデータ（パイプラインレジスタＰ−ＥＸの出力）、及び、処理実行回路ＥＸＥＣのエグゼキューション（ＥＸ）ステージからのデータ（処理実行回路ＥＸＥＣの出力値そのもの）が入力されている。フォワーディングセレクタＦＳＥＬは、フォワーディング制御回路ＦＷＤＣＮＴから供給される選択制御信号ＦＳＥＬＳに基づいて、上記入力されるデータのうちの１つを選択して、処理実行回路ＥＸＥＣのパイプラインレジスタＰ−ＲＲに書き込む。フォワーディング制御回路ＦＷＤＣＮＴは、フォワーディング無効情報ＩＮＶＦＷＤが１のとき（Ｓ１０）、即ち、フォワーディングが禁止されるときには、選択制御信号ＦＳＥＬＳ＝０として（Ｓ２０）、フォワーディングセレクタＦＳＥＬにレジスタファイルＲＥＧＦから読み出されたデータを選択してパイプラインレジスタＰ−ＲＲに書き込ませるように制御する。フォワーディング制御回路ＦＷＤＣＮＴは、フォワーディング無効情報ＩＮＶＦＷＤが０のとき（Ｓ１０）、即ち、フォワーディングが許可されるときには、ソースオペランドコードＲＳとパイプラインレジスタＤＳＴ−ＲＲに保持されるＤＳＴ−ＲＲ１とを比較し（Ｓ１１）、一致なら選択制御信号ＦＳＥＬＳ＝２とする（Ｓ２１）。不一致の場合は、次にパイプラインレジスタＤＳＴ−ＥＸに保持されるＤＳＴ−ＥＸ１と比較し（Ｓ１２）一致なら選択制御信号ＦＳＥＬＳ＝１とする（Ｓ２２）が、更に不一致の場合には、選択制御信号ＦＳＥＬＳ＝０とする（Ｓ２３）。なお、フォワーディング無効情報ＩＮＶＦＷＤや選択制御信号ＦＳＥＬＳに割り付ける数値の意味は任意であって、ここに例示するのは一例に過ぎない。
【００８５】
これにより、レジスタファイルＲＥＧＦに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。
【００８６】
＜ＶＬＩＷプロセッサ＞
ここまでに説明した実施の形態をＶＬＩＷプロセッサに適用すると、より好適である。
【００８７】
図５は、フォワーディングのオン／オフが命令ごとに指定可能なプロセッサのＶＬＩＷによる構成例を示すブロック図である。ＶＬＩＷプロセッサ２は、フェッチ回路ＩＲと、プロセッサ制御回路ＣＴＲＬと、３スロットの処理実行回路ＥＸＥＣ１〜３と、レジスタファイルＲＥＧＦとを備える。処理実行回路ＥＸＥＣ１〜３は、それぞれ、入力部に２個ずつのフォワーディングセレクタＦＳＥＬ−Ｓ１とＦＳＥＬ−Ｔ１、ＦＳＥＬ−Ｓ２とＦＳＥＬ−Ｔ２、及び、ＦＳＥＬ−Ｓ３とＦＳＥＬ−Ｔ３を備える。さらに、パイプラインを構成するために、処理実行回路ＥＸＥＣ１〜３は、それぞれ、入力部に２個ずつのパイプラインレジスタＰ−ＲＲ−Ｓ１とＰ−ＲＲ−Ｔ１、Ｐ−ＲＲ−Ｓ２とＰ−ＲＲ−Ｔ２、及び、Ｐ−ＲＲ−Ｓ３とＰ−ＲＲ−Ｔ３を備え、出力部にパイプラインレジスタＰ−ＥＸ１、Ｐ−ＥＸ２及びＰ−ＥＸ３を備える。処理実行回路ＥＸＥＣ１〜３は、例えば、算術演算回路ＡＬＵ、乗算回路ＭＵＬ、バレルシフタＳＦＴなどの演算回路、または、ロード／ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等であり、多種類の処理を実行可能な多機能の回路を実装し、命令コードによって指定されるいずれかの処理が実行されるように構成しても良い。３スロットの全てに、全ての機能を実行可能な処理実行回路を配置しても良いし、単機能又は実行可能な機能の種類が限定された処理実行回路を、個々のスロットに適宜配置しても良い。３スロットの全てに、全ての機能を実行可能な処理実行回路を配置すると、回路規模は大きくなるものの、実行可能な命令の種類がスロットに依らず任意となるため、プログラミングの自由度が高くなり、処理に必要なステップ数を抑えることができる。一方、単機能又は実行可能な機能の種類が限定された処理実行回路を、個々のスロットに適宜配置すると、回路規模が抑えられる。図５には３スロットの例が示されるが、スロット数は任意である。ＶＬＩＷプロセッサ２は、図示が省略された、主にインストラクションメモリとして機能する不揮発性メモリ、主にデータメモリやワークメモリとして機能するＲＡＭ、割り込み制御回路、ダイレクトメモリコントローラ、周辺モジュール、それらを互いに結合するバスなどを含んで構成されてもよい。これらの回路は、特に制限されないが例えば、公知のＣＭＯＳＬＳＩの製造技術を用いて、シリコンなどの単一半導体基板上に形成される。ＶＬＩＷプロセッサ２が単一の半導体チップに集積されることにより、実装面積、消費電力、コストなどが低減される。
【００８８】
フェッチ回路ＩＲは、３個の命令コードを１語に含む長い命令語（ＶＬＩＷ）をフェッチし、３命令を並列にプロセッサ制御回路ＣＴＲＬに供給する。プロセッサ制御回路ＣＴＲＬは供給された３命令を並列にデコードして、３スロットの処理実行回路ＥＸＥＣ１〜３を並列動作させる。処理実行回路ＥＸＥＣ１〜３とそれぞれに接続されるパイプラインレジスタの動作は、図１を引用した上述の説明と同様であるので、説明を省略する。また、処理実行回路ＥＸＥＣ１〜３の制御信号、レジスタファイルＲＥＧＦの読み出し及び書き込み制御信号も、図１と同様であるが、図５には図示が省略されている。
【００８９】
図６は、ＶＬＩＷプロセッサ２で実行される命令語の構成例を示す説明図である。ＶＬＩＷプロセッサ２で実行される命令語は、複数の命令コードを１語に含む長い命令語であり、スロット１〜３にそれぞれ対応する３個の命令コードを含む。各命令コードは、実装される処理実行回路ＥＸＥＣ１〜３で実行可能な処理に合せて規定される。図５ではスロット１〜３の全ての処理実行回路ＥＸＥＣ１〜３が、それぞれ２個のレジスタ入力と、１個のレジスタ出力と、フォワーディングオン／オフ機能を持つ例が示される。スロット１〜３に対応する３個の命令コードは、それぞれ、オペコードフィールドｏｐｃｏｄｅ、フォワーディング無効情報フィールドｆ、第１ソースオペランドフィールドｒｓ、第２ソースオペランドフィールドｒｔ、及びデスティネーションオペランドフィールドｒｄを含む。
【００９０】
図７は、ＶＬＩＷプロセッサ２に搭載されるプロセッサ制御回路ＣＴＲＬの構成例を示すブロック図である。プロセッサ制御回路ＣＴＲＬは、フェッチされた命令をデコードする命令デコーダＩＤＥと、命令デコーダＩＤＥによる各スロットに対応するデコード結果をそれぞれ保持する複数のパイプラインレジスタと複数のフォワーディング制御回路とを備える。フォワーディング制御回路は、ソースオペランドの数に対応して各スロットに２個ずつ設けられている。即ち、スロット１に対応して、パイプラインレジスタＯＰ−ＤＥ１，ＯＰ−ＲＲ１，ＦＷＤ−ＤＥ１，ＳＲＣＳ−ＤＥ１，ＳＲＣＴ−ＤＥ１，ＤＳＴ−ＤＥ１，ＤＳＴ−ＲＲ１，ＤＳＴ−ＥＸ１と、フォワーディング制御回路ＦＷＤＣＮＴ−Ｓ１，ＦＷＤＣＮＴ−Ｔ１とが設けられている。スロット２に対応して、パイプラインレジスタＯＰ−ＤＥ２，ＯＰ−ＲＲ２，ＦＷＤ−ＤＥ２，ＳＲＣＳ−ＤＥ２，ＳＲＣＴ−ＤＥ２，ＤＳＴ−ＤＥ２，ＤＳＴ−ＲＲ２，ＤＳＴ−ＥＸ２と、フォワーディング制御回路ＦＷＤＣＮＴ−Ｓ２，ＦＷＤＣＮＴ−Ｔ２とが設けられている。スロット３に対応して、パイプラインレジスタＯＰ−ＤＥ３，ＯＰ−ＲＲ３，ＦＷＤ−ＤＥ３，ＳＲＣＳ−ＤＥ３，ＳＲＣＴ−ＤＥ３，ＤＳＴ−ＤＥ３，ＤＳＴ−ＲＲ３，ＤＳＴ−ＥＸ３と、フォワーディング制御回路ＦＷＤＣＮＴ−Ｓ３，ＦＷＤＣＮＴ−Ｔ３とが設けられている。
【００９１】
命令デコーダＩＤＥは、フェッチされた命令をデコードして、各スロットに対応する、オペコードとフォワーディング無効情報とソースオペランドコードとデスティネーションオペランドコードとを出力する。パイプラインレジスタＯＰ−ＤＥ１〜３とＯＰ−ＲＲ１〜３は、それぞれデコード（ＤＥ）ステージとレジスタリード（ＲＲ）ステージにおいて各スロットにおけるオペコードを保持する。パイプラインレジスタＦＷＤ−ＤＥ１〜３は、デコード（ＤＥ）ステージにおいて各スロットにおけるフォワーディング無効情報ＩＮＶＦＷＤ１〜３を保持する。ＳＲＣＳ−ＤＥ１〜３とＳＲＣＴ−ＤＥ１〜３はデコード（ＤＥ）ステージにおいて各スロットにおけるソースオペランドコードＲＳとＲＴをそれぞれ保持する。パイプラインレジスタＤＳＴ−ＤＥ１〜３とＤＳＴ−ＲＲ１〜３とＤＳＴ−ＥＸ１〜３は、各スロットにおけるデスティネーションオペランドコードを、デコード（ＤＥ）ステージ、レジスタリード（ＲＲ）ステージ及びエグゼキューション（ＥＸ）ステージのパイプラインステージごとに保持する。パイプラインレジスタＯＰ−ＲＲ１〜３に保持されるオペコードは、次のエグゼキューション（ＥＸ）ステージにおける処理実行回路ＥＸＥＣ１〜３による処理の内容を制御するための制御信号ＯＰＥＸ１〜３として、処理実行回路ＥＸＥＣ１〜３にそれぞれ供給される。パイプラインレジスタＳＲＣＳ−ＤＥ１〜３に保持されるソースオペランドコードＲＳ１〜３と、ＳＲＣＴ−ＤＥ１〜３に保持されるソースオペランドコードＲＴ１〜３は、それぞれレジスタファイルＲＥＧＦに対して、読み出し対象のレジスタ名（又はレジスタ番号）を指定するための制御信号ＲＲＳ１〜３とＲＲＴ１〜３として供給される。パイプラインレジスタＤＳＴ−ＥＸ１〜３に保持されるデスティネーションオペランドコードＤＳＴ−ＥＸ１〜３は、レジスタファイルＲＥＧＦに対して、処理実行回路ＥＸＥＣ１〜３の実行結果のライトバック（ＷＢ）ステージにおける書き込みを制御する制御信号ＲＷ１〜３として供給される。
【００９２】
フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３とＦＷＤＣＮＴＴ１〜Ｔ３は、それぞれスロット１〜３において、ソースオペランドｒｓとｒｔそれぞれに対応して設けられ、フォワーディングを禁止するか許可するかを指定可能なフィールドｆのデコード結果に基づいて、フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３とＦＳＥＬ−Ｔ１〜Ｔ３を制御する。フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３とＦＷＤＣＮＴＴ１〜Ｔ３は、フォワーディングが禁止されるときには、フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３とＦＳＥＬ−Ｔ１〜Ｔ３により、ソースオペランドコードで指定されるレジスタの値をレジスタファイルＲＥＧＦから読み出して処理実行回路ＥＸＥＣ１〜３に供給させる。フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３とＦＷＤＣＮＴＴ１〜Ｔ３は、フォワーディングが許可されるときは、ＳＲＣＳ−ＤＥ１〜３とＳＲＣＴ−ＤＥ１〜３とにそれぞれ保持されるソースオペランドコードと、ＤＳＴ−ＲＲ１〜３とＤＳＴ−ＥＸ１〜３に保持される、スロット１〜３の各パイプラインステージのデスティネーションオペランドコードとをそれぞれ比較する。一致するコードがあれば、一致するスロットのパイプラインステージから処理実行回路の対応するソース入力へのフォワーディングを、対応するフォワーディングセレクタを介して行う。
【００９３】
図８は、ＶＬＩＷプロセッサ２に搭載されるフォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３とＦＳＥＬ−Ｔ１〜Ｔ３それぞれの構成例を示すブロック図であり、図９は、フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３の機能の一例を示すフローチャートである。フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３とＦＳＥＬ−Ｔ１〜Ｔ３はすべて同じ構成であり、フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３もすべて同じ構成である。フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３は、それぞれスロット１〜３において、ソースオペランドｒｓに対応して設けられ、フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３に選択制御信号ＲＳＥＬＲＳを出力する。フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３には、フォワーディングされないときのレジスタファイルＲＥＧＦからのデータと、フォワーディング対象のデータとして、スロット１〜３のＥＸステージからのデータとスロット１〜３のＷＢステージからのデータとが入力されている。フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３は、フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３から供給される選択制御信号ＲＳＥＬＲＳに基づいて、そのうちの１つを選択し、パイプラインレジスタＰ−ＲＲ−Ｓ１〜Ｓ３を介して処理実行回路ＥＸＥＣ１〜３のｒｓ側ソース入力に供給する。処理実行回路ＥＸＥＣ１〜３のｒｔ側に対応して設けられる、フォワーディング制御回路ＦＷＤＣＮＴＴ１〜Ｔ３もｒｓ側の上記フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３とすべて同じ構成であり、フォワーディングセレクタＦＳＥＬ−Ｔ１〜Ｔ３に選択制御信号ＲＳＥＬＲＴを出力する。フォワーディングセレクタＦＳＥＬ−Ｔ１〜Ｔ３にも、フォワーディングされないときのレジスタファイルＲＥＧＦからのデータと、フォワーディング対象のデータとして、スロット１〜３のＥＸステージからのデータとスロット１〜３のＷＢステージからのデータとが入力されている。フォワーディングセレクタＦＳＥＬ−Ｔ１〜Ｔ３は、フォワーディング制御回路ＦＷＤＣＮＴＴ１〜Ｔ３から供給される選択制御信号ＲＳＥＬＲＴに基づいて、そのうちの１つを選択し、パイプラインレジスタＰ−ＲＲ−Ｔ１〜Ｔ３を介して処理実行回路ＥＸＥＣ１〜３のｒｔ側ソース入力に供給する。
【００９４】
図９に示されるように、フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３は、フォワーディング無効情報ＩＮＶＦＷＤが１のとき（Ｓ３０）には、選択制御信号ＦＳＥＬＳ＝０として（Ｓ４０）、フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３にレジスタファイルＲＥＧＦから読み出されたデータを選択してパイプラインレジスタＰ−ＲＲ−Ｓ１〜Ｓ３に書き込ませるように制御する。フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３は、フォワーディング無効情報ＩＮＶＦＷＤが０のときには、ソースオペランドコードＲＳとパイプラインレジスタＤＳＴ−ＲＲ１〜３に保持されるＤＳＴ−ＲＲ１〜３とをそれぞれ順次比較し（Ｓ３１〜Ｓ３３）、ＤＳＴ−ＥＸ１〜３に保持されるＤＳＴ−ＥＸ１〜３とをそれぞれ順次比較する（Ｓ３４〜Ｓ３６）。その結果、フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３は、一致するパイプラインレジスタに対応する値を選択制御信号ＦＳＥＬＳから出力する（Ｓ４１〜Ｓ４７）。即ち、ソースオペランドコードＲＳとパイプラインレジスタＤＳＴ−ＲＲ１に保持されるＤＳＴ−ＲＲ１とを比較し（Ｓ３１）、一致なら選択制御信号ＦＳＥＬＳ＝６とする（Ｓ４１）。不一致の場合は、ＲＳとＤＳＴ−ＲＲ２に保持されるＤＳＴ−ＲＲ２とを比較し（Ｓ３２）、一致ならＦＳＥＬＲＳ＝５とする（Ｓ４２）。不一致の場合は、ＲＳとＤＳＴ−ＲＲ３に保持されるＤＳＴ−ＲＲ３とを比較し（Ｓ３３）、一致ならＦＳＥＬＲＳ＝４とする（Ｓ４３）。不一致の場合は、ソースオペランドコードＲＳとパイプラインレジスタＤＳＴ−ＥＸ１に保持されるＤＳＴ−ＥＸ１とを比較し（Ｓ３４）、一致なら選択制御信号ＦＳＥＬＳ＝３とする（Ｓ４４）。不一致の場合は、ＲＳとＤＳＴ−ＥＸ２に保持されるＤＳＴ−ＥＸ２とを比較し（Ｓ３５）、一致ならＦＳＥＬＲＳ＝２とする（Ｓ４５）。不一致の場合は、ＲＳとＤＳＴ−ＥＸ３に保持されるＤＳＴ−ＥＸ３とを比較し（Ｓ３６）、一致ならＦＳＥＬＲＳ＝１とする（Ｓ４６）。更に不一致の場合には、選択制御信号ＦＳＥＬＳ＝０とする（Ｓ４７）。なお、フォワーディング無効情報ＩＮＶＦＷＤや選択制御信号ＦＳＥＬＳに割り付ける数値の意味は任意であって、ここに例示するのは一例に過ぎない。図示は省略されるが、処理実行回路ＥＸＥＣ１〜３のｒｔ側に対応して設けられる、フォワーディング制御回路ＦＷＤＣＮＴＴ１〜Ｔ３の機能は、ｒｓ側の上記フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３の機能と同様であり、フォワーディングセレクタＦＳＥＬ−Ｔ１〜Ｔ３に選択制御信号ＲＳＥＬＲＴを出力する。
【００９５】
以上は、図５に例示されるように、３スロットの処理実行回路ＥＸＥＣ１〜３が全て同じ機能でそれぞれ２個のソースと１個のデスティネーションを持つ場合について説明したが、上述のように、スロットの数は任意であるし、各スロットに実装される機能も任意である。各スロットに実装される処理実行回路ＥＸＥＣが備えるソースの数に応じて、プロセッサ制御回路ＣＴＲＬは同数のフォワーディング制御回路を備え、処理実行回路ＥＸＥＣに接続される同数のフォワーディングセレクタＦＳＥＬを制御する。一部のスロットに、レジスタ格納命令のみの実行が可能な、ソースを持たない処理実行回路ＥＸＥＣが実装されてもよい。例えば、アクセスすべきアドレスが即値（イミーディエイト値）で指定されるロード命令（load immediate命令）や、書き込む値が即値で規定されるムーブ命令（move immediate命令）の場合、ソースオペランドを持たない。このような機能のみを持つ処理実行回路ＥＸＥＣが実装されるスロットには、フォワーディングセレクタＦＳＥＬは実装されず、プロセッサ制御回路ＣＴＲＬはそのスロットに対応するフォワーディング制御回路を備えない。このようなソースを持たない処理実行回路ＥＸＥＣもフォワーディング元としては機能し得る。図５〜図９には、任意の他のスロットからのフォワーディングを許す構成例が示されるが、実行されるソフトウェアの特徴を考慮し、或いは回路規模や配線密度の制約に基づいて、限られた範囲からのフォワーディングのみを許すように変更しても良い。
【００９６】
＜ソフトウェアパイプライン＞
ＶＬＩＷプロセッサは、ソフトウェアパイプライン化に好適である。図５には紙面の制限から３スロットのＶＬＩＷプロセッサが例示され、以下に示す実施の形態では、理解を助けるために単純な例が示されるが、ＶＬＩＷプロセッサに実装されるスロット数は任意であり、スロット数は多い程多数の命令ステップを含む繰り返しループをより効率的にソフトウェアパイプライン化することができる。
【００９７】
図１０は、図５に示されるＶＬＩＷプロセッサ２で実行される、高級言語で記述されたプログラムの例を示す説明図である。ロングワードの配列変数MY_DATAの値がポインタdataで示されるアドレスに書き込まれ、係数COEFFICIENTの値がロングワード変数coefに書き込まれ、繰り返し（while）ループが起動される。ループ内では、インデックスiで示されるアドレスからデータdata[i]*を読み込んで係数coefを乗じた後、同じアドレスに格納する処理と、インデックスiを１ずつ増加させる処理とが実行される。ここで記号*はポインタを意味する。なお、この処理は、所謂リード・モディファイ・ライトであり、配列演算で多用される。
【００９８】
図１１は、図５のプロセッサで実行される、アセンブリ言語で記述されたプログラムの例を示す説明図であり、図１２は、図１１のプログラムで使用されるアセンブリ言語で記述された命令の動作を示す説明図である。ロード（load）命令ldは、ソースオペランドrsとデスティネーションオペランドrdとフォワーディング無効情報invfwdとをオペランドに持ち、レジスタrsが表すアドレスからロードしレジスタrdに書き込む。ただしinvfwd==1の場合はrsはフォワーディングしない。ストア（store）命令stは、２個のソースオペランドrsとrtとフォワーディング無効情報invfwdとをオペランドに持ち、レジスタrsが表すアドレスにレジスタrtの内容をストアする。ただしinvfwd==1の場合はrtはフォワーディングするがrsはフォワーディングしない。加算（add）命令addは、２個のソースオペランドrsとrtとデスティネーションオペランドrdとをオペランドに持ち、rs+rtを計算し、演算結果をrdに書き込む。乗算（multiply）命令mulは、２個のソースオペランドrsとrtとデスティネーションオペランドrdとをオペランドに持ち、rs*rtを計算し、演算結果をrdに書き込む。ここで記号*は乗算を意味する。分岐（branch）命令brはlabelをオペランドに持ち、labelへ無条件分岐する。ムーブ（move）命令mvは、ソースオペランドrsとデスティネーションオペランドrdとをオペランドに持ち、レジスタrsのデータをレジスタrdに書き込む。
【００９９】
図１１は、アセンブリ言語で記述されたプログラムの一例である。図１０に示されるプログラムの繰り返しループが変換（コンパイル）された部分が示される。
【０１００】
ステップ１には、ロード（ld）命令と加算（add）命令とがマッピングされている。即ち、ロード（ld）命令と加算（add）命令とは、１語のＶＬＩＷで並列発行され、異なるスロットで並列に実行される。ロード（ld）命令により、インデックスiがマッピングされたレジスタｒ０が示すアドレスからデータdata[i]をレジスタｒ１に読み込む。加算（add）命令により、インデックスiが格納されるレジスタｒ０の値に、図示されない初期化ルーチンで1に初期化されているレジスタｒ９の値1を加算してレジスタｒ０に書き戻す。インデックスiのインクリメントi++である。
【０１０１】
ステップ２には、ロード（ld）命令と加算（add）命令と乗算（mul）命令とがマッピングされている。即ち、ロード（ld）命令と加算（add）命令と乗算（mul）命令とは、１語のＶＬＩＷで並列発行され、異なるスロットで並列に実行される。ロード（ld）命令によりインデックスiがマッピングされたレジスタｒ０が示すアドレスからデータdata[i]をレジスタｒ１に読み込み、加算（add）命令によりインデックスi格納されるレジスタｒ０の値にレジスタｒ９の値（1）を加算してレジスタｒ０に書き戻す。このときのインデックスiは、ステップ１の加算（add）命令により既にインクリメントされた値であり、レジスタｒ０に書き戻される値は、さらにインクリメントされた値である。乗算（mul）命令により、ステップ１でデータdata[i]がロードされたレジスタｒ１の値と、図示されない初期化ルーチンで係数値COEFFICIENTに初期化されているレジスタｒ２の値とが乗算され、結果がレジスタｒ３に書き込まれる。
【０１０２】
ステップ３には、ストア（st）命令と乗算（mul）命令と分岐（br）命令とがマッピングされている。即ち、ストア（st）命令と乗算（mul）命令と分岐（br）命令とは、１語のＶＬＩＷで並列発行され、異なるスロットで並列に実行される。ステップ１でデータdata[i]がロードされ、ステップ２でデータdata[i]とCOEFFICIENTとが乗算された結果として、レジスタｒ３に格納されているデータが、ストア（st）命令により、レジスタｒ０が示すアドレスにストアされる。ここで、ストア（st）命令に付加されているフォワーディング無効情報はＩＮＶＦＷＤ＝１とされ、フォワーディングを行わない設定となっている。ストア（st）命令が参照するレジスタｒ０の値は、ステップ１とステップ２の加算（add）命令により、２度インクリメントされているが、その結果はいずれもライトバック（ＷＢ）ステージに到達しておらず、レジスタファイルＲＥＧＦには書き込まれていない。このため、ステップ３でストア（st）命令がレジスタファイルＲＥＧＦのレジスタｒ０を参照すると、ステップ１でロード（ld）命令が参照した値がそのまま参照される。その結果、データdata[i]とCOEFFICIENTとの積が、データdata[i]が格納されていたのと同じアドレスに書き戻される。
【０１０３】
図１３は、ＶＬＩＷプロセッサ２の上記の動作を模式的に示すタイミングチャートである。縦方向にサイクル数が示され、各命令がその依存関係、即ち変数の参照関係とともに示され、合せて、レジスタファイルＲＥＧＦに格納されるレジスタｒ０の値と、レジスタｒ０の値としてフォワーディング可能な値とが示される。サイクル１は、繰り返しループの最初であって、上記ステップ１に対応しており、ロード（ld）命令と加算（add）命令とが実行される。ロード（ld）命令と加算（add）命令とはともにレジスタｒ０の値としてｘ０を参照する。ロード（ld）命令の結果は次のサイクル２で乗算（mul）命令によって参照され、乗算（mul）命令の結果は次のサイクル３でストア（st）命令によって参照される。サイクル３のストア（st）命令はサイクル１のロード（ld）命令と同じレジスタｒ０を参照し、同じ値ｘ０によって示されるアドレスに、乗算結果をストアする。サイクル１では加算（add）命令がレジスタｒ０の値として参照するｘ０をインクリメントしてｘ１を出力する。このときの加算結果であるｘ１は、レジスタリード（ＲＲ）ステージであるので、その加算結果ｘ１がレジスタファイルＲＥＧＦのレジスタｒ０に書き込まれるのは、ライトバック（ＷＢ）ステージのサイクル４である。このため、それまでのサイクルでは、加算結果ｘ１はフォワーディング可能な値としてパイプラインレジスタＰ−ＥＸなどに保持されている。サイクル２のロード（ld）命令と加算（add）命令は、繰り返しループの２回目であって、インクリメントされたインデックスiを参照する必要があるため、フォワーディングによりこの加算結果ｘ１を参照する。サイクル２の加算（add）命令はさらに加算結果ｘ２を出力し、これもフォワーディング可能な値としてパイプラインレジスタＰ−ＥＸなどに保持される。以上のように、インデックスiを保持するレジスタｒ０の値がライトバック（ＷＢ）ステージで更新されるよりも以前に、次の繰り返しループを開始することができ、ソフトウェアパイプライン化される。この例でのイニシエーションインターバルは１サイクルである。このとき、ストア（st）命令に対しては、フォワーディングが無効化され、インクリメントの結果が未反映でレジスタファイルＲＥＧＦに保持される値が参照されるので、リード・モディファイ・ライトの処理が適切に実行される。このように、フォワーディングを禁止するか許可するか（フォワーディングオフ／オン）を命令ごとに指定することができる。
【０１０４】
図１４は、フォワーディングのオン／オフ指定を行わない例を示す説明図である。図１１に示されるアセンブリプログラムと比較して、１ステップ多い５ステップで構成されている。ステップ１とステップ２にムーブ（mv）命令が追加され、ステップ２の加算（add）命令とステップ３のブランチ（br）命令はステップ４に移動し、ステップ４のストア（st）命令はステップ５に移動している。インデックスiを保持するｒ０はステップ１の加算（add）命令でインクリメントされる一方、ステップ３のストア（st）命令がインデックスiの同じ値、即ちインクリメント前の値を参照する必要があるため、ステップ１のムーブ（mv）命令によってレジスタｒ４にコピーされ、ステップ３のストア（st）命令はこのレジスタｒ４を参照している。同様に、２回目の繰り返しループでは、インクリメントされたインデックスiを保持するｒ０の値はステップ２のロード（ld）命令で参照されステップ４でさらにインクリメントされる一方、ステップ５のストア（st）命令がインデックスiの同じ値、即ちインクリメント前の値を参照する必要がある。このため、ロード（ld）命令で参照されたインデックスiを保持するｒ０の値はステップ２のムーブ（mv）命令によってレジスタｒ５にコピーされ、ステップ５のストア（st）命令はこのレジスタｒ５を参照している。
【０１０５】
以上の通り、フォワーディングのオン／オフ指定を行わない図１４のプログラムでは、使用するレジスタはｒ０〜ｒ５とｒ９の７個で、繰り返しループを構成するステップ数が４ステップである。これに対し、フォワーディングのオン／オフ指定を行う図１１のプログラムでは、使用するレジスタはｒ０〜ｒ３とｒ９の５個で、使用量を２個少なく抑え、繰り返しループを構成するステップ数が３ステップで、ステップ数を１ステップ少なく抑えることができる。このように、フォワーディングを禁止するか許可するか（フォワーディングオフ／オン）を命令ごとに指定することができるので、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。
【０１０６】
図１５は、図１１と図１３を引用して説明したＶＬＩＷプロセッサ２の上記の動作をより詳細に示す説明図である。縦方向に実行サイクルと各サイクルにおけるスロット１〜３の状態が示され、横方向に各パイプラインステージのＶＬＩＷ命令と、プロセッサ制御部ＣＴＲＬの各パイプラインレジスタ値が示される。ＶＬＩＷプロセッサ２のパイプライン段数は任意であるが、デコード（ＤＥ）ステージ、レジスタリード（ＲＲ）ステージ、エグゼキューション（ＥＸ）ステージ及びライトバック（ＷＢ）ステージの４段パイプラインで構成される場合が例示される。
【０１０７】
サイクル１では、図１１のステップ１のロード（ld）命令と加算（add）命令がそれぞれスロット１とスロット２のレジスタリード（ＲＲ）ステージに送られており、図１１のステップ２のロード（ld）命令と加算（add）命令と乗算（mul）命令がそれぞれスロット１とスロット２とスロット３のデコード（ＤＥ）ステージに送られている。スロット１のロード（ld）命令のソースオペランド（ｒｓ）であるｒ０がＳＲＣＳ−ＤＥ１に、デスティネーションオペランドであるｒ１がＤＳＴ−ＤＥ１に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝０でありフォワーディングは許可（オン）されているが、ＤＳＴ−ＲＲ１〜３とＤＳＴ−ＥＸ１〜３に適切なフォワーディング元がないので、フォワーディングセレクタＦＳＥＬ−Ｓ１の選択制御信号ＦＳＥＬＳ１＝０である。スロット２の加算（add）命令のソースオペランドｒｓとｒｔであるｒ０とｒ９がＳＲＣＳ−ＤＥ２とＳＲＣＴ−ＤＥ２に、デスティネーションオペランドであるｒ０がＤＳＴ−ＤＥ２に、それぞれ保持される。このときも、フォワーディング無効情報ＩＮＶＦＷＤ＝０でありフォワーディングは許可（オン）されているが、ＤＳＴ−ＲＲ１〜３とＤＳＴ−ＥＸ１〜３に適切なフォワーディング元がないので、フォワーディングセレクタＦＳＥＬ−Ｓ２の選択制御信号ＦＳＥＬＳ２＝０である。
【０１０８】
サイクル２では、ステップ２のロード（ld）命令と加算（add）命令と乗算（mul）命令がそれぞれスロット１とスロット２とスロット３のレジスタリード（ＲＲ）ステージに送られている。スロット１のロード（ld）命令のソースオペランド（ｒｓ）であるｒ０がＳＲＣＳ−ＤＥ１に、デスティネーションオペランドであるｒ１がＤＳＴ−ＤＥ１に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝０でありフォワーディングは許可（オン）されているが、ＤＳＴ−ＲＲ１〜３とＤＳＴ−ＥＸ１〜３に適切なフォワーディング元がないので、フォワーディングセレクタＦＳＥＬ−Ｓ１の選択制御信号ＦＳＥＬＳ１＝０である。スロット２の加算（add）命令のソースオペランドｒｓとｒｔであるｒ０とｒ９がＳＲＣＳ−ＤＥ２とＳＲＣＴ−ＤＥ２に、デスティネーションオペランドであるｒ０がＤＳＴ−ＤＥ２に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝０でありフォワーディングは許可（オン）されており、ＤＳＴ−ＲＲ２＝ｒ０がＳＲＣＳ−ＤＥ２＝ｒ０と一致してフォワーディング元として選択され、フォワーディングセレクタＦＳＥＬ−Ｓ２の選択制御信号ＦＳＥＬＳ２＝５とされる。即ち、サイクル１のスロット２の加算（add）命令からの出力がまだレジスタリード（ＲＲ）ステージにある段階で、サイクル２のスロット２の加算（add）命令のソースオペランド（ｒｓ）へフォワーディングされる。スロット３の乗算（mul）命令のソースオペランドｒｓとｒｔであるｒ１とｒ２がＳＲＣＳ−ＤＥ３とＳＲＣＴ−ＤＥ３に、デスティネーションオペランドであるｒ３がＤＳＴ−ＤＥ３に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝０でありフォワーディングは許可（オン）されており、ＤＳＴ−ＲＲ１＝ｒ１がＳＲＣＳ−ＤＥ３＝ｒ１と一致してフォワーディング元として選択され、フォワーディングセレクタＦＳＥＬ−Ｓ３の選択制御信号ＦＳＥＬＳ３＝６とされる。即ち、サイクル１のスロット２のストア（st）命令からの出力がまだレジスタリード（ＲＲ）ステージにある段階で、サイクル２のスロット３の乗算（mul）命令のソースオペランド（ｒｓ）へフォワーディングされる。
【０１０９】
サイクル３では、ステップ３のストア（st）命令と乗算（mul）命令がそれぞれスロット１とスロット２のレジスタリード（ＲＲ）ステージに送られている。スロット１のストア（st）命令のソースオペランドｒｓとｒｔであるｒ０とｒ３がＳＲＣＳ−ＤＥ１とＳＲＣＴ−ＤＥ１に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝１でありフォワーディングは禁止（オフ）されているので、ソースオペランドｒｓについてはフォワーディングは禁止（オフ）されているが、ソースオペランドｒｔについてはフォワーディングは許可（オン）されている。このため、フォワーディングセレクタＦＳＥＬ−Ｓ１の選択制御信号ＦＳＥＬＳ１＝０とされる。一方、フォワーディングは許可（オン）されているソースオペランドｒｔ側については、ＤＳＴ−ＲＲ３＝ｒ３がＳＲＣＴ−ＤＥ１＝ｒ３と一致するので、フォワーディングセレクタＦＳＥＬ−Ｔ１の選択制御信号ＦＳＥＬＴ１＝４とされる。即ち、サイクル２のスロット３の乗算（mul）命令からの出力がまだレジスタリード（ＲＲ）ステージにある段階で、サイクル３のスロット１のストア（st）命令のソースオペランド（ｒｔ）へフォワーディングされる。スロット２の乗算（mul）命令のソースオペランドｒｓとｒｔであるｒ１とｒ２がＳＲＣＳ−ＤＥ２とＳＲＣＴ−ＤＥ２に、デスティネーションオペランドであるｒ３がＤＳＴ−ＤＥ２に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝０でありフォワーディングは許可（オン）されており、ＤＳＴ−ＲＲ１＝ｒ１とＤＳＴ−ＥＸ１＝ｒ１とがともにＳＲＣＳ−ＤＥ３＝ｒ１と一致しているので、より最近更新されたＤＳＴ−ＲＲ１＝ｒ１がフォワーディング元として選択され、フォワーディングセレクタＦＳＥＬ−Ｓ２の選択制御信号ＦＳＥＬＳ２＝６とされる。即ち、サイクル２のスロット２のストア（st）命令からの出力がまだレジスタリード（ＲＲ）ステージにある段階で、サイクル３のスロット２の乗算（mul）命令のソースオペランド（ｒｓ）へフォワーディングされる。
【０１１０】
サイクル４では、ステップ４のストア（st）命令がスロット１のレジスタリード（ＲＲ）ステージに送られている。スロット１のストア（st）命令のソースオペランドｒｓとｒｔであるｒ０とｒ３がＳＲＣＳ−ＤＥ１とＳＲＣＴ−ＤＥ１に、それぞれ保持される。このとき、フォワーディング無効情報ＩＮＶＦＷＤ＝１でありフォワーディングは禁止（オフ）されているので、ソースオペランドｒｓについてはフォワーディングは禁止（オフ）されているが、ソースオペランドｒｔについてはフォワーディングは許可（オン）されている。このため、フォワーディングセレクタＦＳＥＬ−Ｓ１の選択制御信号ＦＳＥＬＳ１＝０とされる。一方、フォワーディングは許可（オン）されているソースオペランドｒｔ側については、ＤＳＴ−ＲＲ２＝ｒ３がＳＲＣＴ−ＤＥ１＝ｒ３と一致するので、フォワーディングセレクタＦＳＥＬ−Ｔ１の選択制御信号ＦＳＥＬＴ１＝５とされる。即ち、サイクル３のスロット２の乗算（mul）命令からの出力がまだレジスタリード（ＲＲ）ステージにある段階で、サイクル４のスロット１のストア（st）命令のソースオペランド（ｒｔ）へフォワーディングされる。
【０１１１】
以上の詳しい動作例から理解される通り、フォワーディングが実際に発生するのは、ある命令の処理結果がライトバック（ＷＢ）ステージに到達するより前のステージに残存する場合であるから、フォワーディングのオン／オフが指定される命令は、フォワーディング元のレジスタへのライトバックが実行されるよりも前のステップに配置されることによって、効果を奏する。したがって、プロセッサにおけるパイプライン段数が多い程、ソフトウェアパイプライン化による性能向上を図ることができる。
【０１１２】
〔実施形態２〕＜フォワーディング元を指定可能なプロセッサ＞
実施形態１では、命令ごとにフォワーディングを禁止するか許可するかが指定可能とされるプロセッサについて説明したが、許可する場合にフォワーディング元を指定しない単純な許可に加えて、フォワーディング元の指定を伴った許可をすることができるように構成しても良い。即ち、プロセッサによって実行される命令セットに、フォワーディングを禁止するか許可するかを指定するフィールド（ｆ）を命令コードに有する命令に代えて、又はこれに加えて、フォワーディングを禁止するかパイプラインのどのステージからのフォワーディングを許可するかを指定するフィールド（ｆｓｒｃ）を命令コードに有する命令が含まれるように構成するとよい。これにより、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。以下に、詳しく説明する。
【０１１３】
図１６は、実施形態２のプロセッサで実行される命令コードの構成例を示す説明図である。命令コードは、オペコードフィールドｏｐｃｏｄｅ、フォワーディング元指定情報フィールドｆｓｒｃ、第１ソースオペランドフィールドｒｓ、第２ソースオペランドフィールドｒｔ、及びデスティネーションオペランドフィールドｒｄを含む。図２に示される、実施形態１のプロセッサで実行される命令コードの構成例との違いは、フォワーディング無効情報フィールドｆに代えてフォワーディング元指定情報フィールドｆｓｒｃが含まれる点である。他のオペコードとオペランドのフィールドについては、図２を引用して説明した実施形態１における説明と同様であるので、説明を省略する。
【０１１４】
図１７は、図１６の命令コードにおけるフォワーディング元指定情報フィールドについての説明図である。フォワーディング元指定情報フィールドｆｓｒｃは例えば２ビットで構成され、００は通常のフォワーディングを有効とする指定であり、０１はエグゼキューション（ＥＸ）ステージからのフォワーディングを無効とする指定であり、１０はエグゼキューション（ＥＸ）ステージ及びライトバック（ＷＢ）ステージからのフォワーディングを無効とする指定であり、１１は入力禁止とされる。ｆｓｒｃ＝００の通常のフォワーディングを有効とする指定は、図２におけるｆ＝０（ＩＮＶＦＷＤ＝０）によるフォワーディングを許可する（フォワーディングオン）指定と同等である。ｆｓｒｃ＝１０のエグゼキューション（ＥＸ）ステージ及びライトバック（ＷＢ）ステージからのフォワーディングを無効とする指定は、図２におけるｆ＝１（ＩＮＶＦＷＤ＝１）によるフォワーディングを禁止する（フォワーディングオフ）指定と同等である。プロセッサのパイプライン段数がより多い場合には、フォワーディング元指定情報フィールドｆｓｒｃを増やすことができる。これにより、各パイプラインステージからのフォワーディングの有効／無効をよりきめ細かく指定することができる。
【０１１５】
命令セットには、図２に示されるような１ビットのフォワーディング無効情報フィールドｆを持つ命令と、図１７に示されるような２ビット又は３ビット以上のフォワーディング元指定情報フィールドｆｓｒｃを持つ命令と、いずれも持たない命令とを、それぞれ任意の数で含めることができる。
【０１１６】
このような命令セットに含まれる命令を実行可能なプロセッサの構成は、図１に示されるプロセッサ１、又は、図５に示されるＶＬＩＷプロセッサ２と同様である。このとき、フォワーディングセレクタＦＳＥＬ，ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３の構成も図３、図８に示される構成と同様である。プロセッサ制御回路ＣＴＲＬの構成は、パイプラインレジスタＦＷＤ−ＤＥ，ＦＷ−ＤＥ１〜３が、フォワーディング元指定情報フィールドｆｓｒｃを保持するパイプラインレジスタに代わる以外は、図１、図７に示される構成と同様である。フォワーディング制御回路ＦＷＤＣＮＴ，ＦＷＤＣＮＴＳ１〜Ｓ３，ＦＷＤＣＮＴＴ１〜Ｔ３の機能は、フォワーディング元指定情報フィールドｆｓｒｃに基づいて、フォワーディングセレクタＦＳＥＬ，ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３を制御する、選択制御信号ＦＳＥＬＳ，ＦＳＥＬＳ１〜３，ＦＳＥＬＴ，ＦＳＥＬＴ１〜３が適切に生成されるように変更される。
【０１１７】
図１８は、実施形態２のプロセッサに搭載されるフォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３の機能の一例を示すフローチャートである。フォワーディング制御回路ＦＷＤＣＮＴＴ１〜Ｔ３も同様である。フォワーディング制御回路ＦＷＤＣＮＴＳ１〜Ｓ３は、フォワーディング元指定情報ｆｓｒｃ＝＝１０のとき（Ｓ５０）、即ち、エグゼキューション（ＥＸ）ステージ及びライトバック（ＷＢ）ステージからのフォワーディングが無効とされるときには、選択制御信号ＦＳＥＬＳ＝０として（Ｓ６０）とする。これにより、フォワーディングセレクタＦＳＥＬ−Ｓ１〜Ｓ３は、レジスタファイルＲＥＧＦから読み出されたデータを選択してパイプラインレジスタＰ−ＲＲ−Ｓ１〜Ｓ３に書き込むように制御され、フォワーディングは行われない。フォワーディング元指定情報ｆｓｒｃ＝＝０１のとき（Ｓ５１）、即ち、エグゼキューション（ＥＸ）ステージからのフォワーディングが無効とされるときには、ライトバック（ＷＢ）ステージからのフォワーディングの可否のみを判定すればよいので、後述のステップＳ５５に分岐する。フォワーディング元指定情報ｆｓｒｃが１０でも０１でもないときは、図９に示されるのと同様のフォワーディング制御が実行される。ソースオペランドコードＲＳとパイプラインレジスタＤＳＴ−ＲＲ１〜３に保持されるＤＳＴ−ＲＲ１〜３とをそれぞれ順次比較し（Ｓ５２〜Ｓ５４）、ＤＳＴ−ＥＸ１〜３に保持されるＤＳＴ−ＥＸ１〜３とをそれぞれ順次比較し（Ｓ５５〜Ｓ５７）、一致するパイプラインレジスタに対応する値を選択制御信号ＦＳＥＬＳから出力する（Ｓ６２〜Ｓ６７）。いずれにも該当しない場合には、ＦＳＥＬＳ＝０を出力する（Ｓ６８）。この機能は図９に示されるステップＳ３１〜Ｓ３６及びＳ４１〜Ｓ４７の機能と同様であるので、説明を省略する。
【０１１８】
以上のように、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。このような命令を実行可能なプロセッサは、ＶＬＩＷプロセッサとすることにより、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。また、ＶＬＩＷプロセッサでは並列に発行される複数の命令に、図２に示されるような、単純にフォワーディングを禁止するか許可するかだけを指定可能な命令と、図１６に示されるような、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができる命令とを混在させることができる。それらの命令を配置できるスロットを任意とすることも、一方、一部のスロットに固定することもできる。前者により自由度が高くなり、後者により回路規模が低減される。また、実施形態１で説明したのと同様に、他の任意のスロットからのフォワーディングを許す構成とすることも、一方、一部のスロットからのフォワーディングに制限することも可能である。前者により自由度が高くなり、後者により回路規模が低減される。
【０１１９】
〔実施形態３〕＜プログラムコード変換（最適化）装置＞
フォワーディングは、先に実行された命令の結果がその命令で指定されるデスティネーションレジスタに書き込まれるパイプラインステージよりも前に、そのデスティネーションレジスタを参照する命令が実行されるときに、機能する。ここで、先の命令をレジスタ格納命令、後の命令をレジスタ参照命令と呼ぶとする。実施形態１及び２では、レジスタ参照命令を、フォワーディングを禁止するか許可するかだけを指定可能な命令、又は、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができる命令とすることにより、ソフトウェアパイプライン化による性能向上を図ることができることを示した。本実施形態３では、この技術をより積極的に利用するためのプログラムコード変換（最適化）装置について説明する。プログラムコード変換（最適化）装置は、コンパイラとアセンブラとリンカから成るプログラム開発装置の一部の機能として組み込まれる。
【０１２０】
図１９は、本実施形態３に係るプログラム開発装置の機能の一例を示すフローチャートである。プログラム開発装置の機能は、Ｓ１〜Ｓ９の各ステップを含む。ステップ１（Ｓ１）では、入力された、高級言語で記述されたプログラムに対して、その記述の字句解析を行って、中間表現レベルのプログラムに変換する。ステップ２（Ｓ２）では、その中間表現レベルのプログラムに対して所定の最適化を行う。例えば、ターゲットプロセッサがＶＬＩＷの場合には、ステップ２（Ｓ２）において、中間表現レベルのプログラムに含まれるプログラムコードを、ＶＬＩＷを構成する複数のスロットのうちの適切なスロットに割り付けて実行ステップ数を最小化する、最適化が実行される。これらの機能は、公知のコンパイラに実装される機能と同様である。通常のプログラム開発装置では、ステップ２（Ｓ２）の次に、ターゲット命令変換ステップ（Ｓ９）に進み、最適化された中間表現レベルのプログラムコードを、機械語の命令コードに変換する。
【０１２１】
本実施形態３に係るプログラム開発装置には、ステップ３（Ｓ３）が追加され、フォワーディング無効情報を利用して最適化を行う。ステップ３（Ｓ３）は、例えばステップ４（Ｓ４）〜ステップ８（Ｓ８）によって構成される。
【０１２２】
まずステップ４（Ｓ４）において、レジスタ移動命令を探す。ここで、レジスタ移動命令とは、ソースオペランドで指定されるレジスタに格納される値をデスティネーションオペランドで指定されるレジスタに書き込む命令である。アセンブリ言語では通常ムーブ（mv）命令で表現される。
【０１２３】
次にステップ５（Ｓ５）において、Ｓ４で抽出したレジスタ移動命令をＭとし、そのソースオペランド及びデスティネーションオペランドをそれぞれＲＳＭ及びＲＤＭとし、ＲＳＭを定義する命令を探してＡとする。命令Ａは命令Ｍより後のステップまたはＭと同じステップで実行されるレジスタ格納命令である。
【０１２４】
次にステップ６（Ｓ６）において、ＲＤＭを使用するすべての後続命令Ｘについて、次ステップ７（Ｓ７）を処理する。命令Ｘは命令Ｍよりも後のステップで実行されるレジスタ参照命令である。
【０１２５】
ステップ７（Ｓ７）では、命令Ｘについて、命令ＡからＡの遅延ＤＡ以下のステップへの移動が可能であるか否かを判断する。ここで、命令ＡはＲＳＭを定義するレジスタ格納命令であり、遅延ＤＡは命令ＡのあるステップからＲＳＭが命令Ａの実行結果に書き換えられるまでの期間（ステップ数）を指す。命令Ｘを命令ＡからＡの遅延ＤＡ以下のステップへ移動することが可能である場合には、命令Ｘのフォワーディング無効情報ＩＮＶＦＷＤ＝１（フォワーディングオフ）とし、ソースオペランドをＲＤＭからＲＳＭに変更し、命令Ａからの遅延ＤＡ以下のステップへ移動する。命令Ｘが当初から命令ＡからＡの遅延ＤＡ以下のステップに配置されていた場合も同様である。
【０１２６】
ステップ６（Ｓ６）で抽出された全ての命令Ｘについて、ステップ７（Ｓ７）の処理を行なった後、ステップ８（Ｓ８）において、ＲＤＭを使用する命令が残っていない場合には、命令Ｍを削除する。
【０１２７】
これにより、実施形態１及び２で説明したプロセッサに実行させるプログラムにおいて、ソフトウェアパイプライン化による性能向上を図るための最適化を行うことができる。即ち、ソフトウェアパイプライン化のためのフォワーディングオン／オフ指定を、プログラムを解析することによって判断して、自動的に適切なフォワーディング無効情報を与えることができる。
【０１２８】
プログラムコード変換（最適化）装置は、コンパイラとアセンブラとリンカから成るプログラム開発装置の一部の機能として組み込まれる他、既存のプログラム開発装置に追加されるソフトウェアとして提供されてもよい。
【０１２９】
図２０は、プログラムコード変換（最適化）装置による変換前のプログラムによる動作を示す、模式的なタイミングチャートである。図１９に示されるフローチャートにおけるステップ２（Ｓ２）による最適化がされた後、即ち、フォワーディング無効情報を利用した最適化を行う前の中間表現レベルのプログラムに相当する。縦方向にプロセッサの実行サイクルが示され、実行される命令が楕円で、参照され又は実行結果が格納されるレジスタが長方形で示される。破線は１サイクルの間隔を示しており、命令Ａであるadd r0, r1, r2は、ソースレジスタｒ０とｒ１を参照して加算を行い、加算結果をデスティネーションレジスタｒ２に格納する加算命令である。命令Ａであるadd r0, r1, r2を囲む楕円はレジスタリード（ＲＲ）サイクルを表し、その２サイクル後のライトバック（ＷＢ）ステージにデスティネーションレジスタｒ２への書き込みが行われることが模式的に図示されている。命令Ａからそのデスティネーションレジスタのライトバックまでのサイクル数を遅延ＤＡとする。この例ではＤＡ＝２である。命令Ｍであるmv r2, r3は、命令Ａが内容を書き換えようとしているｒ２を別のレジスタｒ３にコピーするムーブ（mv）命令である。命令Ｍであるmv r2, r3は、命令Ａであるadd r0, r1, r2よりも前または同じサイクルに配置されることにより、命令Ａによって書き換えられる前のｒ２の値がレジスタｒ３に退避される。後段の命令Ｘであるadd r3, r9, r4は、退避されたｒ３を参照する加算命令である。
【０１３０】
図２１は、プログラムコード変換（最適化）装置による変換後のプログラムによる動作を示す、模式的なタイミングチャートである。プログラムコード変換（最適化）装置は、図１９に示されるフローチャートに従って、図２０に示される中間表現レベルのプログラムにおいて、レジスタ移動命令Ｍを探す（Ｓ４）。図２０に示されるムーブ命令（mv r2, r3）が命令Ｍとして抽出される。このとき、ソースレジスタＲＳＭ＝ｒ２、デスティネーションレジスタＲＤＭ＝ｒ３である。次に、ソースレジスタＲＳＭ＝ｒ２を定義する命令Ａを探索する。加算命令add r0, r1, r2がこれに相当する。ステップ６（Ｓ６）においてＲＤＭ＝ｒ３を使用するすべての後続命令Ｘを探索する。図２０、２１では加算命令add r3, r9, r4がこれに相当する。ステップ７（Ｓ７）において、命令Ｘを移動する操作を行う。即ち、命令Ｘである加算命令add r3, r9, r4を、命令Ａの遅延ＤＡ以下のサイクル、即ち、図２１に示されるように、例えば命令Ａの１サイクル後のサイクルに移動する。これに伴って、この命令Ｘのフォワーディング無効情報ＩＮＶＦＷＤ＝１としてフォワーディングをオフ（禁止）し、命令ＸのソースオペランドをＲＤＭ＝ｒ３からＲＳＭ＝ｒ２に変更する。これにより、フォワーディングがオフ（禁止）されているため、命令Ｘ（add r2, r9, r4, 1）は直前の命令Ａ（add r0, r1, r2）の実行結果であるｒ２をフォワーディングによって参照するのではなく、命令Ａ（add r0, r1, r2）によって書き換えられる以前のｒ２の内容を参照することができる。図２１には図示が省略されるが、同様の命令Ｘすべてについて、ステップ７（Ｓ７）による移動が行われると、ｒ３を参照する命令が残っていないことになるので、不要となるレジスタ移動命令Ｍ（mv r2, r3）は削除される（Ｓ８）。
【０１３１】
図２０と図２１を比較すると、命令Ｘが命令Ａからのフォワーディングが可能なサイクルに配置されることによって全体のサイクル数を短縮する効果があり、かつ、レジスタ移動命令Ｍが削除されるので、実際に実行される命令数を減らすことができ、さらに、使用されるレジスタ数も減らすことができることがわかる。
【０１３２】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１３３】
例えば、プロセッサ１やＶＬＩＷプロセッサ２は、キャッシュメモリ、共通バス、共通バスに接続される不揮発性メモリ、ＲＡＭ、割り込み制御回路やダイレクトメモリコントローラ、周辺モジュールなどと接続された高機能のプロセッサとして実装され、さらには複数のプロセッサ１、ＶＬＩＷプロセッサ２によって構成されるマルチプロセッサとして実装されてもよい。
【符号の説明】
【０１３４】
１、２  プロセッサ
ＩＲ  命令レジスタ
ＣＴＲＬ  プロセッサ制御部
ＩＤＥ  命令デコーダ
ＯＰ−ＤＥ，ＯＰ−ＤＥ１〜３  演算器制御情報パイプラインレジスタ（ＤＥステージ）
ＯＰ−ＲＲ，ＯＰ−ＲＲ１〜３  演算器制御情報パイプラインレジスタ（ＲＲステージ）
ＦＷＤ−ＤＥ，ＦＷＤ−ＤＥ１〜３  フォワーディング無効情報格納レジスタ
ＳＲＣ−ＤＥ，ＳＲＣＳ−ＤＥ１〜３，ＳＲＣＴ−ＤＥ１〜３  ソースオペランド情報格納レジスタ
ＤＳＴ−ＤＥ，ＤＳＴ−ＤＥ１〜３  デスティネーションオペランド情報格納レジスタ（ＤＥステージ）
ＤＳＴ−ＲＲ，ＤＳＴ−ＲＲ１〜３  デスティネーションオペランド情報格納レジスタ（ＲＲステージ）
ＤＳＴ−ＥＸ，ＤＳＴ−ＥＸ１〜３  デスティネーションオペランド情報格納レジスタ（ＥＸステージ）
ＦＷＤＣＮＴ，ＦＷＤＣＮＴＳ１〜Ｓ３，ＦＷＤＣＮＴＴ１〜Ｔ３  フォワーディング制御信号生成部
ＦＳＥＬ，ＦＳＥＬ−Ｓ１〜Ｓ３，ＦＳＥＬ−Ｔ１〜Ｔ３  フォワーディングセレクタ
ＥＸＥＣ，ＥＸＥＣ１〜３  演算器（処理実行回路）
ＲＥＧＦ  レジスタファイル
Ｐ−ＲＲ，Ｐ−ＲＲ−Ｓ１〜Ｓ３，Ｐ−ＲＲ−Ｔ１〜Ｔ３  演算器入力側パイプラインレジスタ（ＲＲステージ）
Ｐ−ＥＸ，Ｐ−ＥＸ１〜３  演算器出力側パイプラインレジスタ（ＥＸステージ）
ＩＣＯＤＥ  命令コード
ＯＰＥＸ，ＯＰＥＸ１〜３  演算器（処理実行回路）制御信号
ＦＳＥＬＳ１〜３，ＦＳＥＬＴ１〜３  フォワーディングセレクタ選択制御信号
ＲＲＳ１〜３，ＲＲＴ１〜３  レジスタファイルからのリードレジスタ指定信号
ＲＷ１〜３  レジスタファイルへのライトバックレジスタ指定信号
【図１】
0006422381.tif 000002
【図２】
0006422381.tif 000003
【図３】
0006422381.tif 000004
【図４】
0006422381.tif 000005
【図５】
0006422381.tif 000006
【図６】
0006422381.tif 000007
【図７】
0006422381.tif 000008
【図８】
0006422381.tif 000009
【図９】
0006422381.tif 000010
【図１０】
0006422381.tif 000011
【図１１】
0006422381.tif 000012
【図１２】
0006422381.tif 000013
【図１３】
0006422381.tif 000014
【図１４】
0006422381.tif 000015
【図１５】
0006422381.tif 000016
【図１６】
0006422381.tif 000017
【図１７】
0006422381.tif 000018
【図１８】
0006422381.tif 000019
【図１９】
0006422381.tif 000020
【図２０】
0006422381.tif 000021
【図２１】
0006422381.tif 000022