JPH10228382A - コンパイル方式 - Google Patents

コンパイル方式

Info

Publication number
JPH10228382A
JPH10228382A JP9047283A JP4728397A JPH10228382A JP H10228382 A JPH10228382 A JP H10228382A JP 9047283 A JP9047283 A JP 9047283A JP 4728397 A JP4728397 A JP 4728397A JP H10228382 A JPH10228382 A JP H10228382A
Authority
JP
Japan
Prior art keywords
loop
access
simd
array
instruction
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
JP9047283A
Other languages
English (en)
Inventor
Junji Sakai
淳嗣 酒井
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.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP9047283A priority Critical patent/JPH10228382A/ja
Priority to US09/108,387 priority patent/US6113650A/en
Publication of JPH10228382A publication Critical patent/JPH10228382A/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops

Abstract

(57)【要約】 【課題】 SIMD命令セットの適用範囲を非アライン
アクセスとなるような配列参照を含む原始プログラムに
まで拡大し、目的プログラムをターゲット計算機上で実
行する際の主記憶アクセス回数を減少させる。 【解決手段】 添字式解析部12は、ループ正規化処理
部11により正規化されたループ構造における非アライ
ンアクセスの有無を解析し、その解析結果を示す配列添
字式情報を添字式情報テーブル13に登録する。SIM
D命令置換部14は、配列要素に対する演算処理がSI
MD命令セットを用いて行われるように、ループ本体で
の演算処理の中間コードおよびループ繰り返し制御部分
の中間コードを修正する。非アラインアクセス処理部1
5は、添字式情報テーブル13を参照し、SIMD演算
の対象となる非アラインアクセスの部分をアラインアク
セス命令とシフト命令および論理演算命令との組合せに
変換する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、高級言語プログラ
ムを目的プログラムに変換するコンパイル方式に関し、
特に複数の配列データの各要素(配列要素)を一括処理
する命令セットを生成する際の最適化を行うコンパイル
方式に関する。
【0002】
【従来の技術】マルチメディア処理を高速に行うため
に、SIMD(Single Instruction
Multiple Data stream)命令や
マルチメディア拡張命令と呼ばれる命令セット(以下、
単に「SIMD命令セット」と呼ぶ)を有する計算機が
ある。
【0003】以下では、まずSIMD命令セットについ
て説明する。
【0004】SIMD命令セットは、SIMD型と呼ば
れる集合型のデータ(SIMD型データ)に対して一括
して演算処理を行う命令群である。
【0005】SIMD型データの構造を図3に示す。S
IMD型データのサイズはワードサイズに等しいか、あ
るいはその整数倍である。ここで、ワードとは、計算機
が主記憶とレジスタとの間でデータを転送したり、レジ
スタや主記憶間で演算を行う場合の、処理の基本単位と
なるデータサイズのことである。図3の場合、1個のS
IMD型データ20は4個のSIMD要素型データ2
1,22,23,および24から構成されているが、一
般には、SIMD型データは2個,4個,または8個の
SIMD要素型データから構成される。各SIMD要素
型データのサイズは、同一であり、通常8ビット,16
ビット,または32ビットである。1つのSIMD型デ
ータに含まれるSIMD要素型データの個数を、SIM
D並列度と呼ぶ。
【0006】SIMD命令は、SIMD型データ中の各
SIMD要素型データに対し、加算,減算,および乗算
等の同一演算を施す。1つの例として、各SIMD要素
型データのサイズが16ビットでSIMD並列度が4で
あるようなSIMD型データを対象に加算処理を行うS
IMD命令の動作を、図4に示す。同図において、レジ
スタ30とレジスタ31とは、SIMD型データの披演
算子を保持している。SIMD加算器32内の4個の独
立した加算器(ADD)33,34,35,および36
は、披演算子の各々のSIMD要素型データを加算し、
その結果を演算結果出力先のレジスタ37に格納する。
【0007】SIMD命令セットは、図5に示されるC
プログラムのように、主記憶上に配置された配列データ
の各要素に対して同一の演算を施す処理に有効である。
【0008】図6を用いてSIMD命令による処理の流
れを説明する。主記憶上に置かれた配列Aの部分配列4
0は、通常のロード命令によってワード単位に計算機の
レジスタ30に読み込まれる。同様にして、配列Bの部
分配列41もワード単位にレジスタ31に読み込まれ
る。SIMD加算命令によってレジスタ30とレジスタ
31との内容がSIMD加算器32によって加算され、
加算結果がレジスタ37に格納される。最後に、レジス
タ37の内容が通常のストア命令によって、主記憶上に
置かれた配列Cの部分配列42上にワード単位で書き込
まれる。
【0009】このようにSIMD命令セットを用いるこ
とにより、1ワードの処理で複数の配列要素に対して同
一の処理を施すことができるようになり、プログラムを
より高速に実行することができる。各配列要素に対する
演算処理が逐次的に記述されたプログラムを、SIMD
命令セットを用いて各配列要素を演算処理するようなプ
ログラムに変換することを、SIMD化と呼ぶ。
【0010】このようなSIMD演算処理と同様の処理
は、ベクトル型スーパコンピュータでも用いられてい
る。図7に示すように、スーパコンピュータでは、主記
憶上に置かれた配列の部分配列50および51がベクト
ル計算機52内部のベクトルレジスタ53および54に
ロードされる。ベクトル演算器56は、ベクトルレジス
タ53とベクトルレジスタ54との間で演算を行って、
その演算結果をベクトルレジスタ55に格納する。最後
に、ベクトルレジスタ55の内容が主記憶上の配列領域
57に書き戻される。ベクトル型スーパコンピュータに
対しては、逐次的に記述されたプログラムの中からベク
トル命令で実行可能な部分が探し出され、その部分をベ
クトル命令を用いたプログラムに変換する自動ベクトル
化コンパイラが実用化されている。自動ベクトル化コン
パイラは、原始プログラム中の配列の演算順序を解析
し、プログラムの持つ意味を変えることなく、ベクトル
命令を用いた目的プログラムを生成する。
【0011】しかし、自動ベクトル化コンパイル技術を
SIMD化を行うコンパイラにそのまま適用することは
できない。その最大の理由は、配列要素に対するアクセ
スの自由度の違いによる。
【0012】ベクトル実行の場合には、各配列要素の大
きさはワードサイズであり、主記憶上の部分配列50と
ベクトルレジスタ53との間の転送はワードサイズの整
数倍で行われる。主記憶上に配置された配列のどの要素
から始まる部分配列でも、ベクトルレジスタとの間での
転送が可能である。他方、SIMD命令セットによる実
行の場合には、1つのSIMD型データの中に複数の配
列要素がパックされている。主記憶とレジスタとの間の
データ転送はSIMD型データのサイズで行われ、しか
も、転送対象の主記憶データ領域は、ワード境界と呼ば
れる特別なアドレスから開始する領域でなければならな
い。すなわち、配列の任意の要素から始まる部分配列を
主記憶とレジスタとの間で転送するのは容易ではない。
そのため、SIMD命令セットを有する計算機向けのプ
ログラムは、アクセスする配列要素のアドレス条件を考
慮しつつアセンブラによって人手で記述されていた。
【0013】
【発明が解決しようとする課題】SIMD命令セットを
有する計算機向けのプログラムを能率良く開発するに
は、SIMD命令セットを効率良く使用した目的プログ
ラムを生成できるコンパイラ(SIMD化コンパイラ)
が必要である。
【0014】このようなSIMD化コンパイラを作成す
る上では、主記憶上のデータに対するアクセスに関し、
次の2つの課題を解決しなければならない。
【0015】第1の課題は、SIMD命令セット自体で
は主記憶上でワード境界をまたぐ領域に置かれたデータ
に対する演算ができないことである。
【0016】第2の課題は、ワード境界をまたぐデータ
を含む主記憶データに対してアクセスする際に、主記憶
データに対するアクセスの回数が多くなることである。
【0017】これらの課題について、以下に詳しく述べ
る。なお、ワード境界に沿って配置されたデータのアク
セス(ワード境界をまたがないアクセス)をアラインア
クセスと呼び、ワード境界に沿っていないアクセス(ワ
ード境界をまたぐアクセス)を非アラインアクセスと呼
ぶことにする。
【0018】まず、第1の課題について述べる。この課
題に起因して、「プログラム中のあるループ構造に非ア
ラインアクセス部分が含まれているとその部分のSIM
D化が行えず、生成された目的プログラムの実行性能が
低下する」という問題点が生じる。
【0019】図8を用いて、アラインアクセスと非アラ
インアクセスとの違いを説明する。同図の例では、1ワ
ードは32ビット(4バイト)であり、主記憶とレジス
タとの間の転送単位は2ワード(64ビット)であり、
ワード境界は主記憶上のバイトアドレスが4の整数倍と
なる位置であり、配列要素の大きさは16ビット(2バ
イト)であり、アドレス表記は16進数である。
【0020】主記憶上のアドレス00から始まる4つの
配列要素60〜63をレジスタにロードする場合には、
これらの4要素のデータ領域(アドレス00から始まり
アドレス08の直前までのデータ領域)はワード境界に
沿っている。したがって、通常のロード命令によってア
ラインアクセスすることができる。一方、アドレス0E
から始まる4つの配列要素64〜67をレジスタにロー
ドしたい場合には、これらの4要素のデータ領域(アド
レス0Eから始まりアドレス16の直前までのデータ領
域)はワード境界に沿っておらず、非アラインアクセス
が要求される。
【0021】多くの計算機は、非アラインアクセス用の
命令セットを備えておらず、例えば、上記のアドレス0
Eから始まる4要素に対する処理はそのままではSIM
D化できない。そのため、コンパイラによる自動SIM
D化の適用可能範囲が狭められてしまい、生成された目
的コードの実行性能が向上しないことになる。この種の
非アラインアクセスは、アラインアクセスとそれに付随
するいくつかの補助的な演算との組で置き換える必要が
ある。
【0022】次に、第2の課題について述べる。この課
題に起因して、「主記憶上の同一領域のアクセスが繰り
返されることによる性能低下が起こる」という問題点が
生じる。個々の配列要素のアクセスに関しては、従来か
らの最適化技術によってアクセス回数を減らすことがで
きる。すなわち、主記憶からレジスタ上に値を転送し、
そのレジスタ上で演算処理を行い、その演算結果を主記
憶に書き戻すことで、主記憶の同一領域へのアクセス回
数を最適化することができる。しかし、プログラムのS
IMD化を行う場合には、原始プログラム上では完全に
一致していない演算対象であっても、結果的に主記憶上
の同一領域に対するアクセスが発生することがある。
【0023】図9に示すCプログラムを例にとり、図1
0を用いて、上記の問題点を説明する。
【0024】このプログラムをSIMD命令セットを用
いて実行させると、ループ本体の最初の実行で配列Aの
第0要素から第3要素までと、同じく配列Aの第1要素
から第4要素までとが必要になる。前者はアラインアク
セスによりレジスタ70にロードするだけで済む。しか
し、後者は非アラインアクセスとなるため、第1要素か
ら第3要素までを含むSIMD型データ(レジスタ71
が保持するデータ)と第4要素を含むSIMD型データ
(レジスタ72が保持するデータ)との2つに分割して
アラインアクセスすることになる。このうち、第0要素
から第3要素までを含むワードは既にアクセスされてお
り、重複してアクセスするのは実行性能を低下させる要
因となる。つまり、A[0]〜A[3]とA[1]〜A
[4]という、原始プログラム上では完全には一致しな
いデータ領域に対するアクセスでも、SIMD化のため
の変換を行うと重複したアクセスを生み出すことにな
る。
【0025】本発明の目的は、上述の点に鑑み、以下の
およびに示す事項を可能ならしめるコンパイル方式
(複数データの一括処理命令を生成するコンパイル方
式)を提供することにある。
【0026】 SIMD命令セットの適用範囲を、非
アラインアクセスとなるような配列参照を含む原始プロ
グラムにまで拡大する。
【0027】 目的プログラムをターゲット計算機上
で実行する際の主記憶アクセス回数を減少させて、実行
性能を向上させる。
【0028】
【課題を解決するための手段】本発明のコンパイル方式
は、構文解析部,最適化処理部,およびコード生成部を
有するコンパイラ内の最適化処理部において、SIMD
化処理部入力中間言語プログラムを入力してその中のル
ープ構造を正規化するループ正規化処理部と、前記ルー
プ正規化処理部によって正規化されたループ構造におけ
る非アラインアクセスの有無を解析し、その解析結果を
示す配列添字式情報を添字式情報テーブルに登録する添
字式解析部と、配列要素に対する演算処理がSIMD命
令セットを用いて行われるように、ループ本体での演算
処理の中間コードおよびループ繰り返し制御部分の中間
コードを修正するSIMD命令置換部と、前記添字式情
報テーブルに登録された添字式情報を参照することで、
SIMD演算の対象となる主記憶上の配列要素のうち非
アラインアクセスとなる部分を認識し、配列要素参照時
のアドレスのワード境界からの変位を計算することでル
ープ中におけるワード境界から開始しない主記憶領域に
対するワードアクセスをワード境界に沿った主記憶領域
に対するワードアクセスに変換することで、非アライン
アクセスの部分をアラインアクセス命令とシフト命令お
よび論理演算命令との組合せに変換する非アラインアク
セス処理部とを有する。
【0029】
【発明の実施の形態】本発明の実施の形態について、図
面を参照して詳細に説明する。
【0030】図1(a)および(b)は、本発明のコン
パイル方式の実施の形態の全体構成を示すブロック図で
ある。
【0031】図1(a)に示すように、このコンパイル
方式では、高級言語で記述された原始プログラム1が、
コンパイラ2で処理され、最終的にはSIMD命令セッ
トを含む目的プログラム9に変換される。
【0032】コンパイラ2は、与えられた原始プログラ
ム1の構文を解析して中間言語プログラム(中間コード
の集合)に変換する構文解析部3と、中間言語プログラ
ムに対してSIMD化を含むいくつかの最適化処理を施
す最適化処理部4と、最適化された中間言語プログラム
を目的プログラム9に変換するコード生成部5とを含ん
で構成されている。
【0033】最適化処理部4は、中間言語プログラムに
対して従来からの最適化手法である定数伝搬,複写伝
搬,演算強度軽減,および共通部分式削除等の最適化手
法を適用するスカラ最適化処理部6と、中間言語プログ
ラム中からSIMD命令セットで実行可能な部分を探し
出してその部分をSIMD命令セット用の中間コードに
変換するSIMD化処理部7と、SIMD化された中間
言語プログラムに対して再度最適化を試みる後処理部8
とを含んで構成されている。
【0034】図1(b)を参照すると、SIMD化処理
部7は、ループ正規化処理部11と、添字式解析部12
と、添字式情報テーブル13と、SIMD命令置換部1
4と、非アラインアクセス処理部15と、メモリアクセ
ス最適化処理部16とを含んで構成されている。
【0035】以下に、SIMD化処理部7内の各構成要
素について、説明を加える。
【0036】ループ正規化処理部11は、SIMD化処
理部入力中間言語プログラム10を入力してその中のル
ープ構造を正規化する。すなわち、それ以降のSIMD
化処理を行いやすくするために、様々な形式のループ構
造(SIMD化処理部入力中間言語プログラム10中の
ループ構造)を正規化されたループ構造に変換する。
【0037】添字式解析部12は、ループ正規化処理部
11によって正規化されたループ構造のループ本体中の
配列要素参照における配列添字式とループ制御変数との
関係を調査することによって非アラインアクセスの有無
を解析し、その解析結果(非アラインアクセスの有無を
示唆する情報)を示す配列添字式情報を添字式情報テー
ブル13に登録する。
【0038】SIMD命令置換部14は、配列要素に対
する演算処理がSIMD命令セットを用いて行われるよ
うに、ループ本体での演算処理の中間コードおよびルー
プ繰り返し制御部分の中間コードを修正する。
【0039】非アラインアクセス処理部15は、添字式
情報テーブル13に登録された添字式情報を参照するこ
とで、SIMD演算の対象となる主記憶上の配列要素の
うち非アラインアクセスとなる部分を認識し、配列要素
参照時のアドレスのワード境界からの変位を計算するこ
とでループ中におけるワード境界から開始しない主記憶
領域に対するワードアクセスをワード境界に沿った主記
憶領域に対するワードアクセスに変換し、非アラインア
クセスの部分をアラインアクセス命令の組とシフト命令
および論理演算命令との組合せに変換する。
【0040】メモリアクセス最適化処理部16は、主記
憶アクセス回数を削減するために、ループ本体の中間コ
ードに対し、ループアイテレーション内およびループア
イテレーション間にわたる最適化処理を施し、SIMD
化処理部出力中間言語プログラム17を出力する。すな
わち、非アラインアクセス処理部15の出力結果に対
し、主記憶領域に対する定義・引用関係をループアイテ
レーション内およびループアイテレーション間にまたが
って解析し、同一主記憶領域へのアクセスをレジスタヘ
のアクセスで置き換えることで主記憶領域に対するワー
ドアクセス回数の削減を行う。
【0041】なお、メモリアクセス最適化処理部16が
存在しなくても本発明の実現は可能である(ただし、こ
の場合には、主記憶アクセス回数の削減という効果は得
られない)。また、添字式解析部12の解析の手法は、
当該ループ構造中で参照される配列要素データ領域の実
行時における主記憶上での配置を調査して非アラインア
クセスの有無を解析するものであれば、ループ本体中の
配列要素参照における配列添字式とループ制御変数との
関係の調査に基づく解析には限定されない。
【0042】図2は、SIMD化処理部7の処理を示す
流れ図である。この処理は、SIMD化処理部入力中間
言語プログラム入力ステップ201と、ループ構造正規
化ステップ202と、配列要素参照検出ステップ203
と、ループ制御変数線形式表現可否判定ステップ204
と、第1配列添字式情報登録ステップ205と、第2配
列添字式情報登録ステップ206と、配列要素参照終了
判定ステップ207と、ループ構造検出ステップ208
と、SIMD化可否判定ステップ209と、ループ構造
SIMD化ステップ210と、ループ構造終了判定ステ
ップ211と、非アラインアクセス有無判定ステップ2
12と、命令列置換ステップ213と、主記憶アクセス
回数削減最適化ステップ214と、SIMD化処理部出
力中間言語プログラム出力ステップ215とからなる。
【0043】次に、以上のような形態を有する本発明の
コンパイル方式の動作について説明する。
【0044】初めに、図1(a)に示すコンパイラ2の
処理の概略について説明する。
【0045】コンパイラ2内の構文解析部3は、与えら
れた原始プログラム1の構文を解析して中間コードと呼
ばれる内部形式に変換し、その変換結果(中間言語プロ
グラム)を最適化処理部4内のスカラ最適化処理部6に
渡す。
【0046】スカラ最適化処理部6は、渡された中間言
語プログラムに対し、定数伝搬,複写伝搬,演算強度軽
減,および共通部分式削除等のSIMD化以外の最適化
処理を行う。これらの各種最適化手法については、例え
ば、“CompilersPrinciples,Te
chniques,and Tools”(A.V.A
hoほか,1986年,Addison−Wesley
Publishers)の第9章および第10章に述
べられている。
【0047】スカラ最適化処理部6は、最適化を施した
中間言語プログラム(この中間言語プログラムが図1
(b)中のSIMD化処理部入力中間言語プログラム1
0に該当する)をSIMD化処理部7に渡す。
【0048】SIMD化処理部7は、中間言語プログラ
ムからSIMD化の可能なループ構造を探し、それらを
SIMD命令セットを用いたループ構造に変換し、変換
後のループ構造を有する中間言語プログラム(この中間
言語プログラムが図1(b)中のSIMD化処理部出力
中間言語プログラム17に該当する)を後処理部8に渡
す。なお、SIMD化処理部7の内部の動作について
は、後述する。
【0049】後処理部8は、SIMD化後の中間言語プ
ログラムに対して更なるコード最適化を試み、その処理
結果をコード生成部5に渡す。
【0050】コード生成部5は、ターゲット計算機に関
する情報に基づき、与えられた中間言語プログラムをタ
ーゲット計算機の命令列の集合である目的プログラム9
に変換し、その目的プログラム9を出力する。
【0051】次に、図1(b)および図2を参照して、
SIMD化処理部7の内部の動作について説明する。
【0052】SIMD化処理部7には、SIMD化以外
の最適化が行われた中間言語プログラム(SIMD化処
理部入力中間言語プログラム10)が入力され、以下に
示すような処理が行われる(図2参照)。
【0053】まず、ループ正規化処理部11は、SIM
D化処理部入力中間言語プログラム10を入力し(ステ
ップ201)、その中の各ループ構造を正規化する(ス
テップ202)。ここで、「ループ構造の正規化」と
は、「当該ループ構造が1つのループ制御変数を持ち、
そのループ制御変数の初期値が0になり、ループ繰り返
し毎の増分値が1になる」ようにループ構造を変換する
処理をいう。
【0054】なお、ループ正規化処理部11は、ループ
制御変数を持たないループ構造に対しては、初期値0で
増分値1の変数を新たに導入し、それをループ制御変数
とみなす。
【0055】ループ正規化処理部11は、ループ正規化
処理が施された中間コードを添字式解析部12に渡す。
【0056】添字式解析部12は、ループ本体の中間コ
ード群から配列要素を参照している部分(配列要素参
照)を検出し(ステップ203)、検出した各配列要素
参照について(ステップ207参照)、それぞれの参照
時の配列添字式をループ制御変数の線形式で表現できる
か否かを調査する(ステップ204)。
【0057】添字式解析部12は、ステップ204で
「線形式で表現可能」と判定した場合には、当該配列要
素参照とその添字式の線形式との組を示す配列添字式情
報を添字式情報テーブル13に登録する(ステップ20
5)。
【0058】一方、添字式解析部12は、ステップ20
4で「線形式で表現不可能」と判定した場合には、当該
配列要素参照は非線形式である旨を示す配列添字式情報
を添字式情報テーブル13に登録する(ステップ20
6)。
【0059】添字式解析部12は、上記の添字式解析の
後に、中間言語プログラムをSIMD命令置換部14に
渡す。
【0060】SIMD命令置換部14は、まず、当該中
間言語プログラム中のループ構造を探し出し(ステップ
208)、各ループ構造について(ステップ211参
照)、当該ループ構造がSIMD化可能であるか否かを
判定する(ステップ209)。この判定は次の3つの段
階で行われる。
【0061】第1に、ループからの途中脱出の構造やル
ープ内の制御構造を調べ、当該ループ構造の全ての制御
構造がSIMD命令セットに適合可能であるか否かを判
断する。実現不可能な場合には、当該ループ構造のSI
MD化を行わない。
【0062】第2に、添字式情報テーブル13に登録さ
れている配列添字式情報を参照し、ループ本体内の各配
列要素参照の添字式が全てループ制御変数の線形式で表
現されるか否かを判断する。非線形式が含まれる場合に
は、当該ループのSIMD化を行わない。また、線形式
であっても、ループ制御変数に対する係数が1以外の場
合には、ターゲット計算機の備えるSIMD命令セット
に適合可能であるか否かを調査する。この調査で不適合
の場合には、当該ループ構造のSIMD化を行わない。
【0063】第3に、ループ内の単純変数および配列変
数の定義と引用との関係を解析し、SIMD化による変
数の定義・引用順序の変化によってプログラムの実行結
果が変化しないかどうかを調査する。この調査には、デ
ータ依存関係解析と呼ばれる従来からの手法を適用する
ことができる。データ依存関係解析の手法に関しては、
例えば、“Supercompilers for P
arallel and Vector Comput
ers”(H.Zimaほか,1991年,Addis
on−Wesley Publishing Comp
any)の第4章に述べられている。データ依存関係解
析の結果、プログラムの実行結果が変化してしまうこと
が判明した場合には、当該ループ構造のSIMD化を行
わない。
【0064】SIMD命令置換部14は、以上の3つの
段階における条件を全て満たしている場合には、当該ル
ープ構造はSIMD化可能であると判定し、SIMD化
可能と判定した各ループ構造に対し、「ループがSIM
D並列度分だけ展開され、ループ本体中ではSIMD並
列度分の配列要素に対してSIMD命令セットを用いた
演算処理を行う」ように、中間コードを変換する(ステ
ップ210)。
【0065】SIMD命令置換部14は、全てのループ
構造についてステップ208〜ステップ210の処理を
終了すると(ステップ211参照)、ステップ210で
SIMD化されたループ構造を有する中間言語プログラ
ムを非アラインアクセス処理部15に渡す。
【0066】非アラインアクセス処理部15は、SIM
D化された各ループ構造の中を走査し、SIMD命令セ
ットによる配列要素参照がアラインアクセスになってい
るか否か(非アラインアクセスが存在しないかどうか)
を調査する(ステップ212)。与えられた配列要素参
照がアラインアクセスか否かは、添字式情報テーブル1
3に登録されている配列添字式情報と、配列全体の主記
憶上での配置,配列要素サイズ,およびターゲット計算
機のワードサイズとを基に、判定する。
【0067】非アラインアクセス処理部15は、ステッ
プ212で「非アラインアクセスが存在する」と判定し
た場合には、中間コード中の当該非アラインアクセス命
令を、参照すべき配列要素群を含む隣接2ワードヘのア
ラインアクセス命令とシフト命令および論理演算命令と
からなる一連の命令列に置き換える(ステップ21
3)。この処理の結果、SIMD化されたループ構造中
の配列要素参照は、全てアラインアクセスとなる。
【0068】非アラインアクセス処理部15は、ステッ
プ213の処理後の中間言語プログラム(ステップ21
2で「非アラインアクセスが存在しない」と判定されて
ステップ213の処理が行われなかった中間言語プログ
ラムを含む)をメモリアクセス最適化処理部16に渡
す。
【0069】メモリアクセス最適化処理部16は、SI
MD化された各ループ構造の中を走査し、ループ本体で
の配列要素参照に伴う主記憶アクセス回数を削減するよ
うに、中間コードに対して最適化処理を施す(ステップ
214)。すなわち、ループアイテレーション内および
ループアイテレーション間で主記憶上の同一ワードをア
クセスする場合には、そのワードを保持するためのレジ
スタを確保し、主記憶上のワードに対するアクセスに代
えてこのレジスタに対するアクセスを行うようにループ
構造の中間コードを変換する。
【0070】最後に、メモリアクセス最適化処理部16
は、ステップ214の処理後の中間言語プログラム(S
IMD化処理部出力中間言語プログラム17)を出力す
る(ステップ215)。
【0071】次に、本発明の他の実施の形態について、
図23を参照して説明する。
【0072】図23を参照すると、本発明の他の実施の
形態は、所定のプログラム(図1に示す実施の形態にお
けるSIMD化処理部7を実現するためのプログラム)
を記録した記録媒体101と、データ処理装置102と
を備える。この記録媒体101は、磁気ディスク、半導
体メモリその他の記録媒体であってよい。
【0073】当該所定のプログラムは、記録媒体101
からデータ処理装置102に読み込まれ、データ処理装
置102の動作を制御する。データ処理装置102は、
当該所定のプログラムの制御により、SIMD化処理部
入力中間言語プログラム10に対して、第1の実施の形
態で述べたSIMD化処理部7の処理(図1(b)中の
ループ正規化処理部11,添字式解析部12,添字式情
報テーブル13,SIMD命令置換部14,非アライン
アクセス処理部15,およびメモリアクセス最適化処理
部16によって実現される処理)を実行し、SIMD化
処理部出力中間言語プログラム17を出力する。
【0074】
【実施例】次に、上記のような実施の形態(図1に示す
実施の形態)を有する本発明のコンパイル方式の一実施
例について詳細に説明する。
【0075】本実施例のコンパイル方式は、図9に示す
Cプログラムを原始プログラム1として用いる場合にお
ける、図1(a)および(b)に示す構成を有するコン
パイル方式である。
【0076】以下に、このような本実施例のコンパイル
方式の動作について説明する。
【0077】構文解析部3による構文解析処理および最
適化処理部4内のスカラ最適化処理部6によるスカラ最
適化処理を経た後に、SIMD化処理部7には、図11
のような中間言語プログラム(SIMD化処理部入力中
間言語プログラム10)が与えられる。
【0078】ここで、tn (nは正整数)は中間項であ
り、adrs(A)は配列変数Aの先頭アドレスであ
り、mem16(tn )は中間項tn の値を開始アドレ
スとする主記憶上の16ビット長データ領域の内容であ
り、if−gotoは条件式の値が真の場合のみ指定ラ
ベルに分岐する条件分岐命令である。図11において、
中間項t1 はループ制御変数として使われている。ま
た、同図の第1列目の番号は、説明のために中間コード
の各命令に付された命令番号である。
【0079】ループ正規化処理部11の処理を経た後
に、添字式解析部12によって、図12のような配列添
字式情報が添字式情報テーブル13に登録される。ここ
で、図12中の「命令番号」は図11中の配列要素参照
命令に対する番号であり、「係数Ci」および「係数C
d」は配列添字式をループ制御変数の線形式で表現した
場合のループ制御変数に対する係数および定数項の値
(単位:バイト)である。
【0080】本実施例では、原始プログラム1中に記述
された配列添字式そのものではなく、中間コード上で配
列要素をアクセスする際のアドレス式、すなわち実効ア
ドレスを基にした配列添字式情報が収集されている。
【0081】例えば、図11中の命令番号6に対応する
配列要素参照の実効アドレスはadrs(A)+t1
2であるが、このうちadrs(A)は配列の先頭アド
レスであり、t1 *2が先頭アドレスからの変位であ
る。そこで、t1 *2が配列添字式情報とみなされ、係
数Ciの値として2が登録され、係数Cdの値として0
が登録される。
【0082】同様に、命令番号13に対する配列要素参
照の実効アドレスはadrs(A)+t1 *2+2であ
るが、このうち配列先頭アドレスからの変位はt1 *2
+2であるから、係数Ci=2および係数Cd=2なる
配列添字式情報が添字式情報テーブル13に登録され
る。
【0083】次に、SIMD命令置換部14によって、
与えられた中間コードに対してSIMD化処理が施さ
れ、図13に示すような、SIMD化された中間言語プ
ログラムが生成される。ここで、s6 ,s13,およびs
14はSIMDデータ型の中間項である。また、SIMD
要素データ型は16ビット長であり、SIMD並列度は
4であり、SIMD化前の中間コードにおけるループア
イテレーション4回分がSIMD化後は1回のループア
イテレーションで実行される。
【0084】非アラインアクセス処理部15によって
は、まず、中間言語プログラム上でループ本体中の非ア
ラインアクセス命令が探される。各配列要素参照がアラ
インアクセスであるか否かは、添字式情報テーブル13
に登録された配列添字式情報を調べることにより判定さ
れる。
【0085】主記憶上で配列変数が配置される領域の先
頭アドレスは、通常、ワード境界に沿っている。したが
って、配列先頭アドレスからの変位がワードサイズの倍
数、すなわち4の倍数であれば、その配列要素参照はア
ラインアクセスである。図12に示した添字式情報テー
ブル13を参照すれば、命令番号6に対する配列要素参
照は係数Cdの値が0であり、この配列要素参照がアラ
インアクセスであることがわかる。一方、命令番号13
に対する配列要素参照は係数Cdの値が2であり、この
配列要素参照は非アラインアクセスであると判断でき
る。
【0086】次に、非アラインアクセス処理部16によ
って、非アラインアクセスとなる各配列要素参照の中間
コードが、主記憶へのアラインアクセスとシフト命令お
よび論理演算命令とを組み合わせた中間コードに置き換
えられる。
【0087】非アラインアクセスがロードの場合とスト
アの場合とで、置き換えられる中間コードの形態が異な
る。先の例では、図13中の命令番号7から命令番号1
3までの部分が非アラインアクセスとなる主記憶からの
ロードに該当する。
【0088】非アラインアクセス処理部15によって、
この部分(命令番号7から命令番号13までの部分)が
図14の命令番号100から命令番号117までの部分
で置き換えられる。係数Cdの値が上記と異なる場合に
も、図14における命令番号112および命令番号11
4の定数値(これらを各々定数LSLおよび定数LSR
とする)を適切に選ぶことで、上記と同様の中間コード
に置換することができる。係数Cdの値と定数LSLお
よび定数LSRとの関係を図15に示す。
【0089】主記憶へのストアが非アラインアクセスと
なっている場合には、「一旦主記憶からワード境界に沿
って隣接2ワードをロードし、それらに対してストア処
理を施した後、再度ワード境界に沿って主記憶にストア
する」ような中間コードに置き換えられる。
【0090】例えば、図13中の命令番号15から命令
番号21までの部分は、図18における命令番号200
から命令番号233までの部分で置き換えられる。図1
8において、命令番号205,207,222,および
224で用いられる定数(これらを順に定数SML,S
SL,SMR,およびSSRとする)の値は、非アライ
ンアクセスとなるストア命令に対する配列添字式情報の
係数Cdの値に応じて図19のように定められる。
【0091】非アラインアクセス処理部15によって出
力される中間言語プログラムでは、SIMD化されたル
ープ構造内の配列要素参照は全てアラインアクセスに置
き換えられている。
【0092】メモリアクセス最適化部16によって、こ
のような中間言語プログラムに対し、主記憶アクセス回
数を減らすような最適化処理が施される。この処理は、
ループアイテレーション内での最適化と、ループアイテ
レーション間にまたがる最適化との、2段階で行われ
る。
【0093】ループアイテレーション内の最適化では、
主記憶アクセスに関するデータフローの最適化がループ
本体内で行われる。ループアイテレーション内の最適化
を施す前のループの流れ図を、図16に示す。「ループ
本体の演算処理」ステップ81において主記憶に対する
アラインアクセスが行われている。
【0094】ループアイテレーション内の最適化は、
「ループ本体の演算処理」ステップ81をロード・スト
ア処理とレジスタ間演算処理とに分離することによって
行われる。すなわち、図17の流れ図に示すようなルー
プとなるように、中間コードが変換される。
【0095】図17に示す処理では、ループアイテレー
ションの最初でアクセス対象の主記憶上のワードがレジ
スタにロードされ(ステップ90参照)、ループ内では
主記憶ワードに代えて上記のレジスタにアクセスされ
(ステップ91参照)、ループアイテレーションの終わ
りでレジスタの内容が主記憶にストアされる(ステップ
92参照)。
【0096】その後、無用な主記憶アクセス、例えばロ
ードされるだけでストアされないワードに対するループ
アイテレーション最後のストア命令や、ストアされるだ
けでロードされないワードに対するループアイテレーシ
ョン最初のロード命令が、削除される。図13,図1
4,および図18に示した中間言語プログラムに対し
て、ループアイテレーション内の最適化が施されると、
図20のようになる。ループアイテレーション内の最適
化の結果、主記憶へのアラインアクセスはループ本体の
最初と最後とに集中して行われるようになる。
【0097】ループアイテレーション間にまたがる最適
化では、まず、ループ本体内で定義・引用されている主
記憶ワードとその添字式に関する情報とが収集される。
次に、一旦レジスタ上にロードされた値をループアイテ
レーション間で受け渡して再利用するように、中間コー
ドが修正される。この処理内容について、以下で更に詳
しく説明する。
【0098】ループ内での配列Aに対するアクセスを最
適化することを考える。SIMD要素データ型のサイズ
を16ビットとしSIMDデータ型のサイズを64ビッ
トとすると、配列Aは図21に示すように配置され、A
[0]〜A[3],A[4]〜A[7],およびA
[8]〜A[11]のように4要素ずつまとめて主記憶
とレジスタとの間でロード・ストアされる。
【0099】配列Aと同じ主記憶領域上で、要素のサイ
ズが64ビットである配列A′を考え、A[0]〜A
[3],A[4]〜A[7],およびA[8]〜A[1
1]に対応する部分を順にA′[0],A′[1],お
よびA′[2]とすると、SIMD化されたループでは
ループアイテレーション毎に配列A′の要素を順にアク
セスしているとみなせる。
【0100】ループ本体内での配列A′の要素の定義・
引用関係が調査され、J番目のループアイテレーション
の実行が完了した時点で、A′[J+n]の最新値を保
持している中間項sn ′が求められる。ここで、nは整
数である。そして、ループアイテレーションの先頭で中
間項sn ′がA′[J+n−1]の値を保持していると
いう条件下で、再度ループアイテレーション内の主記憶
アクセスの最適化が行われる。
【0101】さらに、J番目のループアイテレーション
中でA′[J+n]の引用および定義とA′[J+n+
1]の定義とがある場合には、A′[J+n+1]に定
義される値は中間項によって次ループアイテレーション
のA′[J+n]に引き継がれるため、A′[J+n+
1]の定義が削除される。
【0102】図20の中間言語プログラムの例に対して
ループアイテレーション間の最適化が施されると、図2
2のようになる。
【0103】
【発明の効果】以上説明したように、本発明によると、
以下に示すような効果が生じる。
【0104】第1の効果は、ターゲット計算機が主記憶
に対する非アラインアクセス命令を備えていない場合で
も、SIMD化手法を適用してプログラムの実行速度を
向上できることである。このような効果が生じる理由
は、SIMD化対象のループ中の配列要素参照がアライ
ンアクセスになるか否かを判定し、非アラインアクセス
命令列を適切なアラインアクセス命令列に変換するため
である。
【0105】第2の効果は、主記憶アクセス回数を減少
させることにより、プログラムの実行速度を向上できる
ことである。この効果は、主記憶に対する非アラインア
クセスが多く存在する場合には、特に顕著となる。
【図面の簡単な説明】
【図1】本発明のコンパイル方式の実施の形態の構成を
示すブロック図である。
【図2】図1中のSIMD化処理部の処理を示す流れ図
である。
【図3】SIMD型データの構造を示す図である。
【図4】SIMD型データに対する加算処理を示す図で
ある。
【図5】アラインアクセスだけを行う原始プログラムの
一例を示す図である。
【図6】アラインアクセス時のデータの流れを示す図で
ある。
【図7】ベクトル処理のデータの流れを示す図である。
【図8】非アラインアクセスを説明するための図であ
る。
【図9】非アラインアクセスを含む演算を行う原始プロ
グラムの一例を示す図である。
【図10】ワード境界をまたぐデータに対してアライン
アクセスを行う場合の処理を示す図である。
【図11】図9の原始プログラムに対するスカラ最適化
が施された直後の中間言語プログラムを示す図である。
【図12】図11に示す中間言語プログラムから収集さ
れた配列添字式情報を示す図である。
【図13】図11に示す中間言語プログラムがSIMD
命令置換部によって処理された結果を示す図である。
【図14】図13中の非アラインアクセス部分が非アラ
インアクセス処理部によって処理れた結果を示す図であ
る。
【図15】非アラインアクセスとなるロード命令の処理
に際して非アラインアクセス処理部が用いる定数値を示
す図である。
【図16】ループアイテレーション内の最適化を施す前
のループ構造の処理内容を示す流れ図である。
【図17】ループアイテレーション内の最適化を施した
後のループ構造の処理内容を示す流れ図である。
【図18】図13中の非アラインアクセス部分が非アラ
インアクセス処理部によって処理された結果を示す図で
ある。
【図19】非アラインアクセスとなるストア命令の処理
に際して非アラインアクセス処理部が用いる定数値を示
す図である。
【図20】図13に示す中間言語プログラムに対するル
ープアイテレーション内最適化が施された結果を示す図
である。
【図21】主記憶上に配置された配列データとSIMD
型データとの対応を示す図である。
【図22】図20に示す中間言語プログラムに対するル
ープアイテレーション間最適化が施された結果を示す図
である。
【図23】本発明の他の実施の形態の構成を示すブロッ
ク図である。
【符号の説明】
1 原始プログラム 2 コンパイラ 3 構文解析部 4 最適化処理部 5 コード生成部 6 スカラ最適化処理部‘ 7 SIMD化処理部 8 後処理部 9 目的プログラム 10 SIMD化処理部入力中間言語プログラム 11 ループ正規化処理部 12 添字式解析部 13 添字式情報テーブル 14 SIMD命令置換部 15 非アラインアクセス処理部 16 メモリアクセス最適化処理部 17 SIMD化処理部出力中間言語プログラム 20 SIMD型データ 21,22,23,24 SIMD要素型データ 30,31,37,70,71,72 レジスタ 32 SIMD加算器 33,34,35,36 SIMD要素加算器 40,41,42,50,51 部分配列 52 ベクトル計算機 53,54,55 ベクトルレジスタ 56 ベクトル演算器 57 配列領域 60,61,62,63,64,65,66,67 配
列要素 101 記録媒体 102 データ処理装置

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 構文解析部,最適化処理部,およびコー
    ド生成部を有するコンパイラ内の最適化処理部におい
    て、 SIMD化処理部入力中間言語プログラムを入力してそ
    の中のループ構造を正規化するループ正規化処理部と、 前記ループ正規化処理部によって正規化されたループ構
    造における非アラインアクセスの有無を解析し、その解
    析結果を示す配列添字式情報を添字式情報テーブルに登
    録する添字式解析部と、 配列要素に対する演算処理がSIMD命令セットを用い
    て行われるように、ループ本体での演算処理の中間コー
    ドおよびループ繰り返し制御部分の中間コードを修正す
    るSIMD命令置換部と、 前記添字式情報テーブルに登録された添字式情報を参照
    することで、SIMD演算の対象となる主記憶上の配列
    要素のうち非アラインアクセスとなる部分を認識し、配
    列要素参照時のアドレスのワード境界からの変位を計算
    することでループ中におけるワード境界から開始しない
    主記憶領域に対するワードアクセスをワード境界に沿っ
    た主記憶領域に対するワードアクセスに変換すること
    で、非アラインアクセスの部分をアラインアクセス命令
    とシフト命令および論理演算命令との組合せに変換する
    非アラインアクセス処理部とを備えることを特徴とする
    コンパイル方式。
  2. 【請求項2】 前記ループ正規化処理部によって正規化
    されたループ構造のループ本体中の配列要素参照におけ
    る配列添字式とループ制御変数との関係を調査すること
    によって非アラインアクセスの有無を解析する前記添字
    式解析部を有することを特徴とする請求項1記載のコン
    パイル方式。
  3. 【請求項3】 主記憶アクセス回数を削減するために、
    ループ本体の中間コードに対し、ループアイテレーショ
    ン内の最適化処理およびループアイテレーション間にわ
    たる最適化処理を施す前記メモリアクセス最適化処理部
    を有することを特徴とする請求項1または請求項2記載
    のコンパイル方式。
  4. 【請求項4】 構文解析部,最適化処理部,およびコー
    ド生成部を有するコンパイラ内の最適化処理部の処理を
    実行させるためのプログラムを記録した記録媒体におい
    て、 SIMD化処理部入力中間言語プログラムを入力してそ
    の中のループ構造を正規化するループ正規化処理部の処
    理と、 前記ループ正規化処理部によって正規化されたループ構
    造における非アラインアクセスの有無を解析し、その解
    析結果を示す配列添字式情報を添字式情報テーブルに登
    録する添字式解析部の処理と、 配列要素に対する演算処理がSIMD命令セットを用い
    て行われるように、ループ本体での演算処理の中間コー
    ドおよびループ繰り返し制御部分の中間コードを修正す
    るSIMD命令置換部の処理と、 前記添字式情報テーブルに登録された添字式情報を参照
    することで、SIMD演算の対象となる主記憶上の配列
    要素のうち非アラインアクセスとなる部分を認識し、配
    列要素参照時のアドレスのワード境界からの変位を計算
    することでループ中におけるワード境界から開始しない
    主記憶領域に対するワードアクセスをワード境界に沿っ
    た主記憶領域に対するワードアクセスに変換すること
    で、非アラインアクセスの部分をアラインアクセス命令
    とシフト命令および論理演算命令との組合せに変換する
    非アラインアクセス処理部の処理とをコンピュータに実
    行させるためのプログラムを記録した記録媒体。
  5. 【請求項5】 前記ループ正規化処理部によって正規化
    されたループ構造のループ本体中の配列要素参照におけ
    る配列添字式とループ制御変数との関係を調査すること
    によって非アラインアクセスの有無を解析する前記添字
    式解析部の処理をコンピュータに実行させるためのプロ
    グラムを記録した請求項4記載の記録媒体。
  6. 【請求項6】 主記憶アクセス回数を削減するために、
    ループ本体の中間コードに対し、ループアイテレーショ
    ン内の最適化処理およびループアイテレーション間にわ
    たる最適化処理を施す前記メモリアクセス最適化処理部
    の処理をコンピュータに実行させるためのプログラムを
    記録した請求項4または請求項5記載の記録媒体。
JP9047283A 1997-02-14 1997-02-14 コンパイル方式 Pending JPH10228382A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP9047283A JPH10228382A (ja) 1997-02-14 1997-02-14 コンパイル方式
US09/108,387 US6113650A (en) 1997-02-14 1998-07-01 Compiler for optimization in generating instruction sequence and compiling method

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP9047283A JPH10228382A (ja) 1997-02-14 1997-02-14 コンパイル方式
US09/108,387 US6113650A (en) 1997-02-14 1998-07-01 Compiler for optimization in generating instruction sequence and compiling method

Publications (1)

Publication Number Publication Date
JPH10228382A true JPH10228382A (ja) 1998-08-25

Family

ID=26387452

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9047283A Pending JPH10228382A (ja) 1997-02-14 1997-02-14 コンパイル方式

Country Status (2)

Country Link
US (1) US6113650A (ja)
JP (1) JPH10228382A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509634B2 (en) 2002-11-12 2009-03-24 Nec Corporation SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
JP2011154523A (ja) * 2010-01-27 2011-08-11 Nec Corp コンパイル方法、コンパイラおよびベクトル計算機
CN113918541A (zh) * 2021-12-13 2022-01-11 广州市玄武无线科技股份有限公司 预热数据处理方法、装置及计算机可读存储介质

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3505266B2 (ja) * 1995-06-15 2004-03-08 三洋電機株式会社 プログラム実行装置
JP2001125915A (ja) * 1999-10-28 2001-05-11 Fujitsu Ltd 情報検索装置
US20020178148A1 (en) * 2001-03-30 2002-11-28 Jonathan Sobel Source-level threads
US6721943B2 (en) * 2001-03-30 2004-04-13 Intel Corporation Compile-time memory coalescing for dynamic arrays
US7032215B2 (en) * 2001-10-11 2006-04-18 Intel Corporation Method and system for type demotion of expressions and variables by bitwise constant propagation
JP2004021425A (ja) * 2002-06-13 2004-01-22 Hitachi Ltd コンパイラにおけるメモリ配置方式
US20040006667A1 (en) * 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
JP3847672B2 (ja) * 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US8549501B2 (en) 2004-06-07 2013-10-01 International Business Machines Corporation Framework for generating mixed-mode operations in loop-level simdization
US7478377B2 (en) 2004-06-07 2009-01-13 International Business Machines Corporation SIMD code generation in the presence of optimized misaligned data reorganization
US7367026B2 (en) * 2004-06-07 2008-04-29 International Business Machines Corporation Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization
US7475392B2 (en) * 2004-06-07 2009-01-06 International Business Machines Corporation SIMD code generation for loops with mixed data lengths
US7395531B2 (en) * 2004-06-07 2008-07-01 International Business Machines Corporation Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements
US7386842B2 (en) * 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US7823169B1 (en) 2004-10-28 2010-10-26 Wheeler Thomas T Performing operations by a first functionality within a second functionality in a same or in a different programming language
US8266631B1 (en) 2004-10-28 2012-09-11 Curen Software Enterprises, L.L.C. Calling a second functionality by a first functionality
US7774789B1 (en) 2004-10-28 2010-08-10 Wheeler Thomas T Creating a proxy object and providing information related to a proxy object
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法
US7797688B1 (en) 2005-03-22 2010-09-14 Dubagunta Saikumar V Integrating applications in multiple languages
US7861212B1 (en) 2005-03-22 2010-12-28 Dubagunta Saikumar V System, method, and computer readable medium for integrating an original application with a remote application
US8578349B1 (en) 2005-03-23 2013-11-05 Curen Software Enterprises, L.L.C. System, method, and computer readable medium for integrating an original language application with a target language application
JP2006338616A (ja) * 2005-06-06 2006-12-14 Matsushita Electric Ind Co Ltd コンパイラ装置
US7730463B2 (en) * 2006-02-21 2010-06-01 International Business Machines Corporation Efficient generation of SIMD code in presence of multi-threading and other false sharing conditions and in machines having memory protection support
US7810140B1 (en) 2006-05-23 2010-10-05 Lipari Paul A System, method, and computer readable medium for processing a message in a transport
US7844759B1 (en) 2006-07-28 2010-11-30 Cowin Gregory L System, method, and computer readable medium for processing a message queue
US8156310B2 (en) * 2006-09-11 2012-04-10 International Business Machines Corporation Method and apparatus for data stream alignment support
US8505002B2 (en) * 2006-09-29 2013-08-06 Arm Limited Translation of SIMD instructions in a data processing system
JPWO2008072334A1 (ja) * 2006-12-14 2010-03-25 富士通株式会社 コンパイル方法及びコンパイラ
US7660777B1 (en) 2006-12-22 2010-02-09 Hauser Robert R Using data narrowing rule for data packaging requirement of an agent
US7660780B1 (en) 2006-12-22 2010-02-09 Patoskie John P Moving an agent from a first execution environment to a second execution environment
US9311141B2 (en) 2006-12-22 2016-04-12 Callahan Cellular L.L.C. Survival rule usage by software agents
US7702603B1 (en) 2006-12-22 2010-04-20 Hauser Robert R Constructing an agent that utilizes a compiled set of canonical rules
US8200603B1 (en) 2006-12-22 2012-06-12 Curen Software Enterprises, L.L.C. Construction of an agent that utilizes as-needed canonical rules
US7970724B1 (en) 2006-12-22 2011-06-28 Curen Software Enterprises, L.L.C. Execution of a canonical rules based agent
US7664721B1 (en) 2006-12-22 2010-02-16 Hauser Robert R Moving an agent from a first execution environment to a second execution environment using supplied and resident rules
US8423496B1 (en) 2006-12-22 2013-04-16 Curen Software Enterprises, L.L.C. Dynamic determination of needed agent rules
US7702602B1 (en) 2006-12-22 2010-04-20 Hauser Robert R Moving and agent with a canonical rule from one device to a second device
US7949626B1 (en) 2006-12-22 2011-05-24 Curen Software Enterprises, L.L.C. Movement of an agent that utilizes a compiled set of canonical rules
US7702604B1 (en) 2006-12-22 2010-04-20 Hauser Robert R Constructing an agent that utilizes supplied rules and rules resident in an execution environment
US7860517B1 (en) 2006-12-22 2010-12-28 Patoskie John P Mobile device tracking using mobile agent location breadcrumbs
US8132179B1 (en) 2006-12-22 2012-03-06 Curen Software Enterprises, L.L.C. Web service interface for mobile agents
US7698243B1 (en) 2006-12-22 2010-04-13 Hauser Robert R Constructing an agent in a first execution environment using canonical rules
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US7962906B2 (en) * 2007-03-15 2011-06-14 International Business Machines Corporation Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data
CN101452394B (zh) * 2007-11-28 2012-05-23 无锡江南计算技术研究所 编译方法和编译器
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8732437B2 (en) * 2010-01-26 2014-05-20 Oracle America, Inc. Low-overhead misalignment and reformatting support for SIMD
US8959501B2 (en) * 2010-12-14 2015-02-17 Microsoft Corporation Type and length abstraction for data types
WO2013048379A1 (en) * 2011-09-27 2013-04-04 Intel Corporation Expediting execution time memory aliasing checking
US8984499B2 (en) 2011-12-15 2015-03-17 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a blend table
US9582332B2 (en) * 2012-08-31 2017-02-28 Intel Corporation Enabling a cloud to effectively assign workloads to servers
US9342284B2 (en) * 2013-09-27 2016-05-17 Intel Corporation Optimization of instructions to reduce memory access violations
US9501268B2 (en) * 2013-12-23 2016-11-22 International Business Machines Corporation Generating SIMD code from code statements that include non-isomorphic code statements
US9529622B1 (en) * 2014-12-09 2016-12-27 Parallel Machines Ltd. Systems and methods for automatic generation of task-splitting code
US10169010B2 (en) 2016-06-01 2019-01-01 International Business Machines Corporation Performing register promotion optimizations in a computer program in regions where memory aliasing may occur and executing the computer program on processor hardware that detects memory aliasing
US10169009B2 (en) 2016-06-01 2019-01-01 International Business Machines Corporation Processor that detects memory aliasing in hardware and assures correct operation when memory aliasing occurs
US9934009B2 (en) * 2016-06-01 2018-04-03 International Business Machines Corporation Processor that includes a special store instruction used in regions of a computer program where memory aliasing may occur
JP2018124877A (ja) * 2017-02-02 2018-08-09 富士通株式会社 コード生成装置、コード生成方法、およびコード生成プログラム
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
CN117234514B (zh) * 2023-11-08 2024-02-23 睿思芯科(深圳)技术有限公司 将标量化程序转换为向量化程序的方法、系统及相关设备

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274818A (en) * 1992-02-03 1993-12-28 Thinking Machines Corporation System and method for compiling a fine-grained array based source program onto a course-grained hardware
US5475842A (en) * 1993-08-11 1995-12-12 Xerox Corporation Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution
US5704053A (en) * 1995-05-18 1997-12-30 Hewlett-Packard Company Efficient explicit data prefetching analysis and code generation in a low-level optimizer for inserting prefetch instructions into loops of applications
US5649179A (en) * 1995-05-19 1997-07-15 Motorola, Inc. Dynamic instruction allocation for a SIMD processor
US5696956A (en) * 1995-11-08 1997-12-09 Digital Equipment Corporation Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents
US5819064A (en) * 1995-11-08 1998-10-06 President And Fellows Of Harvard College Hardware extraction technique for programmable reduced instruction set computers
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
US5889985A (en) * 1996-08-07 1999-03-30 Elbrus International Array prefetch apparatus and method
US5995122A (en) * 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509634B2 (en) 2002-11-12 2009-03-24 Nec Corporation SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
JP2011154523A (ja) * 2010-01-27 2011-08-11 Nec Corp コンパイル方法、コンパイラおよびベクトル計算機
CN113918541A (zh) * 2021-12-13 2022-01-11 广州市玄武无线科技股份有限公司 预热数据处理方法、装置及计算机可读存储介质
CN113918541B (zh) * 2021-12-13 2022-04-26 广州市玄武无线科技股份有限公司 预热数据处理方法、装置及计算机可读存储介质

Also Published As

Publication number Publication date
US6113650A (en) 2000-09-05

Similar Documents

Publication Publication Date Title
JPH10228382A (ja) コンパイル方式
Sreraman et al. A vectorizing compiler for multimedia extensions
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US8024718B2 (en) System and method for optimizing source code
US5819064A (en) Hardware extraction technique for programmable reduced instruction set computers
US5696956A (en) Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents
US5586020A (en) Program transformation processing system and method
US8196127B2 (en) Pervasively data parallel information handling system and methodology for generating data parallel select operations
US6035123A (en) Determining hardware complexity of software operations
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
US6571385B1 (en) Early exit transformations for software pipelining
US7509634B2 (en) SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
Schlansker et al. Height reduction of control recurrences for ILP processors
US5999735A (en) Method for constructing a static single assignment language accommodating complex symbolic memory references
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
JP2002527816A (ja) プログラム最適化装置および方法
JP2001125792A (ja) 最適化促進装置
JP5227646B2 (ja) コンパイラ及びそのコード生成方法
JP3196625B2 (ja) 並列化コンパイル方式
Sun et al. Refactoring loops with nested ifs for simd extensions without masked instructions
JP3887097B2 (ja) コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
JPH02176938A (ja) 機械語命令最適化方式
DeVries et al. A vectorizing SUIF compiler