JPH08328870A - コンパイル処理装置 - Google Patents

コンパイル処理装置

Info

Publication number
JPH08328870A
JPH08328870A JP7132104A JP13210495A JPH08328870A JP H08328870 A JPH08328870 A JP H08328870A JP 7132104 A JP7132104 A JP 7132104A JP 13210495 A JP13210495 A JP 13210495A JP H08328870 A JPH08328870 A JP H08328870A
Authority
JP
Japan
Prior art keywords
memory access
access data
memory
cache
data
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
JP7132104A
Other languages
English (en)
Inventor
Naoji Nakahira
直司 中平
Masakazu Hayashi
正和 林
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP7132104A priority Critical patent/JPH08328870A/ja
Priority to US08/655,384 priority patent/US5930507A/en
Publication of JPH08328870A publication Critical patent/JPH08328870A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【目的】キャッシュメモリを持つ計算機上で動作するプ
ログラムの翻訳を行うコンパイル処理装置に関し,メモ
リアクセスデータのキャッシュミスの削減および連続領
域に対するメモリアクセス回数の削減により,翻訳対象
プログラムの高速化を実現することを目的とする。 【構成】キャッシュメモリ上でのメモリアクセスデータ
を収集し(3),これらの競合関係を解析し(4),競合が生じ
るメモリアクセスデータに対する命令の移動の可否を判
断し(5),移動が可能な場合は命令を移動することにより
(13),キャッシュミスを抑える。また, 連続領域にある
メモリアクセスデータを認識し(6),認識したメモリアク
セスデータのアラインメントを検査し(7),ペアロード/
ペアストアの命令を生成することにより(8),メモリアク
セス回数を減らす。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は,最適化機能を持ったコ
ンパイラのメモリアクセスの最適化効果を促進させるメ
モリアクセスデータの高速化翻訳方式に係り,特にキャ
ッシュメモリ上で競合するデータを翻訳時に解析して競
合を解消し,またメモリアクセスの回数を削減して,翻
訳したプログラムの実行性能を向上させることを可能に
したコンパイル処理装置に関するものである。
【0002】近年のRISCプロセッサでは,スーパス
カラに代表されるプロセッサが主流を占め,1クロック
1命令以上の命令の発行を可能にしている。また,年々
プロセッサに内蔵されるキャッシュメモリも増える傾向
にある。このような特色を持ったRISCプロセッサの
性能を引き出すためには,高性能なコンパイラが必要と
なる。その中においても,近年キャッシュメモリを意識
した最適化手法が注目されている(参考文献:The Cach
e Performance and Optimizations of BlockedAlgorith
ms Monica S.Lam 1991 ASPLOS-IV Proceedings )。
【0003】従来技術の説明に先立ち,本発明に関係す
る用語について説明する。 1)ベクトルロード/ストア 一般のベクトルロード/ストアは,ベクトル長分のデー
タを一括してロード/ストアするが,スカラ演算で一括
してロード/ストアできるのは,4倍精度メモリアクセ
スが可能なアーキテクチャでは16バイトが最大値であ
る。
【0004】2)ダイレクトマップキャッシュメモリ ダイレクトマップキャッシュメモリは,主記憶からキャ
ッシュメモリへの対応が一意に決まる方式のキャッシュ
メモリである。主記憶上のアドレスをキャッシュサイズ
で割った余りがキャッシュメモリ上のアドレスになる。
アドレスの差がキャッシュサイズの値になるデータ群
は,キャッシュメモリ上に同居できなくなり,性能が低
下する。
【0005】3)Nセットアソシエイティブキャッシュ
メモリ ダイレクトマップキャッシュを発展させたキャッシュメ
モリである。簡単にいうと,Nセットのダイレクトキャ
ッシュメモリと言い直すことができる。
【0006】4)64バイトのキャッシュラインサイズ 主記憶とキャッシュメモリとの間のデータのやり取りを
64バイト単位で行う方式である。一つのデータをキャ
ッシュメモリに載せるときに,隣接するデータも一緒に
キャッシュメモリに載せるので,ライン幅を大きくする
とメモリアクセスの回数が減り高速化できる。しかし,
例えば256KBのサイズを持つダイレクトマップキャ
ッシュメモリなら,256KB+32Bのアドレスの差
があるデータは,キャッシュメモリ上で同居できなくな
り,性能低下の原因となるので,むやみに大きくすれば
よいというものではない。
【0007】5)キャッシュメモリのエントリ数 1セットのキャッシュメモリにラインがいくつ含まれて
いるかを,キャッシュのエントリ数という。256KB
のダイレクトマップキャッシュメモリで,64バイトの
ラインサイズなら,キャッシュのエントリ数は4096
となる。
【0008】6)8バイト/16バイトアラインメント メモリアクセスデータが割り当てられている領域が,そ
の領域の実アドレスを8又は16で割ったときに余りが
0になる領域の場合,そのデータは,8バイト又は16
バイトのアラインメントに割り当てられたデータと呼ば
れる。RISCプロセッサでは,このアラインメントが
ずれたアドレス,すなわちその実アドレスを8又は16
で割ったときに余りが0にならない領域のアドレスをア
クセスすると,命令によっては,アラインメントエラー
を起こす場合がある。
【0009】7)ソース情報 コンパイラがプログラムを中間テキストに変換する際,
同時に残すプログラムの情報をソース情報と呼ぶ。ソー
ス情報の最も一般的なものが,配列要素の添字の情報で
ある。一般にメモリアクセスは,ベース,オフセット,
インデックスを用いて表現されるので,例えば配列要素
の添字の情報はハードウェア命令を生成するときには意
味のない情報となる。
【0010】
【従来の技術】今日のコンパイラの最適化技術では,ブ
ロッキングに代表されるように,データをキャッシュメ
モリに保持し続けることにより実行の高速化を図る技術
は存在する。しかし,これら従来の最適化技術は,以下
のような問題点があった。
【0011】1)これらの最適化技術を適用できるケー
スは稀であり,実プログラムにおいて有効に活用できる
とは必ずしも言えなかった。 2)これらの最適化技術が適用できない場合には,頻繁
にキャッシュミスを起こし,性能の低下を招いていた。
【0012】3)メモリアクセスデータの実アドレスに
隙間を入れて,メモリアクセス時にキャッシュメモリ上
の同じラインへの競合を防ぐ技術もあるが,FORTR
ANのCOMMONブロックに代表されるように,言語
仕様の規約として連続領域に隙間を空けることが不可能
な場合がある。このような場合には,キャッシュメモリ
上での競合が起こり性能の低下を招いていた。
【0013】なお,キャッシュミスが起こるデータを検
出し,キャッシュミスを隠蔽するためのパイプラインの
スケジューリング方式として,例えば特開平3−282
734号公報(命令配置最適化コンパイラ)等に開示さ
れているものがあるが,キャッシュミスを解消する方法
については開示されていない。
【0014】また,連続アクセスに対するメモリアクセ
スの削減では,以下のような問題点が存在した。 4)連続領域かどうかの判定を行い,ペアレジスタを用
いて,1回分のメモリアクセスを2回で行う処理自体,
現状のコンパイル処理装置では行われていなかった。
【0015】5)連続アクセスに対するメモリアクセス
の削減を実現するためには,ループを多重に展開して連
続アクセスを増やすか,または連続領域を認識する処理
が必要である。しかし,命令展開時の複雑さやインタフ
ェースの複雑さから,このような最適化は敬遠されてき
た。
【0016】6)FORTRANで頻繁に使用される倍
精度型のデータをレジスタに保持する場合には,32ビ
ットレジスタが必要となる。この場合,倍精度型データ
2つを一度にアクセスするためには,64ビットレジス
タと4倍精度メモリアクセス命令が必要である。現状の
RISCプロセッサの主流は32ビットであり,64ビ
ットのRISCプロセッサへの移行段階の現状では,イ
ンプリメント自体が行われていなかった。
【0017】
【発明が解決しようとする課題】本発明は,上記問題点
の解決を図り,特にキャッシュメモリ上で競合するデー
タを翻訳時に解析して競合を解消し,またメモリアクセ
スの回数を削減して,翻訳したプログラムの実行性能を
向上させることを目的とする。そのため,以下の点に着
目する。
【0018】(1)キャッシュメモリの最適化 キャッシュメモリは,1マシンサイクルでアクセスでき
るメモリであり,主記憶と比較して30倍程度高速にア
クセスできる。キャッシュメモリ上にデータを保持し続
けることができれば常に高速なメモリアクセスが可能で
あるが,限られた容量しかないキャッシュメモリでは,
全てのデータを保持することは不可能である。そのた
め,キャッシュメモリ上で競合が起こった場合には,最
新のデータをキャッシュメモリ上に保持し,古くなった
データはキャッシュメモリから追い出す方式がハードウ
ェアで実現されている。しかし,競合するメモリアクセ
スデータを翻訳時に解析できれば,これらのメモリアク
セスデータのアクセス順序を変更することでキャッシュ
ミスを削減することが可能である。
【0019】(2)メモリアクセスの最適化 RISCプロセッサでは,演算器にデータを供給するメ
モリアクセスが性能上のボトルネックとなるケースが多
く見受けられる。したがって,メモリアクセスはできる
だけ削減することがRISCプロセッサの性能向上につ
ながる。メモリアクセスを削減するためには,コンパイ
ラの最適化でメモリアクセスを削減する方法が一般的で
ある。本発明に述べるメモリアクセスの削減方式は,連
続領域へのメモリアクセスが存在する場合に,連続領域
からデータを一括して取り出し,連続領域へ一括して書
き込むといったベクトル(ペア)ロード/ストアの縮小
版を疑似的に実現するものである。
【0020】なお,上記2点はRISCプロセッサに限
らず,一般の汎用マイクロプロセッサにも適用でき,か
つ高性能化を実現することが可能である。
【0021】
【課題を解決するための手段】図1は,本発明の原理構
成図である。図1において,1はコンパイル処理装置,
2は連続領域生成部,3はメモリアクセスデータ収集
部,4は競合データ解析部,5はメモリアクセスデータ
の重なり解析部,6は連続領域認識部,7はアライメン
トの検査部,8はペアロード・ペアストア生成部,11
はソースプログラム解析部,12は最適化部,13は命
令移動部,14はコード生成部,20はアーキテクチャ
情報を表す。
【0022】コンパイル処理装置1は,ソースプログラ
ムを解析し中間テキストを生成するソースプログラム解
析部11,最適化処理を行う最適化部12,最適化部1
2の結果に基づき命令の並び換えを行う命令移動部1
3,最適化部12および命令移動部13の結果に基づき
コードを生成するコード生成部14からなり,最適化部
12に本発明の主要部である以下の手段を備える。
【0023】連続領域生成部2は,プログラムの翻訳に
おける最適化処理時にループアンローリングにより連続
領域に対するメモリアクセスデータを増やす手段であ
る。メモリアクセスデータ収集部3は,プログラムの翻
訳における最適化処理において,連続領域生成部2によ
り連続領域に対するメモリアクセスデータを増やした後
にメモリアクセスデータを収集する手段である。
【0024】競合データ解析部4は,メモリアクセスデ
ータ収集部3により収集したメモリアクセスデータ間の
キャッシュメモリ上の競合関係を解析する手段である。
メモリアクセスデータの重なり解析部5は,競合データ
解析部4の競合データ解析結果に基づき,キャッシュメ
モリ上で競合が生じるメモリアクセスデータに対する命
令の移動可否を検査する手段である。
【0025】連続領域認識部6は,プログラムの翻訳に
おける最適化処理において連続領域に対するメモリアク
セスデータを認識する手段である。アラインメントの検
査部7は,連続領域認識部6で認識した連続領域に対す
るメモリアクセスデータのアラインメントを検査する手
段である。
【0026】ペアロード・ペアストア生成部8は,アラ
インメントの検査部7のアラインメントの検査結果に基
づき,連続領域に対する複数のメモリアクセスデータを
1つのメモリアクセスデータとしてロードまたはストア
する命令を生成する手段である。
【0027】命令移動部13は,メモリアクセスデータ
の重なり解析部5によるメモリアクセスデータの重なり
解析結果に基づき,キャッシュメモリ上で競合が生じる
メモリアクセスデータに対してキャッシュミスを軽減す
る命令の並び換えを行う手段である。
【0028】図1中,連続領域生成部2,メモリアクセ
スデータ収集部3,競合データ解析部4,メモリアクセ
スデータの重なり解析部5は,本発明の第1の発明であ
るキャッシュミスの削減に係る手段であり,連続領域認
識部6,アラインメントの検査部7,ペアロード・ペア
ストア生成部8は第2の発明である連続領域に対するメ
モリのアクセスの削減に係る手段である。
【0029】1.キャッシュミスを削減する翻訳方式 本発明では,ブロッキングのようにメモリアクセスデー
タを常にキャッシュメモリに保持するのではなく,キャ
ッシュメモリ上での競合は起こるが,一度キャッシュメ
モリに保持した値を使用するまでは,できるだけキャッ
シュメモリ上に保持する方法を考える。以下に第1の発
明であるキャッシュミスを削減する翻訳方式について,
例を挙げて説明する。
【0030】図2(a)はオリジナルソースプログラム
を表す図である。図2(a)に示すFORTRANプロ
グラムのループは,コンパイラにおける最適化処理にお
いて,ループインデックス交換処理によりインデックス
J,Kが交換される。さらに,ループ展開処理により,
最内ループは2重に展開される。これをループアンロー
リングという。図2(b)はインデックス交換と最内ル
ープが2重に展開された(ループアンローリング処理)
後のテキストをソースプログラムの表現形式で表した図
である。
【0031】ここで,配列要素のX(JX,K),X
(JX−1,K),Y(JX−1,K),Y(JX−
1,K)に着目する。配列要素X(JX,K),Y(J
X,K)とX(JX−1,K),Y(JX−1,K)
は,実アドレス上で割り付けられている領域は違うが,
キャッシュメモリ上で,同じラインに格納されるものと
仮定する。
【0032】今,メモリアクセスの順番は, 1) X(JX,K)のロード 2) Y(JX,K)のロード 3) X(JX−1,K)のロード 4) Y(JX−1,K)のロード であるが,キャッシュメモリへデータをロードするとき
は隣接するアドレスのデータも同時に格納される。な
お,この同時に格納されるデータの個数はキャッシュメ
モリのブロック長に依存する。
【0033】今,キャッシュメモリのブロック長を32
バイトとすると,1回のロード命令により配列要素(倍
精度データの場合)の4つをキャッシュメモリに格納す
ることができる。
【0034】上記1)から4)の各配列要素のアクセス
時のキャッシュメモリ内の振舞いを図3に示す。図3
(a)はメモリアクセスデータの変更前のメモリアクセ
スとキャッシュメモリとの関係を示す図,図3(b)は
メモリアクセスデータの並び換えとキャッシュメモリと
の関係を示す図である。ここで重要なことは,キャッシ
ュメモリへのミスヒットを起こさないように各配列要素
を並び換えることである。
【0035】図3(a)に示す配列要素のアクセスの順
序を,図3(b)に示すように変更することでキャッシ
ュメモリ上の競合が抑えられる。すなわち,図3(a)
の変更前のメモリアクセスでは,各配列要素のメモリア
クセス4回は全てキャッシュメモリでミスヒットした
が,図3(b)のようにロード命令を並び換えることに
よってキャッシュメモリでのミスヒットを2回に抑える
ことができる。
【0036】図4は,各配列要素のアクセス順序を並び
換える場合のアセンブラソースを示す図である。図4に
おいて,grxは汎用レジスタ,lddは倍精度ロー
ド,fsubdは倍精度減算,frxは浮動小数点レジ
スタ,stdは倍精度ストア,fmuldは倍精度乗算
を表す。図4では,L1のX(JX,K)のロード命令
の後にL27のX(JX−1,K)のロード命令を移動
し,L6のY(JX,K)のロードの後にL32のY
(JX−1,K)のロード命令を移動する。これによっ
て,図3(b)に示すようにミスヒットが削減されるこ
とになる。
【0037】2.連続領域に対するメモリアクセスを削
減する翻訳方式 第2の発明である連続領域に対するメモリアクセスを削
減する翻訳方式は,単精度型や倍精度型のメモリアクセ
スデータに対して,それぞれ倍精度レジスタ,4倍精度
レジスタへロードする,あるいは倍精度レジスタ,4倍
精度レジスタでストアすることにより,実際のメモリア
クセス回数を減らす処理方式である。
【0038】図5は連続領域に対するメモリアクセスの
プログラム例を示す図である。図5(a)において,配
列は全て単精度とする。従来は,図5(a)に示すよう
なメモリ間転送については,図5(b)に示すように配
列1要素をロードし1要素をストアする方式をとってい
た。これを,次のようにする。
【0039】1)配列2要素をまとめてロードし,1要
素ずつストアする。 2)配列1要素ずつロードし,2要素まとめてストアす
る。 こうすることにより,メモリアクセスの回数を減らすこ
とができる。図6は,連続領域に対するメモリアクセス
を第2の発明の翻訳方式により最適化した例を示す図で
ある。図6(a)は,上記の1)により配列2要素をま
とめてロードし,1配列要素ずつストアした場合の例,
図6(b)は,上記の2)により配列1要素ずつロード
し,2配列要素まとめてストアした場合の例を示す。
【0040】ここで,1)または2)の方式のどちらを
選ぶかは,各配列要素の実アドレス上のメモリアライン
メントに依存する。例えば,図6(a)に示す倍精度レ
ジスタでロードする方式を選択すると先頭のロード命令
でアクセスされる配列要素が8バイトの先頭アラインメ
ントに割り当てられていないのでメモリアラインメント
エラーとなる。この場合は図6(b)に示す方式で連続
領域をアクセスしなければならない。
【0041】
【作用】本発明により,キャッシュメモリ上でのメモリ
アクセスデータの競合関係が把握でき,かつ命令を移動
することにより,キャッシュミスを削減することができ
る。また,連続領域のメモリアクセスの最適化を適用す
ることにより,メモリアクセスの回数を削減することが
できる。
【0042】
【実施例】以下,本発明のコンパイル処理装置における
キャッシュミスを削減する翻訳方式および連続領域への
メモリアクセスを削減する翻訳方式の実施例を個別に説
明する。
【0043】1.キャッシュミスを削減する翻訳方式 本最適化は,ソースプログラム解析部11により,プロ
グラムを中間テキストに変換した段階で行われる。
【0044】処理は,以下の(1)から(7)のステッ
プで行われる。 (1)連続データを増やすためのループ展開の実施。 (2)メモリアクセスデータの収集。
【0045】(3)キャッシュメモリ上でのライン数の
計算と登録。 (4)キャッシュメモリ上の競合関係の解析。 (5)メモリアクセスデータ移動のための重なり解析。
【0046】(6)キャッシュメモリ上で競合が起こる
メモリアクセスデータに対するレジスタ割り付けの処
理。 (7)キャッシュメモリ上で競合が起こるメモリアクセ
スデータに対する命令の移動処理。
【0047】以下,(1)から(7)の処理ステップを
詳細に説明する。 (1)連続データを増やすためのループ展開の実施。 隣接するメモリアクセスデータを増やすためにループ展
開を実施する。ループを多重に展開する場合,レジスタ
が競合しないようにレジスタ数や演算数を考慮してルー
プの展開数を決定する。なお,この処理は,ループアン
ローリング処理としてよく知られている最適化処理の一
つであるが,本発明では,単にループ回数の削減による
高速化だけではなく,連続領域アクセスを増やす目的で
使用する。
【0048】(2)メモリアクセスデータの収集。 収集するメモリアクセスデータは,ループ内でのアドレ
スがコンパイラによって静的に認識できる配列要素に限
定する。
【0049】(a) ループ内の全ての配列要素に対して,
以下の情報を収集する。 ・中間テキストのアドレス ・アドレッシング情報1(ベース,インデックス,即
値)の収集 ・アドレッシング情報2(ソース情報:添字要素等)の
収集 ・配列の割り付け情報(領域種別,割り付け位置,順
序)の収集 (b) 収集対象となったループの情報(ソース情報)を収
集する。
【0050】・ループ回転数の初期値 ・ループ回転数の最終値 ・ループの増分値 これらの収集したデータを,図7に示すような情報テー
ブルに格納する。
【0051】(3)キャッシュメモリ上でのライン数の
計算と登録。 ループ内で収集したメモリアクセスデータが,キャッシ
ュメモリ上のどのラインに載るかを計算する。計算はア
ーキテクチャ情報の収集内容に応じて,次の(a) 〜(e)
の方法のいずれかの方法を適用する。
【0052】(a) 全ての情報が収集できた場合 ・各配列のループ1回転目のアドレスをバイト単位で計
算する。・式1によりキャッシュアクセスのアドレスが
わかる。これをキャッシュメモリのアドレスとする。キ
ャッシュメモリのアドレスをキャッシュメモリのライン
サイズで割った商+1ライン目に,このデータは格納さ
れる(式2)。さらに,ライン上の何バイト目にデータ
が格納されるかは,余りから計算する。
【0053】 C-ADDR = ARRAY-ADDR MOD (CACHE-LINE-SIZE*CACHE-ENTRY-SIZE) …(式1) ARRAY-ADDR :各配列要素の1回転目のアドレスの
バイト数 CACHE-LINE-SIZE :キャッシュメモリのラインサイズ CACHE-ENTRY-SIZE:キャッシュメモリのエントリサイズ C-ADDR :キャッシュメモリのアドレス LINE = (C-ADDR / CACHE-LINE-SIZE)+1 …(式2) LINE :格納ライン数 キャッシュメモリのラインサイズ,キャッシュメモリの
エントリサイズ,キャッシュサイズは,アーキテクチャ
情報として翻訳時に与えられている。
【0054】(b) ループの初期値の情報が不定(静的に
解析不能)な場合 ループの初期値を1と仮定して,上記(a) の場合の解析
方法を適用する。 (c) ループの増分値の情報が不定な場合 まず,ループの回転ごとに増分値が変化するかどうかを
調べる。増分値がループ内定数であれば,増分値を予測
して,上記(a) の場合の解析方法を適用する。増分値
が,ループの回転ごとに変化する可能性があれば,解析
をあきらめる。
【0055】(d) 配列要素のソース情報が不定な場合 ただし,ループの初期値の情報は不定ではないとする。
この場合には,不定部分を配列宣言の各次元の最低値と
し,上記(a) の場合の解析方法を適用する。
【0056】(e) 配列要素ではないか,あるいは(a) 〜
(d) 以外の場合の配列要素の時 この場合は,ソースとなるアーキテクチャ情報が不定の
ため,ライン数の解析は行わない。
【0057】〔ライン数の計算例〕図2に示すプログラ
ムに本解析方式を適用した場合の処理例を以下に示す。
コンパイル処理装置へのパラメータまたはシステムテー
ブル等から与えられたアーキテクチャ情報から,キャッ
シュメモリの構成は,以下のとおりであったとする。
【0058】・ダイレクトマップ方式 ・キャッシュサイズ:128KB ・キャッシュラインサイズ:32B ・キャッシュエントリ数:4096 F(),X(),Y()は倍精度型の配列で,F(),
X(),Y()の順番でメモリに割り付けられていると
する。また,F(1,1,1)を0(基点)と仮定す
る。ループの初期値,終値,増分値は,それぞれ翻訳時
にわかる。以上のキャッシュメモリの構成で計算した各
配列要素のキャッシュメモリ上のライン数は,次のよう
になる。このときのキャッシュメモリ上の競合関係を,
図9に示す。
【0059】 F(JX,K,1) = F(126,1,1) = F(1,1,1)+125*8 = 1000 1000 mod (32*4096) = 1000 1000/32 = 31.25 = 32ライン F(JX+1,K,1) = F(127,1,1) = F(1,1,1)+126*8 = 1008 1008 mod (32*4096) = 1008 1008/32 = 31.5 = 32ライン F(JX+2,K,1) = F(128,1,1) = F(1,1,1)+127*8 = 1016 1016 mod (32*4096) = 1016 1016/32 = 31.25 = 32ライン F(JX,K,2) = F(126,1,2) = F(1,1,1)+(125+1*128*128)*8 = 132072 132072 mod (32*4096) = 1000 1000/32 = 31.25 = 32ライン X(JX,K) = X(126,1) = F(128,128,3)+X(1,1)+125*8 396288+125*8 = 397288 397288 mod (32*4096) = 4072 4072/32 = 127.25= 128ライン Y(JX,K) = Y(126,1) = F(128,128,3)+X(128,128)+Y(1,1)+125*8 396288+131072+100 = 528360 528360 mod (32*4096) = 4072 4072/32 = 127.25= 128ライン 上記のように,解析したメモリアクセスデータのメモリ
のライン数を,図7に示す情報テーブルに登録する。
【0060】図7は,情報の格納場所およびデータ構造
の概念図である。図7に示すように,翻訳時に,解析対
象プログラムのループからループ回転数の初期値,ルー
プの回転数,ループ回転数の終値等のループ情報を収集
してソース情報として情報テーブルに格納し,配列要素
ごとのキャッシュのライン数をもとに競合状態を調べ
る。例えば配列要素A(I,J),B(I,J)は,そ
れぞれキャッシュライン数が100で競合関係にあるの
で,競合状態のフラグをONにし,いずれの配列要素と
も競合関係にないC(I,J)は競合状態のフラグをO
FFにする。
【0061】図8は,配列要素のキャッシュライン数計
算の処理フローチャートである。まず,ステップS1で
は,メモリアクセスデータの取り出しを行う。次に,ス
テップS2では,取り出したメモリアクセスデータが配
列要素かどうかを判定する。配列要素でない場合には,
ステップS1へ戻り,次のメモリアクセスデータの取り
出しを行う。配列要素の場合には,ステップS3へ進
む。
【0062】ステップS3では,情報テーブルのソース
情報を参照して,配列要素のアドレスをバイト単位で計
算する。ステップS4では,情報テーブルのアーキテク
チャ情報を参照して,前述した(式1)および(式2)
により,キャッシュアクセスのアドレスからキャッシュ
ライン数を計算する。ステップS5では,計算したキャ
ッシュメモリのライン数を情報テーブルに登録し,ステ
ップS1へ戻って,メモリアクセスデータがなくなるま
で同様に処理を繰り返す。 (4)キャッシュメモリ上の競合関係の解析。
【0063】ダイレクトマップのキャッシュメモリの場
合は,キャッシュメモリのラインがキャッシュメモリの
アドレスとなる。したがって,この場合には,図9に示
すように,配列要素F(JX,K,1),F(JX+
1,K,1),F(JX+2,K,1)およびF(J
X,K,2)はキャッシュメモリのライン32に格納さ
れる。このうち,配列要素F(JX,K,1),F(J
X+1,K,1),F(JX+2,K,1)は式1で求
めた商が同じなので,連続領域であることがわかる。こ
れは,上記の3つの配列の内の1つがキャッシュメモリ
のラインに格納された時に,その他の2つの配列要素も
同時にキャッシュメモリの同一ラインに格納されること
を意味する。
【0064】配列要素F(JX,K,1),F(JX+
1,K,1),F(JX+2,K,1)とF(JX,
K,2)とは,式1で求めた商が異なるので,キャッシ
ュメモリ上での競合データとなる。同様に,配列要素X
(JX,K),Y(JX,K)はキャッシュメモリのラ
イン128で競合し,式1の商が異なるので競合データ
となる。
【0065】図10は,キャッシュメモリ上での配列要
素の競合を調べる解析処理フローチャートである。キャ
ッシュメモリの構成が,ダイレクトマップではなくNセ
ットアソシエイティブキャッシュメモリの場合,配列要
素間の競合が起こっても,キャッシュメモリ上のセット
が異なる場合があるので,競合するデータの個数とセッ
ト数を考慮する必要がある。
【0066】なお,本発明では,キャッシュメモリ上で
の配列要素の競合解析をキャッシュメモリのライン数を
計算した直後に実施しているが,ライン数を計算した後
であるなら,論理的にどのフェーズでも実施可能であ
る。
【0067】図10において,個々のライン数に対して
競合データの個数の初期化を行った後,ステップS11
では,2つの配列要素のキャッシュライン数を取り出
す。ステップS12では,配列要素のキャッシュライン
数が不明かどうかを判定する。不明であれば,競合状態
と判定して(ステップS13),ステップS11へ戻
り,次の2つの配列要素の処理へ移る。不明でなけれ
ば,ステップS14の処理を行う。
【0068】ステップS14では,取り出した配列要素
のキャッシュライン数が同じかどうかを判定する。同じ
でなければ競合しないと判定して(ステップS15),
ステップS11へ戻り,次の2つの配列要素の処理へ移
る。同じであればステップS16の処理を行う。
【0069】ステップS16では,取り出した配列要素
が連続領域かどうかを判定する。連続領域であれば競合
しないと判定して(ステップS17),ステップS11
の処理へ戻る。連続領域でなければ,ステップS18の
処理を行う。
【0070】ステップS18では,キャッシュメモリの
セット数(N)が競合データの個数より大きいかどうか
を判定する。キャッシュメモリのセット数(N)が競合
データの個数より大きい場合には,競合しないと判定し
て(ステップS19),ステップS21の処理を行う。
大きくない場合には,競合状態と判定して(ステップS
20),ステップS21の処理を行う。
【0071】ステップS21では,競合データの個数に
1を加える。その後,ステップS11へ戻って,次の2
つの配列要素について同様に処理を繰り返す。 (5)配列要素間の実アドレス上での重なり解析。
【0072】2つの配列要素がキャッシュメモリ上で競
合する場合,競合が起こる前に一方の隣接する配列要素
を取り出すことができれば,その隣接要素に対しては,
キャッシュミスを起こさない。しかし,その隣接要素
は,必ずしも競合する配列要素の間にあるとは限らな
い。隣接する配列要素を競合を起こす前の配列要素に近
づける(命令スケジューリングによる命令の移動)ため
には,配列要素間の重なりを解析し,他の配列要素と互
いに重ならないことを保証しなければならない。これが
配列要素の重なり解析である。命令スケジューリングが
隣接要素をキャッシュミスが起きない位置へ移動する際
に,この重なり関係の解析情報が必要になる。
【0073】(6)レジスタ割り付けの処理。 レジスタ割り付けでは,メモリからロードするレジスタ
に対しては,できるだけ異なるレジスタを割り当てる。
【0074】(7)隣接データの移動。 命令スケジューリングでは,キャッシュメモリ上で競合
が起こる2つの配列要素に対する個々の隣接データを,
できる限り互いに近づけるように,命令の移動を行う
(図4の例を参照のこと)。図2(a)に示すプログラ
ムの例では,ループ展開を行った後,配列要素Y(J
X,K)をロードする前に,配列要素X(JX,K)と
X(JX+1,K)をロードしてしまえば,配列要素X
(JX+1,K)をキャッシュミスなしに,取り出すこ
とができる。
【0075】2.連続領域に対するメモリアクセスを削
減する翻訳方式 次に,連続領域を意識したメモリアクセスの削減に関す
る実施例を説明する。連続領域のメモリアクセスを高速
化するための要素は,以下の3つである。
【0076】(1)連続領域をアクセスしているか否か
の認識。 (2)連続領域のアラインメントの認識。 (3)単精度/倍精度データのペアロード/ペアストア
への変換。
【0077】連続領域であるか否かの認識は,ソース情
報とメモリアクセスデータのループ内の重なり情報を用
いて行う。ただし,連続領域のアラインメントの解析を
行う場合に,以下の3点の前提条件が必要である。
【0078】a)4バイトの配列要素の先頭は,必ず8
バイトアラインメントの先頭に割り当てられる。 b)8バイトの配列要素の先頭は,必ず16バイトアラ
インメントの先頭に割り当てられる。
【0079】c)解析対象の配列要素は重なり解析によ
り,正確に配列要素間の距離が判明している。 このa)〜c)の3つの条件のうち,1つでも崩れると
ペアロード/ペアストアが生成されないか,あるいは生
成されてもアドレス例外のトラップ(trap)が起こ
る。例えば,このようなtrapは,ペアロードのアラ
インメントを厳密に規定(検査)しているアーキテクチ
ャの場合に発生する。
【0080】以上の前提のもとに,連続領域の高速化の
ための本最適化の処理の概要を説明する。図11ないし
図13は,本実施例の最適化を説明するためのソースプ
ログラムとその中間テキストの例,図14は,ペアロー
ド/ペアストアの生成パターン例を示す。
【0081】(1)連続領域をアクセスしているか否か
の認識。 連続領域の解析対象のメモリアクセスは,この例では4
バイトデータ(単精度)と仮定する。8バイトデータ
(倍精度)についても,4バイトデータと同様な方法で
判定することができる。
【0082】(a) 初期番号(Initial Number)の割り当
て 配列要素の重なり解析をもとに,各配列要素間に初期番
号(Initial Number)を割り当てる。図11に,初期番
号の割り当て例を示す。
【0083】重なり解析および添字要素の解析により,
図11の例で示したループ内の各配列要素は,配列の先
頭からアクセスされていることがわかる。初期番号を割
り当てる際には,配列の先頭を0として,その基点から
の距離を番号として割り当てる。上記の例だと初期番号
は,A(I)について0,B(I)についても0とな
る。なお,中間テキストにおける「STORE AXD
(A),0」は,配列Aの要素に数値0をストアする命
令を意味している。
【0084】(b) 連続番号の割り当て ループを多重に展開する際には,各配列要素は展開数だ
けコピーされる。ループ展開時にコピーした配列要素に
対して連続番号(Sequential Number)を割り当てる。図
11に示すソースプログラムを2重にループ展開した場
合について図12に示す。
【0085】ループ展開により,A(I)の次の要素A
(I+1)が生成される。この場合,ループ展開はA
(I)からの要素間の距離を連続番号として割り当て
る。図12の例では,基点0からの距離は1なので,A
(I+1)には,連続番号として1が割り当てられる。
配列要素B(I+1)についても,同様に連続番号=1
が割り当てられる。
【0086】次に,別の例を図13に示す。図13
(a)に示すように,初期番号は,それぞれ割り当て済
みとする。図13(a)に示すソースプログラムにおい
て,ループ展開により,ループが2重に展開されるとす
ると,図13(b)に示すように,A(I+1)に対し
て,ループ展開によりコピーA(I+3)が生成され
る。これは基点からの距離が+2なので,連続番号は1
+2=3となる。
【0087】A(I+2)に対して,ループ展開により
コピーA(I+4)が生成され,これは基点からの距離
が+2なので,連続番号は2+2=4となる。 (2)連続領域のアラインメントの認識。
【0088】アラインメントを意識した連続領域の判定
で,初期番号が偶数ならば,そのメモリアクセスデータ
は,8バイトまたは16バイトアラインメントの先頭で
あることがわかる。このことから,アラインメントを意
識した連続領域は,初期番号/連続番号を含めて,〔偶
数番号,偶数番号+1〕の配列要素のペアが連続領域で
あると認識できる。
【0089】例えば,図12に示したプログラムでは,
中間テキストのA(I)の初期番号は0,A(I+1)
の連続番号が1であることから,〔A(I),A(I+
1)〕が連続領域であると判断できる。同様に,〔B
(I),B(I+1)〕が連続領域であると判断でき
る。また,図13(b)に示す例では,中間テキストの
初期番号,連続番号から,A(I+2)と,A(I+
3)が〔偶数番号,偶数番号+1〕に該当するので,
〔A(I+2),A(I+3)〕の配列要素が連続領域
となる。A(I+1),A(I+4)については,アラ
インメントを意識した場合には連続領域は存在しないと
判断する。 (3)単精度/倍精度データのペアロード/ペアストア
への変換。
【0090】初期番号と連続番号から,ペアロード/ペ
アストアを生成するメモリアクセスデータを決定する。
連続するメモリアクセスデータに対して,ペアロード/
ペアストアを生成するためには,ロード/ストアに対応
する中間テキストに対して,ペアレジスタが必要である
ことをレジスタ割り付けに通知するインタフェースが必
要になる。そのために,メモリアクセスを表現する中間
テキスト(LOAD/STORE)に対して複合一時名
を許すことで対応する。
【0091】なお,生成されるペアロード/ペアストア
は,図14に示すように,3つのパターンしかなく,ペ
アロード・ペアストア生成部8が3つのパターンのう
ち,どのパターンであるかを決定する。
【0092】図14(a)に示すパターン1は,8(ま
たは16)バイトの連続領域をペアロードし,4(また
は8)バイトずつ個別にストアする場合である。図14
(b)に示すパターン2は,4(または8)バイトずつ
個別にロードし,8(または16)バイトの連続領域を
ペアストアする場合である。
【0093】図14(c)に示すパターン3は,8(ま
たは16)バイトの連続領域をペアロードし,8(また
は16)バイトの連続領域をペアストアする場合であ
る。 (4)レジスタ割り付けの処理。
【0094】レジスタ割り付けの処理では,オペランド
に複合一時名(1つの定義オペランドに複数の定義オペ
ランドを持つ中間テキスト)を持つメモリアクセス演算
に対して,ペアレジスタを割り付ける。
【0095】(5)コード生成の処理。 コード生成の処理では,メモリアクセス演算の定義,参
照オペランドに複合一時名がきた場合に,倍精度型のロ
ード/倍精度型のストア(または,4倍精度のロード/
4倍精度のストア)命令を生成する。
【0096】図15は,連続領域の最適化(連続領域に
対するメモリアクセスを削減する翻訳方式)の処理フロ
ーチャートである。図15において,ステップS31で
は,配列要素の重なり解析が可能か否かを判定する。配
列要素の重なり解析が可能な場合には,ステップS32
の処理を行い,解析が不可能な場合には本最適化処理を
終了する。
【0097】ステップS32では,各配列要素間に初期
番号を割り当てる。ステップS33では,ループアンロ
ーリングによりループ展開を実施する。なお,本最適化
の処理前に既にループアンローリングを行っていれば,
ここでのループ展開は不要である。
【0098】ステップS34では,ループ展開時にコピ
ーした配列要素に対して連続番号を割り当てる。ステッ
プS35では,アラインメントの認識を行う。
【0099】ステップS36では,初期番号および連続
番号をもとに,連続領域か否かを判定する。連続領域と
認識した場合には,ステップS37の処理を行い,連続
領域と認識しなかった場合には,ステップS38へ進
む。
【0100】ステップS37では,初期番号と連続番号
から,ペアロード/ペアストアを生成するメモリアクセ
スデータを決定し,ペアロード/ペアストアを生成する
3つのパターンのうち1つのパターンを決定して,ペア
ロードもしくはペアストアまたはこれらの双方を生成す
る。
【0101】ステップS38では,すべての連続領域に
ある配列要素に対する処理が終了したどうかを判定し,
終了した場合には本最適化処理を終了する。終了してい
ない場合には,ステップS35へ戻り,次の配列要素に
対して同様に処理を繰り返す。
【0102】以上,キャッシュミスを削減する方式と連
続領域に対するメモリアクセスを削減する方式の2つの
最適化の例を別々に説明したが,双方を同時に適用し
て,さらに実行効率のよいオブジェクトプログラムを生
成することができることは言うまでもない。
【0103】
【発明の効果】以上説明したように,本発明によれば,
メモリアクセスデータのキャッシュミスを削減すること
ができる。このキャッシュミスの削減効果により,プロ
グラムをより高速に実行することが可能となる。
【0104】また,連続領域からデータを一括して取り
出し,連続領域へ一括して書き込むことにより,RIS
Cプロセッサ等でのボトルネックとなるメモリアクセス
を削減することができる。このペアロード/ペアストア
によっても,プログラムをより高速に実行することがで
きる。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】キャッシュミスを削減する翻訳方式を説明する
FORTRANのソースプログラムを示す図である。
【図3】図2に示すプログラムのキャッシュメモリ上で
のデータ状態を説明する図である。
【図4】キャッシュミスを削減する翻訳方式を行った場
合のオブジェクトコード(アセンブラソース)を示す図
である。
【図5】連続領域に対するメモリアクセスのプログラム
例を示す図である。
【図6】連続領域に対するメモリアクセスを削減する翻
訳方式を行った場合のオブジェクトコード(アセンブラ
ソース)を示す図である。
【図7】キャッシュの競合関係を調べるための情報の格
納場所およびデータ構造を示す図である。
【図8】配列要素のキャッシュライン数計算の処理フロ
ーチャートである。
【図9】各配列要素とキャッシュメモリ上での競合状態
を示す図である。
【図10】キャッシュメモリ上の競合関係の解析処理フ
ローチャートである。
【図11】本実施例の最適化を説明するためのソースプ
ログラムとその中間テキストの例を示す図である。
【図12】本実施例の最適化を説明するためのソースプ
ログラムとその中間テキストの例を示す図である。
【図13】本実施例の最適化を説明するためのソースプ
ログラムとその中間テキストの例を示す図である。
【図14】ペアロード/ペアストアの生成パターン例を
示す図である。
【図15】連続領域の最適化(連続領域に対するメモリ
アクセスを削減する翻訳方式)の処理フローチャートで
ある。
【符号の説明】
1 コンパイル処理装置 2 連続領域生成部 3 メモリアクセスデータ収集部 4 競合データ解析部 5 メモリアクセスデータの重なり解析部 6 連続領域認識部 7 アラインメントの検査部 8 ペアロード・ペアストア生成部 11 ソースプログラム解析部 12 最適化部 13 命令移動部 14 コード生成部 20 アーキテクチャ情報

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 キャッシュメモリを持つ計算機上で動作
    するプログラムの翻訳を行うコンパイル処理装置におい
    て,プログラムの翻訳における最適化処理においてメモ
    リアクセスデータを収集するメモリアクセスデータ収集
    部と,収集したメモリアクセスデータ間のキャッシュメ
    モリ上の競合関係を解析する競合データ解析部と,競合
    データ解析結果に基づき,キャッシュメモリ上で競合が
    生じるメモリアクセスデータに対する命令の移動可否を
    検査するメモリアクセスデータの重なり解析部と,メモ
    リアクセスデータの重なり解析結果に基づき,キャッシ
    ュメモリ上で競合が生じるメモリアクセスデータに対し
    てキャッシュミスを軽減する命令の並び換えを行う命令
    移動部とを備えたことを特徴とするコンパイル処理装
    置。
  2. 【請求項2】 請求項1記載のコンパイル処理装置にお
    いて,プログラムの翻訳における最適化処理時にループ
    アンローリングにより連続領域に対するメモリアクセス
    データを増やす連続領域生成部を備え,前記メモリアク
    セスデータ収集部は,連続領域に対するメモリアクセス
    データを増やした後にメモリアクセスデータを収集し,
    前記命令移動部は,連続領域のメモリアクセスデータに
    対する命令が並ぶように命令を移動させることを特徴と
    するコンパイル処理装置。
  3. 【請求項3】 請求項1記載のコンパイル処理装置にお
    いて,前記競合データ解析部は,翻訳後のプログラムを
    動作させる計算機に関する,与えられたアーキテクチャ
    情報をもとに,メモリアクセスデータ間のキャッシュメ
    モリ上の競合関係を解析することにより,複数種のキャ
    ッシュメモリの構成に対応可能な解析手段を持つことを
    特徴とするコンパイル処理装置。
  4. 【請求項4】 キャッシュメモリを持つ計算機上で動作
    するプログラムの翻訳を行うコンパイル処理装置におい
    て,プログラムの翻訳における最適化処理において連続
    領域に対するメモリアクセスデータを認識する連続領域
    認識部と,認識した連続領域に対するメモリアクセスデ
    ータのアラインメントを検査するアラインメントの検査
    部と,アラインメントの検査結果に基づき,連続領域に
    対する複数のメモリアクセスデータを1つのメモリアク
    セスデータとしてロードまたはストアする命令を生成す
    るペアロード・ペアストア生成部とを備えたことを特徴
    とするコンパイル処理装置。
  5. 【請求項5】 キャッシュメモリを持つ計算機上で動作
    するプログラムの翻訳を行うコンパイル処理装置におい
    て,プログラムの翻訳における最適化処理においてルー
    プアンローリングにより連続領域に対するメモリアクセ
    スデータを増やす連続領域生成部と,メモリアクセスデ
    ータを収集するメモリアクセスデータ収集部と,収集し
    たメモリアクセスデータ間のキャッシュメモリ上の競合
    関係を解析する競合データ解析部と,競合データ解析結
    果に基づき,キャッシュメモリ上で競合が生じるメモリ
    アクセスデータに対する命令の移動可否を検査するメモ
    リアクセスデータの重なり解析部と,メモリアクセスデ
    ータの重なり解析結果に基づき,キャッシュメモリ上で
    競合が生じるメモリアクセスデータに対してキャッシュ
    ミスを軽減する命令の並び換えを行う命令移動部と,連
    続領域に対するメモリアクセスデータを認識する連続領
    域認識部と,認識した連続領域に対するメモリアクセス
    データのアラインメントを検査するアラインメントの検
    査部と,アラインメントの検査結果に基づき,連続領域
    に対する複数のメモリアクセスデータを1つのメモリア
    クセスデータとしてロードまたはストアする命令を生成
    するペアロード・ペアストア生成部とを備えたことを特
    徴とするコンパイル処理装置。
JP7132104A 1995-05-30 1995-05-30 コンパイル処理装置 Pending JPH08328870A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP7132104A JPH08328870A (ja) 1995-05-30 1995-05-30 コンパイル処理装置
US08/655,384 US5930507A (en) 1995-05-30 1996-05-30 Compiling processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7132104A JPH08328870A (ja) 1995-05-30 1995-05-30 コンパイル処理装置

Publications (1)

Publication Number Publication Date
JPH08328870A true JPH08328870A (ja) 1996-12-13

Family

ID=15073552

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7132104A Pending JPH08328870A (ja) 1995-05-30 1995-05-30 コンパイル処理装置

Country Status (2)

Country Link
US (1) US5930507A (ja)
JP (1) JPH08328870A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001134337A (ja) * 1999-08-05 2001-05-18 Canon Inc 暗号解読コンパイラ
US6625806B1 (en) 1998-01-26 2003-09-23 Nec Electronics Corporation Language processing method and language processing system improving use efficiency of cache memory
JP2006114069A (ja) * 2006-01-20 2006-04-27 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2007536599A (ja) * 2003-11-19 2007-12-13 インテル・コーポレーション メモリアクセス命令のベクトル化
US7698696B2 (en) 2002-07-03 2010-04-13 Panasonic Corporation Compiler apparatus with flexible optimization
JP2010186487A (ja) * 2010-04-23 2010-08-26 Panasonic Corp コンパイラ装置及びそのシステム
CN106155913A (zh) * 2015-04-15 2016-11-23 阿里巴巴集团控股有限公司 缓存命中率分析的方法及设备
JPWO2020250420A1 (ja) * 2019-06-14 2020-12-17

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226790B1 (en) * 1997-02-28 2001-05-01 Silicon Graphics, Inc. Method for selecting optimal parameters for compiling source code
US6059840A (en) * 1997-03-17 2000-05-09 Motorola, Inc. Automatic scheduling of instructions to reduce code size
US6567976B1 (en) 1997-03-20 2003-05-20 Silicon Graphics, Inc. Method for unrolling two-deep loops with convex bounds and imperfectly nested code, and for unrolling arbitrarily deep nests with constant bounds and imperfectly nested code
CA2211515C (en) * 1997-07-25 2001-12-11 Kevin Alexander Stoodley System and method of local data alignment for stack memory
US6341370B1 (en) * 1998-04-24 2002-01-22 Sun Microsystems, Inc. Integration of data prefetching and modulo scheduling using postpass prefetch insertion
US6324689B1 (en) * 1998-09-30 2001-11-27 Compaq Computer Corporation Mechanism for re-writing an executable having mixed code and data
US6243807B1 (en) * 1998-10-20 2001-06-05 Pc-Tel, Inc. Optimizing cache data load required for functions in loop routine by sequentially collecting data in external memory for single block fetch
US6351849B1 (en) * 1999-05-21 2002-02-26 Intel Corporation Compiler optimization through combining of memory operations
US6651088B1 (en) * 1999-07-20 2003-11-18 Hewlett-Packard Development Company, L.P. Method for reducing coherent misses in shared-memory multiprocessors utilizing lock-binding prefetchs
US6381691B1 (en) * 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
US6427235B1 (en) 1999-11-05 2002-07-30 Sun Microsystems, Inc. Method and apparatus for performing prefetching at the critical section level
US6421826B1 (en) * 1999-11-05 2002-07-16 Sun Microsystems, Inc. Method and apparatus for performing prefetching at the function level
JP2004021425A (ja) * 2002-06-13 2004-01-22 Hitachi Ltd コンパイラにおけるメモリ配置方式
JP4934267B2 (ja) * 2003-10-17 2012-05-16 パナソニック株式会社 コンパイラ装置
JP4554241B2 (ja) * 2004-03-16 2010-09-29 富士通セミコンダクター株式会社 キャッシュカラーリング方法
JP4827469B2 (ja) * 2005-09-08 2011-11-30 パナソニック株式会社 キャッシュメモリ解析方法、プロセッサおよび模擬情報処理装置
US7937695B2 (en) * 2007-04-27 2011-05-03 International Business Machines Corporation Reducing number of exception checks
US8612951B2 (en) * 2009-04-21 2013-12-17 Oracle International Corporation Method of determining which computer program functions are changed by an arbitrary source code modification
US8423981B2 (en) * 2009-06-18 2013-04-16 National Instruments Corporation Compiling a graphical program having a textual language program portion for a real time target
US9323669B1 (en) * 2013-12-31 2016-04-26 Emc Corporation System, apparatus, and method of initializing cache

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03282734A (ja) * 1990-03-30 1991-12-12 Toshiba Corp コンパイラ装置及びコンパイル方法
JPH06324881A (ja) * 1993-05-18 1994-11-25 Fujitsu Ltd メモリデータの重なり判定機能を備えたコンパイラ装置
US5689712A (en) * 1994-07-27 1997-11-18 International Business Machines Corporation Profile-based optimizing postprocessors for data references
US5613121A (en) * 1994-10-19 1997-03-18 International Business Machines Corporation Method and system of generating combined storage references

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6625806B1 (en) 1998-01-26 2003-09-23 Nec Electronics Corporation Language processing method and language processing system improving use efficiency of cache memory
JP2001134337A (ja) * 1999-08-05 2001-05-18 Canon Inc 暗号解読コンパイラ
US7698696B2 (en) 2002-07-03 2010-04-13 Panasonic Corporation Compiler apparatus with flexible optimization
US8418157B2 (en) 2002-07-03 2013-04-09 Panasonic Corporation Compiler apparatus with flexible optimization
JP2007536599A (ja) * 2003-11-19 2007-12-13 インテル・コーポレーション メモリアクセス命令のベクトル化
JP2011118909A (ja) * 2003-11-19 2011-06-16 Intel Corp メモリアクセス命令のベクトル化
JP2006114069A (ja) * 2006-01-20 2006-04-27 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2010186487A (ja) * 2010-04-23 2010-08-26 Panasonic Corp コンパイラ装置及びそのシステム
CN106155913A (zh) * 2015-04-15 2016-11-23 阿里巴巴集团控股有限公司 缓存命中率分析的方法及设备
JPWO2020250420A1 (ja) * 2019-06-14 2020-12-17
WO2020250420A1 (ja) * 2019-06-14 2020-12-17 日本電気株式会社 プログラム変換装置、プログラム変換方法およびプログラム変換プログラム

Also Published As

Publication number Publication date
US5930507A (en) 1999-07-27

Similar Documents

Publication Publication Date Title
JPH08328870A (ja) コンパイル処理装置
JP3417984B2 (ja) キャッシュ競合削減コンパイル方法
US6721943B2 (en) Compile-time memory coalescing for dynamic arrays
JP4844971B2 (ja) インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
US5357618A (en) Cache prefetch and bypass using stride registers
US6006033A (en) Method and system for reordering the instructions of a computer program to optimize its execution
JP3820261B2 (ja) データ処理システムの外部および内部命令セット
US6845501B2 (en) Method and apparatus for enabling a compiler to reduce cache misses by performing pre-fetches in the event of context switch
US7571432B2 (en) Compiler apparatus for optimizing high-level language programs using directives
US6675374B2 (en) Insertion of prefetch instructions into computer program code
JP4751510B2 (ja) メモリアクセス最適化方法
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
JP2004110811A (ja) マルチプロセッサ・メモリ整合性の効率のよいエミュレーションのための方法およびシステム
JPH10293692A (ja) 多重ループ向けデータプリフェッチ方法、プロセッサおよびプログラム生成方法
JP2002251321A (ja) キャッシュメモリシステム装置
JPH1124969A (ja) ループ作成方法
US6691080B1 (en) Task execution time estimating method
WO2003007153A2 (en) Facilitating efficient join operations between a head thread and a speculative thread
US5872989A (en) Processor having a register configuration suited for parallel execution control of loop processing
US6892280B2 (en) Multiprocessor system having distributed shared memory and instruction scheduling method used in the same system
EP0947922B1 (en) Compiler
US7313787B2 (en) Compiler and method for optimizing object codes for hierarchical memories
Duesterwald et al. Register pipelining: An integrated approach to register allocation for scalar and subscripted variables
JP3425069B2 (ja) バイナリ・プログラム変換装置および方法
JPH08161169A (ja) Vliw方式の計算機システム及びvliwの解釈・実行方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040706

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040901

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040928

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041126

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050208