JP5810316B2 - コンパイル装置、コンパイルプログラム及びループ並列化方法 - Google Patents

コンパイル装置、コンパイルプログラム及びループ並列化方法 Download PDF

Info

Publication number
JP5810316B2
JP5810316B2 JP2012549616A JP2012549616A JP5810316B2 JP 5810316 B2 JP5810316 B2 JP 5810316B2 JP 2012549616 A JP2012549616 A JP 2012549616A JP 2012549616 A JP2012549616 A JP 2012549616A JP 5810316 B2 JP5810316 B2 JP 5810316B2
Authority
JP
Japan
Prior art keywords
loop
variable
initial value
calculation code
value calculation
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
Application number
JP2012549616A
Other languages
English (en)
Other versions
JPWO2012086148A1 (ja
Inventor
大介 馬場
大介 馬場
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.)
Panasonic Intellectual Property Management Co Ltd
Original Assignee
Panasonic Intellectual Property Management Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Intellectual Property Management Co Ltd filed Critical Panasonic Intellectual Property Management Co Ltd
Priority to JP2012549616A priority Critical patent/JP5810316B2/ja
Publication of JPWO2012086148A1 publication Critical patent/JPWO2012086148A1/ja
Application granted granted Critical
Publication of JP5810316B2 publication Critical patent/JP5810316B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining

Description

本発明は逐次形式のソースプログラムから並列化された目的プログラムを生成するコンパイル技術及びループ並列化方法に関する。
並列処理は、マルチプロセッサで目的プログラムを実行する上で、各プロセッサを有効活用し、実行性能を向上させるための重要な機能である。並列化された目的プログラムを作成する方法として、ループ処理を繰り返される処理の単位(以下、イタレーションと呼ぶ)で複数のサブループ処理に分割して並列化する方法が知られている。従来のループ並列化方法として、データ依存が存在しないループを対象に並列化を行う(以下、DOALL型変換と呼ぶ)ものがある(例えば、非特許文献1参照)。ここで、データ依存とは、ある命令Bが、他の命令Aが完了するまで実行できない関係を指し、その原因が変数aにある場合(例えば、命令Aが変数aに代入して命令Bが変数aを参照)、「変数aにデータ依存がある」と表現する。DOALL型変換は、例えば、図9(a)に示すような、データ依存がないループを対象にしたものである。
ループ内に存在するデータ依存において、上述の命令Aと命令Bとが異なるイタレーションに属する場合には、命令Aが属するイタレーションと命令Bが属するイタレーションとの間に依存関係が存在する。このように2以上のイタレーションの間にデータ依存が存在する場合には、DOALL型変換をそのまま適用することができないためループ処理の並列化が困難である。
イタレーションの間に存在するデータ依存には、値の代入がされるイタレーションの後に実行される別のイタレーションで値の参照が行われるデータ依存(以下、ループ運搬依存と呼ぶ)、値が参照されるイタレーションの後に実行される別のイタレーションで値が代入されるデータ依存(以下、参照先行依存と呼ぶ)、及び値が代入されるイタレーションの後に実行される別のイタレーションで値が代入されるデータ依存(以下、出力依存と呼ぶ)がある。
イタレーションの間に存在するデータ依存の具体例と、並列化における問題点を図9を用いて説明する。図9(b)に示す変数aにはループ運搬依存がある。ループが逐次実行される場合、i=k+1のイタレーションが実行されるときに変数aはi=kのイタレーションの実行結果であるa=x[k]を参照する。一方、ループをイタレーション単位で分割して並列化を行う場合、各イタレーションの実行順序はループを逐次処理する場合とは異なるので、y[k+1]=a*bの実行時に変数aの値はx[k]であるとは言えない。このため、変数y[k+1]の値がループを逐次処理した結果と同一にならないという問題が発生する。
また、図9(c)に示す配列cは参照先行依存の例であり、ループを実行する前にc[2]〜c[101]には値が代入されている。ループをイタレーション単位で分割して並列化を行う場合、各イタレーションの実行順序はループを逐次処理する場合とは異なるので、i=k+1のイタレーションがi=kのイタレーションより先に実行されることがある。このとき、i=kのイタレーションを実行時にc[k+1]にはi=k+1のイタレーションの結果が代入されているため、z[k]の値がループを逐次処理する場合と同一にならないという問題が発生する。
また、図9(d)に示す配列gは出力依存変数である。ループをイタレーション単位で分割して並列化を行う場合、各イタレーションの実行順序はループを逐次処理する場合とは異なるので、i=k+1のイタレーションがi=kのイタレーションより先に実行されることがある。このとき、i=kのイタレーションがg[k+1]の値を上書きするため、g[k+1]の値がループを逐次処理する場合と同一にならないという問題が発生する。
データ依存が存在するループを並列化する従来の方法が、特許文献1に開示されている。特許文献1に記載のコンパイル装置を図10に示す。コンパイル装置800は、FORTRAN言語などの逐次型のソースプログラム700を入力として、並列型の目的プログラム900を出力するものであり、ループ並列化変換部820はDOALL型変換が可能なものについてはDOALL型変換部821で並列化を行い、パイプライン型の並列化が可能なものについては、多重ループ中にプロセッサ間の同期を実行する文を挿入することによるパイプライン化(以下、DOACROSS型変換と呼ぶ)をDOACROSS型変換部822で行う。
また、別の従来例が特許文献2に開示されている。特許文献2のコンパイル装置では、ループに参照先行依存がある場合に、参照先行依存変数について、その変数が用いられる前に値が代入されて値が変わることがないように、予め参照先行依存変数の値を一時変数に格納し、参照先行依存変数が参照される式について参照先行依存変数を一時変数に置き換えることで、参照先行依存を解決してループの並列処理化を行う。
特開2005−327320号公報 特開2010−191506号公報
A.V.エイホ、M.S.ラム、R.セシィ、J.D.ウルマン共著原田賢一訳「コンパイラ[第2版]−原理・技法・ツール−」サイエンス社出版、2009年5月25日(P790−P793)
しかしながら、特許文献1のコンパイル装置では、ループ処理にループ運搬依存が存在すると判定されるとDOALL型変換による並列化を図ることができず、DOACROSS型変換が行えなければ並列化を図ることができない。 また、DOACROSS型変換により並列化を行う場合には、ループ運搬依存が存在するイタレーションについて同期命令を用いて各イタレーションの実行順序を維持するので、ループ運搬依存の関係にある依存元イタレーションと依存先イタレーションとを並列に実行することができない。
一方、特許文献2のコンパイル装置は、値が参照されるイタレーションの後に実行される別のイタレーションで値が代入される参照先行依存が存在するループにおいて、予め参照先行依存変数の値を一時変数の値として複製しておき、値が参照されるイタレーションにおける参照先行依存変数を当該一時変数に置き換えることで、値が代入されるイタレーションによって参照先行依存変数の値が上書きされても、値が参照されるイタレーションが一時変数からループ実行前の参照先行依存変数の値を得られるようにしている。しかしながら、ループ運搬依存が存在するループにおいて、値が参照されるイタレーションが必要とするループ運搬依存変数の値は、値が代入されるイタレーションが当該ループ運搬依存変数に格納する値であってループが開始される前のループ運搬依存変数の値ではないため、特許文献2の技術ではループ運搬依存を解決することができない。
本発明は、前記従来の課題を解決するもので、ループ運搬依存が存在するループについて並列化を図ることができるコンパイル装置、コンパイルプログラム及びループ並列化方法を提供することを目的とする。
前記従来の課題を解決するために、本発明のコンパイル装置は、逐次型のソースプログラムから並列型の目的プログラムを生成するコンパイル装置であって、前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析部と、前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定部と、前記ループ並列化判定部が並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値を算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加部とを含むことを特徴とする。
また、本発明のコンパイルプログラムは、逐次型のソースプログラムから並列型の目的プログラムを生成するプログラムであって、前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析ステップと、前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定ステップと、前記ループ並列化判定ステップが並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値を算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加ステップとを含むことを特徴とする。
また、本発明の記憶媒体は、逐次型のソースプログラムから並列型の目的プログラムを生成するコンパイルプログラムが記録されているコンピュータ読み取り可能な記録媒体であって、前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析ステップと、前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定ステップと、前記ループ並列化判定ステップが並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値を算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加ステップとを実行させるためのプログラムが記録されていることを特徴とする。
また、本発明のループ並列化方法は、逐次型のソースプログラムから並列型の目的プログラムを生成するループ並列化方法であって、前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析ステップと、前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定ステップと、前記ループ並列化判定ステップが並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値を算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加ステップとを含むことを特徴とする。
これら上記の構成によれば、ループを最初から逐次処理しなくても全てのイタレーションにおけるループ運搬依存変数の値を算出できる場合には、ループを複数のサブループに分割して、サブループの最初のイタレーションにおけるループ運搬依存変数の値を算出する初期値算出コードを追加することにより、演算結果に影響を与えることなくループを分割して並列に実行することができる。
本発明の実施の形態におけるコンパイル装置の構成図 本発明の実施の形態におけるループ並列化変換部のフローを示す図 本発明の実施の形態におけるループ並列化変換部におけるループ並列化判定のフローを示す図 本発明の実施の形態における初期値算出コード追加型変換のフローを示す図 本発明の実施の形態におけるソースプログラムと目的プログラムを表す図 本発明の実施の形態におけるループ並列化判定の実行例を表す図 本発明の実施の形態における初期値算出コード追加型変換の実施例を表す図 本発明の実施の形態におけるループ並列化判定の実施例を表す図 データ依存関係を示す図 従来のコンパイル装置の構成図
以下、本発明の1実施の形態について、図面を参照しながら説明する。
<構成>
図1は本発明の実施の形態におけるループ並列化方法を実行するコンパイル装置200を示す構成図である。コンパイル装置200は、C言語などの逐次型のソースプログラム100を入力し、OpenMP C言語などの並列型の目的プログラム300を出力とする。コンパイル装置200は、データ依存解析部210、ループ並列化変換部220を備える。
データ依存解析部210は、ソースプログラム100に含まれるループについて、ループ運搬依存変数が存在するか否かを解析する。ループ運搬依存変数は前述の通り、値を代入するイタレーションの後に実行される別のイタレーションにおいて代入された値が参照される変数である。ここで、ループ運搬依存変数を含むループにおける1つのイタレーションに着目すると、ループ運搬依存変数は同一のイタレーションの中で値が参照された後に値の代入がなされる変数であるとも言えるので、このような変数であるか否かを判定することで、ループ運搬依存変数であるか否かを解析できる。これは、代入された値は次のイタレーションにおける値の代入まで更新されることがなく、その値は当該イタレーションでなく次のイタレーションにおいて参照されるからである。
ループ並列化変換部220は、データ依存解析部210からループごとにループ運搬依存変数を含むか否かの解析結果を受け取り、ソースプログラム100に含まれるすべてのループに対してループがイタレーション単位で並列化できるか判定し、並列化可能と判断されたループについて、並列化可能な方法によりループの変換を行い、目的プログラム300を生成する。
このループ並列化変換部220は、DOALL型変換部221、初期値算出コード追加部222とDOACROSS型変換部223を備え、これら各部がループの変換を行う。
DOALL型変換部221は、特許文献2のDOALL型変換部821と同じ機能を有するもので、ループ並列化変換部220がDOALL型変換による並列化が可能であると判定したループを、従来の並列化方法によりループの並列化を行う。
初期値算出コード追加部222は、ループ並列化変換部220が初期値算出コード追加型変換による並列化が可能であると判定したループを、初期値算出コード追加型変換によりループの並列化を行う。初期値算出コード追加型変換の詳細は後述する。
DOACROSS型変換部223はDOACROSS型変換部822と同じ機能を有するもので、ループ並列化変換部220がDOACROSS型変換による並列化が可能であると判定したループのパイプライン化を行う。
<動作>
以上の構成をもとに、本発明の実施の形態に係るコンパイル装置200の動作について説明する。
(1)ループ並列化変換の概要
図2は本発明の実施の形態におけるループ並列化変換部220のフローを示す図である。図2に示すフローを参照してループ並列化変換部220における処理動作を説明する。
ループ並列化変換判定部220は、次のようにソースプログラム100内のすべてのループに対してDOALL型変換が可能なループであるか否か、初期値算出コード追加型変換が可能であるか否か、DOACROSS型変換が可能なループであるか否かのループ並列化判定を行う。
ループ並列化変換部220は、データ依存解析部210よりループごとにループ運搬依存変数を含むか否かの解析結果を受け取り、DOALL型変換が適用可能かを判定し(S10)、DOALL型変換が適用可能な場合、DOALL型変換部221がDOALL型変換を実行する(S11)。なお、S10におけるループ並列化変換部220の動作はループ並列化変換部820と、S11におけるDOALL型変換部221の動作はDOALL型変換部821と同様である。
DOALL型変換が適用不可能であると判定された場合(S10でNO)、ループ並列化変換部220は初期値算出コード追加型変換が適用可能かを判定し(S20)、初期値算出コード追加型変換が適用可能な場合、初期値算出コード追加部222で初期値算出コード追加型変換を実行する(S21)。ここで、初期値算出コード追加型変換が可能なループとはループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができるループを指す。初期値算出コード追加型変換の可否判断(S20)および変換(S21)についての詳細は後述する。
初期値算出コード追加型変換が適用不可能であると判定された場合(S20でNO)、ループ並列化変換部220はDOACROSS型変換が適用可能かを判定し(S30)、DOACROSS型変換が適用可能な場合、DOACROSS型変換部223でDOACROSS型変換を実行する(S31)。なお、S30におけるループ並列化変換部220の動作はループ並列化変換部820と、S31におけるDOACROSS型変換部223の動作はDOACROSS型変換部822と同様である。
S30において、DOACROSS型変換が適用不可能であると判定された場合、並列化を行わず、S10でソースプログラム100内の次のループを処理する。なお、並列化されないループは、逐次実行されることになる。
(2)ループ並列化判定
図3は本発明の実施の形態におけるステップS20におけるループ並列化変換部220のフローを示す図である。図3に示すフローを参照してS20における初期値算出コード追加型変換の適用の判定の処理動作を説明する。
ループ並列化変換部220は、データ依存解析部210からループ運搬依存が存在するか否かの解析結果を受け取って、ループに含まれる変数のうち、ループ運搬依存変数でない変数のリストを作成する(S110)。これらの変数はループ運搬依存変数ではないためループ内の各イタレーションの実行結果に依存せず、ループを逐次実行しなくても、各イタレーションにおける値を算出することが可能である。以下、このような全てのイタレーションにおける値が算出できる変数を算出可能変数と呼び、このリストは算出可能変数のリストとなる。
ループ並列化変換部220は、左辺値がリストにない変数を持つ式のうち、右辺値に存在する変数がすべてリストに存在する式の左辺値をリストに追加する(S120)。追加されるループ運搬依存変数は、算出可能変数にのみ依存する変数であるので、算出可能変数のみを含む導出式から全てのイタレーションにおいて値が算出可能な算出可能変数に該当する。
次に、ループ並列化変換部220は、S120においてリストに追加された変数が存在するか確認する(S130)。追加された変数が存在しない場合は、初期値算出コード追加型変換が適用できないと判定し(S140)、S140によりS20の判定がNOであることが確定する。詳細な説明については後述する。ループ並列化変換部220はこのループについて、DOACROSS型変換が適用可能か判定を行う(S30)。
S120においてリストに追加された変数が存在する場合、ループ並列化変換部220はリスト内にループ内のループ運搬依存変数がすべて列挙されているかを確認する(S150)。すべてのループ運搬依存変数がリスト内に列挙されている場合は、ループ並列化判定部220は初期値算出コード追加型変換が適用できると判定し(S150)、S150によりS20の判定がYESであることが確定する。この場合、全てのループ運搬依存変数が算出可能変数であるので、ループを逐次実行しなくても全てのイタレーションにおいてループ運搬依存変数の値が算出可能である。これにより、初期値算出コード追加部222は当該ループの変換を行う(S21)。
S150においてリスト内にループ運搬依存変数がすべて列挙されていない場合は、列挙されていないループ運搬依存変数がリストに新たに追加された算出可能変数に依存した変数であるか否かを判定するため、再度S120からフローを実行する。
ループに算出可能変数に該当しないループ運搬依存変数が含まれている場合には、算出可能変数が全てリストに列挙された時点で、算出可能変数に該当しないループ運搬依存変数がリストに列挙されていないためS150でYES と判定された後、再度実施されるS120において、新たにリストに追加する算出可能変数が存在しないためS130においてNOと判定され、上述のように初期値算出コード追加型変換が適用できないと判定されることになる。
(3)初期値算出コード追加型変換
図4は本発明の実施の形態における初期値算出コード追加部222の動作S21のフローを示す図である。図4に示すフローを参照してS21における初期値算出コード追加型の変換の処理動作を説明する。
初期値算出コード追加部222は、分割前のループの誘導変数の初期値を変数pに記録し、イタレーションが終了した後次のイタレーションが実行されるときのループ誘導変数の変化値を変数sに記録する(S210)。
初期値算出コード追加部222は、M個のイタレーションからなるループをN個のプロセッサに割り当てる場合は(M/N)個のイタレーションごとに分割し、各プロセッサに割り当てる。分割したすべてのサブループに対して、ループ運搬依存変数はサブループごとに異なる変数を用いてプライベート化し、プロセッサ毎に個別の領域を使用する変数に変換して、目的プログラム300に出力する(S220)。
初期値算出コード追加部222は、S220において分割を行ったすべてのサブループに対して、S231からステップS237を実行する。
初期値算出コード追加部222は、分割したサブループの誘導変数の初期値を変数qに記録する(S231)。
初期値算出コード追加部222は、データ依存解析部210からの情報を元に、ループ運搬依存変数のリストを作成する(S232)。このリストはサブループの最初のイタレーションにおける値が算出されていないループ運搬依存変数のリストとなる。
初期値算出コード追加部222は、変数pを変数qと変数sの和と比較し(S233)、qがp+sより小さい場合は、リストに存在する変数についてプライベート化される前の変数の値を代入する導出式を初期値算出コードとして目的プログラム300に追加する(S237)。これは、誘導変数qのイタレーションにおけるループ運搬依存変数が、分割前のループにおける誘導変数q−sのイタレーションではなく(このような誘導変数の値がp未満となるイタレーションは元のループに存在しない)、誘導変数pのイタレーションの実行前の値、すなわちループ実行前の初期値に依存しているからである。
なお、初期値算出コードを目的プログラム300に追加するときは、対応するサブループより前に実行されるように追加する。また、既に同じサブループに対応する初期値算出コードが目的プログラム300に追加されている場合は、既存の初期値算出コードより先に実行されるように追加する。ただし、プライベート化される前の変数に値を代入するコードより後に初期値算出コードが実行されるように目的プログラム300を構成する。
S233においてqがp+s以上である場合は、初期値算出コード追加部222は変数qにq−sを代入し、リスト内の変数を左辺値とするループ内の式を初期値算出コードとして追加する(S234)。このとき、追加する式で使用されている誘導変数の値として変数qの値を用いる。
初期値算出コード追加部222は、S234において追加された初期値算出コードの式の右辺値の変数のうち、ループ運搬依存変数のリストを作成し、S232あるいは前回のS235において作成したリストを新たに生成したリストで上書きする(S235)。
初期値算出コード追加部222は、S235において作成したリストに変数が存在しているかを確認し、変数が存在する場合はS233から再度フローを実行する。リストに変数が存在しない場合は、当該サブループの変換を終了し、S220において作成された、初期値算出コードを追加していない他の分割サブループに対して、S231から初期値算出コード追加型変換を行う(S236)。
<プログラムの変換例>
図5は本発明の実施の形態における初期値算出コード追加型変換を行う前後のプログラム例を表す図である。図5に示すプログラムを参照して、本発明に係るコンパイル装置200の動作を説明する。
プログラム400はソースプログラム100に記述されたループを示す例で、C言語で記述されたforループである。このforループは100個のイタレーションで構成され、変数aと変数bに関してループ運搬依存が存在し、変数bの導出式の右辺値となる変数xに対してはループ運搬依存が存在しない。
本実施の形態においては、プログラム400に示すループを2つのプロセッサを使用して並列に実行するものとする。
データ依存解析部210は、変数aと変数bがループ運搬依存変数であることを検出する。ループ並列化変換部220は、変数aと変数bがループ運搬依存変数であるため、プログラム400のループをDOALL型変換することができないと判定する(S10)。
次に、データ並列化変換部220は、プログラム400のループについて、初期値算出コード追加型変換が適用できるか判定する(S20)。以下にその詳細を示す。
(1)ループ並列化判定
図6はプログラム400に対するループ並列化判定の実行例を表す図である。
プログラム500はプログラム400におけるループ運搬依存を矢印で示したものである。
ループ並列化変換部220は、プログラム400のループのうちループ運搬依存が存在しない変数xを要素としたリスト501を作成する(S110)。
ループ並列化変換部220は、左辺値がリストにない変数を持つ式L403と式L404のうち、右辺値に存在する変数がすべてリスト501に存在する式L404の左辺値である変数bをリストに追加し、リスト511を作成する(S120)。
ループ並列化変換部220は、変数bがS110でリスト511に追加されたためS130においてYESと判定し、S150を実行する。
ループ並列化変換部220は、プログラム400において、リスト511に列挙されていないループ運搬依存変数が存在しないか判定する(S150)。プログラム510に示されるように、プログラム400において式L403から式L402に対して変数aによるループ運搬依存が存在するため(変数aがループ運搬依存変数)、ループ並列化変換部220は再度S120を実行する。なお、リストに追加された変数によるループ運搬依存は破線の矢印で示す。
ループ並列化変換部220は、左辺値がリストにない変数を持つ式L403の右辺値に存在する変数がすべてリスト501に存在するので、式L403の左辺値である変数aをリストに追加し、リスト521を作成する(S120)。
ループ並列化変換部220は、変数aがS120でリスト521に追加されたためS130においてYESと判定し、S150を実行する。
ループ並列化変換部220は、S150でプログラム400においてリスト521に存在しないループ運搬依存変数が存在しないため、S160において初期値算出コード追加型変換が適応可能であると判定される。
以上の動作により、プログラム400のループは初期値算出コード追加型変換が適用できると判定されたので(S20)、初期値算出コード追加部222はこのループを変換して並列化する(S21)。詳細を以下に示す。
(2)初期値算出コード追加型変換
図7はプログラム400のループの初期値算出コード追加型変換の実行例を表す図である。
初期値算出コード追加部222は、プログラム400のループの誘導変数iの初期値1を変数pに代入し、ループの誘導変数iの変化値1(i++を1回実行したときのiの変化量)を変数sに代入する(S210)。
初期値算出コード追加部222は、プログラム400を2つのプロセッサを用いて実行するためにループを2つに分割し、ループ運搬依存変数aとbをプライベート化する(S220)。結果をプログラム600とプログラム650に示す。プログラム600では変数a,bをそれぞれ変数a_1,b_1に変更し、プログラム650では変数a,bをそれぞれ変数a_2,b_2に変更している。
プログラム600とプログラム650の双方に対してS231からS237を実行する。
まず、プログラム600の変換について説明する。
初期値算出コード追加部222は、サブループの誘導変数iの初期値1を変数qに代入する(S231)。
初期値算出コード追加部222は、ループ運搬依存変数a_1とb_1を要素としたリスト601を作成する(S232)。
初期値算出コード追加部222は、変数pを変数qと変数sの和と比較する(S233)。このとき、q=1、p=1、s=1であり、qはp+sより小さいので、S237を実行する。
初期値算出コード追加部222は、リスト601に存在するプライベート化されたループ運搬依存変数a_1とb_1に対して、プライベート化される前の変数aと変数bを代入する式L591とL592をプログラム600の先頭に追加する(S227)。変換後のプログラムをプログラム610に示す。
次に、プログラム650の変換について説明する。
初期値算出コード追加部222は、サブループの誘導変数iの初期値51を変数qに代入する(S231)。
初期値算出コード追加部222は、ループ運搬依存変数a_2とb_2を要素とするリスト651を作成する(S232)。
初期値算出コード追加部222は、変数pを変数qと変数sの和と比較する(S233)。このとき、q=51、p=1、s=1であり、qはp+s以上となるためS234を実行する。
初期値算出コード追加部222は、変数qにq−sの値である50を代入し、リスト611内の変数a_2と変数b_2を左辺値とする式L703と式L704を式L691と式L692としてプログラム610の先頭に追加する(S234)。このとき、誘導変数iには変数qの値(q=50)を代入する。初期化算出コードを追加したプログラムをプログラム660に示す。
初期値算出コード追加部222は、追加された式L691と式L692の右辺値に含まれるループ運搬依存変数b_2を要素とするリスト661を作成し、リスト651を上書きする(S235)。
初期値算出コード追加部222は、S236においてリスト661は空ではないのでS233を実行する。
初期値算出コード追加部222は、S233において、q=50、p=1、s=1であり、qはp+s以上であるのでS234を実行する。
初期値算出コード追加部222は、変数qに49を代入し、リスト631内の変数b_2を左辺値とする式L704に対し、誘導変数iに変数qの値(q=49)を代入した式L681をプログラム630の初期値算出コードの先頭に追加する(S234)。初期値算出コードの先頭に式L681を追加したプログラムをプログラム670に示す。
初期値算出コード追加部222は、追加された式L681の右辺値にループ運搬依存変数は存在しないため、空のリスト671を作成し、リスト661を上書きする(S235)。
初期値算出コード追加部222は、リスト671が空なので初期値算出コード追加型変換を終了する(S226)。
以上の動作により、ループ並列化変換部220は図5に示すサブループ412と422を生成する。サブループ412とサブループ422はプログラム400に示すループを分割したサブループであり、100個のイタレーションからなるforループを、1回目から50回目のイタレーションと51回目から100回目のイタレーションに分割している。コンパイル装置200は、サブループ412とサブループ422をそれぞれ別プロセッサに割り当てた目的プログラム300を生成する。
初期値算出コード411と初期値算出コード421は初期値算出コードである。プログラム410に初期値算出コード411、プログラム420に初期値算出コード421をそれぞれ追加することにより、プログラム400において存在した51回目のイタレーションから50回目のイタレーションへの依存関係を解消したプログラム410とプログラム410を生成することができ、プログラム400を並列に処理することができる。
<初期値算出コード追加型変換ができないと判断されるプログラムの例>
以下に初期値算出コード追加型変換が適用できないと判定される場合について、図8を用いて説明する。
プログラム550は初期値算出コード追加型変換が適用できないループの例で、ループ運搬依存を矢印で示したものである。
ループ並列化変換部220は、プログラム550のループのうちループ運搬依存が存在しない変数xを要素としたリスト551を作成する(S110)。
ループ並列化変換部220は、左辺値がリストにない変数を持つ式L503と式L504のうち、右辺値に存在する変数がすべてリスト501に存在する式L504の左辺値である変数bをリストに追加し、リスト561を作成する(S120)。
ループ並列化変換部220は、変数bがS110でリスト561に追加されたためS130においてYESと判定し、S150を実行する。
ループ並列化変換部220は、プログラム400において、リスト561に列挙されていないループ運搬依存変数が存在しないか判定する(S150)。プログラム510に示されるように、プログラム400において式L503から式L502に対して変数aによるループ運搬依存が存在するため(変数aがループ運搬依存変数)、ループ並列化変換部220は再度S120を実行する。なお、リストに追加された変数によるループ運搬依存は破線の矢印で示す。
ループ並列化変換部220は、リストに存在する変数b、xを右辺値とし、リストに存在しない変数を左辺値とする式が存在しないので、リストの更新を行わない(S120)。
ループ並列化変換部220は、S120でリストに追加された変数がないためS130においてNOと判定し、初期値算出コード追加型変換が適用できないと判定する。
<本実施の形態に係るその他の変形例>
(1)本実施の形態においては、ソースプログラム100がC言語、目的プログラム300がOpenMP C言語で記述されている場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、ソースプログラム100がFORTRANなど他の言語で記述されていてもよいし、目的プログラム300は並列化を行える言語であれば他の言語であってもよい。あるいは、目的プログラム300はマルチプロセッサで実行できるオブジェクトファイルであってもよい。
(2)本実施の形態においては、変数a、bはスカラ変数、変数xは配列である場合について説明したが、本発明は必ずしもこの場合に限定されない。各変数はベクトル変数や多次元配列など、任意のデータ構造であってよい。
(3)本実施の形態においては、ソースプログラムに含まれるループについて、S10、S20、S30の各ステップで変換が適用できるか確認し、適用できる場合はS11、S21、S31の各ステップで変換を行う場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、ソースプログラムに含まれるループ処理全てに対して変換の可否を判定した後、判定結果を用いて変換処理をまとめて行ってもよい。
(4)本実施の形態においては、S10、S30の各ステップでそれぞれDOALL型変換、DOACROSS型変換が適用できるか確認し、適用できる場合はS11、S31の各ステップで変換を行う場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、DOALL型変換部221がなく、DOALL型変換の可否を判定せずに初期値算出コード追加型変換が行えるかどうか判定してもよい。あるいは、例えばDOACROSS型変換部223がなく、初期値算出コード追加型変換が行えないと判定したループに対してDOACROSS型変換が適用できるか否かを判定せず逐次処理のままとしてもよいし、他に並列化や実行効率の向上を図れる技術があればそれらの適用を試みてもよい。このようにすることで、初期値算出コード追加型変換を行えるループに対して初期値算出コード追加型変換を行う特徴を持ちながら様々な構成を持つコンパイル装置を実現することができる。
(5)本実施の形態においては、S120〜S150においてリストの変数とループ運搬依存変数が一致するまで判定処理を繰り返しているが、本発明は必ずしもこの場合に限定されない。例えば、S120からS150を実施する回数の上限を設定することにより、分割されたサブループの最初のイタレーションに対して一定回数以上前に実行されるイタレーションに依存するループ運搬依存変数がある場合には、初期値算出コード追加型の変換を適用しないとしてもよい。このようにすることで、ループの並列化による処理速度の向上が追加される初期値算出コードによるオーバーヘッドを上回る場合にのみ並列化を行うことが可能になる。
(6)本実施の形態においては、M個のイタレーションからなるループをN個のプロセッサで並列実行を行うため、連続する(M/N)個のイタレーションからなるサブループをそれぞれのプロセッサに割り当てているが、本発明は必ずしもこの場合に限定されない。例えば、サブループに含まれるイタレーションの数がプロセッサごとに異なっていてもよい。
(7)本実施の形態においては、誘導変数iの変化量sが1(誘導変数iの変更文がi++)である場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、誘導変数iの変更文をi=i+2として、誘導変数iの変化量sが2であってもよい。あるいは、誘導変数iの変更文をi−−として、誘導変数iの変化量sが−1であり、S223における判定式q≧p+sをq≦p+sに置き換えてもよい。このようにすることで様々な条件のループ処理に対して本発明の実施が可能となる。
(8)本実施の形態においては、誘導変数iの変更文がi++である場合について誘導変数iの変化量sに1を代入する場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、予めsの初期値を1としておき、誘導変数iの変更文がi++でない場合にsの値を変更するものとしてもよい。このようにすることで、誘導変数iの変更文がi++であるほとんどのループにおいて変換処理を簡略化できる。
本発明によれば、逐次型で作成されたソースプログラム資産を、簡単にマルチコアプロセッサ向けの並列化された目的プログラムに変換することができ、マルチコアプロセッサを搭載した家電製品等に広く利用することができる。
200 コンパイル装置
210 データ依存解析部
220 ループ並列化部
221 ループ並列化判定部
230 ループ変換部
231 DOALL型変換部
232 初期値算出コード追加型変換部
233 DOACROSS型変換部
300 目的プログラム

Claims (8)

  1. 逐次型のソースプログラムから並列型の目的プログラムを生成するコンパイル装置であって、
    前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析部と、
    前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定部と、
    前記ループ並列化判定部が並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値をループ内で実行される一つ以上の処理を一回以上実行することにより算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加部と
    を含むことを特徴とするコンパイル装置。
  2. 前記ループ並列化判定部は、
    前記ループ運搬依存変数を含むループに含まれる変数について、前記ループ運搬依存変数でない変数を、ループを逐次実行することなく全てのイタレーションにおける値を算出することができる算出可能変数として判別し、
    前記ループ運搬依存変数の値を算出するために必要な変数が全て算出可能変数である場合に前記ループ運搬依存変数を算出可能変数として判別する処理を、算出可能変数であると判別される変数が増加するたびに前記ループ運搬依存変数を含むループに含まれ算出可能変数と判別されないループ運搬依存変数に対して繰り返し、
    前記ループ運搬依存変数を含むループに含まれる変数が全て算出可能変数であれば、前記ループ運搬依存変数を含むループを並列化可能ループであると判定する
    ことを特徴とする請求項1に記載のコンパイル装置。
  3. 前記ループ並列化判定部は、
    前記ループ運搬依存変数を含むループに含まれる変数であって、ループ運搬依存変数ではない前記算出可能変数のリストを作成し、
    前記ループ運搬依存変数を含むループに含まれるループ運搬依存変数について、前記ループ運搬依存変数が左辺値となる式において右辺値の変数が全て前記リストに含まれていれば前記左辺値のループ運搬依存変数を前記算出可能変数として前記リストに追加することを、前記リストに追加する変数がなくなるまで繰り返し行い、
    前記ループ運搬依存変数を含むループに含まれる変数が全て前記リストに含まれていれば、前記ループ運搬依存変数を含むループを並列化可能ループであると判定する
    ことを特徴とする請求項2に記載のコンパイル装置。
  4. 前記初期値算出コード追加部は、
    前記ループにおいて、前記サブループの最初のイタレーションとなるイタレーションを特定し、
    前記ループ運搬依存変数を前記サブループごとに異なる局所変数に置き換え、
    前記特定したイタレーションにおける前記ループ運搬依存変数の値をループ運搬依存変数でない変数を用いて算出して前記局所変数に代入する初期値算出コードを生成し、
    前記生成した初期値算出コードを前記サブループの前に追加する
    ことを特徴とする請求項2に記載のコンパイル装置。
  5. 前記初期値算出コード追加部は、
    ループ運搬依存変数のリストである初期値追加リストを作成し、
    前記初期値追加リストの変数について、前記サブループの最初のイタレーションで参照される値を左辺値とする導出式を前記ループから生成し初期値算出コードとして前記サブループの前に追加し、
    直前に追加した初期値算出コードについて、右辺値に含まれるループ運搬依存変数のリストである第2追加リストを生成し、前記第2追加リストの変数について、前記変数を左辺値とする導出式を前記ループから生成し初期値算出コードとして既に追加されている初期値算出コードの前に追加する処理を前記第2追加リストに変数があれば繰り返し行う
    ことを特徴とする請求項4に記載のコンパイル装置。
  6. コンピュータを、逐次型のソースプログラムから並列型の目的プログラムを生成するコンパイル装置として機能させるためのプログラムであって、
    前記コンピュータに、
    前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析ステップと、
    前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定ステップと、
    前記ループ並列化判定ステップが並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値をループ内で実行される一つ以上の処理を一回以上実行することにより算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加ステップと
    実行させることを特徴とするプログラム。
  7. コンピュータを、逐次型のソースプログラムから並列型の目的プログラムを生成するコンパイル装置として機能させるためのコンパイルプログラムが記録されているコンピュータ読み取り可能な記録媒体であって、
    前記コンピュータに、
    前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析ステップと、
    前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定ステップと、
    前記ループ並列化判定ステップが並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値をループ内で実行される一つ以上の処理を一回以上実行することにより算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加ステップと
    を実行させるためのプログラムが記録されているコンピュータ読み取り可能な記録媒体。
  8. 逐次型のソースプログラムから並列型の目的プログラムを生成するコンパイル装置におけるループ並列化方法であって、
    前記ソースプログラムに含まれるループについて、値を代入するイタレーションの後に実行される別のイタレーションにおいて前記代入された値が参照されるループ運搬依存変数が存在するか否かを解析するデータ依存解析ステップと、
    前記ループ運搬依存変数を含むループについて、ループを逐次実行することなく全てのイタレーションにおける前記ループ運搬依存変数の値を算出することができる並列化可能ループであるか否かを判定するループ並列化判定ステップと、
    前記ループ並列化判定ステップが並列化可能ループと判定するループについて、複数のサブループに分割するために前記サブループの開始位置を決定し、前記開始位置のそれぞれにおける前記ループ運搬依存変数の値をループ内で実行される一つ以上の処理を一回以上実行することにより算出する初期値算出コードを生成し、前記ループを前記開始位置に従って前記サブループに分割し、前記初期値算出コードがそれぞれ対応する前記サブループより前に実行されるように目的プログラムを生成する初期値算出コード追加ステップと
    を含むことを特徴とするループ並列化方法。
JP2012549616A 2010-12-21 2011-12-13 コンパイル装置、コンパイルプログラム及びループ並列化方法 Expired - Fee Related JP5810316B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012549616A JP5810316B2 (ja) 2010-12-21 2011-12-13 コンパイル装置、コンパイルプログラム及びループ並列化方法

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2010284402 2010-12-21
JP2010284402 2010-12-21
JP2012549616A JP5810316B2 (ja) 2010-12-21 2011-12-13 コンパイル装置、コンパイルプログラム及びループ並列化方法
PCT/JP2011/006941 WO2012086148A1 (ja) 2010-12-21 2011-12-13 コンパイル装置、コンパイルプログラム及びループ並列化方法

Publications (2)

Publication Number Publication Date
JPWO2012086148A1 JPWO2012086148A1 (ja) 2014-05-22
JP5810316B2 true JP5810316B2 (ja) 2015-11-11

Family

ID=46313440

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012549616A Expired - Fee Related JP5810316B2 (ja) 2010-12-21 2011-12-13 コンパイル装置、コンパイルプログラム及びループ並列化方法

Country Status (4)

Country Link
US (1) US8881124B2 (ja)
JP (1) JP5810316B2 (ja)
CN (1) CN103250135A (ja)
WO (1) WO2012086148A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10013242B2 (en) 2014-05-27 2018-07-03 Entit Software Llc Distributed compilation of statically typed languages
US20160019060A1 (en) * 2014-07-21 2016-01-21 Qualcomm Incorporated ENFORCING LOOP-CARRIED DEPENDENCY (LCD) DURING DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA
JP2016224812A (ja) * 2015-06-02 2016-12-28 富士通株式会社 並列計算装置、並列処理方法、並列処理プログラムおよびコンパイルプログラム
JP2017107448A (ja) * 2015-12-10 2017-06-15 株式会社デンソー 並列化方法、並列化ツール、車載装置
US10671361B2 (en) * 2016-10-25 2020-06-02 Paypal, Inc. Automatically determining data dependencies to facilitate code execution
WO2020174581A1 (ja) * 2019-02-26 2020-09-03 三菱電機株式会社 情報処理装置、情報処理方法及び情報処理プログラム
US11714616B2 (en) * 2019-06-28 2023-08-01 Microsoft Technology Licensing, Llc Compilation and execution of source code as services
US11537446B2 (en) 2019-08-14 2022-12-27 Microsoft Technology Licensing, Llc Orchestration and scheduling of services
JP2021039658A (ja) * 2019-09-05 2021-03-11 富士通株式会社 Ac並列化回路、ac並列化方法及び並列情報処理装置
US11366647B2 (en) * 2020-04-30 2022-06-21 Intel Corporation Automatic compiler dataflow optimization to enable pipelining of loops with local storage requirements

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6394368A (ja) * 1986-10-09 1988-04-25 Hitachi Ltd 自動ベクトル化方法
JPH07110800A (ja) * 1993-10-13 1995-04-25 Matsushita Electric Ind Co Ltd 最適化並列コンパイル装置及び最適化並列コンパイル方法
JPH11161500A (ja) * 1997-11-28 1999-06-18 Hitachi Ltd 実行時依存解析を行う目的プログラムの生成方法
JP2000020482A (ja) * 1998-06-29 2000-01-21 Hitachi Ltd ループ並列化方法
JP2001249818A (ja) * 2000-03-03 2001-09-14 Matsushita Electric Ind Co Ltd 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2010191506A (ja) * 2009-02-16 2010-09-02 Fujitsu Ltd コンパイル装置およびコンパイルプログラム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07110800B2 (ja) 1988-06-14 1995-11-29 松下電器産業株式会社 イオン化ガス供給ノズル
US20040098711A1 (en) * 2002-11-20 2004-05-20 Yonghong Song Method and system for dependence analysis
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US8549501B2 (en) * 2004-06-07 2013-10-01 International Business Machines Corporation Framework for generating mixed-mode operations in loop-level simdization
JP4084374B2 (ja) 2005-08-11 2008-04-30 株式会社日立製作所 ループ並列化方法及びコンパイル装置
US8104030B2 (en) * 2005-12-21 2012-01-24 International Business Machines Corporation Mechanism to restrict parallelization of loops
JP4884297B2 (ja) * 2006-05-26 2012-02-29 パナソニック株式会社 コンパイラ装置、コンパイル方法およびコンパイラプログラム
US8037462B2 (en) * 2006-08-02 2011-10-11 International Business Machines Corporation Framework for parallelizing general reduction
CN101344855A (zh) * 2007-07-13 2009-01-14 上海宇梦通信科技有限公司 一种基于编译的跟踪代码中特定对象的控制方法及装置
US8146071B2 (en) * 2007-09-18 2012-03-27 International Business Machines Corporation Pipelined parallelization of multi-dimensional loops with multiple data dependencies
US8087010B2 (en) * 2007-09-26 2011-12-27 International Business Machines Corporation Selective code generation optimization for an advanced dual-representation polyhedral loop transformation framework
US8087011B2 (en) * 2007-09-26 2011-12-27 International Business Machines Corporation Domain stretching for an advanced dual-representation polyhedral loop transformation framework
JP4339907B2 (ja) * 2007-10-24 2009-10-07 株式会社日立製作所 マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US8151252B2 (en) * 2008-02-22 2012-04-03 Oracle America, Inc. Compiler framework for speculative automatic parallelization with transactional memory
US8739141B2 (en) * 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
US8453134B2 (en) * 2008-06-04 2013-05-28 Intel Corporation Improving data locality and parallelism by code replication
US8448155B2 (en) * 2009-06-01 2013-05-21 National Instruments Corporation Automatically creating parallel iterative program code in a graphical data flow program
US8561046B2 (en) * 2009-09-14 2013-10-15 Oracle America, Inc. Pipelined parallelization with localized self-helper threading

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6394368A (ja) * 1986-10-09 1988-04-25 Hitachi Ltd 自動ベクトル化方法
JPH07110800A (ja) * 1993-10-13 1995-04-25 Matsushita Electric Ind Co Ltd 最適化並列コンパイル装置及び最適化並列コンパイル方法
JPH11161500A (ja) * 1997-11-28 1999-06-18 Hitachi Ltd 実行時依存解析を行う目的プログラムの生成方法
JP2000020482A (ja) * 1998-06-29 2000-01-21 Hitachi Ltd ループ並列化方法
JP2001249818A (ja) * 2000-03-03 2001-09-14 Matsushita Electric Ind Co Ltd 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2010191506A (ja) * 2009-02-16 2010-09-02 Fujitsu Ltd コンパイル装置およびコンパイルプログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND200900424010; 渡邊 坦: '特集2 COINSがもたらすコンパイラ革命 Part2 HIRに対する最適化と並列化' UNIX magazine Vol.24,No.3, 20090701, pp.90〜93, 株式会社アスキー・メディアワークス *
JPN6012000688; 渡邊 坦: '特集2 COINSがもたらすコンパイラ革命 Part2 HIRに対する最適化と並列化' UNIX magazine Vol.24,No.3, 20090701, pp.90〜93, 株式会社アスキー・メディアワークス *

Also Published As

Publication number Publication date
WO2012086148A1 (ja) 2012-06-28
JPWO2012086148A1 (ja) 2014-05-22
US20130024849A1 (en) 2013-01-24
US8881124B2 (en) 2014-11-04
CN103250135A (zh) 2013-08-14

Similar Documents

Publication Publication Date Title
JP5810316B2 (ja) コンパイル装置、コンパイルプログラム及びループ並列化方法
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JP2921190B2 (ja) 並列実行方式
Du et al. A cost-driven compilation framework for speculative parallelization of sequential programs
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP6141365B2 (ja) 逐次コンピュータプログラムコードを並列処理する方法及びシステム
Oancea et al. Logical inference techniques for loop parallelization
US8336038B2 (en) System and method for parallel execution of a program
US9195444B2 (en) Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction
JPH11167492A (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
KR20140131200A (ko) 멀티스레드 프로그램 코드의 변환 장치 및 방법
JPH04293150A (ja) コンパイル方法
JP5218129B2 (ja) コンパイル装置およびコンパイルプログラム
WO2011090032A1 (ja) 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
Shao et al. Map-reduce inspired loop parallelization on CGRA
JP2009169862A (ja) プログラム変換装置、方法、プログラムおよび記録媒体
JP3551352B2 (ja) ループ分割方法
JP2007108838A (ja) コンパイル方法及びコンパイル装置
JPH0512033A (ja) 並列化コンパイル方式
JPS62169272A (ja) ベクトル演算列ル−プアンロ−リング処理方式
Gao et al. Design and Implementation of A Multi-Core CPU Compilation Optimization Framework Based on MLIR
JP2518504B2 (ja) 目的プログラム生成装置
JP2004152204A (ja) 並列化コンパイラ装置
JP2001175617A (ja) コンパイラ並列化方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140605

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20140606

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20141008

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150302

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: 20150324

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150417

R151 Written notification of patent or utility model registration

Ref document number: 5810316

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees