JP2009528611A - 条件分岐中における最適化されたコンパイル法 - Google Patents
条件分岐中における最適化されたコンパイル法 Download PDFInfo
- Publication number
- JP2009528611A JP2009528611A JP2008556892A JP2008556892A JP2009528611A JP 2009528611 A JP2009528611 A JP 2009528611A JP 2008556892 A JP2008556892 A JP 2008556892A JP 2008556892 A JP2008556892 A JP 2008556892A JP 2009528611 A JP2009528611 A JP 2009528611A
- Authority
- JP
- Japan
- Prior art keywords
- code
- branch
- branch code
- compiler
- compilation
- 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/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
Abstract
本発明はプロファイル駆動型コンパイルにおけるデジタルデバイス中のプログラムコードのコンパイル方を開示している。前記コンパイラに追加の知性を与えることによってプログラムコードの実行を最適化する手法が提供され、前記コンパイラは監視オペレーションを有する単一の決定木を有するべきか、あるいは複数の決定木を有するべきかを決定する。本発明による方法は、コンパイラ駆動型の最適化及びプログラマによる手動の最適化双方において、最適化されたプログラムコードを得るように条件コード分岐のオーバーヘッドを低減することにおいて有益である。
Description
本発明は包括的にはコンピュータシステムに関するものであり、より詳細にはコンピュータシステムのための実行プログラムコードを生成するコンパイラに関するものである。
コンピュータ時代の幕開けによって、コンピュータシステムは極めて洗練されたデバイスへと進化し、様々な多くの場所で見つけることができる。ハードウェアとソフトウェア(つまりコンピュータプログラム)の双方における飛躍的な進化は、コンピュータシステムの性能を大幅に改善した。初期のコンピュータプログラムと比較した場合、現代のソフトウェアは極めて複雑になった。コンピュータプログラムの実行時間(従って性能)はコンピュータプログラムが実行するときに実行される命令の数に極めて密接に関連している。従って、コンピュータプログラムのサイズと複雑さが増すにつれ、コンピュータプログラムの実行時間も同様に増加することになる。
初期のコンピュータプログラムとは異なり、現代のコンピュータプログラムは通常、人間のプログラマーが理解しやすい高級言語で記述されている。コンパイラとして知られる特別なソフトウェアツールは、「ソースコード」として知られる、人間が読むことが出来るコンピュータプログラムを解釈し、それをコンピュータシステムが実行できる「マシンコード」あるいは「オブジェクトコード」命令へと変換する。コンパイラは最終的にコンピュータシステム上で実行されるマシンコード命令の流れを生成するため、コンパイラがソースコードをオブジェクトコードへ変換する方法はコンピュータプログラムコードの実行時間に影響を与える。
コンピュータプログラム、特に複雑なコンピュータプログラムの実行時間は、コンピュータプログラム内部における命令の構成とタイプの関数である。ループはコンピュータプログラムの実行時間に悪影響を与える。コンピュータプログラムが多くのループ、または著しく多く実行されるループを含む場合、ループを実行するために消費される時間は、コンピュータプログラムの実行時間に重大な影響を与える。
VLIW構造における性能のための必要な要素は、コンパイラの命令スケジューラである。前記命令スケジューラはコアコンパイラによって生成されるシーケンシャルコードを超長命令語(VLIW)命令へ変換することを担っており、前記VLIW命令のそれぞれは、VLIWによって並行して出される独立なオペレーションを含んでいる。命令スケジューラはスケジューリングユニットと称される基本ブロックに動作する。スケジューリングユニットの例には決定木及び監視決定木がある。
現代のコンピュータプログラムの性能を最適化するために、コンピュータプログラムの実行性能を予測及び/または測定するようにプロファイラが改良されてきた。プロファイラは一般にどれだけ頻繁にコンピュータプログラムの異なる部分が実行されるかを評価するプロファイルデータを生成する。前記プロファイルデータを使用することによって、オプティマイザ(最適化するコンパイラなど)はコンピュータプログラムの実行速度を改善するために、コンピュータプログラム中のループを最適化する決定をすることができる。
特許文献1は、コンパイラが知的な相反決定をすることが出来るプロファイル駆動型のコンパイル法を開示している。それは、プログラムの分岐先を予測するために超長命令語(VLIW)処理装置のコンパイラ中に配置されている。しかしこれらの既知の方法では、コンパイラはプログラムコード中で条件付実行が要求されると、監視オペレーションか専用の決定木かの最適な選択をするためのガイドを必要とする。従って、プログラムコード中で条件付実行が要求されたときに、監視オペレーションか決定木かを決定する改良されたコンパイル法に対する満足されていない要求が存在する。
国際公開第2003/003195号明細書
本発明はプロファイル駆動型コンパイルにおけるデジタルデバイス中のプログラムコードのコンパイル法を開示する。前記コンパイラに追加の知性を与えることによって、プログラムコードの実行最適化のための手法が提供されている。本発明は条件分岐に対する手法を提供し、前記手法は監視命令あるいは分離した決定木のどちらかを使用するために前記コンパイラに提供される情報に基づいている。「ホットスポット」と呼ばれるコードのセクションは、プロファイル駆動型コンパイルの最初のコンパイルラン(コンパイル実行)段で特定され、決定木を追加するか、あるいは特定された条件コード分岐への監視オペレーションを有するかを決定するために、オーバーヘッドの推定をする。この情報はプロファイル駆動型コンパイルの最終段に対する入力として提供される。
コンパイルプログラムコードの異なるセクションを特定するために、プロファイル駆動型コンパイルの事前コンパイルが実行される。メインコードとブランチコードが事前コンパイル段で特定される。ブランチコードのロード(BCLD)と増加したメインコードのロード(IMCLD)もまた測定され、BCLDはブランチコードにおけるジャンプ命令を含む超長命令語(VLIW)の数として定義される。IMCLDは、ブランチコードを対応するメインループの決定木の中に組み込むための監視オペレーションの導入によって形成される追加のロード数として定義される。前記パラメータの推定時に、プロファイル駆動型コンパイルのラン(実行)段の間、メインコードの実行頻度(NME)並びにブランチコードの実行頻度(NBE)もまた推定される。ブランチコードの実行確率が低い場合、BCLDとNBEの積を取ることによって決定される、対応するプロセシングロードもまた低くなる。ブランチコードのプロセシングロードが閾値よりも低ければ、分岐のための分離した決定木によって生成される追加のプロセシングロードは、監視オペレーションを有する単一の決定木を使用することによって形成されるロードと比較して小さい。その閾値はIMCLDとNMEの積を取ることにより決定される。
NBE及びNMEの値は最初の実行後にコンパイラに提供される。従って、プログラムコードのホットスポットに対して単一の決定木を有するか、多数の決定木を有するべきか、コンパイラは賢明な決定をする。ホットスポットはプログラムコードの異なるセクションとして定義されるが、前記ホットスポットは多量のプロセシングロードから成り、従って最適化に適した候補となる。条件コードを有するプログラム中のホットスポットを特定したあと、決定をするためにコンパイラはプロファイル駆動型コンパイルにおける前記条件を検証しなければならない。
本発明の一実施例において、プログラムコードはメインコードとブランチコードを有しており、実行しているブランチコードのプロセッシングロードが閾値よりも小さい場合、コンパイラはメインコードとブランチコードに対する命令スケジューリングユニットを、監視オペレーションを使用する単一の決定木として決定する。実行しているブランチコードのプロセシングロードが閾値よりも大きい場合には、コンパイラはメインコードとブランチコードのための命令スケジューリングユニットを、ブランチコードが分離した決定木を有する2つの分離した決定木として決定する。
本発明の1つの目的は、プログラムコード中において条件実行が要求される時に、監視オペレーションか、あるいは決定木かの最適な選択をすることにある。
本発明の別の目的は、手動の最適化を行うことによってプログラマーが最適化されたプログラムコードを有するように支援することにある。
本発明の更なる目的は、プログラムコード中の条件コード分岐のオーバーヘッドを低減することにある。
本発明の前記要約は本発明の開示されたそれぞれの実施例を説明することを意図してはいない。続く図及び詳細な説明は本発明の追加の特徴を提供している。
本発明はコンパイラに追加の知性を提供することによって、プログラムコードの実行を最適化するための方法を提供する。続く説明において、本発明をさらに徹底して理解するために多くの明確な詳細が説明されている。しかし当業者にとって本発明がこれらの明確な詳細なしに実施可能なことは明らかである。他の実施例においては、本発明を分かりづらくすることを避けるため、良く知られた特徴は説明されていない。
図1は、プロファイル駆動型コンパイルにおける、デジタルデバイス中のプログラムコードのコンパイル方法を示している。プログラムコードのコンパイルの間に最適なスキームを選択するために、プログラムコードの事前コンパイルを実行する(101)。この事前コンパイルにおいて、コンパイラはプログラムコードの異なるセクションを特定する。続いてコンパイラはプログラムコード中にメインコードとブランチコードを特定する(102、103)。
事前コンパイル段の実行時に、ブランチコード中のジャンプ命令を含めた超長命令語(VLIW)の数が測定される(104)。このVLIWの数はジャンプ命令を含んでいるが、ブランチコードロード(BCLD)と称する。事前コンパイル実行中のブランチコードの実行頻度(NBE)と、事前コンパイル実行中のメインコードの実行頻度(NME)が測定される(105及び107)。監視オペレーションのための単一の決定木を使用することによって生成された追加のロードである、増加したメインコードロード(IMCLD)が測定される(106)。
プログラムコード中の特定のセクションに対して、単一の決定木あるいは多数の決定木を持つべきかの賢明な決定をコンパイラが出来るように、条件を検証しなければならない。前記条件が以下に説明されている。閾値はIMCLD及びNMEの積をとることによって決定される。ブランチコードの実行確率が低ければ、ブランチコードの対応する全プロセシングロード(これ以降「プロセシングロード」と称する)もまた低いはずである。ブランチコード実行のプロセシングロードは、BCLD及びNBEの積をとることによって決定される。ブランチコードを実行するプロセシングロードが閾値よりも低ければ、分岐するための分離した決定木によって生成された追加のロードは、監視オペレーションを有する単一の決定木を使用して生成されたロードと比較して小さいと判断する(108)。
この条件はコンパイル−実行−再コンパイルのシナリオにおいて使用され、NBE及びNMEは最初の実行の後にコンパイラに対する入力となり得る。そこでプログラムコード中の特定のセクションに対して、コンパイラは、単一の決定木あるいは多数の決定木を有するべきかの賢明な決定をすることができる。プログラム中のこれらのセクションと特定した後、コンパイラは決定をするためにプロファイル駆動型コンパイルにおける上記の条件を検証しなければならない。
図2は典型的なプログラムソースコード201の構造を示している。このプログラムソースコード201はメインコードセクション201とブランチコードセクション203を具える。ブランチコードセクション203はメインコードセクション202中の条件コードセクションである。コンパイルの間、コンパイラの命令スケジューラは(i)ブランチコード203のための監視オペレーションを使用する「ブランチコード」203を有する「メインコード」セクション202中に、全コードのための単一の決定木を形成する(ii)「メインコード」の決定木以外の「ブランチコード」のための分離した決定木を形成する、選択肢を有する。
図3はプログラムコード201(図2に示す)中のスケジューリングユニットの構造を示しており、ブランチコードとメインコードは同じ決定木301に属している。この図は、ブランチコード303(図2に示すように、ソースコード201におけるブランチコード203に対応している)あるいは条件コードセクションが監視オペレーションとされ、ブランチコードセクション303及びメインコードセクション302(図2に示すようにソースコードのメインコード202に対応している)は同じ決定木301に属しているような場合に対応している。ブランチコード303あるいは条件コードセクションは主に「IF THEN」及び「IF ELSE」のような条件の文節を含んでいる。図2におけるVLIWm命令、VLIW及びVLIWbは以下のように定義される。VLIWmはメインコード302におけるVLIW命令に対する略語であり、VLIWbはブランチロード303におけるVLIW命令に対する略語である。
図4はプログラムコードのスケジューリングユニットの構造を示しており、ブランチコードはメインの決定木401(図2に示すようにソースコード201におけるメインコード202に対応している)から分離されている。つまり、メインコードとブランチコードはそれぞれ分離した決定木401及び402に属している。この図はプログラムコードがメインコードとブランチコードを有し、コンパイラがメインコード及びブランチコード用の命令スケジューリングユニットを2つの分離した決定木として決定する場合に関係しており、その場合にはブランチコードは分離した決定木402を有している。前記ブランチコード402(図2に示すようにソースコード201においてブランチコード203に対応している)あるいは条件コードセクションは主に「IF THEN」及び「IF ELSE」の条件の文節を含んでいる。図4におけるVLIW命令、VLIWm及びVLIWbは以下のように定義される。VLIWmはメインコード401におけるVLIW命令に対する略語であり、VLIWbはブランチコード402におけるVLIW命令に対する略語である。
コンパイラがブランチコード203を単一の決定木に収容しようとするとき、コンパイラは幾つかの監視オペレーションを実行しなければならず、前記監視オペレーションは通常、メインループ中のVLIW命令の数、つまり「VLIWm」を増加させる。これは、ブランチコード203とメインコード202が同じ決定木(図3に示すように)に属する時のメインコード201(図2に示すように)中のVLIW命令の数は、コンパイル時に(図4に示すように)メインコード202とブランチコード203用の分離した決定木が割り当てられた時のメインコード401(図4に示すように)中のVLIW命令の数よりも多いことを暗示している。
図5は決定ブロックを示しており、プログラムコード501における特定のセクションに対して、単一の決定木あるいは多数の決定木を有するべきかコンパイラが決定するために検証されるべき条件を表している。
コンパイラは単一の決定木あるいは複数の決定木を有するべきかを以下の条件を使用して決定する。
BCLD×NBEがIMCLD×NMEよりも小さければ、メインコードとブランチコードに対して異なる二つの決定木へ進め。
BCLD×NBEがIMCLD×NMEよりも大きければ、(監視オペレーションを有する)単一の決定木へ進め。
BCLD×NBEがIMCLD×NMEよりも小さければ、メインコードとブランチコードに対して異なる二つの決定木へ進め。
BCLD×NBEがIMCLD×NMEよりも大きければ、(監視オペレーションを有する)単一の決定木へ進め。
実行しているブランチコードのプロセシングロードが閾値よりも小さければ、ブランチコード用に分離した決定木によって生成される追加のロードは、監視オペレーションを有する単一の決定木を使用することによって生成されるロードと比較して小さい。ここではコンパイラにとって、新しい決定木を形成することが理に叶っている。
Claims (8)
- プロファイル駆動型コンパイルにおけるデジタルデバイス中のプログラムコードのコンパイル方法であって、前記プログラムコードはメインコードとブランチコードを具え、
前記ブランチコードのジャンプ命令を含む超長命令語の数から成る前記ブランチコードのブランチコードロードを測定するステップと、
前記プロファイル駆動型コンパイルの第1段である事前コンパイル実行中に、前記ブランチコードの実行頻度を測定するステップと、
監視オペレーションを有する単一の決定木を使用することによって形成される、追加のロードから成る増加したメインコードロードの測定をするステップと、
前記事前コンパイルの実行時に前記メインコードの実行頻度を測定するステップと、
前記ブランチコードを実行するプロセシングロードが閾値よりも小さいか否かを測定し、小さければ前記ブランチコードのために分離した決定木を形成するステップと、
前記ブランチコードを実行するプロセシングロードが閾値よりも大きいか否かを測定し、大きければ監視オペレーションを用いて前記メインコードの決定木の一部として前記ブランチコードを組み込むステップと、
を具えるコンパイル法。 - 前記ブランチコードの実行の前記プロセシングロードは、前記事前コンパイルの前記ブランチコードロードと前記ブランチコードの実行頻度の積で定義されることを特徴とする、請求項1に記載の方法。
- コンパイラが前記ブランチコードの実行に対して、監視オペレーションか分離した決定木かを決定することを特徴とする、請求項1に記載の方法。
- 前記閾値が、前記事前コンパイル中の前記増加したメインコードのロードと前記メインコードの実行頻度の積で決定されることを特徴とする、請求項1に記載の方法。
- 前記ブランチコードが前記プログラムコード中に条件命令を含むことを特徴とする、請求項1に記載の方法。
- 前記デジタルデバイスがコンピュータを具え、前記プログラムコードがコンピュータプログラムコードを具えることを特徴とする、請求項1に記載の方法。
- 前記事前コンパイルの実行後に、前記ブランチコードの実行頻度と、前記メインコードの実行頻度がコンパイラに入力されることを特徴とする、請求項1に記載の方法。
- 前記方法が複数の超長命令語処理装置のコンパイラチェーンに適用されることを特徴とする、請求項1に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US77883506P | 2006-03-02 | 2006-03-02 | |
PCT/IB2007/050594 WO2007099484A2 (en) | 2006-03-02 | 2007-02-24 | Optimised profile-driven compilation method for conditional code for a processor with predicated execution |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009528611A true JP2009528611A (ja) | 2009-08-06 |
Family
ID=38227834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008556892A Withdrawn JP2009528611A (ja) | 2006-03-02 | 2007-02-24 | 条件分岐中における最適化されたコンパイル法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20090019431A1 (ja) |
EP (1) | EP1994467A2 (ja) |
JP (1) | JP2009528611A (ja) |
CN (1) | CN101395581A (ja) |
WO (1) | WO2007099484A2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9038048B2 (en) | 2010-07-22 | 2015-05-19 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for protecting applications from races |
US9454460B2 (en) * | 2010-07-23 | 2016-09-27 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for providing determinism in multithreaded programs |
US8533698B2 (en) * | 2011-06-13 | 2013-09-10 | Microsoft Corporation | Optimizing execution of kernels |
US8918771B2 (en) * | 2012-09-25 | 2014-12-23 | Facebook, Inc. | Decision tree ensemble compilation |
US10042849B2 (en) | 2014-09-22 | 2018-08-07 | Oracle Financial Services Software Limited | Simplifying invocation of import procedures to transfer data from data sources to data targets |
CN105184163A (zh) * | 2015-08-31 | 2015-12-23 | 小米科技有限责任公司 | 软件系统的安全防护方法及装置 |
CN109240793A (zh) * | 2017-05-16 | 2019-01-18 | 龙芯中科技术有限公司 | 程序热点的识别方法、装置、电子设备及存储介质 |
US11194603B2 (en) * | 2018-11-16 | 2021-12-07 | Samsung Electronics Co., Ltd. | User equipment, server, control method of the user equipment and control method of the server for performing ahead-of-time (AOT) compilation of an application based on usage frequency |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06259262A (ja) * | 1993-03-08 | 1994-09-16 | Fujitsu Ltd | 分岐確率を設定するコンパイラの処理方法および処理装置 |
US6581131B2 (en) * | 2001-01-09 | 2003-06-17 | Hewlett-Packard Development Company, L.P. | Method and apparatus for efficient cache mapping of compressed VLIW instructions |
US7447886B2 (en) * | 2002-04-22 | 2008-11-04 | Freescale Semiconductor, Inc. | System for expanded instruction encoding and method thereof |
ATE556372T1 (de) * | 2003-02-20 | 2012-05-15 | Koninkl Philips Electronics Nv | Übersetzung einer reihe von computeranweisungen |
US7669041B2 (en) * | 2006-10-06 | 2010-02-23 | Stream Processors, Inc. | Instruction-parallel processor with zero-performance-overhead operand copy |
-
2007
- 2007-02-24 CN CNA2007800074268A patent/CN101395581A/zh active Pending
- 2007-02-24 EP EP07713174A patent/EP1994467A2/en not_active Withdrawn
- 2007-02-24 JP JP2008556892A patent/JP2009528611A/ja not_active Withdrawn
- 2007-02-24 WO PCT/IB2007/050594 patent/WO2007099484A2/en active Application Filing
- 2007-02-24 US US12/281,371 patent/US20090019431A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
CN101395581A (zh) | 2009-03-25 |
WO2007099484A2 (en) | 2007-09-07 |
EP1994467A2 (en) | 2008-11-26 |
US20090019431A1 (en) | 2009-01-15 |
WO2007099484A3 (en) | 2007-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009528611A (ja) | 条件分岐中における最適化されたコンパイル法 | |
US8522220B2 (en) | Post-pass binary adaptation for software-based speculative precomputation | |
US7146607B2 (en) | Method and system for transparent dynamic optimization in a multiprocessing environment | |
US5659752A (en) | System and method for improving branch prediction in compiled program code | |
US7039909B2 (en) | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization | |
US7765342B2 (en) | Systems, methods, and computer program products for packing instructions into register files | |
US6412105B1 (en) | Computer method and apparatus for compilation of multi-way decisions | |
US6986130B1 (en) | Methods and apparatus for compiling computer programs using partial function inlining | |
Fu et al. | Value speculation scheduling for high performance processors | |
CN111177733B (zh) | 一种基于数据流分析的软件补丁检测方法及装置 | |
JP2003099248A (ja) | プロセッサ、コンパイル装置及びコンパイル方法 | |
Kim et al. | Dynamic binary translation for accumulator-oriented architectures | |
US20130232471A1 (en) | Method and Apparatus for Assessing Software Parallelization | |
Mantripragada et al. | A new framework for integrated global local scheduling | |
Park et al. | Microarchitecture-aware code generation for deep learning on single-isa heterogeneous multi-core mobile processors | |
RU2206119C2 (ru) | Способ получения объектного кода | |
Fu et al. | Software-only value speculation scheduling | |
Kumar et al. | An approach for compiler optimization to exploit instruction level parallelism | |
CN112540764A (zh) | 条件转移预测方向变换的编译优化方法 | |
Becker et al. | Optimizing worst-case execution times using mainstream compilers | |
Dutta et al. | Enhancing branch prediction using software evolution | |
US10042645B2 (en) | Method and apparatus for compiling a program for execution by a plurality of processing units | |
박준모 | Microarchitecture-Aware Code Generation for Deep Learning on Single-ISA Heterogeneous Multi-Core Mobile Processors | |
Fu et al. | Value speculation mechanisms for EPIC architectures | |
Rosier et al. | Treegion instruction scheduling in gcc |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090907 |