JP6160232B2 - コンパイルプログラムおよびコンパイル方法 - Google Patents
コンパイルプログラムおよびコンパイル方法 Download PDFInfo
- Publication number
- JP6160232B2 JP6160232B2 JP2013105537A JP2013105537A JP6160232B2 JP 6160232 B2 JP6160232 B2 JP 6160232B2 JP 2013105537 A JP2013105537 A JP 2013105537A JP 2013105537 A JP2013105537 A JP 2013105537A JP 6160232 B2 JP6160232 B2 JP 6160232B2
- Authority
- JP
- Japan
- Prior art keywords
- loop
- fusion
- unit
- combination
- processing
- 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
Links
- 238000000034 method Methods 0.000 title claims description 47
- 230000004927 fusion Effects 0.000 claims description 102
- 238000000605 extraction Methods 0.000 description 102
- 238000010586 diagram Methods 0.000 description 30
- 230000010365 information processing Effects 0.000 description 21
- 239000000284 extract Substances 0.000 description 14
- 238000005457 optimization Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 8
- 230000001419 dependent effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- AGJBKFAPBKOEGA-UHFFFAOYSA-M 2-methoxyethylmercury(1+);acetate Chemical compound COCC[Hg]OC(C)=O AGJBKFAPBKOEGA-UHFFFAOYSA-M 0.000 description 1
- 101000605827 Homo sapiens Pinin Proteins 0.000 description 1
- 102100038374 Pinin Human genes 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
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
- G06F8/4441—Reducing the execution time required by the program code
-
- 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
-
- 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
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
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
図1は、実施例1に係るコンパイラを含む情報処理装置の構成を示す機能ブロック図である。この情報処理装置10は、プログラム言語で記述されたソースコードを読み込んで最適化してオブジェクトコードを生成し、オブジェクトコードをリンクさせて実行ファイルを生成するコンピュータ装置である。つまり、情報処理装置は、一般的なコンパイラとしての機能を有する。
次に、情報処理装置が実行する処理の流れについて説明する。ここでは、ループ融合の全体的な流れと、全体的な流れで実行されるデータ生成処理とについて説明する。
図7は、実施例1に係るループ融合の全体的な処理の流れを示すフローチャートである。図7に示すように、ソースプログラム入力部13は、コンパイル処理が開始されると(S101:Yes)、記憶部11からソースプログラム11aを読み込む(S102)。
図8は、実施例1に係るループ融合におけるデータ生成処理の流れを示すフローチャートである。ここで実行される処理は、図7のS106で実行される処理に該当する。
次に、上述したループ融合の具体例を説明する。図9は、ループ融合を判定する対象の処理コード例を示す図である。図9に示すように、ループ融合の判定を行うソースコードは、ループ1からループ5の5つのループで構成されている。以下では、このループ1からループ5について、どの組合せがループ融合として最適化を判定する例を説明する。
まず、組合せ抽出部16bは、中間言語生成部15が生成した図9に示したソースコードの中間言語から、ループ融合の組合せ候補、すなわち仮想ループを抽出する。図9の場合、組合せ抽出部16bは、ループ1をトリガーにして候補を抽出し、ループ2、ループ3、ループ4、ループ5をトリガーにして順に判定する。
次に、各仮想ループから「データ転送数、浮動小数点演算数、B/F値、命令数、ストリーム数」を抽出する例を説明する。図12は、各種データのカウント対象の例を示す図である。ここでは、図12に示した中間言語およびループ1とループ3の仮想ループを例にして説明する。なお、図12では、メモリをmemと表記する。図12に示した中間言語で記述されたコードでは、メモリ1〜メモリ3ついて、1アクセスで4バイトの領域にアクセスすることを示し、メモリ4〜メモリ8ついて、1アクセスで8バイトの領域にアクセスすることを示す。
まず、命令数について説明する。情報抽出部16cは、ループ1とループ3とについて各ループで実行される各命令を計数する。図12の場合、ループ1について、情報抽出部16cは、6つのLOAD命令、2つのMULT命令、3つのADD命令、2つのSTORE命令を検出するので、ループ1の命令数を「13」と抽出する。同様の手法で、情報抽出部16cは、ループ3の命令数を「338」と抽出する。この結果、情報抽出部16cは、ループ1とループ3とから構成される仮想ループの命令数を「13+338=351」と算出して、ループ判定リストに格納する。
次に、浮動小数点演算数について説明する。情報抽出部16cは、ループ1とループ3とについて各ループで実行される各命令から浮動小数点演算の数を計数する。図12の場合、ループ1について、情報抽出部16cは、浮動小数点演算として、2つのMULT命令、3つのADD命令を検出するので、ループ1の浮動小数点演算数を「5」と抽出する。同様の手法で、情報抽出部16cは、ループ3の浮動小数点演算数を「151」と抽出する。この結果、情報抽出部16cは、ループ1とループ3とから構成される仮想ループの浮動小数点演算数を「5+151=156」と算出して、ループ判定リストに格納する。
次に、ストリーム数について説明する。ここでは、同一ストリームの考え方について説明する。図13は、同一ストリームの説明をソースコードを例にして説明する図である。A(i)を基準(0)でそれぞれの配列の距離を考える。A(i+10)は、基準から10離れており、対象のメモリアクセスが8バイトであることから、A(i)から80バイト離れた所をアクセスする。ここで、1キャッシュラインを128バイトとすると、80バイト先の領域は、同じキャッシュライン上であると判定できる。一方、A(i+20)は、基準から20離れており、対象のメモリアクセスが8バイトであることから、A(i)から160バイト離れた所をアクセスする。そのため、A(i+20)がアクセスする領域は、A(i)と同じキャッシュラインではないので、同じストリームではないと判定し、データアクセス数すなわちデータ転送数にカウントする。
次に、データ転送数について説明する。情報抽出部16cは、ループ1とループ3とについて、各命令がアクセスする数を計数する。ループ1について、情報抽出部16cは、mem01からmem06各々についてLOAD命令を抽出する。また、mem01からmem03へのアクセスは、4バイト単位であり、mem04からmem08へのアクセスは、8バイト単位である。この結果、情報抽出部16cは、LOAD命令の合計アクセス数として、「4(mem01)+4(mem02)+4(mem03)+8(mem04)+8(mem05)+8(mem06)=36個」を算出する。
次に、B/F値について説明する。図15は、B/F値の算出例を説明する図である。図15に示すように、比率算出部16dは、ループ1とループ3とについて、上述した浮動小数点演算数およびデータ転送数を用いて、B/F値を算出する。例えば、比率算出部16dは、情報抽出部16cが抽出したデータ転送数「78個」を情報抽出部16cが抽出した浮動小数点演算数「156」で除算して、B/F値「0.5」を算出する。そして、比率算出部16dは、ループ1とループ3とから構成される仮想ループのB/F値「0.5」をループ判定リストに格納する。
次に、情報抽出部16cと比率算出部16dとが生成した結果を用いて、ループ融合の可否を判定する例について説明する。図16は、ループ融合の可否判定を説明する図である。図16に示すように、情報抽出部16cと比率算出部16dとが、仮想ループ「1、3」について「データ転送数、浮動小数点演算数、B/F値、命令数、ストリーム数」として「78、156、0.5、350、13」を生成したとする。
実施例1では、ループ融合を判定するための各種データを中間言語から抽出する例で説明したが、これに限定されるものではない。例えば、ソースプログラム11aから抽出することもでき、仮想ループの特定はソースプログラム11aを用いて実行し、データの抽出は中間言語11bを用いて抽出することもできる。
実施例1では、浮動小数点演算の例としてMULTやADDを例示したが、これに限定されるものではなく、例えばSUB命令やDIV命令であっても同様に処理することができる。また、実施例1では、仮想ループを作成してから、演算数やデータ転送数を算出する例を説明したが、これに限定されるものではなく、各ループについて演算数やデータ転送数等を算出してから、仮想ループを生成してもよい。
実施例1では、最適化の例としてループ融合を実行する例を説明したが、上述したループ融合以外の他の最適化処理を実行してもよい。
図17は、情報処理装置のハードウェア構成例を示す図である。図17に示すように、情報処理装置10は、CPU(Central Processing Unit)101、メモリ102、HDD(Hard Disk Drive)103、通信インタフェース104、入力装置105、表示装置106を有する。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
ループ融合可否の判定結果にしたがって、前記ループ処理の融合を実行する
処理を実行することを特徴とするコンパイラ。
前記判定する処理は、決定した各組合せについて、前記処理対象のコードが実行されるシステムの性能情報、および、組み合わせた場合の演算数およびデータ転送数に基づいて、各組合せのループ融合可否を判定することを特徴とする付記1に記載のコンパイラ。
処理対象のコードに存在する複数のループ各々について、前記処理対象のコードが実行されるシステムの性能情報、および、各ループ内で実行される演算数およびデータ転送数に基づいて、ループ融合可否を判定し、
ループ融合可否の判定結果にしたがって、前記ループ処理の融合を実行する
処理を含んだことを特徴とするコンパイル方法。
前記メモリに接続されるプロセッサとを有し、
前記プロセッサは、処理対象のコードに存在する複数のループ各々について、前記処理対象のコードが実行されるシステムの性能情報、および、各ループ内で実行される演算数およびデータ転送数に基づいて、ループ融合可否を判定し、
ループ融合可否の判定結果にしたがって、前記ループ処理の融合を実行する
処理を実行することを特徴とする情報処理装置。
ループ融合可否の判定結果にしたがって、前記ループ処理の融合を実行する処理をコンピュータに実行させるコンパイル制御プログラムを記憶する、コンピュータ読み取り可能な記憶媒体。
11 記憶部
11a ソースプログラム
11b 中間言語
11c オブジェクトファイル
11d 実行ファイル
12 コンパイラ実行部
13 ソースプログラム入力部
14 入出力制御部
15 中間言語生成部
16 最適化部
16a ソース解析部
16b 組合せ抽出部
16c 情報抽出部
16d 比率算出部
16e 判定部
16f 融合部
17 コード生成部
18 オブジェクトファイル出力部
20 リンカ
Claims (5)
- コンピュータに、
処理対象のコードに存在する複数のループ処理各々について、各ループ処理内で実行される演算数およびデータ転送数に基づいて、前記データ転送数と前記演算数の比率を算出し、
前記比率がシステムの性能条件によって特定される基準値を満たすか否かによって、前記ループ処理の融合可否を判定し、
ループ処理の融合可否の判定結果にしたがって、前記ループ処理の融合を実行する
処理を実行させることを特徴とするコンパイルプログラム。 - 前記処理対象のコードに存在する複数のループ処理各々のループ条件に基づいて、ループ処理を融合する対象の組合せを決定する処理を前記コンピュータにさらに実行させ、
前記判定する処理は、決定した各組合せについて、前記処理対象のコードが実行されるシステムの性能情報、および、組み合わせた場合の演算数およびデータ転送数に基づいて、各組合せのループ処理の融合可否を判定することを特徴とする請求項1に記載のコンパイルプログラム。 - 前記判定する処理は、さらに、前記組み合わせた場合の命令数、または、前記組み合わせた各ループ処理がアクセスするメモリのキャッシュライン数を用いて、前記ループ処理の融合可否を判定することを特徴とする請求項2に記載のコンパイルプログラム。
- 前記ループ処理の融合を実行する処理は、前記ループ処理の融合可能と判定された複数の組み合わせに同じループ処理が存在する場合、前記組み合わせた場合のデータ転送数と演算数の比率と、前記システムの性能条件によって特定される閾値との差が小さい組合せに該当するループ処理を融合させることを特徴とする請求項2または3に記載のコンパイルプログラム。
- コンピュータが、
処理対象のコードに存在する複数のループ処理各々について、各ループ処理内で実行される演算数およびデータ転送数に基づいて、前記データ転送数と前記演算数の比率を算出し、
前記比率がシステムの性能条件によって特定される基準値を満たすか否かによって、前記ループ処理の融合可否を判定し、
ループ処理の融合可否の判定結果にしたがって、前記ループ処理の融合を実行する
処理を含んだことを特徴とするコンパイル方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013105537A JP6160232B2 (ja) | 2013-05-17 | 2013-05-17 | コンパイルプログラムおよびコンパイル方法 |
US14/255,236 US9141357B2 (en) | 2013-05-17 | 2014-04-17 | Computer-readable recording medium, compiling method, and information processing apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013105537A JP6160232B2 (ja) | 2013-05-17 | 2013-05-17 | コンパイルプログラムおよびコンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014228891A JP2014228891A (ja) | 2014-12-08 |
JP6160232B2 true JP6160232B2 (ja) | 2017-07-12 |
Family
ID=51896885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013105537A Active JP6160232B2 (ja) | 2013-05-17 | 2013-05-17 | コンパイルプログラムおよびコンパイル方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9141357B2 (ja) |
JP (1) | JP6160232B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10228938B2 (en) * | 2016-12-30 | 2019-03-12 | Intel Corporation | Apparatus and method for instruction-based flop accounting |
JP7225859B2 (ja) * | 2019-02-04 | 2023-02-21 | 富士通株式会社 | 情報処理装置、情報処理プログラム、及び情報処理方法 |
JP2022140995A (ja) | 2021-03-15 | 2022-09-29 | 富士通株式会社 | 情報処理装置、コンパイルプログラムおよびコンパイル方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6235944A (ja) | 1985-08-09 | 1987-02-16 | Fujitsu Ltd | コンパイラ処理方式 |
US5774727A (en) * | 1991-06-27 | 1998-06-30 | Digital Equipment Corporation | Parallel processing system for virtual processor implementation of machine-language instructions |
JPH09114675A (ja) * | 1995-10-16 | 1997-05-02 | Hitachi Ltd | ループ融合方法 |
US5822593A (en) * | 1996-12-06 | 1998-10-13 | Xerox Corporation | High-level loop fusion |
US6058266A (en) * | 1997-06-24 | 2000-05-02 | International Business Machines Corporation | Method of, system for, and computer program product for performing weighted loop fusion by an optimizing compiler |
US6041181A (en) * | 1997-07-23 | 2000-03-21 | International Business Machines Corporation | Method of, system for, and computer program product for providing quick fusion in WHERE constructs |
US6070011A (en) * | 1997-10-21 | 2000-05-30 | Hewlett-Packard Co. | Compiler for performing a loop fusion, dependent upon loop peeling and/or loop reversal |
JP4128439B2 (ja) * | 2002-12-26 | 2008-07-30 | 富士通株式会社 | 配列圧縮方法 |
US7669194B2 (en) * | 2004-08-26 | 2010-02-23 | International Business Machines Corporation | Fine-grained software-directed data prefetching using integrated high-level and low-level code analysis optimizations |
US20070089104A1 (en) * | 2005-10-13 | 2007-04-19 | Arie Tal | Method and system for managing heuristic properties |
US7926046B2 (en) * | 2005-12-13 | 2011-04-12 | Soorgoli Ashok Halambi | Compiler method for extracting and accelerator template program |
JP4339907B2 (ja) | 2007-10-24 | 2009-10-07 | 株式会社日立製作所 | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 |
US8677338B2 (en) * | 2008-06-04 | 2014-03-18 | Intel Corporation | Data dependence testing for loop fusion with code replication, array contraction, and loop interchange |
US8516468B2 (en) * | 2008-06-30 | 2013-08-20 | Intel Corporation | Multiversioning if statement merging and loop fusion |
US9015690B2 (en) * | 2009-08-22 | 2015-04-21 | Advanced Micro Devices, Inc. | Proactive loop fusion of non-adjacent loops with intervening control flow instructions |
-
2013
- 2013-05-17 JP JP2013105537A patent/JP6160232B2/ja active Active
-
2014
- 2014-04-17 US US14/255,236 patent/US9141357B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20140344795A1 (en) | 2014-11-20 |
US9141357B2 (en) | 2015-09-22 |
JP2014228891A (ja) | 2014-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101731742B1 (ko) | 결합된 분기 타깃 및 프레디킷 예측 | |
TWI455025B (zh) | 根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體 | |
US8296746B2 (en) | Optimum code generation method and compiler device for multiprocessor | |
JP3311462B2 (ja) | コンパイル処理装置 | |
US11068247B2 (en) | Vectorizing conditional min-max sequence reduction loops | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
US20190079805A1 (en) | Execution node selection method and information processing apparatus | |
US9395986B2 (en) | Compiling method and compiling apparatus | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
Petric et al. | Reno: a rename-based instruction optimizer | |
CN104035895A (zh) | 用于存储器操作绑定的装置和方法 | |
JP6160232B2 (ja) | コンパイルプログラムおよびコンパイル方法 | |
Hong et al. | Improving simd parallelism via dynamic binary translation | |
Parravicini et al. | Cicero: A domain-specific architecture for efficient regular expression matching | |
Handa et al. | An order-aware dataflow model for parallel unix pipelines | |
Halstead et al. | Compiling irregular applications for reconfigurable systems | |
JP2007193423A (ja) | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラおよび並列処理コンパイラを格納した記録媒体 | |
JP4719415B2 (ja) | 情報処理システム及びコード生成方法 | |
Lukoschus et al. | Removing cycles in Esterel programs | |
KR101559651B1 (ko) | 동적 분석 방법 및 장치 | |
Jia et al. | Design and implementation of an efficient container tag dynamic taint analysis | |
Mohr et al. | Hardware acceleration for programs in SSA form | |
Gurumurthy et al. | ADAMANT: A Query Executor with Plug-In Interfaces for Easy Co-processor Integration | |
HU216990B (hu) | Eljárás és számítógépes rendszer utasítások feldolgozására | |
US20230367570A1 (en) | Information processing device and compiler method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160226 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170117 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170131 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170403 |
|
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: 20170516 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170529 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6160232 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |