JP4077252B2 - コンパイラプログラムおよびコンパイル処理方法 - Google Patents
コンパイラプログラムおよびコンパイル処理方法 Download PDFInfo
- Publication number
- JP4077252B2 JP4077252B2 JP2002190052A JP2002190052A JP4077252B2 JP 4077252 B2 JP4077252 B2 JP 4077252B2 JP 2002190052 A JP2002190052 A JP 2002190052A JP 2002190052 A JP2002190052 A JP 2002190052A JP 4077252 B2 JP4077252 B2 JP 4077252B2
- Authority
- JP
- Japan
- Prior art keywords
- vectorization
- program
- simd
- instruction
- loop
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は,ソースプログラムの翻訳において,プログラム中のループ部分の実行時の性能を向上させる技術に関し,特にベクトル化処理を利用するプログラムのコンパイラ技術に関する。
【0002】
【従来の技術】
コンピュータの科学技術計算分野において,プログラムの実行性能は,ハードウェアとソフトウェア(コンパイラ)の最も重要な価値基準である。また,科学技術計算分野のプログラムはプログラム中のループ部分に実行コストが高いことが知られている。
【0003】
プログラム中のループ部分を高速化するためのハードウェアとして,SIMD (Single Instruction stream Multiple Data stream) 機構を装備した計算機がある。SIMD機構とは,複数の演算装置にそれぞれ個々に与えたデータに対して同一の命令を並列実行させる演算方式であり,ベクトル演算機構ともいう。その命令をSIMD命令またはベクトル命令という。
【0004】
SIMD機構を装備したハードウェアとして,ベクトル型スーパーコンピュータのVPPシリーズ(富士通株式会社)やSXシリーズ(日本電気株式会社)がある。また,Pentium3/Pentium4チップ(米国Intel社)にもSSE/SSE2等のSIMD機構がある。さらに,近年の組み込み向けの小型CPUチップにも高速化に向けたSIMD機構が装備されてきた。
【0005】
これらのSIMD機構向けのコンパイラは自動ベクトル化機能により,SIMD命令を生成している。一般に自動ベクトル化機能は,プログラム中のループ構造を対象にSIMD命令を生成する。しかし,プログラムのループ中に対象CPUに装備されたSIMD命令として表現できない演算が現れた場合,そのままベクトル化することはできなかった。
【0006】
そこで,従来は,プログラムのループ中にベクトル化が不可能な演算が出現した場合に,ループ全体をベクトル化不可能とするか,または,ループをベクトル化可能な部分とベクトル化不可能な部分とに分けていた。ベクトル化可能な部分とベクトル化不可能な部分とに分けることを,部分ベクトル化という。
【0007】
図13は,従来技術における部分ベクトル化の例を示す図である。図13のプログラムは,理解しやすいようにソースイメージで示している。また,配列の添字のないものは配列の全要素を示すものとする(以下,本明細書およびすべての図面について同様である)。
【0008】
図13(a)は,部分ベクトル化を行う前のプログラムの例である。図13(a)のプログラムにおいて,1回目の配列要素A(I)の演算では,B(I)とC(I)の和を求め,2回目の配列要素A(I)の演算では,B(I)とC(I)の積を求め,それぞれの演算結果をPrint文により出力している。すなわち,処理▲1▼では1回目の配列要素A(I)を求める演算を行い,処理▲2▼では1回目の配列要素A(I)をPrint文で出力し,処理▲3▼では2回目の配列要素A(I)を求める演算をし,処理▲1▼〜▲3▼をDoループによりI=1からI=100まで繰り返した後,処理▲4▼で2回目の配列要素Aを一度にすべて出力している。このプログラムのループ部分のベクトル化を行いたくとも,ループ内にあるPrint文はベクトル化不可能な部分であるため,このままループ部分全体をベクトル化することは不可能である。
【0009】
そこで,従来のコンパイラで行っていた部分ベクトル化方式では,図13(a)のプログラムのループ部分をベクトル化可能な部分とベクトル化不可能な部分とに分離し,図13(b)のようなプログラムに展開する。図13(b)は,図13(a)のプログラムを部分ベクトル化したプログラムの例である。
【0010】
図13(b)のプログラムでは,図13(a)のプログラムのループ部分(処理▲1▼〜▲3▼)からベクトル化不可能な部分であるPrint文(処理▲2▼)をループ外に出して,ベクトル化可能な部分である処理▲1▼′と,ベクトル化不可能な部分である処理▲2▼′と,ベクトル化可能な部分である処理▲3▼′とに分けている。2回目の配列要素A(I)の定義については,処理▲1▼′において一時的な作業領域(Temp)に結果を格納し,処理▲3▼′において配列Tempから配列Aへのデータの受け渡しを行っている。図13(b)では,処理▲1▼′および処理▲3▼′がベクトル化可能な部分であり,処理▲2▼′および処理▲4▼′(図13(a)における処理▲4▼)がベクトル化不可能な部分である。
【0011】
【発明が解決しようとする課題】
以上のような従来の部分ベクトル化では,ベクトル化可能な部分とベクトル化不可能な部分とを分けてしまうため,その間のデータのやり取りは一時的な作業領域を必要とする場合があり(上記従来例参照),実行時間に影響を及ぼすことがあった。
【0012】
また,SIMD機構が装備されていないハードウェアで実行させるプログラムのコンパイルでは,プログラムのベクトル化処理が行われていないため,演算レイテンシの隠蔽,ループの繰り返しによる間接的な時間に関するオーバヘッドの削減ができないという問題があった。演算レイテンシとは,演算命令間の(隠れた)待ち時間のことである。
【0013】
本発明は,上記問題点の解決を図り,SIMD機構が装備されているハードウェア,または,SIMD機構が装備されていないハードウェア上で動作させるプログラムのコンパイラにおいて,プログラムのベクトル化処理により,特にプログラム中のループ部分の実行性能を向上させることを目的とする。
【0014】
【課題を解決するための手段】
本発明は,上記課題を解決するため,従来のベクトル化不可能であった演算または部分ベクトル化で処理を行っていたベクトル化不可能な演算を含むループを,擬似的なベクトル演算の表現を使うことにより,ベクトル化可能なループとみなしてコンパイル処理することを特徴とする。
【0015】
これにより,SIMD機構が装備されたハードウェアでは,ループ全体がベクトル化可能となることで全体としてSIMD機構を有効利用でき,大幅な実行性能改善が可能となる。また,SIMD機構が装備されていないハードウェアでは,演算レイテンシの隠蔽やループの繰り返しによる間接的な時間に関するオーバヘッドの削減が実現され,実行性能改善が可能となる。
【0016】
【発明の実施の形態】
以下,図面に従って本発明の実施の形態を説明する。
【0017】
図1は,本発明の実施の形態におけるシステムの構成例を示す図である。データ処理装置1は,CPUおよびメモリからなるコンピュータである。コンパイラ10は,高級言語で記述されたソースプログラム20を,機械語の命令列からなるオブジェクトプログラム30に翻訳(コンパイル)するソフトウェアプログラムであり,コンピュータにインストールされることで,ソースプログラム解析部11,ベクトル化部12,ベクトル演算展開部13,命令スケジューリング部14,コード生成部15として機能する。なお,本ソフトウェアプログラムは,CD−ROM,MO (Magneto Optical disk) ,DVD (Digital Versatile Disk) などの媒体や,ネットワークを通して供給することができる。
【0018】
ソースプログラム解析部11は,ソースプログラム20を解析し,中間プログラム(中間言語で記述されたテキスト)を作成する。ベクトル化部12は,ソースプログラム解析部11から中間プログラムを受け取り,そのプログラムからベクトル化可能であるループを抽出し,ベクトル化処理を実行する。このとき,オブジェクトプログラム30を動作させるターゲットとなるコンピュータ(以下,ターゲットマシンという)に,対応するSIMD命令がない演算が,抽出するループ内に含まれていてもかまわないものとし,単純に,論理的にベクトル化可能なループはすべてベクトル化可能なループであるとみなして処理する。
【0019】
ベクトル演算展開部13は,ベクトル化部12でベクトル化処理がほどこされた中間プログラムに対し,SIMD化不可部分(対応するSIMD命令がない演算部分)の展開,アンローリング展開,または,最適なベクトル長の選択などの処理をほどこす。命令スケジューリング部14は,ベクトル演算展開部13の処理がほどこされた中間プログラムを最適化する。コード生成部15は,命令スケジューリング部14で最適化された中間プログラムを解析し,オブジェクトプログラム30を作成する。
【0020】
以下では,オブジェクトプログラム30を動作させるターゲットマシンがSIMD機構を持つ場合を実施の形態1,SIMD機構を持たない場合を実施の形態2として,特に本発明に関係するベクトル化部12,ベクトル演算展開部13の処理を中心に説明する。なお,以下で説明する図2に示すベクトル化部12の処理は,実施の形態1も実施の形態2も同様である。ベクトル演算展開部13は,実施の形態1の場合,図3に示す処理を行い,実施の形態2の場合,図5に示す処理を行う。
【0021】
〔実施の形態1〕
実施の形態1は,オブジェクトプログラム30のターゲットマシンがSIMD機構を装備している場合の例である。ただし,ターゲットマシンは,必ずしもすべての演算命令についてのSIMD機構を備えている必要はない。
【0022】
実施の形態1では,ベクトル化部12でSIMD命令として表現できない部分を擬似的にベクトル化可能であるとしてベクトル化し,その部分をベクトル演算展開部13で局所的に逐次演算命令に置き換える。このため,SIMD命令とスカラ命令とを並列実行することができ,オーバヘッドを削減することが可能となる。
【0023】
図2は,本実施の形態1におけるベクトル化処理フローチャートである。ベクトル化部12は,ソースプログラム解析部11から受け取った中間プログラムからループを順に1つ抽出し(ステップS1),ベクトル化可能であるかを判定し(ステップS2),可能でないと判定されればステップS4の処理に進む。ここで,ステップS2の処理では,ループ内に対応するSIMD命令がない演算が含まれているかどうかは問わず,論理的にベクトル化可能なループであるかどうかだけを判断する。例えば,変数の値の定義,参照の依存関係により,並列に演算できない命令があれば,ベクトル化不可能と判断する。
【0024】
ステップS2の処理において可能であると判定された場合,そのループに対してベクトル化処理を実行する(ステップS3)。抽出されたループが中間プログラムの中で最後のループであるかどうかを判定し(ステップS4),最後のループでなければステップS1の処理に戻り,最後のループであれば処理を終了する。
【0025】
図3は,本実施の形態1におけるベクトル演算展開処理フローチャートである。ベクトル演算展開部13において,まず,ベクトル化部12でベクトル化処理がほどこされたプログラムからループを順に1つ抽出し(ステップS10),その抽出されたループが,ベクトル化部12においてベクトル化されたループかどうかを判定し(ステップS11),ベクトル化されたループでなければステップS18の処理に進む。
【0026】
ステップS11の処理においてベクトル化されたループと判定された場合,SIMD命令に対応したベクトル長を選択して決定し(ステップS12),抽出されたループからテキストを順に1つ抽出する(ステップS13)。その抽出されたテキストに対応するSIMD命令が,ターゲットマシンにあるかどうかを判定し(ステップS14),対応する命令があればステップS17の処理に進む。
【0027】
ステップS14の処理において対応する命令がないと判定された場合,抽出されたテキストのベクトル命令を逐次命令に変換し(ステップS15),ステップS12の処理で決定されたベクトル長要素分の逐次命令展開を行う(ステップS16)。ここで,ステップS15の処理では,例えば,VLOADというベクトル命令をLOADという逐次命令に変換する。また,ステップS16の処理では,例えばベクトル長が2と決定されている場合,1要素目のLOAD,2要素目のLOADといったように,ベクトル長要素分だけ逐次命令を並べる。
【0028】
抽出されたテキストが抽出されたループ内で最後のテキストであるかどうかを判定し(ステップS17),最後のテキストでなければステップS13の処理に戻る。ステップS17の処理において最後のテキストであると判定された場合,抽出されたループがプログラムの中で最後のループであるかどうかを判定し(ステップS18),最後のループでなければステップS10の処理に戻り,同様に処理を繰り返し,最後のループであれば処理を終了する。
【0029】
図4は,従来の部分ベクトル化と本実施の形態1のベクトル化との違いを比較して説明する図である。図4(A)に示す配列の演算において,a(i)=b(i)/a(i)の演算は,ターゲットマシンに除算のSIMD命令がないため,SIMD命令として表現できない部分であり,c(i)=b(i)+a(i)の演算は,SIMD命令として表現できる部分であるとする。
【0030】
図4(B)は,図4(A)の演算を,従来の方法により部分ベクトル化した例である。従来は,ベクトル化可能な部分(SIMD命令として表現できる部分)と不可能な部分(SIMD命令として表現できない部分)を分割していた。図4(B)の例では,ベクトル化不可能な除算部分は逐次ループで処理しており,ベクトル化可能な加算部分はベクトル化ループで分けて処理している。
【0031】
図4(C)は,図4(A)の演算を本実施の形態1の方法によりベクトル長をn+1としてベクトル化した例を,中間言語イメージで示している。図中,vtdは,ベクトルテンポラリ領域(要素の長さ分のデータを一時的に保持するレジスタまたは領域)である。
【0032】
本実施の形態1の方法では,SIMD命令として表現できない部分である図4(A)のa(i)=b(i)/a(i)の配列演算部分の中でも,特にベクトル化不可能である除算部分のみを逐次命令展開し,メモリロードやメモリストアなどのベクトル化可能な部分に関してはベクトル命令(SIMD命令)によって実行する。また,逐次命令展開部分もベクトル長分の展開を行うためベクトル命令部分と合わせて1つのループとすることが可能である。図4(C)の例では,ベクトル長がn+1であるので,逐次命令展開部分もn+1並列で展開されている。
【0033】
よって,本実施の形態1の方法では,従来の部分ベクトル化と異なり,除算と加算の2つの演算が1つのループ内に収まるので,オーバヘッドが軽減される。
【0034】
〔実施の形態2〕
本実施の形態2は,ターゲットマシンがSIMD機構を装備していない場合の実施形態である。ターゲットマシンがSIMD機構を装備していない場合には,従来のコンパイラでは,ベクトル化処理は一切考慮されなかったが,本実施の形態2では,ベクトル化部12において論理的にベクトル化可能である部分をすべて擬似的にベクトル化し,そのベクトル化部分をベクトル演算展開部13で逐次演算命令に展開することを行う。
【0035】
すなわち,本実施の形態2では,SIMD機構を装備しないハードウェアにおいて,擬似的にベクトル化されたループに対してベクトル演算1つを局所的に展開することにより,演算アンローリングの手法を用いて逐次演算に展開する。この結果,ループの演算レイテンシの隠蔽が実現された命令列の生成が行われることになる。後段の命令スケジューリング部14においても,演算レイテンシの隠蔽を考慮した最適化が可能であるが,特に本実施の形態2によれば,ループの演算レイテンシの隠蔽を効率よく行うことが可能になる。
【0036】
ここで,ループの演算レイテンシの隠蔽とは,メモリアクセス命令とそのオペランドを使用する演算,または,演算とその演算の結果を直接参照する演算同士が連続すると遅れが出るため,両者を離すこと(依存性のない命令を間に挟むこと)により命令同士の依存性をなくし,待ちを発生させないで実行性能を改善することをいう。
【0037】
実施の形態2におけるベクトル化部12の処理は,実施の形態1と同様である。ベクトル演算展開部13の処理が実施の形態1と実施の形態2とで異なる。
【0038】
図5は,本実施の形態2におけるベクトル演算展開処理フローチャートである。ベクトル演算展開部13において,まず,ベクトル化部12でベクトル化処理がほどこされたプログラムからループを順に一つ抽出し(ステップS20),その抽出されたループが,ベクトル化部12においてベクトル化されたループかどうかを判定し(ステップS21),ベクトル化されていなければステップS27の処理に進む。
【0039】
ステップS21の処理においてベクトル化されたループと判定された場合,SIMD命令に対応したベクトル長を選択してベクトル長を決定する(ステップS22)。次に,抽出されたループからテキストを順に1つ抽出する(ステップS23)。抽出されたテキストのベクトル命令を,ステップS22の処理で決定されたベクトル長要素分のアンローリング展開をし(ステップS24),ベクトル命令を逐次命令に変換する(ステップS25)。ここで,ステップS24の処理では,例えばベクトル長が2と決定されている場合,1要素目のVLOAD,2要素目のVLOADといったように,ベクトル長要素分だけ命令を展開する。また,ステップS25の処理では,例えば,VLOADというベクトル命令をLOADという逐次命令に変換する。
【0040】
抽出されたテキストが抽出されたループ内で最後のテキストであるかどうかを判定し(ステップS26),最後のテキストでなければステップS23の処理に戻る。ステップS26の処理において最後のテキストであると判定された場合,抽出されたループがプログラムの中で最後のループであるかどうかを判定し(ステップS27),最後のループでなければステップS20の処理に戻り,最後のループであれば処理を終了する。
【0041】
図6は,従来のアンローリング展開と本実施の形態2のアンローリング展開との違いを比較して説明する図である。図6(A)のプログラムで示す配列の演算に関して,従来の手法と本実施の形態2の手法とを比較する。図中,tmpはテンポラリ領域(一時的にデータを保持する領域)である。
【0042】
図6(B)は,従来の手法で図6(A)を2重のアンローリング展開した例である。また,図6(C)は,図6(B)の命令展開イメージである。従来のアンローリング展開では,メモリアクセス命令とそのオペランドを使用する演算,または,演算とその演算の結果を直接参照する演算同士が連続するため,命令実行時に命令毎の待ちが発生する。図6(C)において枠で囲まれたtmpが連続して使用されているテンポラリ領域である。
【0043】
図6(D)は,本実施の形態2の手法により図6(A)をベクトル長2でベクトル化した例である。また,図6(E)は,図6(D)の命令展開イメージである。本実施の形態2のアンローリング展開では,まず演算を擬似的にベクトル化し,メモリアクセス命令ごと,オペランドを使用する演算ごとにまとめてアンローリング展開するため,依存性のある命令同士が自動的に離れることになる。よって,本実施の形態2の手法では,命令同士の依存性がなくなるため待ちが発生しなくなり,演算レイテンシの隠蔽が可能となる。
【0044】
〔実施の形態3〕
本実施の形態3として,ループ中にIF文等の条件文が含まれる場合に,SIMD化が可能な条件をループ内部で判定することによりベクトル化を行う実施形態を説明する。例えば,ループ中にIF文が存在する場合,IF文で制御される部分は条件によって実行されたり,されなかったりする。SIMD命令は連続した要素を処理する命令であるため,従来は,SIMD機構向けのコンパイラにおいてIF文等の条件文のベクトル化が不可能であった。
【0045】
図7は,本実施の形態3によるベクトル化を説明する図である。図7(A)はIF文を含むループのプログラム例である。図7(A)のプログラムをベクトル長2で連続2要素の処理としたものの展開イメージが,図7(B)のプログラム例である。図7(B)において,連続する2要素が共に“真”の場合のみSIMD命令で対応することができる。
【0046】
図7(B)のプログラムの処理を簡単に説明すると,まず最初の要素が“偽”ではなく(“真”である),2要素目も“偽”ではない(“真”である)場合,2つの要素に対してSIMD命令で対応する。最初の要素が“真”であり,2要素目が“偽”である場合,最初の要素の逐次展開処理を行う。最初の要素が“偽”であり,2要素目が“真”である場合,2要素目の逐次展開処理を行う。最初の要素が“偽”であり,2要素目も“偽”である場合,どちらの要素も処理を行わない。
【0047】
〔実施の形態4〕
本実施の形態4として,ベクトル長を外部から指示する手段を持つ場合の例を説明する。本実施の形態4では,ベクトル長をユーザが指定することができる。一般にベクトル長は長いほど並列効率が良くなるが,弊害として使用レジスタが足りなくなる場合がある。本実施の形態4では,ユーザが最適と思われるベクトル長を指定することにより,より実行効率を改善することができる。例えば,ベクトル長を外部から指示させるために,ソースプログラムに対してコンパイラ起動時のパラメータによるオプションの指定手段と解析手段とを設ける。または,ソースプログラムもしくはループに対してベクトル長をユーザが指示するためのソースプログラム中に記述可能な文(最適化制御行)を用意する。
【0048】
【実施例】
以下,本発明の実施例を図面を用いて説明する。
【0049】
〔実施例1〕
実施例1は,SIMD機構は装備されているが,ループ中の一部の演算が対象ハードウェア上でSIMD表現できない場合の例である。
【0050】
図8は,本実施例1におけるベクトル演算展開の中間言語イメージの例を示す。図中,STDは通常のテンポラリ領域を示し,VTDはベクトルテンポラリ領域を示す。図8(A)は,ソースプログラムの例である。図8(A)のソースプログラムは,ソースプログラム解析部11で解析され,その後,ベクトル化部12でベクトル化処理がほどこされる。
【0051】
図8(B)は,図8(A)のソースプログラムを解析し,ベクトル化処理がほどこされた後の中間プログラムの例である。図8(B)の処理の例では,ベクトル化部12でベクトル長が決定されている。処理▲1▼ではベクトル長が4と決定されており,以降ベクトル処理は4要素ずつ行われる。処理▲2▼では配列要素listをベクトルテンポラリ領域VTD1にロードし,処理▲3▼では配列要素cをベクトルテンポラリ領域VTD2にロードし,処理▲4▼では処理▲2▼の結果にしたがって配列要素bをベクトルテンポラリ領域VTD3にロードする。処理▲5▼では4要素分のベクトル演算による加算を行い,ベクトルテンポラリ領域VTD4に格納し,処理▲6▼では演算結果のベクトルテンポラリ領域VTD4の値を配列要素aにストアする。
【0052】
しかし,処理▲4▼において配列要素bは連続する要素ではなく配列要素listに依存する要素であるので,処理▲4▼に対応するSIMD命令は存在しない。よって,このままではプログラムが実行不可能である。そこで,ベクトル演算展開部13により,ベクトル化不可能な部分の逐次命令展開を行う。
【0053】
図8(C)は,図8(B)の中間プログラムにベクトル演算展開処理をほどこした中間プログラムの例である。SIMD命令で表現できない処理▲4▼に関して,それに付随する処理▲2▼をも含めてテンポラリ領域(STD)を用いてベクトル長要素分(ここでは4要素分)の逐次命令展開を行い,その逐次演算結果をベクトルテンポラリ領域(VTD)に転送し,ベクトル演算処理を行っている。
【0054】
〔実施例2〕
実施例2は,対象ハードウェア上にSIMD機構を持たない場合の擬似ベクトル化処理の例である。
【0055】
図9は,本実施例2におけるベクトル演算展開の中間言語イメージの例を示す。図中,STDは通常のテンポラリ領域を示し,VTDはベクトルテンポラリ領域を示す。図9(A)は,ソースプログラムの例である。図9(A)のソースプログラムは,ソースプログラム解析部11で解析された後,ベクトル化部12でベクトル化処理がほどこされる。
【0056】
図9(B)は,図9(A)のソースプログラムを解析し,ベクトル化処理がほどこされた中間プログラムの例である。この図9(B)の例では,ベクトル化部12でベクトル長が決定されている。処理▲1▼ではベクトル長が4と決定されており,以降ベクトル処理は4要素ずつ行われる。処理▲2▼では配列要素cをベクトルテンポラリ領域VTD1にロードし,処理▲3▼では配列要素bをベクトルテンポラリ領域VTD2にロードする。処理▲4▼では4要素分のベクトル演算による加算を行い,演算結果をベクトルテンポラリ領域VTD3に格納し,処理▲5▼では演算結果のベクトルテンポラリ領域VTD3の値を配列要素aにストアする。
【0057】
しかし,図9(B)では,プログラムが擬似的にベクトル化されているだけであるので,SIMD機構を持たないハードウェア上ではプログラムが実行不可能である。そこで,ベクトル演算展開部13で逐次命令展開を行う。
【0058】
図9(C)は,図9(B)の中間プログラムにベクトル演算展開処理をほどこした中間プログラムの例である。図9(B)のベクトル命令ごとにアンローリング展開(ベクトル長は4と決定されているので,4並列のアンローリング展開)して逐次命令に変換している。ベクトル化部12によりベクトル化した命令列をもとに展開しているため,同じテンポラリ領域(STD)が連続して使用されないように命令が配列されている。
【0059】
〔実施例3〕
実施例3は,ループ中にIF文を含み,ベクトル化処理としてマスク処理を実施する場合の例である。この例では,ターゲットマシンは,SIMD機構を装備していないものとする。SIMD機構を装備しているターゲットマシンの場合にも,ベクトル演算展開処理の部分を除き,同様に処理される。
【0060】
図10および図11は,本実施例3におけるベクトル化処理後およびベクトル演算展開の中間言語イメージの例を示す。図中,STDは通常のテンポラリ領域を示し,VTDはベクトルテンポラリ領域を示す。図10(A)は,ソースプログラムの例である。図10(A)のソースプログラムは,ソースプログラム解析部11で解析された後,ベクトル化部12でベクトル化処理がほどこされる。
【0061】
図10(B)は,図10(A)のソースプログラムを解析し,ベクトル化処理がほどこされたの中間プログラムの例である。この図10(B)の例では,ベクトル化部12でベクトル長が決定されている。処理▲1▼ではベクトル長が2と決定されており,以降ベクトル処理は2要素ずつ実行される。処理▲2▼では配列要素mをベクトルテンポラリ領域VTD1にロードし,処理▲3▼では処理▲2▼でロードした配列要素mの中で“5.0”以上の要素のマスクをベクトルテンポラリ領域VTD2に生成する。処理▲4▼では配列要素bをベクトルテンポラリ領域VTD4にロードし,処理▲5▼では配列要素cをベクトルテンポラリ領域VTD5にロードする。処理▲6▼では処理▲3▼で生成されたVTD2のマスク要素に対応するVTD4およびVTD5の加算を行い,演算結果をベクトルテンポラリ領域VTD6に格納する。処理▲7▼では処理▲3▼で生成されたマスク要素の演算結果を配列要素aにストアする。
【0062】
以上のように,図10(B)において,処理▲3▼では“5.0”以上の配列mの要素のマスクを生成し,処理▲6▼および▲7▼においてマスク要素のみの処理を行うように記述されている。しかし,図10(B)のようなベクトル処理の記述では実際にはプログラムが実行不可能であるので,ベクトル演算展開部13により,逐次命令展開を行う。
【0063】
図11は,図10(B)の中間プログラムにベクトル演算展開処理をほどこした中間プログラムの例である。図11では,図10(B)の処理▲1▼でベクトル長が2と決定されているので,配列mの連続する2要素の“真”と“偽”の組合せごとに展開されている。連続する2要素が“真”である場合のみ,2連続で演算処理が実行される。どちらか一方が“真”である場合には,“真”である方の要素のみ演算処理が実行される。連続する2要素が“偽”である場合には,演算処理は実行されない。
【0064】
〔実施例4〕
実施例4は,ベクトル長を外部から指示する(ユーザが指示する)手段を持つ場合の例である。
【0065】
図12は,本実施例4における中間言語イメージの例を示す図である。図中,STDは通常のテンポラリ領域を示し,VTDはベクトルテンポラリ領域を示す。図12(A)は,ソースプログラムの例である。図12(A)に示すように,外部からベクトル長(図12ではベクトル長は4)を指示する文(最適化制御行)がソースプログラムに記述されている。図12(A)のソースプログラムは,ソースプログラム解析部11で解析された後,ベクトル化部12でベクトル化処理がほどこされる。
【0066】
図12(B)は,図12(A)のソースプログラムを解析し,ベクトル化処理がほどこされた中間プログラムの例である。処理▲1▼では図12(A)の指示からベクトル長が4と決定されており,以降ベクトル処理は4要素ずつ行われる。処理▲2▼では配列要素cをベクトルテンポラリ領域VTD1にロードし,処理▲3▼では配列要素bをベクトルテンポラリ領域VTD2にロードする。処理▲4▼では4要素分のベクトル演算を行い,処理▲5▼では演算結果を配列要素aにストアする。
【0067】
しかし,図12(B)では,プログラムが擬似的にベクトル化されているだけであるので,例えば,ハードウェアがSIMD機構を持たない場合などには,プログラムが実行不可能である。そこで,ベクトル演算展開部13で逐次命令展開を行う。
【0068】
図12(C)は,図12(B)の中間プログラムにベクトル演算展開処理をほどこした中間プログラムの例である。図12(B)のベクトル命令ごとにアンローリング展開(ベクトル長は4と決定されているので,4並列のアンローリング展開)して逐次命令に変換している。ベクトル化部12によりベクトル化した命令列をもとに展開しているため,同じテンポラリ領域(STD)が連続して使用されないように命令が配列されている。
【0069】
本実施の形態1〜4および本実施例1〜4の特徴を列挙すると以下のとおりである。
【0070】
(付記1) SIMD機構が装備されているコンピュータ上で動作させるプログラムをコンパイルするコンパイラプログラムにおいて,
ソースプログラムを入力して解析する処理と,
ソースプログラムの解析結果について,ループ中の一部の演算が前記コンピュータ上でSIMD命令として表現できない場合に,その部分を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理と,
前記ベクトル化可能なループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理とを,
コンピュータに実行させるためのプログラムを含む
ことを特徴とするコンパイラプログラム。
【0071】
(付記2) SIMD機構が装備されていないコンピュータ上で動作させるプログラムをコンパイルするコンパイラプログラムにおいて,
ソースプログラムを入力して解析する処理と,
ソースプログラムの解析結果について,前記コンピュータがSIMD機構を持つものとして,ループ中の演算を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理と,
前記ベクトル化可能なループとしたループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理とを,
コンピュータに実行させるためのプログラムを含む
ことを特徴とするコンパイラプログラム。
【0072】
(付記3) 付記1または付記2に記載のコンパイラプログラムにおいて,
前記ベクトル化処理における処理対象ループが条件判定によって実行するかしないかが決定される演算を含む場合に,前記条件判定結果に応じてマスク処理する命令表現を出力することにより,そのループをベクトル化可能なループとするベクトル化処理を,
コンピュータに実行させるプログラムを含む
ことを特徴とするコンパイラプログラム。
【0073】
(付記4) 付記1から付記3までのいずれかに記載のコンパイラプログラムにおいて,
前記ベクトル化処理または前記ベクトル演算展開処理では,外部からの指示によりベクトル長を決定する
ことを特徴とするコンパイラプログラム。
【0074】
(付記5) SIMD機構が装備されているコンピュータ上で動作させるプログラムをコンパイルするコンパイラプログラムの記録媒体であって,
ソースプログラムを入力して解析する処理と,
ソースプログラムの解析結果について,ループ中の一部の演算が前記コンピュータ上でSIMD命令として表現できない場合に,その部分を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理と,
前記ベクトル化可能なループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理とを,
コンピュータに実行させるためのプログラムを記録した
ことを特徴とするコンパイラプログラムの記録媒体。
【0075】
(付記6) SIMD機構が装備されていないコンピュータ上で動作させるプログラムをコンパイルするコンパイラプログラムの記録媒体であって,
ソースプログラムを入力して解析する処理と,
ソースプログラムの解析結果について,前記コンピュータがSIMD機構を持つものとして,ループ中の演算を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理と,
前記ベクトル化可能なループとしたループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理とを,
コンピュータに実行させるためのプログラムを記録した
ことを特徴とするコンパイラプログラムの記録媒体。
【0076】
(付記7) SIMD機構が装備されているコンピュータ上で動作させるプログラムをコンパイルするコンパイル処理方法において,
ソースプログラムを入力して解析する処理過程と,
ソースプログラムの解析結果について,ループ中の一部の演算が前記コンピュータ上でSIMD命令として表現できない場合に,その部分を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理過程と,
前記ベクトル化可能なループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理過程と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理過程とを有する
ことを特徴とするコンパイル処理方法。
【0077】
(付記8) SIMD機構が装備されていないコンピュータ上で動作させるプログラムをコンパイルするコンパイル処理方法において,
ソースプログラムを入力して解析する処理過程と,
ソースプログラムの解析結果について,前記コンピュータがSIMD機構を持つものとして,ループ中の演算を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理過程と,
前記ベクトル化可能なループとしたループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理過程と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理過程とを有する
ことを特徴とするコンパイル処理方法。
【0078】
(付記9) SIMD機構が装備されているコンピュータ上で動作させるプログラムをコンパイルするコンパイル処理装置において,
ソースプログラムを入力して解析する処理手段と,
ソースプログラムの解析結果について,ループ中の一部の演算が前記コンピュータ上でSIMD命令として表現できない場合に,その部分を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理手段と,
前記ベクトル化可能なループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理手段と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理手段とを備える
ことを特徴とするコンパイル処理装置。
【0079】
(付記10) SIMD機構が装備されていないコンピュータ上で動作させるプログラムをコンパイルするコンパイル処理装置において,
ソースプログラムを入力して解析する処理手段と,
ソースプログラムの解析結果について,前記コンピュータがSIMD機構を持つものとして,ループ中の演算を疑似的にSIMD命令表現することにより,そのループをベクトル化可能なループとするベクトル化処理手段と,
前記ベクトル化可能なループとしたループについて前記疑似的にSIMD命令表現された演算部分をループ内で逐次命令に置き換えて展開するベクトル演算展開処理手段と,
前記ベクトル演算展開処理の結果をもとにオブジェクトプログラムを生成する処理手段とを備える
ことを特徴とするコンパイル処理装置。
【0080】
【発明の効果】
以上説明したように,本発明により,SIMD機能を持たない,またはSIMD表現ができないループに対して擬似的なベクトル演算の表現を使うことにより,ベクトル化可能なループとして扱い,そのループ内のテキストをSIMD命令の有無に応じて命令展開することにより,より実行性能が向上されたオブジェクトプログラムを生成することができるようになる。
【0081】
また,ターゲットマシンがSIMD機構を装備する場合のコンパイラと,SIMD機構を装備しない場合のコンパイラとで,ベクトル化処理の考慮により処理を共通化できる部分が多くなるので,コンパイラ開発の工程を短縮することが可能になり,各種のターゲットマシンに応じたコンパイラの開発が容易になる。
【図面の簡単な説明】
【図1】本発明におけるシステムの構成例を示す図である。
【図2】本実施の形態1におけるベクトル化処理フローチャートである。
【図3】本実施の形態1におけるベクトル演算展開処理フローチャートである。
【図4】従来の部分ベクトル化と本実施の形態1のベクトル化との違いを比較して説明する図である。
【図5】本実施の形態2におけるベクトル演算展開処理フローチャートである。
【図6】従来のアンローリング展開と本実施の形態2のアンローリング展開との違いを比較して説明する図である。
【図7】本実施の形態3によるベクトル化を説明する図である。
【図8】本実施例1におけるベクトル演算展開の中間言語イメージの例を示す図である。
【図9】本実施例2におけるベクトル演算展開の中間言語イメージの例を示す図である。
【図10】本実施例3におけるベクトル化処理後の中間言語イメージの例を示す図である。
【図11】本実施例3におけるベクトル演算展開の中間言語イメージの例を示す図である。
【図12】本実施例4におけるベクトル演算展開の中間言語イメージの例を示す図である。
【図13】従来技術における部分ベクトル化の例を示す図である。
【符号の説明】
1 データ処理装置(CPU/メモリ)
10 コンパイラ
11 ソースプログラム解析部
12 ベクトル化部
13 ベクトル演算展開部
14 命令スケジューリング部
15 コード生成部
20 ソースプログラム
30 オブジェクトプログラム
Claims (5)
- 複数の演算装置にそれぞれ個々に与えたデータに対して同一の命令を並列実行させるSIMD機構が装備されている第1のコンピュータ上で動作させるプログラムをコンパイルする処理を,第2のコンピュータに実行させるためのコンパイラプログラムであって,
前記第2のコンピュータを,
入力されたソースプログラムを解析し,中間言語で記述されたテキストを作成するソースプログラム解析手段と,
前記ソースプログラム解析手段から中間言語で記述されたテキストを受け取り,ループ中の一部の演算が前記第1のコンピュータが実行可能なSIMD命令として表現できない場合であっても,論理的にベクトル化可能なループはすべてベクトル化可能なループであるとみなして,その部分をSIMD命令表現の中間言語で記述されたテキストに変換するベクトル化処理を行うベクトル化手段と,
前記ベクトル化手段により変換されたSIMD命令表現の中間言語で記述されたテキスト部分について,前記第1のコンピュータが実行可能なSIMD命令として表現できる場合には,その中間言語テキスト部分をSIMD命令に置き換え,前記第1のコンピュータが実行可能なSIMD命令として表現できない場合には,その中間言語テキスト部分を,前記ベクトル化手段におけるベクトル化処理で用いられたベクトル長要素分の逐次命令の並びに置き換えて展開するベクトル演算展開手段と,
前記ベクトル演算展開手段により展開された結果をもとにオブジェクトプログラムを生成する手段として,
機能させるためのコンパイラプログラム。 - 複数の演算装置にそれぞれ個々に与えたデータに対して同一の命令を並列実行させるSIMD機構が装備されていない第1のコンピュータ上で動作させるプログラムをコンパイルする処理を,第2のコンピュータに実行させるためのコンパイラプログラムであって,
前記第2のコンピュータを,
入力されたソースプログラムを解析し,中間言語で記述されたテキストを作成するソースプログラム解析手段と,
前記ソースプログラム解析手段から中間言語で記述されたテキストを受け取り,前記第1のコンピュータがSIMD機構を持つものと仮定した場合に論理的にベクトル化可能なすべてのループの部分をSIMD命令表現の中間言語で記述されたテキストに変換するベクトル化処理を行うベクトル化手段と,
前記ベクトル化手段により変換されたSIMD命令表現の中間言語で記述されたテキスト部分について,メモリアクセス命令ごと,オペランドを使用する演算ごとにまとめて前記ベクトル化手段におけるベクトル化処理で用いられたベクトル長要素分の逐次命令の並びに置き換えて展開するベクトル演算展開手段と,
前記ベクトル演算展開手段により展開された結果をもとにオブジェクトプログラムを生成する手段として,
機能させるためのコンパイラプログラム。 - 請求項1または請求項2に記載のコンパイラプログラムにおいて,
前記ベクトル化手段におけるベクトル化処理は,処理対象ループが条件判定によって実行するかしないかが決定される演算を含む場合に,前記条件判定の結果に応じてマスク処理する命令表現を出力することにより,そのループをベクトル化可能なループとするベクトル化処理を含む
ことを特徴とするコンパイラプログラム。 - 請求項1から請求項3までのいずれかに記載のコンパイラプログラムにおいて,
前記ベクトル化手段または前記ベクトル演算展開手段は,外部からの指示によりベクトル長を決定する
ことを特徴とするコンパイラプログラム。 - 複数の演算装置にそれぞれ個々に与えたデータに対して同一の命令を並列実行させるSIMD機構が装備されている第1のコンピュータ上で動作させるプログラムをコンパイルする,少なくともソースプログラム解析手段とベクトル化手段とベクトル演算展開手段とコード生成手段とを備える第2のコンピュータが実行するコンパイル処理方法であって,
前記ソースプログラム解析手段が,入力されたソースプログラムを解析し,中間言語で記述されたテキストを作成する処理過程と,
前記ベクトル化手段が,前記ソースプログラム解析手段から中間言語で記述されたテキストを受け取り,ループ中の一部の演算が前記第1のコンピュータが実行可能なSIMD命令として表現できない場合であっても,論理的にベクトル化可能なループはすべてベクトル化可能なループであるとみなして,その部分をSIMD命令表現の中間言語で記述されたテキストに変換するベクトル化処理を行う処理過程と,
前記ベクトル演算展開手段が,前記ベクトル化手段により変換されたSIMD命令表現の中間言語で記述されたテキスト部分について,前記第1のコンピュータが実行可能なSIMD命令として表現できる場合には,その中間言語テキスト部分をSIMD命令に置き換え,前記第1のコンピュータが実行可能なSIMD命令として表現できない場合には,その中間言語テキスト部分を,メモリアクセス命令ごと,オペランドを使用する演算ごとにまとめて前記ベクトル化手段におけるベクトル化処理で用いられたベクトル長要素分の逐次命令の並びに置き換えて展開する処理過程と,
前記コード生成手段が,前記ベクトル演算展開手段により展開された結果をもとにオブジェクトプログラムを生成する処理過程とを有する
ことを特徴とするコンパイル処理方法。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2002190052A JP4077252B2 (ja) | 2002-06-28 | 2002-06-28 | コンパイラプログラムおよびコンパイル処理方法 |
| US10/465,710 US20040003381A1 (en) | 2002-06-28 | 2003-06-19 | Compiler program and compilation processing method |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2002190052A JP4077252B2 (ja) | 2002-06-28 | 2002-06-28 | コンパイラプログラムおよびコンパイル処理方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2004038225A JP2004038225A (ja) | 2004-02-05 |
| JP4077252B2 true JP4077252B2 (ja) | 2008-04-16 |
Family
ID=29774317
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2002190052A Expired - Fee Related JP4077252B2 (ja) | 2002-06-28 | 2002-06-28 | コンパイラプログラムおよびコンパイル処理方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20040003381A1 (ja) |
| JP (1) | JP4077252B2 (ja) |
Families Citing this family (44)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7395527B2 (en) | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
| US8381037B2 (en) * | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
| US7895382B2 (en) | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
| US7415705B2 (en) | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
| US7395419B1 (en) * | 2004-04-23 | 2008-07-01 | Apple Inc. | Macroscalar processor architecture |
| US7617496B2 (en) * | 2004-04-23 | 2009-11-10 | Apple Inc. | Macroscalar processor architecture |
| US7475392B2 (en) * | 2004-06-07 | 2009-01-06 | International Business Machines Corporation | SIMD code generation for loops with mixed data lengths |
| US7386842B2 (en) * | 2004-06-07 | 2008-06-10 | International Business Machines Corporation | Efficient data reorganization to satisfy data alignment constraints |
| US7478377B2 (en) | 2004-06-07 | 2009-01-13 | International Business Machines Corporation | SIMD code generation in the presence of optimized misaligned data reorganization |
| US8549501B2 (en) | 2004-06-07 | 2013-10-01 | International Business Machines Corporation | Framework for generating mixed-mode operations in loop-level simdization |
| 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 |
| 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 |
| US7506326B2 (en) * | 2005-03-07 | 2009-03-17 | International Business Machines Corporation | Method and apparatus for choosing register classes and/or instruction categories |
| 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 |
| US8201159B2 (en) * | 2006-08-04 | 2012-06-12 | International Business Machines Corporation | Method and apparatus for generating data parallel select operations in a pervasively data parallel system |
| US8196127B2 (en) * | 2006-08-04 | 2012-06-05 | International Business Machines Corporation | Pervasively data parallel information handling system and methodology for generating data parallel select operations |
| US8505002B2 (en) * | 2006-09-29 | 2013-08-06 | Arm Limited | Translation of SIMD instructions in a data processing system |
| US8423979B2 (en) * | 2006-10-12 | 2013-04-16 | International Business Machines Corporation | Code generation for complex arithmetic reduction for architectures lacking cross data-path support |
| US8418154B2 (en) * | 2009-02-10 | 2013-04-09 | International Business Machines Corporation | Fast vector masking algorithm for conditional data selection in SIMD architectures |
| US8627304B2 (en) * | 2009-07-28 | 2014-01-07 | International Business Machines Corporation | Vectorization of program code |
| US20110055303A1 (en) * | 2009-09-03 | 2011-03-03 | Azuray Technologies, Inc. | Function Generator |
| JP2012018435A (ja) * | 2010-07-06 | 2012-01-26 | Fujitsu Ltd | コンパイル装置およびコンパイルプログラム |
| US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
| US9529574B2 (en) | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
| US8621448B2 (en) | 2010-09-23 | 2013-12-31 | Apple Inc. | Systems and methods for compiler-based vectorization of non-leaf code |
| JP5148674B2 (ja) * | 2010-09-27 | 2013-02-20 | 株式会社東芝 | プログラム並列化装置およびプログラム |
| US8640112B2 (en) * | 2011-03-30 | 2014-01-28 | National Instruments Corporation | Vectorizing combinations of program operations |
| 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 |
| CN104641351B (zh) * | 2012-10-25 | 2018-09-18 | 英特尔公司 | 部分向量化编译系统 |
| US9052888B2 (en) * | 2013-02-21 | 2015-06-09 | International Business Machines Corporation | Vectorization in an optimizing compiler |
| EP2965194A4 (en) * | 2013-03-05 | 2016-11-30 | Intel Corp | ANALYSIS OF POTENTIAL ADVANTAGES OF VECTORIZATION |
| US9158511B2 (en) * | 2013-05-20 | 2015-10-13 | Advanced Micro Devices, Inc. | Scalable partial vectorization |
| JP6331865B2 (ja) * | 2014-08-13 | 2018-05-30 | 富士通株式会社 | プログラム最適化方法,プログラム最適化プログラム及びプログラム最適化装置 |
| US10169014B2 (en) | 2014-12-19 | 2019-01-01 | International Business Machines Corporation | Compiler method for generating instructions for vector operations in a multi-endian instruction set |
| US9880821B2 (en) * | 2015-08-17 | 2018-01-30 | International Business Machines Corporation | Compiler optimizations for vector operations that are reformatting-resistant |
| JP6810380B2 (ja) * | 2016-10-07 | 2021-01-06 | 日本電気株式会社 | ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム |
| US10613862B2 (en) | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
| US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
| US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
| US10255068B2 (en) | 2017-03-03 | 2019-04-09 | International Business Machines Corporation | Dynamically selecting a memory boundary to be used in performing operations |
| US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
| US10564965B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
| US10620956B2 (en) * | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
| CN107463421B (zh) * | 2017-07-14 | 2020-03-31 | 清华大学 | 一种静态流程模型的编译执行方法及系统 |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5247696A (en) * | 1991-01-17 | 1993-09-21 | Cray Research, Inc. | Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory |
| IL100989A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Analyzing inductive expressions in a multilanguage optimizing compiler |
| DE69519449T2 (de) * | 1994-05-05 | 2001-06-21 | Conexant Systems, Inc. | Raumzeigersdatenpfad |
| US5802375A (en) * | 1994-11-23 | 1998-09-01 | Cray Research, Inc. | Outer loop vectorization |
| JP3317825B2 (ja) * | 1995-09-28 | 2002-08-26 | 富士通株式会社 | ループ最適化翻訳処理方法 |
| US6374403B1 (en) * | 1999-08-20 | 2002-04-16 | Hewlett-Packard Company | Programmatic method for reducing cost of control in parallel processes |
| 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 |
-
2002
- 2002-06-28 JP JP2002190052A patent/JP4077252B2/ja not_active Expired - Fee Related
-
2003
- 2003-06-19 US US10/465,710 patent/US20040003381A1/en not_active Abandoned
Also Published As
| Publication number | Publication date |
|---|---|
| US20040003381A1 (en) | 2004-01-01 |
| JP2004038225A (ja) | 2004-02-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4077252B2 (ja) | コンパイラプログラムおよびコンパイル処理方法 | |
| JP2921190B2 (ja) | 並列実行方式 | |
| JP3032031B2 (ja) | ループ最適化方法及び装置 | |
| JP3218932B2 (ja) | データプリフェッチコード生成方法 | |
| JP3317825B2 (ja) | ループ最適化翻訳処理方法 | |
| US6754893B2 (en) | Method for collapsing the prolog and epilog of software pipelined loops | |
| JP6245031B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
| JPH05143332A (ja) | 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法 | |
| JP6666554B2 (ja) | 情報処理装置、変換プログラム、及び変換方法 | |
| Su et al. | Automatic generation of fast BLAS3-GEMM: A portable compiler approach | |
| EP2799986B1 (en) | Apparatus and method for translating multithread program code | |
| US7073169B2 (en) | Compiler device with branch instruction inserting unit | |
| JP3032030B2 (ja) | ループ最適化方法及び装置 | |
| JPH04293150A (ja) | コンパイル方法 | |
| JP5227646B2 (ja) | コンパイラ及びそのコード生成方法 | |
| JP3196625B2 (ja) | 並列化コンパイル方式 | |
| JP3276479B2 (ja) | コンパイル方式 | |
| JPH06290057A (ja) | ループ最適化方法 | |
| JP2008523523A (ja) | プログラム内のループ用のコンパイル方法、コンパイル装置およびコンピュータシステム | |
| JP2748582B2 (ja) | コンパイル処理装置 | |
| JPH06290159A (ja) | 並列計算機のプロセス割当方法 | |
| JP3551352B2 (ja) | ループ分割方法 | |
| JPH0241562A (ja) | ベクトル演算列分割処理方式 | |
| JP2870218B2 (ja) | 並列実行命令列生成方式 | |
| JP3734658B2 (ja) | コンパイラ装置およびコンパイラプログラムを記録したコンピュータ読取可能な記録媒体 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050112 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050114 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070615 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070626 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070824 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20071016 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071206 |
|
| A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20071221 |
|
| 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: 20080129 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080131 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110208 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110208 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120208 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130208 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140208 Year of fee payment: 6 |
|
| LAPS | Cancellation because of no payment of annual fees |