JP2007323358A - コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 - Google Patents

コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 Download PDF

Info

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
Application number
JP2006152717A
Other languages
English (en)
Inventor
Ryuji Sakai
隆二 境
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2006152717A priority Critical patent/JP2007323358A/ja
Priority to US11/806,371 priority patent/US20070283333A1/en
Publication of JP2007323358A publication Critical patent/JP2007323358A/ja
Withdrawn legal-status Critical Current

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/44Encoding
    • G06F8/443Optimisation

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

Description

この発明は、コンピュータプログラムのコンパイル方法に関し、特に、プログラムを分岐なしに処理できる断片に分割して処理するコンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置に関する。
コンピュータプログラムを実行する際にコンパイル処理が行われるが、これに関連して、制御フロー解析等が知られている。
特許文献1には、プログラムを手続き毎に分割して、使用頻度の低いモジュールをアンロードすることで使用効率を向上させる技術が開示されている。
特開2003−330741公報。
上記した特許文献1の従来技術においては、プログラム中の使用頻度の低い手続きのモジュールをアンロードするものであり、一つの手続き中のあまり使用しないエラー処理等のみを排除することができないという問題がある。
本発明は、プログラムを分岐なしに処理できるプログラムの断片としてコンパイルし、これらをキャッシュにロードして処理することでプログラムの実行効率を向上させることができるコンパイル方法及び情報処理装置を提供することを目的とする。
コンピュータのメモリにロードされて実行することで以下のような機能を有するコンパイラプログラムであって、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムP1〜P5と、分岐して実行される部分C1〜C5とに各々分割することを特徴とするコンパイラプログラムを記録する記録媒体。
または、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラム(P1〜P5)と、分岐して実行される部分(C1〜C5)とに各々分割することにより、ソースプログラムをコンパイルするコンパイル方法である。
実行頻度の低いエラー処理等のプログラムの命令コード等をキャッシュメモリ等にロードすることが少なくなるため、プログラムの実行効率を向上させることができる。
以下、この発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の一実施形態に係るコンパイラ機能の一例を説明する説明図。図2は、同じくコンパイラ機能を備えた情報処理システムの機能の一例を説明する説明図。図3は、同じくコンパイラ機能の一例を説明するフローチャート。図4は、同じく分割プログラムの処理の一例を示すフローチャート。図5は、同じく分割プログラム処理のサブルーティンの一例を示すフローチャート。図6は、同じくVMコードの実行処理の一例を示すフローチャート。図7は、同じくコンパイラ機能によるプログラム分割処理の概要の一例を示す説明図。図8は、同じくコンパイラ機能によるプログラムの分割処理の具体的な一例を示す説明図である。
<本発明の一実施形態に係るコンパイル方法>
(該コンパイル方法の趣旨)
通常、プログラムの実行時間の大部分は、プログラムのごく一部のみが占めており、この部分を高速に実行できればよい。この特性を利用して、実行頻度が高い命令コードを高速なキャッシュメモリに配置して実行することが一般的に行われている。しかし、プログラムのコードサイズが大きくなるとともに、命令キャッシュは不足し、キャッシュミスを頻発するようになり、実行効率の低下の原因となる。特に、組み込み機器では、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において行なわれるコンパイル処理を図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は、MPEG2デコーダのMC(MotionCompensation=動き補償)のプログラムの一部である。ここで、ピクチャストラクチャは、多くの場合、ストリームごとに固定である。デコーダは、規格に準拠したあらゆるストリームをデコードできるようにプログラムを実装する。例えば、フレーム構造の場合は、最初のifの中が実行されるが、フィールド構造の場合は、後半のelseの部分が実行される。
又、モジュール単位で、高速メモリに転送する場合、両方ともメモリにロードされてしまうが、本発明の実施形態においては、どちらかだけが高速メモリにロードされることになる。
このようなプログラムの分割後の例が、図8の右部分に示されている。細かく言えば、if文やfor文も分割対象になるが、制御部分であるため、ここでは、コンパイラの出力としてVM側のコードとして生成している。図8において、プログラムは、第1分割プログラムP1乃至第5分割プログラムP5と、5つのVMコードC1乃至C5に分割されている。
なお、VM側の実行コードについては、例えば、Just-In-Timeコンパイルすることで高速実行できるため、必ずしもVMでなければならないということはない。
又、上述した実施形態では、プログラムの断片への分割はコンパイラで行っているが、プログラムの記述の段階から、制御構造とプログラムのシーケンスを分割して記述することも好適である。更に、この場合に、並列実行できる部分を記述できる言語を使えば、制御フローを実行するVMが、並列実行できる部分を効果的にスレッドに割り当てることが可能である。
以上、説明したように、本発明の一実施形態に係るコンパイル処理及びプログラムの実行処理により、規模の大きなプログラムの命令コードのキャッシュミスを小さくすることが可能となる。また、スクラッチパッドやローカルストレージのような、高速メモリにソフトウェアでプログラムを出し入れして実行するような環境においては、プログラムの出し入れ回数を削減することが可能である。
以上記載した様々な実施形態により、当業者は本発明を実現することができるが、更にこれらの実施形態の様々な変形例を思いつくことが当業者によって容易であり、発明的な能力をもたなくとも様々な実施形態へと適用することが可能である。従って、本発明は、開示された原理と新規な特徴に矛盾しない広範な範囲に及ぶものであり、上述した実施形態に限定されるものではない。
本発明の一実施形態に係るコンパイラ機能の一例を説明する説明図。 本発明の一実施形態に係るコンパイラ機能を備えた情報処理システムの機能の一例を説明する説明図。 本発明の一実施形態に係るコンパイラ機能の一例を説明するフローチャート。 本発明の一実施形態に係る分割プログラムの処理の一例を示すフローチャート。 本発明の一実施形態に係る分割プログラム処理のサブルーティンの一例を示すフローチャート。 本発明の一実施形態に係るVMコードの実行処理の一例を示すフローチャート。 本発明の一実施形態に係るコンパイラ機能によるプログラム分割処理の概要の一例を示す説明図。 本発明の一実施形態に係るコンパイラ機能によるプログラムの分割処理の具体的な一例を示す説明図。
符号の説明
11…ソースプログラム、12…コンパイラ制御フローチャート解析、13…分岐なしに処理できるプログラムの断片、14…制御フローを実現するVMコード。

Claims (7)

  1. コンピュータのメモリにロードされて実行することで以下のような機能を有するコンパイラプログラムであって、
    ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、
    前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムと、分岐して実行される部分とに各々分割することを特徴とするコンパイラプログラムを記録する記録媒体。
  2. 前記コンパイラプログラムは、更に前記分割プログラムをPICコードとして目的コード化することを特徴とする請求項1記載の記録媒体。
  3. ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、
    前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムと、分岐して実行される部分とに各々分割することにより、ソースプログラムをコンパイルするコンパイル方法。
  4. 前記分割プログラムをPICコードとして目的コード化することを特徴とする請求項3記載のコンパイル方法。
  5. 第1記憶領域と前記第1記憶領域よりも読出速度が速い第2記憶領域と処理部とをもつ情報処理装置であり、
    前記処理部の働きとして、ソースプログラムを解析して、プログラムの制御について分岐する部分を検出し、
    前記ソースプログラムを前記分岐を含まずに実行されるプログラムの断片である分割プログラムと、分岐して実行される部分とに各々分割して前記第1記憶領域に保存し、
    前記コンパイラされた分割プログラムを、前記第2記憶領域に各々ロードして実行することを具備することを特徴とする情報処理装置。
  6. 前記分岐して実行される部分である仮想コードを、仮想機械のインタプリタで実行することを更に特徴とする請求項5記載の情報処理装置。
  7. 前記分岐して実行される部分である仮想コードを、JITコンパイラでネイティブコードに展開して実行することを更に特徴とする請求項5記載の情報処理装置。
JP2006152717A 2006-05-31 2006-05-31 コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 Withdrawn JP2007323358A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4339371B2 (ja) * 2007-03-22 2009-10-07 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4837247B2 (ja) * 2003-09-24 2011-12-14 パナソニック株式会社 プロセッサ

Cited By (1)

* Cited by examiner, † Cited by third party
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