JP2003202991A - プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム - Google Patents

プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム

Info

Publication number
JP2003202991A
JP2003202991A JP2002001092A JP2002001092A JP2003202991A JP 2003202991 A JP2003202991 A JP 2003202991A JP 2002001092 A JP2002001092 A JP 2002001092A JP 2002001092 A JP2002001092 A JP 2002001092A JP 2003202991 A JP2003202991 A JP 2003202991A
Authority
JP
Japan
Prior art keywords
program
assignment
statement
instruction
sub
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.)
Granted
Application number
JP2002001092A
Other languages
English (en)
Other versions
JP2003202991A5 (ja
JP4045802B2 (ja
Inventor
Yorihisa Fujinami
順久 藤波
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.)
Sony Corp
Original Assignee
Sony 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 Sony Corp filed Critical Sony Corp
Priority to JP2002001092A priority Critical patent/JP4045802B2/ja
Publication of JP2003202991A publication Critical patent/JP2003202991A/ja
Publication of JP2003202991A5 publication Critical patent/JP2003202991A5/ja
Application granted granted Critical
Publication of JP4045802B2 publication Critical patent/JP4045802B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 SIMD命令の特徴を活かしたプログラムの
最適化を自動的に行なう。 【解決手段】 高級言語で記述されたソース・プログラ
ムをRTLで中間表現する。その際、同じ演算を異なる
データに適用しているものをみつけてparallel
式を使って1箇所にまとめ、命令セットによるレジスタ
の制約を適用する。次いで、parallel式を使っ
て記述されている代入文のうちSIMD命令1つで処理
できるものを抽出して、それが使用・定義する変数をS
IMDレジスタに対するsubreg式に置換する。S
IMD命令の並列性が余ったときは、ダミーの代入文を
付加してparallel内を1つのSIMD命令に対
応させる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータ上で
実行されるプログラム・コードを処理するプログラム処
理装置及びプログラム処理方法、記憶媒体、並びにコン
ピュータ・プログラムに係り、特に、プログラマによっ
て高級プログラミング言語形式で記述されたソース・コ
ードを、対象とするアーキテクチャが実行可能な命令セ
ットを用いて記述された形式すなわちオブジェクト・コ
ードにコンパイル処理するプログラム処理装置及びプロ
グラム処理方法、記憶媒体、並びにコンピュータ・プロ
グラムに関する。
【0002】さらに詳しくは、本発明は、プログラムの
コンパイル時などにおいて実際の処理効率や処理速度を
向上させるための最適化を行なうプログラム処理装置及
びプログラム処理方法、記憶媒体、並びにコンピュータ
・プログラムに係り、特に、複数のデータを同時に処理
するためのSIMD(Single Instruction/MultipleDa
ta)命令を含んだ命令セットを持つアーキテクチャを対
象としてプログラムの最適化処理を行なうプログラム処
理装置及びプログラム処理方法、記憶媒体、並びにコン
ピュータ・プログラムに関する。
【0003】
【従来の技術】昨今の技術革新に伴い、さまざまなアー
キテクチャのコンピュータ・システムが開発され広汎に
普及している。コンピュータは、コンピュータ可読形式
で記述されたプログラム・コードを実行することによっ
て、産業上のさまざまな制御や適用業務など、所望の処
理を実行することができる。
【0004】コンピュータ・プログラムは、一般に、プ
ログラマによって高級プログラミング言語形式で記述さ
れたソース・コードを、対象とするアーキテクチャが実
行可能な命令セットを用いて記述された形式すなわちオ
ブジェクト・コードに変換すなわちコンパイルして用い
られる。そして、コンパイル処理時には、実際の処理効
率を向上し処理の高速化を実現するために変更を加える
「最適化」を行なうことが多い。
【0005】ところで、近年のマイクロプロセッサのほ
とんどは、SIMD(Single Instruction/Multiple D
ata)型のマルチメディア向け拡張命令(以下、単に
「SIMD命令」とする)を備えている。また、プロセ
ッサ・メーカやサード・パーティーからは、SIMD命
令を使ったコードを生成するコンパイラも提供されてい
る。
【0006】ここで言うSIMD命令とは、同じ演算を
繰り返し実行するような処理を一括して行なえるような
命令のことであり、より具体的には、大きなサイズのオ
ペランドを小さな「サブオペランド」に分割して同種の
演算を一斉に処理する。SIMD命令によれば、1つの
命令で複数のデータに対して同じ種類の演算を一斉に行
うようにして、プロセッサ全体のデータ処理能力を高め
ることができる。したがって、ソース・コード中で、本
来は独立して記述されている同機能の命令を寄せ集めて
SIMD命令に置き換えることにより、コードが持つ冗
長性が削除され、プログラムの最適化を行なうことがで
きる。
【0007】例えば、音声や画像などのマルチメディア
・データに対する処理、あるいは3次元グラフィックス
などにおいては、固定的なフォーマットのデータに対し
て、同じ種類の演算を繰り返し適用することが多い。そ
こで、SIMD命令を用いることによって、多量のデー
タに対して同じ種類の演算を一括して行なうことがで
き、プロセッサ全体のデータ処理能力を高めることがで
きる。
【0008】SIMDで取り扱われるデータの形式や命
令セットは、プロセッサのアーキテクチャごとに異なる
が、一般的には、1つの命令で64ビット(又は128
ビット)のデータを一括して処理を行うことができる。
この64ビットのデータ幅の中に、8、16、32ビッ
ト幅の整数型データ、あるいは32ビット幅の浮動小数
点型データを複数詰め込んで、1つのSIMD命令です
べてのデータに対して同時に処理を行う。例えば画像処
理ソフトウェアなどでは、64ビットのオペランドを各
8ビットのサブオペランドに分割することにより、固定
小数点データを8個同時に格納して、一度に8ピクセル
分の処理を行なうことができる。
【0009】先述したように、プログラムのコンパイル
時に最適化が行なわれるので、コンパイラが同じ演算を
繰り返し実行するような処理を1箇所にまとめてSIM
D命令に置き換えることができれば都合がよい。
【0010】しかしながら、コンパイラが自動的にSI
MD命令を使ってくれる場面は極めて限定されており、
従来から研究されているベクトル化の技術をそのまま適
用したに過ぎないと言ってもよい。多くの場合、SIM
D命令を使うためには、プログラマは、SIMD命令対
応のコンパイラで拡張されたデータ型を明示的に使用す
るとともに、命令に対応する関数(intrinsic)を明示
的に呼び出さなければならない。
【0011】このような状況下では、これらの拡張機能
に使用したプログラムは、高級言語で記述されているに
も拘わらず、特定のSIMD命令セットに依存したもの
になってしまう。このため、プログラムを別のプロセッ
サ・アーキテクチャに移植して充分な性能を発揮させる
ためには、プログラム・コードの大幅な書き換えが必要
となる。また、単にプログラムを改良する場合であって
も、性能を落さないようにするには、SIMD命令セッ
トの充分な知識が必要になる。すなわち、プログラムの
移植性やメンテナンス性を著しく阻害する。
【0012】
【発明が解決しようとする課題】本発明の目的は、コン
パイル時などにおいて実際の処理効率や処理速度を向上
させるための最適化を好適に行なうことができる、優れ
たプログラム処理装置及びプログラム処理方法、記憶媒
体、並びにコンピュータ・プログラムを提供することに
ある。
【0013】本発明のさらなる目的は、複数のデータを
同時に処理するためのSIMD(Single Instruction/
Multiple Data)命令を含んだ命令セットを持つアーキ
テクチャを対象としてプログラムに対してコンパイルな
どの処理を好適に行なうことができる、優れたプログラ
ム処理装置及びプログラム処理方法、記憶媒体、並びに
コンピュータ・プログラムを提供することにある。
【0014】本発明のさらなる目的は、SIMD命令の
特徴を活かしたプログラムの最適化を自動的に行なうこ
とができる、優れたプログラム処理装置及びプログラム
処理方法、記憶媒体、並びにコンピュータ・プログラム
を提供することにある。
【0015】
【課題を解決するための手段及び作用】本発明は、上記
課題を参酌してなされたものであり、その第1の側面
は、オペランドを複数のサブオペランドに分割して複数
のデータの集まりとみなして各サブオペランドに対する
同種の演算を一斉に処理する一斉処理命令を用いてプロ
グラムの最適化を行なうプログラム処理装置又はプログ
ラム処理方法であって、プログラム中の代入文で同じ演
算を異なるデータに適用している箇所を探索して、一箇
所に移動し、並列実行する演算子を用いて1つにまとめ
る代入文移動部又はステップと、該並列実行する演算子
でまとめられた各代入文が定義又は使用・参照する変数
を前記一斉処理命令の各サブオペランドに割り当てるサ
ブオペランド割当部又はステップと、を具備することを
特徴とするプログラム処理装置又はプログラム処理方法
である。
【0016】ここで、オペランドを複数のサブオペラン
ドに分割して複数のデータの集まりとみなして各サブオ
ペランドに対する同種の演算を一斉に処理する一斉処理
命令とは、例えばSIMD(Single Instruction/Mult
iple Data)型のマルチメディア向け拡張命令のことで
ある。
【0017】SIMD命令は、同じ演算を繰り返し実行
するような処理を一括して行なうことができる。本発明
の第1の側面に係るプログラム処理装置又はプログラム
処理方法は、例えば、高級プログラミング言語形式で記
述されたソース・プログラムを対象とするアーキテクチ
ャが実行可能なオブジェクト・プログラムに変換するた
めのコンパイラが備える機能モジュールの1つとして実
装することができ、このコンパイル処理の過程におい
て、SIMD命令を用いて最適化を行なうものである。
【0018】本発明の第1の側面に係るプログラム処理
装置又はプログラム処理方法によれば、代入文移動部又
はステップは、処理対照プログラムの中から同じ演算を
異なるデータに適用しているものを見つけて、これらを
parallel式を使って1箇所にまとめる。次い
で、サブオペランド割当部又はステップは、paral
lel式を使って記述されている代入文のうちSIMD
命令1つで処理できるものを抽出して、それが使用・定
義する変数をSIMDレジスタに対するsubreg式
に置き換える。このようにsubreg式に置き換えら
れた代入文の集まりは、SIMD命令と等価であり、プ
ログラムの最適化が実現される。
【0019】本発明の第1の側面に係るプログラム処理
装置又はプログラム処理方法は、プログラムを前記代入
文移動部又はステップに投入する前に、プログラム中の
if文をなくすif変換部又はステップをさらに備えて
いてもよい。if変換により、基本ブロックの数が減る
という効果がある。SIMD命令を使ってプログラムの
最適化を行う場合には、最適化手順の最初にif変換を
行なうことにより、変換された論理演算も最適化の対象
にすることができる。
【0020】また、本発明の第1の側面に係るプログラ
ム処理装置又はプログラム処理方法は、プログラムを前
記代入文移動部又はステップに投入する前に、基本ブロ
ックで構成されるプログラムをDAGに変換するDAG
変換部又はステップをさらに備えていてもよい。
【0021】ここで、基本ブロックとは、プログラムを
処理フローの分岐及び合流場所で分割することによって
得られる単位のことである。また、DAG(Directed A
cyclic Graph)は、有向で繰り返しのないグラフのこと
である。基本ブロック中の代入文は、DAGで表現する
ことができる。
【0022】基本ブロックをDAGに変換することによ
って、局所的な共通部分式を除去することができる。ま
た、SIMD命令を使ってプログラムの最適化を行なう
場合には、基本ブロックをDAGに変換することによっ
て、特殊な演算を伴うSIMD命令を利用するためのパ
ターン・マッチングを容易に行なえるように、細かい式
を大きな式にまとめることができるという効果がある。
【0023】また、本発明の第1の側面に係るプログラ
ム処理装置又はプログラム処理方法は、プログラムを前
記代入文移動部又はステップに投入する前に、プログラ
ムを有向で繰り返しのないグラフで表現したDAGを前
記一斉処理命令で行なえる演算の単位に分解するDAG
分解部又はステップをさらに備えていていもよい。
【0024】また、プログラム中の代入文のうち、同じ
演算を異なるデータに適用としているものをparal
lel式を使って1箇所にまとめる際に、代入文の位置
を移動することになる。代入文の移動によってプログラ
ムの意味が変わることのないように、前記代入文移動部
又はステップは、所定の判定条件を満足したときのみ、
代入文の移動を行なうようにすればよい。例えば、移動
元の文の位置sから移動先の文の位置tまでのすべての
経路を考えるとき、経路上のs以外の位置で経路外から
の合流がなく、且つ、経路上のt以外の位置で経路外へ
の分岐がない場合以外は、当該文の移動を許容しないよ
うにすればよい。
【0025】また、本発明の第1の側面に係るプログラ
ム処理装置又はプログラム処理方法は、前記代入文移動
部又はステップによって並列実行する演算子を用いて1
つにまとめられた代入文を、前記一斉処理命令の実行に
おけるオペランドの使用の制約に従って書き換える制約
適用部又はステップをさらに備えていてもよい。
【0026】また、前記サブオペランド割当部又はステ
ップは、該並列実行する演算子でまとめられた代入文の
個数が前記一斉処理命令1つで処理できる数を越える場
合には、前記一斉処理命令1つで処理できる個数の代入
文を取り出して、各代入文において使用又は定義してい
る変数をそれぞれ前記一斉処理命令のサブオペランドに
割り当てるようにしてもよい。
【0027】また、前記サブオペランド割当部又はステ
ップは、該並列実行する演算子でまとめられた代入文の
個数が前記一斉処理命令1つで処理できる数以下の場合
には、ダミーの代入文を付け加えてちょうど前記一斉処
理命令1つで処理できる個数になるようにして、各代入
文において使用又は定義している変数をそれぞれ前記一
斉処理命令のサブオペランドに割り当てるようにしても
よい。
【0028】あるいは、前記サブオペランド割当部又は
ステップは、該並列実行する演算子でまとめられた代入
文の個数が前記一斉処理命令1つで処理できる数以下の
場合には、代入文を該並列式から外して前記一斉処理命
令への置き換えを諦めるようにしてもよい。例えば、ダ
ミー命令の挿入によってSIMD命令を使っても、かえ
って命令のコストが大きくなる場合など最適化にならな
い場合には、SIMD命令の使用を諦める。
【0029】また、本発明の第2の側面は、複数の代入
文を含んだプログラムを処理するプログラム処理装置又
はプログラム処理方法であって、移動元の文の位置sか
ら移動先の文の位置tまでのすべての経路を考えると
き、経路上のs以外の位置で経路外からの合流がなく、
且つ、経路上のt以外の位置で経路外への分岐がない場
合、又は、移動先の文の位置sから移動元の文の位置t
までのすべての経路を考えるとき、経路上のs以外の位
置で経路外からの合流がなく、且つ、経路上のt以外の
位置で経路外への分岐がない場合、以外は、当該文の移
動を許容しない、ことを特徴とするプログラム処理装置
又はプログラム処理方法である。
【0030】一般に、コンピュータ・プログラムのコン
パイル時に行なう最適化処理やその他の局面において、
プログラムの代入文の並びを移動させたい場合がある
が、無制限に移動させてしまうと、プログラムの意味が
同じでなくなってしまう危険がある。そこで、本発明の
第2の側面に係るプログラム処理装置又はプログラム処
理方法によれば、移動元の文の位置sから移動先の文の
位置tまでのすべての経路を考えるとき、経路上のs以
外の位置で経路外からの合流がなく、且つ、経路上のt
以外の位置で経路外への分岐がない場合、又は、移動先
の文の位置sから移動元の文の位置tまでのすべての経
路を考えるとき、経路上のs以外の位置で経路外からの
合流がなく、且つ、経路上のt以外の位置で経路外への
分岐がない場合、以外は、当該文の移動を許容しないよ
うにすることで、プログラムの意味の同一性を維持する
ようにした。
【0031】また、本発明の第3の側面は、オペランド
を複数のサブオペランドに分割して複数のデータの集ま
りとみなして各サブオペランドに対する同種の演算を一
斉に処理する一斉処理命令を用いてプログラムの最適化
を行なう処理をコンピュータ・システム上で実行するよ
うに記述されたコンピュータ・ソフトウェアをコンピュ
ータ可読形式で物理的に格納した記憶媒体であって、前
記コンピュータ・ソフトウェアは、プログラム中の代入
文で同じ演算を異なるデータに適用している箇所を探索
して、一箇所に移動し、並列実行する演算子を用いて1
つにまとめる代入文移動ステップと、該並列実行する演
算子でまとめられた各代入文が定義又は使用・参照する
変数を前記一斉処理命令の各サブオペランドに割り当て
るサブオペランド割当ステップと、を具備することを特
徴とする記憶媒体である。
【0032】本発明の第3の側面に係る記憶媒体は、例
えば、さまざまなプログラム・コードを実行可能な汎用
コンピュータ・システムに対して、コンピュータ・ソフ
トウェアをコンピュータ可読な形式で提供する媒体であ
る。このような媒体は、例えば、DVD(Digital Vers
atile Disc)、CD(Compact Disc)やFD(Flexible
Disk)、MO(Magneto-Optical disc)などの着脱自
在で可搬性の記憶媒体である。あるいは、ネットワーク
(ネットワークは無線、有線の区別を問わない)などの
伝送媒体などを経由してコンピュータ・ソフトウェアを
特定のコンピュータ・システムに提供することも技術的
に可能である。
【0033】また、本発明の第3の側面に係る記憶媒体
は、コンピュータ・システム上で所定のコンピュータ・
ソフトウェアの機能を実現するための、コンピュータ・
ソフトウェアと記憶媒体との構造上又は機能上の協働的
関係を定義したものである。換言すれば、本発明の第3
の側面に係る記憶媒体を介して所定のコンピュータ・ソ
フトウェアをコンピュータ・システムにインストールす
ることによって、コンピュータ・システム上では協働的
作用が発揮され、本発明の第1の側面に係る画プログラ
ム処理装置又はプログラム処理方法と同様の作用効果を
得ることができる。
【0034】また、本発明の第4の側面は、オペランド
を複数のサブオペランドに分割して複数のデータの集ま
りとみなして各サブオペランドに対する同種の演算を一
斉に処理する一斉処理命令を用いてプログラムの最適化
を行なう処理をコンピュータ・システム上で実行するよ
うに記述されたコンピュータ・プログラムであって、プ
ログラム中の代入文で同じ演算を異なるデータに適用し
ている箇所を探索して、一箇所に移動し、並列実行する
演算子を用いて1つにまとめる代入文移動ステップと、
該並列実行する演算子でまとめられた各代入文が定義又
は使用・参照する変数を前記一斉処理命令の各サブオペ
ランドに割り当てるサブオペランド割当ステップと、を
具備することを特徴とするコンピュータ・プログラムで
ある。
【0035】本発明の第4の側面に係るコンピュータ・
プログラムは、コンピュータ・システム上で所定の処理
を実現するようにコンピュータ可読形式で記述されたコ
ンピュータ・プログラムを定義したものである。換言す
れば、本発明の第4の側面に係るコンピュータ・プログ
ラムをコンピュータ・システムにインストールすること
によって、コンピュータ・システム上では協働的作用が
発揮され、本発明の第1の側面に係るプログラム処理装
置又はプログラム処理方法と同様の作用効果を得ること
ができる。
【0036】本発明のさらに他の目的、特徴や利点は、
後述する本発明の実施形態や添付する図面に基づくより
詳細な説明によって明らかになるであろう。
【0037】
【発明の実施の形態】以下、図面を参照しながら本発明
の実施形態について詳解する。
【0038】A.SIMD命令の特徴 近年のマイクロプロセッサの持つSIMD命令で典型的
なものは、大きなサイズのレジスタのデータを、小さな
サイズのデータが複数集まったものとみなして、それぞ
れに対して同じ演算を行なう命令である。
【0039】例えば、米インテル社製のx86系のマイ
クロプロセッサにおけるSIMD命令であるMMX(mu
ltimedia extension)命令では、下記の命令は、64ビ
ット・レジスタMM0の内容を8個の8ビット数とみな
し、64ビット・レジスタMM1に対応する8ビット数
とそれぞれ加算して、その結果をレジスタMM0に格納
する。
【0040】
【数3】
【0041】以下では、この8ビット数のような個々の
演算対象のことを「サブオペランド」と呼ぶことにす
る。
【0042】表1には、近年の代表的なマイクロプロセ
ッサ・アーキテクチャがそれぞれ持つSIMD命令セッ
トの幾つかの特徴を挙げている。
【0043】
【表1】
【0044】上表において使用レジスタの欄では、各ア
ーキテクチャにおいて、SIMD命令で使えるレジスタ
(以下、SIMDレジスタ)が、通常の整数レジスタと
共通、通常の浮動小数点レジスタと共通、あるいは専用
のレジスタがあるかの区別と、レジスタの個数を表して
いる。
【0045】また、データ型の欄では、各アーキテクチ
ャにおいて、典型的な命令で扱えるサブオペランドのビ
ット長(Fで始まるものは浮動小数点数)と個数を示し
ている。
【0046】また、比較演算結果の欄では、SIMD比
較命令の結果がどこに入るかを示している。ビットマス
クとなっている場合、SIMDレジスタの対応するサブ
オペランドのすべてのビットが1あるいはすべてのビッ
トが0になることで比較結果が表現される。
【0047】比較演算結果がビットマスクになる場合、
SIMD論理演算命令と組み合わせれば、条件分岐命令
なしで各サブオペランドに対する条件付実行を行なうこ
とができる。比較演算結果が整数レジスタに入るVIS
の場合、条件付ストア命令を使うことで、同様の効果が
得られる。
【0048】上記の表1を参照する限りでは、SIMD
命令を並列度の小さいベクトル命令の一種とみなして、
ループのベクトル化を適用すればSIMD命令を活用す
ることができると思料される。比較演算を使った条件付
実行についても、if変換と同じようなことを行なえば
対応可能である。
【0049】しかしながら、SIMD命令とベクトル命
令では、並列度とコストのバランスが相違する。
【0050】ベクトル命令は、並列度が高いので、使用
できれば大幅な速度向上を期待することができる反面、
オーバーヘッドが大きいため、使用する場所をうまく選
ぶ必要がある。一方、SIMD命令は、通常の命令と同
程度のコストで実行することができるので、積極的に使
用する意味があるが、並列度が低いので大幅な速度向上
は難しい。略言すれば、SIMD命令には以下の特徴が
ある。
【0051】(1)並列度はあまり大きくない。 (2)実行コストは低い。
【0052】なお、SIMD命令には、上述した以外に
も特徴的な命令が含まれている。例えば、次のようなも
のを挙げることができる。
【0053】飽和加減算 整数の加減算の結果がオーバーフローしたときに、その
ビット数で表せる最大値又は最小値に飽和させる命令で
ある。オーバーフローの判定は符号付き数として扱う命
令もあれば、符号なし数として扱う命令もある。
【0054】最大最小 2つのオペランドの対応する各サブオペランドの大きい
方あるいは小さい方を求める命令である。
【0055】飽和縮小 ビット数の小さいデータに変換する際に、変換後のビッ
ト数でははみ出す数を最大値又は最小値に飽和させる命
令である。
【0056】混ぜ合わせ 2つのオペランド中のサブオペランドの幾つか(例えば
下位半分)を、例えば交互に混ぜ合わせる命令である。
その演算結果をビット数が2倍になったサブオペランド
とみなすなら、他の命令と組み合わせて、ゼロ拡張や符
号拡張を実現することができる。
【0057】乗算の上位 乗算の結果は元の2倍のビット数を必要とするが、その
上位半分を取り出す命令である。乗算を符号付き数とし
て扱う命令もあれば、符号なし数として扱う命令もあ
る。
【0058】積和演算 乗算とその結果の加算を1つの命令で行なう命令であ
る。
【0059】絶対差の和 2つのオペランドの対応するサブオペランドの差の絶対
値をそれぞれ求めて加える命令である。結果は、元のサ
ブオペランドよりビット数が大きくなる。
【0060】表2には、上述したSIMD命令が表1に
示したマイクロプロセッサ・アーキテクチャが持つ各S
IMD命令セットに含まれているかどうかを一覧表示し
ている。
【0061】
【表2】
【0062】これらSIMD命令の特徴を次のようにま
とめることができる。すなわち、
【0063】(1)特殊な演算子 通常の命令のような基本的な演算子ではなく、複合した
演算や条件判断を含む演算を行なう。
【0064】(2)データ・サイズの混合 入力と出力のサブオペランドのサイズや数が異なる命令
がある。そのため、入力オペランド中の一部のサブオペ
ランドしか使われなかったり、出力オペランド中の一部
のサブオペランドだけ変更されたりすることもある。
【0065】これらSIMD命令の活用は、ループのベ
クトル化とは別種の問題であり、従来のプログラム最適
化方法の適用範囲外である。だからといってSIMD命
令を活用することに効果が小さいという訳ではなく、う
まく活用するならば、SIMD命令の並列度を越えた高
速化を期待することができる。
【0066】B.プログラム処理装置の構成 本実施形態に係るプログラム処理装置は、対象とするア
ーキテクチャが実行可能な命令セットを用いて記述され
た形式すなわちオブジェクト・コードにコンパイル処理
する。また、コンパイル処理時には、実際の処理効率や
処理速度を向上させるための最適化を行なう。とりわけ
特徴的なのは、オペランドを複数のサブオペランドに分
割して複数のデータの集まりとみなして各サブオペラン
ドに対して同種の演算を一斉に処理するSIMD命令を
用いてプログラムの最適化を自動的に行なう、という点
である。
【0067】図1には、本実施形態に係るプログラム処
理装置100のハードウェア構成を模式的に示してい
る。
【0068】メイン・コントローラであるCPU(Cent
ral Processing Unit)101は、オペレーティング・シ
ステム(OS)の制御下で、各種のアプリケーションを
実行する。
【0069】本実施形態では、CPU101は、例え
ば、高級プログラミング言語を用いてソース・プログラ
ムを作成・編集するためのエディタや、ソース・プログ
ラムをオブジェクト・プログラムに変換するためのコン
パイラ、コンパイラによって生成されたオブジェクト・
プログラムなどを実行することができる。また、本実施
形態に係るコンパイラは、最適化処理を備えている。最
適化処理部の中には、同じ演算を繰り返し実行するよう
な処理を一括して行なえるSIMD命令を使った最適化
部を含んでいるが、その処理の詳細については後述に譲
る。
【0070】図示の通り、CPU101は、バス108
によって他の機器類(後述)と相互接続されている。
【0071】主メモリ102は、CPU101において
実行されるプログラム・コードをロードしたり、実行プ
ログラムの作業データを一時保管するために使用される
記憶装置であり、例えばDRAM(Dynamic RAM)のよ
うな半導体メモリが使用される。例えば、エディタ、コ
ンパイラ、オブジェクト・プログラムなどが実行プログ
ラムとして主メモリ102にロードされる。また、編集
中・コンパイル中のソース・プログラムや、コンパイラ
がソース・プログラムをコンパイル処理中に生成するソ
ース・プログラムの中間表現(中間表現は、基本ブロッ
クに分割されることもあり、また、基本ブロックは、D
AG(Directed Acyclic Graph)で表現されることもあ
る)、コンパイル処理されたオブジェクト・プログラム
などが作業データとして主メモリ102に一時的に格納
される。
【0072】また、ROM(Read Only Memory)103
は、データを恒久的に格納する半導体メモリであり、例
えば、起動時の自己診断テスト(POST:Power On S
elfTest)や、ハードウェア入出力用のプログラム・コ
ード(BIOS:Basic Input/Output System)などが
書き込まれている。
【0073】ディスプレイ・コントローラ104は、C
PU101が発行する描画命令を実際に処理するための
専用コントローラである。ディスプレイ・コントローラ
103において処理された描画データは、例えばフレー
ム・バッファ(図示しない)に一旦書き込まれた後、デ
ィスプレイ111によって画面出力される。
【0074】ディスプレイ111の表示画面は、一般
に、ユーザからの入力内容やその処理結果、あるいはエ
ラーその他のシステム・メッセージをユーザに視覚的に
フィードバックする役割を持つ。また、本実施形態にお
いては、ディスプレイ111の表示画面には、ソース・
プログラムを編集するためのエディタ画面や、コンパイ
ル処理中の基本ブロックやDAG、中間表現などの経過
データ、オブジェクト・プログラム、オブジェクト・プ
ログラムによる実行内容などを表示出力するために利用
される。
【0075】入力機器インターフェース105は、キー
ボード112やマウス113などのユーザ入力機器を対
話装置100に接続するための装置である。
【0076】キーボード112やマウス113は、デー
タやコマンドなどのユーザ入力をシステムに取り込む役
割を持つ。本実施形態では、キーボード112やマウス
113は、エディタの起動、エディタ画面でのソース・
プログラムの入力・編集、コンパイラの起動、オブジェ
クト・プログラムの起動などをユーザが指示するために
使用される。
【0077】ネットワーク・インターフェース106
は、Ethernetなどの所定の通信プロトコルに従
って、システム100をLAN(Local Area Network)
などの局所的ネットワーク、さらにはインターネットの
ような広域ネットワークに接続することができる。
【0078】ネットワーク上では、複数のホスト端末
(図示しない)がトランスペアレントな状態で接続さ
れ、分散コンピューティング環境が構築されている。ネ
ットワーク上では、ソフトウェア・プログラムやデータ
・コンテンツなどの配信サービスを行なうことができ
る。例えば、高級プログラミング言語を用いてソース・
プログラムを作成・編集するためのエディタや、ソース
・プログラムをオブジェクト・プログラムに変換するた
めのコンパイラ、コンパイラによって生成されたオブジ
ェクト・プログラムなどを、ネットワーク経由でダウン
ロードすることができる。また、コンパイル前のソース
・プログラムやコンパイル処理後のオブジェクト・プロ
グラムなどを、ネットワーク経由で他のホスト装置との
間で配信・配布することができる。
【0079】外部機器インターフェース107は、ハー
ド・ディスク・ドライブ(HDD)114やメディア・ド
ライブ115などの外部装置を本動作情報処理装置10
0に接続するための装置である。
【0080】HDD114は、記憶担体としての磁気デ
ィスクを固定的に搭載した外部記憶装置であり(周
知)、記憶容量やデータ転送速度などの点で他の外部記
憶装置よりも優れている。ソフトウェア・プログラムを
実行可能な状態でHDD114上に置くことを、プログ
ラムのシステムへの「インストール」と呼ぶ。通常、H
DD114には、CPU101が実行すべきオペレーテ
ィング・システムのプログラム・コードや、アプリケーシ
ョン・プログラム、デバイス・ドライバなどが不揮発的に
格納されている。例えば、高級プログラミング言語を用
いてソース・プログラムを作成・編集するためのエディ
タや、ソース・プログラムをオブジェクト・プログラム
に変換するためのコンパイラ、コンパイラによって生成
されたオブジェクト・プログラムなどを、HDD114
上にインストールすることができる。また、編集中・コ
ンパイル中のソース・プログラムや、コンパイラがソー
ス・プログラムをコンパイル処理中に生成するソース・
プログラムの中間表現(中間表現は、基本ブロックに分
割されることもあり、また、基本ブロックは、DAG
(Directed Acyclic Graph)で表現されることもあ
る)、コンパイル処理されたオブジェクト・プログラム
などをHDD114上に蓄積しておいてもよい。
【0081】メディア・ドライブ115は、CD(Compa
ct Disc)やMO(Magneto-Opticaldisc)、DVD(Di
gital Versatile Disc)などの可搬型メディアを装填し
て、そのデータ記録面にアクセスするための装置であ
る。
【0082】可搬型メディアは、主として、ソフトウェ
ア・プログラムやデータ・ファイルなどをコンピュータ可
読形式のデータとしてバックアップすることや、これら
をシステム間で移動(すなわち販売・流通・配布を含む)
する目的で使用される。例えば、高級プログラミング言
語を用いてソース・プログラムを作成・編集するための
エディタや、ソース・プログラムをオブジェクト・プロ
グラムに変換するためのコンパイラ、コンパイラによっ
て生成されたオブジェクト・プログラムなどを、これら
可搬型メディアを利用して複数の機器間で物理的に流通
・配布することができる。また、編集中・コンパイル中
のソース・プログラムや、コンパイラがソース・プログ
ラムをコンパイル処理中に生成する中間表現、コンパイ
ル処理されたオブジェクト・プログラムなどを他の装置
との間で交換するために、可搬型メディアを利用するこ
とができる。
【0083】なお、図1に示すようなプログラム処理装
置100の一例は、米IBM社のパーソナル・コンピュ
ータ"PC/AT(Personal Computer/Advanced Techno
logy)"の互換機又は後継機である。勿論、他のアーキ
テクチャで構成されるコンピュータを、本実施形態に係
るプログラム処理装置100として適用することも可能
である。
【0084】C.SIMD命令を用いたプログラムの最
適化 C−1.SIMD最適化の到達レベル A項で既に述べたように、SIMD命令の特徴は以下の
4つにまとめることができる。
【0085】(1)あまり大きくない並列度 (2)低い実行コスト (3)特殊な演算子 (4)データ・サイズの混合
【0086】本発明者は、このようなSIMDの特徴を
鑑みて、従来のベクトル化の適用を含めてSIMDによ
るプログラム最適化の到達度として以下の4つの到達レ
ベルに定義した。
【0087】レベル0: ループのベクトル化 レベル1: ループ以外でも、同じ演算の並列実行が可
能なものをSIMD命令にする レベル2: 特殊な演算子を持つ命令の利用 レベル3: データ・サイズの混合した演算をうまく扱
【0088】レベル0では、並列度が小さいために重要
となる、前後の命令を含めたスケジューリングや、ルー
プ融合などの他の最適化との相互作用の扱いを含めて考
える。
【0089】レベル1では、例えば、座標計算のよう
に、ソース・プログラム上では別々の変数に対する演算
として表現されているものであっても、変数をメモリや
レジスタにうまく順次割り当てていくことにより、SI
MD命令を適用する。SIMD命令の並列度が余る場合
であっても、命令の実行コストが低いので、前後の命令
を含めたスケジューリングをきちんと行なうことによ
り、高速化を期待することができる。
【0090】レベル2は、サブオペランドの1つの結果
だけを利用するような、単独の使用でも効果が出ること
があるが、レベル0やレベル1の使い方と組み合わせて
使用することが期待される。通常の命令と比べて、SI
MD命令は大幅な高速化を期待することができるが、S
IMD命令を使える場面であるかどうかを判定すること
は難しい。例えば、飽和加減算をする場合のオーバーフ
ローの判定は、より大きなビット長に拡張してから演算
して判定するもの、ソース・オペランドと結果の符合や
大小関係をしようするものなど、何通りかの方法があ
り、これらが同等であると判定できる式変形能力を要す
る。
【0091】ここで、式変形能力の別の使い方として
は、SIMD命令には特殊な演算子しかないもの、例え
ば、飽和縮小命令を、ビットマスク(すべて0又はすべ
て1)の単なる縮小命令として使うことが挙げられる。
本発明者は、これもレベル2に含めて考えている。
【0092】レベル3は、SIMD命令を単純に同じ操
作の並列実行とみなせない場合である。サイズを混合し
た演算は、特殊な演算であるから、レベル2を含めて考
えなければならない。
【0093】C−2.本発明で目標とする最適化の到達
度レベル 現状でSIMD命令を使ったコードを生成するコンパイ
ラは、レベル0の自動化を相当程度達成しており、これ
はほぼ実用段階であると言ってもよい。
【0094】一方、レベル1に関しては、例えば、Samu
el Larsen及びSaman Amarasinghe共著の論文" Exploiti
ng Superword Level Parallelism with Multimedia Ins
truction Sets "(In Proceedings of the ACM SIGPLAN
2000 Conference on Programming Language Design an
d Implementation, June 2000)には、基本ブロック内
に限定して適用した研究に関する報告がなされている。
また、Kevin Scott及びJack Davidson共著の論文"Explo
ring the Limits of Sub-word Level Parallelism"(In
Proceedings of 2000 International Conference Para
llel Architectures and Compilation Techniques, Oct
ober 2000.)には、効果の限界の実験について報告され
ている。
【0095】レベル2に関しては、Kevin Scott外著の
上記論文中でも記載されているように、いまだ到達され
ていない。したがって、レベル3も未踏の領域である。
【0096】本発明は、レベル2及びレベル3を実現す
ることができるプログラム最適化を提案するものであ
る。
【0097】例えば、グーロー・シェーディング(Goura
ud shading)の最内側ループに相当する処理をC言語形
式で記述したプログラム・コードは以下のようになる。
【0098】
【数4】
【0099】本実施形態に係るコンパイラは、レベル2
及びレベル3でSIMD命令を使ったコードを生成する
ものであり、上記のソース・プログラムを、MMX命令
を使って以下のように最適化することができる。
【0100】
【数5】
【0101】上記のコンパイル・最適化後のコードで
は、if変換を使ってループ内の条件分岐をなくし、4
つのif文を並列実行しているとともに、MMX命令で
使うのに都合のよい値、例えばsa+1,sr+1,s
g+1,sb+1をループ不変式としてループ外で計算
するようにしている。なお、引数やグローバル変数は、
適当な順番で配置されていることを前提にしている。
【0102】他方、MMXに対応したコンパイラであ
る"Code=Warrior 6.0"で、以下に示す
最適化オプションを指定してコンパイルしても、MMX
命令は使用されない。
【0103】
【数6】
【0104】C−3.最適化のための中間表現 SIMD命令を使用するレベル2以上の最適化を実現す
るためには、演算子の意味を細かく分析したり、サブオ
ペランドのサイズやオペランド中の位置を表現したりす
る必要がある。また、いろいろな最適化の相互影響を解
析する必要も生ずる。そこで、本実施形態では、特定の
目的に適した命令の表現を考えるのではなく、まず命令
の意味を正確に表現することができるプログラムの中間
表現を設計し、その上でプログラムの最適化を行なうよ
うにしている。
【0105】例えば、Jack Davidson及びChristopher F
raser共著の論文"Register Allocation and Exhaustive
Peephole Optimization"(Software Practice and Exp
erience, Vol.14, No.9, pp.857-866, September 198
4)で提案されているプログラムの中間表現RTL(Reg
ister Transfer Language)は、移植性の高いコード最
適化の実装によく使用されている。RTLでは、個々の
命令の意味は式の形ですっかり表現され、中間表現の形
式や解釈方法は命令セットに依存しない。このため、中
間表現を操作するプログラムをアーキテクチャに依存し
ない形で作成することができる。
【0106】RTLでは、レジスタ、あるいはメモリの
内容を幾つか読み出して演算を行ない、その結果をレジ
スタあるいはメモリに代入する副作用として、マシン命
令をとらえる。特別に指定されたものを除き、レジスタ
又はメモリから内容を読み出した値は、直前に書き込ん
だ値である。プログラム・カウンタに対する変更をジャ
ンプとみなすなどの幾つかの工夫により、たいていのマ
シン命令の意味をRTLで表すことができる(RTLで
表せないものの代表例は、内部にループを含む命令であ
る)。
【0107】本実施形態では、SIMD命令を用いたプ
ログラムのコンパイルを実現するために、中間表現とし
てRTLを使用する。RTLでSIMD命令を表現する
ために、GCC(GNU Compiler Collections:Richard
M. Stallman著"Using and Porting the GNU Compiler C
ollection"(Free Software Foundation, July 1999.)
を参照のこと)のRTLで使用されている演算子"pa
rallel"及び"subreg"をほぼそのまま採用
する。
【0108】マシン命令は、高級言語の命令文とは異な
り、不可分な複数の副作用が同時に発生することがあ
る。このため、GCCでは、演算子parallelを
使って表す。また、SIMD命令の複数のサブオペラン
ドに対する変更も、この不可分な副作用の一種とみなす
ことができるので、parallelで表すことにす
る。
【0109】また、サブオペランドは、演算子subr
egを使って明示的に表すことにした。subregt
(rt1,n)は、t1型のレジスタrの、下位ビットか
ら数えてn番のt型のデータを表す。なお、小さなレジ
スタがたくさんあるとみなす方法も考えられるが、サブ
オペランドのサイズと個数が命令によって異なるので、
重なりの情報が別に必要となるため、本実施形態では採
用していない。
【0110】例えば、下記のMMX命令は図2に示すよ
うな中間表現になる。ここで、I16及びI64は、そ
れぞれ16ビット、64ビットの整列型を表している。
【0111】
【数7】
【0112】C−4.最適化の手順 本実施形態では、コンパイラはソース・プログラムの最
適化処理を行なうが、この際、SIMD命令を使った最
適化処理を行なう点に特徴がある。SIMD命令を使っ
た最適化処理部は、上述したRTLを使ってソース・コ
ードを中間表現に変換するが、プログラムを中間表現す
る上で、図3に示すような手順でプログラム・コードの
変換を行なっていくことで、並列に実行することができ
る操作を単に検出するだけでなく、特殊な演算子を使っ
たり、データ・サイズの混合した命令の一部を利用した
プログラムの最適化を実現する。以下では、SIMD命
令を使ったプログラム最適化における各ステップについ
て詳解する。
【0113】C−4−1.論理演算を使ったif変換 if変換は、プログラム中のif文をなくす処理であ
り、基本ブロックの数が減るという効果がある。また、
最適化手順の最初に行なうことにより、if変換により
変換された論理演算も最適化の対象にすることができ
る。
【0114】if文の条件式が比較演算で、結果をビッ
トマスクとして得られる場合には、代入文が選択的に実
行されるだけの単純なif文を、論理演算を使って同じ
効果が得られるように変換する。
【0115】比較式をc、代入対象をv、then節で
vに代入される値をt、else節で代入される値をf
とすれば(then節又はelse節にvへの代入文が
なければ、t又はfはvとなる)、if文を以下に示す
ようなような代入文に変換することができる。
【0116】
【数8】
【0117】但し、上式において、bitand、bi
tor、bitnotはビット毎の論理積、論理和、論
理否定をそれぞれ表す演算子である。また、代入文が"
v:=v or w"の形をしている場合や、代入する
値が特別な値ならば、変換結果を簡単にすることができ
る。例えば、
【0118】
【数9】
【0119】のような処理は、比較結果がビットマスク
で、負の数を2の補数で表すという前提で、以下のよう
にif変換される。
【0120】
【数10】
【0121】ここで、比較結果と演算のビット長が異な
る場合には、適当な変換演算を挿入する。
【0122】if変換を最初に行なうのは、変換された
論理演算も最適化の対象にするためである。
【0123】C−4−2.基本ブロックをDAGに変換 基本ブロックとは、プログラムを処理フローの分岐及び
合流場所で分割することによって得られるプログラム文
の単位のことである。基本ブロックは、連続した文の列
からなり、制御は先頭の文に与えられ、その後、途中で
停止したり、途中で分岐したりしないで、最後の文から
制御が離れる。
【0124】また、DAG(Directed Acyclic Graph)
は、有向で繰り返しのないグラフのことである。基本ブ
ロック中の代入文は、DAGで表現することができる。
基本ブロックをDAGに変換することによって、局所的
な共通部分式を除去することができる。また、本実施形
態においては、基本ブロックをDAGに変換することに
よって、特殊な演算を伴うSIMD命令を利用するため
のパターン・マッチングを容易に行なえるように、細か
い式を大きな式にまとめることができるという効果があ
る。
【0125】例えば、
【0126】
【数11】
【0127】という基本ブロックがあった場合、ここで
のcの値を他で使わないという前提で、
【0128】
【数12】
【0129】を意味するDAG(但し、2つあるx>=
yは同じノードで表現される)に変換される。
【0130】図4には、SIMD命令で行なうことがで
きる特殊な演算子を含んだ基本ブロックの他の構成例を
示している。但し、同図に示す例では、プログラムを構
成する基本ブロックの集まりに、制御の流れに関する情
報(矢印)を付け加えた流れグラフの形式となってい
る。また、"conv"は型変換演算子であり、"shr"
は右シフト演算子である。なお、図中では型を省略して
いるが、乗算の上位を計算する部分にだけは型が付いて
いる。
【0131】また、図5には、図4に示した基本ブロッ
クのうち、最右上のブロックをDAGに変換した例を示
している。但し、":"(コロン)の後にあるのは、その
ノードの値を持っている変数である。
【0132】図5中で、破線で囲まれた箇所Aは、最大
最小命令に相当し、SIMD命令に置き換えることがで
きる特殊な命令である。同様に、一点鎖線で囲まれた箇
所Bは、乗算の上位であり、SIMD命令に置き換える
ことができる特殊な命令である。
【0133】DAGのパターン・マッチングにより、こ
れらSIMD命令に置換可能かどうかを容易に判断する
ことができる、という点を充分に理解されたい。
【0134】C−4−3.DAGを分解 次いで、前項で生成したDAGを、SIMD命令で行な
える命令の単位に分解する。例えば、前述したDAGの
【0135】
【数13】
【0136】では、2数の大きい方を求める命令すなわ
ち最大最小命令があるので、分解されずに残される。
【0137】また、図5に示したDAGの例では、最大
最小、及び、乗算の上位という、SIMD命令で行なえ
る演算の単位がそれぞれ含まれているので、これらの部
分が分解されずに残される。したがって、DAG全体と
しては以下のように分解される。
【0138】
【数14】
【0139】但し、hは、分解のために新たに導入した
変数である。dへの代入はaとbの最大であり、hへの
代入はaとbの乗算の上位を表している。
【0140】なお、中間表現の持つ演算子はすべて、分
解された演算とみなすようにすることで、分解の失敗が
ないようにしておく。SIMD命令にできなかった演算
は、後の段階で通常の命令になる。
【0141】C−4−4.同じ演算を複数まとめる 次いで、DAGを分解してなる代入文のうち、同じ演算
を異なるデータに適用しているものを見つけて、これら
をRTL演算子"parallel"を使って1箇所にま
とめる。
【0142】その際、代入文の位置を移動することにな
るが、プログラムの意味が変わってしまわないようにす
る必要がある。本発明者は、代入文の移動によってプロ
グラムの意味が変わらないことを判定するための幾つか
の条件を考案した。
【0143】まず、制御フロー・グラフ(プログラムを
構成する基本ブロックの集まりに、制御の流れに関する
情報(矢印)を付け加えたグラフ)中における移動元の
文の位置と移動先の文の位置のうち、先のものをsとお
き、後のものをtとおく。ここで、先と後は、同じ基本
ブロック内なら簡単に決まるが、そうでないときは次の
ようにする。まず、移動元の文の位置をs、移動先の文
の位置をtとおき、sからtまでの経路すべてを考える
とき、
【0144】経路上のs以外の位置で経路外からの合
流がない。 経路上のt以外の位置で経路外への分岐がない。
【0145】という2つの条件をともに満たすときに
は、これで先と後が決まったことになる。満たさないと
きには、移動元の文の位置をt、移動先の文の位置をs
とおき、sからtまでの経路すべてを考えるとき、条件
及びをともに満たすときには、先と後が決まったこ
とになる。満たさないときには、代入文を移動するとプ
ログラムの意味が変わってしまうので、移動の対象とし
ない。
【0146】例えば、図6に示すような制御フロー・グ
ラフのプログラムにおいて、基本ブロック間で代入文を
移動する場合について検討してみる。
【0147】同図に示すプログラムでは、同じ演算を異
なるデータに適用している代入文として、基本ブロック
B2内の代入文c:=a+aと、基本ブロックB4内の
代入文d:=b+bを抽出することができる。ここで、
基本ブロックB4内の代入文d:=b+bを、基本ブロ
ックB2内の代入文c:=a+aの位置に移動すること
を考えてみる。
【0148】まず、移動元の文である、基本ブロックB
4内の代入文d:=b+bの位置sとし、移動先であ
る、基本ブロックB2内の代入文c:=a+aの位置を
tとしてみる。
【0149】図6からも判るように、sからtに向かう
すべての経路を考えると、経路上の位置s以外の位置で
も、tにおいて経路外からの合流R2が存在する。ま
た、経路上の位置t以外の位置でも、位置sにおいて経
路外への分岐R5が存在する。
【0150】したがって、上記の条件及びをいずれ
も満足しないので、これは正しい前後関係ではない。
【0151】次いで、前後関係を入れ替え、移動元の文
である、基本ブロックB4内の代入文d:=b+bの位
置tとし、移動先である、基本ブロックB2内の代入文
c:=a+aの位置sとしてみる。
【0152】図6からも判るように、sからtに向かう
すべての経路を考えると、経路上の位置sには、経路内
からの合流R6の他に経路外からの合流R2を含むが、
それ以外の位置では経路外からの合流はない。また、経
路上の位置tには、経路内への分岐R6の他に経路外へ
の分岐R7を含むが、それ以外の位置では経路外への分
岐はない。
【0153】したがって、上記の条件及びをともに
満足するので、sが先、tが後であることがわかる。本
図の例では、この前後関係の元で、後に述べる条件及
びも満たしているため、基本ブロックB4内の代入文
d:=b+bを基本ブロックB2内の代入文c:=a+
aの位置まで移動することができる。このように代入文
の移動を適用した結果の制御フロー・グラフを図7に示
しておく。
【0154】次に、図8に示すような制御フローグラフ
のプログラムにおいて、基本ブロック間で代入文を移動
する場合について検討してみる。
【0155】図示のプログラム中からは、同じ演算を異
なるデータに適用している代入文として、基本ブロック
B12内の代入文c:=a+aと、基本ブロックB15
内の代入文d:=b+bが抽出される。ここで、基本ブ
ロックB12内の代入文d:=b+bを、基本ブロック
B15内の代入文c:=a+aの位置に移動することを
考えてみる。
【0156】ここで、基本ブロックB12内の代入文
c:=a+aの位置をsとし、基本ブロックB15内の
代入文d:=b+bの位置をtとした場合について考え
てみる。
【0157】図8からも判るように、経路上の位置t以
外の位置でも、位置sにおいて経路外への分岐R18が
存在する。すなわち、上記の条件を満足しないので、
これは正しい前後関係ではない。この例では、前後を入
れ替えても、条件及びを満たさないので、前後関係
を決めることができず、移動の対象としない。
【0158】プログラムの前後関係を判定する上記の2
つの条件及びを考慮した上で、移動したい代入文を
aとしたときに、sからtへ向かういずれの経路におい
てもさらに以下に示す2つの条件を満たす場合に限り、
代入文の移動を許可する。
【0159】aの使用(又は参照)する変数の定義が
ない aの定義する変数の使用(又は参照)はなく定義はa
しかない。
【0160】ここで、代入文aを"X=X+Z"とした場
合、aの使用・参照する変数とはX並びにZのことであ
り、aの定義する変数はXのことである。
【0161】例えば、以下に示すような複数の代入文か
らなるプログラムを考えた場合、
【0162】
【数15】
【0163】比較演算を含む各代入文は、プログラムの
最初の位置まで移動することができる。同様に、減算を
含む各代入文は、最後の位置に移動することができる。
そして、同じ演算を異なるデータに適用しているそれぞ
れの代入文の塊を、parallelを使って、以下に
示すように1箇所にまとめることができる。
【0164】
【数16】
【0165】上記に示した代入文の移動は、いずれも、
プログラムの意味の同一性を判断するためのすべての条
件〜を満足している、という点を充分理解された
い。
【0166】parallel式でまとめるこの処理段
階では、SIMD命令の並列度を考慮しないので、後の
処理過程では、ここでまとめられた代入文の一部又は全
部がSIMD命令にならない場合がある。
【0167】なお、ベクトル化することが可能なループ
も、適当な回数だけ展開することで、この段階での処理
に帰着することができる。
【0168】C−4−5.命令とレジスタの制約の適用 ここまでの処理では、SIMD命令を適用するために、
プログラム中で同じ演算を異なるデータに適用している
ものを見つけて、parallelを使って1箇所にま
とめられている。
【0169】例えば、演算としてはSIMD命令で実行
可能とされたものでも、結果を格納するレジスタがソー
スの一方と同じであることが必要な場合がある。また、
比較が一方しか使えない場合や、特定のレジスタを必要
としたりするなどの命令の制約がある場合がある。
【0170】このため、命令セットによってはレジスタ
の使用に制約が課されていることがあるので、これを適
用して、プログラムの一部を書き換える処理を行なう。
また、適用した結果、挿入された命令がさらに適用の対
象になることもあるので、適用は繰り返し行なう。
【0171】SIMD加算命令のソース・オペランドの
一方に加算結果が格納されるような命令セットの場合
(例えば、MMX命令)、例えば以下に示すような加算
命令からなるparallel式は、
【0172】
【数17】
【0173】t0,t1,t2,t3の古い値が以後使
用されないという前提で、以下のように書き換えられ
る。また、s4,s8,s12,s16を使っている箇
所も、t0,t1,t2,t3に書き換えられる。
【0174】
【数18】
【0175】また、SIMD比較命令でより大きいかど
うかの判定はできないが、より小さいかどうかの判定が
できるような命令セットの場合には、より大きいかどう
かの判定を行なう複数の比較命令で構成された以下のp
arallel式は、
【0176】
【数19】
【0177】より小さいかどうかの判定を行なう比較命
令に書き換えられた以下のparallel式に書き換
えられる。
【0178】
【数20】
【0179】C−4−6.SIMDレジスタの割当 最後に、中間表現されたプログラム中でparalle
l式を使って1箇所にまとめられている代入文のうち、
1つのSIMD命令で処理できるものを選んで、その代
入文が使用又は定義する変数をそれぞれSIMDレジス
タに対するsubreg式に置き換える。このようにし
てsubreg式の繰り返しで構成されたparell
el文(例えば、図2を参照のこと)は、中間表現であ
るが、SIMD命令に置き換わったすなわち最適化され
たものと等価である。
【0180】parallel式でまとめられた代入文
からSIMD命令で処理できるものを取捨選択していく
過程で、SIMD命令の並列性が余った場合には、ダミ
ーの代入を付け加えてparallel内が1つのSI
MD命令に対応するようにする。
【0181】また、上述したレジスタの制約の適用がで
きないSIMD命令であれば、それを考慮してSIMD
レジスタ中のサブオペランドの位置を決めるようにす
る。
【0182】図9には、プログラム中からSIMD命令
で処理できる代入文を選んで、代入文が使用又は定義す
る変数をSIMDレジスタに割り当てるための処理手順
をフローチャートの形式で示している。但し、この処理
に投入されるプログラムは、RTLで中間表現されたも
のであり、同じ演算を異なるデータに適用している複数
の代入文がparallel分を使って1箇所にまとめ
られているものとする。以下、図示のフローチャートを
参照しながら代入文が使用又は定義する変数をSIMD
レジスタに割り当てるための処理について説明する。
【0183】まず、プログラムの先頭から順に、処理対
象となるparellel式を1つ取り出す(ステップ
S1)。もしプログラム中のすべてのparallel
式について、以下に示すレジスタ割当処理が終了してい
れば(ステップS2)、本処理ルーチン全体を終了す
る。
【0184】次いで、parallel式に含まれてい
る代入文の個数が、代入文が適用する演算に対応するS
IMD命令1つで処理できる数以下かどうかをチェック
する(ステップS3)。
【0185】parallel式に含まれている代入文
の個数が、代入文が適用する演算に対応するSIMD命
令1つで処理できる数を越える場合には、SIMD命令
1つで処理できる個数の代入文を取り除いて、別のpa
rallel式を作ってプログラムに挿入する(ステッ
プS4)。
【0186】そして、作ったparallel式に含ま
れる各代入文において使用又は定義している変数をSI
MDレジスタに対するsubreg式にそれぞれ置換す
る(ステップS5)。レジスタの制約の適用(上述)が
できなかったSIMD命令であれば、それを考慮して、
SIMDレジスタ中のサブオペランドの位置を決めるよ
うにする。
【0187】その後、ステップS1に戻って、プログラ
ム中の次のparallel式について、上述と同様の
SIMDレジスタ割当処理を繰り返し実行する。
【0188】他方、ステップS3において、paral
lel式に含まれている代入文の個数が、代入文が適用
する演算に対応するSIMD命令1つで処理できる数以
下と判断された場合には、さらに、代入文の個数が所定
の閾値min_simd以上かどうかをチェックする
(ステップS6)。
【0189】parallel式に含まれる代入文の個
数がmin_simd以上である場合には、ダミーの代
入文を付け加えて、ちょうどSIMD命令1つで処理で
きる代入文の個数にしてから(ステップS7)、各代入
文において使用又は定義している変数をSIMDレジス
タに対するsubreg式にそれぞれ置換する(ステッ
プS8)。レジスタの制約の適用(上述)ができなかっ
たSIMD命令であれば、それを考慮して、SIMDレ
ジスタ中のサブオペランドの位置を決めるようにする。
【0190】その後、ステップS1に戻って、プログラ
ム中の次のparallel式について、上述と同様の
SIMDレジスタ割当処理を繰り返し実行する。
【0191】また、parallel式に含まれる代入
文の個数がmin_simd未満である場合には、pa
rallel式を外して、これら代入文をSIMD命令
に置き換えること、すなわち最適化することを諦める
(ステップS9)。その後、ステップS1に戻って、プ
ログラム中の次のparallel式について、上述と
同様のSIMDレジスタ割当処理を繰り返し実行する。
【0192】上記で使用された値min_simdは、
ダミー文を挿入してSIMD命令にすることと、ダミー
文を挿入せずSIMD命令にすることをあきらめること
のいずれが最適であるかを判断するための閾値である。
【0193】ここで、ステップS5及びS8において、
代入文をSIMDレジスタに対するsubreg式に置
き換えるための処理について詳解する。
【0194】もし、SIMDレジスタがあふれた場合
は、適当なロード・ストア命令を挿入する。
【0195】また、使用又は定義の対象がメモリ上の値
である場合にも、必要に応じてSIMDレジスタに対す
るロード・ストア命令を挿入する。この際、変数の並び
順の制約が必要になることがあるときには、制約情報を
生成する。
【0196】また、SIMD命令にできない代入文との
間で定義・使用関係があるときや、SIMD命令同士で
も基本ブロックの境界などで調整が必要な場合は、調整
命令や適当な変換命令を挿入する。挿入する命令のコス
トが大きいときには、SIMD命令を使うことを諦め
る。
【0197】D.Coinsコンパイラとの接続 D−1.Coinsコンパイラの概要 「Coinsコンパイラ」は、文部科学省科学技術振興
調整費による、並列コンパイラ向け共通インフラストラ
クチャの研究(2000年度より5年)で作成されてい
るコンパイラの呼称である。Coinsコンパイラは、
以下の2つの中間表現を用いている。
【0198】(1)高水準中間表現HIR(High level
Intermediate Representation) 抽象構造木に近い表現であり、ソース言語の構成要素と
一対一に近い対応関係がある。HIRの文法は、ソース
言語に依存しない。
【0199】(2)低水準中間表現LIR(Low level
Intermediate Representation) レジスタやメモリの値の変更などを表す式の並びであ
り、マシン命令の意味を表現することができる。LIR
の文法は、マシン非依存である。
【0200】Coinsコンパイラは、Java言語で
実装されているので、ホストマシン依存性に関しては、
考慮する必要はほとんどない。Java以外の言語のコ
ンパイラを作る場合には、型のサイズや演算子の違いを
明確にしておく必要はあるが、C言語でC言語のクロス
コンパイラを作る場合の問題に比べれば、ホストマシン
は常に同一とみなすことができるので、扱いは容易であ
る。
【0201】HIRは、ソース言語に近いレベルでの処
理を行なうためのものであり、ソース言語に依存した最
適化、例えばC言語での副作用順序の変更はHIRで行
なう。HIRの形式は、勿論、対象とするアーキテクチ
ャ非依存であるが、生成されたHIRには、対象とする
アーキテクチャに依存した値が含まれる。例えば、C言
語ではintの大きさは実装によって異なるので、同じ
ソース・プログラムから生成されたHIRであっても一
通りではない。HIRの生成や変換を行う際には、各型
のサイズやアラインメントなどが記録されたマシン・パ
ラメータを参照する。
【0202】また、LIRは、各種の最適化から、コー
ド生成、マシン後レベルでの最適化まで使われるものが
ある。コード生成より前の段階では、LIRはマシン命
令に対応しているのではなく、以下のような抽象化が行
われている。
【0203】マシンの物理レジスタではなく、仮想レ
ジスタを使える。仮想レジスタには数の制限はない。仮
想レジスタは、パターン・マッチングでマッチしたマシ
ン命令でのレジスタ使用の制約に基づいて、物理レジス
タ割当で物理レジスタが割り当てられる。
【0204】ローカル変数はスタック・フレームを参
照する式ではなく、FRAME式で表現される。FRA
ME式は、変数のアドレスを表す式であり、フレーム割
当でフレーム・ポインタ(場合によっては、スタック・ポ
インタ)からの相対アドレスに変換される。
【0205】固定したアドレスに確保される変数(C
言語の関数外で定義された変数など)は、STATIC
式で表現される。
【0206】LIRには、STATIC式、FRAME
式で表される変数の型やアラインメントなどを保持する
テーブルや、初期値のある、あるいは内、データ領域を
表すデータ定義も含まれており、1つのコンパイル単
位、あるいはオブジェクト・ファイル全体の情報を表現
している。
【0207】現在、CoinsコンパイラはSPARC
プロセッサ用のCコンパイラの部分の作成が進んでお
り、それは以下に示すような各フェーズに区分すること
ができる。
【0208】(1)ソース・プログラムをHIR−Cに変
換 (2)C言語に依存したプログラム変換 (3)HIR−CをHIR−baseに変換 (4)高水準最適化 (5)HIR−baseをLIRに変換 (6)仮想レジスタ割付 (7)低水準最適化 (8)フレーム割当 (9)パターン・マッチング (10)物理レジスタ割当 (11)マシン語レベルでの最適化 (12)アセンブラ・コード生成
【0209】まず、C言語のソース・プログラムは、C
言語独自の演算子などを表現するために拡張したHIR
−Cに変換される。C言語に依存したプログラム変換を
行った後、拡張部分のないHIRである、HIR−ba
seに変換される。
【0210】HIR−base上で高水準最適化を行っ
てからは、LIRに変換される。LIRでは、まず仮想
レジスタ割付を行ってから、低水準最適化を行い、フレ
ーム割当、パターン・マッチング、物理レジスタ割当を
経て、具体的なマシン命令を表すLIRに変換される。
【0211】その後、命令スケジューリングなどのマシ
ン語レベルの最適化を行い、最後にアセンブリ言語のプ
ログラムが生成される。
【0212】幾つかのある最適化は、実際には複数の最
適化が適当な順序で必要に応じて繰り返し適用されるこ
とになる。また、他のフェーズも必要なら、何度も適用
されることがある。
【0213】D−2.Coinsコンパイラを利用する
理由 SIMD命令を使った最適化は、独立した処理のように
見えるが、コンパイラに通常組み込まれている、いろい
ろな解析結果を必要としている。例えば、以下に示すC
言語のプログラムは、ループのベクトル化が可能であ
る。
【0214】
【数21】
【0215】しかしながら、以下のように変わっただけ
で、ポインタの別名問題のため、ベクトル化は誤りとな
る。
【0216】
【数22】
【0217】これをうまく扱うためには、ポインタ解析
などの一般的な枠組みが別にあって、別名の問題のない
ものを仮想レジスタ割付の対象にするなどの前提が必要
になる。
【0218】ポインタ解析は、それだけで大きな研究対
象であり、独立して開発するのは効率が悪く、インフラ
ストラクチャとして利用するべきものである。他にも、
手続き間最適化など、必要なものはいろいろある。その
ため、Coinsコンパイラを利用して、上述した最適
化を行うことにする。
【0219】D−3.SIMD命令を使った最適化の組
み込み方法 SIMD命令を使った最適化は、Coinsコンパイラ
で行われる以下の3箇所の最適化の1つあるいは複数で
実現することになる。
【0220】高水準最適化 低水準最適化 マシン語レベルでの最適化
【0221】まず、HIRではRTLに基づく方法を使
用で気ないので、高水準最適化は除外される。
【0222】次いで、マシン語レベルでの最適化を行な
うと、フレーム割当や物理レジスタ割当の後になるた
め、物理レジスタやスタック・フレームにある値をSI
MDレジスタに割り当て直すのは解析が難しい上、レジ
スタ割り当てがやり直しになってしまう。また、SIM
Dレジスタ割当では、SIMD命令にできなかったもの
を後で通常の命令にするという前提なので、通常のパタ
ーン・マッチングより先に済ませておく必要がある。
【0223】結局、SIMD命令を使った最適化は、6
つあるフェーズ(図3を参照のこと)をすべて低水準最
適化の一部として実現することにする。この場合、その
後のフェーズでは、SIMD物理レジスタやSIMD命
令に対するsubreg式やparallel式を含む
LIRを扱う必要が出てくる。現在のところ、これらを
扱うための変更は、フレーム割当フェーズ以降に限り、
SIMD命令を使った最適化を低水準最適化の最後で行
なうこととしている。
【0224】Coinsコンパイラを用いた実現では、
以下のようなメリットがある。
【0225】SIMD命令のサブオペランドになりう
る値が仮想レジスタにのっていると仮定して処理するこ
とができる。 定数伝搬や別名解析が済んでいると仮定できる。 SIMD命令にできなかった部分の処理を任せられ
る。 変数の使用定義関係、生きている変数の解析などに、
Coinsコンパイラのインフラストラクチャ部分を利
用することができる。
【0226】しかしながら、そのため、Coinsコン
パイラに対して以下のような部分的な変更を加える必要
がある。
【0227】SIMD命令を使った最適化で呼び出す
コード解析部がparallel式に対応すること。 フレーム割当以降のフェーズがSIMD物理レジスタ
とsubreg式に対応すること。 マシン命令によくある偽の依存関係に対応すること
(排他的論理輪を使ってゼロにするときは使用とはみな
さないなど)。 生成したSIMD命令を壊さないこと。 変数の並びの制約をアドレス固定の変数の並びに反映
させること。
【0228】現在残っている問題点は、SIMD命令を
使ったために、別の自明でない最適化が必要になるも
の、例えばループ不変式の追い出しがこのままではでき
ないことである。独自のループ最適化フェーズを実装す
る必要があるかもしれない。
【0229】[追補]以上、特定の実施形態を参照しな
がら、本発明について詳解してきた。しかしながら、本
発明の要旨を逸脱しない範囲で当業者が該実施形態の修
正や代用を成し得ることは自明である。すなわち、例示
という形態で本発明を開示してきたのであり、本明細書
の記載内容を限定的に解釈するべきではない。本発明の
要旨を判断するためには、冒頭に記載した特許請求の範
囲の欄を参酌すべきである。
【0230】
【発明の効果】以上詳記したように、本発明によれば、
コンパイル時などにおいて実際の処理効率や処理速度を
向上させるための最適化を好適に行なうことができる、
優れたプログラム処理装置及びプログラム処理方法、記
憶媒体、並びにコンピュータ・プログラムを提供するこ
とができる。
【0231】また、本発明によれば、複数のデータを同
時に処理するためのSIMD(Single Instruction/Mu
ltiple Data)命令を含んだ命令セットを持つアーキテ
クチャを対象としてプログラムに対してコンパイルなど
の処理を好適に行なうことができる、優れたプログラム
処理装置及びプログラム処理方法、記憶媒体、並びにコ
ンピュータ・プログラムを提供することができる。
【0232】また、本発明によれば、SIMD命令の特
徴を活かしたプログラムの最適化を自動的に行なうこと
ができる、優れたプログラム処理装置及びプログラム処
理方法、記憶媒体、並びにコンピュータ・プログラムを
提供することができる。
【0233】また、本発明によれば、特殊な演算子を持
つ命令を利用するとともに、データ・サイズの混合した
演算をうまく扱うことで、より難易度の高いSIMD命
令を使用したプログラムの最適化を実現することができ
る。
【0234】また、本発明によれば、元のプログラム・
コードを中間表現に変換して、並列に実行できる操作を
単に検出するだけでなく、特殊な演算子を使用したり、
データ・サイズの混合した命令の一部を使用できるよう
にすることで、より難易度の高いSIMD命令を使用し
たプログラムの最適化を実現することができる。
【図面の簡単な説明】
【図1】本実施形態に係るプログラム処理装置100の
ハードウェア構成を模式的に示した図である。
【図2】MMX命令をRTLで中間表現した例を示した
図である。
【図3】ソース・プログラムを中間表現するための手順
を示したフローチャートである。
【図4】SIMD命令で行なうことができる特殊な演算
子を含んだ基本ブロックの他の構成例を示した図であ
る。
【図5】図4に示した基本ブロックのうち最右上のブロ
ックをDAGに変換した例を示した図である。
【図6】プログラムの基本ブロック構成例を示した図で
ある。
【図7】プログラムの基本ブロック構成例を示した図で
あり、より具体的には、図6に示したプログラムに対し
て代入文の移動を適用した結果を示した図である。
【図8】プログラムの基本ブロック構成例を示した図で
ある。
【図9】プログラム中からSIMD命令で処理できる代
入文を選んで、代入文が使用又は定義する変数をSIM
Dレジスタに割り当てるための処理手順を示したフロー
チャートである。
【符号の説明】
100…プログラム処理装置 101…CPU, 102…主メモリ,103…ROM 104…ディスプレイ・コントローラ 105…入力機器インターフェース 106…ネットワーク・インターフェース 107…外部機器インターフェース 108…バス 111…ディスプレイ 112…キーボード,113…マウス 114…ハード・ディスク装置 115…メディア・ドライブ

Claims (24)

    【特許請求の範囲】
  1. 【請求項1】オペランドを複数のサブオペランドに分割
    して複数のデータの集まりとみなして各サブオペランド
    に対する同種の演算を一斉に処理する一斉処理命令を用
    いてプログラムの最適化を行なうプログラム処理装置で
    あって、 プログラム中の代入文で同じ演算を異なるデータに適用
    している箇所を探索して、一箇所に移動し、並列実行す
    る演算子を用いて1つにまとめる代入文移動部と、 該並列実行する演算子でまとめられた各代入文が定義又
    は使用・参照する変数を前記一斉処理命令の各サブオペ
    ランドに割り当てるサブオペランド割当部と、を具備す
    ることを特徴とするプログラム処理装置。
  2. 【請求項2】プログラムを前記代入文移動部に投入する
    前に、プログラム中のif文をなくすif変換部をさら
    に備える、ことを特徴とする請求項1に記載のプログラ
    ム処理装置。
  3. 【請求項3】前記if変換部は、比較式をc、代入対象
    をv、then節でvに代入される値をt、else節
    で代入される値をfとしたif文を(then節又はe
    lse節にvへの代入文がなければ、t又はfはvとな
    る)、 【数1】 という代入文に変換する、ことを特徴とする請求項2に
    記載のプログラム処理装置。
  4. 【請求項4】プログラムを前記代入文移動部に投入する
    前に、連続した文の列からなり制御は先頭の文に与えら
    れその後途中で停止及び分岐なく最後の文から制御が離
    れる1以上の基本ブロックで構成されるプログラムを有
    向で繰り返しのないグラフで表現されたDAGに変換す
    るDAG変換部をさらに備える、ことを特徴とする請求
    項1に記載のプログラム処理装置。
  5. 【請求項5】プログラムを前記代入文移動部に投入する
    前に、プログラムを有向で繰り返しのないグラフで表現
    したDAGを前記一斉処理命令で行なえる演算の単位に
    分解するDAG分解部をさらに備える、ことを特徴とす
    る請求項1に記載のプログラム処理装置。
  6. 【請求項6】前記代入文移動部は、移動元の文の位置s
    から移動先の文の位置tまでのすべての経路を考えると
    き、経路上のs以外の位置で経路外からの合流がなく、
    且つ、経路上のt以外の位置で経路外への分岐がない場
    合以外は、当該文の移動を許容しない、ことを特徴とす
    る請求項1に記載のプログラム処理装置。
  7. 【請求項7】前記代入文移動部によって並列実行する演
    算子を用いて1つにまとめられた代入文を前記一斉処理
    命令の実行におけるオペランドの使用の制約に従って書
    き換える制約適用部をさらに備える、ことを特徴とする
    請求項1に記載のプログラム処理装置。
  8. 【請求項8】前記サブオペランド割当部は、該並列実行
    する演算子でまとめられた代入文の個数が前記一斉処理
    命令1つで処理できる数を越える場合には、前記一斉処
    理命令1つで処理できる個数の代入文を取り出して、各
    代入文において使用又は定義している変数をそれぞれ前
    記一斉処理命令のサブオペランドに割り当てる、ことを
    特徴とする請求項1に記載のプログラム処理装置。
  9. 【請求項9】前記サブオペランド割当部は、該並列実行
    する演算子でまとめられた代入文の個数が前記一斉処理
    命令1つで処理できる数以下の場合には、ダミーの代入
    文を付け加えてちょうど前記一斉処理命令1つで処理で
    きる個数になるようにして、各代入文において使用又は
    定義している変数をそれぞれ前記一斉処理命令のサブオ
    ペランドに割り当てる、ことを特徴とする請求項1に記
    載のプログラム処理装置。
  10. 【請求項10】前記サブオペランド割当部は、該並列実
    行する演算子でまとめられた代入文の個数が前記一斉処
    理命令1つで処理できる数以下の場合には、代入文を該
    並列式から外して前記一斉処理命令への置き換えを諦め
    る、ことを特徴とする請求項1に記載のプログラム処理
    装置。
  11. 【請求項11】オペランドを複数のサブオペランドに分
    割して複数のデータの集まりとみなして各サブオペラン
    ドに対する同種の演算を一斉に処理する一斉処理命令を
    用いてプログラムの最適化を行なうプログラム処理方法
    であって、 プログラム中の代入文で同じ演算を異なるデータに適用
    している箇所を探索して、一箇所に移動し、並列実行す
    る演算子を用いて1つにまとめる代入文移動ステップ
    と、 該並列実行する演算子でまとめられた各代入文が定義又
    は使用・参照する変数を前記一斉処理命令の各サブオペ
    ランドに割り当てるサブオペランド割当ステップと、を
    具備することを特徴とするプログラム処理方法。
  12. 【請求項12】プログラムを前記代入文移動ステップを
    実行する前に、プログラム中のif文をなくすif変換
    ステップをさらに備える、ことを特徴とする請求項11
    に記載のプログラム処理方法。
  13. 【請求項13】前記if変換ステップでは、比較式を
    c、代入対象をv、then節でvに代入される値を
    t、else節で代入される値をfとしたif文を(t
    hen節又はelse節にvへの代入文がなければ、t
    又はfはvとなる)、 【数2】 という代入文に変換する、ことを特徴とする請求項11
    に記載のプログラム処理方法。
  14. 【請求項14】前記代入文移動ステップを実行する前
    に、連続した文の列からなり制御は先頭の文に与えられ
    その後途中で停止及び分岐なく最後の文から制御が離れ
    る1以上の基本ブロックで構成されるプログラムを有向
    で繰り返しのないグラフで表現されたDAGに変換する
    DAG変換ステップをさらに備える、ことを特徴とする
    請求項11に記載のプログラム処理方法。
  15. 【請求項15】前記代入文移動ステップを実行する前
    に、プログラムを有向で繰り返しのないグラフで表現し
    たDAGを前記一斉処理命令で行なえる演算の単位に分
    解するDAG分解ステップをさらに備える、ことを特徴
    とする請求項11に記載のプログラム処理方法。
  16. 【請求項16】前記代入文移動ステップでは、移動元の
    文の位置sから移動先の文の位置tまでのすべての経路
    を考えるとき、経路上のs以外の位置で経路外からの合
    流がなく、且つ、経路上のt以外の位置で経路外への分
    岐がない場合以外は、当該文の移動を許容しない、こと
    を特徴とする請求項11に記載のプログラム処理方法。
  17. 【請求項17】前記代入文移動ステップによって並列実
    行する演算子を用いて1つにまとめられた代入文を前記
    一斉処理命令の実行におけるオペランドの使用の制約に
    従って書き換える制約適用ステップをさらに備える、こ
    とを特徴とする請求項11に記載のプログラム処理方
    法。
  18. 【請求項18】前記サブオペランド割当ステップでは、
    該並列実行する演算子でまとめられた代入文の個数が前
    記一斉処理命令1つで処理できる数を越える場合には、
    前記一斉処理命令1つで処理できる個数の代入文を取り
    出して、各代入文において使用又は定義している変数を
    それぞれ前記一斉処理命令のサブオペランドに割り当て
    る、ことを特徴とする請求項11に記載のプログラム処
    理方法。
  19. 【請求項19】前記サブオペランド割当ステップでは、
    該並列実行する演算子でまとめられた代入文の個数が前
    記一斉処理命令1つで処理できる数以下の場合には、ダ
    ミーの代入文を付け加えてちょうど前記一斉処理命令1
    つで処理できる個数になるようにして、各代入文におい
    て使用又は定義している変数をそれぞれ前記一斉処理命
    令のサブオペランドに割り当てる、ことを特徴とする請
    求項11に記載のプログラム処理方法。
  20. 【請求項20】前記サブオペランド割当ステップでは、
    該並列実行する演算子でまとめられた代入文の個数が前
    記一斉処理命令1つで処理できる数以下の場合には、代
    入文を該並列式から外して前記一斉処理命令への置き換
    えを諦める、ことを特徴とする請求項11に記載のプロ
    グラム処理方法。
  21. 【請求項21】複数の代入文を含んだプログラムを処理
    するプログラム処理装置であって、 移動元の文の位置sから移動先の文の位置tまでのすべ
    ての経路を考えるとき、経路上のs以外の位置で経路外
    からの合流がなく、且つ、経路上のt以外の位置で経路
    外への分岐がない場合、又は移動先の文の位置sから移
    動元の文の位置tまでのすべての経路を考えるとき、経
    路上のs以外の位置で経路外からの合流がなく、且つ、
    経路上のt以外の位置で経路外への分岐がない場合、以
    外は、当該文の移動を許容しない、ことを特徴とするプ
    ログラム処理装置。
  22. 【請求項22】複数の代入文を含んだプログラムを処理
    するプログラム処理方法であって、 移動元の文の位置sから移動先の文の位置tまでのすべ
    ての経路を考えるとき、経路上のs以外の位置で経路外
    からの合流がなく、且つ、経路上のt以外の位置で経路
    外への分岐がない場合、又は、移動先の文の位置sから
    移動元の文の位置tまでのすべての経路を考えるとき、
    経路上のs以外の位置で経路外からの合流がなく、且
    つ、経路上のt以外の位置で経路外への分岐がない場
    合、以外は、当該文の移動を許容しない、ことを特徴と
    するプログラム処理方法。
  23. 【請求項23】オペランドを複数のサブオペランドに分
    割して複数のデータの集まりとみなして各サブオペラン
    ドに対する同種の演算を一斉に処理する一斉処理命令を
    用いてプログラムの最適化を行なう処理をコンピュータ
    ・システム上で実行するように記述されたコンピュータ・
    ソフトウェアをコンピュータ可読形式で物理的に格納し
    た記憶媒体であって、前記コンピュータ・ソフトウェア
    は、 プログラム中の代入文で同じ演算を異なるデータに適用
    している箇所を探索して、一箇所に移動し、並列実行す
    る演算子を用いて1つにまとめる代入文移動ステップ
    と、 該並列実行する演算子でまとめられた各代入文が定義又
    は使用・参照する変数を前記一斉処理命令の各サブオペ
    ランドに割り当てるサブオペランド割当ステップと、を
    具備することを特徴とする記憶媒体。
  24. 【請求項24】オペランドを複数のサブオペランドに分
    割して複数のデータの集まりとみなして各サブオペラン
    ドに対する同種の演算を一斉に処理する一斉処理命令を
    用いてプログラムの最適化を行なう処理をコンピュータ
    ・システム上で実行するように記述されたコンピュータ・
    プログラムであって、 プログラム中の代入文で同じ演算を異なるデータに適用
    している箇所を探索して、一箇所に移動し、並列実行す
    る演算子を用いて1つにまとめる代入文移動ステップ
    と、 該並列実行する演算子でまとめられた各代入文が定義又
    は使用・参照する変数を前記一斉処理命令の各サブオペ
    ランドに割り当てるサブオペランド割当ステップと、を
    具備することを特徴とするコンピュータ・プログラム。
JP2002001092A 2002-01-08 2002-01-08 プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム Expired - Fee Related JP4045802B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002001092A JP4045802B2 (ja) 2002-01-08 2002-01-08 プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002001092A JP4045802B2 (ja) 2002-01-08 2002-01-08 プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム

Publications (3)

Publication Number Publication Date
JP2003202991A true JP2003202991A (ja) 2003-07-18
JP2003202991A5 JP2003202991A5 (ja) 2005-06-02
JP4045802B2 JP4045802B2 (ja) 2008-02-13

Family

ID=27641306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002001092A Expired - Fee Related JP4045802B2 (ja) 2002-01-08 2002-01-08 プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム

Country Status (1)

Country Link
JP (1) JP4045802B2 (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008503836A (ja) * 2004-06-24 2008-02-07 インテル コーポレイション 複数の入力命令をベクトル化する方法及び装置
JP2009048367A (ja) * 2007-08-17 2009-03-05 Oki Electric Ind Co Ltd 回路設計方法、ならびにその方法により製造される集積回路
US7506326B2 (en) 2005-03-07 2009-03-17 International Business Machines Corporation Method and apparatus for choosing register classes and/or instruction categories
JP2010272107A (ja) * 2009-04-23 2010-12-02 Ns Solutions Corp 計算装置、計算方法及びプログラム
JP2013080407A (ja) * 2011-10-05 2013-05-02 Fujitsu Ltd コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体
JP2013206289A (ja) * 2012-03-29 2013-10-07 Fujitsu Ltd プログラム、コード生成方法および情報処理装置
JP2013206291A (ja) * 2012-03-29 2013-10-07 Fujitsu Ltd プログラム、コード生成方法および情報処理装置
JP2013206290A (ja) * 2012-03-29 2013-10-07 Fujitsu Ltd プログラム、コード生成方法および情報処理装置
JP2014029610A (ja) * 2012-07-31 2014-02-13 Fujitsu Ltd コード処理方法、情報処理装置およびプログラム
US9395986B2 (en) 2014-04-10 2016-07-19 Fujitsu Limited Compiling method and compiling apparatus
CN112596789A (zh) * 2019-09-17 2021-04-02 富士通株式会社 信息处理方法和非暂态计算机可读存储介质

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008503836A (ja) * 2004-06-24 2008-02-07 インテル コーポレイション 複数の入力命令をベクトル化する方法及び装置
US7802076B2 (en) 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
JP2011165216A (ja) * 2004-06-24 2011-08-25 Intel Corp 複数の入力命令をベクトル化する方法及び装置
US7506326B2 (en) 2005-03-07 2009-03-17 International Business Machines Corporation Method and apparatus for choosing register classes and/or instruction categories
JP2009048367A (ja) * 2007-08-17 2009-03-05 Oki Electric Ind Co Ltd 回路設計方法、ならびにその方法により製造される集積回路
JP2010272107A (ja) * 2009-04-23 2010-12-02 Ns Solutions Corp 計算装置、計算方法及びプログラム
US8612507B2 (en) 2009-04-23 2013-12-17 Ns Solutions Corporation Computing device, calculating method, and program product
JP2013080407A (ja) * 2011-10-05 2013-05-02 Fujitsu Ltd コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体
JP2013206291A (ja) * 2012-03-29 2013-10-07 Fujitsu Ltd プログラム、コード生成方法および情報処理装置
JP2013206290A (ja) * 2012-03-29 2013-10-07 Fujitsu Ltd プログラム、コード生成方法および情報処理装置
JP2013206289A (ja) * 2012-03-29 2013-10-07 Fujitsu Ltd プログラム、コード生成方法および情報処理装置
US8943484B2 (en) 2012-03-29 2015-01-27 Fujitsu Limited Code generation method and information processing apparatus
US9256437B2 (en) 2012-03-29 2016-02-09 Fujitsu Limited Code generation method, and information processing apparatus
JP2014029610A (ja) * 2012-07-31 2014-02-13 Fujitsu Ltd コード処理方法、情報処理装置およびプログラム
US9395986B2 (en) 2014-04-10 2016-07-19 Fujitsu Limited Compiling method and compiling apparatus
CN112596789A (zh) * 2019-09-17 2021-04-02 富士通株式会社 信息处理方法和非暂态计算机可读存储介质

Also Published As

Publication number Publication date
JP4045802B2 (ja) 2008-02-13

Similar Documents

Publication Publication Date Title
Leupers Code optimization techniques for embedded processors: Methods, algorithms, and tools
Goossens et al. Embedded software in real-time signal processing systems: Design technologies
US8065669B2 (en) Apparatus for automatically converting numeric data to a processor efficient format for performing arithmetic operations
US8549501B2 (en) Framework for generating mixed-mode operations in loop-level simdization
US7565631B1 (en) Method and system for translating software binaries and assembly code onto hardware
Leupers Code selection for media processors with SIMD instructions
JP2006243839A (ja) 命令生成装置及び命令生成方法
Kudriavtsev et al. Generation of permutations for SIMD processors
Özkan et al. FPGA-based accelerator design from a domain-specific language
US20050283775A1 (en) Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization
US9383977B1 (en) Generation of compiler description from architecture description
JP2003202991A (ja) プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム
Leupers et al. Graph-based code selection techniques for embedded processors
CN107851002A (zh) 一种代码编译方法及代码编译器
US8935512B2 (en) Instruction operation code generation system
US8621444B2 (en) Retargetable instruction set simulators
Stitt et al. Techniques for synthesizing binaries to an advanced register/memory structure
Manilov et al. Free rider: A tool for retargeting platform-specific intrinsic functions
Prokhorov Computers in Russia: science, education, and industry
Melnyk et al. Automatic generation of ASICs
JP7295466B2 (ja) クラス生成プログラム及びクラス生成方法
JP2002312176A (ja) 変換プログラム、コンパイラ、コンピュータ装置、プログラム変換方法及び記憶媒体
US20230315480A1 (en) Computer-readable recording medium storing instruction sequence generation program, instruction sequence generation method, and information processing device
JP6897213B2 (ja) コード生成装置、コード生成方法及びコード生成プログラム
Linders Compiler Vectorization for Coarse-Grained Reconfigurable Architectures

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040818

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040818

A977 Report on retrieval

Effective date: 20070713

Free format text: JAPANESE INTERMEDIATE CODE: A971007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070724

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070921

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20071030

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071112

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

Year of fee payment: 3

Free format text: PAYMENT UNTIL: 20101130

LAPS Cancellation because of no payment of annual fees