JP2007323358A - コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 - Google Patents
コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 Download PDFInfo
- Publication number
- JP2007323358A JP2007323358A JP2006152717A JP2006152717A JP2007323358A JP 2007323358 A JP2007323358 A JP 2007323358A JP 2006152717 A JP2006152717 A JP 2006152717A JP 2006152717 A JP2006152717 A JP 2006152717A JP 2007323358 A JP2007323358 A JP 2007323358A
- Authority
- JP
- Japan
- Prior art keywords
- program
- executed
- divided
- code
- compiler
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
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)
Abstract
【課題】 プログラムを分岐なしに処理できるプログラムの断片としてコンパイルし、これらをキャッシュにロードして処理することで処理速度を向上させることができるコンパイル方法及び情報処理装置を提供する。
【解決手段】 コンピュータのメモリにロードされて実行することで以下のような機能を有するコンパイラプログラムであって、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、ソースプログラムを分岐を含まずに実行されるプログラムの断片である分割プログラムP1〜P5と、分岐して実行される部分C1〜C5とに各々分割することを特徴とするコンパイラプログラムを記録する記録媒体。
【選択図】図1
【解決手段】 コンピュータのメモリにロードされて実行することで以下のような機能を有するコンパイラプログラムであって、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、ソースプログラムを分岐を含まずに実行されるプログラムの断片である分割プログラムP1〜P5と、分岐して実行される部分C1〜C5とに各々分割することを特徴とするコンパイラプログラムを記録する記録媒体。
【選択図】図1
Description
この発明は、コンピュータプログラムのコンパイル方法に関し、特に、プログラムを分岐なしに処理できる断片に分割して処理するコンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置に関する。
コンピュータプログラムを実行する際にコンパイル処理が行われるが、これに関連して、制御フロー解析等が知られている。
特許文献1には、プログラムを手続き毎に分割して、使用頻度の低いモジュールをアンロードすることで使用効率を向上させる技術が開示されている。
特開2003−330741公報。
上記した特許文献1の従来技術においては、プログラム中の使用頻度の低い手続きのモジュールをアンロードするものであり、一つの手続き中のあまり使用しないエラー処理等のみを排除することができないという問題がある。
本発明は、プログラムを分岐なしに処理できるプログラムの断片としてコンパイルし、これらをキャッシュにロードして処理することでプログラムの実行効率を向上させることができるコンパイル方法及び情報処理装置を提供することを目的とする。
コンピュータのメモリにロードされて実行することで以下のような機能を有するコンパイラプログラムであって、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムP1〜P5と、分岐して実行される部分C1〜C5とに各々分割することを特徴とするコンパイラプログラムを記録する記録媒体。
または、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラム(P1〜P5)と、分岐して実行される部分(C1〜C5)とに各々分割することにより、ソースプログラムをコンパイルするコンパイル方法である。
実行頻度の低いエラー処理等のプログラムの命令コード等をキャッシュメモリ等にロードすることが少なくなるため、プログラムの実行効率を向上させることができる。
以下、この発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の一実施形態に係るコンパイラ機能の一例を説明する説明図。図2は、同じくコンパイラ機能を備えた情報処理システムの機能の一例を説明する説明図。図3は、同じくコンパイラ機能の一例を説明するフローチャート。図4は、同じく分割プログラムの処理の一例を示すフローチャート。図5は、同じく分割プログラム処理のサブルーティンの一例を示すフローチャート。図6は、同じくVMコードの実行処理の一例を示すフローチャート。図7は、同じくコンパイラ機能によるプログラム分割処理の概要の一例を示す説明図。図8は、同じくコンパイラ機能によるプログラムの分割処理の具体的な一例を示す説明図である。
図1は、本発明の一実施形態に係るコンパイラ機能の一例を説明する説明図。図2は、同じくコンパイラ機能を備えた情報処理システムの機能の一例を説明する説明図。図3は、同じくコンパイラ機能の一例を説明するフローチャート。図4は、同じく分割プログラムの処理の一例を示すフローチャート。図5は、同じく分割プログラム処理のサブルーティンの一例を示すフローチャート。図6は、同じくVMコードの実行処理の一例を示すフローチャート。図7は、同じくコンパイラ機能によるプログラム分割処理の概要の一例を示す説明図。図8は、同じくコンパイラ機能によるプログラムの分割処理の具体的な一例を示す説明図である。
<本発明の一実施形態に係るコンパイル方法>
(該コンパイル方法の趣旨)
通常、プログラムの実行時間の大部分は、プログラムのごく一部のみが占めており、この部分を高速に実行できればよい。この特性を利用して、実行頻度が高い命令コードを高速なキャッシュメモリに配置して実行することが一般的に行われている。しかし、プログラムのコードサイズが大きくなるとともに、命令キャッシュは不足し、キャッシュミスを頻発するようになり、実行効率の低下の原因となる。特に、組み込み機器では、LSIの面積を大きく占めるキャッシュメモリを大きくすることは難しいため、より効率的なキャッシュメモリの利用が必要になる。
(該コンパイル方法の趣旨)
通常、プログラムの実行時間の大部分は、プログラムのごく一部のみが占めており、この部分を高速に実行できればよい。この特性を利用して、実行頻度が高い命令コードを高速なキャッシュメモリに配置して実行することが一般的に行われている。しかし、プログラムのコードサイズが大きくなるとともに、命令キャッシュは不足し、キャッシュミスを頻発するようになり、実行効率の低下の原因となる。特に、組み込み機器では、LSIの面積を大きく占めるキャッシュメモリを大きくすることは難しいため、より効率的なキャッシュメモリの利用が必要になる。
規模の大きなプログラムを詳細に見ると、プログラムコードの大部分は、エラー処理が占めていることが多い。これらの処理は、通常のノーマルパスでは実行されないので、キャッシュメモリのラインサイズが十分小さければ、これらのプログラムコードがキャッシュメモリを占拠することは起きない。しかし、メモリの高速化に伴い、キャッシュのラインサイズが大きくなる傾向にあるため、キャッシュの中にエラー処理の一部がロードされてしまうことが起こりうる。
また、スクラッチパッドや、ローカルストレージのような、局所メモリをプログラマが意識して使うようなケースにおいては、通常、プログラムの部品単位で、コードを主メモリから局所メモリ上にDMA転送してプログラムを実行する。この場合においても、if-then-elseのような構文でエラー処理が書いてあると、ノーマルパスのプログラムと一緒にローカルメモリへプログラムコードが転送されてしまい、ローカルメモリの利用効率が悪化する原因となる。
一般に、プログラムの構成は、図7で後述するように、手続きA,B,…に分類でき、更に、処理A,処理B,…,処理Qのように分類できる。ここで、通常のコンパイル処理であれば、手続きA、手続きBは、コンパイルしたときのメモリ配置のまま、キャッシュ上にロードされるため、エラー処理がノーマルパスの処理と同時にキャッシュにロードされてしまう。
そこで、本発明の一実施形態に係るコンパイル方法では、図1に示すように、ソースプログラム1に対して、コンパイラ・制御フロー解析12を行なうことにより、分岐無しに直列実行できるプログラムの断片13に分割し、同時に制御フローを実現するVMコードと共に、この複数の分割プログラムの状態でプログラムを保持する。そして、実際の動作時に、必要な断片の実行アドレス位置をキャッシュ等に割り当てていくものである。
これにより、通常では実行されないエラー処理がキャッシュにロードされることがなく、ノーマルパスのプログラムを連続領域に配置することが可能なため、プログラムの実行効率向上につながる。また、スクラッチパッドやローカルストレージのように制限されたメモリ空間で、プログラムコードを出し入れしながら実行するような場合においても、プログラムの入れ替え回数を削減することができる。
(該コンパイル方法を実現するための情報処理装置)
次に、本発明の一実施形態に係るコンパイル方法を実現するための情報処理装置20の一例を図2により説明する。該コンパイル方法を実現するための情報処理装置20は、CPU22と、上述したプログラムの断片13と制御フローを実現するVMコード14とを格納する2次記憶(ハードディスク)21とを有しており、機能的な構成として、プログラムローダ26と、仮想マシン又はJITコンパイラ23とを有している。更に、情報処理装置20は、主記憶部25と局所メモリ又はキャッシュ24を有している。このような情報処理装置において、コンパイル処理及びプログラム処理が以下のように行なわれる。
次に、本発明の一実施形態に係るコンパイル方法を実現するための情報処理装置20の一例を図2により説明する。該コンパイル方法を実現するための情報処理装置20は、CPU22と、上述したプログラムの断片13と制御フローを実現するVMコード14とを格納する2次記憶(ハードディスク)21とを有しており、機能的な構成として、プログラムローダ26と、仮想マシン又はJITコンパイラ23とを有している。更に、情報処理装置20は、主記憶部25と局所メモリ又はキャッシュ24を有している。このような情報処理装置において、コンパイル処理及びプログラム処理が以下のように行なわれる。
(動作)
初めに、上述した情報処理装置20において行なわれるコンパイル処理を図3のフローチャート及び図7乃至図8を用いて詳細に説明する。情報処理装置20で実現した例えばJava(登録商標)等の仮想マシン上に機能するJITコンパイラ等により、初めに、ソースプログラムを取得し(ステップS11)、このプログラムの中に分岐が存在するかどうかを判断する(ステップS12)。図7においては、処理C、処理G、処理J、処理N,処理Q等に分岐が含まれることが検出されている。
初めに、上述した情報処理装置20において行なわれるコンパイル処理を図3のフローチャート及び図7乃至図8を用いて詳細に説明する。情報処理装置20で実現した例えばJava(登録商標)等の仮想マシン上に機能するJITコンパイラ等により、初めに、ソースプログラムを取得し(ステップS11)、このプログラムの中に分岐が存在するかどうかを判断する(ステップS12)。図7においては、処理C、処理G、処理J、処理N,処理Q等に分岐が含まれることが検出されている。
これに基づき、プログラムをプログラムの制御が分岐無しで直列実行される部分(基本ブロックという)に分割する(ステップS13)。図7においては、分割プログラムA,B,C,D,E等に分割され、VMコードが併せて生成される。図8においては、分割プログラムP1乃至P5とVMコードC1乃至C5とが生成される。
分割したそれぞれの断片をPICコードとして目的コード化すると同時に、制御フローを仮想マシンの仮想命令列としてコード生成する。このプログラムコードの断片13と、仮想マシンの命令コード14がプログラムの実体であり、通常は、ハードディスクなどの2次記憶装置21に保存しておく。このようなコンパイル処理をブログラムの全てについて行なう(ステップS14)。
次に、プログラム実行時は、図4のフローチャートに示すように、『任意のプログラムの断片を実行する』とする命令Jが実行される(ステップS21)。すなわち、オペランドiをロードすると(ステップS22)、iが示すプログラム断片Xが実行される(ステップS23)。
命令Jによるプログラム断片Xの実行は、具体的には、図5のフローチャートに示すように、はじめに、CPU22の制御下において、ハードディスクの実体を主記憶部25へロードし、制御構造を実行する仮想マシンの実行にしたがって、処理を進める。すなわち、プログラム断片の呼び出しという仮想命令の実行を行うタイミングで、そのプログラム断片を主記憶部25から局所メモリ24へロードする。具体的には、局所メモリ等24にプログラム断片Xがロードされているかどうかを判断する(ステップS24)。そして、ロードされていなければ、プログラム断片Xを局所メモリにロードしていく(ステップS25)。この処理を任意のプログラムの断片に関して行なうものである(ステップS26)。
これらの処理は、例えば、Java(登録商標)等の仮想マシンによる仮想コードの処理により進行する。すなわち、図6のフローチャートに示すように、VMの初期化の後に(ステップS31)、この仮想コードをロードする(ステップS32)。そして、命令を終了しないのであれば(ステップS33)、この仮想コードの命令を実行する(ステップS35)。ステップS33において、命令を終了する場合は、その後、VMの後始末処理を行なう(ステップS34)。
ここで、仮想コードは、仮想機械のインタプリタで実行することも可能であるし、JITコンパイラによってネイティブコードに展開して実行することも可能である。
更に、JITコンパイル時に、プログラム断片の呼び出しフローにしたがって、ローカルメモリへのコード配置を最適化することも可能である。
(具体的なコンパイル処理の一例)
次に、図8を参照して、具体的なプログラムのコンパイル処理の一例を説明する。
次に、図8を参照して、具体的なプログラムのコンパイル処理の一例を説明する。
図8は、MPEG2デコーダのMC(MotionCompensation=動き補償)のプログラムの一部である。ここで、ピクチャストラクチャは、多くの場合、ストリームごとに固定である。デコーダは、規格に準拠したあらゆるストリームをデコードできるようにプログラムを実装する。例えば、フレーム構造の場合は、最初のifの中が実行されるが、フィールド構造の場合は、後半のelseの部分が実行される。
又、モジュール単位で、高速メモリに転送する場合、両方ともメモリにロードされてしまうが、本発明の実施形態においては、どちらかだけが高速メモリにロードされることになる。
このようなプログラムの分割後の例が、図8の右部分に示されている。細かく言えば、if文やfor文も分割対象になるが、制御部分であるため、ここでは、コンパイラの出力としてVM側のコードとして生成している。図8において、プログラムは、第1分割プログラムP1乃至第5分割プログラムP5と、5つのVMコードC1乃至C5に分割されている。
なお、VM側の実行コードについては、例えば、Just-In-Timeコンパイルすることで高速実行できるため、必ずしもVMでなければならないということはない。
又、上述した実施形態では、プログラムの断片への分割はコンパイラで行っているが、プログラムの記述の段階から、制御構造とプログラムのシーケンスを分割して記述することも好適である。更に、この場合に、並列実行できる部分を記述できる言語を使えば、制御フローを実行するVMが、並列実行できる部分を効果的にスレッドに割り当てることが可能である。
以上、説明したように、本発明の一実施形態に係るコンパイル処理及びプログラムの実行処理により、規模の大きなプログラムの命令コードのキャッシュミスを小さくすることが可能となる。また、スクラッチパッドやローカルストレージのような、高速メモリにソフトウェアでプログラムを出し入れして実行するような環境においては、プログラムの出し入れ回数を削減することが可能である。
以上記載した様々な実施形態により、当業者は本発明を実現することができるが、更にこれらの実施形態の様々な変形例を思いつくことが当業者によって容易であり、発明的な能力をもたなくとも様々な実施形態へと適用することが可能である。従って、本発明は、開示された原理と新規な特徴に矛盾しない広範な範囲に及ぶものであり、上述した実施形態に限定されるものではない。
11…ソースプログラム、12…コンパイラ制御フローチャート解析、13…分岐なしに処理できるプログラムの断片、14…制御フローを実現するVMコード。
Claims (7)
- コンピュータのメモリにロードされて実行することで以下のような機能を有するコンパイラプログラムであって、
ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、
前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムと、分岐して実行される部分とに各々分割することを特徴とするコンパイラプログラムを記録する記録媒体。 - 前記コンパイラプログラムは、更に前記分割プログラムをPICコードとして目的コード化することを特徴とする請求項1記載の記録媒体。
- ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、
前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムと、分岐して実行される部分とに各々分割することにより、ソースプログラムをコンパイルするコンパイル方法。 - 前記分割プログラムをPICコードとして目的コード化することを特徴とする請求項3記載のコンパイル方法。
- 第1記憶領域と前記第1記憶領域よりも読出速度が速い第2記憶領域と処理部とをもつ情報処理装置であり、
前記処理部の働きとして、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、
前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムと、分岐して実行される部分とに各々分割して前記第1記憶領域に保存し、
前記コンパイラされた分割プログラムを、前記第2記憶領域に各々ロードして実行することを具備することを特徴とする情報処理装置。 - 前記分岐して実行される部分である仮想コードを、仮想機械のインタプリタで実行することを更に特徴とする請求項5記載の情報処理装置。
- 前記分岐して実行される部分である仮想コードを、JITコンパイラでネイティブコードに展開して実行することを更に特徴とする請求項5記載の情報処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006152717A JP2007323358A (ja) | 2006-05-31 | 2006-05-31 | コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 |
US11/806,371 US20070283333A1 (en) | 2006-05-31 | 2007-05-31 | Medium for recording compiler program, compile method, and information processing apparatus therewith |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006152717A JP2007323358A (ja) | 2006-05-31 | 2006-05-31 | コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007323358A true JP2007323358A (ja) | 2007-12-13 |
Family
ID=38791882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006152717A Withdrawn JP2007323358A (ja) | 2006-05-31 | 2006-05-31 | コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20070283333A1 (ja) |
JP (1) | JP2007323358A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8510529B2 (en) | 2009-09-29 | 2013-08-13 | Fujitsu Limited | Method for generating program and method for operating system |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4339371B2 (ja) * | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4837247B2 (ja) * | 2003-09-24 | 2011-12-14 | パナソニック株式会社 | プロセッサ |
-
2006
- 2006-05-31 JP JP2006152717A patent/JP2007323358A/ja not_active Withdrawn
-
2007
- 2007-05-31 US US11/806,371 patent/US20070283333A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8510529B2 (en) | 2009-09-29 | 2013-08-13 | Fujitsu Limited | Method for generating program and method for operating system |
Also Published As
Publication number | Publication date |
---|---|
US20070283333A1 (en) | 2007-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101381274B1 (ko) | 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체 | |
US6539541B1 (en) | Method of constructing and unrolling speculatively counted loops | |
US7757221B2 (en) | Apparatus and method for dynamic binary translator to support precise exceptions with minimal optimization constraints | |
Saxena et al. | Efficient fine-grained binary instrumentationwith applications to taint-tracking | |
US11216258B2 (en) | Direct function call substitution using preprocessor | |
US6973644B2 (en) | Program interpreter | |
US9323508B2 (en) | Method and system for compiler optimization | |
JP4294084B2 (ja) | ソフトウェアアプリケーションを実行する方法及び記録媒体 | |
US20070006167A1 (en) | Optimizing binary-level instrumentation via instruction scheduling | |
US20120066698A1 (en) | Dynamic data flow tracking method, dynamic data flow tracking program, and dynamic data flow tracking apparatus | |
US20080270990A1 (en) | Unwinding unwindable code | |
US20070234307A1 (en) | Methods and apparatus to inline conditional software instrumentation | |
JP2006313422A (ja) | 演算処理装置及びデータ転送処理の実行方法 | |
US6105124A (en) | Method and apparatus for merging binary translated basic blocks of instructions | |
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
US7613912B2 (en) | System and method for simulating hardware interrupts | |
US20050257202A1 (en) | Data-flow based post pass optimization in dynamic compilers | |
US20100095102A1 (en) | Indirect branch processing program and indirect branch processing method | |
US8490073B2 (en) | Controlling tracing within compiled code | |
CN113778838B (zh) | 二进制程序动态污点分析方法及装置 | |
US20090228869A1 (en) | Annotating exception information in a computer program | |
US9389843B2 (en) | Efficient interpreter profiling to obtain accurate call-path information | |
JP2007323358A (ja) | コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 | |
US7698534B2 (en) | Reordering application code to improve processing performance | |
JP2004240953A (ja) | コンピュータシステム、その同時多重スレッディング方法およびキャッシュコントローラシステム。 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090326 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100629 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20110107 |