JP6164054B2 - 情報処理装置、コンパイル方法およびコンパイラプログラム - Google Patents

情報処理装置、コンパイル方法およびコンパイラプログラム Download PDF

Info

Publication number
JP6164054B2
JP6164054B2 JP2013231957A JP2013231957A JP6164054B2 JP 6164054 B2 JP6164054 B2 JP 6164054B2 JP 2013231957 A JP2013231957 A JP 2013231957A JP 2013231957 A JP2013231957 A JP 2013231957A JP 6164054 B2 JP6164054 B2 JP 6164054B2
Authority
JP
Japan
Prior art keywords
loop
parameter
index
array
loop variable
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.)
Active
Application number
JP2013231957A
Other languages
English (en)
Other versions
JP2015094960A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013231957A priority Critical patent/JP6164054B2/ja
Priority to US14/522,815 priority patent/US9430203B2/en
Publication of JP2015094960A publication Critical patent/JP2015094960A/ja
Application granted granted Critical
Publication of JP6164054B2 publication Critical patent/JP6164054B2/ja
Active 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/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
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は情報処理装置、コンパイル方法およびコンパイラプログラムに関する。
コンピュータソフトウェアを開発する場合、開発者はプログラミング言語としてC言語などの高級言語を使用することが多い。高級言語を用いて記述されたソースコードは、コンパイラによって、プロセッサが実行可能なオブジェクトコードに変換することができる。コンパイラは、ソースコードの文法的な誤りを検査するだけでなく、メモリアクセス違反などの不適切な動作につながる意味的な誤りを検査する機能を有していることがある。
意味的な誤りは、配列の参照に関連して生じることがある。配列は複数のデータ要素を格納できるデータ構造であり、配列全体は1つの変数(配列変数)によって特定され、配列の中の各データ要素はインデックス(添字)によって特定される。配列は、複数のデータ要素に対して同様の演算を行うループ処理の中で使われることがある。配列の参照に関連した意味的な誤りの例として、宣言された範囲を超えたインデックスの値を用いて配列を参照することで、不適切なメモリ領域にアクセスすることが挙げられる。また、他の例として、あるインデックスの値を指定してデータ要素を格納する処理と、同じインデックスの値を指定してデータ要素を取得する処理とを並列化したとき、両者の処理の順序が調整されないために意図した処理結果が得られないことが挙げられる。
コンパイラは、ある配列の参照が不適切な動作を生じさせることがソースコードから明らかである場合、エラーメッセージを表示することがあり、オブジェクトコードを生成せずにコンパイルを停止することもある(コンパイル時の静的検査)。一方、コンパイラは、配列の参照が実行時に決まるパラメータの値に依存している場合など、不適切な動作を生じさせるとコンパイル時に断定できない場合、オブジェクトコードに検査コードを埋め込むことがある。検査コードは、不適切な動作が発生する前に(例えば、宣言された範囲を超えたインデックスの値を用いて配列を参照する前に)、実行時のパラメータの値などに基づいて、処理を進めてよいか検査する(実行時の動的検査)。
一例として、インデックスの不正使用の検査方法が提案されている。この検査方法では、コンパイラは、ループの繰り返し回数を制御するためのループ変数Iが初期値Mから終了値Nまで変化し、ループ内においてインデックスI×4−3を用いて配列Aを参照しているソースコードを取得する。初期値Mおよび終了値Nは、実行時にその値が決まるパラメータである。すると、コンパイラは、ループ変数I=初期値Mのときのインデックスの値とループ変数I=終了値Nのときのインデックスの値とが、宣言された範囲に収まっているか検査するサブルーチンを生成する。そして、コンパイラは、ループ直前にこのサブルーチンが呼び出されるようなオブジェクトコードを生成する。
また、一例として、コンパイラによる最適化方法が提案されている。この最適化方法では、コンパイラは、2つの処理が独立しているか(一方の処理が他方の処理の結果を利用していないか)確認し、独立していることが確認できた場合は2つの処理を並列化することを試みる。独立性の確認において、コンパイラは、配列Xとループ変数Jと定数a1,a2,b1,b2を用いて記述されたループを検出する。このループ内において、インデックスa1×J+b1を用いた配列Xの参照とインデックスa2×J+b2を用いた配列Xの参照とが近接しているとする。すると、コンパイラは、任意のループ変数Jについて(a1−a2)×J+(b1−b2)=0となることがあるか計算することで、上記の2つのインデックスが同じデータ要素を指す可能性を検査する。
特開平2−148330号公報 特開平5−197563号公報
Alexander Schrijver, "Theory of Linear and Integer Programming", John Wiley & Sons, pp.155-157, 1998年6月4日
しかし、特許文献1,2に記載の方法は、ループ変数の初期値と終了値がそれぞれ定数または1つのパラメータによって表現され、配列のインデックスが1つのループ変数の一次式として表現された比較的単純な配列参照を検査対象としている。多重ループにより複数のループ変数が現れる場合やループ変数の変動範囲の定義が複雑な場合など、比較的複雑な配列参照については、特許文献1,2に記載の方法を適用することは難しい。すなわち、インデックスの不正使用や並列化可能性などの検査を任意のループに対して行えるわけではなく、ループ処理の実行前に検証できる事項が限定され得るという問題がある。
1つの側面では、本発明は、ループ内の配列参照についてループ前に検査できる事項を増やすことができる情報処理装置、コンパイル方法およびコンパイラプログラムを提供することを目的とする。
1つの態様では、記憶部と演算部とを有する情報処理装置が提供される。記憶部は、インデックスによって参照される配列とループ変数とループ変数以外のパラメータとを用いて記述されたループ処理を含むソースコードを記憶する。演算部は、ループ変数およびパラメータを用いて配列のインデックスが所定の条件を満たすことを示す条件式を生成する。演算部は、数式処理によって条件式からループ変数を消去することでパラメータについての判定情報を生成する。演算部は、判定情報に応じてソースコードに対応するオブジェクトコードを生成する。
また、1つの態様では、コンピュータが実行するコンパイル方法が提供される。また、1つの態様では、コンピュータが実行するコンパイラプログラムが提供される。
1つの側面では、ループ内の配列参照についてループ前に検査できる事項が増える。
第1の実施の形態の情報処理装置を示す図である。 情報処理装置のハードウェア例を示すブロック図である。 実行時のインデックス検査の例を示す図である。 インデックス検査のための判定式の算出方法の例を示す図である。 実行時の並列化検査の例を示す図である。 並列化検査のための判定式の算出方法の例を示す図である。 判定式の最適化の例を示す図である。 情報処理装置で動作するソフトウェア例を示すブロック図である。 コンパイルの手順例を示すフローチャートである。 インデックス分析の手順例を示すフローチャートである。 並列化分析の手順例を示すフローチャートである。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。
第1の実施の形態の情報処理装置10は、ソースコード13をコンパイルしてオブジェクトコード14を生成する。情報処理装置10は、ユーザが操作する端末装置であってもよいし、端末装置からネットワーク経由でアクセスされるサーバ装置であってもよい。情報処理装置10は、「コンピュータ」と呼ばれてもよい。
情報処理装置10は、記憶部11および演算部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性の記憶装置でもよいし、HDD(Hard Disk Drive)などの不揮発性の記憶装置でもよい。演算部12は、例えば、プロセッサである。プロセッサは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)であってもよく、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を含んでもよい。プロセッサは、例えば、RAMに記憶されたプログラムを実行する。後述するコンパイル処理を実現するためのプログラムを、コンパイラプログラムと呼んでもよい。また、「プロセッサ」は、2以上のプロセッサの集合(マルチプロセッサ)であってもよい。
記憶部11は、ソースコード13を記憶する。ソースコード13は、ユーザから情報処理装置10に入力されたものでもよいし、情報処理装置10が他の情報処理装置から受信したものでもよい。ソースコード13には、ループ処理のコードが含まれる。
このループ処理は、インデックスによって参照される配列Aとループ変数iとパラメータMとを用いて記述されている。配列Aの参照は、配列Aへのデータ要素の格納と配列Aからのデータ要素の取得の何れでもよい。配列Aのデータ要素数は、ソースコード13において配列Aを定義するときに宣言されている。ループ変数iは、ループ処理の繰り返し回数を制御するための変数である。ループ処理が入れ子になっている場合、複数のループ変数が使用されることもある。パラメータMは、その値が静的(コンパイル時)には決まらず動的(実行時)に決まる変数である。パラメータMの値は、ループ処理の直前までには算出されており、ループ処理中は変化しない。配列Aのインデックスは、例えば、定数でなく、2i+Mのようにループ変数の線形式として表される。パラメータMは、ループ変数の値の範囲およびインデックスの少なくとも一方を表すために用いられ得る。
演算部12は、記憶部11からソースコード13を取得し、オブジェクトコード14を生成する。このとき、演算部12は、ループ変数iおよびパラメータMを用いて、配列Aのインデックスが所定の条件を満たすことを示す条件式15を生成する。条件式15には、例えば、ループ変数の変動範囲(ループ変数の値の制限)を示す1または2以上の第1の式と、所定の条件についての第2の式とが含まれる。第1の式は、パラメータMを含んでもよく、ループ変数iについての線形不等式であってもよい。第2の式は、ループ変数iについての線形等式または線形不等式であってもよい。
所定の条件は、例えば、配列Aのインデックスの値が定義域に収まっていること、または、定義域に収まっていないことである。インデックスの定義域は、配列Aの定義時に確保されたメモリ領域の内を指すインデックスの値の範囲である。定義域に収まっていないインデックスの値は、配列A用のメモリ領域の外を指すことを意味し、不正なメモリアクセスを引き起こす。また、所定の条件は、例えば、異なるループ変数iの値(i=i0とi=i1)に対応する処理を並列化可能であること、または、並列化不可であることである。i=i0のときに用いるインデックスの値とi=i1のときに用いるインデックスの値とが同じになる可能性があり、i=i0のときの配列Aの参照とi=i1のときの配列Aの参照の少なくとも一方がデータ要素の格納である場合、並列化不可となる。
条件式15が生成されると、演算部12は、数式処理によって条件式15からループ変数を消去することで、パラメータMについての判定情報16を生成する。判定情報16は、条件式15が成立するときのパラメータMの値の範囲を示すことがある。実行時に決まるパラメータMの値がこの範囲に属していれば、配列Aのインデックスが所定の条件を満たすことになる。ただし、パラメータMの値に依存せず条件式15が常に成立するまたは常に成立しない場合、判定情報16は、パラメータMの値の範囲を示さないこともある。
数式処理として、「射影」と呼ばれる操作を用いることができる。射影は、高次元の情報を低次元の情報へと変換する操作である。射影では、ループ変数およびパラメータを含むn個の変数の関係をn次元空間に表現し、ある変数に対応する軸方向から光を当ててn−1次元空間に影を映し出すことで、ある変数を消去することができる。射影を実現するアルゴリズムの一例として、フーリエ・モツキン(Fourier-Motzkin)の消去法が挙げられる。例えば、非特許文献1(Alexander Schrijver, "Theory of Linear and Integer Programming", John Wiley & Sons, pp.155-157, 1998年6月4日)に、そのアルゴリズムが記載されている。
判定情報16が生成されると、演算部12は、判定情報16に応じて、ソースコード13に対応するオブジェクトコード14を生成する。例えば、判定情報16がパラメータMの値の範囲を示している場合、演算部12は、実行時のパラメータMの値がその範囲に属するか検査する検査コード14aを生成し、オブジェクトコード14におけるループ処理の前(例えば、ループ処理の直前)に挿入する。これにより、ループ処理において不適切な動作が発生する前に、オブジェクトコード14の実行を停止するなどエラー処理を行うことが可能となる。また、例えば、判定情報16が、条件式15が常に成立する(または常に成立しない)ことを示している場合、演算部12は、コンパイルエラーを示す警告情報を出力する。このとき、オブジェクトコード14は生成しなくてもよい。
第1の実施の形態の情報処理装置10によれば、ループ内における配列Aの参照が所定の条件を満たすことが、ループ変数iと実行時にその値が決まるパラメータMとを用いて条件式15として表現される。そして、射影などの数式処理を用いて、条件式15からループ変数iが消去されて、パラメータMについての判定情報16が生成される。この判定情報16に基づいて、例えば、ループ処理の前にパラメータMの値を検査するオブジェクトコード14が生成される。これにより、ループ変数iの変動範囲や配列Aのインデックスなどのループ定義が複雑であっても、数式処理を用いてパラメータMの条件を算出することができ、ループ処理の前に検査できる事項を増やすことができる。
[第2の実施の形態]
第2の実施の形態の情報処理装置は、コンパイラおよびリンカを用いて、C言語などの高級言語で記述されたソースコードから実行コードを生成する。
図2は、情報処理装置のハードウェア例を示すブロック図である。
情報処理装置100は、CPU101,102、RAM103、HDD104、画像信号処理部105、入力信号処理部106、媒体リーダ107および通信インタフェース108を有する。これらのハードウェアユニットは、情報処理装置100内でバスに接続されている。CPU101,102は、第1の実施の形態の演算部12の一例であり、RAM103またはHDD104は、第1の実施の形態の記憶部11の一例である。
CPU101,102は、プログラムの命令を実行する1または2以上のコアを含むプロセッサである。例えば、CPU101は、コア101a,101bを含む。同一または異なるCPUに属する複数のコアは、互いに並列に命令を実行できる。CPU101,102は、HDD104に記憶されているプログラムやデータの少なくとも一部をRAM103にロードし、プログラムを実行する。なお、各コアを「プロセッサ」と呼んでもよいし、複数のプロセッサの集合を「プロセッサ」(マルチプロセッサ)と呼んでもよい。
RAM103は、CPU101,102が実行するプログラムやCPU101,102が演算に用いるデータを一時的に記憶する揮発性メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD104は、OS(Operating System)やアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部105は、CPU101,102からの命令に従って、情報処理装置100に接続されたディスプレイ21に画像を出力する。ディスプレイ21としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部106は、情報処理装置100に接続された入力デバイス22から入力信号を取得し、少なくとも1つのCPUに出力する。入力デバイス22としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ107は、記録媒体23に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体23として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。媒体リーダ107は、例えば、記録媒体23から読み取ったプログラムやデータをRAM103またはHDD104に格納する。
通信インタフェース108は、ネットワーク24に接続され、ネットワーク24を介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース108は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
なお、情報処理装置100が備えるCPUの数は1個であってもよい。また、情報処理装置100は、媒体リーダ107を備えていなくてもよい。また、情報処理装置100は、ユーザが操作する端末装置からネットワーク24経由で制御される場合には、画像信号処理部105や入力信号処理部106を備えていなくてもよい。また、情報処理装置100は、通信インタフェース108を備えていなくてもよい。また、ディスプレイ21や入力デバイス22が、情報処理装置100の筐体と一体に形成されていてもよい。
次に、第2の実施の形態のコンパイラの検査機能について説明する。
図3は、実行時のインデックス検査の例を示す図である。
ここでは、情報処理装置100が次のようなソースコードをコンパイルする場合を考える。このソースコードには、データ要素数が100の配列Aと、ループ前にその値が動的に決定されループ内でその値が変わらないパラメータMと、ループ変数i,jとが定義されている。配列Aのインデックスの正常範囲は0〜99である。
ループは二重構造(入れ子)になっており、外側ループの繰り返し回数を制御するためにループ変数iが使用され、内側ループの繰り返し回数を制御するためにループ変数jが使用される。外側ループについて、ループ変数iの初期値は定数0であり、ループ変数iの終了値は定数3であり、ループ変数iの増加幅は定数1である。内側ループについて、ループ変数jの初期値はiであり、ループ変数jの終了値は−i+7とi+3の何れか小さい方であり、ループ変数jの増加幅は定数1である。すなわち、内側ループのループ変数jの初期値と終了値は、外側ループのループ変数iの値に依存している。内側ループの中では、インデックスi−2j+Mが指す配列Aのデータ要素が更新される。すなわち、配列Aの参照は、ループ変数i,jとパラメータMに依存している。
このループ処理を実行したときにメモリアクセス違反が発生しないためには、インデックスi−2j+Mの値が0〜99の範囲に収まっていることを要する。一方、パラメータMの値は実行時に決まるため、メモリアクセス違反が発生するか否かをコンパイル時に静的に検査することは難しい。そこで、情報処理装置100は、メモリアクセス違反が発生するか否かを実行時に動的に検査する検査コードを、実行コードに挿入する。
第1の検査方法として、内側ループにおいて配列Aが参照される直前に、i−2j+Mの値が100以上であるかまたは−1以下であるという判定式を用いて、インデックスを検査する方法が考えられる。この判定式が満たされる場合、配列Aの参照によりメモリアクセス違反が生じるため、プログラムを強制終了するなどのエラー処理を行うようにする。ただし、第1の検査方法では、ループの繰り返し回数だけ検査コードが実行されるため、ループ処理のオーバヘッドが大きくなりプログラムの実行効率が低下しやすい。
第2の検査方法として、外側ループが開始される直前に、パラメータMの値が100以上であるかまたは7以下であるという判定式を用いて、インデックスを検査する方法が考えられる。この判定式は、ループ変数i,jの値が変動したときにインデックスi−2j+Mの値が0〜99の範囲を超えるようなパラメータMの条件を示している。この判定式が満たされる場合、プログラムを強制終了するなどのエラー処理を行うようにする。この判定式にはループ変数i,jが含まれていないため、インデックスi−2j+Mの値が0〜99の範囲を超えるか否か、外側ループが開始される前に検査することができる。すなわち、第2の検査方法では、第1の検査方法と比べて検査コードの実行回数を削減でき、ループ処理のオーバヘッドが小さくなりプログラムの実行効率の低下を抑制できる。情報処理装置100は、第2の検査方法に基づく実行コードを生成することとする。
なお、図3の検査コードでは、インデックスi−2j+Mの値が0〜99の範囲を超えることを示す判定式を使用し、判定式が満たされる場合にエラー処理を行うこととしている。
図4は、インデックス検査のための判定式の算出方法の例を示す図である。
上記の図3で説明したパラメータMの判定式(パラメータMの値が100以上であるかまたは7以下である)は、図4に示すような条件式から数式処理によって導出することができる。条件式は、ループ変数i,jの変動範囲を制限するループ変数条件と、インデックスi−2j+Mの値がメモリアクセス違反を生じさせることを示すエラー条件を含む。
ループ変数条件は、ソースコードに記述されたループ定義に基づいて、次のように定義される。ループ変数iの値は定数0以上かつ定数3以下である。ループ変数jの値は、ループ変数iの値以上である。ループ変数jの値は、−i+7の値以下かつi+3の値以下である。このループ変数i,jの変動範囲は、ループ変数i,jに対応する軸をもつ2次元空間の領域として表現できる。図4に示すように、ループ変数i,jの値は5角形の領域の内側で変動する。具体的には、(i,j)の値は、(0,0),(0,1),(0,2),(0,3),(1,1),(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(2,5),(3,3),(3,4)の14通りある。
エラー条件は、ソースコードに記述された配列定義および配列参照に基づいて、次のように定義される。インデックスi−2j+Mの値は、100以上または−1以下である。
このような条件式から、情報処理装置100は、数式処理によってループ変数i,jを消去してパラメータMについての判定式を生成することができる。数式処理として、フーリエ・モツキンの消去法などの「射影」と呼ばれるアルゴリズムを用いることができる。ループ変数i,jおよびパラメータMに対応する軸をもつ3次元空間に、上記の条件式を満たす領域を形成することを考える。射影は、ループ変数i,jそれぞれに対応する軸方向から光を当ててパラメータMに対応する空間に影を映し出すことを意味し、ループ変数i,jを消去してパラメータMの値の取り得る範囲を求めることができる。
フーリエ・モツキンの消去法によれば、例えば、次のような計算手順で射影が実現される。ループ変数やパラメータを含むn個の変数x1,x2,…,xnを用いて表されたn次元連立不等式が存在するとする。そして、射影によってn次元連立不等式から、m番目の変数xmを消去したn−1次元連立不等式を算出することを考える。
まず、n次元連立不等式の中から、変数xmの値の上限および下限の少なくとも一方を定める不等式を抽出し、上限を定める不等式と下限を定める不等式の全ての組み合わせについて、変数xmを含まない新たな不等式を生成する。例えば、上限を定める不等式の1つをa×xm<=U(aは定数、Uは変数xmを含まない線形式)とし、下限を定める不等式の1つをL<=b×xm(Lは変数xmを含まない線形式、bは定数)とする。すると、a×L<=a×b×xm<=b×Uが成立するため、この2つの不等式の組み合わせから新たな不等式a×L<=b×Uを生成することができる。新たに生成された不等式と、元のn次元連立不等式のうち変数xmを含まない不等式とを合わせることで、変数xmを消去したn−1次元連立不等式を得ることができる。
なお、第2の実施の形態では、射影によって条件式から判定式を容易に算出できるように、n次元空間上に形成される領域が凸多面体となる場合を想定する。凸多面体は、有限個の線形不等式によって形成される領域であり、全ての面が凸多角形(全ての頂点の内角が180度未満である多角形)になっている多面体である。ループ変数の初期値と終了値が外側ループのループ変数とパラメータと定数の線形式で表現され、ループ変数の増加幅が定数であり、インデックスがループ変数とパラメータと定数の線形式で表現されている場合、n次元空間上に形成される領域は凸多面体になる。よって、情報処理装置100は、ループ変数およびインデックスがこのような条件を満たすループについて、ループ内の配列参照を検査する検査コードを、射影を用いて生成することができる。
図5は、実行時の並列化検査の例を示す図である。
ここでは、情報処理装置100が、図3と異なる次のようなソースコードをコンパイルする場合を考える。このソースコードには、データ要素数が100×100の二次元配列である配列Bと、ループ前にその値が動的に決定されループ内でその値が変わらないパラメータN,X,Yと、ループ変数i,jとが定義されている。
ループは入れ子になっており、外側ループの繰り返し回数を制御するためにループ変数iが使用され、内側ループの繰り返し回数を制御するためにループ変数jが使用される。外側ループについて、ループ変数iの初期値は定数0であり、ループ変数iの終了値はN−1であり、ループ変数iの増加幅は定数1である。内側ループについて、ループ変数jの初期値は定数0であり、ループ変数jの終了値はN−1であり、ループ変数jの増加幅は定数1である。内側ループの中では、インデックスi,j+Yが指す配列Bのデータ要素が取得され、インデックスi,j+Xが指す配列Bのデータ要素が更新される。すなわち、配列Bの参照は、ループ変数i,jとパラメータX,Yに依存している。
また、内側ループには、並列化指示文(!ocl parallel)が付加されている。並列化指示文の後の命令は、複数のCPU(例えば、CPU101,102)または複数のコア(例えば、コア101a,101b)を用いて並列実行されることになる。ユーザは、コンパイラの自動最適化によっては並列化されにくい命令について、並列化指示文を付加することで強制的に並列化することができる。図5で内側ループに付加された並列化指示文は、ループ変数jの異なる値に対応する処理を並列化することを意味する。
ただし、ループ内の配列参照は、並列化することで不適切な動作が発生することがある。例えば、パラメータNの値が2以上であり、パラメータX,Yの値がX=Y+1の関係を有しているとする。この場合、B[0,Y]の値に基づいてB[0,1+Y]の値が算出され、B[0,1+Y]の値に基づいてB[0,2+Y]の値が算出されることになる。すなわち、j=0の処理結果を利用してj=1の処理が行われることになり、j=0の処理とj=1の処理の間に依存関係が発生する。そして、依存関係がある処理を並列化してしまうと、実行順序が保証されないために不適切な動作が発生し得る。
第2の実施の形態では、ループ変数jの異なる値に対応する処理の間に依存関係がある場合、そのループ処理は並列化不可であると判断する。依存関係は、同じ配列に対するデータ要素の書き込みと読み出しの間、および、同じ配列に対するデータ要素の書き込みと書き込みの間で発生し得る。一方、並列化可否は、実行時にその値が決まるパラメータN,X,Yに依存するため、コンパイル時に静的に検査することは難しい。そこで、情報処理装置100は、並列化指示文が付加されたループについて、そのループを並列化してよいか実行時に動的に検査する検査コードを、実行コードに挿入する。
例えば、内側ループが開始される直前に、X−Yが1以上かつN−1以下であるか、または、X−Yが1−N以上かつ−1以下であるという判定式を用いて、並列化可否を検査する方法が考えられる。この判定式は、ループ変数i,jの値が変動したときにインデックスi,j+Xの値の範囲とインデックスi,j+Yの値の範囲とが重複するようなパラメータN,X,Yの条件を示している。この判定式が満たされる場合、プログラムを強制終了するなどのエラー処理を行うようにする。この判定式にはループ変数i,jが含まれていないため、並列化の可否を内側ループが開始される前に検査することができる。
なお、図5の検査コードでは、並列化不可であることを示す判定式を使用し、判定式が満たされる場合にエラー処理を行うこととしている。
図6は、並列化検査のための判定式の算出方法の例を示す図である。
並列化の一例として、i=i0のときに、内側ループの偶数番目の処理(j=0,2,…)をコア101aが実行し、内側ループの奇数番目の処理(j=1,3,…)をコア101bがコア101aと並列に実行することが考えられる。コア101aは、B[i0,0+Y]のデータ要素を取得してB[i0,0+X]のデータ要素を更新し、また、B[i0,2+Y]のデータ要素を取得してB[i0,2+X]のデータ要素を更新する。コア101bは、B[i0,1+Y]のデータ要素を取得してB[i0,1+X]のデータ要素を更新し、また、B[i0,3+Y]のデータ要素を取得してB[i0,3+X]のデータ要素を更新する。コア101aが行う偶数番目の処理とコア101bが行う奇数番目の処理との間では、実行順序が保証されない。すなわち、コア101bのj=1の処理の後にコア101aのj=2の処理が行われるとは限らない。
ここで、i=i0のときに内側ループのj=j0の処理をコア101aが実行し、i=i1=i0のときに内側ループのj=j1の処理をコア101bが実行するとする。i0,i1はループ変数iの取り得る任意の値であり、j0,j1はループ変数jの取り得る任意の値である。内側ループが並列化可能であるには、i=i0,j=j0のときのインデックスi,j+Xの値(i0,j0+X)が、i=i1=i0,j=j1のときのインデックスi,j+Yの値(i1,j1+Y)と一致することがないことを要する。
そこで、上記の図5で説明したパラメータN,X,Yの判定式は、図6に示すような条件式から数式処理によって導出することができる。条件式は、i0,i1,j0,j1の範囲を示すループ変数条件と、並列化不可であることを示すエラー条件を含む。ループ変数条件は、ソースコードに記述されたループ定義に基づいて、次のように定義される。i0,i1,j0,j1は定数0以上かつN−1以下である。i0はi1と一致し、j0はj1と異なる。エラー条件は、ソースコードに記述された配列参照に基づいて、次のように定義される。j0+Xはj1+Yと一致する。
このような条件式から、情報処理装置100は、数式処理によってi0,i1,j0,j1を消去してパラメータN,X,Yについての判定式を生成することができる。数式処理として、フーリエ・モツキンの消去法などの「射影」を用いることができる。なお、前述のように、第2の実施の形態では、ループ変数の初期値と終了値が外側ループのループ変数とパラメータと定数の線形式で表現され、ループ変数の増加幅が定数であり、インデックスがループ変数とパラメータと定数の線形式で表現されているものとする。
図7は、判定式の最適化の例を示す図である。
上記ではメモリアクセス検査のための判定式と並列化可否検査のための判定式の例を挙げたが、同じループに対してこの2つの目的の判定式が共に生成されることがある。この2つの判定式は、同じパラメータを含むことが多く、その一部の論理式が共通していることがある。そこで、情報処理装置100は、共通の論理式を抽出して、判定ステップが少なくなるように判定式を最適化する。これにより、プログラムの実行効率が向上する。
例えば、図3,4に示したような方法で、パラメータL,Zに依存するループについて、1<=ZかつL<=Zという判定式が生成されたとする。また、同じループについて、図5,6に示したような方法で、1<=ZかつL−1<=2Zという判定式が生成されたとする。2つの判定式には共通の論理式1<=Zが含まれる。そこで、情報処理装置100は、まず論理式1<=Zを評価し、論理式1<=Zを満たす場合のみ、論理式L<=Zおよび論理式L−1<=2Zを評価するような検査コードを生成する。論理式1<=Zの評価を共通化することで、判定ステップを少なくすることができる。
次に、情報処理装置100の構成およびコンパイル手順について説明する。
図8は、情報処理装置で動作するソフトウェア例を示すブロック図である。
情報処理装置100は、ファイル記憶部110、コンパイラ120およびリンカ130を有する。ファイル記憶部110は、例えば、RAM103またはHDD104に確保した記憶領域として実装される。コンパイラ120およびリンカ130は、例えば、CPU101,102が実行するソフトウェアのモジュールとして実装される。
ファイル記憶部110は、ソースファイル111、オブジェクトファイル112および実行ファイル113を記憶する。ソースファイル111は、C言語などの高級言語を用いて記述されたソースコードを含むファイルである。ソースファイル111は、ユーザが入力デバイス22を用いて作成したものでもよいし、他の情報処理装置からネットワーク24経由で情報処理装置100に送信されたものでもよい。オブジェクトファイル112は、CPUが直接理解できる機械語を用いて記述されたオブジェクトコードを含むファイルである。オブジェクトコードは、ソースコードをコンパイルすることで生成される。実行ファイル113は、実行可能形式のプログラムモジュールであり、オブジェクトファイル112から生成される。実行ファイル113は、情報処理装置100で実行されてもよいし、他の情報処理装置に送信されて当該他の情報処理装置で実行されてもよい。
コンパイラ120は、ファイル記憶部110からソースファイル111を取得し、ソースファイル111に含まれるソースコードをコンパイルする。そして、コンパイラ120は、ソースコードに対応するオブジェクトコードを生成し、生成したオブジェクトコードを含むオブジェクトファイル112をファイル記憶部110に格納する。コンパイラ120は、ソースコード解析部121、インデックス分析部122、並列化分析部123、最適化部124およびオブジェクト生成部125を有する。
ソースコード解析部121は、ソースコードを解析し、ソースコードに表された演算命令および演算命令の実行順序を示す制御構造を認識する。制御構造には、ループ、無条件分岐、条件分岐、サブルーチンコールなどが含まれる。ソースコード解析部121が行う解析には、例えば、字句解析、構文解析、意味解析などが含まれる。
インデックス分析部122は、ソースコード解析部121で認識されたループについて、配列のインデックスの値が定義域に収まるか分析する。インデックス分析部122は、インデックスの値が定義域を超えると静的に判断される場合、コンパイルエラーと判断する。一方、インデックス分析部122は、インデックスの値が定義域を超えるか否か静的には不明である場合、実行ファイル113の実行時にこれを動的に検査するための判定式を出力する。なお、インデックス分析部122は、インデックスの値が定義域に収まると静的に判断される場合、判定式を出力しなくてもよい。
並列化分析部123は、ソースコード解析部121で認識されたループのうち並列化指示文が付加されたものについて、配列参照を並列化可能か分析する。並列化分析部123は、並列化不可と静的に判断される場合、コンパイルエラーと判断する。一方、並列化分析部123は、並列化可能か否か静的には不明である場合、実行ファイル113の実行時にこれを動的に検査するための判定式を出力する。なお、並列化分析部123は、並列化可能と静的に判断される場合、判定式を出力しなくてもよい。
最適化部124は、インデックス分析部122および並列化分析部123が出力した判定式を用いて、ループ毎に、ループの直前に挿入される検査コードを生成する。あるループについてインデックス分析部122と並列化分析部123の一方のみが判定式を出力した場合、最適化部124は、判定式が満たされるときにエラー処理を行う検査コードを生成する。一方、同じループについてインデックス分析部122と並列化分析部123の両方が判定式を出力した場合、最適化部124は、2つの判定式に共通の論理式が含まれているか確認し、判定式が小さくなるように最適化する。そして、最適化部124は、最適化した判定式が満たされるときにエラー処理を行う検査コードを生成する。
オブジェクト生成部125は、ソースコード解析部121の解析結果に基づいて、ソースコードに対応するオブジェクトコードを生成する。このとき、オブジェクト生成部125は、最適化部124が生成した検査コードをループの直前に挿入する。
リンカ130は、ファイル記憶部110からオブジェクトファイル112を取得し、オブジェクトファイル112に含まれるオブジェクトコードから参照される他のオブジェクトファイルやライブラリを検索する。そして、リンカ130は、オブジェクトファイル112と他のオブジェクトファイルやライブラリとを結合し、実行ファイル113を生成する。なお、リンカ130の機能をコンパイラ120が有していてもよい。
図9は、コンパイルの手順例を示すフローチャートである。
(S1)ソースコード解析部121は、ソースファイル111に含まれるソースコードを解析する。ここで、ソースコードに記述されたループが認識される。
(S2)インデックス分析部122は、ステップS1で認識されたループそれぞれについてインデックス分析を行う。インデックス分析により、ステップS1で認識されたループの一部または全部について、ループ内の配列参照がメモリアクセス違反になるパラメータ条件を示す判定式が生成されることがある。インデックス分析の詳細は後述する。
(S3)インデックス分析部122は、ステップS2で生成した判定式の少なくとも1つが、静的なインデックスエラーを示しているか判断する。インデックス分析部122は、生成した判定式を最適化部124に出力する。静的なインデックスエラーを示している場合はステップS8に処理が進む。それ以外の場合はステップS4に処理が進む。
(S4)並列化分析部123は、ステップS1で認識されたループのうち並列化指示文が付加されたものについて並列化分析を行う。並列化分析により、並列化指示文が付加されたループの一部または全部について、ループ内の配列参照を並列化できるパラメータ条件を示す判定式が生成されることがある。並列化分析の詳細は後述する。
(S5)並列化分析部123は、ステップS4で生成した判定式の少なくとも1つが、静的な並列化エラーを示しているか判断する。並列化分析部123は、生成した判定式を最適化部124に出力する。静的な並列化エラーを示している場合はステップS9に処理が進む。それ以外の場合はステップS6に処理が進む。なお、ステップS2,S3,S8とステップS4,S5,S9とは、上記手順と逆順に実行してもよいし並行して実行してもよい。
(S6)最適化部124は、ステップS3で出力された判定式とステップS5で出力された判定式とをループ単位に分類し、最適化する。同じループについてインデックス分析部122と並列化分析部123の両方が判定式を出力した場合、最適化部124は、2つの判定式に共通に含まれる論理式を検索する。共通の論理式がない場合、最適化部124は、判定式を変更しなくてよい。一方、共通の論理式がある場合、最適化部124は、共通の論理式を1回だけ評価すればよいように判定式に含まれる論理式を組み替える。
(S7)最適化部124は、ステップS1で認識されたループの一部または全部について、ステップS6で最適化した判定式を含む検査コードを生成する。オブジェクト生成部125は、ループの直前で検査コードが実行されるようなオブジェクトコードを生成する。オブジェクト生成部125は、生成したオブジェクトコードを含むオブジェクトファイル112をファイル記憶部110に格納する。これにより、コンパイルが終了する。
(S8)インデックス分析部122は、コンパイルエラーを示すメッセージを出力する。例えば、インデックス分析部122は、コンパイルエラーのメッセージをディスプレイ21に表示する。そして、ステップS4に処理が進む。
(S9)並列化分析部123は、コンパイルエラーを示すメッセージを出力する。例えば、並列化分析部123は、コンパイルエラーのメッセージをディスプレイ21に表示する。そして、ステップS6に処理が進む。
図10は、インデックス分析の手順例を示すフローチャートである。
このフローチャートが示す処理は、上記のステップS2において実行される。
(S20)インデックス分析部122は、ループを1つ選択する。
(S21)インデックス分析部122は、ステップS20で選択したループがインデックス分析を行えるものか判断する。インデックス分析を行えるループは、ループ変数およびパラメータの変動範囲を示すn次元空間上の領域が凸多面体になるものである。ループ変数の初期値と終了値が外側ループのループ変数とパラメータと定数の線形式で表現され、ループ変数の増加幅が定数であり、インデックスがループ変数とパラメータと定数の線形式で表現されるループは、インデックス分析を行える。インデックス分析を行える場合はステップS22に処理が進み、それ以外の場合はステップS25に処理が進む。
(S22)インデックス分析部122は、ソースコードの記述に基づいて、インデックスエラーが発生することを示す条件式を生成する。条件式には、図4に示したようなループ変数条件とエラー条件とが含まれる。エラー条件は、インデックスの値が配列定義時に宣言された定義域を超えることを示す。ループ変数条件およびエラー条件は、ループ変数およびパラメータを用いた線形不等式として表現され得る。
(S23)インデックス分析部122は、数式処理によってステップS22で生成した条件式からループ変数を除去し、条件式が成立するときのパラメータの値の範囲を示す判定式を生成する。ただし、前述のように、パラメータの値にかかわらず条件式が常に成立する場合は、条件式にパラメータが含まれないこともある。数式処理としては、フーリエ・モツキンの消去法などの射影のアルゴリズムを使用する。
(S24)インデックス分析部122は、ステップS23で生成した判定式が、パラメータの値にかかわらず条件式が常に成立することを示しているか判断する。判定式が常に成立する場合、判定式の中にパラメータが現れないこともある。条件を満たす場合はステップS26に処理が進み、それ以外の場合はステップS25に処理が進む。
(S25)インデックス分析部122は、ステップS20で未選択のループが残っているか判断する。未選択のループがある場合はステップS20に処理が進み、全てのループを選択した場合はインデックス分析の処理を終了する。
(S26)インデックス分析部122は、判定式が常に成立することは、ループ内の配列参照が必ずメモリアクセス違反になることを示すため、ループに静的なインデックスエラーが存在すると判断する。そして、ステップS25に処理が進む。
図11は、並列化分析の手順例を示すフローチャートである。
このフローチャートが示す処理は、上記のステップS4において実行される。
(S40)並列化分析部123は、並列化指示文が付加されたループを1つ選択する。
(S41)並列化分析部123は、ステップS40で選択したループが並列化分析を行えるものか判断する。並列化分析を行えるループは、インデックス分析と同様、ループ変数およびパラメータの変動範囲を示すn次元空間上の領域が凸多面体になるものである。ループ変数の初期値と終了値が外側ループのループ変数とパラメータと定数の線形式で表現され、ループ変数の増加幅が定数であり、インデックスがループ変数とパラメータと定数の線形式で表現されるループは、並列化分析を行える。並列化分析を行える場合はステップS42に処理が進み、それ以外の場合はステップS45に処理が進む。
(S42)並列化分析部123は、ソースコードの記述に基づいて、並列化エラーが発生することを示す条件式を生成する。条件式には、図6に示したようなループ変数条件とエラー条件とが含まれる。エラー条件は、並列化するj0番目の処理とj1番目の処理とにおいて、同じインデックスの値を用いて同じ配列が参照されることを示す。ただし、j0番目の処理における配列参照とj1番目の処理における配列参照の少なくとも一方は、データ要素の更新を含む。ループ変数条件およびエラー条件は、ループ変数およびパラメータを用いた線形不等式(線形等式である場合を含む)として表現され得る。
(S43)並列化分析部123は、数式処理によってステップS42で生成した条件式からループ変数を除去し、条件式が成立するときのパラメータの値の範囲を示す判定式を生成する。ただし、前述のように、パラメータの値にかかわらず条件式が常に成立する場合は、条件式にパラメータが含まれないこともある。数式処理としては、フーリエ・モツキンの消去法などの射影のアルゴリズムを使用する。
(S44)並列化分析部123は、ステップS43で生成した判定式が、パラメータの値にかかわらず条件式が常に成立することを示しているか判断する。判定式が常に成立する場合、判定式の中にパラメータが現れないこともある。条件を満たす場合はステップS46に処理が進み、それ以外の場合はステップS45に処理が進む。
(S45)並列化分析部123は、ステップS40で未選択のループが残っているか判断する。未選択のループがある場合はステップS40に処理が進み、全てのループを選択した場合は並列化分析の処理を終了する。
(S46)並列化分析部123は、判定式が常に成立することは、ループ内の配列参照が必ず並列化不可であることを示すため、ループへの並列化指示文の付加が不適切でありループに静的な並列化エラーが存在すると判断する。そして、ステップS45に処理が進む。
第2の実施の形態の情報処理装置100によれば、ループ変数の変動範囲を示す1または2以上の線形式と、配列のインデックスの値が定義域を超えることを示す線形式とを含む条件式が生成される。この条件式から射影によってループ変数が消去され、パラメータの値の範囲を示す判定式が生成される。この判定式に基づいて、ループを実行してよいかループ直前に検査される。よって、ループ内で検査する場合と比べて検査コードの実行回数を減らすことができ、検査のオーバヘッドを小さくしてプログラムの実行効率を向上させることができる。また、複数のループ変数が使用される多重ループなど、ループ定義が複雑であるループについても、パラメータの判定式を生成できる。
また、情報処理装置100によれば、ループ変数の変動範囲を示す1または2以上の線形式と、並列化される処理が同じデータ要素を使用することを示す線形式とを含む条件式が生成される。この条件式から射影によってループ変数が消去され、パラメータの値の範囲を示す判定式が生成される。この判定式に基づいて、ループを並列実行してよいかループ直前に検査される。よって、複数のループ変数が使用される多重ループなど、ループ定義が複雑であるループについても、パラメータの判定式を生成できる。
なお、前述のように、第1の実施の形態の情報処理は、情報処理装置10にプログラムを実行させることで実現することができる。また、第2の実施の形態の情報処理は、情報処理装置100にプログラムを実行させることで実現することができる。
プログラムは、コンピュータ読み取り可能な記録媒体(例えば、記録媒体23)に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FDおよびHDDが含まれる。光ディスクには、CD、CD−R(Recordable)/RW(Rewritable)、DVDおよびDVD−R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からHDDなどの他の記録媒体(例えば、HDD104)にプログラムを複製して(インストールして)実行してもよい。
10 情報処理装置
11 記憶部
12 演算部
13 ソースコード
14 オブジェクトコード
14a 検査コード
15 条件式
16 判定情報

Claims (8)

  1. インデックスによって参照される配列とループ変数と前記ループ変数以外のパラメータとを用いて記述されたループ処理を含むソースコードを記憶する記憶部と、
    前記ループ変数および前記パラメータを用いて前記配列のインデックスが所定の条件を満たすことを示す条件式を生成し、数式処理によって前記条件式から前記ループ変数を消去することで前記パラメータについての判定情報を生成し、前記判定情報に応じて前記ソースコードに対応するオブジェクトコードを生成する演算部、
    を有する情報処理装置。
  2. 前記判定情報は、前記条件式が成立するときの前記パラメータの値の範囲を示し、
    前記演算部は、実行時の前記パラメータの値が前記範囲に属するか検査する検査コードを、前記オブジェクトコードにおける前記ループ処理の前に挿入する、
    請求項1記載の情報処理装置。
  3. 前記演算部は、前記ループ処理に対して前記判定情報に加えて他の条件式に対応する他の判定情報を生成した場合、前記判定情報が示す判定式と前記他の判定情報が示す判定式とを合成し、合成した判定式に基づいて前記検査コードを生成する、
    請求項2記載の情報処理装置。
  4. 前記判定情報が、前記パラメータの値にかかわらず前記条件式が成立することまたは成立しないことを示している場合、前記演算部は警告情報を生成する、
    請求項1乃至3の何れか一項に記載の情報処理装置。
  5. 前記条件式には、前記ループ変数の値の制限を示す複数の第1の線形式と前記配列のインデックスが前記所定の条件を満たすことを示す第2の線形式とが含まれる、
    請求項1乃至4の何れか一項に記載の情報処理装置。
  6. 前記所定の条件には、前記インデックスの値が定義域に収まっているか否かおよび前記配列の参照を並列化可能か否かの少なくとも一方についての条件が含まれる、
    請求項1乃至5の何れか一項に記載の情報処理装置。
  7. コンピュータが実行するコンパイル方法において、
    前記コンピュータが、
    インデックスによって参照される配列とループ変数と前記ループ変数以外のパラメータとを用いて記述されたループ処理を含むソースコードを取得し、
    前記ループ変数および前記パラメータを用いて、前記配列のインデックスが所定の条件を満たすことを示す条件式を生成し、
    数式処理によって前記条件式から前記ループ変数を消去することで、前記パラメータについての判定情報を生成し、
    前記判定情報に応じて前記ソースコードに対応するオブジェクトコードを生成する、
    コンパイル方法。
  8. コンピュータが実行するコンパイラプログラムにおいて、
    前記コンピュータに、
    インデックスによって参照される配列とループ変数と前記ループ変数以外のパラメータとを用いて記述されたループ処理を含むソースコードを取得させ、
    前記ループ変数および前記パラメータを用いて、前記配列のインデックスが所定の条件を満たすことを示す条件式を生成させ、
    数式処理によって前記条件式から前記ループ変数を消去することで、前記パラメータについての判定情報を生成させ、
    前記判定情報に応じて前記ソースコードに対応するオブジェクトコードを生成させる、
    コンパイラプログラム。
JP2013231957A 2013-11-08 2013-11-08 情報処理装置、コンパイル方法およびコンパイラプログラム Active JP6164054B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013231957A JP6164054B2 (ja) 2013-11-08 2013-11-08 情報処理装置、コンパイル方法およびコンパイラプログラム
US14/522,815 US9430203B2 (en) 2013-11-08 2014-10-24 Information processing apparatus and compilation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013231957A JP6164054B2 (ja) 2013-11-08 2013-11-08 情報処理装置、コンパイル方法およびコンパイラプログラム

Publications (2)

Publication Number Publication Date
JP2015094960A JP2015094960A (ja) 2015-05-18
JP6164054B2 true JP6164054B2 (ja) 2017-07-19

Family

ID=53044978

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013231957A Active JP6164054B2 (ja) 2013-11-08 2013-11-08 情報処理装置、コンパイル方法およびコンパイラプログラム

Country Status (2)

Country Link
US (1) US9430203B2 (ja)
JP (1) JP6164054B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6689659B2 (ja) 2016-04-19 2020-04-28 クラリオン株式会社 位置推定装置、及び、推定方法
WO2018236384A1 (en) * 2017-06-22 2018-12-27 Archeo Futurus, Inc. COMPILATION AND OPTIMIZATION OF A COMPUTER CODE BY MINIMIZING A NUMBER OF STATES IN A FINAL MACHINE CORRESPONDING TO THE COMPUTER CODE
US9996328B1 (en) 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
US10481881B2 (en) 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
JP2022140995A (ja) * 2021-03-15 2022-09-29 富士通株式会社 情報処理装置、コンパイルプログラムおよびコンパイル方法
US11656854B2 (en) * 2021-08-30 2023-05-23 Huawei Technologies Co., Ltd. Methods and devices for computing a memory size for software optimization
JP2023045347A (ja) * 2021-09-22 2023-04-03 富士通株式会社 プログラムおよび情報処理方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2655614B2 (ja) * 1988-11-30 1997-09-24 日本電気株式会社 添字の不正使用検査方式
US5293631A (en) 1991-08-06 1994-03-08 Hewlett-Packard Company Analysis and optimization of array variables in compiler for instruction level parallel processor
US5742814A (en) * 1995-11-01 1998-04-21 Imec Vzw Background memory allocation for multi-dimensional signal processing
JP3539613B2 (ja) * 1997-12-03 2004-07-07 株式会社日立製作所 ループ飛び出し文を含むループに対する配列サマリ解析方法
US7260817B2 (en) * 1999-07-09 2007-08-21 International Business Machines Corporation Method using array range check information for generating versioning code before a loop for execution
JP3280332B2 (ja) 1998-07-10 2002-05-13 インターナショナル・ビジネス・マシーンズ・コーポレーション ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
US8060870B2 (en) * 2007-09-26 2011-11-15 International Business Machines Corporation System and method for advanced polyhedral loop transformations of source code in a compiler
US8484613B2 (en) * 2010-01-28 2013-07-09 Synopsys, Inc. Optimizing bounds checking using computer algebra

Also Published As

Publication number Publication date
JP2015094960A (ja) 2015-05-18
US9430203B2 (en) 2016-08-30
US20150135171A1 (en) 2015-05-14

Similar Documents

Publication Publication Date Title
JP6164054B2 (ja) 情報処理装置、コンパイル方法およびコンパイラプログラム
US9201632B2 (en) Systems and methods for incremental software development
US9208057B2 (en) Efficient model checking technique for finding software defects
Verdoolaege et al. Equivalence checking of static affine programs using widening to handle recurrences
US7882498B2 (en) Method, system, and program of a compiler to parallelize source code
US8453134B2 (en) Improving data locality and parallelism by code replication
US9235433B2 (en) Speculative object representation
US9195444B2 (en) Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction
CN102707982A (zh) 托管汇编件的增量式生成
JP6432450B2 (ja) 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム
JP2016224812A (ja) 並列計算装置、並列処理方法、並列処理プログラムおよびコンパイルプログラム
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
Tan et al. What every scientific programmer should know about compiler optimizations?
Mosaner et al. Using machine learning to predict the code size impact of duplication heuristics in a dynamic compiler
Jeong et al. Speculative symbolic graph execution of imperative deep learning programs
US20170329584A1 (en) Information processing device and compilation method
US9367291B2 (en) Apparatus and method for generating vector code
JP2017033342A (ja) コンパイル装置、コンパイル方法およびコンパイルプログラム
US20150082443A1 (en) System to automate compliance with licenses of software third-party content
Cheung et al. Bridging the gap between general-purpose and domain-specific compilers with synthesis
JP2014099108A (ja) 実行時間算出装置、実行時間算出方法、およびプログラム
US11615014B2 (en) Using relocatable debugging information entries to save compile time
Haine et al. Exploring and evaluating array layout restructuring for SIMDization
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
JP6926921B2 (ja) コンパイルプログラム、コンパイル方法及び並列処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160705

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170427

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170605

R150 Certificate of patent or registration of utility model

Ref document number: 6164054

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150