JPH10105412A - 主記憶の効率的アクセスを実現するオブジェクト生成方法 - Google Patents

主記憶の効率的アクセスを実現するオブジェクト生成方法

Info

Publication number
JPH10105412A
JPH10105412A JP8258271A JP25827196A JPH10105412A JP H10105412 A JPH10105412 A JP H10105412A JP 8258271 A JP8258271 A JP 8258271A JP 25827196 A JP25827196 A JP 25827196A JP H10105412 A JPH10105412 A JP H10105412A
Authority
JP
Japan
Prior art keywords
vector
intermediate language
instruction
loop
register
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
JP8258271A
Other languages
English (en)
Inventor
Giichi Tanaka
義一 田中
Yuji Tsushima
雄次 對馬
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 JP8258271A priority Critical patent/JPH10105412A/ja
Publication of JPH10105412A publication Critical patent/JPH10105412A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【課題】 プログラムにおいてループでアクセスするデ
ータ領域がキャッシュ容量を越えた場合に、DRAM、
SDRAMで作られた主記憶を効率的にアクセスするオ
ブジェクトを生成する。 【解決手段】 ループでアクセスするデータ領域がキャ
シュ容量を超え、ベクトル化できるデータ依存関係の場
合には、ベクトル命令と同様の処理を、ベクトルレジス
タを用いて複数のスカラ命令で実現するオブジェクト列
を生成する。 【効果】 ループ内の配列参照を平均的にアクセスする
方法に比べ、少数の配列を集中的にアクセスでき、同一
RASアドレスで複数要素をアクセスする確率が高くな
り、データの効率的アクセスが実現される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、命令レベル並列処
理を行うプログラムでのオブジェクト生成方法に関わ
り、特にプログラムがアクセスするデータが大きく、キ
ャッシュに入りきらない場合のループに好適なオブジェ
クト生成方法に関する。
【0002】
【従来の技術】スーパコンピュータの1つの方向とし
て、スカラプロセッサをノードプロセッサとする並列処
理方式が有望視されている。スカラプロセッサを用いた
並列スーパコンピュータが期待されるのは、半導体技術
の進歩によるクロック周波数の向上、複数の並列実行可
能な演算器を有効に生かすスーパスカラ方式等の命令レ
ベル並列処理の実現により、スカラプロセッサの処理性
能が飛躍的に向上していることがあげられる。
【0003】しかしながら、その高いスカラプロセッサ
処理能力は、キャッシュメモリが有効に働くときのみ達
成される。大規模科学技術計算では、データ領域が大き
くデータの局所性が少ないという性質があるため、デー
タキャッシュが有効に働かないことが多い。その場合、
スカラプロセッサの性能は主記憶アクセスペナルティに
より大きく性能が低下する。中澤、中村、朴「超並列計
算機CP−PACSのアーキテクチャ」情報処理Vo
l.37,No.1,1996、pp.18〜28で
は、この主記憶アクセスペナルティを隠蔽を、主記憶の
多バンク化による主記憶アクセスのパイプライン化、多
数のレジスタ及び、レジスタへのプリロード機能により
実現した。
【0004】
【発明が解決しようとする課題】上記の従来技術のみで
は、将来、スカラプロセッサのCPUの性能が向上した
場合、演算に見合った主記憶バンド幅を確保できなくな
るという問題がある。例えば、周波数が150Mhz,
1サイクルに発行できるロード命令は1、主記憶はDR
AMにより16バンク構成である計算機を考える。ルー
プ内の配列を連続的にアクセスする場合、主記憶の素子
のサイクルタイムが106ns(16/150)以下で
あれば、主記憶によるバンド幅が性能のネックにはなら
ないことになる。現状の素子のサイクル時間が100n
sであれば、ぎりぎりの主記憶バンド幅であるといえ
る。しかし、CPU性能は年率50%〜100%の性能
向上が実現できているのに対し、DRAMの性能向上は
10%以下であることを考慮すると、従来のアプローチ
では限界があることがわかる。
【0005】また、DRAMの性能を改善する方式とし
てページモードというものがある。DRAMをアクセス
するには、アドレスの上位半分を指定するRASアクセ
ス、次にアドレスの下位半分を指定されるCASアクセ
スの2段階からなる。ページモードでは、同一RASア
ドレスに対する参照に対しては、RASアドレスのアク
セスをしないで、CASアドレスのアクセスだけとなる
高速化モードである。また最近、SDRAMという高速
素子があらわれてきた。これは、同一RASアドレスの
データに対しては、1サイクルピッチでデータをアクセ
スできるように改良した素子である。これらの性質を利
用するためには、アドレスの接近したデータは、RAS
アドレスが切り替わらないように近接した時間内に処理
することが必要である。
【0006】ここで、従来のスカラプロセッサによるル
ープ処理で、ループ内にn個の配列の連続アクセス参照
がある場合を考える。1つの配列参照A(I),I=
1,2..に着目したとき、1回の配列参照A(1)の
のち、次のループ繰り返しでA(2)を参照する。A
(1),A(2)は同一RASアドレスのため、効率的
にアクセスできるはずであるが、1回のループ処理の間
に他の配列に関するn−1個のデータアクセスが発生す
るため、RASアドレスが切り替わる可能性が非常に高
い。つまり、従来のループ処理方式ではDRAMのペー
ジモードやSDRAMの性質を生かすことができない問
題がある。
【0007】本発明の目的は、ループでアクセスするデ
ータ領域がキャッシュ容量を超えた場合に、DRAM、
SDRAMで作られた主記憶を効率的にアクセスするオ
ブジェクト生成方法を提供することにある。
【0008】
【課題を解決するための手段】上記の目的は、ループで
アクセスするデータ領域がキャシュ容量を超え、ベクト
ル化できるデータ依存関係の場合には、ベクトル命令と
同様の処理を、特願平8−249594号「ループ処理
の並列実行制御に適したレジスタ構成を有するプロセッ
サ」で発明されている多要素レジスタ(ベクトルレジス
タ)とその制御機構を用いて複数のスカラ命令で実現す
るコードを生成することによって達成される。
【0009】何故なら、ベクトル処理では少数の配列を
集中的にアクセスするため、従来の方法に比べて、同一
RASアドレスで複数要素をアクセスする確率が高くな
るためである。
【0010】
【発明の実施の形態】以下、本発明のコンパイラにおけ
る実施例を図を参照しつつ説明する。
【0011】まづ、本発明の説明の前に、本発明のコン
パイラが前提とする特願平8−249594号で示した
アーキテクチャの命令とレジスタの関係を図11を参照
しつつ簡単に説明する。命令はオペコード150と、オ
ペランドフィールド151からなる。オペランドは、書
き込みオペランド1つと、2つの読み込みオペランドか
らなり、各オペランドはレジスタ種別フラグ152と論
理レジスタ番号153からなる。レジスタ種別フラグ1
52が0の時は、通常のスカラレジスタを表し、レジス
タ種別フラグ152が1の時は、ベクトルレジスタとな
る。
【0012】以下、ベクトルレジスタ指定時の動作を説
明する。論理レジスタ番号ごとに、対応するライトポイ
ンタ群154と、対応するリードポインタ群155を持
つ。命令で指定される論理レジスタ番号と、実際の大容
量物理レジスタファイル170であるベクトルレジスタ
とのマッピングは、書込側レジスタの場合は、指定され
た論理レジスタ番号157に対応するライトポインタに
よって指される要素158をさし、読み込み側レジスタ
の場合は、指定された論理レジスタ番号160に対応す
るリードポインタによって指される要素161を指す。
レジスタの読みだしのあとでは、リードポインタが、及
びレジスタの書き込みの後には、ライトポインタが15
9、162により自動更新され、次にアクセスするとき
には、自動的にとなりの要素のレジスタをアクセスする
ベクトルレジスタ的構成となっている。
【0013】なお、自動更新の際、レジスタファイルの
最後を示すポインタは、169で示すようにレジスタフ
ァイルの最初をさすようにラップアラウンドされる。ま
た、ポインタの初期値設定は、リード・ライトポインタ
の値は同一値とし、即値(またはレジスタ)代入命令で
行う。
【0014】図1にコンパイラ全体の構造を示す。図1
のソースプログラム1が、構文解析2によって中間語に
変換され、これを入力として、データがキャッシュまた
は主記憶にあるかを判定し最適なプログラム変換を行う
最適化部3が、中間語4に変換する。そして、コード生
成部5が、対象マシン向けのオブジェクトコード6に変
換する。本発明は3及び5に係わり、オブジェクトコー
ド6の実行効率を向上させるものである。
【0015】図1の最適化部3のうちデータの効率的ア
クセスのための最適化に関わる部分の構造を図2に示
す。図2に入力するソースプログラム1として、図5の
FORTRANプログラムを例としてあげ説明する。図
5の30、31はループを示し、これらは2重ループを
構成している。このようなプログラムに対して図2は以
下のような処理を行い、中間語4に変換する。
【0016】図2の処理は、ソースプログラム中の最内
側ループを順次処理する。判定10は当該ループにユー
ザがプログラムに記述した主記憶ターゲットディレクテ
ィブが存在するか判定する。主記憶ターゲットディレク
ティブとは、データがキャッシュに存在する確率が少な
いときに、以下のようにユーザがソースプログラム上の
ループの直前に指定するものである。この場合、後で述
べるような、当該ループのベクトル命令への変換処理1
5へ進む。
【0017】*OPTION MEMTARGET DO 31 I=1,L 図5のソースプログラムでは、DO31にこのような指
定がないので、対象ループのアクセスデータ量算出処理
11へ進む。処理11は、図5のソースプログラムに対
して、内側ループから順にループ内でアクセスするデー
タ量を算出する。すなわち、まず、最内側のループ31
では、配列A32、33とB34がループインデクスI
を添字としているため、ループ長のL個の要素を必要と
し、配列C35は、ループで不変な添字であるのでただ
1つの要素のみをアクセスする。
【0018】従って、全体では、2*L+1個の要素数
となり、倍精度データの場合、(2*L+1)*8バイ
トになる。同様に、ループ30では、新たに、ループイ
ンデクスKが1からMまで変化するため、配列A32、
33はループ31と同様であるが、配列B34はM*L
個、配列C35はM個となる。従って、全体では、(L
+L*M+M)*8バイトのデータ量となる。
【0019】判定12では処理11で求められた対象ル
ープのアクセスデータ容量をもとに、次の3つの処理に
分岐する。
【0020】第1はアクセスデータ量がキャッシュ容量
より小さいことが判明した場合、キャッシュにデータが
存在するとの前提で通常のソフトウェアパイプライン処
理を行うため、中間語の変更はしない。
【0021】第2はアクセスデータ量がキャッシュ容量
より大きいことが判明した場合、当該ループがベクトル
化可能否かの判定13を行い、ベクトル化可能な場合は
当該ループをベクトル中間語への変換処理15を行う。
ベクトル化できない場合は、通常のソフトウェアパイプ
ライン処理を行うため、中間語の変更はしない。ベクト
ル化否かの判定13は、ベクトル処理的データ処理がデ
ータ依存関係から可能かどうかをチェックするもので、
公知である田中・岩沢「ベクトル計算機のためのコンパ
イル技術」情報処理,Vol.31,No.6,pp.
736−743、1990などに詳しく書かれている。
【0022】第3はアクセスデータ量とキャッシュ容量
の関係が不明な場合である。図5のプログラムの場合、
アクセスデータ量は、(L+L*M+M)*8バイトで
あるが、L,M等が変数であるため、コンパイル時には
その大きさが不明であるため、この場合に該当する。こ
の時、当該ループがベクトル化可能否かの判定14を行
い、ベクトル化可能な場合は、16に示すような中間語
を生成する。すなわち、ループ31を、アクセスデータ
量がキャッシュ容量より小さい場合の条件36が成立す
る場合は、キャッシュにデータが存在するとの前提で通
常のソフトウェアパイプライン処理を行うため、もとも
とのループの処理を実行し、アクセスデータ量がキャッ
シュ容量より大きい場合は、文37〜文42に示すよう
なベクトル中間語へ変換する。
【0023】ここでVLENG37は、ベクトル処理を
行う処理長を設定するベクトル中間語、VLD VTE
MP1,B(1:L,K)38はベクトルデータB
(I,K)I=1,2,...,Lをベクトルレジスタ
VTEMP1にロードするベクトル中間語、VEMD
VTEMP2,VTEMP1,C(K,J)39はベク
トルレジスタVTEMP1とスカラデータC(K,J)
をベクトル乗算して、結果をベクトルレジスタVTEM
P2に格納するベクトル中間語、VLD VTEMP
3,A(1:L,J)40はベクトルデータA(I,
J)I=1,2,...,LをベクトルレジスタVTE
MP3にロードするベクトル中間語、VEADVTEM
P4,VTEMP2,VTEMP3 41はベクトルレ
ジスタVTEMP2とベクトルレジスタVTEMP3を
ベクトル加算して、結果をベクトルレジスタVTEMP
4に格納するベクトル中間語、そしてVSTD VTE
MP4,A(1:L,J)42はベクトルレジスタVT
EMP4上のデータを、データ領域A(I,J)I=
1,2,...,Lに格納するベクトル中間語である。
【0024】次に図1のコード生成部3のうち本発明に
関するベクトル処理的コード生成方法を図3、図4に示
す。図3に、図5のベクトル命令37〜42が入力され
た場合の動作を説明する。これらのベクトル命令は、ま
ず、命令並べ替え処理20によってハードウェアに最適
な順序で実行できるように図6のベクトル命令37〜4
2のように並べ替える(ベクトル命令39、40が交換
されている)。命令の並べ替えの方法は、公知の文献マ
イク・ジョンソン「スーパースカラプロセッサ」日経B
P出版センター1994,pp.190ー193に書か
れているリストスケジューリング法を適用すればよい。
なお、ここではメモリ演算ユニットが2個、浮動小数点
演算ユニットが2個、同時実行可能であると仮定してい
る。
【0025】判定21は、ループ長が変数か定数かを判
定する。中間語37よりループ長がLで変数のため、処
理22に進む。処理22はレジスタ構成の選択を行う。
仮にレジスタが512要素であった場合、256要素の
ベクトルレジスタ2個か、128要素のベクトルレジス
タ4組か、64要素のベクトルレジスタ8組か、32要
素のベクトルレジスタ16組かなどを選択する。この
際、後で述べるようにレジスタの要素長をロードレイテ
ンシと同程度のものを選ぶことが重要である。この結
果、ロードレイテンシが50の場合、ベクトル命令38
〜42に対しては、必要なレジスタ数が4であることか
ら、64要素のベクトルレジスタ8組のレジスタ構成を
選択することになる。
【0026】もし、判定21により、ループ長が下記の
例のように定数の場合は、処理24でレジスタ容量が許
す限りレジスタ長を選択する。下記の例では、必要なレ
ジスタが4であった場合、128要素のベクトルレジス
タ4組の構成を選択する。
【0027】DO 31 I=1,1000 処理23は選択したレジスタの要素長に基づくストリッ
プマイニング処理を行う。図6のベクトル中間語37〜
42に対しては、レジスタの要素長を64としたことか
ら、図6の50〜68のようにベクトル処理長が64以
下になるようにプログラムを変換する。これにより2つ
のベクトル中間語列が生成される。すなわち、ベクトル
長がレジスタ長のベクトル中間語列52〜60と、ベク
トル長が端数のベクトル命令列61〜68である。図6
のベクトル命令列の場合、前者のベクトル命令列はルー
プ長64、後者のベクトル中間語列はループ長64未満
である。もともとの、ループ長が変数であっても、前者
のループ長は定数であることに注意を要する。また、も
ともとのループ長が定数の場合、後者のループのベクト
ル長も定数になることも明らかである。
【0028】図6のベクトル長がレジスタ長のベクトル
中間語列55〜60は、ベクトル長が定数なので、ベク
トル中間語に対応するベクトル命令のシミュレーション
によって実行状況を推定する。ベクトル中間語列56〜
60に対応するベクトル命令は、ハードウェアが与えら
れれば、実行状況をシミュレーションすることが可能で
あることは明らかである。ロードストア命令が同時実行
可能な演算器が2個、同時実行可能な浮動小数点演算器
が2個あるなら、その実行の様子は、図7のようにな
る。ここでロードレイテンシを50、演算レイテンシを
3と仮定している。すなわち、ロード命令の結果を使う
命令は50サイクル遅れて実行が開始でき、演算命令の
結果を使う命令は3サイクル遅れて実行を開始すること
ができる。
【0029】処理27では、同時に実行しているベクト
ル命令の組み合わせがかわる時間を求める。図7の例で
は、黒丸の点がその時間であり、区間a、b,c,d,
e,fの6つに分けられる。
【0030】処理28では、処理27でもとめた変化点
をもとに、変化点の間の区間ごとにベクトル実行のスカ
ラ処理によるコードの実現のためのプログラム変換を行
う。図8に変換後のコードを示す。MSPTR130〜
133は、各4つのベクトルレジスタQ1,Q2,Q
3、Q4の第0要素からの初期オフセットを示してお
り、各レジスタとも64要素として使っていることを示
している。
【0031】区間aは2つのベクトルロード命令が同時
に実行する区間で、スカラ中間語LDU136,137
を50回実行する中間語を生成することで同一の処理を
実現できる。ループ処理はスカラ中間語134、13
5、138でループが実現できる。ここで、スカラ中間
語134は、カウントレジスタCTRに処理ループ回数
を設定するものである。スカラ中間語138は、CTR
の内容が0以上であれば、ラベルlabel1に分岐
し、CTRの内容を1減じるものである。スカラ中間語
LDU136,137は通常のアドレス更新付ロード命
令に対応する中間語である。処理134〜138を実行
すると、レジスタを参照するとポインタが1つ進む機能
により、ベクトルレジスタの第0要素から第49要素
に、B(I1、K),B(I1+1、K),.,B(I
1+49,K)のデータが、ベクトルレジスタの第12
8要素から第177要素に、A(I1、J),A(I1
+1、J),.,A(I1+49,J)のデータが格納
される。
【0032】区間bは2つのベクトルロード命令と1つ
のベクトル乗算命令が実行する区間で、スカラ中間語L
DU141,142、スカラ中間語FMUL143を3
回実行する中間語を生成することで同一の処理を実現で
きる。ここで、FMULはスカラ乗算命令に対応する中
間語である。この結果、ベクトルレジスタの第50要素
から第52要素に、B(I1+50、K),B(I1+
51、K),B(I1+52,K)のデータが、ベクト
ルレジスタの第178要素から第180要素に、A(I
1+50、J),A(I1+51、J),A(I1+5
2,J)のデータが格納され、ベクトルレジスタの第6
4要素から第66要素に、べクトルレジスタの第0要素
から第2要素の内容とC(K,J)を乗算した結果が格
納される。
【0033】区間cは2つのベクトルロード命令、1つ
のベクトル乗算命令と1つのベクトル加算命令が実行す
る区間で、スカラ中間語LDU147,148、スカラ
中間語FMUL149、スカラ中間語FADD150を
11回実行する中間語を生成することで同一の処理を実
現できる。ここで、FADDはスカラ加算命令に対応す
る中間語である。この結果、ベクトルレジスタの第53
要素から第63要素に、B(I1+53、K),B(I
1+54、K),..,B(I1+63,K)のデータ
が、ベクトルレジスタの第181要素から第191要素
に、A(I1+53、J),A(I1+54、
J),..,A(I1+63,J)のデータが格納さ
れ、ベクトルレジスタの第67要素から第77要素に、
べクトルレジスタの第3要素から第13要素の内容とC
(K,J)を乗算した結果が格納され、ベクトルレジス
タの第192要素から第202要素に、べクトルレジス
タの第0要素から第10要素の内容とべクトルレジスタ
の第128要素から第138要素の内容を乗算した結果
が格納される。
【0034】区間dは1つのベクトル乗算命令とベクト
ル加算命令とベクトルストア命令が実行する区間で、ス
カラ中間語FMUL154、スカラ中間語FADD15
5、スカラ中間語SDU156を50回実行する中間語
を生成することで同一の処理を実現できる。ここで、S
DUは通常のアドレス更新付スカラストア命令に対応す
る中間語である。この結果、ベクトルレジスタの第78
要素から第127要素に、べクトルレジスタの第14要
素から第63要素の内容とC(K,J)を乗算した結果
が格納され、ベクトルレジスタの第203要素から第2
52要素に、べクトルレジスタの第11要素から第60
要素の内容とべクトルレジスタの第139要素から第1
88要素の内容を乗算した結果が格納、ベクトルレジス
タの第192要素から第241要素の値が、データ域A
(I1,J),A(I1+1,J),..,A(I1+
49,J)に書き込まれる。
【0035】区間eは1つのベクトル加算命令とベクト
ルストア命令が実行する区間で、スカラ中間語FADD
160、スカラ中間語SDU161を3回実行する中間
語を生成することで同一の処理を実現できる。この結
果、ベクトルレジスタの第253要素から第255要素
に、べクトルレジスタの第61要素から第63要素の内
容とべクトルレジスタの第189要素から第191要素
の内容を乗算した結果が格納、ベクトルレジスタの第2
42要素から第244要素の値が、データ域A(I1+
50,J),A(I1+51,J),A(I+52,
J)に書き込まれる。
【0036】区間fは1つベクトルストア命令が実行す
る区間で、スカラ中間語SDU165を11回実行する
中間語を生成することで同一の処理を実現できる。この
結果、ベクトルレジスタの第245要素から第255要
素の値が、データ域A(I1+53,J),A(I1+
54,J),..,A(I1+63,J)に書き込まれ
る。
【0037】次に、図6のベクトル長が端数のベクトル
中間語列64〜68は、ベクトル長が変数なので、処理
26の対応するベクトル命令のチェインスロットへの配
置を行ってベクトル命令の実行をシミュレーションす
る。チェインスロットとは、図9に示すように、並列実
行可能なベクトル命令を集めてグループ化したものであ
る。ロードストア命令が同時実行可能な演算器が2個、
同時実行可能な浮動小数点演算器が2個あるなら、4個
のスロット110〜113が時間軸方向に命令が埋まる
まで複数個、時間軸方向に並んでいる。対応するベクト
ル命令は26に示した条件でチェインスロットに配置さ
れる。ベクトル中間語列64〜68の場合、図9のよう
に配置される。時間スロット1(114)は、並列実行
可能なロード命令のみしかないため、当該チェインスロ
ットの実行時間はI2−I1+1サイクルであり、時間
スロット2(115)の実行時間は3つの命令がフロー
依存関係にあるため、演算レイテンシを3とした場合、
I2−I1+1+2*3サイクルとなる。
【0038】処理27では、各時間スロット毎に、同時
に実行しているベクトル命令の組み合わせがかわる時間
を求める。図6のベクトル中間語列64〜68では、黒
丸の点がその時間であり、区間a、b,c,d,e,f
の6つに分けられる。
【0039】処理28では、処理27でもとめた変化点
をもとに、変化点の間の区間ごとにベクトル実行のスカ
ラ処理によるコード生成のためのプログラム変換を行
う。ベクトル中間語列56〜60での場合と同様にこの
変換を実施すると、その結果、図10のスカラ中間語に
よるベクトル処理が実現できる。
【0040】ここで、ベクトル長が変数の場合、ベクト
ル命令の並列実行状況をチェインスロットという概念で
推定する事の理由、及び、ベクトルロード命令とフロー
依存の関係にあるベクトル命令を別のチェインスロット
に配置する理由を述べる。ベクトル長が変数の場合、ベ
クトル中間語列64〜68に対する最適な並列実行状況
は、図9に推定するものとは異なっている。仮にループ
長が64の場合で、ロードレイテンシが50サイクル、
演算レイテンシが3の場合、以前に説明したように図7
のように実行するのが最適である。しかし、この場合
に、最適な実行状況を推定すると、並列実行状況の組み
合わせの数は、命令数、命令実行レイテンシ、命令出現
パターンとループ長とに依存して多項式的に多くなり実
質的にコード生成は不可能である。このため、ループ長
が大きいときに、主に重なっている命令をグループ化し
たチェインスロットという概念を用いて組み合わせの数
を減らす。
【0041】すなわち、一般に演算レイテンシは小さ
く、主記憶レイテンシは大きいので、演算命令とその結
果を使用する命令は同一チェインスロットかそれ以後
に、ロード命令とそれを使用する演算命令は別チェイン
スロットに配置することで実現する。さらに、レジスタ
構成の選択の際に、主記憶レイテンシに近いものを選ぶ
事により、ロード命令とそれを使う演算命令の実行を最
適に近づけることができる。ループ長が大きく、何回か
のストリップマイニングを行うのであれば、最終回のス
トリップマイニング以外は理想的になる。
【0042】なお、説明の簡単化のために、図10のコ
ードは、正確にはループ長が6以下の場合には正しく動
くコードとなっていない。例えば、実際のループ長が1
の時には、VEMD58,VEAD59,VSTD60
のベクトル命令は同時には実行されず、区間の数は3と
なる。なお、正しく動作するコードとするためには、区
間b,c,e,fのコード部分にループ長による処理を
スキップする分岐をいれる必要がある。
【0043】
【発明の効果】本発明のオブジェクト生成方法により、
ループでアクセスするデータ領域がキャシュ容量を超
え、ベクトル化できるデータ依存関係の場合には、ベク
トル命令と同様の処理を、ベクトルレジスタを用いて複
数のスカラ命令で実現するコードが生成できる。このオ
ブジェクト列を実行すると、従来のループ内の配列参照
を平均的にアクセスする方法に比べて、少数の配列を集
中的にアクセスするため、同一RASアドレスで複数要
素をアクセスする確率が高くなり、データの効率的アク
セスが実現される。図12にその効果の例を示す。この
図は、LU分解ソースプログラムのカーネルループに対
する生成コードの、実行効率を示している。丸印は、デ
ータがキャッシュにあるとして生成したコードによる性
能、黒丸印は、データが主記憶にあるとして、従来のソ
フトウェアパイプラインによるスケジューリングによる
性能、三角印がデータが主記憶にあるとしてベクトル処
理と同様の処理をスカラ命令で実現したコードによる性
能を示す。キャッシュターゲットのコードは配列が小さ
くキャッシュに存在する間は、高い実行性能を示す。主
記憶レイテンシを考慮してスケジューリングした従来コ
ードでは、SDRAMのRASミスが発生して全般に性
能が高くない。データが主記憶にあるとしてベクトル処
理と同様の処理をスカラ命令で実現したコードでは、R
ASミスを少なくすることができるため、配列の大きな
領域で効率的な実行となる。
【0044】従って、本発明で記述した、アクセスデー
タ領域がキャシュ容量以下の場合は、従来のキャッシュ
をターゲットとしたループスケジューリングコード、ア
クセスデータ領域がキャシュ容量を越えた場合は、ベク
トル処理的アクセスをスカラ命令で実現するコードを生
成することにより、図中の黒太線のように常に効率的な
実行性能が実現できる。
【図面の簡単な説明】
【図1】コンパイラ全体の構成図。
【図2】コンパイラにおけるデータの効率的アクセスに
関する最適化部。
【図3】コンパイラにおけるベクトル的処理コード生成
方法1。
【図4】コンパイラにおけるベクトル的処理コード生成
方法2。
【図5】ソースプログラムとそれに対するデータの効率
的アクセスに関する変換後の例。
【図6】ベクトル中間語に対してストリップマイニング
を適用した例。
【図7】ベクトル処理長が定数の場合のベクトル命令の
シミュレーションの結果の説明図。
【図8】ベクトル処理長が定数の場合のスカラ命令列に
よるベクトル処理実現のコード列例。
【図9】ベクトル処理長が変数の場合のベクトル命令の
シミュレーションの結果の説明図。
【図10】ベクトル処理長が変数の場合のスカラ命令列
によるベクトル処理実現のコード列例。
【図11】前提とするアーキテクチャの命令とレジスタ
構成の説明図。
【図12】効果の説明図。
【符号の説明】
1 ソースプログラム 2 構文解析部 3 最適化部 4 中間語 5 コード生成部 6 オブジェクトコード 150 オペコード 170 物理レジスタファイル。

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】ソースプログラムをオブジェクトプログラ
    ムにコンパイルする方法にて、前記ソースプログラムの
    ループ部分に対して、該ループ部分のアクセスするデー
    タ領域がキャッシュ容量を超え、かつベクトル化できる
    データ依存関係の場合には、ベクトル処理と同一の演算
    順序をスカラ命令で実現することを特徴とするオブジェ
    クト生成方法。
  2. 【請求項2】ソースプログラムをオブジェクトプログラ
    ムにコンパイルする方法にて、前記ソースプログラムの
    ループ部分に対して、該ループ部分のアクセスするデー
    タ領域がキャッシュ容量を超えるか判断できなく、かつ
    該ループ部がベクトル化できるデータ依存関係の場合
    に、該データアクセス領域の大きさを計算するコード
    と、該データアクセス領域の大きさとキャッシュ容量と
    比べ、キャッシュ容量より大きい時は、ベクトル処理と
    同一の演算順序をスカラ命令で実現するコードと、キャ
    ッシュ容量より小さい時は該ループが指定するのと同一
    の演算順序のスカラ命令のコードを生成することを特徴
    とするオブジェクト生成方法。
  3. 【請求項3】ソースプログラムを読み込み、構文解析を
    して中間語に変換し、該中間語に最適化を施した後、コ
    ードを生成するコンパイラにて、該最適化部で、該ソー
    スプログラムのループ部分に対して、該ループ部分のア
    クセスするデータ領域がキャッシュ容量を超え、かつベ
    クトル化できるデータ依存関係の場合には、該ループ部
    の中間語のベクトル化を行いベクトル中間語に変換し、
    該コード生成部において、該ベクトル中間語の実行と同
    一の演算順序でスカラ中間語に変換する事を特徴とする
    オブジェクト生成方法。
  4. 【請求項4】ソースプログラムを読み込み、構文解析を
    して中間語に変換し、該中間語に最適化を施した後、コ
    ードを生成するコンパイラにて、該最適化部で、該ソー
    スプログラムのループ部分に対して、該ループ部分のア
    クセスするデータ領域がキャッシュ容量を超えるか判断
    できなく、かつ該ループ部がベクトル化できるデータ依
    存関係の場合に、該データアクセス領域の大きさを計算
    する中間語と、該データ領域の大きさとキャッシュ容量
    と比べる中間語と、キャッシュ容量より大きい時は、該
    ループ部の中間語のベクトル化を行ったベクトル中間語
    を生成し、キャッシュ容量より小さい時は該ループ部の
    中間語を実行する中間語の変換を行い、該コード生成部
    において、該ベクトル中間語の実行と同一の演算順序で
    スカラ中間語に変換する事を特徴とするオブジェクト生
    成方法。
  5. 【請求項5】請求項3のオブジェクト生成方法にて、該
    ベクトル中間語の該スカラ中間語への変換の際に、該ベ
    クトル中間語列に対応するベクトル命令列の実行状況の
    シミュレーションを行い、並列実行中のベクトル命令列
    の組み合わせが変化しない区間を検出し、該同時実行ベ
    クトル命令に対応する複数のスカラ中間語を、該区間の
    サイクル数だけループ処理で繰り返し実行する中間語に
    変換する事を特徴とするオブジェクト生成方法。
  6. 【請求項6】請求項4のオブジェクト生成方法にて、該
    ベクトル中間語の該スカラ中間語への変換の際に、該ベ
    クトル中間語列に対応するベクトル命令列の実行状況の
    シミュレーションを行い、並列実行中のベクトル命令列
    の組み合わせが変化しない区間を検出し、該同時実行ベ
    クトル命令に対応する複数のスカラ中間語を、該区間の
    サイクル数だけループ処理で繰り返し実行する中間語に
    変換する事を特徴とするオブジェクト生成方法。
  7. 【請求項7】請求項5のオブジェクト生成方法にて、該
    ベクトル中間語列に対応するベクトル命令列の実行状況
    のシミュレーションの際、ベクトル処理数が変数の場
    合、該ベクトル中間語列に対応するベクトル命令列の中
    で、ベクトルロード命令と、該ベクトルロード命令のベ
    クトルレジスタに格納した結果を使用するベクトル命令
    を、同時実行させないようにスケジューリングする事を
    特徴とするオブジェクト生成方法。
  8. 【請求項8】請求項6のオブジェクト生成方法にて、該
    ベクトル中間語列に対応するベクトル命令列の実行状況
    のシミュレーションの際、ベクトル処理数が変数の場
    合、該ベクトル中間語列に対応するベクトル命令列の中
    で、ベクトルロード命令と、該ベクトルロード命令のベ
    クトルレジスタに格納した結果を使用するベクトル命令
    を、同時実行させないようにスケジューリングする事を
    特徴とするオブジェクト生成方法。
  9. 【請求項9】請求項3のオブジェクト生成方法にて、該
    ベクトル中間語を該スカラ中間語に変換する際に、ベク
    トル処理長が変数の場合は、ベクトルレジスタの構成で
    あるレジスタ数とレジスタ長の選択において、レジスタ
    長をロードベクトル命令のレイテンシに近い大きさに設
    定することを特徴とするオブジェクト生成方法。
  10. 【請求項10】請求項3のオブジェクト生成方法にて、
    該ベクトル中間語を該スカラ中間語に変換する際に、ベ
    クトル処理長が変数の場合は、ベクトルレジスタの構成
    であるレジスタ数とレジスタ長の選択において、レジス
    タ長をロードベクトル命令のレイテンシに近い大きさに
    設定することを特徴とするオブジェクト生成方法。
JP8258271A 1996-09-30 1996-09-30 主記憶の効率的アクセスを実現するオブジェクト生成方法 Pending JPH10105412A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8258271A JPH10105412A (ja) 1996-09-30 1996-09-30 主記憶の効率的アクセスを実現するオブジェクト生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8258271A JPH10105412A (ja) 1996-09-30 1996-09-30 主記憶の効率的アクセスを実現するオブジェクト生成方法

Publications (1)

Publication Number Publication Date
JPH10105412A true JPH10105412A (ja) 1998-04-24

Family

ID=17317932

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8258271A Pending JPH10105412A (ja) 1996-09-30 1996-09-30 主記憶の効率的アクセスを実現するオブジェクト生成方法

Country Status (1)

Country Link
JP (1) JPH10105412A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111584011A (zh) * 2020-04-10 2020-08-25 中国科学院计算技术研究所 面向基因比对的细粒度并行负载特征抽取分析方法及***
JP2020140284A (ja) * 2019-02-27 2020-09-03 日本電気株式会社 ベクトル演算処理装置、ベクトル演算処理装置による配列変数初期化方法、及び、ベクトル演算処理装置による配列変数初期化プログラム
CN111651199A (zh) * 2016-04-26 2020-09-11 中科寒武纪科技股份有限公司 一种用于执行向量循环移位运算的装置和方法
CN117234514A (zh) * 2023-11-08 2023-12-15 睿思芯科(深圳)技术有限公司 将标量化程序转换为向量化程序的方法、***及相关设备

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111651199A (zh) * 2016-04-26 2020-09-11 中科寒武纪科技股份有限公司 一种用于执行向量循环移位运算的装置和方法
CN111651199B (zh) * 2016-04-26 2023-11-17 中科寒武纪科技股份有限公司 一种用于执行向量循环移位运算的装置和方法
JP2020140284A (ja) * 2019-02-27 2020-09-03 日本電気株式会社 ベクトル演算処理装置、ベクトル演算処理装置による配列変数初期化方法、及び、ベクトル演算処理装置による配列変数初期化プログラム
CN111584011A (zh) * 2020-04-10 2020-08-25 中国科学院计算技术研究所 面向基因比对的细粒度并行负载特征抽取分析方法及***
CN111584011B (zh) * 2020-04-10 2023-08-29 中国科学院计算技术研究所 面向基因比对的细粒度并行负载特征抽取分析方法及***
CN117234514A (zh) * 2023-11-08 2023-12-15 睿思芯科(深圳)技术有限公司 将标量化程序转换为向量化程序的方法、***及相关设备
CN117234514B (zh) * 2023-11-08 2024-02-23 睿思芯科(深圳)技术有限公司 将标量化程序转换为向量化程序的方法、***及相关设备

Similar Documents

Publication Publication Date Title
US5958048A (en) Architectural support for software pipelining of nested loops
Kozyrakis et al. Scalable, vector processors for embedded systems
Jayasena et al. Stream register files with indexed access
Chang et al. Efficient vectorization of SIMD programs with non-aligned and irregular data access hardware
Huang et al. SIF: Overcoming the limitations of SIMD devices via implicit permutation
Wun et al. Exploiting coarse-grained parallelism to accelerate protein motif finding with a network processor
US5770894A (en) Parallel processing method having arithmetical conditions code based instructions substituted for conventional branches
Jeong et al. Vegeta: Vertically-integrated extensions for sparse/dense gemm tile acceleration on cpus
John et al. Program balance and its impact on high performance RISC architectures
Wang et al. Gpu register packing: Dynamically exploiting narrow-width operands to improve performance
Alachiotis et al. A data locality methodology for matrix–matrix multiplication algorithm
Vander An et al. Instruction buffering exploration for low energy vliws with instruction clusters
JPH10105412A (ja) 主記憶の効率的アクセスを実現するオブジェクト生成方法
Gupta et al. Accelerating CNN inference on long vector architectures via co-design
Vandierendonck et al. Experiences with parallelizing a bio-informatics program on the cell be
Xiao et al. HLS portability from Intel to Xilinx: A case study
Berrached et al. A decoupled access/execute architecture for efficient access of structured data
Ali et al. Empirical auto-tuning code generator for FFT and trigonometric transforms
De Dinechin Computing In-Place FFTs with SIMD Lane Slicing
Ganapathy et al. Designing a coprocessor for recurrent computations
Bi et al. Efficiently Running SpMV on Multi-Core DSPs for Block Sparse Matrix
Nicolau et al. ROPE: a statically scheduled supercomputer architecture
Sykora et al. Reducing instruction issue overheads in Application-Specific Vector Processors
Treibig Efficiency improvements of iterative numerical algorithms on modern architectures
Wei et al. DGEMM Optimization Oriented to ARM SVE Instruction Set Architecture