JP2009175797A - コンパイル方法及びコンパイラプログラム - Google Patents

コンパイル方法及びコンパイラプログラム Download PDF

Info

Publication number
JP2009175797A
JP2009175797A JP2008010756A JP2008010756A JP2009175797A JP 2009175797 A JP2009175797 A JP 2009175797A JP 2008010756 A JP2008010756 A JP 2008010756A JP 2008010756 A JP2008010756 A JP 2008010756A JP 2009175797 A JP2009175797 A JP 2009175797A
Authority
JP
Japan
Prior art keywords
data
written
code
intermediate code
array
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008010756A
Other languages
English (en)
Inventor
Yukiyasu Takahata
志泰 高畠
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008010756A priority Critical patent/JP2009175797A/ja
Publication of JP2009175797A publication Critical patent/JP2009175797A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】プロセッサからメモリへのデータの書き込みを高速化する。
【解決手段】プロセッサからバッファを介してメモリの連続するアドレスにデータを書き込む際、バッファに蓄積されたデータを一括してメモリに書き込む機能(「Write-Combining」)を記述可能なオブジェクトコードの生成元となるソースコードに記述されているループ処理において定義されている配列が、当該ループ処理で使用されず(S312:NO)、定義に応じてメモリに書き込まれるデータの書き込み先のアドレスが規則的に空いており(S313:NO)、当該ループ処理に後続する処理において、上記規則的に空いているアドレスに対し、読み出しがされる前にデータが書き込まれる場合(S315:YES)、上記ソースコードを、規則的に空いているアドレスに対してデータを書き込む処理を付加した内容に変換する(S316)。
【選択図】図3

Description

本発明は、プログラム及び情報処理装置に関し、とくにプロセッサからメモリへのデータの書き込みを高速化する技術に関する。
非特許文献1には、プロセッサ(CPU)からメモリ(主記憶装置)へのデータの書き込みを高速化する技術として、プロセッサで処理した大量のデータをメモリへ書き込む際、書き込むデータをバッファに蓄積しておき、蓄積しておいたデータを一括してバッファからメモリに書き込む機能である「Write-Combining」について記載されている。
"Software Optimization Guide for AMD64 Processors", Advanced Micro Devices, Inc. p112-113
上記「Write-Combining」は、データがメモリの連続するアドレスに対して書き込まれる場合に利用される機能であるため、例えばメモリに書き込まれるデータの書き込み先のアドレスが規則的に空いてしまうストライドアクセスが行われる場合のようにデータがメモリの連続するアドレスに対して書き込まれない場合には、「Write-Combining」を使用することができない。このため「Write-Combining」が必ずしも有効に利用されない場合があった。
本発明は、プロセッサからメモリへのデータの書き込みを高速化することが可能なプログラム及び情報処理装置を提供することを目的とする。
上記目的を達成するために、本発明では、CPU上で稼動するコンパイラプログラムがソースコードをオブジェクトコードに変換するコンパイル方法において、コンパイラプログラムの中間コード生成部が、ソースファイルに記述されているソースコードから中間コードを生成するステップを行い、コンパイラプログラムの制御フロー解析部が、前記中間コードに基づいて制御フロー情報を生成するステップを行い、コンパイラプログラムのデータフロー解析部が、前記中間コード及び前記制御フロー情報に基づいてデータフロー情報を生成するステップを行い、コンパイラプログラムの最適化部が、前記データフロー情報に含まれる配列情報を取得するステップと、前記配列情報に基づいて、前記中間コードが、ソースコードに記述されているあるループ処理において定義されている配列が当該ループ処理で使用されず、前記定義に応じて前記メモリに書き込まれるデータの書き込み先のアドレスが規則的に空いており、前記ループ処理に後続する処理において、前記規則的に空いているアドレスに対し、データの読み出しがされる前にデータが書き込まれるものであると判断した場合に、前記中間コードの規則的に空いているアドレスにデータを書き込むステップとを行い、コンパイラプログラムのオブジェクト生成部が、前記データを書き込んだ中間コードに基づいてオブジェクトコードが記述されたオブジェクトファイルを生成するステップとを行う。
本発明によれば、プロセッサからメモリへのデータの書き込みを高速化することができる。
以下、本発明の実施形態につき添付図面を参照しつつ説明する。
[実施例1]
図1は、以下の実施形態で説明するソースコードをオブジェクトコードに変換するプログラム(以下、コンパイラプログラムと称する。)が実行される情報処理装置1のハードウエア構成である。同図に示すように、情報処理装置1は、CPU11、RAM/ROM等のメモリからなる主記憶装置12、キーボードやマウス等の入力装置13、液晶ディスプレイやブラウン管ディスプレイ等の表示装置14、ハードディスク等の外部記憶装置15を備えている。また各装置11〜15は、バス16を介して互いに通信可能に接続されている。
主記憶装置12には、実行途中のプログラムやデータが記憶される。情報処理装置1のユーザは、入力装置13を操作してコンパイラプログラムの起動やコンパイルオプションの入力等を行う。表示装置14には、コンパイラプログラムの実行状況等の各種情報が表示される。外部記憶装置15には、コンパイラプログラムやコンパイルの対象となるソースコードが記述されたファイルであるソースファイル、コンパイラプログラムが出力するオブジェクトコードが記述されたファイルであるオブジェクトファイル等が記憶される。
図2にコンパイラプログラムの機能(コンパイラプログラムによって行われる処理)を示す。同図において、中間コード生成部21は、ソースファイル211に記述されているソースコードに基づき中間コード212を生成する。制御フロー解析部22は、中間コード212から条件分岐などの制御の流れを解析し、制御の流れに関する情報である制御フロー情報213を出力する。データフロー解析部23は、中間コード212、及び制御フロー情報213から変数の参照情報などのデータの流れを解析し、データの流れに関する情報であるデータフロー情報214を出力する。最適化部24は、中間コード212、制御フロー情報213、及びデータフロー情報214に基づきコードの並び替え等の最適化を実施して中間コード212を変換する。なお、最適化部24によって行われる処理の詳細については後述する。オブジェクト生成部25は、中間コード212に基づきオブジェクトコードを生成し、オブジェクトコードが記述されたファイルであるオブジェクトファイル215を出力する。
なお、中間コード生成部21、制御フロー解析部22、データフロー解析部23、最適化部24、及びオブジェクト生成部25の各機能は、CPU11が、外部記憶装置15に記憶されているコンパイラプログラム20を主記憶装置12に読み出して実行することにより実現される。
次に、最適化部24によって行われる処理について説明する。図3は最適化部24によって行われる、中間コード212の変換に関する処理を説明するフローチャートである。同図に示す処理は、変換対象となる中間コード212に含まれている各ループ処理で定義されている配列毎に実行される。なお、以下の説明では、最適化部24が中間コード212を変換する場合について説明するが、同等の処理をコンパイラプログラム20がソースコードを変換することにより実現してもよい。
同図に示すように、まず最適化部24は、データフロー情報に含まれている、処理対象になっているループ処理における配列の定義、又は配列の使用に関する配列情報を取得し(S311)、当該ループ処理中で定義されている配列(値が設定されている配列)が、当該ループ処理中で使用されている(定義のみでない)か否かを判断する(S312)。Write-Combiningによる高速化は、配列へのアクセスが定義だけの場合には有効であるが、配列の使用がある場合には高速化されないからである。使用されている場合には(S312:YES)、処理を終了し、使用されていない場合(定義のみの場合)には(S312:NO)、S313に進む。
続くS313において、最適化部24は、当該ループ処理中に定義されている配列が、主記憶装置12の連続するアドレスに対して書き込まれるように定義されているか否かを判断する。連続するアドレスに対して書き込まれるように定義されている場合には(S313:YES)、Write-Combiningによる高速化がすでに有効な状態になっているので処理を終了し、連続するアドレスに書き込まれるように定義されていない場合には(S313:NO)、S314に進む。
S314において、最適化部24は、当該ループ処理中において、主記憶装置12へのアクセスがストライドアクセスとなるように配列が定義されているか否かを判断する。スライドアクセスストライドアクセスとなるように定義されている場合には、アクセスされない部分に対してダミー値を定義するように変換して連続するアクセスにし、Write-Combiningを有効にすることができるからである。ストライドアクセスとなるように定義されている場合には(S314:YES)、S315に進み、ストライドアクセスとなるように定義されていない場合には(S314:NO)、処理を終了する。
S315において、最適化部24は、当該ループ処理に後続する処理を解析し、当該ループ処理に後続する処理において、ストライドアクセスとなる配列の非定義部分に対して、主記憶装置12からのデータの読み出し(使用)が行われる前に書き込み(定義)が行われるか否かを判断する。配列の書き込み(定義)が先にある場合には、書き込みで配列の値が書き換えられるので、書き込み前にある対象ループで配列にダミーの値を書き込んでも問題ないが、配列の読み出し(使用)が先にある場合には、ダミーの値を読み出されると、プログラムが正しくなくなるからである。データの読み出しがされる前に書き込みが行われる場合には(S315:YES)、S316に進み、データの読み出しがされる前に書き込みが行われない場合には(S315:NO)、処理を終了する。
なお、主記憶装置12からのデータの読み出しがされる前に書き込みが行われない場合には(S315:NO)、後述するS316におけるダミーの定義が挿入されることによって後続の処理に影響を与える場合がある。
S316において、最適化部24は、中間コード212を「ストライドアクセスにおける配列の非定義部分にダミーの定義を挿入する処理」を含んだ内容に変換する。
次に、以上に説明した処理について、最適化部24が、図4Aに示したソースコード411に対応する内容の中間コード212を、図4Bに示すソースコード412に対応する中間コード212に変換する場合を例として具体的に説明する。なお、以下の説明において、ソースコード411又はソースコード412という場合には、これらに対応する中間コードをいうものとする。
図3のS311において、最適化部24は、ソースコード411のループS1における配列a(i)に関する情報を取得する。なお、図4Aに示すソースコード411には2つの配列a(i)、b(i)が定義されているが、以下では配列a(i)についてのみ説明する。
S312において、最適化部24は、ループS1において配列a(i)が使用されているか否かを判断する。ここでループS1では配列a(i)は定義のみされているので、最適化部24は、ループS1において配列a(i)は使用はされていないと判断し(S312:NO)、S313に進む。
S313において、最適化部24は、ループS1中で配列a(i)の内容が主記憶装置12の連続するアドレスに対して書き込まれるように定義されているか否かを判断する。ここでソースコード411の2行目の記述「L1: do i=1, n-1, 2」は、添字iを「2」ずつ増加させる内容になっており、配列a(i)の内容は主記憶装置12の連続するアドレスに対して書き込まれるわけではないので(S313:NO)、S314に進む。
S314において、最適化部24は、ループS1中における配列a(i)の定義がストライドアクセスであるか否かを判断する。ソースコード411の2行目の記述「L1: do i=1, n-1, 2」は、添字iの増分が「2」になっており、配列a(i)は規則的なアドレス間隔をおいて主記憶装置12に書き込まれるのでストライドアクセスとなり(S314:YES)、S315に進む。
S315において、最適化部24は、ループS1の処理に後続する処理を解析し、後続する処理がストライドアクセスにおける配列の非定義部分に対して読み出される前に書き込みが行われるか否かを判断する。
ここでソースコード411では、ループL1の処理に後続するループL2の処理において配列a(i)の定義のみがされており、配列a(i)は読み出される前に定義がされている。また5行目の記述「L2: do i=1,n」から、添字の増分は「1」であるため、ループL2の処理において配列a(i)の非定義部分(a(2)、a(4)、a(6)・・・)について書き込みがされている。すなわち、非定義部分に対する読み出しがされる前に書き込みが行われるので(S315:YES)、S316に進む。
S316において、最適化部24は、ソースコード411(中間コード212)を、「ストライドアクセスにおける配列の非定義部分にダミーの定義を挿入する処理」である、配列a(i)の非定義部分(a(2)、a(4)、a(6)・・・)に値「0」を設定する処理を含んだ内容に変換する。すなわち、最適化部24は、図4Aに示すソースコード411を、ダミーの定義文「S3: a(i+1) = 0」を含んだ図4Bに示すソースコード412に変換する。
以上によれば、ソースコード411は、規則的に空いているアドレスに対してデータが書き込まれる内容に変換される。このため、オブジェクトコードの生成に際して「Write-Combining」の使用頻度が増え、プロセッサからメモリへのデータの書き込みを高速化することができる。なお、上記処理の付加は、オブジェクトコードの生成以前において静的に行われるので、実行時のオーバーヘッドに影響を与えることもない。
[実施例2]
ところで、実際には後続する処理が複雑である場合や、関数や手続き呼び出しにより配列の定義状況や使用状況が不明な場合があり、実施例1で説明した処理(図3)をそのまま適用することができないことがある。そこで実施例2では、ソースコードに記述されているコンパイラプログラム20への指示文に応じて、最適化部24による中間コード212の変換が行われるようにしている。
図5は最適化部24によって行われる中間コード212の変換に関する処理を説明するフローチャートである。同図に示すS511乃至S514の処理は、図3のS311乃至S314の処理と同様である。またS516乃至S517の処理は、図3のS315乃至S316の処理と同様である。
S514において、当該ループ処理中における配列が、主記憶装置12へのアクセスがストライドアクセスとなるように定義されている場合には(S514:YES)、S515に進む。一方、配列がストライドアクセスとなるように定義されていない場合には(S514:NO)、処理が終了する。
S515では、最適化部24は、中間コード212(ソースコードでもよい)を解析し、中間コード212にコンパイラプログラム20への指示文が含まれているか否かを判断する。指示文が含まれている場合には(S515:YES)、S517に進み、当該ループ処理に後続する処理を解析(S516)することなく、中間コード212を「ストライドアクセスにおける配列の非定義部分にダミーの定義を挿入する処理」を含んだ内容に変換する。指示文が含まれていない場合には(S515:NO)、S516に進む。
例えば図6Aに示すソースコード611の場合には、2行目に「!$ stream_store(a,0)」が記述されている。この指示文は、配列a(i)が主記憶装置12の連続するアドレスに対して書き込まれる内容に中間コード212を変換する旨をコンパイラプログラム20に指示する指示文であり、この記述に応じて、最適化部24は、中間コード212を、配列a(i)の非定義部分に指示文で指定されている値「0」を代入する記述「S2: a(i+1) = 0」を含んだ図6Bに示す内容に変換する。
以上によれば、ソースコードに所定の指示文が記述されている場合には、ソースコードに規則的に空いているアドレスに対してデータを書き込む処理が付加される。このため、ユーザはソースコードに上記指示文を付加することで、後続する処理が複雑である場合や、関数や手続き呼び出しにより配列の定義状況や使用状況が不明な場合でも、上記処理を確実にソースコードに付加することができる。
[実施例3]
実施例1では、非定義部分のデータサイズが大きい場合、非定義部分への書き込みが多くなり、その結果、中間コード212を変換することにより返ってプログラム全体の処理時間が長くなってしまうことがある。そこで実施例3では、非定義部分のデータサイズに応じて中間コード212を変換するようにしている。
図7は、最適化部24によって行われる中間コード212の変換に関する処理を説明するフローチャートである。同図におけるS711乃至S714の処理は、図3のS311乃至S314の処理と同様である。またS716乃至S717の処理は、図3のS315乃至S316の処理と同様である。
S714において、当該ループ処理中における配列の定義が、主記憶装置12へのアクセスがストライドアクセスとなるように定義されている場合には(S714:YES)、S715に進む。ストライドアクセスとなるように定義されていない場合には(S714:NO)、処理が終了する。
S715では、最適化部24は、中間コード212を解析し、ストライドアクセスの非定義部分のデータサイズが「Write-Combining」が利用しているバッファのサイズよりも大きいか否かを判断する。非定義部分のデータサイズの方が大きい場合には(S715:YES)、処理を終了する。非定義部分のデータサイズが「Write-Combining」が利用しているバッファサイズ以下であれば(S715:NO)、S716に進む。
なお、非定義部分のデータサイズが「Write-Combining」機能が利用するバッファサイズよりも大きい場合はバッファの内容が全てダミーデータとなって、ダミーデータのみのための書き込みが発生して無駄な処理が行われてしまうが、上記のように非定義部分のデータサイズが「Write-Combining」が利用しているバッファのサイズよりも大きい場合に非定義部分へのダミーデータの挿入を行わないようにすることで、このような無駄な処理が生じるのを防ぐことができる。
以上によれば、規則的に空いているアドレスで指定される領域のデータサイズが所定のデータサイズ以下である場合にのみ、規則的に空いているアドレスに対してデータを書き込む処理がソースコードに付加される。このため、ソースコードに上記処理を付加することにより返ってオブジェクトコードの実行負荷が増大してしまうのを防ぐことができる。
[実施例4]
実施例1では、中間コード212を「ストライドアクセスにおける配列の非定義部分にダミーの定義を挿入する処理」を含んだ内容に変換している(図3のS316)が、対象になっているループ処理よりも前の処理で当該ループ処理中の配列の内容が定義されている場合には、その内容をダミーデータとして採用することが好ましい。
図8は、最適化部24によって行われる中間コード212の変換に関する処理を説明するフローチャートである。同図におけるS811乃至S814の処理は、図3のS311乃至S314の処理と同様である。
S815において、最適化部24は、対象になっているループ処理よりも前の処理で当該ループ処理中の配列の内容が定義されているか否かを判断する。定義されている場合には(S815:YES)、S816に進む。定義されていない場合には(S815:NO)、処理を終了する。
S816において、最適化部24は、前の処理で配列に定義されている値が定数であるか否かを判断する。定数である場合には(S816:YES)、S817に進む。定数でない場合には(S816:NO)、処理が終了する。
S817では、最適化部24は、中間コード212に、当該ループ処理中の配列に、当該ループ処理よりも前の処理において当該配列に定義されている定数を定義する内容の記述を挿入する。
次に以上に説明した処理について、最適化部24が、図9Aに示したソースコード911に対応する内容の中間コード212を、図9Bに示すソースコード912に対応する中間コード212に変換する場合を例として具体的に説明する。
S815において、最適化部24は、ループL1よりも前の処理を解析し、ループL1よりも前にストライドアクセスにおける配列a(i)の非定義部分に対する定義があるか否か判断する。ソースコード911では、ループL1の前のループL0の処理において、配列a(i)の非定義部分に対して定数が定義(代入)されているので、非定義部分に対する定義があると判断し(S815:YES)、S816に進む。
S816では、最適化部24は、ループL0で配列a(i)の非定義部分に定義されている値が定数であるか否かを判断する。ループL0では配列a(i)の非定義部分に定数「1」が定義されているので(S816:YES)、S817に進む。
S817では、ソースコード911に配列a(i)の非定義部分に定数「1」を定義する内容の記述を挿入する。すなわち、最適化部24は、図9Aに示すソースコード911を、ダミーの定義文「S2: a(i+1) = 1」を含んだ図9Bに示すソースコード912に変換する。
以上によれば、ループ処理よりも前に実行される処理において、配列に対して定数を設定する定義が存在する場合には、ソースコードに規則的に空いているアドレスに対して上記定数が書き込まれる。すなわち、ループ処理の前後において、規則的に空いているアドレスの内容が不一致となるのを防ぐことができる。
なお、以上の実施形態の説明は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明はその趣旨を逸脱することなく、変更、改良され得ると共に本発明にはその等価物が含まれることは勿論である。
コンパイラプログラム20が実行される情報処理装置1のハードウエア構成である。 コンパイラプログラム20の機能(コンパイラプログラム20によって行われる処理)を説明する図である。 実施例1における中間コード212の変換処理を説明するフローチャートである。 最適化部24による変換がされる前の中間コード212に対応するソースコードの一例である。 最適化部24による変換がされた後の中間コード212に対応するソースコードの一例である。 実施例2の変換処理を説明するフローチャートである。 最適化部24による変換がされる前の中間コード212に対応するソースコードの一例である。 最適化部24による変換がされた後の中間コード212に対応するソースコードの一例である。 実施例3の変換処理を説明するフローチャートである。 実施例4の変換処理を説明するフローチャートである。 最適化部24による変換がされる前の中間コード212に対応するソースコードの一例である。 最適化部24による変換がされた後の中間コード212に対応するソースコードの一例である。
符号の説明
20 コンパイラプログラム
21 中間コード生成部
22 制御フロー解析部
23 データフロー解析部
24 最適化部
25 オブジェクト生成部
211 ソースファイル
212 中間コード
213 制御フロー情報
214 データフロー情報
215 オブジェクトファイル
411 ソースコード
412 ソースコード

Claims (8)

  1. CPU上で稼動するコンパイラプログラムがソースコードをオブジェクトコードに変換するコンパイル方法において、
    コンパイラプログラムの中間コード生成部が、ソースファイルに記述されているソースコードから中間コードを生成するステップを行い、
    コンパイラプログラムの制御フロー解析部が、前記中間コードに基づいて制御フロー情報を生成するステップを行い、
    コンパイラプログラムのデータフロー解析部が、前記中間コード及び前記制御フロー情報に基づいてデータフロー情報を生成するステップを行い、
    コンパイラプログラムの最適化部が、
    前記データフロー情報に含まれる配列情報を取得するステップと、
    前記配列情報に基づいて、前記中間コードが、ソースコードに記述されているあるループ処理において定義されている配列が当該ループ処理で使用されず、前記定義に応じて前記メモリに書き込まれるデータの書き込み先のアドレスが規則的に空いており、前記ループ処理に後続する処理において、前記規則的に空いているアドレスに対し、データの読み出しがされる前にデータが書き込まれるものであると判断した場合に、前記中間コードの規則的に空いているアドレスにデータを書き込むステップとを行い、
    コンパイラプログラムのオブジェクト生成部が、前記データを書き込んだ中間コードに基づいてオブジェクトコードが記述されたオブジェクトファイルを生成するステップとを行うコンパイル方法。
  2. 請求項1において、
    前記配列情報に基づいて、前記中間コードが、ソースコードに記述されているあるループ処理において定義されている配列が当該ループ処理で使用されず、前記定義に応じて前記メモリに書き込まれるデータの書き込み先のアドレスが規則的に空いており、前記ソースコードに所定の指示文が記述されていると判断した場合に、前記中間コードの規則的に空いているアドレスにデータを書き込むステップとを行うコンパイル方法。
  3. 請求項1において、
    前記規則的に空いているアドレスのデータサイズが所定のサイズ以下である場合には、前記規則的に空いているアドレスへのデータを書き込みを行わないことを特徴とするコンパイル方法。
  4. 請求項1において、
    コンパイラプログラムの前記最適化部が、
    前記ループ処理よりも前に実行される処理において、配列に対して定数を設定する定義が存在すると判断した場合に、前記ソースコードに、前記規則的に空いているアドレスに前記定数を書き込むことを特徴とするコンパイル方法。
  5. CPU上で稼動するコンパイラプログラムがソースコードをオブジェクトコードに変換する機能を有するコンパイラプログラムにおいて、
    ソースファイルに記述されているソースコードから中間コードを生成する中間コード生成機能と、
    前記中間コードに基づいて制御フロー情報を生成する制御フロー解析機能と、
    前記中間コード及び前記制御フロー情報に基づいてデータフロー情報を生成するデータフロー解析機能と、
    前記データフロー情報に含まれる配列情報を取得する配列情報取得機能と、
    前記配列情報に基づいて、前記中間コードが、ソースコードに記述されているあるループ処理において定義されている配列が当該ループ処理で使用されず、前記定義に応じて前記メモリに書き込まれるデータの書き込み先のアドレスが規則的に空いており、前記ループ処理に後続する処理において、前記規則的に空いているアドレスに対し、データの読み出しがされる前にデータが書き込まれるものであると判断した場合に、前記中間コードの規則的に空いているアドレスにデータを書き込む最適化機能と、
    前記データを書き込んだ中間コードに基づいてオブジェクトコードが記述されたオブジェクトファイルを生成するオブジェクト生成機能と
    を有するコンパイラプログラム。
  6. 請求項5において、
    前記最適化機能は、前記配列情報に基づいて、前記中間コードが、ソースコードに記述されているあるループ処理において定義されている配列が当該ループ処理で使用されず、前記定義に応じて前記メモリに書き込まれるデータの書き込み先のアドレスが規則的に空いており、前記ソースコードに所定の指示文が記述されていると判断した場合に、前記中間コードの規則的に空いているアドレスにデータを書き込むことを行うコンパイラプログラム。
  7. 請求項5において、
    前記規則的に空いているアドレスのデータサイズが所定のサイズ以下である場合には、前記規則的に空いているアドレスへのデータを書き込みを行わないことを特徴とするコンパイラプログラム。
  8. 請求項5において、
    前記最適化機能が、
    前記ループ処理よりも前に実行される処理において、配列に対して定数を設定する定義が存在すると判断した場合に、前記ソースコードに、前記規則的に空いているアドレスに前記定数を書き込むことを特徴とするコンパイラプログラム。
JP2008010756A 2008-01-21 2008-01-21 コンパイル方法及びコンパイラプログラム Pending JP2009175797A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008010756A JP2009175797A (ja) 2008-01-21 2008-01-21 コンパイル方法及びコンパイラプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008010756A JP2009175797A (ja) 2008-01-21 2008-01-21 コンパイル方法及びコンパイラプログラム

Publications (1)

Publication Number Publication Date
JP2009175797A true JP2009175797A (ja) 2009-08-06

Family

ID=41030857

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008010756A Pending JP2009175797A (ja) 2008-01-21 2008-01-21 コンパイル方法及びコンパイラプログラム

Country Status (1)

Country Link
JP (1) JP2009175797A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016081135A (ja) * 2014-10-10 2016-05-16 富士通株式会社 情報処理プログラム、情報処理装置、情報処理方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016081135A (ja) * 2014-10-10 2016-05-16 富士通株式会社 情報処理プログラム、情報処理装置、情報処理方法

Similar Documents

Publication Publication Date Title
US20130139137A1 (en) Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies
US20110072420A1 (en) Apparatus and method for controlling parallel programming
EP2924559A2 (en) Program, compiler method, and compiler apparatus
US20160117154A1 (en) Automated software include graph and build environment analysis and optimization in compiled language
US9921966B2 (en) Employing prefetch to reduce write overhead
US10089088B2 (en) Computer that performs compiling, compiler program, and link program
US9158545B2 (en) Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler
JP2009175797A (ja) コンパイル方法及びコンパイラプログラム
US20120089970A1 (en) Apparatus and method for controlling loop schedule of a parallel program
CN113791770B (zh) 代码编译器、代码编译方法、代码编译系统和计算机介质
US20120089823A1 (en) Processing apparatus, compiling apparatus, and dynamic conditional branch processing method
Dooley et al. Detecting and using critical paths at runtime in message driven parallel programs
Baloukas et al. Mapping embedded applications on MPSoCs: the MNEMEE approach
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
US10949209B2 (en) Techniques for scheduling instructions in compiling source code
US9606779B2 (en) Data processing system and data simulation method in the system
KR20150051083A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR20100099569A (ko) 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치
US11327760B2 (en) Method and apparatus for balancing binary instruction burstization and chaining
CN104866294A (zh) 一种扩展Android软件功能的方法及装置
JP2009181558A (ja) プログラム変換装置
US8490063B2 (en) Debugging extensible markup language
CN111026442B (zh) 一种cpu中用于消除程序无条件跳转开销的方法及装置
US9928045B2 (en) Information processing apparatus, compile method and non-transitory recording medium storing compile program
JP2010146181A (ja) 実行ファイル作成装置