JP4125847B2 - プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体 - Google Patents

プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体 Download PDF

Info

Publication number
JP4125847B2
JP4125847B2 JP33397899A JP33397899A JP4125847B2 JP 4125847 B2 JP4125847 B2 JP 4125847B2 JP 33397899 A JP33397899 A JP 33397899A JP 33397899 A JP33397899 A JP 33397899A JP 4125847 B2 JP4125847 B2 JP 4125847B2
Authority
JP
Japan
Prior art keywords
instruction
register
information
area
unit
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.)
Expired - Lifetime
Application number
JP33397899A
Other languages
English (en)
Other versions
JP2000222209A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP33397899A priority Critical patent/JP4125847B2/ja
Publication of JP2000222209A publication Critical patent/JP2000222209A/ja
Application granted granted Critical
Publication of JP4125847B2 publication Critical patent/JP4125847B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体に関し、特に前記プロセッサにおける並列処理において実行サイクル数の削減を図る技術に関する。
【0002】
【従来の技術】
近年、マイクロプロセッサが組み込まれている製品が高機能化し、また高速化することに伴い、さらに高い処理性能を持つマイクロプロセッサ(以下、単に「プロセッサ」という。)が望まれている。
一般に、プロセッサ上での複数の命令のスループットを高めるために、次に示すパイプライン方式が採用されている。パイプライン方式によると、命令は、連続して実行される複数の小さい単位命令に分割され、命令が実行される過程は、連続する複数の小さい過程(ステージと呼ばれる)に分割され、プロセッサは、各ステージに対応する別々の実行部(ハードウェア)を有する。各単位命令が、各ステージにおいて各実行部により順次実行されることより、1命令が実行される。前記命令に続く命令が実行される場合には、前記命令より1ステージ分だけ遅れて、各単位命令が、各ステージにおいて各実行部により実行される。このようにして、複数の命令が並行して実行される。
【0003】
また、さらなる性能向上のために、個々の命令レベルで並列処理を行う方式が採用されている。ここで、命令レベルでの並列処理とは、1マシンサイクルにおいて複数の命令を同時に実行することであり、ダイナミックスケジューリングによるものとスタティックスケジューリングによるものとがある。
ダイナミックスケジューリングによるものの代表例としてスーパースカラ方式がある。この方式では、プロセッサ上で複数の命令が実行されるときに、命令コードが解読され、その後、解読された命令コードにより、プロセッサの命令発行制御部(ハードウェア)が複数の命令間の依存関係を解析して並列実行可能か否かを判定し、プロセッサは、並列実行可能な適切な組み合わせの命令を並列実行する。
【0004】
スタティックスケジューリングによるものの代表例としてVLIW(VeryLong Instruction Word)方式がある。この方式は、実行形式コード生成時にコンパイラ等により静的に複数の命令間の依存関係を解析し、解析結果に基づいて命令コードの移動を行って実行効率の良い命令ストリームを生成する。一般のVLIW方式では、同時実行可能な複数の命令を一つの固定長の命令供給単位(ここでは「パケット」と呼ぶ)に記述する。
【0005】
上記のいずれのスケジューリング方法においても、命令並列処理に際して発生するデータの依存関係によるハザードが回避される。具体的には、それぞれの命令においてデータが参照されるレジスタ名及びデータが格納されるレジスタ名に関する情報を基にして、あるレジスタに値を格納する命令とその格納値を参照する命令とが同一サイクル内において発行されないように制御される。上記ダイナミックスケジューリングの場合には、実行時に前記命令発行制御部が、上記2命令を並列実行せず逐次実行するように制御する。上記スタティックスケジューリングの場合には、コンパイル時にコンパイラが、同一サイクルに発行される命令グループ内にデータ依存関係にある命令の組み合わせが含まれないようにスケジューリングする。
【0006】
近年、信号処理性能強化のため、基本命令に加えて、基本命令よりも大きいサイズのデータを扱うメディア処理命令を採用するプロセッサが増えてきている。メディア処理命令では、基本命令で扱うレジスタよりも大きい幅を持つレジスタに複数のデータを格納し、それらのデータを並列に処理することにより信号処理性能の向上を図っている。メディア処理命令を備えるプロセッサの中には、メディア処理命令専用のレジスタを備えるのではなく、レジスタを基本命令とメディア処理命令で共用し、基本命令においてはレジスタの一部にのみ書き込みを行うようにしているプロセッサがある。
【0007】
【発明が解決しようとする課題】
このようなプロセッサにおいて、命令コード中に示されたレジスタ名を参照することにより複数の命令間の依存関係を解析する前述の命令発行制御方法を用いると、例えばあるレジスタの上位半分のみを更新する命令と、そのレジスタの下位半分のみを参照する命令との間には、命令コード中に示されるレジスタ名が同一であるので、データ依存の関係が存在するとみなされ、これらの命令は並列実行せず逐次実行されることになるという問題点がある。ここで、データ依存の関係とは、ある資源にデータを格納する命令と、そのデータを参照する命令との間の依存関係をいう。
【0008】
上記の問題点を解決するために、本発明は、複数の命令を1のサイクルにおいて実行するプロセッサにおいて、並列処理を行う場合に、実行サイクル数を削減することができるプロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体を提供することを目的とする。
【0009】
【課題を解決するための手段】
上記目的を達成するために、本発明は、複数の命令を1のサイクルにおいて実行するプロセッサであって、レジスタと命令読出手段と解読手段とアクセス手段とを含み、前記命令読出手段は、外部のプログラムから少なくとも第1命令と第2命令とを含む複数の命令を読み出し、前記第1命令は、1のレジスタの全部又は部分である第1領域へのアクセス指示を含み、前記第2命令は、前記レジスタの全部又は部分である第2領域へのアクセス指示を含み、ここで、前記第1領域が前記レジスタの全部の領域である場合には、前記第2領域は前記レジスタの部分の領域であり、前記第2領域が前記レジスタの全部の領域である場合には、前記第1領域は前記レジスタの部分の領域であり、また、前記2個のアクセス指示のうち少なくとも1個は、前記レジスタの全部又は部分の領域へのデータの格納の指示であり、前記解読手段は、1のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、前記解読情報は、少なくとも前記レジスタと前記第1領域と前記第2領域とに関する情報を含み、前記アクセス手段は、1のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第1領域へのアクセスと、前記レジスタの前記第2領域へのアクセスとを実行する。
【0010】
ここで、前記各命令は、並列実行の可否を示す並列実行情報を含み、前記解読手段は、前記命令に含まれている並列実行情報を基にして、1のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含むように構成してもよい。
【0011】
ここで、前記解読情報は、命令に含まれるオペコードを含み、前記プロセッサは、さらに、1のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、前記演算情報は、前記第1命令による第1演算情報と、前記第2命令による第2演算情報とを含み、レジスタへデータを格納する前記アクセス手段は、前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第1領域に対応する情報を1のレジスタの前記第1領域へ書き込む第1選択部と、前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第2領域に対応する情報を1のレジスタの前記第2領域へ書き込む第2選択部と、1のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第1領域とに関する情報に基づいて、前記第1選択部に対して、前記第1演算情報を選択し、前記第1演算情報を前記レジスタの前記第1領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第2領域とに関する情報に基づいて、前記第2選択部に対して、前記第2演算情報を選択し、前記第2演算情報を前記レジスタの前記第2領域へ書き込むように制御するレジスタ書込制御部とを含むように構成してもよい。
【0012】
ここで、前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、交わりがなく、それぞれ部分の領域であり、前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域からのデータの参照指示を含み、前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域へのデータの格納と、前記レジスタの第2領域からのデータの参照とを実行するように構成してもよい。
【0013】
ここで、前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、交わりがなく、それぞれ部分の領域であり、前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域へのデータの格納指示を含み、前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域へのデータの格納と、前記レジスタの第2領域へのデータの格納とを実行するように構成してもよい。
【0014】
ここで、前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、第3領域において重なりを有し、前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域へのデータの格納指示を含み、前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域から第3領域を除く領域へのデータの格納と、レジスタの第3領域へのデータの格納と、前記レジスタの第2領域から第3領域を除く領域へのデータの格納とを実行するように構成してもよい。
【0015】
ここで、前記アクセス手段は、前記プログラム内において、第1命令及び第2命令のうち、後方に記録されている命令により、前記レジスタの第3領域へのデータの格納を行うように決定するように構成してもよい。
ここで、前記アクセス手段は、あらかじめ命令の種類毎に優先度を記憶しており、前記優先度を用いて、第1命令及び第2命令のうち、いずれの命令により、前記レジスタの第3領域へのデータの格納を行うかを決定するように構成してもよい。
【0016】
ここで、前記解読手段は、命令解読部と命令発行制御部とを含み、前記命令解読部は、1のサイクルにおいて、読み出される命令毎に、命令の解読又は解読の停止の指示により、命令を解読し命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、又は命令の解読を停止し、ここで、前記解読される複数の命令には、少なくとも前記第1命令と前記第2命令とが含まれ、前記解読情報は、少なくとも前記レジスタと前記第1領域と前記第2領域とに関する情報を含み、前記命令発行制御部は、1のサイクルにおいて、読み出される命令毎に、命令を解読する指示を前記命令解読部へ出力することにより、前記命令解読部に対して各命令を解読するように制御し、前記命令解読部による各命令の解読後に、前記レジスタと前記第1領域と前記第2領域とに関する情報を含む解読情報を受け取り、前記第1領域と前記第2領域とが同一領域であるか否かを判断し、同一領域であると判断する場合に、前記第2命令の解読を停止する指示を前記命令解読部へ出力することにより、前記命令解読部に対して前記第2命令の解読を停止するように制御するように構成してもよい。
【0017】
ここで、前記命令発行制御部は、命令の種類と、前記命令がデータを参照し又はデータを格納するレジスタの領域との組を複数個含む参照格納資源表を含み、前記命令発行制御部は、前記解読情報から、前記参照格納資源表を用いて、各命令に含まれるレジスタの領域に関する情報を取得するように構成してもよい。
また、本発明は、高級言語により記述されたソースプログラムからオブジェクトコードを生成するコンパイル装置であって、高級言語により記述されたソースプログラムを記憶している記憶手段と、前記記憶手段からソースプログラムを読み出し、読み出したソースプログラムに翻訳処理を施して、レジスタに関する情報を含む1以上の実行形式命令から構成される実行形式プログラムを生成する実行形式コード生成手段と、前記実行形式プログラム中の1以上の実行形式命令を、各実行形式命令に含まれるレジスタの一部分の領域に関する情報に基づいて、並列実行できる複数の実行形式命令が隣接するように並べ換える命令スケジューリング手段と、並べ換えられた各実行形式命令を基にして、オブジェクトコードを生成するオブジェクトコード生成手段とを含む。
【0018】
ここで、前記命令スケジューリング手段は、前記1以上の実行形式命令について、各実行形式命令が並べられている順序と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係解析部と、生成された前記依存関係情報に基づいて、並列実行可能な命令の集合を決定し、また、前記実行形式命令を再配置する命令再配置部と、前記決定された集合毎に、並列実行の可否を示す並列実行情報を付加する実行境界付加部とを含むように構成してもよい。
【0019】
ここで、前記依存関係解析部は、実行形式命令の種類と、前記実行形式命令がデータを参照し、又はデータを格納するレジスタの一部分の領域との組を複数個含む参照格納資源表と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報を参照格納資源表から取得する資源取得部と、各実行形式命令が並べられている順序と、前記取得したレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係生成部とを含むように構成してもよい。
【0020】
【発明の実施の形態】
本発明の実施の形態として、コンパイル装置及びプロセッサが組み込まれている応用装置から構成されるプログラム実行システムについて、図面を用いて詳細に説明する。
I 実施の形態1
本発明に係る1の実施の形態としてのプログラム実行システム400について説明する。プログラム実行システム400は、図1に示すように、コンパイル装置200及び応用装置300から構成される。
【0021】
コンパイル装置200は、ソースコード記憶部130、コンパイル部210及びオブジェクトコード記憶部140から構成され、ソースコード記憶部130に記憶されているプログラムであるソースコードをコンパイルしてオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード記憶部140へ書き込む。ここで、前記コンパイルは、命令の並列スケジューリングを含んでいる。ここで、ソースコードは、高級言語で記述されている。
【0022】
応用装置300は、プロセッサ310、ROM320、RAM330、入力部340、出力部350から構成され、コンパイル装置200により生成されたオブジェクトコードがあらかじめRAM330に記憶されており、プロセッサ310は、RAM330に記憶されているオブジェクトコードを読み出して実行する。応用装置300は、一例としてMPEGデコーダである。
【0023】
以下において、プロセッサ310及びコンパイル装置200について説明する。なお、応用装置300及びその構成要素(プロセッサ310を除く)は、本発明の主題ではないので、説明を省略する。
1 プロセッサ310
プロセッサ310は、コンパイル装置により静的な並列スケジューリングが施されたオブジェクトコードを実行することを前提としたプロセッサである。
【0024】
ここでは、プロセッサ310が解読実行する命令の構成について説明し、その後、プロセッサ310の構成及び動作について説明する。
1.1 命令のフォーマット
プロセッサ310が解読し実行する命令の構成について説明する。ここで、前記命令は、オブジェクトコード記憶部140に記憶されているオブジェクトコード(以下、単に、命令と呼ぶ)である。
【0025】
図2は、プロセッサ310が解読し実行する命令のフォーマットを示す図である。この図において、5個の命令15〜19が示されている。
プロセッサ310が解読し実行する各命令は、1個又は2個の命令構成要素(ここでは「ユニット」と呼ぶ。)により構成され、各ユニットは、21ビットからなる。つまり、1個のユニットから構成される21ビット命令と、2個のユニットから構成される42ビット命令との2種類の命令フォーマットが存在する。図2に示される命令15〜17は、21ビット命令であり、命令18〜19は、42ビット命令である。
【0026】
各命令は、並列実行境界情報10とフォーマット情報11とオペコード部12とオペランド部13とを含む。
フォーマット情報11は、1ビットからなり、命令が21ビット命令及び42ビット命令のいずれの命令であるかを示す。フォーマット情報11が“0”である場合には、命令は、1個のユニットからなる21ビット命令である。フォーマット情報11が“1”である場合には、命令は、そのユニットとそれに後続するユニットとを連結して構成される2個のユニットからなる42ビット命令である。
【0027】
並列実行境界情報10は、1ビットからなり、並列実行境界情報10が含まれる命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示すものである。具体的には、並列実行境界情報10が“1”の場合には、その命令と後続命令との間に並列実行の境界が存在し、並列実行境界情報10が“0”の場合には、並列実行の境界が存在しないことを示す。なお、この並列実行境界情報10の利用方法の詳細については、後で述べる。
【0028】
各命令からフォーマット情報11と並列実行境界情報10とを除いた残りの部分であるオペコード部12とオペランド部13とにおいて、各命令のオペレーションが指定される。各命令のオペレーションの指定において、21ビット命令では19ビットの長さ、42ビット命令では40ビットの長さが使用できる。
具体的には、命令15〜19において、“Op1”、“Op2”、“Op3”により示されるフィールドは、オペコード部であり、オペレーションの種類を表すオペコードが指定される。“Rs”及び“Rd”で示されるフィールドは、オペランド部であり、“Rs”で示されるフィールドでは、ソースオペランドとなるレジスタのレジスタ番号が指定され、“Rd”で示されるフィールドでは、デスティネーションオペランドとなるレジスタのレジスタ番号が指定される。
【0029】
また、命令16及び命令18において、“imm5”及び“imm32”で示されるフィールドは、オペランド部であり、それぞれ5ビットと32ビットの演算用定数オペランドが指定される。命令17及び命令19において、“disp13”及び“disp31”で示されるフィールドは、オペランド部であり、それぞれ13ビットと31ビットの変位(ディスプレースメント)が指定される。
【0030】
32ビットの定数などの長い定数を扱う転送命令や演算命令、大きなディスプレースメントを指定する分岐命令は42ビット命令で定義され、それらを除く他の命令は21ビット命令で定義される。なお、図2を見てわかるように、42ビット命令の構成要素である2個のユニットのうち、後ろの方のユニット(2番目のユニット)には、長い定数やディスプレースメントの一部のみが配置され、オペコードは配置されない。
1.2 アーキテクチャの概要
次に、プロセッサ310のアーキテクチャの概要について説明する。
【0031】
プロセッサ310は、コンパイル装置により静的な並列スケジューリングが施されたオブジェクトコードを実行することを前提としている。プロセッサ310へ供給される命令の単位と、プロセッサ310において実行される命令の単位とについて、図3を用いて説明する。
プロセッサ310においては、サイクル毎に64ビット固定長の命令が供給される。ここでは、1個の命令供給単位を「パケット」と呼び、1個の命令供給単位は、3個のユニットを含む。なお、3個分のユニットの長さは63ビットであるが、残りの1ビットについては使用しない。
【0032】
命令供給単位の一例を図3に示す。この図において、符号521、522及び523は、それぞれ命令供給単位を示しており、命令供給単位521は、ユニットA501、ユニットB502及びユニットC503を含み、命令供給単位522は、ユニットD504、ユニットE505及びユニットF506を含み、命令供給単位523は、ユニットG507、ユニットH508及びユニットI509を含む。また、この図において、符号511、512、513及び514は、並列実行の境界を示している。
【0033】
プロセッサ310においては、1サイクルで並列実行の境界までのユニットにより示される命令が同時に実行される。ここで、同時に実行される1個以上の命令を「実行グループ」と呼ぶ。つまり、各サイクルにおいて並列実行境界情報が“1”である命令までの命令が並列実行されることになる。
実行グループの一例を図3に示す。この図において、符号531、532、533及び534は、それぞれ実行グループを示している。実行グループ531は、ユニットA541及びユニットB542を含み、実行グループ532は、ユニットC543、ユニットD544、ユニットE545及びユニットF546を含み、実行グループ533は、ユニットG547を含み、実行グループ534は、ユニットH548及びユニットI549とを含む。
【0034】
ユニットA541及びユニットB542により示される命令が並列実行される。次に、ユニットC543、ユニットD544、ユニットE545及びユニットF546により示される命令が並列実行される。次に、ユニットG547により示される命令が実行される。次に、ユニットH548及びユニットI549により示される命令が並列実行される。
【0035】
プロセッサ310へ供給されながら実行されずに残ったユニットは、命令バッファに蓄積され、次のサイクル以降で実行の対象となる。
つまり、プロセッサ310のアーキテクチャでは、固定長のパケット単位で命令を供給しておき、静的に求められた並列実行の境界を示す情報を元に、各サイクルにおいて並列度に応じた適切な数のユニットを実行していく、ということになる。この手法をとることにより、従来の固定長命令のVLIW方式のプロセッサで発生していた無動作命令(nop命令)が全く無くなり、コードサイズを削減することができる。
【0036】
また、プロセッサ310は、“add”命令(加算)や“ld”命令(メモリからのロード)などの基本命令に加えて、SIMD(Single Instruction
stream Multiple Data stream )型の処理を行うSIMD命令を実行する。このSIMD命令によってデータ並列を実現し、信号処理性能の向上を図っている。基本命令が32ビット長のデータを扱うのに対して、SIMD命令では64ビット長のデータを扱う。ただし、SIMD命令専用のレジスタファイルは用意されておらず、64ビット幅の汎用レジスタを基本命令とSIMD命令とで共用する。基本命令実行時には、汎用レジスタの下位32ビットしか使用されない。
【0037】
SIMD命令には、“vaddw”命令(32ビットデータの加算を2個含む。)、“vaddh”命令(16ビットデータの加算を4個含む。)などのデータ並列演算命令や、“vchng”命令(64ビットレジスタの上位32ビットと下位32ビットとを入れ換える。)などのデータの転送や組み替えを行う命令が含まれる。
1.3 プロセッサ310のハードウェア構成
次に、プロセッサ310のハードウェア構成について図4を用いて説明する。ここで、図4は、プロセッサ310のハードウェア構成を示すブロック図である。
【0038】
プロセッサ310は、1サイクルに最大3個の命令を並列実行するプロセッサであり、大きく分けて、命令供給発行部20、解読部30、実行部40から構成される。
1.3.1 命令供給発行部20
命令供給発行部20は、命令フェッチ部21、命令バッファ22及び命令レジスタ23から構成され、図示していない外部メモリ(応用装置300においては、RAM330)から命令群を読み出し、解読部30へ供給する。
(1)命令フェッチ部21
命令フェッチ部21は、32ビットのIA(インストラクションアドレス)バス及び64ビットのID(インストラクションデータ)バスを通じて、前記外部メモリと接続されている。
【0039】
命令フェッチ部21は、PC部42からアドレスを受け取る。次に、IAバス及びIDバスを通じて、前記アドレスにより示される位置に格納されているユニット群を前記外部メモリからフェッチする。ここで、前記ユニット群は、3個のユニットからなる。次に、フェッチしたユニット群の最上位に1ビットの情報を付加して、64ビット長のパケットを生成し、生成したパケットを命令バッファ22に供給する。なお、64ビットのパケットの最上位に付加された1ビットの情報が使用されることはない。
(2)命令バッファ22
命令バッファ22は、63ビットのバッファを2個備えており、命令フェッチ部21からパケットの供給を受け、パケットの最上位の1ビットを除去した残りの63ビットを蓄積する。命令バッファ22は、63ビットのバッファを2個備えているので、最大6個のユニットを蓄積できる。命令バッファ22はキュー構造をとっており、命令バッファ22に蓄積されたユニットは、蓄積された順に命令レジスタ23の適切なレジスタに出力される。
【0040】
また、命令バッファ22は、制御信号線K41を介して、後述する解読部30の命令発行制御部31に接続されており、命令発行制御部31から発行されずに残ったユニットを示す情報を受け取る。前記情報を受け取った場合には、前記情報により示される発行されずに残ったユニットを含めて、蓄積された順に蓄積されたユニットを命令レジスタ23の適切なレジスタに出力する。
(3)命令レジスタ23
命令レジスタ23は、図4に示すように、命令レジスタA231、命令レジスタB232、命令レジスタC233及び命令レジスタD234から構成される。命令レジスタA231〜D234は、それぞれ21ビットレジスタであり、命令バッファ22から送られてきたユニットをこれらの命令レジスタの順に保持する。
【0041】
図5は、命令レジスタ23及びその周辺の構成要素の構成を示すブロック図である。この図において、符号K12、K13、K21、K22、K31、K32、K33、K41により示される破線は、制御信号線を表す。この図に示すように、命令レジスタA231及び命令レジスタB232は、それぞれ、制御信号線K21及びK22を介して、後述する命令発行制御部31と接続されている。
1.3.2 解読部30
解読部30は、図4に示すように、命令発行制御部31と命令デコーダ32とから構成され、命令レジスタ23に保持されている命令を解読し、その解読結果に応じて、解読結果及び制御信号を実行部40へ出力する。
(1)命令発行制御部31
命令発行制御部31は、命令レジスタ23を構成する2個のレジスタ(命令レジスタA231〜B232)に保持されている各ユニットについて、当該ユニット内の並列実行境界情報とフォーマット情報とを参照することにより、2個のユニットを2個の命令として扱うように制御し、又は2個のユニットを1個の命令として扱うように制御し、また、並列実行の境界を越えたユニットについては、そのユニットの発行を無効化するように制御する。
【0042】
具体的には、命令発行制御部31は、図6に示すように、OR回路X1、X2を含む。OR回路X1は、制御信号線K21を介して、命令レジスタA231に接続されている。また、OR回路X2は、制御信号線K21を介して、命令レジスタA231に接続されており、制御信号線K22を介して、命令レジスタB232に接続されている。
【0043】
OR回路X1は、制御信号線K21を介して、命令レジスタA231に格納されているユニットに含まれる並列実行境界情報とフォーマット情報とを取得し、取得した並列実行境界情報とフォーマット情報とにOR演算を施して無動作命令フラグを生成する。ここで、無動作命令フラグは、1ビットからなり、“0”又は“1”の値をとる。OR回路X1は、生成した無動作命令フラグを第2命令デコーダ34へ出力する。
【0044】
OR回路X2は、制御信号線K21を介して、命令レジスタA231に格納されているユニットに含まれる並列実行境界情報を取得し、制御信号線K22を介して、命令レジスタB232に格納されているユニットに含まれる並列実行境界情報とフォーマット情報とを取得し、命令レジスタA231に格納されているユニットに含まれる並列実行境界情報と、命令レジスタB232に格納されているユニットに含まれる並列実行境界情報と、命令レジスタB232に格納されているユニットに含まれるフォーマット情報とにOR演算を施して無動作命令フラグを生成する。ここで、無動作命令フラグは、1ビットからなり、“0”又は“1”の値をとる。OR回路X2は、生成した無動作命令フラグを第3命令デコーダ35へ出力する。
【0045】
このように、命令発行制御部31は、並列実行境界情報とフォーマット情報とを参照することにより、必要に応じて各命令デコーダへ出力される無動作フラグを設定する。これにより、各命令デコーダにおいて、命令としてのデコードが無効化される。
命令発行制御部31は、また、各ユニットの並列実行境界情報を用いて、命令レジスタ23に格納されたユニットの内どこまでを1サイクルで発行するかを決定し、発行されずに残ったユニットを示す情報を制御信号線K41を介して命令バッファ22へ伝達する。
【0046】
図5からわかるように、命令デコーダは3個あり、命令レジスタA231、B232及びC233は、それぞれ、命令デコーダ33、命令デコーダ34及び命令デコーダ35に対応しているので、命令としてデコードされる可能性のあるユニットは、命令レジスタA231、命令レジスタB232及び命令レジスタC233に格納されたユニットのみである。そこで、ユニット内の情報を参照して、これらのユニットの中で、42ビット命令の2ユニット目にあたるものや発行されずに残るものに関しては、命令発行制御部31は、そのユニットの命令としてのデコードを無効化する。42ビット命令の2ユニット目にあたるユニットは、直前のユニットが構成する命令の定数オペランドの一部として直接出力される。
【0047】
命令発行制御部31の動作について、具体例を用いて説明する。
図7に示すように、命令レジスタA231のユニット(ユニット1)のフォーマット情報が“1”である場合には、ユニット1と命令レジスタB232のユニット(ユニット2)とを連結して42ビット命令とするので、命令発行制御部31は、ユニット2の命令としてのデコードを無効化するために、“1”がセットされた無動作命令フラグを制御信号線K12を介して第2命令デコーダ34へ出力する。このとき、第2命令デコーダ34は、ユニット2をデコードしない。ユニット2は、ユニット1が構成する命令の定数オペランドの一部として出力される。
【0048】
また、図8に示すように、命令レジスタA231のユニット1のフォーマット情報が“0”、命令レジスタB232のユニット2のフォーマット情報が“1”である場合には、ユニット2と命令レジスタC233のユニット(ユニット3)とを連結して42ビット命令とするので、命令発行制御部31は、ユニット3の命令としてのデコードを無効化するために、“1”がセットされた無動作命令フラグを制御信号線K13を介して第3命令デコーダ35へ出力する。このとき、第3命令デコーダ35は、ユニット3をデコードしない。ユニット3は、ユニット2が構成する命令の定数オペランド51の一部として出力される。
【0049】
このように、命令発行制御部31は、フォーマット情報を参照することにより、必要に応じて各命令デコーダの無動作フラグを設定し、命令のデコードを無効化する。
次に、図9に示すように、命令レジスタA231のユニット1の並列実行境界情報が“1”であり、フォーマット情報が“0”である場合には、このサイクルではユニット1までしか発行されないので、命令発行制御部31は、ユニット2とユニット3との命令としてのデコードを無効化するために、“1”がセットされた無動作命令フラグをそれぞれ制御信号線K12、K13を介して第2命令デコーダ34と第3命令デコーダ35とへ出力する。このとき、第2命令デコーダ34と第3命令デコーダ35とは、ユニット2とユニット3とをデコードしない。ユニット1のみが命令として出力される。
【0050】
また、図10に示すように、命令レジスタA231のユニット1の並列実行境界情報が“0”であり、命令レジスタB232のユニット2の並列実行境界情報が“1”であり、ユニット1とユニット2とのフォーマット情報が共に“0”である場合には、このサイクルではユニット1からユニット2までの命令しか発行されないので、命令発行制御部31は、ユニット3の命令としてのデコードを無効化するために、“1”がセットされた無動作命令フラグを制御信号線K13を介して第3命令デコーダ35へ出力する。このとき、第3命令デコーダ35は、ユニット3をデコードしない。
【0051】
このように、命令発行制御部31は、命令レジスタに格納されている各ユニットの並列実行境界情報を参照することにより、必要に応じて各命令デコーダの無動作命令フラグを設定し、命令のデコードを無効化する。
(2)命令デコーダ32
命令デコーダ32は、図4に示すように、第1命令デコーダ33、第2命令デコーダ34及び第3命令デコーダ35から構成される。
【0052】
第1命令デコーダ33は、図5に示すように、命令レジスタA231から21ビットのユニットを読み出し、読み出したユニットを解読して、前記ユニットが構成する命令の動作に関する制御信号を生成し、生成した制御信号を実行部40へ出力し、命令内に置かれた定数オペランドを実行部40のデータバス48に転送する。ここで、第1命令デコーダ33は、1サイクルに、1個の命令の解読と、制御信号の出力と、定数オペランドの転送とを行う。
【0053】
第2命令デコーダ34は、命令発行制御部31から制御信号線K12を介して無動作命令フラグを受け取る。受け取った無動作命令フラグが“0”である場合には、第2命令デコーダ34は、第1命令デコーダ33と同様に、命令レジスタB232から21ビットのユニットを読み出し命令を解読して制御信号を生成し、生成した制御信号を実行部40へ出力し、命令内に置かれた定数オペランドを実行部40のデータバス48に転送する。ここで、第2命令デコーダ34は、1サイクルに、1個の命令の解読と、制御信号の出力と、定数オペランドの転送とを行う。受け取った無動作命令フラグが“1”である場合には、第2命令デコーダ34は、無動作命令としての制御信号を実行部40へ出力する。
【0054】
命令レジスタA231と命令レジスタB232に格納される各ユニットが42ビット命令を構成する場合において、図2の命令フォーマットに示すように、42ビット命令を構成する2つのユニットのうち、2番目のユニットには定数オペランドの一部しか配置されない。つまり、この2番目のユニットにはオペコードが存在しないため、この2番目のユニットを第2命令デコーダ34に入力する必要がない。そこで、42ビット命令の定数オペランド50は、図5に示すように、第1命令デコーダ33が出力したユニット内の定数オペランド50aと、命令レジスタB232から無条件に直接転送された定数オペランド50bとが連結されて構成されるものということになる。
【0055】
第3命令デコーダ35は、第2命令デコーダ34と同様に、命令発行制御部31から制御信号線K13を介して無動作命令フラグを受け取る。受け取った無動作命令フラグが“0”である場合には、第3命令デコーダ35は、第1命令デコーダ33と同様に、命令レジスタC233から21ビットのユニットを読み出し命令を解読して制御信号を生成し、生成した制御信号を実行部40へ出力し、命令内に置かれた定数オペランドを実行部40のデータバス48に転送する。ここで、第3命令デコーダ35は、1サイクルに、1個の命令の解読と、制御信号の出力と、定数オペランドの転送とを行う。受け取った無動作命令フラグが“1”である場合には、第3命令デコーダ35は、無動作命令としての制御信号を実行部40へ出力する。
【0056】
また、上記と同様に、命令レジスタC233と命令レジスタD234に格納される各ユニットが42ビット命令を構成する場合において、42ビット命令の定数オペランド52は、図5に示すように、第3命令デコーダ35が出力したユニット内の定数52aと、命令レジスタD234から無条件に直接転送された定数52bとが連結されて構成されるものということになる。
【0057】
上記に説明するように、第2命令デコーダ34は、命令レジスタA231に格納されたユニットの並列実行境界情報が“1”であるか、またはそのユニットのフォーマット情報が“1”であるときに無効化される。また、第3命令デコーダ35は、命令レジスタA231に格納されたユニットもしくは命令レジスタB232に格納されたユニットの並列実行境界情報が“1”であるか、または命令レジスタB232に格納されたユニットのフォーマット情報が“1”であるときに無効化される。
1.3.3 実行部40
実行部40は、解読部30での解読結果に基づいて、最大3つの命令を並列実行する回路ユニットであり、実行制御部41、PC(プログラムカウンタ)部42、レジスタファイル43、第1演算部44、第2演算部45、第3演算部46、オペランドアクセス部47及びデータバス48、49からなる。また、データバス48は、L1バス、R1バス、L2バス、R2バス、L3バス、R3バスからなり、データバス49は、D1バス、D2バス、D3バスからからなる。
(1)実行制御部41
実行制御部41は、解読部30の第1命令デコーダ33、第2命令デコーダ34又は第3命令デコーダ35から制御信号を受け取り、受け取った制御信号に基づいて実行部40の各構成要素42〜49を制御する。実行制御部41は、制御回路や配線から構成され、前記制御回路は、タイミング制御、動作許可禁止制御、ステータス管理、割り込み制御等を行う。
(2)PC部42
PC部42は、次に解読実行すべき命令が置かれている外部メモリ上の位置を示すアドレスを保持している。PC部42は、保持している前記アドレスを命令供給発行部20の命令フェッチ部21へ出力する。
(3)第1演算部44、第2演算部45及び第3演算部46
第1演算部44、第2演算部45及び第3演算部46は、それぞれ2個のデータに対して算術論理演算を行うALU及び乗算器と、シフト演算を行うバレルシフタと、入力データの上位32ビットと下位32ビットとを入れ換えるスワッパを内部に有する。
【0058】
第1演算部44は、L1バス及びR1バスを介してレジスタR0〜R31に格納されている値を取得し、R1バスを介して第1命令デコーダ33及び命令レジスタB232から出力される定数オペランドを取得し、これらの取得した値を用いて、実行制御部41による制御の下で演算を実行し、その演算結果を上位32ビットと下位32ビットとに分け、演算結果の上位32ビットと下位32ビットデータをD1バスを介してそれぞれセレクタ4321とセレクタ4322とへ転送する。セレクタ4321とセレクタ4322とについては、後述する。
【0059】
第2演算部45は、第1演算部44と同様に、L2バス及びR2バスを介してレジスタR0〜R31に格納されている値を取得し、R2バスを介して第2命令デコーダ34及び命令レジスタC233から出力される定数オペランドを取得し、これらの取得した値を用いて、実行制御部41による制御の下で演算を実行し、その演算結果を上位32ビットと下位32ビットとに分け、演算結果の上位32ビットと下位32ビットのデータをD2バスを介してそれぞれセレクタ4321とセレクタ4322とへ転送する。
【0060】
第3演算部46は、第1演算部44と同様に、L3バス及びR3バスを介してレジスタR0〜R31に格納されている値を取得し、R3バスを介して第3命令デコーダ35及び命令レジスタD234から出力される定数オペランドを取得し、これらの取得した値を用いて、実行制御部41による制御の下で演算を実行し、その演算結果を上位32ビットと下位32ビットとに分け、演算結果の上位32ビットと下位32ビットのデータをD3バスを介してそれぞれセレクタ4321とセレクタ4322とへ転送する。
(4)オペランドアクセス部47
オペランドアクセス部47は、レジスタファイル43と前記外部メモリとの間でオペランドの転送を行う回路である。
【0061】
具体的には、例えば、命令内で、オペコードとして“ld”(ロード)が置かれていた場合には、オペランドアクセス部47は、前記外部メモリに置かれていた1ワード(32ビット)のデータを取得し、取得したデータをD1〜D3バスのいずれかを介してレジスタファイル43内の指定されたレジスタに書き込む。また、命令内で、オペコードとして“st”(ストア)が置かれていた場合には、オペランドアクセス部47は、レジスタファイル43の指定されたレジスタの格納値をL1〜L3バスのいずれかを介して取得し、取得した格納値を前記外部メモリに書き込む。
(5)レジスタファイル43
レジスタファイル43は、図11に示すように、32個の64ビットレジスタR0〜R31と、セレクタ4321、4322と、レジスタ書込制御部431とを含んでおり、セレクタ4321、4322は、それぞれ制御信号線K61、K62を介して、レジスタ書込制御部431と接続されている。図11は、レジスタファイル43及びその周辺の構成要素の構成を示すブロック図である。このブロック図は、レジスタファイル43中の1つのレジスタR0に着目した図になっている。
【0062】
レジスタR0〜R31に格納された値は、第1命令デコーダ33、第2命令デコーダ34及び第3命令デコーダ35での解読結果に基づいて、データバス48を経由して第1演算部44、第2演算部45、第3演算部46及びオペランドアクセス部47に転送され、第1演算部44、第2演算部45、第3演算部46及びオペランドアクセス部47において演算又はオペランドアクセスが施され、これらの結果がデータバス49を経由してレジスタファイル43に送られ、レジスタR0〜R31に格納される。
【0063】
なお、レジスタファイル43へ書き込まれるデータには、第1演算部44〜第3演算部46から出力されるデータとオペランドアクセス部47から出力されるデータとがあるが、オペランドアクセス部47から出力されるデータのパスに関しては、図11において、図面を簡素化し構成を明確にするために、省略している。実際には、オペランドアクセス部47の出力は、第1演算部44〜第3演算部46の出力パスのいずれか一つを介してレジスタに転送されることになる。
【0064】
レジスタ書込制御部431は、当該サイクルで発行された最大3つの各命令の書き込みレジスタ番号と書き込み位置を示す情報とを含むセレクタ制御情報をセレクタ4321、4322へ出力する。ここで、書き込み位置を示す情報とは、その命令が上位32ビットの領域にのみ書き込む命令であるか、下位32ビットの領域のみに書き込む命令であるか、もしくは64ビット全体の領域に書き込む命令であるかの情報である。
【0065】
また、複数の命令があるレジスタの同一の位置(領域)に書き込む命令であった場合には、プログラムにおける命令の順序の情報をもとに、順序が後方(図3のユニット番号の順を参照)の命令の書き込みのみを行うようにセレクタを制御し、順序が先の命令の書込は行わないようにセレクタを制御する。実際には、プログラムにおける命令の順序にしたがって、第1演算部44、第2演算部45、第3演算部46の順に命令が発行されるので、プログラムの後方の命令により演算を実行する第3演算部46の演算結果の書き込みが最も優先され、次に第2演算部45の演算結果の書き込みが優先されることになる。
【0066】
セレクタ4321は、第1演算部44から出力される上位32ビットデータと、第2演算部45から出力される上位32ビットデータと、第3演算部46から出力される上位32ビットデータを受け取り、レジスタ書込制御部から出力されるセレクタ制御情報を制御信号線K61を介して受け取り、前記セレクタ制御情報に基づいて、第1演算部44から出力される上位32ビットデータと、第2演算部45から出力される上位32ビットデータと、第3演算部46から出力される上位32ビットデータとのうちから1のデータを選択し、選択したデータをレジスタR0〜R31のいずれか1のレジスタ(このレジスタは、セレクタ制御情報により指定される)の上位32ビットへ書き込む。
【0067】
セレクタ4322は、セレクタ4321と同様に、第1演算部44から出力される下位32ビットデータと、第2演算部45から出力される下位32ビットデータと、第3演算部46から出力される下位32ビットデータと受け取り、レジスタ書込制御部から出力されるセレクタ制御情報を制御信号線K62を介して受け取り、前記セレクタ制御情報に基づいて、第1演算部44から出力される下位32ビットデータと、第2演算部45から出力される下位32ビットデータと、第3演算部46から出力される下位32ビットデータとのうちから1のデータを選択し、選択したデータをレジスタR0〜R31のいずれか1のレジスタ(このレジスタは、セレクタ制御情報により指定される)の下位32ビットへ書き込む。
【0068】
以上説明したように、レジスタファイル43内の64ビットレジスタへの書き込みは、上位32ビットの領域と下位32ビットの領域についてそれぞれ独立に制御される。第1演算部44〜第3演算部46の演算結果は、上位32ビットと下位32ビットに分けられ、それぞれセレクタ4321とセレクタ4322に転送される。セレクタ4321とセレクタ4322とは、レジスタ書込制御部431の制御に基づいてレジスタに書き込むべき64ビットデータの上位32ビットデータと下位32ビットデータとをそれぞれ独立に選択する。
(6)データバス48及びデータバス49
上記PC部42、レジスタファイル43、第1演算部44、第2演算部45、第3演算部46及びオペランドアクセス部47は、図4に示すように、データバス48(L1バス、R1バス、L2バス、R2バス、L3バス、R3バス)及びデータバス49(D1バス、D2バス、D3バス)を介して接続されている。なお、L1バス及びR1バスはそれぞれ第1演算部44の2つの入力ポートに、L2バス及びR2バスはそれぞれ第2演算部45の2つの入力ポートに、L3バス及びR3バスはそれぞれ第3演算部46の2つの入力ポートに、D1バス、D2バス及びD3バスはそれぞれ第1演算部44、第2演算部45及び第3演算部46の出力ポートに接続されている。
1.4 プロセッサ310の動作
次に、命令群を解読実行する場合を具体的な一例として取り上げ、プロセッサ310の動作について説明する。
(1)命令群の一例
図12は、64ビットデータを扱う処理の一例を示すフローチャートである。
【0069】
本図中、“upper”はレジスタの上位32ビットを表し、“lower”はレジスタの下位32ビットを表す。基本命令では“lower”のみを参照および更新し、SIMD命令のみが“upper”も含めて参照および更新することになる。
本図に示されている命令群は、レジスタR2の上位とレジスタR3の上位とを加算して、加算結果をレジスタR3の上位に格納する演算と、レジスタR2の下位とレジスタR3の下位とを加算して、加算結果をレジスタR3の下位に格納する演算とを独立に行い(ステップS100)、レジスタR0の下位に定数“0x12345678”(0xは、以下に続く数文字列が16進数であることを表す)を転送し(ステップS101)、レジスタR0の上位と下位とを入れ換え(ステップS102)、レジスタR1に格納されている値をアドレスとして示される外部メモリ上の位置に格納されている値をレジスタR0の下位に格納し(ステップS103)、最後に、レジスタR3の上位とレジスタR0の上位とを加算して、加算結果をレジスタR0の上位に格納する演算と、レジスタR3の下位とレジスタR0の下位とを加算して、加算結果をレジスタR0の下位に格納する演算とを独立に行う(ステップS104)ことを示している。
【0070】
上記に示す命令群によると、まずステップS100にてレジスタR2とレジスタR3の間でSIMD型の処理を行ない、次にステップS101〜ステップS103にてレジスタR0に64ビットデータを設定し(上位は即値、下位は外部メモリから設定)、最後にステップS104にてレジスタR0とレジスタR3の間でSIMD型の処理を行なっている。
【0071】
図13は、図12に示す処理をプロセッサ310に行わせる場合において、前記処理を実行形式コードにより表現する場合のプログラムP60の内容とプログラムP60の実行の順序とを示す図である。
プログラムP60は、5個の命令P61〜P65から構成されており、命令供給単位としては2個のパケット60、61から構成されている。パケット60は、2個の命令P61〜P62を含み、パケット61は、3個の命令P63〜P665を含んでいる。
【0072】
命令P61は、ステップS100に対応し、命令P62は、ステップS101に対応し、命令P63は、ステップS102に対応し、命令P64は、ステップS103に対応し、命令P65は、ステップS104に対応する。
プログラムP60の各命令の処理内容は、実行形式コードの各フィールドにおいてニーモニックで表現されている。具体的には、命令P61及びP65におけるニーモニック“vaddw”は、2つの64ビットレジスタの上位と上位との32ビット加算と、前記2つの64ビットレジスタの下位と下位との32ビット加算との2つを独立にかつ並列に行なうSIMD型の加算を表す。命令P62におけるニーモニック“mov”は、定数およびレジスタの格納値を別のレジスタの下位32ビットへの転送を表す。命令P63におけるニーモニック“vchng”は、1個の64ビットレジスタの上位32ビットと下位32ビットとを入れ換えを表す。命令P64におけるニーモニック“ld”は、外部メモリからレジスタの下位32ビットへの転送を表している。
【0073】
ここで、“Rn”(n=0〜31)は、レジスタファイル43の中の一つのレジスタを示す。また、各命令の並列実行境界情報とフォーマット情報とについても、それぞれ“0”又は“1”で示している。
プログラムP60の各命令は、図13に示すように、3個の実行グループに分けられる。実行グループG11には、命令P61及びP62が含まれ、実行グループG12には、命令P63及びP64が含まれ、実行グループG13には、命令P65が含まれ、各実行グループ毎に実行がされる。
【0074】
すなわち、実行グループG11に含まれる命令が実行され、実行グループG11に含まれる命令の実行が完了すると、実行グループG12に含まれる命令が実行される。次に、実行グループG12に含まれる命令の実行が完了すると、実行グループG13に含まれる命令が実行される。
実行グループG11に含まれる命令の実行においては、命令P61とP62とが並行して実行される。また、実行グループG12に含まれる命令の実行においては、命令P63とP64とが並行して実行される。
(2)命令群を実行する場合のプロセッサ310の動作
図12に示す処理を実行する場合において、各実行グループごとのプロセッサ310の動作を説明する。
(命令のフェッチ)
命令フェッチ部21は、パケット60を外部メモリからフェッチし、命令バッファ22は、パケット60を蓄積し、次に、命令フェッチ部21は、パケット61を外部メモリからフェッチし、命令バッファ22は、パケット61を蓄積する。命令バッファ22に蓄積されているパケット60内の命令P61が命令レジスタA231へ転送され、命令P62の上位及び下位がそれぞれ命令レジスタB232及び命令レジスタC233へ転送される。命令バッファ22に蓄積されているパケット61内の命令P63が命令レジスタD234へ転送される。
(実行グループG11の実行)
次に、命令発行制御部31が各ユニットの並列実行境界情報とフォーマット情報とを参照して発行を制御する。具体的には、2番目のユニットのフォーマット情報が“1”であるので、2番目のユニットと3番目のユニットを連結して1つの命令として扱う。また、1番目のユニットの並列実行境界情報が“0”であり、2番目のユニットの並列実行境界情報が“1”であるので、1番目から3番目のユニットまでの2個の命令を1サイクルで並列実行すべき命令として発行する。
【0075】
実行部40では、レジスタR2とレジスタR3との間で、それぞれのレジスタの上位と上位、下位と下位がそれぞれ独立に加算され、それぞれの加算結果がレジスタR3の上位と下位とに格納され、レジスタR0の下位32ビットに定数“0x12345678”が転送される。
パケット61内の命令P63〜P65は、発行されずに残ったので命令バッファ22に蓄積されている。
(実行グループG12の実行)
命令バッファ22に蓄積されているパケット61内の命令P63が命令レジスタA231へ転送され、命令P64が命令レジスタB232へ転送され、命令P65が命令レジスタC233へ転送される。
【0076】
命令発行制御部31は、3個のユニット共フォーマット情報が“0”であるので、いずれのユニットも21ビット命令として発行を制御する。また、1番目のユニットの並列実行境界情報が“0”であり、2番目のユニットの並列実行境界情報が“1”であるので、1番目のユニットから2番目のユニットまでの2個の命令を発行するように制御する。3番目のユニットは、発行されずに残ったので命令バッファ22に蓄積される。
【0077】
実行部40では、第1演算部44にてレジスタR0の格納値の上位32ビットと下位32ビットとを入れ換えた結果が生成され、またオペランドアクセス部47にて外部メモリ内においてレジスタR1で示されるアドレスにより示される位置から32ビットデータを読み込み、これらのデータが共にレジスタファイル43に転送される。
【0078】
次に、レジスタR0の上位に書き込むのは“vchng”命令のみであるので、レジスタ書込制御部431は、この命令“vchng”の結果、すなわち第1演算部44の出力が選択されるようにセレクタ4321を制御し、レジスタR0の下位については、2つの命令共結果を書き込もうとするが、プログラム中の順序として“ld”命令の方が後方であるため、この“ld”命令の結果、すなわちオペランドアクセス部47の出力が選択されるようにセレクタ4322を制御する。これによって、具体的には、このサイクルが完了した時点で、レジスタR0の上位32ビットには定数“0x12345678”が、下位32ビットにはメモリ内においてレジスタR1の格納値で示されるアドレスにより示される位置の格納値が格納されていることになる。
【0079】
このようにして、同一サイクルにおいて、あるレジスタの一部の領域を変更する命令と、そのレジスタの一部または全部の領域を変更する命令とを同時に実行することが可能となる。
なお、このような実行形式コードを生成するコンパイル装置と、その命令スケジューリング方法については、後で述べる。
(実行グループG13の実行)
命令バッファ22に蓄積されていた1個のユニット(命令P65)が命令レジスタA231に転送される。このユニットは、フォーマット情報が“0”であるので21ビット命令であり、並列実行境界情報が“1”であるため、命令発行制御部31は、1つの21ビット命令を発行する。これで、供給されたユニットはすべて発行されたことになる。
【0080】
実行部40は、レジスタR3とレジスタR0との間で、上位と上位、下位と下位をそれぞれ独立に加算し、それぞれの加算結果をレジスタR0の上位と下位とに格納する。
以上のようにして、プロセッサ310において図12に示す処理を行うプログラムは3つの実行グループG11〜G13により実行される。ここで、それぞれの実行グループは同時に実行できず、実行グループ毎に順次実行される。
1.5 従来のプロセッサとの比較
次に、図12に示す処理を、従来のプロセッサにより実行する場合について説明し、プロセッサ310の場合と比較する。
【0081】
図14は、図12に示す処理を従来のプロセッサに行わせる場合において、前記処理を実行形式コードにより表現する場合のプログラムP70の内容とプログラムP70の実行の順序とを示す図である。
このプログラムP70は、図13に示すプログラムP60と同様に、2個のパケット70、71から構成されている。パケット70には、命令P71〜72が含まれ、パケット71には、命令P73〜P75が含まれる。各命令の処理内容は、図13に示すコードと同様に、各フィールドにおいてニーモニックで表現されている。
【0082】
命令P70〜75は、それぞれ、命令P60〜P65に対応して同様の命令である。なお、プログラムP70とプログラムP60との相違は、命令P73における“vchng”命令の並列実行境界情報が“1”であり、命令P63における“vchng”命令の並列実行境界情報が“0”である点のみである。
この相違が発生する理由は、命令P73における“vchng”命令と命令P74における“ld”命令のデスティネーションレジスタが共にレジスタR0であり、従来のコンパイル装置は、従来のプロセッサの構成では前記2個の命令は同時実行できないと判断し、このような実行形式コードを出力する。このため、図14に示すように、4つの実行グループG21〜G24が順に実行されることとなる。実行グループG21には、命令P71及びP72が含まれ、実行グループG22には、命令P73が含まれ、実行グループG23には、命令P74が含まれ、実行グループG24には、命令P75が含まる。
【0083】
このように、従来のプロセッサでは、レジスタへの書き込みを上位と下位で独立して制御していないため、同一のレジスタに書き込む2つの命令間にハザードが生じ、同時実行することができない。したがって、図12に示す処理の例のように、レジスタR0をデスティネーションレジスタとする命令が4個含まれる場合には、最低でも4つの実行グループに分かれる。ここで、それぞれの実行グループは同時に実行できず、実行グループ毎に順次実行される。
【0084】
以上説明したように、プロセッサ310においては、従来のプロセッサと比較すると、実行サイクル数が1サイクル減少する。
2 コンパイル装置200
コンパイル装置200は、プロセッサ310により実行されるコードを生成する。
2.1 用語と対象プロセッサ
ここでは、用いる用語、対象プロセッサ、コンパイル装置200の構成及び動作について説明する。
【0085】
まず、本説明で用いる用語の説明を行なう。
「オブジェクトコード」とは、再配置可能情報を含んだ対象プロセッサ向け機械語プログラムである。連結編集がされ、未確定アドレスが決定されることにより実行形式コードに変換される。
「プレデセッサ」とは、ある命令を実行する為に、それ以前に実行しておく必要のある命令である。
【0086】
次に、コンパイル装置200が対象とするプロセッサについて、説明する。
コンパイル装置200が対象とするプロセッサは、上記で説明したプロセッサ310である。このプロセッサは、コンパイル装置200により付与された並列実行境界情報を参照することにより実行グループを生成し、プロセッサ自体では並列実行可能か否かの判定を行なわない。したがって、並列実行境界と並列実行境界との間、すなわち1個の実行グループ内において、同時実行可能な命令が正しく配置されていることは、コンパイル装置200が保証する。
【0087】
ここで、並列実行境界と並列実行境界との間に配置できる命令に対する制限は以下の通りである。命令は、以下に示す3条件が満たされた場合にのみ並列実行ができる。
(条件1)1個の実行グループ中の命令の総数は3を越えない。
(条件2)プロセッサの命令デコーダは1個の実行グループ中の3ユニット目までしか、命令としてデコードすることができない(図5参照)。
(条件3)1個の実行グループ中の命令が使用する対象プロセッサ内の資源の総和は、ALUユニット3個、メモリアクセスユニット1個及び分岐ユニット1個の和を越えない。
【0088】
また、対象プロセッサは1個の実行グループ中の命令を必ずしも同時に実行するわけではない。命令の供給が追いつかないなどの理由で実行グループを2回以上に分けて実行することもある。このためコンパイル装置200は、1個の実行グループが2回以上に分割されて実行される場合であっても、プログラムの意味動作が正しくなるように、命令群中の命令順を設定する必要がある。
2.2 コンパイル装置200の構成
コンパイル装置200の構成について、図15を用いて説明する。ここで、図15は、コンパイル装置200の構成を示すブロック図である。
【0089】
コンパイル装置200は、前述したように、ソースコード記憶部130、コンパイル部210及びオブジェクトコード記憶部140から構成され、ソースコード記憶部130に記憶されている高級言語で書かれたソースコードからオブジェクトコードを生成してオブジェクトコード記憶部140に書き込むプログラム処理装置である。コンパイル部210は、コンパイラ上流部100、アセンブラコード生成部101、命令スケジューリング部102、オブジェクトコード生成部103を含む。
【0090】
コンパイル装置200は、具体的には、プロセッサ、ROM、RAM、ハードディスク装置などから構成される。コンパイル装置200の各構成要素は、コンピュータプログラムを前記プロセッサに実行させるものである。
2.2.1 コンパイラ上流部100及びアセンブラコード生成部101
コンパイラ上流部100は、ソースコード記憶部130からファイル形式で保存されている高級言語ソースコードを読み込み、構文解析及び意味解析を行なって内部形式コードを生成する。また、必要に応じて、最終的に生成される実行形式コードのサイズやその実行時間が短くなるように内部形式コードを最適化する。
【0091】
アセンブラコード生成部101は、コンパイラ上流部100により生成され、また最適化された内部形式コードからアセンブラコードを生成する。
コンパイラ上流部100及びアセンブラコード生成部101での処理は本発明の主眼ではなく、また、従来のコンパイル装置で行なわれてきた処理と同等であり、公知であるので、詳細についての説明は省略する。
2.2.2 命令スケジューリング部102
命令スケジューリング部102は、アセンブラコード生成部101で生成されたアセンブラコードに対し命令間の依存関係の解析、命令スケジューリング(命令順の並べ替え)及び並列実行境界の付加を行ない、アセンブラコードを対象プロセッサ向けに並列化する。命令スケジューリング部102は、依存関係解析部110、命令再配置部111及び実行境界付加部112から構成される。なお、ここでは簡単のため命令スケジューリング部102は基本ブロック単位で動作することとする。
【0092】
ここで、基本ブロックとは、実行が先頭の命令から始まり、必ず最後の命令まで実行される一連の命令列のことであり、この命令列は、当該命令列の途中から当該命令列の外へ制御を移す命令を含まない。また、当該命令列の外から当該命令列の途中へ制御が移されて入り込んでくることもない。
(1)依存関係解析部110
依存関係解析部110は、アセンブラコード生成部101により生成されたアセンブラコードを基にして、基本ブロックに含まれる命令毎に、基本ブロックに含まれる命令間の依存関係を解析し、各命令に対応するノード(節)と、各依存関係に対応するエッジ(矢印、directed edge)とから構成され命令間の依存関係を示す依存グラフを生成する。なお、依存グラフの生成方法は公知であり、例えば、論文 Instruction scheduling in the TOBEY compiler (R.J.Blainey, IBMJ.RES.DEVELOP. VOL.38 NO.5 SEPTEMBER 1994) に開示されているので、詳細についての説明は省略する。
【0093】
命令間の依存関係には以下の3種類がある。
・データ依存関係
ある資源にデータを格納する命令と、同じ資源からデータを参照する命令との間の依存関係。
・逆依存関係
ある資源からデータを参照する命令と、同じ資源にデータを格納する命令との間の依存関係。
・出力依存関係
ある資源にデータを格納する命令と、同じ資源にデータを格納する命令との間の依存関係。
【0094】
いずれの依存関係にある命令も、元の命令順を変更するとプログラムの意味が異なってしまう為、命令を並べ替えるときにおいても依存関係は守る必要がある。
依存グラフを説明するためのプログラムP80を図16に示す。プログラムP80は、アセンブラコードにより表現されており、命令P81〜P87を含む。
【0095】
また、プログラムP80に対応する依存グラフG100を視覚的に表現したものを図17に示す。依存グラフG100は、ノードN101〜N107、エッジE101〜E106を含む。ノードN101〜N107は、それぞれ命令P81〜P87に対応している。エッジE101〜E106は、それぞれ有向エッジである。エッジE103は、逆依存関係を示すエッジであり、他のエッジは、データ依存関係を示すエッジである。
【0096】
ノードN101とノードN102とは、ノードN101からノードN102へ向かうエッジE101を介して接続されている。ノードN102とノードN103とは、ノードN102からノードN103へ向かうエッジE102を介して接続されている。ノードN103とノードN104とは、ノードN103からノードN104へ向かうエッジE103を介して接続されている。ノードN104とノードN106とは、ノードN104からノードN106へ向かうエッジE104を介して接続されている。ノードN105とノードN106とは、ノードN105からノードN106へ向かうエッジE105を介して接続されている。ノードN106とノードN107とは、ノードN106からノードN107へ向かうエッジE107を介して接続されている。
【0097】
なお、図17において、依存グラフG100を分かりやすいように視覚的に表現しているが、依存グラフの実体は、絵ではなく、ノードとエッジとから構成されるデータの集合であることに注意を要する。
従来の依存解析方法では、レジスタ1個を1つの資源として扱い、アセンブラコードに記述されたオペランドであるレジスタ名を参照することによって依存関係を解析する。
【0098】
それに対して、コンパイル装置200の依存関係解析部110は、対象プロセッサの命令セットの特徴、すなわち64ビットレジスタの一部分の領域のみにデータを格納する命令、または前記一部分の領域からデータを参照する命令が存在することを踏まえて、レジスタの一部分の領域を1つの資源として扱う。
具体的には、依存関係解析部110は、64ビットレジスタの上位32ビットの領域と下位32ビットの領域とを独立した資源として扱う。例えば、ある64ビットレジスタの全体を参照する命令については、そのレジスタの上位と下位との2つの資源を共に参照する命令であると認識する。また、あるレジスタの下位32ビットのみを参照する命令については、下位32ビットの資源のみを参照する命令であると認識し、そのレジスタの下位32ビットの資源は、そのレジスタの上位32ビットの資源とは全く依存関係がないものと認識する。
【0099】
また、依存関係解析部110は、内部に図18に示すような参照格納資源テーブルT100を有している。
参照格納資源テーブルT100は、オペランドにレジスタRnとレジスタRmとを含む命令の種類と、前記命令のタイプとから構成される組を複数個含んでいる。ここで、n=0〜31、m=0〜31である。
【0100】
命令のタイプとは、以下に示す8個のケースの組合せである。
参照格納資源テーブルT100において、○印は、対応するケースが前記組合せに含まれることを示し、×印は、対応するケースが前記組合せに含まれないことを示す。
例えば、参照格納資源テーブルT100において、命令の種類「mov Rn、Rm」に対応するタイプは、ケース2及びケース8に○印が付されており、他のケースには、×印が付されてるので、前記命令は、「レジスタRnの下位32ビットからデータを参照し、レジスタRmの下位32ビットにデータを格納する」タイプの命令であることを示している。
(ケース1)
命令は、レジスタRnの上位32ビットからデータを参照する。
(ケース2)
命令は、レジスタRnの下位32ビットからデータを参照する。
(ケース3)
命令は、レジスタRmの上位32ビットからデータを参照する。
(ケース4)
命令は、レジスタRmの下位32ビットからデータを参照する。
(ケース5)
命令は、レジスタRnの上位32ビットにデータを格納する。
(ケース6)
命令は、レジスタRnの下位32ビットにデータを格納する。
(ケース7)
命令は、レジスタRmの上位32ビットにデータを格納する。
(ケース8)
命令は、レジスタRmの下位32ビットにデータを格納する。
【0101】
依存関係解析部110は、参照格納資源テーブルT100を参照することにより、命令がどのタイプであるかを知り、これにより、命令がどの資源からデータを参照しまた、どの資源にデータを格納するかの情報を得て、この情報を基にしてノード(節)間のエッジ(矢印)からなる依存関係を生成する。
このように、レジスタの上位32ビットと下位32ビットとを独立に管理することにより、レジスタ名のみを参照する方法に比べて、より厳密な依存関係を求めることができる。これによって、依存グラフ中の不要なエッジ(矢印)を削減し、各命令間の並列実行の可能性をより高めることができる。
【0102】
例えば、あるレジスタの上位32ビットのみにデータを格納する命令と同じレジスタの下位32ビットのみからデータを参照する命令とからなる命令群がある場合、従来の依存グラフ生成方法ではレジスタ名にて依存を認識するため、これらの2つの命令間にはデータ依存関係があるものと判断する。このため、これらの2つの命令は同時実行はされない。
【0103】
一方、依存関係解析部110は、これらの2つの命令間にはデータ依存関係は存在しないと判断し、これらの2つの命令を同時実行することが可能となる。なお、具体例については、コンパイル装置200の具体的動作と共に、後で述べる。
(2)命令再配置部111
命令再配置部111は、依存関係解析部110により生成された依存グラフを用いて、基本ブロック内の命令を並べ替え、対象プロセッサ向けの並列化されたアセンブラコードを生成する。命令再配置部111は、命令集合化部120を含む。
【0104】
命令再配置部111の処理の詳細について、図19に示すフローチャートを用いて説明する。
命令再配置部111は、依存関係解析部110が生成した依存グラフの全てのノードについて、以下の処理(ステップS2〜S10)を繰り返す(ループ1:ステップS1〜S11)。
【0105】
まず、命令再配置部111は、現時点で配置候補となり得るノードを候補ノードとして依存グラフより抽出し、候補ノードから構成される配置候補集合を生成する。ここで配置候補となり得るノードとは、「プレデセッサが全て配置完了済み」であるノードである(ステップS2)。
次に、命令再配置部111は、配置候補集合の全ての候補ノードについて、以下の処理(ステップS4〜S8)を繰り返す(ループ2:ステップS3〜S9)。
【0106】
命令再配置部111は、配置候補集合から現時点で配置することが最良と思われる候補ノード(以下、単に「最良ノード」と呼ぶ。)を取り出す(ステップS4)。最良ノードの決定方法については後述する。
続いて最良ノードが、実際に配置可能か否かを判断し、可能な場合には(ステップS5)、仮配置ノード集合に前記最良ノードを仮配置する(ステップS6)。この判断は、最良ノードが前述の演算器の制約、命令数の制約および命令デコーダの制約を満たすかどうかによって決定する。
【0107】
続いて、現時点で仮配置されている仮配置ノード集合を調べ、更に命令を仮配置することができるか否かを判断する。配置不可と判断された場合は(ステップS7)、ループ2を終了し処理をステップS10へ移す。
配置可能と判断された場合(ステップS7)、最良ノードが配置されたことによって新たに配置候補となり得るノードが生じたか否かを判断し、新たな配置候補が生じた場合はこれを配置候補集合に追加する(ステップS8)。ステップS8で新たに配置候補にできるのは、「(現在配置しようとしている)最良ノードのみをプレデセッサとして持ち、且つ、最良ノードとの依存関係が逆依存もしくは出力依存」のノードである。つまりここで新たな配置候補になることができるノードは、最良ノードと同じサイクルで実行することはできるが、最良ノードより前のサイクルでは実行できないノードである。
【0108】
ループ2が終了した後、仮配置ノード集合に含まれているノードを配置ノードとして確定する(ステップS10)。具体的には、仮配置ノード集合に含まれているノードに対応する命令を元の命令列から取り出し、実行境界付加部112へ渡すための新たな命令列に再配置する。この段階で配置候補集合の一部の命令が、同時に実行する命令群としてまとめられ確定したことになる。ステップS3〜ステップS10により示される一連の処理は、命令集合化部120を構成する。
【0109】
次に、ステップS4における最良ノードの決定方法について述べる。最良ノードは、依存グラフ、仮配置ノード集合を参照して、基本ブロック内の命令全体を最も短時間で実行できるであろう命令をヒューリスティックに選び出す。ここでは現時点での依存グラフにおいて依存グラフの終端までの命令の実行時間総和が最も多いものを選ぶ。この条件に合致する命令が多数ある場合には、元の命令順が早い命令を最良ノードとする。
(3)実行境界付加部112
実行境界付加部112は、命令再配置部111のステップS9で配置が確定した命令群の末尾の命令に並列実行境界を付加し、並列実行境界が付加された命令群を出力する。
2.2.3 オブジェクトコード生成部103
オブジェクトコード生成部103は、命令スケジューリング部102により出力された命令群(アセンブラコード)をオブジェクトコードに変換し、オブジェクトコードをファイルとしてオブジェクトコード記憶部140へ書き込む。
2.3 コンパイル装置200の動作
次に、コンパイル装置200の特徴的な構成要素の動作について、具体的な命令群を用いて説明する。
【0110】
コンパイル装置200の動作を説明するために一例として用いるプログラムP90を図20に示す。プログラムP90は、ソースコードからコンパイラ上流部100及びアセンブラコード生成部101を経て生成されたアセンブラコードであり、命令P91〜P97を含む。
命令P91〜P97の意味は以下の通りである。
・命令P91…レジスタR0の上位32ビットとレジスタR1の上位32ビットとを加算して、加算結果をレジスタR1の上位32ビットに格納し、レジスタR0の下位32ビットとレジスタR1の下位32ビットとを加算して、結果をレジスタR1の下位32ビットに格納するSIMD命令。
・命令P92…レジスタR2の上位32ビットとレジスタR1の上位32ビットとを加算して、加算結果をレジスタR1の上位32ビットに格納するSIMD命令。
・命令P93…レジスタR1の下位32ビットをレジスタR3の下位32ビットに転送する基本命令。
・命令P94…レジスタR1の下位32ビットに定数0x3を加算して、加算結果をレジスタR1の下位32ビットに格納する基本命令。
・命令P95…レジスタR3の下位32ビットをレジスタR4の下位32ビットをアドレスとして示されるメモリ上の位置に格納する基本命令。
・命令P96…定数0x1234をレジスタR5の下位32ビットに転送する基本命令。
・命令P97…レジスタR5の下位32ビットをレジスタR6の下位32ビットをアドレスとして示されるメモリ上の位置に格納する基本命令。
【0111】
命令スケジューリング部102の動作について説明する。
命令スケジューリング部102は、プログラムP90を入力として受け取る。次に、依存関係解析部110が起動され、依存関係解析部110は、プログラムP90を基にして、図21に示す依存グラフG120を生成する。
この際、前述のように、依存関係解析部110は、コンパイラ内部に保有している参照格納資源テーブルT100を参照することにより、64ビットレジスタの上位32ビットと下位32ビットとを独立の資源としてとらえて依存関係を検出する。
【0112】
例えば、命令P92と命令P93との依存関係の解析においては、依存関係解析部110は、命令P92をレジスタR1の上位32ビットにデータを格納する命令として認識し、命令P93をレジスタR1の下位32ビットからデータを参照する命令として認識する。このように、命令P92と命令P93との間において、同一の資源に関する依存関係が存在しないので、依存関係解析部110は、これら2命令の間には依存関係は無いものとみなし、依存グラフG120において、この2命令間のエッジ(矢印)を生成しない。
【0113】
依存グラフG120は、ノードN121〜N127、エッジE121〜E126を含む。ノードN121〜N127は、それぞれ命令P91〜P97に対応している。エッジE121〜E126は、それぞれ有向エッジである。エッジE123は、逆依存関係を示すエッジであり、他のエッジは、データ依存関係を示すエッジである。
【0114】
ノードN121とノードN122とは、ノードN121からノードN122へ向かうエッジE121を介して接続されている。ノードN121とノードN123とは、ノードN121からノードN123へ向かうエッジE122を介して接続されている。ノードN122とノードN124とは、ノードN122からノードN124へ向かうエッジE124を介して接続されている。ノードN123とノードN124とは、ノードN123からノードN124へ向かうエッジE123を介して接続されている。ノードN123とノードN125とは、ノードN123からノードN125へ向かうエッジE125を介して接続されている。ノードN126とノードN127とは、ノードN126からノードN127へ向かうエッジE126を介して接続されている。
【0115】
なお、図21において、依存グラフG120を視覚的に表現しているが、依存グラフG100と同様に、依存グラフの実体は、絵ではなく、ノードとエッジとから構成されるデータの集合であることに注意を要する。
次に、命令再配置部111が起動される。命令再配置部111は、図19に示すフローチャートのステップS3〜S9で示されるループ2が終了する度に、ステップS10において、単数または複数の命令を含むグループを配置ノードとして確定する。このグループは、同一サイクルに並列実行可能な命令の集合であり、「実行グループ」と呼ぶ。以下に、図19に示すフローチャートのステップに沿って、各実行グループ毎に具体的に説明する。
(実行グループ1の決定)
命令再配置部111は、この時点でプレデセッサの無いノードはノードN121及びN126であるので、ノードN121及びN126を候補ノードとする配置候補集合を生成する(ステップS2)。次に、ノードN121を最良ノードとして選ぶ(ステップS4)。続いて、ノードN121が配置可能か否かを判定し、ここではノードN121は配置可能と判定され(ステップS5)、ノードN121を仮配置する(ステップS6)。次に、命令再配置部111は、配置状態判定をし、ここでは更に配置が可能と判断され(ステップS7)、新たな配置候補は生じないので(ステップS8)、制御はループ2の先頭に戻る(ステップS9、S3)。まだ配置候補集合にノードがあるので、命令再配置部111は、ループ2を繰り返す(ステップS3〜S9)。
【0116】
次に、配置候補集合にはノードN126しか残っていないので、命令再配置部111は、ノードN126を最良ノードとして選ぶ(ステップS4)。続いて、命令再配置部111は、ノードN126が配置可能か否かを判定し、ここでは配置可能と判定し(ステップS5)、仮配置ノード集合にノードN126を最良ノードとして仮配置する(ステップS6)。次に、配置状態判定を行い、ここでは更に配置が可能と判断する(ステップS7)。新たな配置候補は生じないので(ステップS8)、制御はループ2の先頭に戻る(ステップS9、S3)。この時点で配置候補集合が空なのでループ2を終了し、制御はステップS10に移る。命令再配置部111は、仮配置ノード集合にある命令を配置する(ステップS10)。
【0117】
以上で、1番目の実行グループを求める処理を終わる。未配置ノードが残っているので、命令再配置部111は、さらにループ1を繰り返す(ステップS10、S1)。
(実行グループ2の決定)
次に、命令再配置部111は、この時点でプレデセッサの無いノードはノードN122、N123、N127であるので、ノードN122、N123、N127を候補ノードとする配置候補集合を生成する(ステップS2)。次に、ノードN122を最良ノードとして選ぶ(ステップS4)。続いて、ノードN122が配置可能か否かを判定し、ここでは配置可能と判定し(ステップS5)、ノードN122を仮配置する(ステップS6)。次に、命令再配置部111は、配置状態判定をし、ここでは更に配置が可能と判定する(ステップS7)。次に、新たな配置候補は生じないので(ステップS8)、ループ2の先頭に戻る(ステップS9、S3)。命令再配置部111は、まだ配置候補集合にノードがあるのでループ2を繰り返す(ステップS3〜S9)。
【0118】
次に、命令再配置部111は、ノードN123を最良ノードとして選ぶ(ステップS4)。続いて、ノードN123が配置可能か否かを判定し、ここでは配置可能と判定し(ステップS5)。ノードN123を仮配置する(ステップS6)。次に、命令再配置部111は、配置状態判定をし、ここでは更に配置が可能と判断する。(ステップS7)。新たな配置候補は生じないので(ステップS8)、制御はループ2の先頭に戻る(ステップS9、S3)。まだ配置候補集合にノードがあるので、命令再配置部111は、ループ2を繰り返す(ステップS3〜S9)。
【0119】
次に、配置候補集合にはノードN127しか残っていないので、命令再配置部111は、ノードN127を最良ノードとして選ぶ(ステップS4)。続いて、ノードN127が配置可能か否かを判定し、ここでは配置可能と判定し(ステップS5)。ノードN127を仮配置する(ステップS6)。次に、命令再配置部111は、配置状態判定を行い、すでに対象プロセッサの並列度の上限である3命令が仮配置されているので、これ以上の配置は不可能と判定し(ステップS7)、ループ2を中断し、制御をステップS10に移す。命令再配置部111は、仮配置ノード集合にある命令を配置する(ステップS10)。
【0120】
以上により、2番目の実行グループを求める処理を終わる。未配置ノードが残っているので、命令再配置部111は、ループ1を繰り返す(ステップS10、S1)。
(実行グループ3の決定)
この時点でプレデセッサの無いノードはノードN124、N125であるので命令再配置部111は、ノードN124、N125を候補ノードとする配置候補集合を生成する(ステップS2)。以降の処理内容は上記の実行サイクル1の場合と同様であるので省略する。こうして、これら2つのノードが3番目の実行グループの配置命令として配置される。
【0121】
次に、実行境界付加部112が起動される。実行境界付加部112は、命令再配置部111で配置された各実行グループの最後の命令の並列実行境界情報を“1”にセットし、並列実行境界が付加された命令群を出力する。
続いて、オブジェクトコード生成部103が起動され、オブジェクトコード生成部103は、実行境界付加部112から出力された命令群をオブジェクトコードに変換し、オブジェクトコードをファイルとしてオブジェクトコード記憶部140へ書き込む。
【0122】
このようにして生成された最終的な実行形式コードであるプログラムP100と実行の順序を図22に示す。なお、図22においては、プログラムはニーモニックにより表現されているが、実際には、64ビット単位にまとめられたビット列である。
プログラムP100は、7個の命令P101〜P107から構成されており、命令供給単位としては3個のパケット150、151、152から構成されている。パケット150は、3個の命令P101〜P103を含み、パケット151は、3個の命令P104〜P106を含み、パケット152は、1個の命令P107を含んでいる。命令P101〜P107は、それぞれ並列実行境界情報と、フォーマット情報と、命令コードとを含んでいる。
【0123】
命令P101は、命令P91に対応し、命令P102は、命令P96に対応し、命令P103は、命令P92に対応し、命令P104は、命令P93に対応し、命令P105は、命令P97に対応し、命令P106は、命令P94に対応し、命令P107は、命令P95に対応している。
命令P102と命令P105と命令P107とにおいて、並列実行境界情報は、それそれ”1”であり、並列実行境界であることを示すしている。
【0124】
上記に説明するように、3個の実行グループG91、G92、G93が生成され、実行グループG91は、命令P91と命令P96とを含み、実行グループG92は、命令P92と命令P93と命令P97とを含み、実行グループG93は、命令P94と命令P95とを含む。
実行グループG91とG92とG93とは、この順に実行される。実行グループG91内においては、命令P91と命令P96とが同時に実行される。実行グループG92内においては、命令P92と命令P93と命令P97とが同時に実行される。実行グループG93内においては、命令P94と命令P95とが同時に実行される。
2.4 従来のコンパイル装置との比較
次に、図20に示すプログラムP90を、従来のコンパイル装置により処理した場合について、本発明に係るコンパイル装置200の場合と比較する。
【0125】
従来のコンパイル装置も、依存関係を解析するブロックにて依存グラフを生成する。しかし、本発明の場合と異なり、アセンブラコードに記述されたレジスタ名を参照し、レジスタ全体を一つの資源として扱って、各命令においてデータが格納される資源又はデータが参照される資源に関する情報を求め、その情報を基にして命令間の依存関係を検出する。
【0126】
例えば、図20に示すプログラムP90に含まれる命令P92と命令P93との依存関係解析において、まず命令P92はレジスタR1にデータを格納する命令として認識され、命令P93はレジスタR1からデータを参照する命令として認識される。これにより、これら2命令の間にはレジスタR1に関してデータ依存関係があるとみなされ、依存グラフにおいては、この2命令にそれぞれ相当する2ノード(節)間において、データ依存関係に相当するエッジ(矢印)が生成される。このようにして生成された依存グラフG130を図23に示す。依存グラフG130は、図20に示すプログラムP90に対応している。
【0127】
依存グラフG130は、ノードN131〜N137、エッジE131〜E136を含む。ノードN131〜N137は、それぞれ命令P91〜P97に対応している。エッジE131〜E136は、それぞれ有向エッジである。エッジE134は、逆依存関係を示すエッジであり、他のエッジは、データ依存関係を示すエッジである。
【0128】
ノードN131とノードN132とは、ノードN131からノードN132へ向かうエッジE131を介して接続されている。ノードN132とノードN133とは、ノードN132からノードN133へ向かうエッジE132を介して接続されている。ノードN132とノードN134とは、ノードN132からノードN134へ向かうエッジE133を介して接続されている。ノードN133とノードN134とは、ノードN133からノードN134へ向かうエッジE134を介して接続されている。ノードN133とノードN135とは、ノードN133からノードN135へ向かうエッジE135を介して接続されている。ノードN136とノードN137とは、ノードN136からノードN137へ向かうエッジE136を介して接続されている。
【0129】
なお、図23において、依存グラフG130を視覚的に表現しているが、依存グラフG100と同様に、依存グラフの実体は、絵ではなく、ノードとエッジとから構成されるデータの集合であることに注意を要する。
従来のコンパイル装置により生成された最終的な実行形式コードであるプログラムP110と実行の順序を図24に示す。
【0130】
プログラムP110は、7個の命令P111〜P117から構成されており、命令供給単位としては3個のパケット160、161、162から構成されている。パケット160は、3個の命令P111〜P113を含み、パケット161は、3個の命令P114〜P116を含み、パケット162は、1個の命令P117を含んでいる。命令P111〜P117は、それぞれ並列実行境界情報と、フォーマット情報と、命令コードとを含んでいる。
【0131】
命令P111は、命令P91に対応し、命令P112は、命令P96に対応し、命令P113は、命令P92に対応し、命令P114は、命令P97に対応し、命令P115は、命令P93に対応し、命令P116は、命令P94に対応し、命令P117は、命令P95に対応している。
命令P112と命令P114と命令P116と命令P117とにおいて、並列実行境界情報は、それそれ”1”であり、並列実行境界であることを示すしている。
【0132】
3個の実行グループG111、G112、G113、G114が生成され、実行グループG111は、命令P91と命令P96とを含み、実行グループG112は、命令P92と命令P97とを含み、実行グループG113は、命令P93と命令P94とを含み、実行グループG114は、命令P95を含む。
実行グループG111とG112とG113とG114とは、この順に実行される。実行グループG111内においては、命令P91と命令P96とが同時に実行される。実行グループG112内においては、命令P92と命令P97とが同時に実行される。実行グループG113内においては、命令P93と命令P94とが同時に実行される。実行グループG114内においては、命令P95が実行される。
【0133】
図22と図24を比較して明らかなように、本発明のコンパイル装置200においては、従来のコンパイル装置と比べると、実行グループ数が1つ減っている増えている。つまり、実行サイクル数が1サイクル減っていることになる。
このように本発明のコンパイル装置200において、実行グループ数が減っているのは、コンパイル装置200の依存関係解析部110が、レジスタの一部分の領域を用いて命令間の依存関係を解析するためであり、依存グラフにおいて厳密には真のデータ依存関係の無い前述の2命令間にエッジ(矢印)を生成しないことによる。
II 実施の形態2
上述の実施の形態1におけるプロセッサ310は、コンパイル装置200により実行形式コード生成時に静的に複数の命令間の依存関係が解析され、解析結果に基づいて命令コードが移動されて生成された命令ストリームを実行する。プロセッサ310は、いわゆるスタティックスケジューリングに基づくプロセッサである。
【0134】
以下においては、並列実行の可否をハードウェアで動的に決定するダイナミックスケジューリングに基づくプロセッサ500についての実施の形態について説明する。なお、プロセッサ500は、図示されていない。
プロセッサ500は、最大3命令を並列実行するスーパースカラ方式のプロセッサである。
【0135】
プロセッサ500が解読し実行する命令のフォーマットは、図2に示す命令フォーマットから、並列実行境界情報を取り除いたものである。命令の供給と発行とは、プロセッサ310と同様になされるが、命令内に並列実行境界情報が無いので、各サイクルにおいてどの命令まで発行可能であるかどうかの検出およびその制御はプロセッサ500が行なう。
1.1 プロセッサ500の構成
プロセッサ500のハードウェア構成については、その大部分はプロセッサ310のハードウェア構成と同一であるが、命令の発行制御の方法のみが異なる。以下において、プロセッサ310との相違点を中心として説明する。
【0136】
相違点は、図4に示す命令レジスタ23、命令デコーダ32および命令発行制御部31周辺の構成である。
プロセッサ310では、コンパイル装置により並列実行の可否が静的に解析され、その結果として命令のフォーマットは、並列実行境界情報を含むので、命令発行制御部31は、図6に示すように、命令レジスタA231及び命令レジスタB232にそれぞれ含まれる並列実行境界情報とフォーマット情報と(合わせて4ビットの情報)を読み出し、第2命令デコーダ34及び第3命令デコーダ35に対して無動作命令フラグを出力するという、非常に単純な構成になっている。本実施の形態のプロセッサ500では、並列実行の可否の解析を、後述する命令発行制御部171で行なう。
【0137】
図25は、本実施の形態のプロセッサ500の命令レジスタ170及びその周辺の構成要素の構成を示すブロック図である。
プロセッサ500は、プロセッサ310の命令レジスタ23、命令発行制御部31、命令デコーダ32に代えて、命令レジスタ170、命令発行制御部171、命令デコーダ175(図示していない)を備えている。
【0138】
命令レジスタ170は、命令レジスタA1701、命令レジスタB1702、命令レジスタC1703及び命令レジスタD1704を含んでいる。
命令デコーダ175は、第1命令デコーダ172、第2命令デコーダ173及び第3命令デコーダ174を含んでいる。
命令発行制御部171は、命令レジスタ170に含まれる各命令レジスタに格納されているユニットのフォーマット情報を読み出し、第1命令デコーダ172、第2命令デコーダ173及び第3命令デコーダ174から各解読結果を受け取る。次に、命令レジスタA1701、命令レジスタB1702、命令レジスタC1703及び命令レジスタD1704に格納されている各命令の並列実行の可否を判断し、その判断結果に基づいて、第2命令デコーダ173及び第3命令デコーダ174に対して、“1”にセットされた無動作命令フラグを出力する。つまり、その命令デコーダの解読結果を無効化する。その後、各命令デコーダから実行制御部41へ各命令の制御信号が送られる。
【0139】
具体的には、命令発行制御部171は、まず命令レジスタA1701と命令レジスタB1702に格納されたユニットのフォーマット情報をそれぞれ制御信号線K21及びK22を介して読み出し、命令レジスタA1701のユニットのフォーマット情報が“1”の場合には、第2命令デコーダ173へ出力する無動作命令フラグを“1”にセットし、無動作命令フラグを制御信号線K12を介して第2命令デコーダ173へ出力する。また、命令レジスタA1701のユニットのフォーマット情報が“0”であり、かつ命令レジスタB1702のユニットのフォーマット情報が“1”の場合には、第3命令デコーダ174へ出力する無動作命令フラグを“1”にセットし、無動作命令フラグを制御信号線K13を介して第3命令デコーダ174へ出力する。
【0140】
これらと並行して、命令発行制御部171は、各命令デコーダ172〜174の解読結果をそれぞれ制御信号線K51、K52、K53を介して受け取り、並列実行の可否を判断する。
具体的には、命令発行制御部171は、まず第1命令デコーダ172の解読結果のオペコードとオペランドから、この命令(前記オペコードとオペランドにより示される命令、第1命令と呼ぶ。)がどのレジスタのどの部分にデータを格納し、又はどの部分からデータを参照する命令であるかの情報を得る。命令発行制御部171は、参照格納資源テーブルT100と同じテーブルを有しており、このテーブルを用いて、64ビットレジスタの上位32ビットと下位32ビットとをそれぞれ独立の資源とみなし、オペコードに基づいて、それぞれの資源からデータを参照するか又はそれぞれの資源にデータを格納するかを判断する。
【0141】
続いて、次に他の各命令デコーダにより有効に命令が解読された場合の解読結果を参照する。
具体的には、第2命令デコーダ173へ出力する無動作命令フラグが“1”にセットされていない場合には、第2命令デコーダ173の解読結果を参照し(ここで、解読された命令を第2命令と呼ぶ。)、1番目の命令と同様に資源の参照及び格納に関する情報を得る。
【0142】
また、第2命令デコーダ173へ出力する無動作命令フラグが“1”にセットされており、かつ第3命令デコーダ174へ出力する無動作命令フラグが“1”にセットされていない場合には、第3命令デコーダ174の解読結果を参照し(ここで、解読された命令を第2命令と呼ぶ。)、1番目の命令と同様に資源の参照及び格納に関する情報を得る。
【0143】
ここで、資源の参照及び格納に関する情報は、実施の形態1に示すコンパイル装置200の参照格納資源テーブルT100から得られる情報と同等である。
上記の第1命令及び第2命令の2命令の資源の格納および参照に関する情報から、これらの2命令の間にデータ依存の関係があるかどうかを判断し、データ依存の関係があった場合には、第2命令は第1命令と同時に実行することができないので、第2命令を解読する命令デコーダ以降の命令デコーダの無動作命令フラグを“1”にセットし、当該命令デコーダへ出力する。
【0144】
同様にして、第3の命令の存在を検出し、第3の命令が存在する場合には、第1の命令と第3の命令との間の依存関係及び第2の命令と第3の命令との間の依存関係を解析し、データ依存関係が存在する場合には、第3の命令を解読する命令デコーダの無動作命令フラグを“1”にセットして当該命令デコーダへ出力する。次に、当該サイクルで同時実行不可能な命令に関しては、その命令デコーダは、無動作命令を含む制御信号を実行制御部41へ送る。
【0145】
最後に、命令発行制御部171は、このサイクルで発行されたユニット数の情報を制御信号線K41を介して命令バッファ22に送り、命令バッファ22は、この情報をもとに命令バッファ中の有効なユニットを示す状態を次の状態に遷移する。
1.2 プロセッサ500の動作
次に、プロセッサ500の動作について、具体的な例を示して説明する。例としては、図20に示すアセンブラコードによる表現されているプログラムP90を用いる。プログラムP90は、アセンブラ(アセンブル装置)により出力されたアセンブラコードである。
【0146】
プログラムP90は、プロセッサ500に対応するコンパイル装置によって命令の並べ替えが施される。この命令の並べ替えは、プロセッサ500の命令発行制御部171の動作を考慮して、より高い並列度で実行することを目的として行なわれる。前記コンパイル装置によってプログラムP90に対して命令の並べ替えを施し、64ビットずつのパケットにパックして生成されたプログラムP120(実行形式コードにより表現されてる)を図26に示す。
【0147】
プログラムP120は、7個の命令P121〜P127から構成されており、命令供給単位としては3個のパケット180、181、182から構成されている。パケット180は、3個の命令P121〜P123を含み、パケット181は、3個の命令P124〜P126を含み、パケット182は、1個の命令P127を含んでいる。命令P121〜P127は、それぞれ並列実行境界情報と、フォーマット情報と、命令コードとを含んでいる。
【0148】
命令P121は、命令P91に対応し、命令P122は、命令P96に対応し、命令P123は、命令P92に対応し、命令P124は、命令P93に対応し、命令P125は、命令P97に対応し、命令P126は、命令P94に対応し、命令P127は、命令P95に対応している。
以下に、プロセッサ500が図26に示すプログラムP120(実行形式コード)を実行する際の各サイクルにおける動作について説明する。
(第1サイクルの動作)
パケット180がメモリから供給され、パケット180内の3つのユニットが順に命令レジスタ170に転送される。具体的には、命令P121(“vaddw”命令を含む)が命令レジスタA1701に、命令P122(“mov”命令を含む)が命令レジスタB1702に、命令P123(“vaddhi”命令を含む)が命令レジスタC1703に転送される。
【0149】
次に、命令発行制御部171は、以下に示すようにして、命令の発行を制御する。
命令発行制御部171は、まず、各命令レジスタに格納されているフォーマット情報を参照して適切な命令デコーダの無動作命令フラグをセットするが、上記3個の命令レジスタに格納されているユニットのフォーマット情報は共に“0”であるので、フォーマット情報による制御は行なわない。
【0150】
次に、命令発行制御部171は、各命令デコーダの解読結果を参照して各命令の格納または参照する資源に関する情報を得る。
具体的には、命令発行制御部171は、命令P121に含まれる“vaddw”命令が、レジスタR0及びレジスタR1の上位32ビット及び下位32ビットを共に参照してレジスタR1の上位32ビット及び下位32ビットにデータを格納する命令であると判断し、命令P122に含まれる“mov”命令が、レジスタR5の下位32ビットにデータを格納する命令であると判断し、命令P123に含まれる“vaddhi”命令が、レジスタR2及びレジスタR1の上位32ビットを参照し、レジスタR1の上位32ビットにデータを格納する命令であると判断する。
【0151】
次に、命令発行制御部171は、各命令間にデータ依存関係が存在するかどうかを判定する。
具体的には、まず、命令発行制御部171は、命令P121に含まれる“vaddw”命令と命令P122に含まれる“mov”命令との間にはデータ依存関係が存在しないので、命令P121と命令P122とは同時実行可能と判断する。次に、命令P121に含まれる“vaddw”命令と命令P123に含まれる“vaddhi”命令との間にはレジスタR1の上位32ビットに関してデータ依存が存在すると判定するので、このサイクルで“vaddhi”命令の発行は不可能であると判断し、第3命令デコーダ174へ出力する無動作命令フラグを“1”にセットし、無動作命令フラグを第3命令デコーダ174へ出力する。
【0152】
以上の命令発行制御部171による制御により、このサイクルでは命令P121に含まれる“vaddw”命令と命令P122に含まれる“mov”命令の2命令が発行されることになる。次に、命令発行制御部171は、2個のユニットを発行したという情報を命令バッファ22へ送る。残った命令P123に含まれる“vaddhi”命令は、命令バッファ22に蓄積される。
【0153】
実行部40は、レジスタR0及びレジスタR1について、上位及び下位それぞれ独立に加算を行い、これらの加算結果をレジスタR1の上位及び下位に格納し、レジスタR5の下位32ビットに定数0x1234を転送する。
(第2サイクルの動作)
パケット181がメモリから供給され、命令バッファ22に蓄積されている“vaddhi”命令と、パケット181内の各ユニットが順に命令レジスタ170に転送される。具体的には、命令P123に含まれる“vaddhi”命令が命令レジスタA1701に、命令P124に含まれる“mov”命令以降のパケット181内の各ユニットが命令レジスタB1702からD1704へ順に格納されていく。
【0154】
次に、命令発行制御部171は命令の発行を制御する。
具体的には、第1サイクルの場合と同様に命令レジスタ内の全てのユニットのフォーマット情報が“0”であるので、命令発行制御部171はフォーマット情報による制御は行なわない。次に、命令発行制御部171は、各命令デコーダの解読結果を参照して各命令が格納または参照する資源に関する情報を得る。そして、第1サイクルの場合と同様に各命令間の依存関係を解析する。
【0155】
この場合、命令P123に含まれる“vaddhi”命令のデスティネーションレジスタがレジスタR1であり、命令P124に含まれる“mov”命令のソースレジスタもレジスタR1であるが、“vaddhi”命令はレジスタR1の上位32ビットのみに格納する命令であり、“mov”命令はレジスタR1の下位32ビットのみを参照する命令であるので、命令発行制御部171は、これらの命令の間にはデータ依存関係は存在しないと判定する。同様に、命令P125に含まれる“st”命令についても上記2つの命令との間にデータ依存関係が存在しないと判定し、このサイクルでは3つの命令デコーダ全ての解読結果が有効となり、3個の命令を発行する。次に、命令発行制御部171は、3個のユニットを発行したという情報を命令バッファ22に送る。残った命令P126に含まれる“add”命令は命令バッファ22に蓄積される。
【0156】
実行部40は、レジスタR2とレジスタR1とのそれぞれ上位32ビットを加算し、その加算結果をレジスタR1の上位32ビットに格納し、レジスタR1の下位32ビットをレジスタR3の下位32ビットに転送し、レジスタR5の下位32ビットをレジスタR6の下位32ビットをアドレスとして示されるメモリ内の位置に転送する。
【0157】
(第3サイクルの動作)
パケット182がメモリから供給され、命令バッファ22に蓄積されている“add”命令(命令P126に含まれる)と、パケット182内のユニットである“st”命令(命令P127に含まれる)が順に命令レジスタ170(命令レジスタA1701及び命令レジスタB1702)に転送される。
【0158】
そして、上記に説明した各サイクルと同様にして、命令発行制御部171は制御を行い、このサイクルでは、命令レジスタ170に転送された2つの命令を同時に発行する。これにより、供給されたユニットは全て発行されたことになる。実行部40は、レジスタR1の下位32ビットに定数0x3を加算し、その加算結果をレジスタR1の下位32ビットに格納し、レジスタR3の下位32ビットをレジスタR4の下位32ビットをアドレスとして示されるメモリ内の位置に転送する。
【0159】
プロセッサ500が実際に実行するサイクルG121、G122、G133を図26に示す。サイクルG121は、命令P121と命令P122とを含む。サイクルG122は、命令P123と命令P124と命令P125とを含む。サイクルG123は、命令P126と命令P127とを含む。
以上のようにして、プロセッサ500は、図26に示すプログラムP120(実行形式コード)を3サイクルで実行する。
【0160】
ここで、プロセッサ500と従来のプロセッサとにおいて、プログラムP120を実行させた場合について比較する。
従来のプロセッサの場合、第1サイクルにおいては、プロセッサ500と同様に動作する。
第2サイクルにおいて、従来のプロセッサは、命令レジスタAに格納されている命令P123に含まれる“vaddhi”命令と命令レジスタBに格納されている命令P123に含まれる“mov”命令との間の依存関係を判定する際に、命令コード内のレジスタ番号を参照して、レジスタ全体を1つの資源として扱い、各命令が格納または参照する資源に関する情報を得る。具体的には、“vaddhi”命令はレジスタR2とレジスタR1を参照してレジスタR1に格納する命令であると判断し、“mov”命令はレジスタR1を参照してレジスタR3に格納する命令であると判断する。このため、これら2つの命令間にはレジスタR1に関してデータ依存が存在すると判断し、これら2つの命令は、同時実行されない。つまり、このサイクルでは“vaddhi”命令のみが発行されることになる。
【0161】
これにより、図26に示すプログラムP120(実行形式コード)を従来のプロセッサにて実行すると、図27に示すように、サイクルG131〜G134の4サイクルを要することになる。サイクルG131は、命令P121及びP122を含み、サイクルG132は、命令P123を含み、サイクルG133は、命令P124、P125及びP126を含み、サイクルG134は、命令P127を含む。
【0162】
以上説明したように、従来のプロセッサによると、本発明のプロセッサ500の場合に比べて1サイクル増えていることが分かる。図26に示すプログラムP120(実行形式コード)内の命令をコンパイル装置によってどのように並べ替えても、従来のプロセッサにおいてこのコードの実行を4サイクルより縮めることはできない。
III その他の変形例
以上、本発明に係るプロセッサおよびコンパイル装置について、実施の形態に基づいて説明したが、本発明はこれらの実施の形態に限られないことは勿論である。次のように構成してもよい。
(1)上記実施の形態のコンパイル装置では、依存関係解析部110は、参照格納資源テーブルT100を参照して、命令と命令との間におけるレジスタの一部分の領域に関する依存関係を解析するとしているが、この構成に限らない。
【0163】
命令再配置部111が、図19に示すフローチャートのステップS2において、配置候補集合を生成する際に、参照格納資源テーブルT100を参照して、真に他の命令に依存していない命令の集合を求める、という構成にしてもよい。
このように構成する場合においても、レジスタの一部分の領域を資源とした依存関係の検出ができるので、従来の方法に比べてより厳密な候補ノードの抽出が可能となり、並列実行の可能性が向上する。こうして、対象プロセッサでの実行サイクル数を削減するという上記実施の形態と同様の有意な効果が得られる。
(2)上記実施の形態のプロセッサおよびコンパイル装置では、レジスタを上位と下位の2つの部分に分割し、それぞれを1つの資源として扱っていたが、本発明はこの分割方法に限定されるものではない。レジスタを3つ以上の部分に分割してもよい。また、それぞれの資源を分割するビット幅を同一としなくてもよい。これを実現するためには、プロセッサでは、図11に示すレジスタファイル及びその周辺の構成を前記分割に合致するように変更すればよい。また、コンパイル装置の命令スケジューリング部及びスーパースカラプロセッサの命令発行制御部では、図18に示す参照格納資源テーブルT100を前記分割に合致するように変更すればよい。
(3)上記実施の形態のプロセッサでは、同一サイクルにおいて、複数の命令が1個のレジスタの同一の部分の領域にデータを書き込もうとする場合には、レジスタ書込制御部431は、プログラムにおける順番が後方の命令の実行結果の書き込みを優先するように制御しているが、本発明は、この優先順位付けの方法に限定されるものではない。例えば、命令で指定されたオペレーションの種類によって、どちらの命令の実行結果の書き込みを優先するかを選択する構成にしてもよい。具体的には、レジスタ書込制御部431は、命令の種類毎に優先度をあらかじめ記憶しており、前記複数の命令の優先度を読み出し、読み出した優先度の最も高い命令について、前記レジスタの同一の部分へのデータの格納を行うように決定する。
(4)上記実施の形態のプロセッサでは、3個の命令を同時実行するように構成していたが、本発明はこの同時実行命令数に限定されるものではない。例えば、2個の命令を同時発行する構成にしてもよい。さらに多くの命令を同時発行する構成にしてもよい。
(5)上記実施の形態のプロセッサでは、可変長の命令を実行するとしているが、本発明はこの命令フォーマットに限定されるものではない。固定長の命令フォーマットを採用してもよく、この場合においても、同様の効果を奏する。
(6)本発明は、本実施の形態に示し上記に説明する手順を含むコンパイル方法であるとしてもよい。また、前記コンパイル方法をコンピュータにより実現するコンパイルプログラムであるしてもよいし、前記コンパイルプログラムからなるデジタル信号であるとしてもよい。また、本発明は、前記コンパイルプログラムをコンピュータ読み取り可能な記録媒体、例えば、フロッピーディスク、ハードディスク、CD―ROM、MO、DVDなどの記録媒体、に記録したものとしてもよいし、これらの記録媒体としてもよい。また、本発明は、前記コンパイルプログラムを、インターネットを代表とするネットワークを経由して伝送するものとしてもよい。
(7)本発明は、本実施の形態に示すコンパイル装置により生成された実行形式コードをコンピュータ読み取り可能な記録媒体、例えば、フロッピーディスク、ハードディスク、CD―ROM、MO、DVD、半導体メモリなどに記録したものとしてもよいし、これらの記録媒体としてもよい。
(8)本発明は、上記に示す複数の実施の形態、これらの複数の変形例、又は複数の実施の形態及びこれらの複数の変形例の一部を組み合わるとしてもよい。
【0164】
【発明の効果】
上記に説明するように、本発明は、複数の命令を1のサイクルにおいて実行するプロセッサであって、レジスタと命令読出手段と解読手段とアクセス手段とを含み、前記命令読出手段は、外部のプログラムから少なくとも第1命令と第2命令とを含む複数の命令を読み出し、前記第1命令は、1のレジスタの全部又は部分である第1領域へのアクセス指示を含み、前記第2命令は、前記レジスタの全部又は部分である第2領域へのアクセス指示を含み、ここで、前記第1領域が前記レジスタの全部の領域である場合には、前記第2領域は前記レジスタの部分の領域であり、前記第2領域が前記レジスタの全部の領域である場合には、前記第1領域は前記レジスタの部分の領域であり、また、前記2個のアクセス指示のうち少なくとも1個は、前記レジスタの全部又は部分の領域へのデータの格納の指示であり、前記解読手段は、1のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、前記解読情報は、少なくとも前記レジスタと前記第1領域と前記第2領域とに関する情報を含み、前記アクセス手段は、1のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第1領域へのアクセスと、前記レジスタの前記第2領域へのアクセスとを実行する。
【0165】
この構成によると、プログラム中において、1のレジスタの前記第1部分をアクセスする命令と同じレジスタの前記第2部分をアクセスする別の命令がある場合に、前記2個の命令を1のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。
ここで、前記各命令は、並列実行の可否を示す並列実行情報を含み、前記解読手段は、前記命令に含まれている並列実行情報を基にして、1のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含むように構成してもよい。
【0166】
この構成によると、命令に含まれる並列実行情報を基にして、1のサイクルに含まれない命令の解読を停止して、1のサイクルに含まれる命令のみを実行することができる。
ここで、前記解読情報は、命令に含まれるオペコードを含み、前記プロセッサは、さらに、1のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、前記演算情報は、前記第1命令による第1演算情報と、前記第2命令による第2演算情報とを含み、レジスタへデータを格納する前記アクセス手段は、前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第1領域に対応する情報を1のレジスタの前記第1領域へ書き込む第1選択部と、前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第2領域に対応する情報を1のレジスタの前記第2領域へ書き込む第2選択部と、1のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第1領域とに関する情報に基づいて、前記第1選択部に対して、前記第1演算情報を選択し、前記第1演算情報を前記レジスタの前記第1領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第2領域とに関する情報に基づいて、前記第2選択部に対して、前記第2演算情報を選択し、前記第2演算情報を前記レジスタの前記第2領域へ書き込むように制御するレジスタ書込制御部とを含むように構成してもよい。
【0167】
この構成によると、1のサイクルにおいて、別々の命令による別々の演算情報を、それぞれ1のレジスタの第1領域と第2領域とに書き込むことができるので、前記2個の命令を1のサイクルにおいて実行することができる。
ここで、前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、交わりがなく、それぞれ部分の領域であり、前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域からのデータの参照指示を含み、前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域へのデータの格納と、前記レジスタの第2領域からのデータの参照とを実行するように構成してもよい。
【0168】
この構成によると、1のレジスタの前記第1部分へデータを格納する命令と同じレジスタの前記第2部分からデータを参照する別の命令がある場合に、前記2個の命令を1のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。
ここで、前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、交わりがなく、それぞれ部分の領域であり、前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域へのデータの格納指示を含み、前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域へのデータの格納と、前記レジスタの第2領域へのデータの格納とを実行するように構成してもよい。
【0169】
この構成によると、1のレジスタの前記第1部分へデータを格納する命令と同じレジスタの前記第2部分へデータを格納する別の命令がある場合に、前記2個の命令を1のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。
ここで、前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、第3領域において重なりを有し、前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域へのデータの格納指示を含み、前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域から第3領域を除く領域へのデータの格納と、レジスタの第3領域へのデータの格納と、前記レジスタの第2領域から第3領域を除く領域へのデータの格納とを実行するように構成してもよい。
【0170】
この構成によると、1のレジスタの一部にデータを格納する命令と、同じレジスタの一部または全部にデータを格納する命令とを、同一サイクルにおいて、実行することができるので、同一サイクルにおいて1のレジスタに対して、1の命令でしか書き込むことのできない従来のプロセッサと比較すると、実行サイクル数を削減することができる。
【0171】
ここで、前記アクセス手段は、前記プログラム内において、第1命令及び第2命令のうち、後方に記録されている命令により、前記レジスタの第3領域へのデータの格納を行うように決定するように構成してもよい。
この構成によると、後方に記録されている有効な命令のみによりデータを格納することができる。
【0172】
ここで、前記アクセス手段は、あらかじめ命令の種類毎に優先度を記憶しており、前記優先度を用いて、第1命令及び第2命令のうち、いずれの命令により、前記レジスタの第3領域へのデータの格納を行うかを決定するように構成してもよい。
この構成によると、優先度の高い命令のみによりデータを格納することができる。
【0173】
ここで、前記解読手段は、命令解読部と命令発行制御部とを含み、前記命令解読部は、1のサイクルにおいて、読み出される命令毎に、命令の解読又は解読の停止の指示により、命令を解読し命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、又は命令の解読を停止し、ここで、前記解読される複数の命令には、少なくとも前記第1命令と前記第2命令とが含まれ、前記解読情報は、少なくとも前記レジスタと前記第1領域と前記第2領域とに関する情報を含み、前記命令発行制御部は、1のサイクルにおいて、読み出される命令毎に、命令を解読する指示を前記命令解読部へ出力することにより、前記命令解読部に対して各命令を解読するように制御し、前記命令解読部による各命令の解読後に、前記レジスタと前記第1領域と前記第2領域とに関する情報を含む解読情報を受け取り、前記第1領域と前記第2領域とが同一領域であるか否かを判断し、同一領域であると判断する場合に、前記第2命令の解読を停止する指示を前記命令解読部へ出力することにより、前記命令解読部に対して前記第2命令の解読を停止するように制御するように構成してもよい。
【0174】
この構成によると、2個の命令においてアクセスされるレジスタの各部分が同一である場合に、前記2個の命令間に依存関係がないとみなして、2個の命令のうちの1個の命令の解読を停止するので、2個の命令においてアクセスされるレジスタの各部分が異なる場合には、前記2個の命令を1のサイクルにおいて実行できる。その結果、2個の命令を並列実行できる場合が増え、従来のプロセッサと比較すると、実行サイクル数を削減することができる。
【0175】
ここで、前記命令発行制御部は、命令の種類と、前記命令がデータを参照し又はデータを格納するレジスタの領域との組を複数個含む参照格納資源表を含み、前記命令発行制御部は、前記解読情報から、前記参照格納資源表を用いて、各命令に含まれるレジスタの領域に関する情報を取得するように構成してもよい。
この構成によると、参照格納資源表から、各命令に含まれるレジスタの領域に関する情報を取得することができる。
【0176】
また、本発明は、高級言語により記述されたソースプログラムからオブジェクトコードを生成するコンパイル装置であって、高級言語により記述されたソースプログラムを記憶している記憶手段と、前記記憶手段からソースプログラムを読み出し、読み出したソースプログラムに翻訳処理を施して、レジスタに関する情報を含む1以上の実行形式命令から構成される実行形式プログラムを生成する実行形式コード生成手段と、前記実行形式プログラム中の1以上の実行形式命令を、各実行形式命令に含まれるレジスタの一部分の領域に関する情報に基づいて、並列実行できる複数の実行形式命令が隣接するように並べ換える命令スケジューリング手段と、並べ換えられた各実行形式命令を基にして、オブジェクトコードを生成するオブジェクトコード生成手段とを含む。
【0177】
この構成によると、各実行形式命令においてアクセスされるレジスタの部分を単位として、複数の実行形式命令を並べ換えるので、このコンパイル装置により出力されたオブジェクトコードを、対象プロセッサにおいて実行する場合に、複数の実行形式命令において並列実行できる場合が増え、実行サイクル数を削減することができる。このように、このコンパイル装置は、より実行サイクル数の少ない実行コードを生成することができる。
【0178】
ここで、前記命令スケジューリング手段は、前記1以上の実行形式命令について、各実行形式命令が並べられている順序と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係解析部と、生成された前記依存関係情報に基づいて、並列実行可能な命令の集合を決定し、また、前記実行形式命令を再配置する命令再配置部と、前記決定された集合毎に、並列実行の可否を示す並列実行情報を付加する実行境界付加部とを含むように構成してもよい。
【0179】
この構成によると、各実行形式命令においてアクセスされるレジスタの部分を単位として、複数の実行形式命令間の依存関係を解析して、並列実行可能な命令の集合毎に並行実行情報を付加し、複数の実行形式命令を並べ換えて前記実行形式命令を再配置するので、このコンパイル装置により出力されたオブジェクトコードを、対象プロセッサにおいて実行することにより、プロセッサは、前記並行実行情報により容易に並行実行できる命令の集合を検出でき、また複数の実行形式命令において並列実行できる場合が増え、実行サイクル数を削減することができる。このように、このコンパイル装置は、より実行サイクル数の少ない実行コードを生成することができる。
【0180】
ここで、前記依存関係解析部は、実行形式命令の種類と、前記実行形式命令がデータを参照し、又はデータを格納するレジスタの一部分の領域との組を複数個含む参照格納資源表と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報を参照格納資源表から取得する資源取得部と、各実行形式命令が並べられている順序と、前記取得したレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係生成部とを含むように構成してもよい。
【0181】
この構成によると、参照格納資源表を用いて各実行形式命令間の依存関係を生成することができる。
また、高級言語により記述されたソースプログラムを記憶している記憶手段を備えるコンパイル装置により用いられ、前記ソースプログラムからオブジェクトコードを生成するコンパイルプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、前記コンパイルプログラムは、前記記憶手段からソースプログラムを読み出し、読み出したソースプログラムに翻訳処理を施して、レジスタに関する情報を含む1以上の実行形式命令から構成される実行形式プログラムを生成する実行形式コード生成ステップと、前記実行形式プログラム中の1以上の実行形式命令を、各実行形式命令に含まれるレジスタの一部分の領域に関する情報に基づいて、並列実行できる複数の実行形式命令が隣接するように並べ換える命令スケジューリングステップと、並べ換えられた各実行形式命令を基にして、オブジェクトコードを生成するオブジェクトコード生成ステップとを含む。
【0182】
ここで、前記命令スケジューリングステップは、前記1以上の実行形式命令について、各実行形式命令が並べられている順序と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係解析サブステップと、生成された前記依存関係情報に基づいて、並列実行可能な命令の集合を決定し、また、前記実行形式命令を再配置する命令再配置サブステップと、前記決定された集合毎に、並列実行の可否を示す並列実行情報を付加する実行境界付加サブステップとを含むように構成してもよい。
【0183】
ここで、前記コンパイル装置は、実行形式命令の種類と、前記実行形式命令がデータを参照し、又はデータを格納するレジスタの一部分の領域との組を複数個含む参照格納資源表を有し、前記依存関係解析サブステップは、各実行形式命令に含まれるレジスタの一部分の領域に関する情報を参照格納資源表から取得する資源取得サブステップと、各実行形式命令が並べられている順序と、前記取得したレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係生成サブステップとを含むように構成してもよい。
【0184】
この記録媒体に記録されているコンパイルプログラムをコンピュータにより実行することにより、前記コンパイル装置と同様の効果を奏することは明らかである。
【図面の簡単な説明】
【図1】本発明に係る1の実施の形態としてのプログラム実行システム400の構成を示すブロック図である。
【図2】図1に示すプログラム実行システム400を構成する応用装置300に組み込まれているプロセッサ310が実行する命令のデータ構造を示す。
【図3】プロセッサ310における命令供給単位と、実行グループの一例を示す。
【図4】プロセッサ310のハードウェア構成を示すブロック図である。
【図5】プロセッサ310の命令レジスタ23及びその周辺の構成要素の構成を示すブロック図である。
【図6】プロセッサ310の命令発行制御部31及びその周辺の構成要素の構成を示すブロック図である。
【図7】命令レジスタA231のユニット(ユニット1)のフォーマット情報が“1”である場合における、プロセッサ310の命令発行制御部31及びその周辺の構成要素の動作を示す。
【図8】命令レジスタA231のユニット1のフォーマット情報が“0”、命令レジスタB232のユニット2のフォーマット情報が“1”である場合におけるプロセッサ310の命令発行制御部31及びその周辺の構成要素の動作を示す。
【図9】命令レジスタA231のユニット1の並列実行境界情報が“1”であり、フォーマット情報が“0”である場合におけるプロセッサ310の命令発行制御部31及びその周辺の構成要素の動作を示す。
【図10】命令レジスタA231のユニット1の並列実行境界情報が“0”であり、命令レジスタB232のユニット2の並列実行境界情報が“1”であり、ユニット1とユニット2とのフォーマット情報が共に“0”である場合おけるプロセッサ310の命令発行制御部31及びその周辺の構成要素の動作を示す。
【図11】プロセッサ310のレジスタファイル43及びその周辺の構成要素の構成を示すブロック図である。
【図12】プロセッサ310の動作について説明するための、64ビットデータを扱う処理の一例を示すフローチャートである。
【図13】図12に示す処理をプロセッサ310に行わせる場合のプログラムの実行形式コードの例と実行順序とを示す。
【図14】図12に示す処理を従来のプロセッサに行わせる場合のプログラムの実行形式コードの例と実行順序とを示す。
【図15】コンパイル装置200の構成を示すブロック図である。
【図16】依存グラフを説明するためのプログラムP80を示す。
【図17】プログラムP80に対応する依存グラフG100を視覚的に表現したものである。
【図18】参照格納資源テーブルの一例を示す。
【図19】命令再配置部111の処理の詳細を示すフローチャートである。
【図20】コンパイル装置200の動作を説明するために一例として用いるプログラムP90を示す。
【図21】プログラムP90を基にして、依存関係解析部110により生成された依存グラフG120を視覚的に表現したものである。
【図22】プログラムP90に対応し、コンパイル装置200により生成された実行形式コードとその実行グループとを示す。
【図23】従来のコンパイル装置により生成された依存グラフG130を視覚的に表現したものである。プログラムP90に対応している。
【図24】従来のコンパイル装置により生成された最終的な実行形式コードであるプログラムP110と実行の順序とを示す。
【図25】本発明に係る別の1の実施の形態としてのプロセッサ500の命令レジスタ170及びその周辺の構成要素の構成を示すブロック図である。
【図26】プロセッサ500に対応するコンパイル装置によって命令の並べ替えが施されて生成されたプログラムP120と各サイクルで実行される命令を示す。
【図27】プログラムP120を従来のプロセッサにて実行する場合におけるサイクルを示す。
【符号の説明】
20 命令供給発行部
21 命令フェッチ部
22 命令バッファ
23 命令レジスタ
30 解読部
31 命令発行制御部
32 命令デコーダ
33 第1命令デコーダ
34 第2命令デコーダ
35 第3命令デコーダ
40 実行部
41 実行制御部
42 PC部
43 レジスタファイル
44 第1演算部
45 第2演算部
46 第3演算部
47 オペランドアクセス部
48 データバス
49 データバス
100 コンパイラ上流部
101 アセンブラコード生成部
102 命令スケジューリング部
103 オブジェクトコード生成部
110 依存関係解析部
111 命令再配置部
112 実行境界付加部
120 命令集合化部
130 ソースコード記憶部
140 オブジェクトコード記憶部
170 命令レジスタ
171 命令発行制御部
172 命令デコーダ
173 第1命令デコーダ
174 第2命令デコーダ
175 第3命令デコーダ
200 コンパイル装置
210 コンパイル部
231 命令レジスタA
232 命令レジスタB
233 命令レジスタC
234 命令レジスタD
300 応用装置
310 プロセッサ
400 プログラム実行システム
500 プロセッサ
1701 命令レジスタA
1702 命令レジスタB
1703 命令レジスタC
1704 命令レジスタD

Claims (10)

  1. 複数の命令を1のサイクルにおいて実行するプロセッサであって、
    レジスタと命令読出手段と解読手段とアクセス手段とを含み、
    前記命令読出手段は、外部のプログラムから少なくとも第1命令と第2命令とを含む複数の命令を読み出し、
    前記第1命令は、1のレジスタの全部又は部分である第1領域へのアクセス指示を含み、前記第2命令は、前記レジスタの全部又は部分である第2領域へのアクセス指示を含み、ここで、前記第1領域が前記レジスタの全部の領域である場合には、前記第2領域は前記レジスタの部分の領域であり、前記第2領域が前記レジスタの全部の領域である場合には、前記第1領域は前記レジスタの部分の領域であり、また、前記2個のアクセス指示のうち少なくとも1個は、前記レジスタの全部又は部分の領域へのデータの格納の指示であり、前記第1領域が前記レジスタの部分であり且つ前記第2領域が前記レジスタの部分である場合には、前記第1領域と前記第2の領域には交わりがあり、
    前記解読手段は、1のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、
    前記解読情報は、少なくとも前記レジスタと前記第1領域と前記第2領域とに関する情報を含み、
    前記アクセス手段は、1のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第1領域へのアクセスと、前記レジスタの前記第2領域へのアクセスとを実行する
    ことを特徴とするプロセッサ。
  2. 前記各命令は、並列実行の可否を示す並列実行情報を含み、
    前記解読手段は、
    前記命令に含まれている並列実行情報を基にして、1のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、
    読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含む
    ことを特徴とする請求項1に記載のプロセッサ。
  3. 前記解読情報は、命令に含まれるオペコードを含み、
    前記プロセッサは、さらに、
    1のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、
    前記演算情報は、前記第1命令による第1演算情報と、前記第2命令による第2演算情報とを含み、
    レジスタへデータを格納する前記アクセス手段は、
    前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第1領域に対応する情報を1のレジスタの前記第1領域へ書き込む第1選択部と、
    前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第2領域に対応する情報を1のレジスタの前記第2領域へ書き込む第2選択部と、
    1のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第1領域とに関する情報に基づいて、前記第1選択部に対して、前記第1演算情報を選択し、前記第1演算情報を前記レジスタの前記第1領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第2領域とに関する情報に基づいて、前記第2選択部に対して、前記第2演算情報を選択し、前記第2演算情報を前記レジスタの前記第2領域へ書き込むように制御するレジスタ書込制御部とを含む
    ことを特徴とする請求項2に記載のプロセッサ。
  4. 前記第1命令に含まれるアクセスの対象となる前記第1領域と、前記第2命令に含まれるアクセスの対象となる前記第2領域とは、第3領域において重なりを有し、
    前記第1命令は、前記レジスタの第1領域へのデータの格納指示を含み、前記第2命令は、前記レジスタの前記第2領域へのデータの格納指示を含み、
    前記アクセス手段は、1のサイクルにおいて、レジスタの第1領域から第3領域を除く領域へのデータの格納と、レジスタの第3領域へのデータの格納と、前記レジスタの第2領域から第3領域を除く領域へのデータの格納とを実行する
    ことを特徴とする請求項2に記載のプロセッサ。
  5. 前記アクセス手段は、前記プログラム内において、第1命令及び第2命令のうち、後方に記録されている命令により、前記レジスタの第3領域へのデータの格納を行うように決定する
    ことを特徴とする請求項4に記載のプロセッサ。
  6. 前記アクセス手段は、あらかじめ命令の種類毎に優先度を記憶しており、前記優先度を用いて、第1命令及び第2命令のうち、いずれの命令により、前記レジスタの第3領域へのデータの格納を行うかを決定する
    ことを特徴とする請求項4に記載のプロセッサ。
  7. 前記解読情報は、命令に含まれるオペコードを含み、
    前記プロセッサは、さらに、
    1のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、
    前記演算情報は、前記第1命令による第1演算情報と、前記第2命令による第2演算情報とを含み、
    レジスタへデータを格納する前記アクセス手段は、
    前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第1領域に対応する情報を1のレジスタの前記第1領域へ書き込む第1選択部と、
    前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第2領域に対応する情報を1のレジスタの前記第2領域へ書き込む第2選択部と、
    1のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第1領域とに関する情報に基づいて、前記第1選択部に対して、前記第1演算情報を選択し、前記第1演算情報を前記レジスタの前記第1領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第2領域とに関する情報に基づいて、前記第2選択部に対して、前記第2演算情報を選択し、前記第2演算情報を前記レジスタの前記第2領域へ書き込むように制御するレジスタ書込制御部とを含む
    ことを特徴とする請求項4に記載のプロセッサ。
  8. 前記解読手段は、命令解読部と命令発行制御部とを含み、
    前記命令解読部は、1のサイクルにおいて、読み出される命令毎に、命令の解読又は解読の停止の指示により、命令を解読し命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、又は命令の解読を停止し、
    ここで、前記解読される複数の命令には、少なくとも前記第1命令と前記第2命令とが含まれ、前記解読情報は、少なくとも前記レジスタと前記第1領域と前記第2領域とに関する情報を含み、
    前記命令発行制御部は、
    1のサイクルにおいて、読み出される命令毎に、命令を解読する指示を前記命令解読部へ出力することにより、前記命令解読部に対して各命令を解読するように制御し、
    前記命令解読部による各命令の解読後に、前記レジスタと前記第1領域と前記第2領域とに関する情報を含む解読情報を受け取り、前記第1領域と前記第2領域とが同一領域であるか否かを判断し、同一領域であると判断する場合に、前記第2命令の解読を停止する指示を前記命令解読部へ出力することにより、前記命令解読部に対して前記第2命令の解読を停止するように制御する
    ことを特徴とする請求項1に記載のプロセッサ。
  9. 前記命令発行制御部は、
    命令の種類と、前記命令がデータを参照し又はデータを格納するレジスタの領域との組を複数個含む参照格納資源表を含み、
    前記命令発行制御部は、前記解読情報から、前記参照格納資源表を用いて、各命令に含まれるレジスタの領域に関する情報を取得する
    ことを特徴とする請求項8に記載のプロセッサ。
  10. 前記解読情報は、命令に含まれるオペコードを含み、
    前記プロセッサは、さらに、
    1のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、
    前記演算情報は、前記第1命令による第1演算情報と、前記第2命令による第2演算情報とを含み、
    レジスタへデータを格納する前記アクセス手段は、
    前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第1領域に対応する情報を1のレジスタの前記第1領域へ書き込む第1選択部と、
    前記第1演算情報と、前記第2演算情報と、他の命令による演算情報とのうちの1の演算情報を選択し、選択した演算情報の前記第2領域に対応する情報を1のレジスタの前記第2領域へ書き込む第2選択部と、
    1のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第1領域とに関する情報に基づいて、前記第1選択部に対して、前記第1演算情報を選択し、前記第1演算情報を前記レジスタの前記第1領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第2領域とに関する情報に基づいて、前記第2選択部に対して、前記第2演算情報を選択し、前記第2演算情報を前記レジスタの前記第2領域へ書き込むように制御するレジスタ書込制御部とを含む
    ことを特徴とする請求項9に記載のプロセッサ。
JP33397899A 1998-11-27 1999-11-25 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体 Expired - Lifetime JP4125847B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP33397899A JP4125847B2 (ja) 1998-11-27 1999-11-25 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP10-337186 1998-11-27
JP33718698 1998-11-27
JP33397899A JP4125847B2 (ja) 1998-11-27 1999-11-25 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体

Related Child Applications (3)

Application Number Title Priority Date Filing Date
JP2007164849A Division JP4709806B2 (ja) 1998-11-27 2007-06-22 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
JP2007164850A Division JP4457127B2 (ja) 1998-11-27 2007-06-22 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
JP2008076369A Division JP4295804B2 (ja) 1998-11-27 2008-03-24 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体

Publications (2)

Publication Number Publication Date
JP2000222209A JP2000222209A (ja) 2000-08-11
JP4125847B2 true JP4125847B2 (ja) 2008-07-30

Family

ID=26574690

Family Applications (1)

Application Number Title Priority Date Filing Date
JP33397899A Expired - Lifetime JP4125847B2 (ja) 1998-11-27 1999-11-25 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体

Country Status (1)

Country Link
JP (1) JP4125847B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1176224B1 (en) 2000-07-24 2014-04-16 Dowa Thermotech Co., Ltd. Nitrided maraging steel and method of manufacturing thereof
US7802076B2 (en) * 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
US20070266229A1 (en) * 2006-05-10 2007-11-15 Erich Plondke Encoding hardware end loop information onto an instruction
CN116881194B (zh) * 2023-09-01 2023-12-22 腾讯科技(深圳)有限公司 处理器、数据处理方法及计算机设备

Also Published As

Publication number Publication date
JP2000222209A (ja) 2000-08-11

Similar Documents

Publication Publication Date Title
JP4295804B2 (ja) プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
US7761692B2 (en) Processor, compiler and compilation method
JP2002333978A (ja) Vliw型プロセッサ
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
US6775763B2 (en) Bytecode instruction processor with switch instruction handling logic
WO2006112045A1 (ja) 演算処理装置
US6324639B1 (en) Instruction converting apparatus using parallel execution code
US6799266B1 (en) Methods and apparatus for reducing the size of code with an exposed pipeline by encoding NOP operations as instruction operands
JP4125847B2 (ja) プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
US6910123B1 (en) Processor with conditional instruction execution based upon state of corresponding annul bit of annul code
JP4457127B2 (ja) プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
US6889320B1 (en) Microprocessor with an instruction immediately next to a branch instruction for adding a constant to a program counter
JP4709806B2 (ja) プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
JP3451921B2 (ja) プロセッサ
US7039790B1 (en) Very long instruction word microprocessor with execution packet spanning two or more fetch packets with pre-dispatch instruction selection from two latches according to instruction bit
JP3553845B2 (ja) プロセッサ、コンパイラ、コイパイル方法及び記録媒体
EP0545927B1 (en) System for preparing instructions for instruction parallel processor and system with mechanism for branching in the middle of a compound instruction
JP2007537528A (ja) データ処理方法、処理装置、多重命令ワードセット生成方法、コンパイラプログラム
EP1113356B1 (en) Method and apparatus for reducing the size of code in a processor with an exposed pipeline
KR102631214B1 (ko) 대규모 언어 모델 추론을 가속화하기 위한 효율적인 데이터 포워딩 방법 및 시스템
US6704855B1 (en) Method and apparatus for reducing encoding needs and ports to shared resources in a processor
KR20030017982A (ko) 브이.엘.아이.더블유. 프로세서에서 부분적으로파이프라인으로 연결된 명령을 동기시키는 방법
US20230359385A1 (en) Quick clearing of registers
JP3727324B2 (ja) プロセッサ及びコンパイル装置
JP2005149297A (ja) プロセッサおよびそのアセンブラ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070305

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070424

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070622

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080122

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080324

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: 20080415

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080509

R150 Certificate of patent or registration of utility model

Ref document number: 4125847

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110516

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110516

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120516

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120516

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130516

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130516

Year of fee payment: 5

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term