JP2003050704A - コンパイラおよびコンパイル方法 - Google Patents

コンパイラおよびコンパイル方法

Info

Publication number
JP2003050704A
JP2003050704A JP2001236193A JP2001236193A JP2003050704A JP 2003050704 A JP2003050704 A JP 2003050704A JP 2001236193 A JP2001236193 A JP 2001236193A JP 2001236193 A JP2001236193 A JP 2001236193A JP 2003050704 A JP2003050704 A JP 2003050704A
Authority
JP
Japan
Prior art keywords
instruction
register
variable
cluster
allocation
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.)
Pending
Application number
JP2001236193A
Other languages
English (en)
Inventor
Noriyasu Mori
教安 森
Satoru Nishimoto
哲 西本
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2001236193A priority Critical patent/JP2003050704A/ja
Publication of JP2003050704A publication Critical patent/JP2003050704A/ja
Pending legal-status Critical Current

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 命令スケジューリングが配置した命令語列に
対し、レジスタ指定のビット表現のビット遷移を少なく
するようレジスタ割当を行い、特に、クラスタ構成VL
IWプロセッサにおけるキャッシュミス時等における消
費電力を低減させるプログラムを生成する。 【解決手段】 レジスタ割当処理機能15を設けて、命
令スケジューリング処理機能13による命令スケジュー
リング後のレジスタ割当処理において、レジスタ指定の
ビット表現のビット遷移を考慮したレジスタ割当を行
う。例えば、クラスタ構成VLIWにおいては、クラス
タリングにより並列実行される命令のオペランドの関係
を認識し、既割当の他クラスタのレジスタ番号を参照し
て、ビット遷移の少ないレジスタ番号を選択してレジス
タ割当を行うことにより、例えば命令キャッシュミス時
のキャッシュライン中のビット遷移を低減することが可
能なオブジェクトプログラムを生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、高水準プログラミ
ング言語で記述されたプログラムをコンピュータ読み取
り可能な機械語に変換するコンパイル技術に係わり、特
に、ターゲットがクラスタ構成VLIWアーキテクチャ
のプロセッサにおけるキャッシュミス時等での消費電力
を効率的に削減するプログラムを生成するのに好適なコ
ンパイラおよびコンパイル方法に関するものである。
【0002】
【従来の技術】FortranやCOBOL、Pasc
al、C等の高水準プログラミング言語で記述されたプ
ログラムを、コンピュータ読み取り可能な機械命令に変
換するコンパイラでは、生成する機械語を所定の順序に
並べ替えて生成するのが一般的である。この命令の並べ
替え処理のことを、命令スケジューリングと呼ぶ。
【0003】命令スケジューリングは、コンパイル時に
静的命令の並べ替えを行うものであり、 VLIW(Ver
y Long Instruction Word)等の、一般的にはハードウ
エアが命令並び替えの機能を持たないアーキテクチャを
ターゲットとするコンパイラの場合には、必須の機能で
ある。
【0004】また、RISC(Reduced Instruction Se
t Computer)等、実行時にハードウェアが動的に命令を
並べ替える機能を持っているアーキテクチャをターゲッ
トとする場合でも、処理性能向上のために、コンパイラ
が命令スケジューリングを行うのが一般的である。
【0005】コンパイラのターゲットアーキテクチャに
は、クラスタと呼ばれる構成を備える場合がある。クラ
スタとは、演算を行う演算器と、演算すべきデータを保
持するレジスタ等を一まとまりとして持つもので、複数
のクラスタを並列に配置することで、命令並列度向上と
スケーラビリティを確保しようとするものである。
【0006】各クラスタはシステムバス等により結ばれ
ており、命令語レベルでのデータ転送が可能になってい
るのが普通である。各クラスタが固有のレジスタを備え
る分散レジスタ構成をとっているため、全体としてまと
まった処理を行うためには、クラスタ間のデータ転送が
必要となる。
【0007】このようなクラスタ構成は、VLIWアー
キテクチャに多くみられ、クラスタ構成VLIWアーキ
テクチャと呼ばれている。そして、このクラスタ構成V
LIWアーキテクチャをターゲットとするコンパイラ
は、命令スケジューリング時に、逐次命令列を複数クラ
スタで実行する命令列へと変換する必要がある。
【0008】この逐次命令列のクラスタへの分割(およ
び、分割に伴って必要となるクラスタ間データ転送命令
の挿入)を、以降では「クラスタリング」と呼ぶことに
する。クラスタリングは命令スケジューリングの一部で
あり、クラスタ構成VLIWコンパイラでは、命令スケ
ジューリング時にクラスタリング処理も併せて行うのが
一般的である。
【0009】一方、コンパイラで生成された機械語プロ
グラムで動作するプロセッサ、特に、近年の高性能組み
込みプロセッサにおいては、チップ内キャッシュとチッ
プ外メモリのデータのやり取りにかかる電力消費量を削
減することが課題となっている。このチップ外アクセス
の消費電力を削減する技術として、キャッシュミス回
数を減らす技術と、1回のキャッシュミスあたりの消
費電力を削減する技術がある。
【0010】の技術は、チップ内キャッシュとチップ
外メモリ(メインメモリ)を仲介するデータバス上での
ビットパターンの遷移を減らすことにより、スイッチン
グ(ビット反転)回数を減らし、消費電力を削減するも
のである。本発明は、このの技術を活用するものであ
り、その技術内容を以下、簡単に説明する。
【0011】データバスを介してのメモリ(メインメモ
リ)とキャッシュの間のデータ転送はキャッシュライン
(メモリブロック)単位で行われ、通常は複数命令が含
まれる。ここでは簡略化のため、命令長はデータバス幅
と同じサイズに固定で、1キャッシュラインに4命令が
格納されることにする。
【0012】メインメモリからのデータのリード(メイ
ンメモリリード)等に伴うデータバス上でのデータ転送
に関しては、マシンレベル表現(ビットパターン)での
ビット遷移が少ないほど、消費電力が少なくすむことが
知られている。以降では、このデータバス上のビット遷
移のことを単に「ビット遷移」と呼ぶ。
【0013】例えば、キャッシュミスを起こした場合、
メインメモリから(命令)キャッシュにキャッシュライ
ン分の命令が一度に送られるが、実際のハードウェア動
作は、1命令(=データバス幅)毎にデータバスを経由
して計4回送られ、キャッシュに収められる。すなわ
ち、データバス上を連続して4データが流れることにな
り、その際のビット遷移が少ないほど消費電力は少なく
てすむ。
【0014】以下、「ビット遷移」に関し、図を用いて
具体的な例で説明する。
【0015】図5は、クラスタ構成VLIWプロセッサ
における命令語の構成例を示す説明図である。
【0016】この図5の例では、「クラスタ0」と「ク
ラスタ1」の2つクラスタがあり、1サイクルに各クラ
スタで1命令、計2命令が同時実行可能となっている。
また、個々の命令は4つの部分、例えば「クラスタ0」
における最初の命令は、「c0.add」と「r1」、「r2」、
「r3」の4つに分かれており、順に、命令フィールド、
デストネーションフィールド、ソース(1)フィール
ド、ソース(2)フィールドと呼ぶ。
【0017】図6は、図5における命令列のメモリ内で
の命令の配置構成例を示す説明図である。
【0018】この図6においては、1VLIW命令とな
る2命令は、データバス幅に分割され、「クラスタ
0」、「クラスタ1」の順に配置され、図5における
「001」および「002」行目の「クラスタ0」の命令が
「001-0」と「002-0」行番号で示され、また、図5にお
ける「001」および「002」行目の「クラスタ1」の命令
が「001-1」と「002-1」行番号で示されている。
【0019】このような4命令を1キャッシュラインと
してメモリ(メインメモリ)からキャッシュに伝送され
る際のビット遷移を、図7を用いて説明する。
【0020】図7は、図6における4命令がメモリから
キャッシュに伝送される際のビット遷移を例示する説明
図である。
【0021】図7では、図6における各命令をビットパ
ターンで表しており、ここで示す例では、ビットパター
ンの先頭1ビットを命令フィールド認識用(「1」のと
き命令フィールドを表す)とし、この命令フィールド
は、「1(命令フィールド識別用)」+「クラスタ番号
1ビット」+「命令コード(000=add,010=sub,011=mul
等)」で構成し、各オペランドフィールドは、「0(オ
ペランドフィールド識別用)」+「レジスタ番号の2進
数表現(r1=0001,r2=0010,r3=0011等)」で構成してい
る。
【0022】図7に示す例では、この4命令をキャッシ
ュに転送する場合、「001-0」の第1の命令から「001-
1」の第2の命令間では、先頭2ビット目だけでの「1
ビット」のビット遷移が発生し、「001-1」の第2の命
令から「002-0」の第3の命令間では、先頭2,4,
8,10,14,15,18,19ビット目での「8ビ
ット」のビット遷移が発生し、「002-0」の第3の命令
から「002-1」の第4の命令間では、先頭2,5,8,
10,14,15,18ビット目での「7ビット」のビ
ット遷移が発生し、合計16ビットのビット遷移が発生
している。
【0023】キャッシュミス時の低消費電力化は、この
ビット遷移数を少なくすることで達成でき、かつ、この
ようなビット遷移数は、命令の並べ方によって変更可能
であり、コンパイラによって制御可能な場合がある。す
なわち、コンパイラによって、プロセッサにおけるキャ
ッシュミス時の低電力化を図ることができる。
【0024】このような、ビット遷移を考慮したコンパ
イラによる低消費電力化を図る従来技術が、例えば「Hi
royuki TOMIYAMA, Tohru ISHIHARA, Akihiko INOUE, Hi
rotoYASUURA "Instruction Scheduling to Reduce Swit
ching Activity of Off-Chip Buses for Low-Power Sys
tems with Caches", IEICE TRANS. FUNDAMENTALS, vol.
E81-A, NO. 12 DECEMBER 1998, pp.2621-2629」等に記
載されている。
【0025】この文献では、命令フィールドのビット遷
移が少ないような命令配置を試みる命令スケジューリン
グ技術が述べられており、そのFig2において、ビット遷
移を考慮した命令スケジューリングを行わない場合のビ
ット遷移が、また、Fig3において、ビット遷移を考慮し
た命令スケジューリングを行った場合のビット遷移が示
されている。
【0026】VLIWプロセッサでは、命令語に並列実
行命令を明示的に示すため、並列実行される命令がメモ
リ上に連続配置される可能性が高い。例えば、図5で示
した命令語構成では、001行に示した「クラスタ0」の
命令と「クラスタ1」の命令は並列実行されるので、プ
ログラム(アセンブラ表記)上も並列に記される。
【0027】そのため、図6に示したように、001-0と0
01-1のそれぞれの命令はメモリ内でも連続配置されてい
る。すなわち、これらVLIW命令を構成する命令は、
同一キャッシュライン上に乗る可能性が高く、命令キャ
ッシュミス時にこれらの命令語の類似性が、消費電力に
影響を与える可能性が高い。
【0028】上述した従来技術では、このような命令コ
ードの類似性を利用することにより、キャッシュミス時
の低消費電力化をコンパイラにより行うことができる。
【0029】しかし、このような従来技術においては、
「レジスタ番号」の類似性(ビット遷移の少なさ)を利
用しての低消費電力化は行われていない。すなわち、一
般の(非クラスタ構成)VLIWでは、全クラスタでレ
ジスタは全て共有されているので、レジスタ番号変更の
余地は少なく、そのため、このような「レジスタ番号」
の類似性(ビット遷移の少なさ)を利用しての低消費電
力化は考慮されていない。
【0030】しかし、クラスタ構成VLIWにおいて
は、レジスタはクラスタに固有のものとして独立して存
在する。従って、一方のクラスタのレジスタ番号が決ま
っているとき、他方のクラスタのレジスタ番号は、同一
であってもかまわないので、ビット遷移が少なくなるよ
うなレジスタ番号を選択する余地がある。
【0031】
【発明が解決しようとする課題】解決しようとする問題
点は、従来の技術では、命令スケジューリングが配置し
た命令語列に対しての、レジスタ指定のビット表現(レ
ジスタ番号指定フィールド)のビット遷移を考慮したレ
ジスタ割当ができない点である。
【0032】本発明の目的は、これら従来技術の課題を
解決し、レジスタ番号指定フィールドのビット遷移を減
少させることで、例えばクラスタ構成VLIWプロセッ
サにおけるキャッシュ転送時の消費電力を効果的に低減
することができるプログラムの生成が可能なコンパイラ
およびコンパイル方法を提供することである。
【0033】
【課題を解決するための手段】上記目的を達成するた
め、本発明のコンパイラとコンパイル方法では、命令ス
ケジューリング後のレジスタ割当処理において、レジス
タ指定のビット表現のビット遷移を減少させるよう考慮
したレジスタ割当を行う。これにより、レジスタ番号の
類似性が向上し、例えばメモリ(メインメモリ)から命
令キャッシュへの命令語の転送におけるビット遷移数を
少なくすることができる。特に、命令スケジューリング
時に、クラスタリング(命令列のクラスタ分割)が行わ
れるクラスタ構成VLIWにおいては、クラスタリング
により並列実行される命令のオペランドの関係を認識
し、既割当の他クラスタのレジスタ番号を参照して、ビ
ット遷移の少ないレジスタ番号の選択を行う。これによ
り、VLIW命令を構成する個別命令に関し、レジスタ
指定ビット表現の類似性の向上がなされ、例えばキャッ
シュミス発生時の消費電力の低減が可能なオブジェクト
プログラムを生成できる。
【0034】
【発明の実施の形態】以下、本発明の実施の形態を、図
面により詳細に説明する。
【0035】図1は、本発明に係わるコンパイラの構成
とコンパイラが動作する計算機システムの構成例を示す
ブロック図であり、図2は、図1におけるコンパイラの
本発明に係わるコンパイル方法の処理手順例を示すフロ
ーチャートである。
【0036】本例は、クラスタ構成VLIWにおけるク
ラスタリング情報を利用したコンパイラのレジスタ割当
を、レジスタ番号指定フィールドのビット遷移を減少さ
せるように行うものであり、以下、本例での説明では、
コンパイラの中間語は、同等な命令語の形式で示す。ま
た、複数クラスタでの並列実行状況を明示するため、ク
ラスタ毎の実行命令を縦にならべた形式で表す。
【0037】図1に示すように、本発明に係わるコンパ
イラを動作させる計算機システムは、CPU(Central
Processing Unit)1、CRTやTFT等からなる表示
装置2、キーボードやマウス等からなる入力装置3、メ
インメモリとしての主記憶装置4、HDD(Hard Disk
Drive)等からなる外部記憶装置5、および、光ディス
クなどの記録媒体6とのプログラムやデータの読み書き
を行う駆動装置7等により構成されている。
【0038】主記憶装置4には、本発明に係わるコンパ
イラ10と、コンパイル過程で必要となる中間語11が
格納され、また、外部記憶装置5には、コンパイラ10
のコンパイル対象となるソースプログラム8と、コンパ
イル結果であるオブジェクトプログラム9が格納され
る。
【0039】コンパイラ10は、記録媒体6に格納され
たプログラムおよびデータがCPU1により駆動装置7
を介して外部記憶装置5内にインストールされた後、こ
の外部記憶装置5から主記憶装置4にロードされたもの
であり、構文解析機能12、命令スケジューリング処理
機能13と命令配置テーブル14、コード生成機能1
7、および、本発明に係わる機能としてのレジスタ割当
処理機能15とレジスタ割当情報テーブル16を有して
いる。
【0040】このコンパイラ10に基づくCPU1の処
理で、高水準言語で書かれたソースプログラム8から機
械語のオブジェクトプログラム9への変換が行われる。
この際、入力装置3より、ユーザからのコンパイラ起動
命令を受け付けて、コンパイラ終了メッセージや、エラ
ーメッセージが、表示装置2に表示される。
【0041】このようなコンパイラ10の動作を図2に
基づき説明する。
【0042】まず、ステップS201の処理では、図1
の構文解析機能12において、ソースプログラム8を入
力として字句構文解析を行ない、中間語11を出力す
る。次のステップS202の処理では、この中間語11
を入力とし、命令スケジューリング処理機能13におい
て、逐次命令列を複数クラスタに配置する命令スケジュ
ーリング処理を行ない、中間語11を出力する。
【0043】さらに、ステップS203の処理では、レ
ジスタ割当処理機能15において、中間語11を入力と
し、この中間語中の変数にレジスタを割り当てた中間語
11を出力する。そして、ステップS204の処理で
は、コード生成機能17において、中間語11を最終的
なオブジェクトプログラム9の形式に変換する。
【0044】上述のステップS202における命令スケ
ジューリング処理機能13による命令スケジューリング
処理動作の後の、ステップS203におけるレジスタ割
当処理機能15によるレジスタの割り当て処理動作の詳
細を、次の図3を用いて説明する。
【0045】図3は、図1におけるレジスタ割当処理機
能の本発明に係わる処理動作例を示すフローチャートで
ある。
【0046】本図3に示す処理は、図1における命令ス
ケジューリング処理機能13による命令スケジューリン
グ処理(ステップS202)の後、図1のレジスタ割当
処理機能15が、レジスタの割当処理を行う際に、キャ
ッシュミス等による主記憶装置4からのデータの読み出
し時(メインメモリリード時)におけるビット遷移を認
識して、レジスタ割当を行う動作を詳細に示すものであ
り、そのレジスタ割当処理(ステップS203)は、主
に、変数情報登録処理(ステップS301)と、ビット
遷移変数登録処理(ステップS302)、ビット遷移変
数割当処理(ステップS305)、一般変数割当処理
(ステップS307)からなる。
【0047】ステップS302でのビット遷移変数登録
処理では、まず、未処理命令CNがあるか否かを判定し
(ステップS3021)、あれば、命令スケジュール処
理が配置した命令配置を調べて、未処理命令CNのメモ
リ内直前配置命令PNがあるかどうかを判定する(ステ
ップS3022)。
【0048】メモリ内直前配置命令PNが存在するとき
は、未処理命令CNのオペランド変数をメモリ内直前配
置命令PNのオペランド変数のビット遷移変数として登
録する(ステップS3023)。また、ステップS30
22の判定がNoのときおよびステップS3023の処
理終了後は、ステップS3021で次の未処理命令の有
無判定処理を行う。
【0049】ステップS3021での判定がNoとなっ
た時点で、ステップS302でのビット遷移変数登録処
理を終了し、ステップS303の処理に進む。このステ
ップS303以降では、個別の変数に対するレジスタ割
当を行う。
【0050】すなわち、まず未処理変数vが存在するか
否かを判定し(ステップS303)、存在した場合は、
未処理変数vがビット遷移変数か否かを判定する(ステ
ップS304)。Yes(未処理変数vがビット遷移変
数)であれば、ビット遷移変数割当処理を行い(ステッ
プS305)、Noであれば、一般変数割当処理を行う
(ステップS307)。
【0051】ステップS305でのビット遷移変数割当
処理後は、未処理変数vが割当済みか否かを判定し(ス
テップS306)、未割当であれば(No)、ステップ
S307での一般変数割当処理を行い、割当済であれば
(Yes)、および、ステップS307での一般変数割
当処理終了後は、ステップS303での処理に戻り、次
の未処理命変数vの処理を行う。尚、ステップS303
での判定処理結果がNoとなった時点でレジスタ割当処
理(ステップS203)を終了する。
【0052】尚、これら、変数情報登録処理(ステップ
S301)と、ビット遷移変数登録処理(ステップS3
02)、ビット遷移変数割当処理(ステップS30
5)、および、一般変数割当処理(ステップS307)
等の、レジスタ割当処理(ステップS203)の主要な
処理に関しては、後に、図16〜図20を用いてさらに
詳しく説明する。
【0053】図4は、図1におけるコンパイラの詳細構
成例を示すブロック図である。
【0054】本図4においては、図3で示したビット遷
移認識型レジスタ割当処理の入出力となる中間語やテー
ブル類の関係を示している。尚、中間語11は全般的に
参照するため入出力関係は、主要なもののみを示してい
る。
【0055】命令スケジューリング処理機能13は、命
令スケジューリング前中間語11aを入力とし、命令配
置テーブル14への登録および参照を行いながら中間語
ノードの配置位置を決定し、複数クラスタに命令を並列
化して配置した命令スケジューリング後の並列化中間語
11bを生成する。
【0056】レジスタ割当処理機能15は、変数情報登
録処理部15a、ビット遷移変数登録処理部15b、ビ
ット遷移変数割当処理部15c、一般レジスタ割当処理
部15dで構成され、中間語11bを入力とし、レジス
タ割当情報テーブル16への登録および参照を行いなが
ら、レジスタ割当を行い、レジスタ割当後中間語11c
を生成する。
【0057】このレジスタ割当情報テーブル16は、各
エントリが割当対象である変数の情報を集めた変数テー
ブル16a、各エントリが対応する中間語ノードの情報
を収集した命令ノードテーブル16b、変数間のビット
遷移の関係を解析したビット遷移変数テーブル16c、
変数へのレジスタ割当結果を格納するレジスタ割当テー
ブル16dで構成される。
【0058】変数情報登録処理部15aは、命令スケジ
ューリング後中間語11bと命令配置テーブル14を入
力とし、各エントリが割当対象である変数の情報を集め
た変数テーブル16a、各エントリが対応する中間語ノ
ードの情報を収集した命令ノードテーブル16bを生成
する。
【0059】ビット遷移変数登録処理部15bは、変数
テーブル16a、命令ノードテーブル16bを入力と
し、変数間のビット遷移の関係を解析したビット遷移変
数テーブル16cを生成する。
【0060】ビット遷移変数割当処理部15cは、変数
テーブル16a、命令ノードテーブル16b、ビット遷
移変数テーブル16cを入力とし、レジスタ割当テーブ
ル16dへの登録参照を行いながら、ビット遷移変数へ
のレジスタ割当を行う。
【0061】一般レジスタ割当処理部15dは、変数テ
ーブル16a、命令ノードテーブル16bを入力とし、
レジスタ割当テーブル16dへの登録参照を行いなが
ら、一般変数へのレジスタ割当を行う。その最終的なレ
ジスタ割当結果は、命令スケジュール後中間語11b中
の変数を、レジスタ割当テーブル16dの情報に従って
レジスタに変換したレジスタ割当後中間語11cによっ
て示される。
【0062】次に、具体的な適用例を用いて説明する
が、この具体例の説明のために、処理対象たる中間語の
例を説明する。
【0063】本例のコンパイラは、複数クラスタを持つ
アーキテクチャに対するコンパイラであり、その並列化
中間語は、クラスタを表現できる形式が必要となる。
【0064】本例の説明では、各クラスタに配置された
命令が同一サイクルに並列に実行されることを表現する
ため、実行サイクルを縦軸にとり、そのサイクルで実行
する命令(説明を簡単にするため、1サイクル当たり各
クラスタで1命令のみ実行可能とする)を横に配置する
ことにする。
【0065】また、命令の中間語上での位置の指定は、
実行サイクルをサイクル位置(行番号で指定)、命令を
実行するクラスタをクラスタ位置(クラスタ番号で指
定)と呼ぶことにする。
【0066】これにより、ある命令の並列化中間語上の
位置は、<サイクル位置,クラスタ位置>で示すことが
できる。尚、中間語がクラスタを意識する必要があるの
は、命令スケジューリング処理された中間語(図4にお
ける命令スケジューリング後中間語11b)以降におい
てであり、それ以前の中間語(命令スケジューリング前
中間語11a)では、サイクル位置のみで命令を特定す
ることができる。
【0067】本例において、命令語の構成は重要な意味
を持つ。一般に、命令語の命令フィールドやオペランド
フィールドの大きさ(ビットサイズ)は命令の種別によ
り異なる場合があり、オペランドが常に一定のビット位
置、幅を持つとは限らない。しかし、命令語中にオペラ
ンドを示すフィールドがあり、それらのオペランドフィ
ールドがビット遷移を引き起こす点に相違はない。
【0068】本例では、命令語のビット列表現の類似性
を利用するものであり、先行命令と後続命令のオペラン
ド位置(ビット位置およびビット幅)の重なった範囲で
同様の処理を行うことが可能である。
【0069】そこで、説明の簡略化のため、全ての命令
は図5に示した命令語構成を持つものとする。すなわ
ち、命令幅、命令フィールド、オペランドフィールドの
幅は、全て固定であると仮定する。また、命令語中のオ
ペランドの個数も、デスティネーションも含め、3個で
固定とする。尚、オペランドを3個要しない命令でも、
オペランドフィールドを占有する。
【0070】また、本例の説明では、命令ノード中に出
現する変数や定数、レジスタを、全てオペランドと呼
び、出現位置の順に、オペランド(1)、オペランド
(2)、オペランド(3)と呼ぶ(命令によっては、オ
ペランドに変数等が存在しない場合もある)。従って、
代入命令の場合は、左辺(デスティネーション)がオペ
ランド(1)、右辺(ソース)がオペランド(2)であ
る。尚、本例では、演算のオペランドとなる変数は、全
て命令が配置されたクラスタでの使用に限られるものと
する。
【0071】図8は、図4における命令スケジューリン
グ前中間語の構成例を示す説明図である。
【0072】本図8に示す命令スケジューリング前中間
語11aは、全命令が逐次実行を想定した逐次中間列と
なっている。
【0073】図9は、図4における命令スケジューリン
グ後中間語の構成例を示す説明図である。
【0074】本図9に示す命令スケジューリング後中間
語11bは、図8の命令スケジューリング前中間語11
aを命令スケジューリング処理により並列配置したもの
であり、各命令が複数クラスタに配置された並列化中間
語列となっている。
【0075】例えば、201行では、「クラスタ0」
(中間語位置<201,0>)で命令「t01=0」、クラ
スタ1(中間語位置<201,1>)で命令「t11=2」
をそれぞれ実行することを表している。これらは、それ
ぞれ、図8における101行および104行の命令が並
列配置されたものである。
【0076】図10は、図4におけるレジスタ割当後中
間語の構成例を示す説明図である。
【0077】本図10に示すレジスタ割当後中間語11
cは、図9におけるスケジューリング後中間語11bに
レジスタ割当を行ったもの、すなわち、図9で示したス
ケジューリング後中間語11bの各変数を、割当結果を
示すレジスタ割当テーブル16dに従ってレジスタに置
き換えた中間語列である。
【0078】以降、命令スケジューリング処理6、レジ
スタ割当処理2の細部の説明を行うが、その説明にあた
っては、図8の中間語を入力例とし、各種テーブルの出
力例を逐次示していくので、まず、各種テーブルの構成
例を説明してから、処理手順の説明を行う。
【0079】以下、図1の命令配置テーブル14、レジ
スタ割当情報テーブル16の順にその構成例を述べる。
【0080】図11は、図1における命令配置テーブル
の構成例を示す説明図である。
【0081】本図11に示す命令配置テーブル14は、
図1の命令スケジューリング処理6が、図4および図8
で示す命令スケジューリング前中間語11aを図4およ
び図9で示す命令スケジューリング後中間語11bに変
換するために用いるテーブルであり、中間語11に出現
する命令ごとに、エントリが作成される。
【0082】各命令には、一意な命令番号が付与されて
おり、その命令番号により各エントリがアクセス可能と
なっており、各エントリは、命令番号欄14a、出現行
番号欄14b、命令ノード欄14c、配置サイクル欄1
4d、配置クラスタ欄14eで構成される。
【0083】命令番号欄14aには、命令配置テーブル
14のエントリ番号が格納され、出現行番号欄14bに
は、対応する命令ノードの命令スケジューリング前中間
語11a上での行番号が格納される。
【0084】命令ノード欄14cは、中間語との関係を
明示的に示すための説明用フィールドであり、各エント
リの中間語表記を示した。配置サイクル欄14d、およ
び、配置クラスタ欄14eは、それぞれ命令を配置する
サイクル位置(命令スケジュール語中間語11bの行番
号で示す)と、クラスタ位置を示す欄であり、命令並列
化(クラスタリング)の結果が格納されている。
【0085】尚、本命令配置テーブル14の例は、図8
で示した命令スケジューリング前中間語11aに対して
命令スケジューリングを行った後の命令配置テーブル1
4の例でもあり、エントリ14fとエントリ14gは、
それぞれ中間語位置<202,0>、<202,1>で
あり、並列化後は同じサイクル位置「202」の「クラ
スタ0」、「クラスタ1」の命令となることが示されて
いる。
【0086】図12は、図4における変数テーブルの構
成例を示す説明図である。
【0087】本例の変数テーブル16aは、図1のレジ
スタ割当情報テーブル16における変数テーブルの構成
を示し、図4に示すレジスタ割当処理機能15における
変数情報登録処理部15aにより、特に、図9の命令ス
ケジューリング後中間語例に対して求めたものである。
【0088】このように、変数テーブル16aは、中間
語のレジスタ割当対象である変数の情報を格納するもの
であり、変数毎に1エントリ作成される。各エントリ
は、変数番号欄16a1、変数名称欄16a2、配置ク
ラスタ欄16a3、出現範囲欄16a4で構成される。
【0089】変数番号欄16a1には、変数テーブル1
6aのエントリ番号が格納され、変数名称欄16a2に
は、対応する変数の名称が格納される。配置クラスタ欄
16a3には、変数が配置されるクラスタ番号が格納さ
れ、出現範囲欄16a4には、変数の出現範囲が図9の
命令スケジューリング後中間語11bの行番号の形式で
格納される。
【0090】すなわち、変数テーブル16aにおけるエ
ントリ16a5とエントリ16a6は、それぞれ、図9
の中間語位置<202,0>および<202,1>の命
令ノードの第1オペランドに現れる変数「t02」と「t1
2」を表している。
【0091】図13は、図4における命令ノードテーブ
ルの構成例を示す説明図である。
【0092】本例の命令ノードテーブル16bは、図1
のレジスタ割当情報テーブル16における命令ノードテ
ーブルの構成を示し、図4に示すレジスタ割当処理機能
15における変数情報登録処理部15aにより、特に、
図9の命令スケジューリング後中間語例に対して求めた
ものである。
【0093】このように、図13に示す命令ノードテー
ブル16bは、図9における命令スケジューリング後中
間語の命令ノード(中間語の命令を示すノード)の情報
を説明のためテーブル形式で表したもので、各エントリ
は、命令ノードの情報をテーブルに変換したものであ
り、中間語上の命令ノードと1対1に対応している。
【0094】各エントリは、命令番号欄16b1、出現
行番号欄16b2、配置サイクル位置欄16b3、配置
クラスタ位置欄16b4、オペランド変数(1)欄16
b5、オペランド変数(2)欄16b6、オペランド変
数(3)欄16b7、ビット遷移元命令ノード欄16b
8で構成される。
【0095】命令番号欄16b1には、命令ノードテー
ブルのエントリ番号が格納され、出現行番号欄16b2
には、当該エントリに対応する図4の命令スケジューリ
ング前中間語11aにおける命令ノードの出現位置が、
図8で示した当該中間語(11a)の行番号の形式で示
してある。
【0096】配置サイクル位置欄16b3と配置クラス
タ位置欄16b4には、図1と図4で示す命令スケジュ
ーリング処理機能13が配置したスケジューリング位置
が、中間語位置の形式で格納される。オペランド変数
(1)欄16b5からオペランド変数(3)欄16b6
には、対応する中間語ノードのオペランドの情報が、図
12に示す変数テーブル16aの変数番号の形式で格納
される。
【0097】ビット遷移元命令ノード欄16b8には、
ビット遷移元命令ノードが、命令ノードテーブル16b
の行番号の形式で格納される。このビット遷移元命令ノ
ードは、1VLIW命令中に複数のクラスタに命令が配
置されているとき、後続クラスタ位置の命令が、先行ク
ラスタ位置の命令を、指し示すものである。
【0098】このような命令ノードテーブル16bにお
いて、エントリ16b9とエントリ16b10は、それ
ぞれ、図9の中間語位置<202,0>、<202,1
>の命令ノードを表している。
【0099】図14は、図4におけるビット遷移変数テ
ーブルの構成例を示す説明図である。
【0100】本例のビット遷移変数テーブル16cは、
図1のレジスタ割当情報テーブル16におけるビット遷
移変数テーブル16cの構成を示し、図4に示すレジス
タ割当処理機能15におけるビット遷移変数登録処理部
15bにより求めたものである。
【0101】本例のビット遷移変数テーブル16cは、
変数のビット遷移関係を格納するものであり、変数毎に
1エントリ作成される。各エントリは、変数番号欄16
c1、変数名称欄16c2、配置クラスタ位置欄16c
3、出現範囲欄16c4、ビット遷移対象変数欄16c
5で構成される。
【0102】変数番号欄16c1から出現範囲欄16c
4の各欄は、図12の変数テーブル16aにおけるエン
トリ番号を示せば得られる情報を、説明の簡略化のため
設けてある。その内容は、図12における変数テーブル
16aに対応する欄と同じなので、説明は省略する。ま
た、ビット遷移対象変数欄16c5は、メモリ上の命令
配置位置で直前に配置される可能性のある変数の集合を
格納する。
【0103】本例のビット遷移変数テーブル16cは、
図9で示したスケジューリング後中間語に対して、図4
のビット遷移変数登録処理部15bの処理後の例であ
り、エントリ16c7は、図9の中間語位置<202,
1>の命令ノードの1オペランドに現れる変数「t12」
を表している。そのビット遷移対象変数欄16c5がエ
ントリ16c6(エントリ番号「2」の変数名称「t0
2」)を要素として持っていることから、「t12」が「t0
2」のビット遷移変数の一つであるであることが分か
る。
【0104】図15は、図4におけるレジスタ割当テー
ブルの構成例を示す説明図である。
【0105】本例のレジスタ割当テーブル16dは、図
1のレジスタ割当情報テーブル16におけるレジスタ割
当テーブルの構成を示し、図4に示すレジスタ割当処理
機能15におけるビット遷移変数割当処理部15cによ
り、図14のビット遷移変数テーブルに基づき求めたも
のである。
【0106】このレジスタ割当テーブル16dは、変数
に割り当てるレジスタを格納するものであり、変数毎に
1エントリ作成される。各エントリは、変数番号欄16
d1、変数名称欄16d2、配置クラスタ位置欄16d
3、出現範囲欄16d4、ビット遷移対象変数欄16d
5、割当レジスタ欄16d6で構成される。
【0107】変数番号欄16d1からビット遷移対象変
数欄16d5の各欄は、図14のビット遷移変数テーブ
ル16cにおける各エントリ番号を示せば得られる情報
を、説明の簡略化のため設けてある。その内容は、図1
4の対応する欄と同じなので、説明は省略する。割当レ
ジスタ欄16d6は、各エントリが示す変数(=図12
の変数テーブル16aの変数番号の示す変数)に割り当
てたレジスタを格納する。
【0108】図15は、図9で示した中間語に対して図
4のレジスタ割当処理機能15におけるビット遷移変数
割当処理部15cによる処理を行った後のレジスタ割当
テーブル16dの例を示しており、例えば、エントリ1
6d7とエントリ16d8は、それぞれ、図9の中間語
位置<202,0>および<202,1>の命令ノード
の1オペランドに現れる変数「t02」、「t12」を表して
いる。その割当レジスタ欄16d6から、それぞれ「r
1」、「r1」に割り当てられたことが分かる。
【0109】以上で、本実施例で用いる各種テーブル構
成の説明を終り、以下、これらのテーブルを生成/参照
する各種処理の説明を順に行う。
【0110】図16は、図1および図4における命令ス
ケジューリング処理機能の処理動作例を示すフローチャ
ートである。
【0111】図4における命令スケジューリング処理機
能13は、逐次実行型の命令スケジュール前中間語11
aを逐次走査し、複数クラスタに対応した並列実行型の
命令スケジュール後中間語11bを生成するが、この命
令スケジューリングは、全中間語を順にスケジューリン
グするのではなく、特定の手順で中間語をスケジューリ
ング単位に分割し、そのスケジューリング単位で中間語
をスケジューリングするのが一般的である。しかし、ス
ケジューリング中間語処理単位をどのようにするかは、
本発明においては本質的ではないので、以降の説明では
省略し、単に中間語を逐次走査して処理する形式とす
る。以下、その手順を説明する。
【0112】まず、スケジュール単位での相対命令実行
サイクル数pを0で初期化する(ステップS160
1)。次に、未処理の中間語ノードopがあるか否かを判
定し(ステップS1602)、全ての中間語ノードを処
理するまでステップS1603以下の処理を反復実行す
る。
【0113】op(未処理の中間語ノード)の処理では、
まず、opの配置クラスタCを決定し(ステップS160
3)、命令配置テーブル14に設定する。次に、現在の
配置領域で、opの命令配置が可能か否かを判定し(ステ
ップS1604)、配置不能な場合は、ステップS16
05で「p=p+1」として配置領域を広げ、ステップ
S1603以降で、再度命令配置を試みる。
【0114】ステップS1604で配置位置が決定した
場合は、配置クラスタCと実行サイクル位置pが決定す
るので、そのスケジュール位置<p,C>を命令配置テ
ーブルに登録後、ステップS1602に進み次の命令ノ
ードのスケジューリングを行う。
【0115】全ての命令ノードの配置位置が決定したと
ころで、処理を終了する。尚、命令配置テーブルから並
列化中間語を生成する処理は通常のコンパイル動作であ
り自明であるので省略する。
【0116】図17は、図1におけるレジスタ割当処理
機能を構成する図4に示す変数情報登録処理部の処理動
作例を示すフローチャートである。
【0117】図4におけるレジスタ割当処理機能15の
変数情報登録処理部15aは、命令スケジューリング後
中間語11bおよび命令配置テーブル14情報を入力と
し、変数テーブル16aと命令ノードテーブル16bを
生成するものであり、その手順は以下のようになる。
【0118】まず、図12に示す構成の変数テーブル1
6aのエントリ番号veiを0で初期化する(ステップS
1701)。次に、未処理の中間語ノードNがあるか否
かを判定し(ステップS1702)、未処理中間語ノー
ドNがなくなるまで、ステップS1703以下の処理を
行う。
【0119】未処理中間語ノードNがある場合には、ま
ず、図13に示す構成の命令ノードテーブル16bに新
規エントリeeを確保し、中間語ノードNの情報を格納
(ステップS1703)する。次に、中間語ノードNの
変数集合をovsとする(ステップS1704)。
【0120】ここで、ovs(中間語ノードNの変数集
合)に未処理の変数v(オペランド)があるかどうかを
調べ(ステップS1705)、未処理変数vがなくなれ
ばステップS1702に進み、次の中間語ノードに対す
る処理を行う。未処理変数vがあれば、この未処理変数
vが図12の変数テーブル16aに登録済みか否かを判
定する(ステップS1706)。
【0121】この判定は、図12の変数テーブル16a
の変数名称欄16a2が未処理変数vと一致するエント
リがあるかどうかで行う。まだ登録されていなければ、
「vei=vei+1」として、変数テーブル16aに、新規
の変数情報を登録し(ステップS1707)、既登録で
あった場合には、ステップS1705に進み、次のオペ
ランド(未処理変数v)の処理を行う。
【0122】ステップS1702の判定で、全ての中間
語ノードを処理し終わった時点で処理を終了する。
【0123】図18は、図1におけるレジスタ割当処理
機能を構成する図4に示すビット遷移変数登録処理部の
処理動作例を示すフローチャートである。
【0124】図4におけるレジスタ割当処理機能15の
ビット遷移変数登録処理部15bは、図12に示す構成
の変数テーブル16aを入力とし、図14に示すビット
遷移変数テーブル16cを生成するものであり、その手
順は以下のようになる。
【0125】まず、未処理の(中間語)命令ノードCN
があるか否かを判定し(ステップS1801)、未処理
命令ノードがなくなるまで、ステップS1802以下の
処理を行う。
【0126】未処理の命令ノードCNがある場合には、
未処理命令ノードCNとサイクル位置が同じ命令ノード
PNがあるか否かを判定する(ステップS1802)。
当該命令ノードPNが存在しないときは、ステップS1
801に進み次の命令ノードの処理を行い、当該命令ノ
ードPNが存在するときは、未処理命令ノードCNおよ
び当該命令ノードPNのクラスタ位置をそれぞれ未処理
命令CNC、PNCとして(ステップS1803)、P
NCが未処理命令CNCのメモリ内直前クラスタ位置か
どうかを判定する(ステップS1804)。
【0127】ステップS1804の判定がNoのとき、
当該命令ノードPNは未処理命令CNのメモリ内直前配
置命令ではないので、ステップS1801に進み、次の
命令ノードの処理を行し、ステップS1804の判定が
Yesのときは、当該命令ノードPNは未処理命令CN
のメモリ内直前配置命令なので、ステップS1805以
降でオペランド毎にビット遷移変数の登録を行う。
【0128】このオペランド単位ビット遷移変数登録で
は、未処理命令CNに未処理オペランドcnoがあるか否
かを判定し(ステップS1806)、Yesであれば、
未処理オペランドがなくなるまでステップS1807以
降を実行する。
【0129】この未処理オペランドcnoに対する処理で
は、まず、未処理オペランドcnoのオペランド位置をnoi
とし(ステップS1807)、次に、当該命令ノードP
Nのオペランド位置noiの変数pnoを求め(ステップS1
808)、未処理オペランドcnoのビット遷移変数集合
にpno (の変数番号)を加え(ステップS1809)、
その後、ステップS1806に進み次の未処理オペラン
ドの処理を行う。
【0130】ステップS1806において未処理オペラ
ンドcnoがなくなったらステップS1801に進み、次
の中間語ノードの処理を行い、このステップS1801
の判定で、全ての中間語ノードを処理し終わった時点で
処理を終了する。
【0131】図19は、図1におけるレジスタ割当処理
機能を構成する図4に示すビット遷移変数割当処理部の
処理動作例を示すフローチャートである。
【0132】図4におけるレジスタ割当処理機能15の
ビット遷移変数割当処理部15cは、図12に示す変数
テーブル16aと図14に示すビット遷移変数テーブル
16cを入力とし、図15に示すレジスタ割当テーブル
16dとして割当結果を生成するものであり、その手順
は以下のようになる。
【0133】まず、現在レジスタ割当を行おうとしてい
る未処理変数をvとし(ステップS1901)、以下の
ステップS1902からステップS1907で、未処理
変数vのビット遷移レジスタ集合RRSを求める。
【0134】すなわち、まず、未処理変数vのビット遷
移レジスタ集合RRSを空で初期化し(ステップS190
2)、その後、未処理変数vのビット遷移変数集合をRV
Sとする(ステップS1903)。次に、ビット遷移変
数集合RVSに未処理ビット遷移変数rvが存在するか否か
を判定する(ステップS1904)。
【0135】未処理ビット遷移変数rvが存在するとき
は、当該未処理ビット遷移変数rvが割当済みか否かを判
定し(ステップS1905)、割当済みの場合は、その
割当レジスタをrrとして(ステップS1906)、ビッ
ト遷移レジスタ集合RRSに加える(ステップS190
7)。
【0136】以上の処理をステップS1904の判定が
Noになるまで実行することで、未処理変数vのビット
遷移レジスタ集合RRSを求めることができる。
【0137】次に、ステップS1908からステップS
1915で、ビット遷移レジスタ集合RRSから未処理変
数vに割り当てるレジスタを選択する。すなわち、ビッ
ト遷移レジスタ集合RRSに未処理レジスタrrが存在する
か否かを判定し(ステップS1908)、存在すれば、
RS(求めるレジスタ集合)を全レジスタ集合で初期化し
(ステップS1909)、その後、RSに未処理レジスタ
rrに対する遷移数が最小となるレジスタmbtrが存在する
かどうかを判定する(ステップS1910)。
【0138】この判定は、未処理レジスタrrに対するRS
内の全要素(レジスタ番号)のビット遷移数を計算し、
ビット遷移数が少ない順にRSの要素をソートしておき、
順にビット遷移数最小レジスタmbtrを取り出せば容易に
実現できる。
【0139】ビット遷移数最小レジスタmbtr(複数ある
ときは任意の一つ)が存在しないときは、ステップS1
911に進み、ビット遷移レジスタ集合RRSから未処理
レジスタrrを除いてステップS1908,S1909に
進む。
【0140】また、ステップS1910でYesと判定
されたときは、ステップS1912で、未処理変数vが
未処理レジスタrrで割当可能かどうかを判定し、割当可
能な場合は、未処理変数vにビット遷移数最小レジスタ
mbtrを割当て(ステップS1914)処理を終了する。
【0141】また、ステップS1912の判定で、未処
理変数vがビット遷移数最小レジスタmbtrで割当不能な
場合は、レジスタ集合RSからビット遷移数最小レジスタ
mbtrを除いて(ステップS1913)、ステップS19
10に進む。ステップS1910でビット遷移数最小レ
ジスタmbtrがないと判断されたときは、レジスタ集合RS
のレジスタに対する処理が終了したことになるので、ビ
ット遷移レジスタ集合RRSから未処理レジスタrrを除い
て(ステップS1911)、ステップS1908に進
む。
【0142】ビット遷移レジスタ集合RRSが空となった
場合は、未処理変数vを未割当として(ステップS19
15)、ビット遷移変数割当処理部15cではレジスタ
割当をしないことにして処理を終了する。
【0143】尚、ステップS1912において、ある変
数があるレジスタで割当可能かどうかの判定が行われる
が、これは図12の変数テーブル16aにおける出現範
囲欄16a4を参照することにより行われる。また、新
規に割り当てる変数の出現範囲において、既に割当てた
レジスタの出現範囲に重なりがない任意のレジスタが割
当可能であるが、本発明とは直接関係がないので詳細は
省略する。
【0144】図20は、図1におけるレジスタ割当処理
機能を構成する図4に示す一般レジスタ割当処理部の処
理動作例を示すフローチャートである。
【0145】図4におけるレジスタ割当処理機能15の
一般レジスタ割当処理部15dは、図12に示す変数テ
ーブル16aを入力とし、図15に示すレジスタ割当テ
ーブル16dとして割当結果を生成するものであり、そ
の手順は以下のようになる。
【0146】まず、現在レジスタ割当を行おうとしてい
る未処理変数をvとする(ステップS2001)。次
に、未処理変数vの割当可能レジスタ集合をCRSとし
(ステップS2002)、この割当可能レジスタ集合CR
Sに未処理レジスタcrが存在するか否かを判定する
(ステップS2003)。
【0147】未処理レジスタcrが存在するときは、未
処理変数vが未処理レジスタcrで割当可能かどうかを
判定し(ステップS2004)、割当可能な場合は未処
理変数vに未処理レジスタcrを割当てて(ステップS
2005)処理を終了する。また、未処理変数vが未処
理レジスタcrで割当不能な場合は割当可能レジスタ集
合CRSから未処理レジスタcrを除いて(ステップS2
006)、ステップS2003に進む。割当可能レジス
タ集合CRSが空となった場合は、未処理変数vをspill処
理して(ステップS2007)処理を終了する。
【0148】尚、ステップS2007におけるspill処
理は、大域的レジスタ割当処理において、レジスタ不足
により割当不能になるとき行う特別な処理であるが、本
発明とは直接関係がないので、詳しい説明は省略する。
【0149】以上で本例の主要な処理の説明を終える。
次に本例の効果を示すため、図21において、本例のレ
ジスタ割当結果のビット遷移の例を挙げておく。
【0150】図21は、図1のコンパイラによるコンパ
イル結果でのビット遷移例を示す説明図である。
【0151】本例は、図10で示したレジスタ割当後中
間語の内、第302行目の特定のVLIW命令(「クラ
スタ0」は「r1=r0+1」、「クラスタ1」は「r
1=r0+1」)に関するビット遷移を示しており、命
令フィールド(「c0.addi」、「c1.add
i」)のクラスタ指定ビット(「c0=10」、「c1
=11」)の相違による1ビットの他には、ビット遷移
はなく、このVLIW命令全体でのビット遷移数が1で
あることがわかる。
【0152】このようなコンパイル結果を得ることがで
きる本例の効果を明確にするために、従来のレジスタ割
当技術について、図22〜図25を用いて述べる。
【0153】図22は、従来技術におけるレジスタ割当
処理手順例を示すフローチャートであり、図23は、図
22におけるレジスタ割当処理で生成されるレジスタ割
当テーブルの構成例を示す説明図、図24は、図22に
おけるレジスタ割当処理で生成される中間語の構成例を
示す説明図、図25は、図24における中間語のビット
遷移例を示す説明図である。
【0154】図22は、図3で示した本発明に係わる例
での命令スケジューリング処理S202とレジスタ割当
処理S203に対する従来技術における手順を示してお
り、レジスタ割当処理のステップがS2201となって
いる。図3と同様の処理には、同一のステップ符号を用
いている。すなわち、処理内容としては、図3で示した
本発明に特徴的なビット遷移変数登録処理(S302)
とビット遷移変数割当処理(S305)、およびそれら
に関連する処理がないだけである。
【0155】図23は、図22で示した従来技術におけ
るレジスタ割当処理(S2201)の割当結果を示すレ
ジスタ割当テーブルの例であり、この割当結果では、エ
ントリ2301で示すように、変数番号「5」のレジス
タ割当結果は「r0」であるが、図15で示した本例のレ
ジスタ割当結果では、「r1」であることがわかる。
【0156】変数番号「5」の変数「t12」を割り当て
るとき、レジスタ「r0」も含め(「クラスタ1」の)全
レジスタが使用可能であり、ビット遷移変数の割当結果
(「r1」)を優先割当しないときは、レジスタの選択順
序に従って「r0」が割り当てられている。
【0157】図24に示すレジスタ割当後中間語は、図
9におけるスケジューリング後中間語に、図22に示す
従来のレジスタ割当を行ったもの、すなわち、図9で示
したスケジューリング後中間語の各変数を、図23に示
す内容のレジスタ割当テーブルに従ってレジスタに置き
換えた中間語列である。
【0158】この図24に示す従来のレジスタ割当処理
による割当結果の中間語の例では、中間語位置<40
2,0>と<402,1>は、同一VLIW命令を構成
する命令であり、その第一オペランドの変数には、「r
1」と「r0」の異なるレジスタ番号が割り当てられてい
ることが分かる。
【0159】それ対して、本例の割当結果を示す図10
では、中間語位置<302,0>と<302、1>で
は、双方とも、その第一オペランドの変数が「r1」にな
っていることが分かる。この結果、図24で示す中間語
でのビット遷移は図25で示すようになる。
【0160】すなわち、図25においては、図24で示
した従来技術におけるレジスタ割当処理結果の中間語の
内、特定のVLIW命令(402行)に関するビット遷
移を示しており、命令フィールド(「c0.addi」、「c1.
addi」)のクラスタ指定ビット(「c0=10」、「c1=
11」)の相違による1ビットの他に、レジスタ番号の
相違(第1オペランドが「r1=00001」から「r0=
00000」)によるビット遷移がおこり、このVLI
W命令全体でのビット遷移数が「2」となっている。
【0161】これに対して、図10に示した本例のレジ
スタ割当処理を行った結果を示す中間語では、同一VL
IW命令を構成する命令のオペランドのビット遷移を考
慮したレジスタ割当が行われているので、例えば、中間
語位置<302,0>と<302,1>の第一オペラン
ドには同一のレジスタ番号(「r1」)が割り当てられて
いる。
【0162】これは、図14のビット遷移変数テーブル
16cにおけるビット遷移対象変数欄16c5において
示すように、エントリ16c6が、エントリ16c7の
ビット遷移変数であることを利用している。すなわち、
図14のビット遷移変数テーブル16cにおける変数番
号「5」の変数「t12」は、変数番号「2」の変数「t0
2」に割り当てられたレジスタ「r1」から、ビット遷移
が少ない変数番号を優先して選択しているためである。
【0163】以上、各図を用いて説明したように、本例
のコンパイラおよびコンパイル方法では、レジスタ指定
のビット表現のビット遷移を減少させるよう考慮したレ
ジスタ割当を行う。
【0164】すなわち、本例では、命令スケジューリン
グ処理において、予め定められたターゲットアーキテク
チャの命令配置制約に基づきプログラムを構成する命令
群を配置し、また、レジスタ割当処理において、命令ス
ケジューリング処理で配置された命令列に対するレジス
タ割当を行う際、このレジスタ割当処理において、命令
スケジューリング処理により配置した命令順序における
命令のビット列表現の遷移(ビット遷移)を認識し、こ
の命令ビット列表現の遷移の可能性に応じてレジスタを
選択する。
【0165】特に、本例では、ターゲットアーキテクチ
ャが、相互に通信可能な独立した演算手段と記憶手段を
備える処理構成単位であるクラスタを有するクラスタ構
成アーキテクチャであり、命令スケジューリング処理に
おいて、命令をクラスタに配分するクラスタリング処理
を行い、命令ビット列表現遷移の可能性の検出を、クラ
スタリング処理が関係付けた命令か否かで判断する。
【0166】また、このクラスタ構成アーキテクチャ
は、クラスタ内の独立した記憶手段であるレジスタに対
し、各クラスタに共通のビット列表現による指定が可能
であり、クラスタリング処理で関係付けた命令は、同一
サイクルに実行する異なるクラスタに配置した命令であ
る。そして、レジスタ割当処理においては、他クラスタ
の既割当レジスタの指定ビット表現との類似性に基づき
レジスタを選択する。
【0167】また、本例では、レジスタ指定ビット列表
現がレジスタ番号であり、レジスタ選択の際、他クラス
タの既割当レジスタと同一レジスタ番号を優先する。ま
た、本例では、レジスタ割当対象の解析情報を保持する
変数テーブル16aを備え、レジスタ割当の際、この変
数テーブル16aに従ってレジスタ選択を行う。さら
に、この変数テーブルが、同一サイクルに実行する異な
るクラスタに配置した命令の情報を保持する。
【0168】また、変数テーブル16aは、同一サイク
ルに実行する異なるクラスタに配置した命令に割り当て
られたレジスタの情報を備えている。そして、同一サイ
クルに実行する異なるクラスタに配置した命令に割り当
てられたレジスタとの類似性に基づきレジスタを選択す
る。特に、このレジスタ選択の際、同一サイクルに実行
する異なるクラスタに配置した命令に割り当てられたレ
ジスタを優先する。
【0169】このように、本例では、レジスタ割当処理
において、命令スケジューリング処理により配置した命
令順序における命令のビット列表現の遷移(ビット遷
移)を認識し、この命令ビット列表現の遷移の可能性に
応じてレジスタを選択することにより、レジスタ指定の
ビット表現のビット遷移を減少させるよう考慮したレジ
スタ割当を行う。
【0170】これにより、レジスタ番号の類似性が向上
し、例えば、メモリから命令キャッシュへの命令語の転
送におけるビット遷移が低減される。
【0171】特に、命令スケジューリング時に、クラス
タリング(命令列のクラスタ分割)が行われるクラスタ
構成VLIWにおいては、クラスタリングにより並列実
行される命令のオペランドの関係を認識し、既割当の他
クラスタのレジスタ番号を参照して、ビット遷移の少な
いレジスタ番号の選択を行うので、VLIW命令を構成
する個別命令に関し、レジスタ指定ビット表現の類似性
の向上がなされ、例えばキャッシュミス発生時のキャッ
シュライン中のビット遷移の低減など、メインメモリリ
ード時におけるビット遷移の低減が可能となり、ビット
遷移に伴う電力消費を抑え、オブジェクトプログラムの
低消費電力化に寄与できる。
【0172】尚、本発明は、各図を用いて説明した例に
限定されるものではなく、その要旨を逸脱しない範囲に
おいて種々変更可能である。例えば、本例では、クラス
タ構成VLIWプロセッサをターゲットとするコンパイ
ラを例として説明したが、他のプロセッサをターゲット
とするコンパイラにも適用可能である。
【0173】また、本例では、光ディスクを記録媒体と
して用いているが、FD(FlexibleDisk)等を記録媒体
として用いることでも良い。また、プログラムのインス
トールに関しても、通信装置を介してネットワーク経由
でプログラムをダウンロードしてインストールすること
でも良い。
【0174】
【発明の効果】本発明によれば、コンパイル時、ビット
遷移を少なくするよう考慮したレジスタ割当を行うこと
ができる。このレジスタ指定のビット遷移は、例えば命
令キャッシュミス時の消費電力に影響を与えるので、こ
のビット遷移を少なくすることにより、オブジェクトプ
ログラム実行時の低消費電力化が可能となる。特にクラ
スタ構成アーキテクチャをターゲットとするコンパイラ
においては、命令のクラスタ配置の情報を利用した命令
キャッシュミス時等における消費電力低減化が可能なオ
ブジェクトプログラムを生成できる。
【図面の簡単な説明】
【図1】本発明に係わるコンパイラの構成とコンパイラ
が動作する計算機システムの構成例を示すブロック図で
ある。
【図2】図1におけるコンパイラの本発明に係わるコン
パイル方法の処理手順例を示すフローチャートである。
【図3】図1におけるレジスタ割当処理機能の本発明に
係わる処理動作例を示すフローチャートである。
【図4】図1におけるコンパイラの詳細構成例を示すブ
ロック図である。
【図5】クラスタ構成VLIWプロセッサにおける命令
語の構成例を示す説明図である。
【図6】図5における命令列のメモリ内での命令の配置
構成例を示す説明図である。
【図7】図6における4命令がメモリからキャッシュに
伝送される際のビット遷移を例示する説明図である。
【図8】図4における命令スケジューリング前中間語の
構成例を示す説明図である。
【図9】図4における命令スケジューリング後中間語の
構成例を示す説明図である。
【図10】図4におけるレジスタ割当後中間語の構成例
を示す説明図である。
【図11】図1における命令配置テーブルの構成例を示
す説明図である。
【図12】図4における変数テーブルの構成例を示す説
明図である。
【図13】図4における命令ノードテーブルの構成例を
示す説明図である。
【図14】図4におけるビット遷移変数テーブルの構成
例を示す説明図である。
【図15】図4におけるレジスタ割当テーブルの構成例
を示す説明図である。
【図16】図1および図4における命令スケジューリン
グ処理機能の処理動作例を示すフローチャートである。
【図17】図1におけるレジスタ割当処理機能を構成す
る図4に示す変数情報登録処理部の処理動作例を示すフ
ローチャートである。
【図18】図1におけるレジスタ割当処理機能を構成す
る図4に示すビット遷移変数登録処理部の処理動作例を
示すフローチャートである。
【図19】図1におけるレジスタ割当処理機能を構成す
る図4に示すビット遷移変数割当処理部の処理動作例を
示すフローチャートである。
【図20】図1におけるレジスタ割当処理機能を構成す
る図4に示す一般レジスタ割当処理部の処理動作例を示
すフローチャートである。
【図21】図1のコンパイラによるコンパイル結果での
ビット遷移例を示す説明図である。
【図22】従来技術におけるレジスタ割当処理手順例を
示すフローチャートである。
【図23】図22におけるレジスタ割当処理で生成され
るレジスタ割当テーブルの構成例を示す説明図である。
【図24】図22におけるレジスタ割当処理で生成され
る中間語の構成例を示す説明図である。
【図25】図24における中間語のビット遷移例を示す
説明図である。
【符号の説明】
1:CPU、2:表示装置、3:入力装置、4:主記憶
装置、5:外部記憶装置、6:記録媒体、7:駆動装
置、8:ソースプログラム、9:オブジェクトプログラ
ム、10:コンパイラ、11:中間語、11a:命令ス
ケジュール前中間語、11b:命令スケジュール後中間
語、11c:レジスト割当後中間語、12:構文解析機
能、13:命令スケジューリング処理機能、14:命令
配置テーブル、14a:命令番号欄、14b:出現行番
号欄、14c:命令ノード欄、14d:配置サイクル
欄、14e:配置クラスタ欄、14f,14g:エント
リ、15:レジスタ割当処理機能、15a:変数情報登
録処理部、15b:ビット遷移変数登録処理部、15
c:ビット遷移変数割当処理部、15d:一般レジスタ
割当処理部、16:レジスタ割当情報テーブル、16
a:変数テーブル、16a1:変数番号欄、16a2:
変数名称欄、16a3:配置クラスタ欄、16a4:出
現範囲欄、16a5,16a6:エントリ、16b:命
令ノードテーブル、16b1:命令番号欄、16b2:
出現行番号欄、16b3:配置サイクル欄、16b4:
配置クラスタ欄、16b5:オペランド変数(1)欄、
16b6:オペランド変数(2)欄、16b7:オペラ
ンド変数(3)欄、16b8:ビット遷移元命令ノード
欄、16b9,16b10:エントリ、16c:ビット
遷移変数テーブル、16c1:変数番号欄、16c2:
変数名称欄、16c3:配置クラスタ欄、16c4:出
現範囲欄、16c5:ビット遷移対象変数欄、16c
6,16c7:エントリ、16d:レジスタ割当テーブ
ル、16d1:変数番号欄、16d2:変数名称欄、1
6d3:配置クラスタ欄、16d4:出現範囲欄、16
d5:ビット遷移対象変数、16d6:割当レジスタ、
16d7,16d8:エントリ、17:コード生成機
能、2301:エントリ。

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 予め定められたターゲットアーキテクチ
    ャの命令配置制約に基づき、プログラムを構成する命令
    群を配置する命令スケジューリング処理手段と、該命令
    スケジューリング処理手段が配置した命令列に対するレ
    ジスタ割当を行うレジスタ割当処理手段とを具備するコ
    ンパイラであって、上記レジスタ割当処理手段は、上記
    命令スケジューリング処理手段が配置した命令列に割り
    当てるレジスタ番号を、メインメモリリード時における
    ビット遷移が少なくなるよう割り当てる手段を有するこ
    とを特徴とするコンパイラ。
  2. 【請求項2】 請求項1に記載のコンパイラであって、
    上記ターゲットアーキテクチャは、相互に通信可能な独
    立した演算手段と記憶手段を備える処理構成単位である
    クラスタを有するクラスタ構成アーキテクチャからな
    り、上記命令スケジューリング処理手段は、命令を上記
    クラスタに配分するクラスタリング処理を行う手段を有
    し、上記レジスタ割当処理手段は、上記命令スケジュー
    リング処理手段によりクラスタリング処理された命令列
    に対して、上記ビット遷移を低減させるレジスタ番号の
    割当を行う手段を有することを特徴とするコンパイラ。
  3. 【請求項3】 請求項2に記載のコンパイラであって、
    上記レジスタ割当処理手段は、上記命令スケジューリン
    グ処理手段により配置された命令から、上記レジスタ番
    号を割り当てる変数を抽出し、抽出した各変数の識別情
    報を、各変数のクラスタ識別情報と配置識別情報とを対
    応付けて登録する手段を有し、登録したクラスタ識別情
    報と配置識別情報とに基づき、各変数に割り当てるレジ
    スタ番号を特定することを特徴とするコンパイラ。
  4. 【請求項4】 請求項2、もしくは、請求項3のいずれ
    かに記載のコンパイラであって、上記レジスタ割当処理
    手段は、異なるクラスタに配置されて同一サイクルに実
    行される各命令列のそれぞれに割り当てるレジスタ番号
    を類似させる手段を有することを特徴とするコンパイ
    ラ。
  5. 【請求項5】 請求項2から請求項4のいずれかに記載
    のコンパイラであって、上記レジスタ割当処理手段は、
    それぞれ異なるクラスタに配置されて同一サイクルに実
    行される各命令列に割り当てるレジスタ番号を一致させ
    る手段を有することを特徴とするコンパイラ。
  6. 【請求項6】 予め定められたターゲットアーキテクチ
    ャの命令配置制約に基づき、プログラムを構成する命令
    群を配置する命令スケジューリング処理ステップと、該
    命令スケジューリング処理ステップで配置した命令列に
    対するレジスタの割当を行うレジスタ割当処理ステップ
    とを具備するコンパイラのコンパイル方法であって、上
    記レジスタ割当処理ステップでは、上記命令スケジュー
    リング処理手順で配置した命令列のメインメモリリード
    時におけるビット遷移が少なくなるように、レジスタ割
    当を行うことを特徴とするコンパイル方法。
  7. 【請求項7】 請求項6に記載のコンパイル方法であっ
    て、上記ターゲットアーキテクチャは、相互に通信可能
    な独立した演算手段と記憶手段を備える処理構成単位で
    あるクラスタを有するクラスタ構成アーキテクチャから
    なり、上記命令スケジューリング処理ステップでは、命
    令を上記クラスタに配分するクラスタリング処理を行
    い、上記レジスタ割当処理ステップでは、上記命令スケ
    ジューリング処理ステップでクラスタリング処理された
    命令列に対して、上記ビット遷移を低減させるレジスタ
    割当を行うことを特徴とするコンパイル方法。
  8. 【請求項8】 請求項7に記載のコンパイル方法であっ
    て、上記レジスタ割当処理ステップでは、上記命令スケ
    ジューリング処理ステップで配置された命令から、レジ
    スタを割り当てる変数を抽出し、抽出した各変数の識別
    情報を、各変数のクラスタ識別情報と配置識別情報とを
    対応付けて登録し、登録したクラスタ識別情報と配置識
    別情報とに基づき、各変数に割り当てるレジスタを特定
    することを特徴とするコンパイル方法。
  9. 【請求項9】 請求項7、もしくは、請求項8のいずれ
    かに記載のコンパイル方法であって、上記レジスタ割当
    処理ステップでは、異なるクラスタに配置されて同一サ
    イクルに実行される各命令列のそれぞれに割り当てるレ
    ジスタ番号を類似させることで上記ビット遷移を低減さ
    せることを特徴とするコンパイル方法。
  10. 【請求項10】 請求項7から請求項9のいずれかに記
    載のコンパイル方法であって、上記レジスタ割当処理ス
    テップでは、異なるクラスタに配置されて同一サイクル
    に実行される各命令列のそれぞれに割り当てるレジスタ
    番号を一致させることで上記ビット遷移を低減させるこ
    とを特徴とするコンパイル方法。
JP2001236193A 2001-08-03 2001-08-03 コンパイラおよびコンパイル方法 Pending JP2003050704A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001236193A JP2003050704A (ja) 2001-08-03 2001-08-03 コンパイラおよびコンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001236193A JP2003050704A (ja) 2001-08-03 2001-08-03 コンパイラおよびコンパイル方法

Publications (1)

Publication Number Publication Date
JP2003050704A true JP2003050704A (ja) 2003-02-21

Family

ID=19067515

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001236193A Pending JP2003050704A (ja) 2001-08-03 2001-08-03 コンパイラおよびコンパイル方法

Country Status (1)

Country Link
JP (1) JP2003050704A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9535833B2 (en) 2013-11-01 2017-01-03 Samsung Electronics Co., Ltd. Reconfigurable processor and method for optimizing configuration memory

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9535833B2 (en) 2013-11-01 2017-01-03 Samsung Electronics Co., Ltd. Reconfigurable processor and method for optimizing configuration memory
US9697119B2 (en) 2013-11-01 2017-07-04 Samsung Electronics Co., Ltd. Optimizing configuration memory by sequentially mapping the generated configuration data into fields having different sizes by determining regular encoding is not possible
US9727460B2 (en) 2013-11-01 2017-08-08 Samsung Electronics Co., Ltd. Selecting a memory mapping scheme by determining a number of functional units activated in each cycle of a loop based on analyzing parallelism of a loop
US9734058B2 (en) 2013-11-01 2017-08-15 Samsung Electronics Co., Ltd. Optimizing configuration memory by sequentially mapping the generated configuration data by determining regular encoding is possible and functional units are the same in adjacent cycles

Similar Documents

Publication Publication Date Title
Burger et al. Scaling to the end of silicon with EDGE architectures
Maestre et al. A framework for reconfigurable computing: Task scheduling and context management
Lowney et al. The multiflow trace scheduling compiler
US8181168B1 (en) Memory access assignment for parallel processing architectures
US5303357A (en) Loop optimization system
Shang et al. Hardware-software co-synthesis of low power real-time distributed embedded systems with dynamically reconfigurable FPGAs
CN100388201C (zh) 用于多存储器多处理系统的程序代码大小划分系统和方法
US7181730B2 (en) Methods and apparatus for indirect VLIW memory allocation
US8789031B2 (en) Software constructed strands for execution on a multi-core architecture
Shobaki et al. An exact algorithm for the sequential ordering problem and its application to switching energy minimization in compilers
US8701098B2 (en) Leveraging multicore systems when compiling procedures
Shang et al. Slopes: hardware–software cosynthesis of low-power real-time distributed embedded systems with dynamically reconfigurable fpgas
Lakshminarayana et al. Incorporating speculative execution into scheduling of control-flow-intensive designs
JPH07319710A (ja) コンパイル処理方法
Bhagyanath et al. Buffer allocation for exposed datapath architectures
JP3311381B2 (ja) コンパイラにおける命令スケジューリング処理方法
JP2003050704A (ja) コンパイラおよびコンパイル方法
Baloukas et al. Mapping embedded applications on MPSoCs: the MNEMEE approach
Cong et al. Architecture and compilation for data bandwidth improvement in configurable embedded processors
Farkas et al. The multicluster architecture: Reducing processor cycle time through partitioning
Tyson Evaluation of a Scalable Decoupled Microprocessor Design
Hurson et al. Cache memories for dataflow systems
Barua Maps: a compiler-managed memory system for software-exposed architectures
Li et al. Memory-Computing Decoupling: A DNN Multitasking Accelerator with Adaptive Data Arrangement
EP1378825B1 (en) A method for executing programs on selectable-instruction-length processors and corresponding processor system