JP6422381B2 - プロセッサ、プログラムコード変換装置及びソフトウェア - Google Patents

プロセッサ、プログラムコード変換装置及びソフトウェア Download PDF

Info

Publication number
JP6422381B2
JP6422381B2 JP2015054448A JP2015054448A JP6422381B2 JP 6422381 B2 JP6422381 B2 JP 6422381B2 JP 2015054448 A JP2015054448 A JP 2015054448A JP 2015054448 A JP2015054448 A JP 2015054448A JP 6422381 B2 JP6422381 B2 JP 6422381B2
Authority
JP
Japan
Prior art keywords
instruction
forwarding
register
processor
processing execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015054448A
Other languages
English (en)
Other versions
JP2016173793A (ja
Inventor
悠記 小林
悠記 小林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2015054448A priority Critical patent/JP6422381B2/ja
Priority to US15/056,952 priority patent/US20160274916A1/en
Priority to CN201610151495.7A priority patent/CN105988775A/zh
Publication of JP2016173793A publication Critical patent/JP2016173793A/ja
Application granted granted Critical
Publication of JP6422381B2 publication Critical patent/JP6422381B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、プロセッサ、前記プロセッサに好適なプログラムを生成するためのプログラムコード変換装置及びコンピュータによって実行されることによって前記プログラムコード変換装置として機能するソフトウェアに関し、特にパイプライン型VLIW(Very Long Instruction Code)プロセッサに好適に利用できるものである。
演算性能を高めるために複数命令を並列発行する、VLIW構成の命令語を利用するプロセッサが知られている。すなわち、プロセッサは単一のVLIW命令をフェッチ、デコード、実行し、データパスはそのVLIW命令に含まれる複数個のオペレーションを処理する。
VLIWプロセッサの広い命令発行幅を有効活用する高速化手法として、ソフトウェアパイプライン化手法が知られている。一般的に、ソフトウェアの実行時間の大部分は、ごく一部のループが占めていると言われているが、ソフトウェアパイプライン化は、このループを高速化する手法である。すなわち、ループの複数の繰り返しの間にまたがってオペレーションを移動させる最適化を行うことで、繰り返し1回あたりの実行サイクル数を削減するものである。
VLIWプロセッサのソフトウェアパイプライン化時の性能ボトルネックとして、変数の複数インスタンスを保持しなければならないことが挙げられる。ソフトウェアパイプライン化は、ループ内の並列命令発行数を高め性能を向上させる。しかしながら、ソフトウェアパイプライン化を進める、即ち、イニシエーションインターバル(Initiation interval)を小さくすると、汎用レジスタの使用数が増えるため、レジスタ数がボトルネックとなり性能向上できなくなることが知られている。レジスタ数増の一因は、ループ内の複数の繰り返しにまたがった変数の利用である。すなわち、複数のインスタンスを保持しなければならないことにある。しかしながら、実装するレジスタ数を増やすことはハードウェア増に直結するので好ましくない。
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施の形態によれば、下記の通りである。
すなわち、命令ごとにフォワーディングを禁止するか許可するかが指定可能なプロセッサであって、フォワーディングが禁止された命令を実行するときにはレジスタファイルを参照し、フォワーディングが許可された命令を実行するときには、前記レジスタファイルにデータを書き込むパイプラインの途中のステージを参照する。
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。
図1は、フォワーディングのオン/オフが指定可能なプロセッサの基本的な構成例を示すブロック図である。 図2は、図1のプロセッサで実行される命令コードの構成例を示す説明図である。 図3は、図1のプロセッサに搭載されるフォワーディングセレクタの構成例を示すブロック図である。 図4は、図1のプロセッサに搭載されるフォワーディング制御回路の機能の一例を示すフローチャートである。 図5は、フォワーディングのオン/オフが指定可能なプロセッサのVLIWによる構成例を示すブロック図である。 図6は、図5のプロセッサで実行される命令語の構成例を示す説明図である。 図7は、図5のプロセッサに搭載されるプロセッサ制御回路の構成例を示すブロック図である。 図8は、図5のプロセッサに搭載されるフォワーディングセレクタの構成例を示すブロック図である。 図9は、図5のプロセッサに搭載されるフォワーディング制御回路の機能の一例を示すフローチャートである。 図10は、図5のプロセッサで実行される、高級言語で記述されたプログラムの例を示す説明図である。 図11は、図5のプロセッサで実行される、アセンブリ言語で記述されたプログラムの例を示す説明図である。 図12は、図11のプログラムで使用されるアセンブリ言語で記述された命令の動作を示す説明図である。 図13は、図5のプロセッサの動作例を模式的に示すタイミングチャートである。 図14は、図5のプロセッサで実行される、アセンブリ言語で記述されたプログラムであって、フォワーディングのオン/オフ指定を行わない例を示す説明図である。 図15は、図5のプロセッサの動作例を示す説明図である。 図16は、実施形態2のプロセッサで実行される命令コードの構成例を示す説明図である。 図17は、図16の命令コードにおけるフォワーディング元指定情報フィールドについての説明図である。 図18は、実施形態2のプロセッサに搭載されるフォワーディング制御回路の機能の一例を示すフローチャートである。 図19は、実施形態3に係るプログラム開発装置の機能の一例を示すフローチャートである。 図20は、プログラムコード変換(最適化)装置による変換前のプログラムによる動作を示す、模式的なタイミングチャートである。 図21は、のプログラムコード変換(最適化)装置による変換後のプログラムによる動作を示す、模式的なタイミングチャートである。
1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕<フォワーディングのオン/オフが指定可能なプロセッサ>
本願において開示される代表的な実施の形態は、命令ごとにフォワーディングを禁止するか許可するかが指定可能とされるプロセッサである。フォワーディングが禁止された命令を実行するときにはレジスタファイル(REGF)を参照し、フォワーディングが許可された命令を実行するときには、前記レジスタファイルにデータを書き込むパイプラインの途中のステージを参照する(フォワーディングする)。
これにより、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。実行結果によってレジスタを書き換える命令の発行後、その命令のライトバックよりも前に、フォワーディングオンの(フォワーディングが許可された)命令と、フォワーディングオフの(フォワーディングが禁止されレジスタファイルREGFを参照する)命令を、自由に混在させることができるためである。
〔2〕<フォワーディングのオン/オフを指定するフィールドを含む命令>
項1において、前記プロセッサによって実行可能な命令セットが、フォワーディングを禁止するか許可するかを指定するフィールド(f)を命令コードに有する命令を含む。
これにより、命令ごとにフォワーディングを禁止するか許可するかを、容易に指定することができる。
〔3〕<VLIW>
項2において、前記プロセッサは、前記命令セットに含まれる複数の命令の命令コードから成る命令語(ICODE)が並列に発行され、前記複数の命令が並列に実行され、前記命令語はフォワーディングを禁止するか許可するかを指定するフィールドを個々の命令コードに有する前記命令を1個以上含む。
これにより、1命令語が複数の命令によって構成されるVLIWプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。VLIWの1命令語に含まれる複数の命令ごとに独立に、フォワーディングを禁止するか許可するかを指定することができるためである。
〔4〕<フォワーディング元を指定するフィールドを含む命令>
項1において、前記プロセッサによって実行可能な命令セットが、フォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを指定するフィールド(fsrc)を命令コードに有する命令を含む。
これにより、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。フォワーディング元が指定されない場合は、より前の、即ち、ライトバックステージからより遠いパイプラインステージからのフォワーディングが優先される。
〔5〕<VLIW>
項4において、前記プロセッサは、前記命令セットに含まれる複数の命令の命令コードから成る命令語(ICODE)が並列に発行され、前記複数の命令が並列に実行され、前記命令語はフォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを指定するフィールドを個々の命令コードに有する前記命令を1個以上含む。
これにより、1命令語が複数の命令によって構成されるVLIWプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化によるさらなる性能向上を図ることができる。VLIWの1命令語に含まれる複数の命令ごとに独立に、フォワーディングを禁止するか許可するか、さらに、許可する場合にどのパイプラインステージをフォワーディング元とするかを自由に指定することができるためである。
〔6〕<フォワーディングのオン/オフが指定可能なプロセッサ>
本願において開示される代表的な実施の形態は、命令セットに含まれプログラムに従って順次発行される命令をパイプライン方式で実行するプロセッサであって、以下のように構成される。
前記命令をフェッチするフェッチ回路(IR)と、複数のレジスタを含むレジスタファイル(REGF)と、フォワーディングセレクタ(FSEL)と、処理実行回路(EXEC)と、前記フェッチされた命令に基づいて前記処理実行回路を制御するプロセッサ制御回路(CTRL)とを備える。
前記命令セットは、レジスタ格納命令とレジスタ参照命令とを含む。前記レジスタ格納命令は、当該命令によって指定される処理を前記処理実行回路に実行させた結果を、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のデスティネーションオペランド(rd)で指定されるレジスタに格納させる命令である。前記レジスタ参照命令は、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のソースオペランド(rs、rt)で指定されるレジスタに格納されるデータを参照して、当該命令によって指定される処理を前記処理実行回路に実行させる命令である。一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定可能なフィールド(f)を命令コードに含む。
前記プロセッサ制御回路は、前記フェッチされた命令をデコードする命令デコーダ(IDE)と、前記命令デコーダによるデコード結果を保持する複数のパイプラインレジスタ(OP−DE,OP−RR,FWD−DE,SRC−DE,DST−DE,DST−RR,DST−EX)と、フォワーディング制御回路(FWDCNT)とを備える。前記命令デコーダは、前記フェッチされた命令をデコードして、前記命令の実行コードを出力する。前記命令デコーダは、前記命令が前記レジスタ格納命令であるときにデスティネーションレジスタを指定するデスティネーションオペランドコードを出力する。前記命令デコーダは、前記命令が前記レジスタ参照命令であるときにソースレジスタを指定するソースオペランドコードを出力する。前記命令デコーダは、前記命令がフォワーディングを禁止するか許可するかが指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果を出力する。前記複数のパイプラインレジスタは、前記デスティネーションオペランドコードをパイプラインステージごとに保持する(DST−DE,DST−RR,DST−EX)。
前記フォワーディング制御回路は、フォワーディングを禁止するか許可するかを指定可能なフィールドのデコード結果に基づいて、前記フォワーディングセレクタを制御する。前記フォワーディング制御回路は、フォワーディングが禁止されるときは、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させる。前記フォワーディング制御回路は、フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインステージから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる。
これにより、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。ここで、処理実行回路(EXEC)は、算術演算回路(ALU)、乗算回路(MUL)、バレルシフタ(SFT)などの演算回路、または、ロード/ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等であり得る。
〔7〕<VLIW>
項6において、前記プロセッサは、前記処理実行回路をN個(Nは任意の自然数)(EXEC1〜3)備え、前記命令セットに含まれる前記N個の命令を1語に含む命令語を対応する処理実行回路により並列に実行可能とされる。
前記N個のうちのM個(MはN以下の任意の自然数)の処理実行回路(EXEC1〜3)には、それぞれの入力数に対応する数のフォワーディングセレクタ(FSEL−S1〜S3,FSEL−T1〜T3)がそれぞれ接続される。
前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記N個の命令を並列にデコードして、前記N個の処理実行回路のそれぞれに対応するデコード結果を出力する。前記M個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果が含まれる。
前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路(FWDCNTS1〜S3,FWDCNTT1〜T3)を備え、前記M個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する。
これにより、1命令語が複数の命令によって構成されるVLIWプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。VLIWの1命令語に含まれる複数の命令ごとに独立に、フォワーディングを禁止するか許可するかを指定することができるためである。上記M個の処理実行回路は、フォワーディングのオン/オフ制御が可能なスロットであり、他のN−M個の処理実行回路はフォワーディングのオン/オフ制御を採用していないスロットである。全てのスロットにフォワーディングのオン/オフ制御を採用することにより自由度は向上する反面、回路規模は大きくなる一方、一部(M個)に制限することにより、フォワーディングのオン/オフ制御を行う命令は、当該スロット以外には配置することができないという制約が発生するが、回路規模の増大は抑えられる。
ここで、処理実行回路(EXEC1〜3)は、項6と同様に、算術演算回路(ALU)、乗算回路(MUL)、バレルシフタ(SFT)などの演算回路、または、ロード/ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等であり得る。処理実行回路(EXEC1〜3)は、すべてのスロットに任意にその機能が指定される多機能の処理実行回路をすべてのスロットに搭載してもよいし、上記に例示されるような単純な機能又は単一の機能を持つ処理実行回路を各スロットに適宜搭載しても良い。前者のように、すべてのスロットに多機能の処理実行回路を搭載すると、回路規模が大きくなるがプログラミングの自由度は最大となる一方、後者のように構成すると、プログラミングの自由度はある程度制限されるが回路規模は小さく抑えることができる。両者の中間的な選択肢として、多機能の処理実行回路と単純な機能又は単機能の処理実行回路とを混在させてもよい。
〔8〕<他のスロットからのフォワーディング>
項7において、前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持する(DST−DE1〜3,DST−RR1〜3,DST−EX1〜3)。
前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路(FWDCNTS1〜S3,FWDCNTT1〜T3)を備える。前記M個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される1個又は複数のフォワーディングセレクタ(FSEL−S1〜S3,FSEL−T1〜T3)に対して、以下の制御を行う。フォワーディングが禁止されるとき、前記フォワーディング制御回路は、前記1個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させる。フォワーディングが許可されるとき、前記フォワーディング制御回路は、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記1個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較する。前記フォワーディング制御回路は、その結果、一致するパイプラインステージから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる。
これにより、フォワーディングのオン/オフ制御を採用していない上記N−M個のスロットからもフォワーディングを可能とすることができる。
〔9〕<フォワーディング元を指定するフィールドを含む命令>
項6において、前記一部又は全てのレジスタ参照命令に代えて又は加えて、一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを表すフォワーディング元を指定可能なフィールド(fsrc)を命令コードに含む。
前記命令デコーダは、前記フェッチされた命令がフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果をさらに出力する。
前記フォワーディング制御回路は、当該デコード結果に基づいて、前記フォワーディングセレクタを制御する。フォワーディングが禁止されるとき、前記フォワーディング制御回路は、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させる。前記フォワーディング元が指定されるとき、前記フォワーディング制御回路は、前記複数のパイプラインレジスタの指定されたパイプラインステージに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる。
これにより、項4と同様に、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。
〔10〕<VLIW>
項9において、前記プロセッサは、前記処理実行回路をN個(Nは任意の自然数)(EXEC1〜3)備え、前記命令セットに含まれる前記N個の命令を1語に含む命令語を対応する処理実行回路により並列に実行可能とされる。
前記N個のうちのM個(MはN以下の任意の自然数)の処理実行回路(EXEC1〜3)には、それぞれの入力数に対応する数のフォワーディングセレクタ(FSEL−S1〜S3,FSEL−T1〜T3)がそれぞれ接続される。
前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記N個の命令を並列にデコードして、前記N個の処理実行回路のそれぞれに対応するデコード結果を出力する。前記M個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果またはフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドのデコード結果のうちの一方または両方が含まれる。
前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路(FWDCNTS1〜S3,FWDCNTT1〜T3)を備え、前記M個のフォワーディング制御回路のそれぞれは、前記デコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する。
これにより、項7と同様に、1命令語が複数の命令によって構成されるVLIWプロセッサにおいて、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。さらに、項4、項9と同様に、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。
〔11〕<他のスロットからのフォワーディング>
項10において、前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持する(DST−DE1〜3,DST−RR1〜3,DST−EX1〜3)。
前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路(FWDCNTS1〜S3,FWDCNTT1〜T3)を備える。前記M個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するか前記フォワーディング元が指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される1個又は複数のフォワーディングセレクタ(FSEL−S1〜S3,FSEL−T1〜T3)に対して、以下の制御を行う。
フォワーディングが禁止されるとき、前記フォワーディング制御回路は、前記1個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させる。
フォワーディングが許可されるとき、前記フォワーディング制御回路は、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記1個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較する。前記フォワーディング制御回路は、その結果、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる。
前記フォワーディング元が指定されるときは、前記N個の処理実行回路に対応してパイプラインステージごとに保持されるデスティネーションオペランドコードのうち、前記フォワーディング元が指定されるパイプラインステージのパイプラインレジスタに保持されるデスティネーションオペランドコードと、前記フォワーディングセレクタに対応する前記ソースオペランドコードとを比較する。前記フォワーディング制御回路は、その結果、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる。
これにより、フォワーディングのオン/オフ制御を採用していない上記N−M個のスロットからもフォワーディングを可能とすることができる。
〔12〕<LSI(Large Scale Integrated circuit)>
項6から項11のうちのいずれか1項において、前記プロセッサは単一の半導体基板上に形成される。
これにより、プロセッサが単一の半導体チップに集積され、実装面積、消費電力、コストなどが低減される。
〔13〕<プログラムコード変換(最適化)装置>
本願において開示される代表的な実施の形態は、命令セットに含まれる複数の命令によって構成され、プロセッサによって実行されるプログラムのプログラムコードを変換するプログラムコード変換装置であって、以下のように構成される。
前記プロセッサは、複数のレジスタで構成されるレジスタファイル(REGF)と処理実行回路(EXEC)とを含み、前記レジスタファイルを参照するレジスタリードステップ(RR)と前記レジスタファイルに値を書き込むライトバックステップ(WB)を含むパイプラインで構成される。
前記命令セットは、レジスタ参照命令とレジスタ格納命令とレジスタ移動命令とを含む。
前記レジスタ参照命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を、前記レジスタリードステップで参照して、当該命令によって規定される処理を前記プロセッサに実行させるための命令である。
前記レジスタ格納命令は、当該命令によって規定される処理を前記プロセッサに実行させた結果を、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のデスティネーションオペランドで指定されるレジスタに、前記レジスタリードステップから前記パイプラインの段数で規定される遅延量(D)だけ遅延された前記ライトバックステップで格納するための命令である。
前記レジスタ移動命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を前記レジスタリードステップで読み出して、当該命令のデスティネーションオペランドで指定されるレジスタに前記ライトバックステップで書き込むための命令である。
全てまたは一部の前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定するフォワーディング無効フラグ(f)をオペランドにさらに含む。前記フォワーディング無効フラグによりフォワーディングが禁止されたときには前記プロセッサにより前記レジスタリードステップに前記レジスタファイルを参照させる。前記フォワーディング無効フラグによりフォワーディングが許可されたときには、前記プロセッサが前記レジスタ格納命令又は前記レジスタ移動命令を実行することにより前記デスティネーションオペランドで指定されるレジスタにデータを書き込むパイプラインの途中のステージから、前記ソースオペランドで指定されるレジスタに格納される値を参照させる。
前記プログラムコード変換装置は、以下の各ステップを実行可能に構成される。
前記命令セットに含まれる複数の命令によって構成される前記プログラムコードからレジスタ移動命令(M)を探索する(S4)。
前記探索で発見したレジスタ移動命令のソースオペランド(RS)で指定されるレジスタをデスティネーションオペランドで指定するレジスタ格納命令(A)を抽出する(S5)
前記探索で発見した前記レジスタ移動命令のデスティネーションオペランド(RD)で指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令(X)について、前記レジスタ格納命令から前記遅延量(D)以内の実行ステップで実行される場合には、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換える(S7)。
これにより、項1〜項12に規定されるプロセッサに実行させるプログラムにおいて、ソフトウェアパイプライン化による性能向上を図るための最適化を行うことができる。
〔14〕<フォワーディング可能なステップへの命令の移動>
項13において、前記プログラムコード変換装置は、前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令(X)について、以下の処理を実行する。前記レジスタ格納命令から前記遅延量(D)より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断し、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを許可する指定を行ったレジスタ参照命令に置き換える(S7)。
これにより、フォワーディングをより有効に利用することができ、さらなる性能向上を図ることができる。
〔15〕<レジスタ移動命令の削除>
項14において、前記プログラムコード変換装置は、前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続の全てのレジスタ参照命令について、前記レジスタ格納命令から前記遅延量より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断する。その結果、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換える(S7)。さらに前記全てのレジスタ参照命令が、前記遅延量以内に実行される実行ステップに移動されたときには、前記探索で発見した前記レジスタ移動命令を前記プログラムから削除する(S8)。
これにより、フォワーディングをより有効に利用することができ、さらなる性能向上を図ることができる。
〔16〕<VLIW>
項13から項15のうちのいずれか1項において、前記プロセッサは、前記処理実行回路をN個(Nは任意の自然数)(EXEC1〜3)備え、前記命令セットに含まれる前記N個の命令を1語に含む命令語を対応する処理実行回路により並列に実行可能である。
これにより、1命令語が複数の命令によって構成されるVLIWプロセッサにおいて、フォワーディングをより有効に利用することができ、さらなる性能向上を図ることができる。
〔17〕<コンパイラ>
項13から項16のうちのいずれか1項において、前記プログラムコード変換装置は、高級言語で記述されたプログラムから、前記命令セットに含まれる複数の命令によって構成される前記プログラムコードを生成する。
これにより、項13〜項16の効果を奏することができるコンパイラを提供することができる。
〔18〕<プログラムコード変換(最適化)ソフトウェア>
本願において開示される一つの実施の形態は、コンピュータによって実行されることにより、項13から項17のうちのいずれか1項に記載されるプログラムコード変換装置として機能する、ソフトウェアである。
これにより、項13〜項17の効果を奏することができるプログラムコード変換(最適化)装置を実現するためのソフトウェアを提供することができる。
2.実施の形態の詳細
実施の形態について更に詳述する。
〔実施形態1〕<フォワーディングのオン/オフが指定可能なプロセッサ>
図1は、フォワーディングのオン/オフが命令ごとに指定可能なプロセッサの基本的な構成例を示すブロック図である。本実施形態1に係るプロセッサ1は、フェッチ回路IRと、レジスタファイルREGFと、フォワーディングセレクタFSELと、処理実行回路EXECと、フェッチされた命令に基づいて処理実行回路EXECを制御するプロセッサ制御回路CTRLとを備える。処理実行回路EXECは、例えば、算術演算回路ALU、乗算回路MUL、バレルシフタSFTなどの演算回路、または、ロード/ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等である。多種類の処理を実行可能な多機能の回路を処理実行回路EXECとして実装し、命令コードによって指定されるいずれかの処理が実行されるように構成しても良い。プロセッサ1は、図示が省略された、主にインストラクションメモリとして機能する不揮発性メモリ、主にデータメモリやワークメモリとして機能するRAM(Random Access Memory)、割り込み制御回路、ダイレクトメモリコントローラ、周辺モジュール、それらを互いに結合するバスなどを含んで構成されてもよい。これらの回路は、特に制限されないが例えば、公知のCMOS(Complementary Metal-Oxide-Semiconductor field effect transistor)LSIの製造技術を用いて、シリコンなどの単一半導体基板上に形成される。プロセッサ1が単一の半導体チップに集積されることにより、実装面積、消費電力、コストなどが低減される。また、図示されるプロセッサの中核部分を複数組備えても良い。図1に示されるブロック図では、ブロック間の配線には多数の信号配線からなるバス配線が含まれるが、表記上はバス記述が省略されている。この点は本願明細書が参照する他の図面に記載されるブロック図についても同様である。
プロセッサ1によって実行される命令の命令セットは、レジスタ参照命令とレジスタ格納命令とを含む。レジスタ参照命令とは、命令の実行に当たってレジスタファイルREGFからデータを読み込む命令であって、ソースオペランドを含む。演算命令の他、ロード命令、レジスタを参照する分岐命令などが含まれる。レジスタ格納命令とは、命令を実行した結果をレジスタファイルREGFに格納する(書き込む)命令であって、デスティネーションオペランドを含む。演算命令やストア命令の他、レジスタ間接分岐命令のうちレジスタ値のポストインクリメント、プリインクリメントなどにる更新を伴う命令が含まれる。
図2は、図1のプロセッサで実行される命令コードの構成例を示す説明図である。命令コードは、オペコードフィールドopcode、フォワーディング無効情報フィールドf、第1ソースオペランドフィールドrs、第2ソースオペランドフィールドrt、及びデスティネーションオペランドフィールドrdを含む。オペコードフィールドopcodeは、当該命令によって処理実行回路EXECに実行させる処理を指定するフィールドである。フォワーディング無効情報フィールドfは、フォワーディングを禁止するか許可するか(フォワーディングオフ/オン)を指定するフィールドである。第1ソースオペランドフィールドrsと第2ソースオペランドフィールドrtは、当該命令によって処理実行回路EXECに実行させる処理のために、レジスタファイルREGFから入力するデータが格納されているレジスタ名或いはレジスタ番号を指定するオペランドである。また、デスティネーションオペランドフィールドrdは、その処理結果を格納するべき、レジスタファイルREGFのレジスタ名或いはレジスタ番号を指定するオペランドである。プロセッサ1の命令セットには、ソースオペランドとデスティネーションオペランドの数が上述に例示されたそれぞれ2個と1個の命令以外に、ソースオペランドがない命令や3個以上の命令、デスティネーションオペランドがない命令や2個以上の命令を含んでいてもよい。ソースオペランドを少なくとも1個含む命令は、フォワーディング無効情報フィールドfをさらに含んでいてもよい。図2に例示されるように、ソースオペランドとデスティネーションオペランドの両方を含む命令は、上述のレジスタ参照命令に分類されると同時に、レジスタ格納命令にも分類される。
図1の説明に戻る。
プロセッサ1は、パイプライン動作する。図1には、プロセッサ1が、デコード(DE)ステージ、レジスタリード(RR)ステージ、エグゼキューション(EX)ステージ及びライトバック(WB)ステージの4段パイプラインで構成される例を示されるが、パイプライン段数は任意に変更可能である。図1に例示されるプロセッサ1は、パイプラインレジスタP−RRとP−EXとを備える。パイプラインレジスタP−RRは、パイプラインのレジスタリード(RR)ステージにおいて、レジスタファイルREGFから読み出されたデータを保持するレジスタであり、パイプラインレジスタP−EXは、パイプラインのエグゼキューション(EX)ステージにおいて、処理実行回路EXECから出力されたデータを保持するレジスタである。フォワーディングセレクタFSELには、レジスタファイルREGFから読み出されたデータ、処理実行回路EXECから出力されたデータ、及び、パイプラインレジスタP−EXから出力されるデータが入力されており、プロセッサ制御回路CTRLによる制御の結果、そのうちの1つが選択されて、パイプラインレジスタP−RRに入力される。フォワーディングとは、先行する別の命令による処理実行回路EXECからの出力が、ライトバック(WB)ステージにおいてレジスタファイルREGFに書き込まれるよりも前のパイプラインステージに保持されている段階で、そのデータを必要とする後続命令のレジスタリード(RR)ステージにおいて、パイプラインレジスタP−RRに入力する動作である。図1のフォワーディングセレクタFSELは、プロセッサ制御回路CTRLによる制御の結果、フォワーディングが禁止される場合には、レジスタリード(RR)ステージにおいて、レジスタファイルREGFから読み出されたデータを、パイプラインレジスタP−RRに入力する。一方、フォワーディングが許可される場合には、フォワーディングセレクタFSELは、レジスタリード(RR)ステージにおいて処理実行回路EXECから出力されたデータ又はエグゼキューション(EX)ステージにおいてパイプラインレジスタP−EXから出力されたデータを、パイプラインレジスタP−RRに入力する。詳しくは後述する。
プロセッサ制御回路CTRLは、フェッチされた命令をデコードする命令デコーダIDEと、命令デコーダIDEによるデコード結果を保持する複数のパイプラインレジスタOP−DE,OP−RR,FWD−DE,SRC−DE,DST−DE,DST−RR,DST−EXと、フォワーディング制御回路FWDCNTとを備える。
命令デコーダIDEは、フェッチされた命令をデコードして、命令の実行コードを出力する。出力される実行コードには、例えば、オペコードとフォワーディング無効情報とソースオペランドコードとデスティネーションオペランドコードとが含まれる。パイプラインレジスタOP−DEとOP−RRは、それぞれデコード(DE)ステージとレジスタリード(RR)ステージにおいてオペコードを保持するパイプラインレジスタである。パイプラインレジスタFWD−DEは、デコード(DE)ステージにおいてフォワーディング無効情報INVFWDを保持するパイプラインレジスタである。SRC−DEはデコード(DE)ステージにおいてソースオペランドコードRSを保持するパイプラインレジスタである。パイプラインレジスタDST−DEとDST−RRとDST−EXは、デスティネーションオペランドコードを、デコード(DE)ステージ、レジスタリード(RR)ステージ及びエグゼキューション(EX)ステージのパイプラインステージごとに保持するパイプラインレジスタである。パイプラインレジスタOP−RRに保持されるオペコードは、処理実行回路EXECに供給され、次のエグゼキューション(EX)ステージにおける処理実行回路EXECによる処理の内容を制御する。パイプラインレジスタSRC−DEに保持されるソースオペランドコードRSは、レジスタファイルREGFに供給され、レジスタリード(RR)ステージにおいてソースオペランドコードによって指定されるレジスタ名(又はレジスタ番号)のレジスタからデータを読み出し、フォワーディングセレクタFSELを介して、レジスタリード(RR)ステージのパイプラインレジスタに供給する。パイプラインレジスタDST−EXに保持されるデスティネーションオペランドコードDST−EX1は、レジスタファイルREGFに供給されDST−EX1によって指定されるレジスタ名(又はレジスタ番号)のレジスタに、ライトバック(WB)ステージにおいて、処理実行回路EXECの実行結果を書き込む。
フォワーディング制御回路FWDCNTは、フォワーディングを禁止するか許可するかを指定可能なフィールドfのデコード結果に基づいて、フォワーディングセレクタFSELを制御する。フォワーディング制御回路FWDCNTは、フォワーディングが禁止されるときは、フォワーディングセレクタFSELにより、ソースオペランドコードで指定されるレジスタの値をレジスタファイルREGFから読み出して処理実行回路EXECに供給させる。フォワーディング制御回路FWDCNTは、フォワーディングが許可されるときは、パイプラインレジスタDST−DEとDST−RRとDST−EXにパイプラインステージごとに保持されるデスティネーションオペランドコードと、パイプラインレジスタSRC−DEに保持されるソースオペランドコードとを比較する。一致するコードがあれば、一致するパイプラインステージから処理実行回路EXECへのフォワーディングを行う。即ち、レジスタファイルREGFへのライトバック(WB)を待つことなく、パイプラインの途中のステップの値(処理実行回路EXECの出力値そのものやパイプラインレジスタP−EXの値)を、フォワーディングセレクタFSELを介して、処理実行回路EXECのパイプラインレジスタP−RRに供給する。
図3は、プロセッサ1に搭載されるフォワーディングセレクタFSELの構成例を示すブロック図であり、図4は、フォワーディング制御回路FWDCNTの機能の一例を示すフローチャートである。フォワーディングセレクタFSELには、レジスタファイルREGFから読み出されたデータ、処理実行回路EXECのライトバック(WB)ステージからのデータ(パイプラインレジスタP−EXの出力)、及び、処理実行回路EXECのエグゼキューション(EX)ステージからのデータ(処理実行回路EXECの出力値そのもの)が入力されている。フォワーディングセレクタFSELは、フォワーディング制御回路FWDCNTから供給される選択制御信号FSELSに基づいて、上記入力されるデータのうちの1つを選択して、処理実行回路EXECのパイプラインレジスタP−RRに書き込む。フォワーディング制御回路FWDCNTは、フォワーディング無効情報INVFWDが1のとき(S10)、即ち、フォワーディングが禁止されるときには、選択制御信号FSELS=0として(S20)、フォワーディングセレクタFSELにレジスタファイルREGFから読み出されたデータを選択してパイプラインレジスタP−RRに書き込ませるように制御する。フォワーディング制御回路FWDCNTは、フォワーディング無効情報INVFWDが0のとき(S10)、即ち、フォワーディングが許可されるときには、ソースオペランドコードRSとパイプラインレジスタDST−RRに保持されるDST−RR1とを比較し(S11)、一致なら選択制御信号FSELS=2とする(S21)。不一致の場合は、次にパイプラインレジスタDST−EXに保持されるDST−EX1と比較し(S12)一致なら選択制御信号FSELS=1とする(S22)が、更に不一致の場合には、選択制御信号FSELS=0とする(S23)。なお、フォワーディング無効情報INVFWDや選択制御信号FSELSに割り付ける数値の意味は任意であって、ここに例示するのは一例に過ぎない。
これにより、レジスタファイルREGFに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。
<VLIWプロセッサ>
ここまでに説明した実施の形態をVLIWプロセッサに適用すると、より好適である。
図5は、フォワーディングのオン/オフが命令ごとに指定可能なプロセッサのVLIWによる構成例を示すブロック図である。VLIWプロセッサ2は、フェッチ回路IRと、プロセッサ制御回路CTRLと、3スロットの処理実行回路EXEC1〜3と、レジスタファイルREGFとを備える。処理実行回路EXEC1〜3は、それぞれ、入力部に2個ずつのフォワーディングセレクタFSEL−S1とFSEL−T1、FSEL−S2とFSEL−T2、及び、FSEL−S3とFSEL−T3を備える。さらに、パイプラインを構成するために、処理実行回路EXEC1〜3は、それぞれ、入力部に2個ずつのパイプラインレジスタP−RR−S1とP−RR−T1、P−RR−S2とP−RR−T2、及び、P−RR−S3とP−RR−T3を備え、出力部にパイプラインレジスタP−EX1、P−EX2及びP−EX3を備える。処理実行回路EXEC1〜3は、例えば、算術演算回路ALU、乗算回路MUL、バレルシフタSFTなどの演算回路、または、ロード/ストア回路などのメモリアクセス回路、或いは、ブランチ制御回路等であり、多種類の処理を実行可能な多機能の回路を実装し、命令コードによって指定されるいずれかの処理が実行されるように構成しても良い。3スロットの全てに、全ての機能を実行可能な処理実行回路を配置しても良いし、単機能又は実行可能な機能の種類が限定された処理実行回路を、個々のスロットに適宜配置しても良い。3スロットの全てに、全ての機能を実行可能な処理実行回路を配置すると、回路規模は大きくなるものの、実行可能な命令の種類がスロットに依らず任意となるため、プログラミングの自由度が高くなり、処理に必要なステップ数を抑えることができる。一方、単機能又は実行可能な機能の種類が限定された処理実行回路を、個々のスロットに適宜配置すると、回路規模が抑えられる。図5には3スロットの例が示されるが、スロット数は任意である。VLIWプロセッサ2は、図示が省略された、主にインストラクションメモリとして機能する不揮発性メモリ、主にデータメモリやワークメモリとして機能するRAM、割り込み制御回路、ダイレクトメモリコントローラ、周辺モジュール、それらを互いに結合するバスなどを含んで構成されてもよい。これらの回路は、特に制限されないが例えば、公知のCMOSLSIの製造技術を用いて、シリコンなどの単一半導体基板上に形成される。VLIWプロセッサ2が単一の半導体チップに集積されることにより、実装面積、消費電力、コストなどが低減される。
フェッチ回路IRは、3個の命令コードを1語に含む長い命令語(VLIW)をフェッチし、3命令を並列にプロセッサ制御回路CTRLに供給する。プロセッサ制御回路CTRLは供給された3命令を並列にデコードして、3スロットの処理実行回路EXEC1〜3を並列動作させる。処理実行回路EXEC1〜3とそれぞれに接続されるパイプラインレジスタの動作は、図1を引用した上述の説明と同様であるので、説明を省略する。また、処理実行回路EXEC1〜3の制御信号、レジスタファイルREGFの読み出し及び書き込み制御信号も、図1と同様であるが、図5には図示が省略されている。
図6は、VLIWプロセッサ2で実行される命令語の構成例を示す説明図である。VLIWプロセッサ2で実行される命令語は、複数の命令コードを1語に含む長い命令語であり、スロット1〜3にそれぞれ対応する3個の命令コードを含む。各命令コードは、実装される処理実行回路EXEC1〜3で実行可能な処理に合せて規定される。図5ではスロット1〜3の全ての処理実行回路EXEC1〜3が、それぞれ2個のレジスタ入力と、1個のレジスタ出力と、フォワーディングオン/オフ機能を持つ例が示される。スロット1〜3に対応する3個の命令コードは、それぞれ、オペコードフィールドopcode、フォワーディング無効情報フィールドf、第1ソースオペランドフィールドrs、第2ソースオペランドフィールドrt、及びデスティネーションオペランドフィールドrdを含む。
図7は、VLIWプロセッサ2に搭載されるプロセッサ制御回路CTRLの構成例を示すブロック図である。プロセッサ制御回路CTRLは、フェッチされた命令をデコードする命令デコーダIDEと、命令デコーダIDEによる各スロットに対応するデコード結果をそれぞれ保持する複数のパイプラインレジスタと複数のフォワーディング制御回路とを備える。フォワーディング制御回路は、ソースオペランドの数に対応して各スロットに2個ずつ設けられている。即ち、スロット1に対応して、パイプラインレジスタOP−DE1,OP−RR1,FWD−DE1,SRCS−DE1,SRCT−DE1,DST−DE1,DST−RR1,DST−EX1と、フォワーディング制御回路FWDCNT−S1,FWDCNT−T1とが設けられている。スロット2に対応して、パイプラインレジスタOP−DE2,OP−RR2,FWD−DE2,SRCS−DE2,SRCT−DE2,DST−DE2,DST−RR2,DST−EX2と、フォワーディング制御回路FWDCNT−S2,FWDCNT−T2とが設けられている。スロット3に対応して、パイプラインレジスタOP−DE3,OP−RR3,FWD−DE3,SRCS−DE3,SRCT−DE3,DST−DE3,DST−RR3,DST−EX3と、フォワーディング制御回路FWDCNT−S3,FWDCNT−T3とが設けられている。
命令デコーダIDEは、フェッチされた命令をデコードして、各スロットに対応する、オペコードとフォワーディング無効情報とソースオペランドコードとデスティネーションオペランドコードとを出力する。パイプラインレジスタOP−DE1〜3とOP−RR1〜3は、それぞれデコード(DE)ステージとレジスタリード(RR)ステージにおいて各スロットにおけるオペコードを保持する。パイプラインレジスタFWD−DE1〜3は、デコード(DE)ステージにおいて各スロットにおけるフォワーディング無効情報INVFWD1〜3を保持する。SRCS−DE1〜3とSRCT−DE1〜3はデコード(DE)ステージにおいて各スロットにおけるソースオペランドコードRSとRTをそれぞれ保持する。パイプラインレジスタDST−DE1〜3とDST−RR1〜3とDST−EX1〜3は、各スロットにおけるデスティネーションオペランドコードを、デコード(DE)ステージ、レジスタリード(RR)ステージ及びエグゼキューション(EX)ステージのパイプラインステージごとに保持する。パイプラインレジスタOP−RR1〜3に保持されるオペコードは、次のエグゼキューション(EX)ステージにおける処理実行回路EXEC1〜3による処理の内容を制御するための制御信号OPEX1〜3として、処理実行回路EXEC1〜3にそれぞれ供給される。パイプラインレジスタSRCS−DE1〜3に保持されるソースオペランドコードRS1〜3と、SRCT−DE1〜3に保持されるソースオペランドコードRT1〜3は、それぞれレジスタファイルREGFに対して、読み出し対象のレジスタ名(又はレジスタ番号)を指定するための制御信号RRS1〜3とRRT1〜3として供給される。パイプラインレジスタDST−EX1〜3に保持されるデスティネーションオペランドコードDST−EX1〜3は、レジスタファイルREGFに対して、処理実行回路EXEC1〜3の実行結果のライトバック(WB)ステージにおける書き込みを制御する制御信号RW1〜3として供給される。
フォワーディング制御回路FWDCNTS1〜S3とFWDCNTT1〜T3は、それぞれスロット1〜3において、ソースオペランドrsとrtそれぞれに対応して設けられ、フォワーディングを禁止するか許可するかを指定可能なフィールドfのデコード結果に基づいて、フォワーディングセレクタFSEL−S1〜S3とFSEL−T1〜T3を制御する。フォワーディング制御回路FWDCNTS1〜S3とFWDCNTT1〜T3は、フォワーディングが禁止されるときには、フォワーディングセレクタFSEL−S1〜S3とFSEL−T1〜T3により、ソースオペランドコードで指定されるレジスタの値をレジスタファイルREGFから読み出して処理実行回路EXEC1〜3に供給させる。フォワーディング制御回路FWDCNTS1〜S3とFWDCNTT1〜T3は、フォワーディングが許可されるときは、SRCS−DE1〜3とSRCT−DE1〜3とにそれぞれ保持されるソースオペランドコードと、DST−RR1〜3とDST−EX1〜3に保持される、スロット1〜3の各パイプラインステージのデスティネーションオペランドコードとをそれぞれ比較する。一致するコードがあれば、一致するスロットのパイプラインステージから処理実行回路の対応するソース入力へのフォワーディングを、対応するフォワーディングセレクタを介して行う。
図8は、VLIWプロセッサ2に搭載されるフォワーディングセレクタFSEL−S1〜S3とFSEL−T1〜T3それぞれの構成例を示すブロック図であり、図9は、フォワーディング制御回路FWDCNTS1〜S3の機能の一例を示すフローチャートである。フォワーディングセレクタFSEL−S1〜S3とFSEL−T1〜T3はすべて同じ構成であり、フォワーディング制御回路FWDCNTS1〜S3もすべて同じ構成である。フォワーディング制御回路FWDCNTS1〜S3は、それぞれスロット1〜3において、ソースオペランドrsに対応して設けられ、フォワーディングセレクタFSEL−S1〜S3に選択制御信号RSELRSを出力する。フォワーディングセレクタFSEL−S1〜S3には、フォワーディングされないときのレジスタファイルREGFからのデータと、フォワーディング対象のデータとして、スロット1〜3のEXステージからのデータとスロット1〜3のWBステージからのデータとが入力されている。フォワーディングセレクタFSEL−S1〜S3は、フォワーディング制御回路FWDCNTS1〜S3から供給される選択制御信号RSELRSに基づいて、そのうちの1つを選択し、パイプラインレジスタP−RR−S1〜S3を介して処理実行回路EXEC1〜3のrs側ソース入力に供給する。処理実行回路EXEC1〜3のrt側に対応して設けられる、フォワーディング制御回路FWDCNTT1〜T3もrs側の上記フォワーディング制御回路FWDCNTS1〜S3とすべて同じ構成であり、フォワーディングセレクタFSEL−T1〜T3に選択制御信号RSELRTを出力する。フォワーディングセレクタFSEL−T1〜T3にも、フォワーディングされないときのレジスタファイルREGFからのデータと、フォワーディング対象のデータとして、スロット1〜3のEXステージからのデータとスロット1〜3のWBステージからのデータとが入力されている。フォワーディングセレクタFSEL−T1〜T3は、フォワーディング制御回路FWDCNTT1〜T3から供給される選択制御信号RSELRTに基づいて、そのうちの1つを選択し、パイプラインレジスタP−RR−T1〜T3を介して処理実行回路EXEC1〜3のrt側ソース入力に供給する。
図9に示されるように、フォワーディング制御回路FWDCNTS1〜S3は、フォワーディング無効情報INVFWDが1のとき(S30)には、選択制御信号FSELS=0として(S40)、フォワーディングセレクタFSEL−S1〜S3にレジスタファイルREGFから読み出されたデータを選択してパイプラインレジスタP−RR−S1〜S3に書き込ませるように制御する。フォワーディング制御回路FWDCNTS1〜S3は、フォワーディング無効情報INVFWDが0のときには、ソースオペランドコードRSとパイプラインレジスタDST−RR1〜3に保持されるDST−RR1〜3とをそれぞれ順次比較し(S31〜S33)、DST−EX1〜3に保持されるDST−EX1〜3とをそれぞれ順次比較する(S34〜S36)。その結果、フォワーディング制御回路FWDCNTS1〜S3は、一致するパイプラインレジスタに対応する値を選択制御信号FSELSから出力する(S41〜S47)。即ち、ソースオペランドコードRSとパイプラインレジスタDST−RR1に保持されるDST−RR1とを比較し(S31)、一致なら選択制御信号FSELS=6とする(S41)。不一致の場合は、RSとDST−RR2に保持されるDST−RR2とを比較し(S32)、一致ならFSELRS=5とする(S42)。不一致の場合は、RSとDST−RR3に保持されるDST−RR3とを比較し(S33)、一致ならFSELRS=4とする(S43)。不一致の場合は、ソースオペランドコードRSとパイプラインレジスタDST−EX1に保持されるDST−EX1とを比較し(S34)、一致なら選択制御信号FSELS=3とする(S44)。不一致の場合は、RSとDST−EX2に保持されるDST−EX2とを比較し(S35)、一致ならFSELRS=2とする(S45)。不一致の場合は、RSとDST−EX3に保持されるDST−EX3とを比較し(S36)、一致ならFSELRS=1とする(S46)。更に不一致の場合には、選択制御信号FSELS=0とする(S47)。なお、フォワーディング無効情報INVFWDや選択制御信号FSELSに割り付ける数値の意味は任意であって、ここに例示するのは一例に過ぎない。図示は省略されるが、処理実行回路EXEC1〜3のrt側に対応して設けられる、フォワーディング制御回路FWDCNTT1〜T3の機能は、rs側の上記フォワーディング制御回路FWDCNTS1〜S3の機能と同様であり、フォワーディングセレクタFSEL−T1〜T3に選択制御信号RSELRTを出力する。
以上は、図5に例示されるように、3スロットの処理実行回路EXEC1〜3が全て同じ機能でそれぞれ2個のソースと1個のデスティネーションを持つ場合について説明したが、上述のように、スロットの数は任意であるし、各スロットに実装される機能も任意である。各スロットに実装される処理実行回路EXECが備えるソースの数に応じて、プロセッサ制御回路CTRLは同数のフォワーディング制御回路を備え、処理実行回路EXECに接続される同数のフォワーディングセレクタFSELを制御する。一部のスロットに、レジスタ格納命令のみの実行が可能な、ソースを持たない処理実行回路EXECが実装されてもよい。例えば、アクセスすべきアドレスが即値(イミーディエイト値)で指定されるロード命令(load immediate命令)や、書き込む値が即値で規定されるムーブ命令(move immediate命令)の場合、ソースオペランドを持たない。このような機能のみを持つ処理実行回路EXECが実装されるスロットには、フォワーディングセレクタFSELは実装されず、プロセッサ制御回路CTRLはそのスロットに対応するフォワーディング制御回路を備えない。このようなソースを持たない処理実行回路EXECもフォワーディング元としては機能し得る。図5〜図9には、任意の他のスロットからのフォワーディングを許す構成例が示されるが、実行されるソフトウェアの特徴を考慮し、或いは回路規模や配線密度の制約に基づいて、限られた範囲からのフォワーディングのみを許すように変更しても良い。
<ソフトウェアパイプライン>
VLIWプロセッサは、ソフトウェアパイプライン化に好適である。図5には紙面の制限から3スロットのVLIWプロセッサが例示され、以下に示す実施の形態では、理解を助けるために単純な例が示されるが、VLIWプロセッサに実装されるスロット数は任意であり、スロット数は多い程多数の命令ステップを含む繰り返しループをより効率的にソフトウェアパイプライン化することができる。
図10は、図5に示されるVLIWプロセッサ2で実行される、高級言語で記述されたプログラムの例を示す説明図である。ロングワードの配列変数MY_DATAの値がポインタdataで示されるアドレスに書き込まれ、係数COEFFICIENTの値がロングワード変数coefに書き込まれ、繰り返し(while)ループが起動される。ループ内では、インデックスiで示されるアドレスからデータdata[i]*を読み込んで係数coefを乗じた後、同じアドレスに格納する処理と、インデックスiを1ずつ増加させる処理とが実行される。ここで記号*はポインタを意味する。なお、この処理は、所謂リード・モディファイ・ライトであり、配列演算で多用される。
図11は、図5のプロセッサで実行される、アセンブリ言語で記述されたプログラムの例を示す説明図であり、図12は、図11のプログラムで使用されるアセンブリ言語で記述された命令の動作を示す説明図である。ロード(load)命令ldは、ソースオペランドrsとデスティネーションオペランドrdとフォワーディング無効情報invfwdとをオペランドに持ち、レジスタrsが表すアドレスからロードしレジスタrdに書き込む。ただしinvfwd==1の場合はrsはフォワーディングしない。ストア(store)命令stは、2個のソースオペランドrsとrtとフォワーディング無効情報invfwdとをオペランドに持ち、レジスタrsが表すアドレスにレジスタrtの内容をストアする。ただしinvfwd==1の場合はrtはフォワーディングするがrsはフォワーディングしない。加算(add)命令addは、2個のソースオペランドrsとrtとデスティネーションオペランドrdとをオペランドに持ち、rs+rtを計算し、演算結果をrdに書き込む。乗算(multiply)命令mulは、2個のソースオペランドrsとrtとデスティネーションオペランドrdとをオペランドに持ち、rs*rtを計算し、演算結果をrdに書き込む。ここで記号*は乗算を意味する。分岐(branch)命令brはlabelをオペランドに持ち、labelへ無条件分岐する。ムーブ(move)命令mvは、ソースオペランドrsとデスティネーションオペランドrdとをオペランドに持ち、レジスタrsのデータをレジスタrdに書き込む。
図11は、アセンブリ言語で記述されたプログラムの一例である。図10に示されるプログラムの繰り返しループが変換(コンパイル)された部分が示される。
ステップ1には、ロード(ld)命令と加算(add)命令とがマッピングされている。即ち、ロード(ld)命令と加算(add)命令とは、1語のVLIWで並列発行され、異なるスロットで並列に実行される。ロード(ld)命令により、インデックスiがマッピングされたレジスタr0が示すアドレスからデータdata[i]をレジスタr1に読み込む。加算(add)命令により、インデックスiが格納されるレジスタr0の値に、図示されない初期化ルーチンで1に初期化されているレジスタr9の値1を加算してレジスタr0に書き戻す。インデックスiのインクリメントi++である。
ステップ2には、ロード(ld)命令と加算(add)命令と乗算(mul)命令とがマッピングされている。即ち、ロード(ld)命令と加算(add)命令と乗算(mul)命令とは、1語のVLIWで並列発行され、異なるスロットで並列に実行される。ロード(ld)命令によりインデックスiがマッピングされたレジスタr0が示すアドレスからデータdata[i]をレジスタr1に読み込み、加算(add)命令によりインデックスi格納されるレジスタr0の値にレジスタr9の値(1)を加算してレジスタr0に書き戻す。このときのインデックスiは、ステップ1の加算(add)命令により既にインクリメントされた値であり、レジスタr0に書き戻される値は、さらにインクリメントされた値である。乗算(mul)命令により、ステップ1でデータdata[i]がロードされたレジスタr1の値と、図示されない初期化ルーチンで係数値COEFFICIENTに初期化されているレジスタr2の値とが乗算され、結果がレジスタr3に書き込まれる。
ステップ3には、ストア(st)命令と乗算(mul)命令と分岐(br)命令とがマッピングされている。即ち、ストア(st)命令と乗算(mul)命令と分岐(br)命令とは、1語のVLIWで並列発行され、異なるスロットで並列に実行される。ステップ1でデータdata[i]がロードされ、ステップ2でデータdata[i]とCOEFFICIENTとが乗算された結果として、レジスタr3に格納されているデータが、ストア(st)命令により、レジスタr0が示すアドレスにストアされる。ここで、ストア(st)命令に付加されているフォワーディング無効情報はINVFWD=1とされ、フォワーディングを行わない設定となっている。ストア(st)命令が参照するレジスタr0の値は、ステップ1とステップ2の加算(add)命令により、2度インクリメントされているが、その結果はいずれもライトバック(WB)ステージに到達しておらず、レジスタファイルREGFには書き込まれていない。このため、ステップ3でストア(st)命令がレジスタファイルREGFのレジスタr0を参照すると、ステップ1でロード(ld)命令が参照した値がそのまま参照される。その結果、データdata[i]とCOEFFICIENTとの積が、データdata[i]が格納されていたのと同じアドレスに書き戻される。
図13は、VLIWプロセッサ2の上記の動作を模式的に示すタイミングチャートである。縦方向にサイクル数が示され、各命令がその依存関係、即ち変数の参照関係とともに示され、合せて、レジスタファイルREGFに格納されるレジスタr0の値と、レジスタr0の値としてフォワーディング可能な値とが示される。サイクル1は、繰り返しループの最初であって、上記ステップ1に対応しており、ロード(ld)命令と加算(add)命令とが実行される。ロード(ld)命令と加算(add)命令とはともにレジスタr0の値としてx0を参照する。ロード(ld)命令の結果は次のサイクル2で乗算(mul)命令によって参照され、乗算(mul)命令の結果は次のサイクル3でストア(st)命令によって参照される。サイクル3のストア(st)命令はサイクル1のロード(ld)命令と同じレジスタr0を参照し、同じ値x0によって示されるアドレスに、乗算結果をストアする。サイクル1では加算(add)命令がレジスタr0の値として参照するx0をインクリメントしてx1を出力する。このときの加算結果であるx1は、レジスタリード(RR)ステージであるので、その加算結果x1がレジスタファイルREGFのレジスタr0に書き込まれるのは、ライトバック(WB)ステージのサイクル4である。このため、それまでのサイクルでは、加算結果x1はフォワーディング可能な値としてパイプラインレジスタP−EXなどに保持されている。サイクル2のロード(ld)命令と加算(add)命令は、繰り返しループの2回目であって、インクリメントされたインデックスiを参照する必要があるため、フォワーディングによりこの加算結果x1を参照する。サイクル2の加算(add)命令はさらに加算結果x2を出力し、これもフォワーディング可能な値としてパイプラインレジスタP−EXなどに保持される。以上のように、インデックスiを保持するレジスタr0の値がライトバック(WB)ステージで更新されるよりも以前に、次の繰り返しループを開始することができ、ソフトウェアパイプライン化される。この例でのイニシエーションインターバルは1サイクルである。このとき、ストア(st)命令に対しては、フォワーディングが無効化され、インクリメントの結果が未反映でレジスタファイルREGFに保持される値が参照されるので、リード・モディファイ・ライトの処理が適切に実行される。このように、フォワーディングを禁止するか許可するか(フォワーディングオフ/オン)を命令ごとに指定することができる。
図14は、フォワーディングのオン/オフ指定を行わない例を示す説明図である。図11に示されるアセンブリプログラムと比較して、1ステップ多い5ステップで構成されている。ステップ1とステップ2にムーブ(mv)命令が追加され、ステップ2の加算(add)命令とステップ3のブランチ(br)命令はステップ4に移動し、ステップ4のストア(st)命令はステップ5に移動している。インデックスiを保持するr0はステップ1の加算(add)命令でインクリメントされる一方、ステップ3のストア(st)命令がインデックスiの同じ値、即ちインクリメント前の値を参照する必要があるため、ステップ1のムーブ(mv)命令によってレジスタr4にコピーされ、ステップ3のストア(st)命令はこのレジスタr4を参照している。同様に、2回目の繰り返しループでは、インクリメントされたインデックスiを保持するr0の値はステップ2のロード(ld)命令で参照されステップ4でさらにインクリメントされる一方、ステップ5のストア(st)命令がインデックスiの同じ値、即ちインクリメント前の値を参照する必要がある。このため、ロード(ld)命令で参照されたインデックスiを保持するr0の値はステップ2のムーブ(mv)命令によってレジスタr5にコピーされ、ステップ5のストア(st)命令はこのレジスタr5を参照している。
以上の通り、フォワーディングのオン/オフ指定を行わない図14のプログラムでは、使用するレジスタはr0〜r5とr9の7個で、繰り返しループを構成するステップ数が4ステップである。これに対し、フォワーディングのオン/オフ指定を行う図11のプログラムでは、使用するレジスタはr0〜r3とr9の5個で、使用量を2個少なく抑え、繰り返しループを構成するステップ数が3ステップで、ステップ数を1ステップ少なく抑えることができる。このように、フォワーディングを禁止するか許可するか(フォワーディングオフ/オン)を命令ごとに指定することができるので、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。
図15は、図11と図13を引用して説明したVLIWプロセッサ2の上記の動作をより詳細に示す説明図である。縦方向に実行サイクルと各サイクルにおけるスロット1〜3の状態が示され、横方向に各パイプラインステージのVLIW命令と、プロセッサ制御部CTRLの各パイプラインレジスタ値が示される。VLIWプロセッサ2のパイプライン段数は任意であるが、デコード(DE)ステージ、レジスタリード(RR)ステージ、エグゼキューション(EX)ステージ及びライトバック(WB)ステージの4段パイプラインで構成される場合が例示される。
サイクル1では、図11のステップ1のロード(ld)命令と加算(add)命令がそれぞれスロット1とスロット2のレジスタリード(RR)ステージに送られており、図11のステップ2のロード(ld)命令と加算(add)命令と乗算(mul)命令がそれぞれスロット1とスロット2とスロット3のデコード(DE)ステージに送られている。スロット1のロード(ld)命令のソースオペランド(rs)であるr0がSRCS−DE1に、デスティネーションオペランドであるr1がDST−DE1に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=0でありフォワーディングは許可(オン)されているが、DST−RR1〜3とDST−EX1〜3に適切なフォワーディング元がないので、フォワーディングセレクタFSEL−S1の選択制御信号FSELS1=0である。スロット2の加算(add)命令のソースオペランドrsとrtであるr0とr9がSRCS−DE2とSRCT−DE2に、デスティネーションオペランドであるr0がDST−DE2に、それぞれ保持される。このときも、フォワーディング無効情報INVFWD=0でありフォワーディングは許可(オン)されているが、DST−RR1〜3とDST−EX1〜3に適切なフォワーディング元がないので、フォワーディングセレクタFSEL−S2の選択制御信号FSELS2=0である。
サイクル2では、ステップ2のロード(ld)命令と加算(add)命令と乗算(mul)命令がそれぞれスロット1とスロット2とスロット3のレジスタリード(RR)ステージに送られている。スロット1のロード(ld)命令のソースオペランド(rs)であるr0がSRCS−DE1に、デスティネーションオペランドであるr1がDST−DE1に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=0でありフォワーディングは許可(オン)されているが、DST−RR1〜3とDST−EX1〜3に適切なフォワーディング元がないので、フォワーディングセレクタFSEL−S1の選択制御信号FSELS1=0である。スロット2の加算(add)命令のソースオペランドrsとrtであるr0とr9がSRCS−DE2とSRCT−DE2に、デスティネーションオペランドであるr0がDST−DE2に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=0でありフォワーディングは許可(オン)されており、DST−RR2=r0がSRCS−DE2=r0と一致してフォワーディング元として選択され、フォワーディングセレクタFSEL−S2の選択制御信号FSELS2=5とされる。即ち、サイクル1のスロット2の加算(add)命令からの出力がまだレジスタリード(RR)ステージにある段階で、サイクル2のスロット2の加算(add)命令のソースオペランド(rs)へフォワーディングされる。スロット3の乗算(mul)命令のソースオペランドrsとrtであるr1とr2がSRCS−DE3とSRCT−DE3に、デスティネーションオペランドであるr3がDST−DE3に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=0でありフォワーディングは許可(オン)されており、DST−RR1=r1がSRCS−DE3=r1と一致してフォワーディング元として選択され、フォワーディングセレクタFSEL−S3の選択制御信号FSELS3=6とされる。即ち、サイクル1のスロット2のストア(st)命令からの出力がまだレジスタリード(RR)ステージにある段階で、サイクル2のスロット3の乗算(mul)命令のソースオペランド(rs)へフォワーディングされる。
サイクル3では、ステップ3のストア(st)命令と乗算(mul)命令がそれぞれスロット1とスロット2のレジスタリード(RR)ステージに送られている。スロット1のストア(st)命令のソースオペランドrsとrtであるr0とr3がSRCS−DE1とSRCT−DE1に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=1でありフォワーディングは禁止(オフ)されているので、ソースオペランドrsについてはフォワーディングは禁止(オフ)されているが、ソースオペランドrtについてはフォワーディングは許可(オン)されている。このため、フォワーディングセレクタFSEL−S1の選択制御信号FSELS1=0とされる。一方、フォワーディングは許可(オン)されているソースオペランドrt側については、DST−RR3=r3がSRCT−DE1=r3と一致するので、フォワーディングセレクタFSEL−T1の選択制御信号FSELT1=4とされる。即ち、サイクル2のスロット3の乗算(mul)命令からの出力がまだレジスタリード(RR)ステージにある段階で、サイクル3のスロット1のストア(st)命令のソースオペランド(rt)へフォワーディングされる。スロット2の乗算(mul)命令のソースオペランドrsとrtであるr1とr2がSRCS−DE2とSRCT−DE2に、デスティネーションオペランドであるr3がDST−DE2に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=0でありフォワーディングは許可(オン)されており、DST−RR1=r1とDST−EX1=r1とがともにSRCS−DE3=r1と一致しているので、より最近更新されたDST−RR1=r1がフォワーディング元として選択され、フォワーディングセレクタFSEL−S2の選択制御信号FSELS2=6とされる。即ち、サイクル2のスロット2のストア(st)命令からの出力がまだレジスタリード(RR)ステージにある段階で、サイクル3のスロット2の乗算(mul)命令のソースオペランド(rs)へフォワーディングされる。
サイクル4では、ステップ4のストア(st)命令がスロット1のレジスタリード(RR)ステージに送られている。スロット1のストア(st)命令のソースオペランドrsとrtであるr0とr3がSRCS−DE1とSRCT−DE1に、それぞれ保持される。このとき、フォワーディング無効情報INVFWD=1でありフォワーディングは禁止(オフ)されているので、ソースオペランドrsについてはフォワーディングは禁止(オフ)されているが、ソースオペランドrtについてはフォワーディングは許可(オン)されている。このため、フォワーディングセレクタFSEL−S1の選択制御信号FSELS1=0とされる。一方、フォワーディングは許可(オン)されているソースオペランドrt側については、DST−RR2=r3がSRCT−DE1=r3と一致するので、フォワーディングセレクタFSEL−T1の選択制御信号FSELT1=5とされる。即ち、サイクル3のスロット2の乗算(mul)命令からの出力がまだレジスタリード(RR)ステージにある段階で、サイクル4のスロット1のストア(st)命令のソースオペランド(rt)へフォワーディングされる。
以上の詳しい動作例から理解される通り、フォワーディングが実際に発生するのは、ある命令の処理結果がライトバック(WB)ステージに到達するより前のステージに残存する場合であるから、フォワーディングのオン/オフが指定される命令は、フォワーディング元のレジスタへのライトバックが実行されるよりも前のステップに配置されることによって、効果を奏する。したがって、プロセッサにおけるパイプライン段数が多い程、ソフトウェアパイプライン化による性能向上を図ることができる。
〔実施形態2〕<フォワーディング元を指定可能なプロセッサ>
実施形態1では、命令ごとにフォワーディングを禁止するか許可するかが指定可能とされるプロセッサについて説明したが、許可する場合にフォワーディング元を指定しない単純な許可に加えて、フォワーディング元の指定を伴った許可をすることができるように構成しても良い。即ち、プロセッサによって実行される命令セットに、フォワーディングを禁止するか許可するかを指定するフィールド(f)を命令コードに有する命令に代えて、又はこれに加えて、フォワーディングを禁止するかパイプラインのどのステージからのフォワーディングを許可するかを指定するフィールド(fsrc)を命令コードに有する命令が含まれるように構成するとよい。これにより、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。以下に、詳しく説明する。
図16は、実施形態2のプロセッサで実行される命令コードの構成例を示す説明図である。命令コードは、オペコードフィールドopcode、フォワーディング元指定情報フィールドfsrc、第1ソースオペランドフィールドrs、第2ソースオペランドフィールドrt、及びデスティネーションオペランドフィールドrdを含む。図2に示される、実施形態1のプロセッサで実行される命令コードの構成例との違いは、フォワーディング無効情報フィールドfに代えてフォワーディング元指定情報フィールドfsrcが含まれる点である。他のオペコードとオペランドのフィールドについては、図2を引用して説明した実施形態1における説明と同様であるので、説明を省略する。
図17は、図16の命令コードにおけるフォワーディング元指定情報フィールドについての説明図である。フォワーディング元指定情報フィールドfsrcは例えば2ビットで構成され、00は通常のフォワーディングを有効とする指定であり、01はエグゼキューション(EX)ステージからのフォワーディングを無効とする指定であり、10はエグゼキューション(EX)ステージ及びライトバック(WB)ステージからのフォワーディングを無効とする指定であり、11は入力禁止とされる。fsrc=00の通常のフォワーディングを有効とする指定は、図2におけるf=0(INVFWD=0)によるフォワーディングを許可する(フォワーディングオン)指定と同等である。fsrc=10のエグゼキューション(EX)ステージ及びライトバック(WB)ステージからのフォワーディングを無効とする指定は、図2におけるf=1(INVFWD=1)によるフォワーディングを禁止する(フォワーディングオフ)指定と同等である。プロセッサのパイプライン段数がより多い場合には、フォワーディング元指定情報フィールドfsrcを増やすことができる。これにより、各パイプラインステージからのフォワーディングの有効/無効をよりきめ細かく指定することができる。
命令セットには、図2に示されるような1ビットのフォワーディング無効情報フィールドfを持つ命令と、図17に示されるような2ビット又は3ビット以上のフォワーディング元指定情報フィールドfsrcを持つ命令と、いずれも持たない命令とを、それぞれ任意の数で含めることができる。
このような命令セットに含まれる命令を実行可能なプロセッサの構成は、図1に示されるプロセッサ1、又は、図5に示されるVLIWプロセッサ2と同様である。このとき、フォワーディングセレクタFSEL,FSEL−S1〜S3,FSEL−T1〜T3の構成も図3、図8に示される構成と同様である。プロセッサ制御回路CTRLの構成は、パイプラインレジスタFWD−DE,FW−DE1〜3が、フォワーディング元指定情報フィールドfsrcを保持するパイプラインレジスタに代わる以外は、図1、図7に示される構成と同様である。フォワーディング制御回路FWDCNT,FWDCNTS1〜S3,FWDCNTT1〜T3の機能は、フォワーディング元指定情報フィールドfsrcに基づいて、フォワーディングセレクタFSEL,FSEL−S1〜S3,FSEL−T1〜T3を制御する、選択制御信号FSELS,FSELS1〜3,FSELT,FSELT1〜3が適切に生成されるように変更される。
図18は、実施形態2のプロセッサに搭載されるフォワーディング制御回路FWDCNTS1〜S3の機能の一例を示すフローチャートである。フォワーディング制御回路FWDCNTT1〜T3も同様である。フォワーディング制御回路FWDCNTS1〜S3は、フォワーディング元指定情報fsrc==10のとき(S50)、即ち、エグゼキューション(EX)ステージ及びライトバック(WB)ステージからのフォワーディングが無効とされるときには、選択制御信号FSELS=0として(S60)とする。これにより、フォワーディングセレクタFSEL−S1〜S3は、レジスタファイルREGFから読み出されたデータを選択してパイプラインレジスタP−RR−S1〜S3に書き込むように制御され、フォワーディングは行われない。フォワーディング元指定情報fsrc==01のとき(S51)、即ち、エグゼキューション(EX)ステージからのフォワーディングが無効とされるときには、ライトバック(WB)ステージからのフォワーディングの可否のみを判定すればよいので、後述のステップS55に分岐する。フォワーディング元指定情報fsrcが10でも01でもないときは、図9に示されるのと同様のフォワーディング制御が実行される。ソースオペランドコードRSとパイプラインレジスタDST−RR1〜3に保持されるDST−RR1〜3とをそれぞれ順次比較し(S52〜S54)、DST−EX1〜3に保持されるDST−EX1〜3とをそれぞれ順次比較し(S55〜S57)、一致するパイプラインレジスタに対応する値を選択制御信号FSELSから出力する(S62〜S67)。いずれにも該当しない場合には、FSELS=0を出力する(S68)。この機能は図9に示されるステップS31〜S36及びS41〜S47の機能と同様であるので、説明を省略する。
以上のように、単純にフォワーディングを禁止するか許可するかだけではなく、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができ、自由度を高めることができる。このような命令を実行可能なプロセッサは、VLIWプロセッサとすることにより、レジスタファイルに実装されるレジスタ数を増やすことなく、ソフトウェアパイプライン化による性能向上を図ることができる。また、VLIWプロセッサでは並列に発行される複数の命令に、図2に示されるような、単純にフォワーディングを禁止するか許可するかだけを指定可能な命令と、図16に示されるような、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができる命令とを混在させることができる。それらの命令を配置できるスロットを任意とすることも、一方、一部のスロットに固定することもできる。前者により自由度が高くなり、後者により回路規模が低減される。また、実施形態1で説明したのと同様に、他の任意のスロットからのフォワーディングを許す構成とすることも、一方、一部のスロットからのフォワーディングに制限することも可能である。前者により自由度が高くなり、後者により回路規模が低減される。
〔実施形態3〕<プログラムコード変換(最適化)装置>
フォワーディングは、先に実行された命令の結果がその命令で指定されるデスティネーションレジスタに書き込まれるパイプラインステージよりも前に、そのデスティネーションレジスタを参照する命令が実行されるときに、機能する。ここで、先の命令をレジスタ格納命令、後の命令をレジスタ参照命令と呼ぶとする。実施形態1及び2では、レジスタ参照命令を、フォワーディングを禁止するか許可するかだけを指定可能な命令、又は、許可する場合にどのパイプラインステージをフォワーディング元とするかを指定することができる命令とすることにより、ソフトウェアパイプライン化による性能向上を図ることができることを示した。本実施形態3では、この技術をより積極的に利用するためのプログラムコード変換(最適化)装置について説明する。プログラムコード変換(最適化)装置は、コンパイラとアセンブラとリンカから成るプログラム開発装置の一部の機能として組み込まれる。
図19は、本実施形態3に係るプログラム開発装置の機能の一例を示すフローチャートである。プログラム開発装置の機能は、S1〜S9の各ステップを含む。ステップ1(S1)では、入力された、高級言語で記述されたプログラムに対して、その記述の字句解析を行って、中間表現レベルのプログラムに変換する。ステップ2(S2)では、その中間表現レベルのプログラムに対して所定の最適化を行う。例えば、ターゲットプロセッサがVLIWの場合には、ステップ2(S2)において、中間表現レベルのプログラムに含まれるプログラムコードを、VLIWを構成する複数のスロットのうちの適切なスロットに割り付けて実行ステップ数を最小化する、最適化が実行される。これらの機能は、公知のコンパイラに実装される機能と同様である。通常のプログラム開発装置では、ステップ2(S2)の次に、ターゲット命令変換ステップ(S9)に進み、最適化された中間表現レベルのプログラムコードを、機械語の命令コードに変換する。
本実施形態3に係るプログラム開発装置には、ステップ3(S3)が追加され、フォワーディング無効情報を利用して最適化を行う。ステップ3(S3)は、例えばステップ4(S4)〜ステップ8(S8)によって構成される。
まずステップ4(S4)において、レジスタ移動命令を探す。ここで、レジスタ移動命令とは、ソースオペランドで指定されるレジスタに格納される値をデスティネーションオペランドで指定されるレジスタに書き込む命令である。アセンブリ言語では通常ムーブ(mv)命令で表現される。
次にステップ5(S5)において、S4で抽出したレジスタ移動命令をMとし、そのソースオペランド及びデスティネーションオペランドをそれぞれRS及びRDとし、RSを定義する命令を探してAとする。命令Aは命令Mより後のステップまたはMと同じステップで実行されるレジスタ格納命令である。
次にステップ6(S6)において、RDを使用するすべての後続命令Xについて、次ステップ7(S7)を処理する。命令Xは命令Mよりも後のステップで実行されるレジスタ参照命令である。
ステップ7(S7)では、命令Xについて、命令AからAの遅延D以下のステップへの移動が可能であるか否かを判断する。ここで、命令AはRSを定義するレジスタ格納命令であり、遅延Dは命令AのあるステップからRSが命令Aの実行結果に書き換えられるまでの期間(ステップ数)を指す。命令Xを命令AからAの遅延D以下のステップへ移動することが可能である場合には、命令Xのフォワーディング無効情報INVFWD=1(フォワーディングオフ)とし、ソースオペランドをRDからRSに変更し、命令Aからの遅延D以下のステップへ移動する。命令Xが当初から命令AからAの遅延D以下のステップに配置されていた場合も同様である。
ステップ6(S6)で抽出された全ての命令Xについて、ステップ7(S7)の処理を行なった後、ステップ8(S8)において、RDを使用する命令が残っていない場合には、命令Mを削除する。
これにより、実施形態1及び2で説明したプロセッサに実行させるプログラムにおいて、ソフトウェアパイプライン化による性能向上を図るための最適化を行うことができる。即ち、ソフトウェアパイプライン化のためのフォワーディングオン/オフ指定を、プログラムを解析することによって判断して、自動的に適切なフォワーディング無効情報を与えることができる。
プログラムコード変換(最適化)装置は、コンパイラとアセンブラとリンカから成るプログラム開発装置の一部の機能として組み込まれる他、既存のプログラム開発装置に追加されるソフトウェアとして提供されてもよい。
図20は、プログラムコード変換(最適化)装置による変換前のプログラムによる動作を示す、模式的なタイミングチャートである。図19に示されるフローチャートにおけるステップ2(S2)による最適化がされた後、即ち、フォワーディング無効情報を利用した最適化を行う前の中間表現レベルのプログラムに相当する。縦方向にプロセッサの実行サイクルが示され、実行される命令が楕円で、参照され又は実行結果が格納されるレジスタが長方形で示される。破線は1サイクルの間隔を示しており、命令Aであるadd r0, r1, r2は、ソースレジスタr0とr1を参照して加算を行い、加算結果をデスティネーションレジスタr2に格納する加算命令である。命令Aであるadd r0, r1, r2を囲む楕円はレジスタリード(RR)サイクルを表し、その2サイクル後のライトバック(WB)ステージにデスティネーションレジスタr2への書き込みが行われることが模式的に図示されている。命令Aからそのデスティネーションレジスタのライトバックまでのサイクル数を遅延Dとする。この例ではD=2である。命令Mであるmv r2, r3は、命令Aが内容を書き換えようとしているr2を別のレジスタr3にコピーするムーブ(mv)命令である。命令Mであるmv r2, r3は、命令Aであるadd r0, r1, r2よりも前または同じサイクルに配置されることにより、命令Aによって書き換えられる前のr2の値がレジスタr3に退避される。後段の命令Xであるadd r3, r9, r4は、退避されたr3を参照する加算命令である。
図21は、プログラムコード変換(最適化)装置による変換後のプログラムによる動作を示す、模式的なタイミングチャートである。プログラムコード変換(最適化)装置は、図19に示されるフローチャートに従って、図20に示される中間表現レベルのプログラムにおいて、レジスタ移動命令Mを探す(S4)。図20に示されるムーブ命令(mv r2, r3)が命令Mとして抽出される。このとき、ソースレジスタRS=r2、デスティネーションレジスタRD=r3である。次に、ソースレジスタRS=r2を定義する命令Aを探索する。加算命令add r0, r1, r2がこれに相当する。ステップ6(S6)においてRD=r3を使用するすべての後続命令Xを探索する。図20、21では加算命令add r3, r9, r4がこれに相当する。ステップ7(S7)において、命令Xを移動する操作を行う。即ち、命令Xである加算命令add r3, r9, r4を、命令Aの遅延D以下のサイクル、即ち、図21に示されるように、例えば命令Aの1サイクル後のサイクルに移動する。これに伴って、この命令Xのフォワーディング無効情報INVFWD=1としてフォワーディングをオフ(禁止)し、命令XのソースオペランドをRD=r3からRS=r2に変更する。これにより、フォワーディングがオフ(禁止)されているため、命令X(add r2, r9, r4, 1)は直前の命令A(add r0, r1, r2)の実行結果であるr2をフォワーディングによって参照するのではなく、命令A(add r0, r1, r2)によって書き換えられる以前のr2の内容を参照することができる。図21には図示が省略されるが、同様の命令Xすべてについて、ステップ7(S7)による移動が行われると、r3を参照する命令が残っていないことになるので、不要となるレジスタ移動命令M(mv r2, r3)は削除される(S8)。
図20と図21を比較すると、命令Xが命令Aからのフォワーディングが可能なサイクルに配置されることによって全体のサイクル数を短縮する効果があり、かつ、レジスタ移動命令Mが削除されるので、実際に実行される命令数を減らすことができ、さらに、使用されるレジスタ数も減らすことができることがわかる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、プロセッサ1やVLIWプロセッサ2は、キャッシュメモリ、共通バス、共通バスに接続される不揮発性メモリ、RAM、割り込み制御回路やダイレクトメモリコントローラ、周辺モジュールなどと接続された高機能のプロセッサとして実装され、さらには複数のプロセッサ1、VLIWプロセッサ2によって構成されるマルチプロセッサとして実装されてもよい。
1、2 プロセッサ
IR 命令レジスタ
CTRL プロセッサ制御部
IDE 命令デコーダ
OP−DE,OP−DE1〜3 演算器制御情報パイプラインレジスタ(DEステージ)
OP−RR,OP−RR1〜3 演算器制御情報パイプラインレジスタ(RRステージ)
FWD−DE,FWD−DE1〜3 フォワーディング無効情報格納レジスタ
SRC−DE,SRCS−DE1〜3,SRCT−DE1〜3 ソースオペランド情報格納レジスタ
DST−DE,DST−DE1〜3 デスティネーションオペランド情報格納レジスタ(DEステージ)
DST−RR,DST−RR1〜3 デスティネーションオペランド情報格納レジスタ(RRステージ)
DST−EX,DST−EX1〜3 デスティネーションオペランド情報格納レジスタ(EXステージ)
FWDCNT,FWDCNTS1〜S3,FWDCNTT1〜T3 フォワーディング制御信号生成部
FSEL,FSEL−S1〜S3,FSEL−T1〜T3 フォワーディングセレクタ
EXEC,EXEC1〜3 演算器(処理実行回路)
REGF レジスタファイル
P−RR,P−RR−S1〜S3,P−RR−T1〜T3 演算器入力側パイプラインレジスタ(RRステージ)
P−EX,P−EX1〜3 演算器出力側パイプラインレジスタ(EXステージ)
ICODE 命令コード
OPEX,OPEX1〜3 演算器(処理実行回路)制御信号
FSELS1〜3,FSELT1〜3 フォワーディングセレクタ選択制御信号
RRS1〜3,RRT1〜3 レジスタファイルからのリードレジスタ指定信号
RW1〜3 レジスタファイルへのライトバックレジスタ指定信号

Claims (15)

  1. 命令セットに含まれプログラムに従って順次発行される命令をパイプライン方式で実行するプロセッサであって、
    前記プロセッサは、
    複数のレジスタを含むレジスタファイルと、
    前記命令のデコード結果を保持する複数のパイプラインレジスタと、を備え、
    前記命令ごとにフォワーディングを禁止するか許可するかが指定可能とされるのに代えて又は加えてフォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを表すフォワーディング元を指定可能とされ、
    フォワーディングが禁止された命令を実行するときには前記レジスタファイルを参照し、
    前記フォワーディング元を指定された命令を実行するときには、前記複数のパイプラインレジスタの指定されたパイプラインステージに保持されるデスティネーションオペランドコードと、前記フォワーディング元を指定された命令のソースオペランドコードとを比較し、一致するパイプラインレジスタを参照する、
    プロセッサ。
  2. 請求項1において、前記プロセッサによって実行可能な命令セットが、フォワーディングを禁止するか許可するかを指定するフィールドを命令コードに有する命令に代えて又は加えて、フォワーディングを禁止するか前記フォワーディング元を指定するフィールドを命令コードに有する命令を含む、プロセッサ。
  3. 請求項2において、前記命令セットに含まれる複数の命令の命令コードから成る命令語が並列に発行され、前記複数の命令が並列に実行され、前記命令語はフォワーディングを禁止するか許可するかを指定するフィールドを個々の命令コードに有する前記命令に代えて又は加えて、フォワーディングを禁止するか前記フォワーディング元を指定するフィールドを個々の命令コードに有する前記命令を1個以上含む、プロセッサ。
  4. 命令セットに含まれプログラムに従って順次発行される命令をパイプライン方式で実行するプロセッサであって、
    前記命令をフェッチするフェッチ回路と、複数のレジスタを含むレジスタファイルと、フォワーディングセレクタと、処理実行回路と、前記フェッチされた命令に基づいて前記処理実行回路を制御するプロセッサ制御回路とを備え、
    前記命令セットは、レジスタ格納命令とレジスタ参照命令とを含み、
    前記レジスタ格納命令は、当該命令によって指定される処理を前記処理実行回路に実行させた結果を、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のデスティネーションオペランドで指定されるレジスタに格納させる命令であり、
    前記レジスタ参照命令は、前記レジスタファイルに含まれる前記複数のレジスタのうち当該命令のソースオペランドで指定されるレジスタに格納されるデータを参照して、当該命令によって指定される処理を前記処理実行回路に実行させる命令であり、
    一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定可能なフィールドを命令コードに含み、
    前記プロセッサ制御回路は、前記フェッチされた命令をデコードする命令デコーダと、前記命令デコーダによるデコード結果を保持する複数のパイプラインレジスタと、フォワーディング制御回路とを備え、
    前記命令デコーダは、前記フェッチされた命令をデコードして、前記命令の実行コードと、前記命令が前記レジスタ格納命令であるときにデスティネーションレジスタを指定するデスティネーションオペランドコードと、前記命令が前記レジスタ参照命令であるときにソースレジスタを指定するソースオペランドコードと、前記命令がフォワーディングを禁止するか許可するかが指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果とを出力し、
    前記複数のパイプラインレジスタは、前記デスティネーションオペランドコードをパイプラインステージごとに保持し、
    前記フォワーディング制御回路は、フォワーディングを禁止するか許可するかを指定可能なフィールドのデコード結果に基づいて、
    フォワーディングが禁止されるときは、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させ、
    フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインステージから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる、プロセッサであって、
    前記一部又は全てのレジスタ参照命令に代えて又は加えて、一部又は全ての前記レジスタ参照命令は、フォワーディングを禁止するか前記パイプラインのどのステージからのフォワーディングを許可するかを表すフォワーディング元を指定可能なフィールドを命令コードに含み、
    前記命令デコーダは、前記フェッチされた命令がフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドを命令コードに含むレジスタ参照命令であるときに当該フィールドのデコード結果をさらに出力し、
    前記フォワーディング制御回路は、当該デコード結果に基づいて、
    フォワーディングが禁止されるときは、前記フォワーディングセレクタにより、前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して前記処理実行回路に供給させ、
    前記フォワーディング元が指定されるときは、前記複数のパイプラインレジスタの指定されたパイプラインステージに保持される前記デスティネーションオペランドコードと、前記ソースオペランドコードとを比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを前記フォワーディングセレクタによって実行させる、
    プロセッサ。
  5. 請求項において、前記プロセッサは、前記処理実行回路をN個(Nは任意の自然数)備え、前記命令セットに含まれる前記N個の命令を1語に含む命令語を対応する処理実行回路により並列に実行可能であり、
    前記N個のうちのM個(MはN以下の任意の自然数)の処理実行回路には、それぞれの入力数に対応する数のフォワーディングセレクタがそれぞれ接続され、
    前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記N個の命令を並列にデコードして、前記N個の処理実行回路のそれぞれに対応するデコード結果を出力し、前記M個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果が含まれ、
    前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路を備え、
    前記M個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する、
    プロセッサ。
  6. 請求項において、
    前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持し、
    前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路を備え、
    前記M個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するかが指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される1個又は複数のフォワーディングセレクタに対して、
    フォワーディングが禁止されるときは、前記1個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させ、
    フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記1個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較し、一致するパイプラインステージから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる、
    プロセッサ。
  7. 請求項において、前記プロセッサは、前記処理実行回路をN個(Nは任意の自然数)備え、前記命令セットに含まれる前記N個の命令を1語に含む命令語を対応する処理実行回路により並列に実行可能であり、
    前記N個のうちのM個(MはN以下の任意の自然数)の処理実行回路には、それぞれの入力数に対応する数のフォワーディングセレクタがそれぞれ接続され、
    前記命令デコーダは、前記フェッチされた前記命令語に含まれる前記N個の命令を並列にデコードして、前記N個の処理実行回路のそれぞれに対応するデコード結果を出力し、前記M個の処理実行回路に対応するデコード結果には、フォワーディングを禁止するか許可するかが指定されたフィールドのデコード結果またはフォワーディングを禁止するか前記フォワーディング元を指定可能なフィールドのデコード結果のうちの一方または両方が含まれ、
    前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路を備え、
    前記M個のフォワーディング制御回路のそれぞれは、前記デコード結果に基づいて、対応する処理実行回路に対するフォワーディング制御を実行する、
    プロセッサ。
  8. 請求項において、
    前記プロセッサ制御回路は、前記複数のパイプラインレジスタに、前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードをパイプラインステージごとに保持し、
    前記プロセッサ制御回路は、前記M個の処理実行回路に対応するM個のフォワーディング制御回路を備え、
    前記M個のフォワーディング制御回路のそれぞれは、フォワーディングを禁止するか許可するか前記フォワーディング元が指定されるフィールドのデコード結果に基づいて、対応する処理実行回路に接続される1個又は複数のフォワーディングセレクタに対して、
    フォワーディングが禁止されるときは、前記1個又は複数のフォワーディングセレクタにそれぞれ対応する前記ソースオペランドコードで指定されるレジスタの値を前記レジスタファイルから読み出して当該処理実行回路に供給させ、
    フォワーディングが許可されるときは、前記複数のパイプラインレジスタにパイプラインステージごとに保持される前記N個の処理実行回路のそれぞれに対応する前記デスティネーションオペランドコードと、前記1個又は複数のフォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させ、
    前記フォワーディング元が指定されるときは、前記N個の処理実行回路に対応してパイプラインステージごとに保持されるデスティネーションオペランドコードのうち、前記フォワーディング元が指定されるパイプラインステージのパイプラインレジスタに保持されるデスティネーションオペランドコードと、前記フォワーディングセレクタに対応する前記ソースオペランドコードとをそれぞれ比較し、一致するパイプラインレジスタから前記処理実行回路へのフォワーディングを当該フォワーディングセレクタによって実行させる、
    プロセッサ。
  9. 請求項において、単一の半導体基板上に形成される、プロセッサ。
  10. 命令セットに含まれる複数の命令によって構成され、プロセッサによって実行されるプログラムのプログラムコードを変換するプログラムコード変換装置であって、
    前記プロセッサは、複数のレジスタで構成されるレジスタファイルと処理実行回路とを含み、前記レジスタファイルを参照するレジスタリードステップと前記レジスタファイルに値を書き込むライトバックステップを含むパイプラインで構成され、
    前記命令セットは、レジスタ参照命令とレジスタ格納命令とレジスタ移動命令とを含み、
    前記レジスタ参照命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を、前記レジスタリードステップで参照して、当該命令によって規定される処理を前記プロセッサに実行させるための命令であり、
    前記レジスタ格納命令は、当該命令によって規定される処理を前記プロセッサに実行させた結果を、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のデスティネーションオペランドで指定されるレジスタに、前記レジスタリードステップから前記パイプラインの段数で規定される遅延量だけ遅延された前記ライトバックステップで格納するための命令であり、
    前記レジスタ移動命令は、前記レジスタファイルに含まれる複数のレジスタのうち、当該命令のソースオペランドで指定されるレジスタに格納される値を前記レジスタリードステップで読み出して、当該命令のデスティネーションオペランドで指定されるレジスタに前記ライトバックステップで書き込むための命令であり、
    全てまたは一部の前記レジスタ参照命令は、フォワーディングを禁止するか許可するかを指定するフォワーディング無効フラグをオペランドにさらに含み、前記フォワーディング無効フラグによりフォワーディングが禁止されたときには前記プロセッサにより前記レジスタリードステップに前記レジスタファイルを参照させ、前記フォワーディング無効フラグによりフォワーディングが許可されたときには、前記プロセッサが前記レジスタ格納命令又は前記レジスタ移動命令を実行することにより前記デスティネーションオペランドで指定されるレジスタにデータを書き込むパイプラインの途中のステージから、前記ソースオペランドで指定されるレジスタに格納される値を参照させ、
    前記プログラムコード変換装置は、
    前記命令セットに含まれる複数の命令によって構成される前記プログラムコードからレジスタ移動命令を探索し、
    前記探索で発見したレジスタ移動命令のソースオペランドで指定されるレジスタをデスティネーションオペランドで指定するレジスタ格納命令を抽出し、
    前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令について、前記レジスタ格納命令から前記遅延量以内の実行ステップで実行される場合には、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換える、
    プログラムコード変換装置。
  11. 請求項10において、前記プログラムコード変換装置は、
    前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続のレジスタ参照命令について、前記レジスタ格納命令から前記遅延量より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断し、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを許可する指定を行ったレジスタ参照命令に置き換える、
    プログラムコード変換装置。
  12. 請求項11において、前記プログラムコード変換装置は、
    前記探索で発見した前記レジスタ移動命令のデスティネーションオペランドで指定されるレジスタを、ソースオペランドで指定する後続の全てのレジスタ参照命令について、前記レジスタ格納命令から前記遅延量より遅れた実行ステップで実行される場合には、前記遅延量以内に実行される実行ステップに移動できるか否かを判断し、移動できる場合には移動した上で、フォワーディング無効フラグによりフォワーディングを禁止する指定を行ったレジスタ参照命令に置き換え、
    前記全てのレジスタ参照命令が、前記遅延量以内に実行される実行ステップに移動されたときには、前記探索で発見した前記レジスタ移動命令を前記プログラムから削除する、
    プログラムコード変換装置。
  13. 請求項10において、前記プロセッサは、前記処理実行回路をN個(Nは任意の自然数)備え、前記命令セットに含まれる前記N個の命令を1語に含む命令語を対応する処理実行回路により並列に実行可能である、
    プログラムコード変換装置。
  14. 請求項10において、前記プログラムコード変換装置は、高級言語で記述されたプログラムから、前記命令セットに含まれる複数の命令によって構成される前記プログラムコードを生成する、
    プログラムコード変換装置。
  15. コンピュータによって実行されることにより、請求項10に記載されるプログラムコード変換装置として機能する、ソフトウェア。
JP2015054448A 2015-03-18 2015-03-18 プロセッサ、プログラムコード変換装置及びソフトウェア Active JP6422381B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2015054448A JP6422381B2 (ja) 2015-03-18 2015-03-18 プロセッサ、プログラムコード変換装置及びソフトウェア
US15/056,952 US20160274916A1 (en) 2015-03-18 2016-02-29 Processor, program code translator and software
CN201610151495.7A CN105988775A (zh) 2015-03-18 2016-03-16 处理器、程序代码转换装置以及软件

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015054448A JP6422381B2 (ja) 2015-03-18 2015-03-18 プロセッサ、プログラムコード変換装置及びソフトウェア

Publications (2)

Publication Number Publication Date
JP2016173793A JP2016173793A (ja) 2016-09-29
JP6422381B2 true JP6422381B2 (ja) 2018-11-14

Family

ID=56924736

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015054448A Active JP6422381B2 (ja) 2015-03-18 2015-03-18 プロセッサ、プログラムコード変換装置及びソフトウェア

Country Status (3)

Country Link
US (1) US20160274916A1 (ja)
JP (1) JP6422381B2 (ja)
CN (1) CN105988775A (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729027B (zh) * 2017-10-12 2021-11-23 惠州Tcl移动通信有限公司 一种基于文件安装虚拟处理的方法、移动终端及存储介质
CN112732337A (zh) * 2020-12-30 2021-04-30 深圳市力为自动化有限公司 界面显示方法及绕线设备、计算机存储介质
CN114116229B (zh) * 2021-12-01 2023-03-31 北京奕斯伟计算技术股份有限公司 调节指令流水线的方法及装置、存储器和存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW334546B (en) * 1996-03-18 1998-06-21 Hitachi Ltd Data processor
JP2933026B2 (ja) * 1996-08-30 1999-08-09 日本電気株式会社 複数命令並列発行/実行管理装置
JP3737573B2 (ja) * 1996-09-09 2006-01-18 株式会社東芝 Vliwプロセッサ
JP3449186B2 (ja) * 1997-08-19 2003-09-22 富士通株式会社 パイプラインバイパス機能を有するデータ処理装置
WO2000068784A1 (en) * 1999-05-06 2000-11-16 Koninklijke Philips Electronics N.V. Data processing device, method for executing load or store instructions and method for compiling programs
US7624256B2 (en) * 2005-04-14 2009-11-24 Qualcomm Incorporated System and method wherein conditional instructions unconditionally provide output
US7475232B2 (en) * 2005-07-19 2009-01-06 International Business Machines Corporation Performance of an in-order processor by no longer requiring a uniform completion point across different execution pipelines
CN101361039A (zh) * 2006-01-20 2009-02-04 松下电器产业株式会社 处理器
US8135941B2 (en) * 2008-09-19 2012-03-13 International Business Machines Corporation Vector morphing mechanism for multiple processor cores

Also Published As

Publication number Publication date
JP2016173793A (ja) 2016-09-29
US20160274916A1 (en) 2016-09-22
CN105988775A (zh) 2016-10-05

Similar Documents

Publication Publication Date Title
US8161266B2 (en) Replicating opcode to other lanes and modifying argument register to others in vector portion for parallel operation
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
US9639371B2 (en) Solution to divergent branches in a SIMD core using hardware pointers
EP2569694B1 (en) Conditional compare instruction
JP3564445B2 (ja) プロセッサ、コンパイル装置及びコンパイル方法
JP2002333978A (ja) Vliw型プロセッサ
JP2010532063A (ja) 条件命令を無条件命令および選択命令へと拡張する方法およびシステム
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
EP0978031A2 (en) A method for structuring a multi-instruction computer program
US10664280B2 (en) Fetch ahead branch target buffer
JP6422381B2 (ja) プロセッサ、プログラムコード変換装置及びソフトウェア
JP2001243070A (ja) プロセッサ及び分岐予測方法並びにコンパイル方法
JP4444305B2 (ja) 半導体装置
JP2009507292A (ja) 分離したシリアルモジュールを備えるプロセッサアレイ
JP2002024008A (ja) データ処理装置およびプログラム変換装置
Wang et al. Acceleration of control flows on reconfigurable architecture with a composite method
Jung et al. Feasibility of high level compiler optimizations in online synthesis
US20200371793A1 (en) Vector store using bit-reversed order
Gädke et al. Accelerating speculative execution in high-level synthesis with cancel tokens
US20180267803A1 (en) Computer Processor Employing Phases of Operations Contained in Wide Instructions
Cowley et al. RISC-V Dataflow Extension
JP3727324B2 (ja) プロセッサ及びコンパイル装置
Döbrich et al. Practical Resource Constraints for Online Synthesis.
Unrolling Instruction Level Parallelism

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20170330

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171127

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180815

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180821

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180919

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181002

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181016

R150 Certificate of patent or registration of utility model

Ref document number: 6422381

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150