JP2015049832A - 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム - Google Patents

定数ロードのオーバーヘッドを削減する方法、装置及びプログラム Download PDF

Info

Publication number
JP2015049832A
JP2015049832A JP2013182998A JP2013182998A JP2015049832A JP 2015049832 A JP2015049832 A JP 2015049832A JP 2013182998 A JP2013182998 A JP 2013182998A JP 2013182998 A JP2013182998 A JP 2013182998A JP 2015049832 A JP2015049832 A JP 2015049832A
Authority
JP
Japan
Prior art keywords
constant
candidates
code area
computer
value
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
JP2013182998A
Other languages
English (en)
Inventor
拓 井上
Hiroshi Inoue
拓 井上
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2013182998A priority Critical patent/JP2015049832A/ja
Priority to US14/446,567 priority patent/US9189234B2/en
Publication of JP2015049832A publication Critical patent/JP2015049832A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】RISCプロセッサにおける定数ロードのオーバーヘッドを削減する技術を提供する。
【解決手段】オーバヘッド削減システムは、コンパイル単位のコード領域内で使用される定数に基づいて、1以上の定数レジスタに格納すべき複数の定数の候補を作成し(S302)、定数の候補各々について、該定数の候補を用いてコード領域内で使用される定数を生成することによるオーバーヘッド削減の効果を見積もり(S304)、見積もり結果に基づき、定数レジスタにロードするベースとなる定数を決定し(S306)、コード領域の入り口において定数レジスタにベースとなる定数をロードし、及び、定数レジスタの値を用いてコード領域内で使用される定数を生成するコードを生成する(S308)。
【選択図】図3

Description

本発明は、RISCプロセッサにおける定数ロードのオーバーヘッドを削減する技術に関する。
命令長が可変であるCISCプロセッサと異なり、RICSプロセッサでは命令サイズが固定であるため、長い定数をレジスタにロードするためには複数の命令が必要となる。例えば、IBM社が提供するRISCプロセッサのPOWER(登録商標)では、32ビット定数0x12345678のロードを次のように2つの命令を組み合わせて実現する。
lis reg,0x1234
ori reg,reg,0x5678
1行目の命令lisにより定数0x1234を16ビット左にシフトした値がレジスタregに格納される。これにより、32ビット定数0x12345678の上半分の桁がレジスタregの上位16ビットに設定される。次に2行目の命令oriにより、レジスタregと定数0x5678との論理和がレジスタregに上書きされる。これにより、32ビットの定数0x 12345678の下半分の桁がレジスタregの下位16ビットに設定される。結果、レジスタregに32ビット定数0x 12345678がロードされることになる。
しかしながら、複数の命令を組み合わせるやり方では命令数が増えるため実行コストが掛かり、また、命令キャッシュのプレッシャーも高くなる。そこで64ビット定数では、主に次のやり方でロードが実現されている。まず、コンパイル時において定数を並べたメモリ領域(Table of Contens:TOC)を作成する。そして、TOCを指すポインタを保持するために1のレジスタ(以下、TOCレジスタという)を割り当てておく。定数を使用する際には、TOCレジスタを使用してメモリからのロードを行う。このやり方によれば定数ロードのための命令数は減る。しかし定数ロードのためにデータキャッシュのプレッシャーを高めてしまうという新たな問題も生じる。
一方、特許文献1は、定数レジスタに蓄積された定数を一度使用すると、次にその定数と全く同じ値や一部しか異ならない値を蓄積する場合でも、一から定数レジスタのすべてのビットを蓄積する必要があり、実行サイクル数が増大することを課題として、定数レジスタに格納されている定数を繰り返し読み出し、その定数の少なくとも一部をオペランドとするオペレーションを実行する構成、及び、定数レジスタに格納されている定数の一部を残したまま他の部分と新たな定数とを置換して格納する構成を開示する。
しかしながら、定数レジスタに蓄積され一度使用された定数が、次に使用される定数と全部または一部において一致するとは限らない。そのため、特許文献1に開示される構成では、プログラムにおいて使用される定数とその定数の使用順序に依存して定数レジスタの値の再利用が行われるため、再利用が十分になされない可能性も高く、その場合には実行サイクル数や命令コードサイズの低減を図ることができない。
特開平11−53187号公報
この発明は、上記の問題点を解決するためなされたものであって、TOCのようなデータアクセスの増加を起こすことなく、定数ロード用の専用のレジスタ値の積極的な再利用により定数ロードの命令数を削減できるような技術を提供することを目的とする。
上記目的を達成する本発明は、コンピュータの演算処理によって定数ロードのオーバーヘッドを削減する方法により実現される。そのような定数ロードのオーバーヘッド削減方法は、(a) 前記コンピュータが、1以上の定数ロード用のレジスタ(以下、「定数レジスタ」という)を用意するステップと、 (b) 前記コンピュータが、コンパイル単位のコード領域内で使用される定数に基づいて、1以上の前記定数レジスタに格納すべき複数の定数の候補を作成するステップと、(c) 前記コンピュータが、前記複数の定数の候補各々について、該定数の候補を用いて前記コード領域内で使用される定数を生成することによる前記オーバーヘッド削減の効果を見積もるステップと、 (d) 前記コンピュータが、前記複数の定数の候補各々について見積もった効果に基づき、1以上の前記定数レジスタにロードするベースとなる定数を決定するステップと、(e) 前記コンピュータが、前記コード領域に対し、前記コード領域の入り口において1以上の前記定数レジスタに前記ベースとなる定数をロードし、及び、前記定数レジスタの値を用いて前記コード領域内で使用される定数を生成するコードを生成するステップと、を含む。
好ましくは、前記複数の定数の候補は、前記コード領域内で使用される定数をもとに新たに作成される定数を含む。
また好ましくは、前記複数の定数の候補は、前記コード領域内で使用される各定数と、該定数に所定の値V1及びV2(V2>V1)をそれぞれ足した第1の値及び第2の値と、各定数、前記第1の値及び前記第2の値それぞれの下位n(nは正の整数)ビットを0にした第3の値とを含む。
また好ましくは、前記ステップ(b)は、前記コンピュータが、最少の命令数で生成することのできる定数を前記複数の定数の候補から除外するステップを含む。
また好ましくは、前記ステップ(b)は、前記コンピュータが、値0を前記複数の定数の候補に含めるステップを含む。
また好ましくは、ステップ(c)は、前記コンピュータが、前記コード領域内で使用される各定数について使用回数をカウントするステップと、各定数の候補について前記効果を示すスコアを算出するステップとを含み、各定数の候補について前記スコアを算出するステップは、該定数の候補を使用して前記コード領域内で使用される定数を生成することにより削減できる命令数を、カウントした前記使用回数を用いて算出するステップを含む。
また好ましくは、各定数の前記使用回数は、該定数が前記コード領域の何箇所で使用されるかを示す回数である。
これに代えて、各定数の前記使用回数は、前記コード領域の実行中に前記定数がロードされた回数であってもよい。
また好ましくは、前記コンピュータは、定数ロードのオーバーヘッドを削減する方法を、コンパイル処理における最適化処理後に実行する。
また好ましくは、ステップ(d)は、前記コンピュータが、前記複数の定数の候補から、前記見積もった前記効果が所定の閾値を超えることを条件に、前記効果の大きい順に前記定数レジスタの数だけ取り出し、前記ベースとなる定数として決定するステップを含む。
また好ましくは、前記コンパイル単位がメソッドであり、第1のメソッドが第2のメソッドを呼び出す場合に、前記第1のメソッドにおいて使用される定数と前記第2のメソッドにおいて使用される定数とそれぞれについてステップ(b)及び(c)を実行して見積もった効果を第1効果とするステップと、前記第1のメソッド及び前記第2のメソッドにおいて使用される定数全てをまとめて対象としてステップ(b)及び(c)を実行して見積もった効果を第2効果とするステップとを更に含む。そして、前記ステップ(d)は、前記第2効果が前記第1効果よりも大きいことを条件に、第2効果に基づき前記ベースとなる定数を決定し、前記ステップ(e)では、前記第1のメソッドの入り口において1以上の前記定数レジスタに前記ベースとなる定数をロードするコードを生成し、前記前記第2のメソッドの入り口では前記定数レジスタの値をそのままとする。
なお、これまで定数ロードのオーバーヘッドを削減する方法として本発明を説明した。しかし本発明は、これら方法をコンピュータに実行させるための定数ロードのオーバーヘッドを削減するプログラム、及び、そのようなプログラムをコンピュータにインストールすることによって実現される定数ロードのオーバーヘッド削減装置/システムとして把握することもできる。
本発明によれば、定数ロードのための専用レジスタである定数レジスタが1以上用意され、定数レジスタに格納すべき定数の候補がコンパイル単位のコード領域内で使用される定数に基づいて作成される。そして各定数の候補について、該定数の候補を用いて上記コード領域内において使用される定数を生成することによる定数ロードのオーバーヘッド削減の効果が見積もられる。従って、定数レジスタには、見積もり結果に基づいて定数ロードのオーバーヘッド削減に効果的な定数を格納することが可能となり、定数レジスタに格納した定数が再利用される機会が増えるため、本発明によれば、TOCのようなデータアクセスの増加を起こすことなく、定数ロードの命令数をより高い確率で削減できるよという効果を奏することができる。本願発明のその他の効果については、各実施の形態の記載から理解される。
本発明の実施形態による定数ロードのオーバーヘッド削減システム200を実現するのに好適なコンピュータ100のハードウェア構成の一例を示す。 本発明の実施形態による定数ロードのオーバーヘッド削減システム200の機能ブロック図である。 本発明の実施形態による定数ロードのオーバーヘッド削減処理の流れの一例を示すフローチャートある。 定数レジスタにロードすべき定数の候補作成処理の流れの一例を示すフローチャートである。 定数ロードのオーバーヘッド削減効果の見積もり処理の流れの一例を示すフローチャートである。 定数の候補を使用して1命令で生成できる定数の識別処理の流れの一例を示すフローチャートである。 トレースベースのJust-In-Time(JIT)コンパイラに本発明と従来手法とを適用して得られたパフォーマンスについての比較実験結果を示す図である。 トレースベースのJITコンパイラに本発明と従来手法とを適用して得られたコードサイズについての比較実験結果を示す図である。
以下、本発明の実施形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
図1は、本発明を実施するのに好適なコンピュータ・システム100のハードウェア構成の一例を示す。コンピュータ・システム100は、バス106に接続されたメインCPU(中央処理装置)102とメイン・メモリ104を含んでいる。CPU102は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、IBM社のPOWER(登録商標)プロセッサやSun Microsystems社(現Oracle社)のSPARCプロセッサ等、RISCプロセッサが対象となる。メイン・メモリ104は好ましくは、1GB以上の容量、より好ましくは、2GB以上の容量をもつものであってよい。
バス106には、ディスプレイ・コントローラ108を介して、ディスプレイ110、例えば液晶ディスプレイ(LCD)が接続されうる。ディスプレイ110は、コンピュータの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。
バス106にはまた、SATA又はIDEコントローラ112を介して、ディスク114、例えばシリコン・ディスク又はハードディスクが接続されうる。バス106にはまた、SATA又はIDEコントローラ112を介して、任意的に、ドライブ116、例えばCD、DVDまたはBDドライブが接続されうる。バス106にはさらに、任意的に、キーボード・マウスコントローラ118又はUSBバス(図示せず)を介して、キーボード120及びマウス122が接続されうるが、本発明を実施する上では必要ない。
ディスク114には、例えば、IBM社が提供するAIX(登録商標)やSun Microsystems社(現Oracle社)が提供するSolaris(商標)など等のオペレーティング・システムが、メイン・メモリ104にロード可能なように記憶されている。
上記ディスク114にはまた、オペレーティング・システムと協働してCPU102に命令を与え、本発明を実施するためのコンピュータ・プログラムを記録することができる。即ち、上記ディスク114には、コンピュータ・システム100にインストールされ、コンピュータ・システム100を本発明の実施形態による定数ロードのオーバーヘッド削減装置/システムとして機能させる定数ロードのオーバーヘッド削減プログラム、及びそれら関連データを記録することができる。
上記定数ロードのオーバーヘッド削減プログラムは、レジスタ割り当てモジュールと、定数候補作成モジュールと、見積もりモジュールと、ベース定数決定モジュールと、コード生成モジュールとを含む。これらモジュールは、CPU102に働きかけて、コンピュータ・システム100を、各々後述するレジスタ割り当て部202と、定数候補作成部204と、見積もり部206と、ベース定数決定部208と、コード生成部210としてそれぞれ機能させる。なお本発明は、動的であるか、静的であるかを問わず、コンパイラの機能の一部として実装可能である。
上記コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。ドライブ116は、必要に応じて、CD−ROM、DVD−ROMまたはBDからプログラムをディスク114にインストールするために使用されうる。
通信インタフェース126は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース126は、通信コントローラ124を介してバス106に接続され、コンピュータ・システム100を通信回線128に物理的に接続する役割を担い、コンピュータ・システム100のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線LAN環境に基づくもの、又は、無線LAN環境、例えば、IEEE802.11a/b/g/nなどのWi−Fi規格に基づくものであってもよい。
以上から、本発明の実施態様において使用されるコンピュータ・システム100は、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、又は、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
図2は、本発明の実施形態による定数ロードのオーバーヘッド削減システム200の機能ブロック図である。定数ロードのオーバーヘッド削減システム200は、レジスタ割り当て部202と、ベース定数決定部208と、コード生成部210とを含み、レジスタ割り当て部202により定数ロード専用に1つまたは複数のレジスタを割り当て、ベース定数決定部208によりコンパイル単位のコード領域内で使用される定数を生成するのに命令数が最少となるような値をベースとなる定数(以下、「ベース定数」ともいう)として決定し、コード生成部210により、ベース定数として決定された値を上記コード領域の先頭で定数ロード専用のレジスタにロードするコードを生成する。ここで、定数ロードのオーバーヘッド削減システム200は、定数ロード専用のレジスタにロードすべき定数の候補を作成する定数候補作成部204と、候補ごと該候補を用いた定数生成による命令数削減の効果を見積もる見積もり部206とを更に含み、上記ベース定数決定部208は、定数候補作成部204により作成された定数の候補の中から、見積もり部206による見積もり結果を参照してベース定数を決定する。以下、構成要素ごとその機能を詳細に説明する。
レジスタ割り当て部202は、定数ロードのための専用のレジスタ、即ち定数レジスタとして1以上のレジスタを割り当てる。これにより他の用途に使用できるレジスタ数が減るが、RISCプロセッサではレジスタ数は多くの場合に不足しない。またレジスタ数が足りなくなるようなコンパイル単位のコード領域(例えばメソッド)に対しては、従来手法と同様の方法で定数をロードしてよい。
定数候補作成部204は、コンパイル単位のコード領域内で使用される定数に基づいて、1以上の定数レジスタに格納すべき複数の定数の候補を作成する。好ましくは、定数候補作成部204は、コンパイル単位のコード領域内で使用される定数を基に複数の定数の候補を新たに作成する。より具体的には、定数候補作成部204は、コンパイル単位のコード領域内で使用される各定数と、該定数に所定の値V1及びV2(V2>V1)をそれぞれ足した第1の値及び第2の値と、各定数、第1の値及び第2の値それぞれの下位n(nは正の整数)ビットを0にした第3の値とを、複数の定数の候補として作成する。
命令長が32ビットのシステムの場合、定数の候補を使用してコード領域内の命令を生成する最少の命令数は1であり、上記V1、V2、nの値はそれぞれ順に、-0x7FFF、0x8000、16である。即ち、コンパイル単位をメソッドとすると、定数候補作成部204は、メソッド内で使用される各定数のほかに、該定数に-0x7FFF、0x8000をそれぞれ足した値と、各定数及び加算後の値の下位16ビットを0にした値とを定数の候補として新たに作成する。メソッド内で使用される各定数に-0x7FFF、0x8000(上記システムにおいて1命令で加減算が行える定数の最大範囲)をそれぞれ足した値や定数の候補の下位16ビットを0にした値を定数の候補に加えることにより、以下の例のようにメソッド内で使用される定数を直接選択する場合よりも大きな効果が得られる可能性がある。
例えばメソッド内で使用される定数が0x12341234と0x12350000であったとする。すると、0x12341234は、0x12350000から1命令で生成することはできないが、0x12341234に0x8000を足した値0x12349234を定数レジスタに格納するベース定数とすれば、0x12341234(=0x12349234-0x8000)と、0x12350000(=0x12349234+6DCC)のどちらの定数もベース定数から1命令で生成できる。このように、メソッド内で使用される定数だけではなく、メソッド内で使用される定数に基づいて新たに作成される定数をも候補に加えることで、再利用率が高く定数ロードのオーバーヘッド削減に効果的な定数を定数レジスタに格納できる可能性が高まる。
また、定数候補作成部204は、最少の命令数で生成することのできる定数を定数の候補から除外する。例えば命令長が32ビットのシステムの場合、16ビットの定数は最少の命令数、即ち、1命令で表すことができるため、定数の候補から外す。但し、非常に高い頻度で使用されるもの(例えば値1、-1などは頻繁に使用される可能性がある)については、1命令で生成できる定数であったとしても、定数レジスタに保持することで命令数の削減が可能になる場合がある。従って、好ましくは、定数候補作成部204は、最少の命令数で生成することができ、かつ、高頻度では使用されない定数を複数の定数の候補から除外する。
また、定数候補作成部204は、最少の命令数で生成することのできる定数を定数の候補から除外する場合において、好ましくは値0を複数の定数の候補に含める。RISC命令セット一般において、汎用レジスタ(general-purpose registers: GPR)であるGPR0は多くの命令でレジスタの内容でなく定数0として扱われる。しかしストア命令については、GPR0は定数扱いとならないため、0という値をストアする毎に1つのGPRに0を生成する必要がある。そのため、頻繁に0がストアされる場合には、定数レジスタに値0を保持することで命令数の削減が可能になる。そこで、好ましくは、定数候補作成部204は、値0を複数の定数の候補に含める。
見積もり部206は、複数の定数の候補各々について、該定数の候補を用いてコンパイル単位のコード領域内において使用される定数を生成することによるオーバーヘッド削減の効果を見積もる。具体的には、見積もり部206は、コード領域内で使用される各定数についてコード領域内の使用回数をカウントし、カウントした使用回数を用いて、定数の候補ごと該定数の候補を使用してコード領域内で使用される定数を生成することにより削減できる命令数をオーバーヘッド削減の効果を示すスコアとして算出する。
各定数の候補の上記スコアは、0で初期化された後、以下に説明する1.及び2.の値を加算し、かつ、3.の値を減算することにより算出される。
1.スコア算出対象の定数の候補(以下、「対象候補」という)を使用して最少の命令数で生成できるコード領域内で使用される各定数の使用回数に、対象候補を使用することにより削減できる命令数を掛けた値の合計値。これは対象候補を使用して最少の命令数で生成される定数については、使用されるごとに、その定数を一から生成する場合と比較して所定の命令数を削減できるためである。命令長が32ビットのシステムの場合、32ビット定数を生成するのに削減できる所定の命令数は1である。なお、ある定数が対象候補を使用して最少の命令数で生成できるか否かの判定は、ある定数が以下に説明するいずれかのケースに該当するか否かの判定により行うことができ、いずれかのケースに該当する場合、ある定数は対象候補を使用して最少の命令数で生成できると判断する。
ケース1.ある定数と対象候補の上位のnビットが一致する。ケース2.ある定数と対象候補との差が所定の値V1から所定の値V2の間の値である。ケース3.ある定数と対象候補との差の下位nビットが値0である。なお、命令長が32ビットのシステムの場合、上記V1、V2、nの値はそれぞれ順に、-0x7FFF、0x8000、16である。
2.対象候補のコード領域内の使用回数に、対象候補を一から生成するのに必要な命令数を掛けた値。これは、対象候補は既に定数レジスタに保持されており生成する必要がないため、使用されるごとに、その対象候補を一から生成するのに必要な命令数を削減できるからである。32ビット命令長のシステムの場合、32ビット定数を一から生成するのに2命令必要であることから、2.の値は対象候補の使用回数を2倍した値となる。
3.対象候補を生成するのに必要な命令数。これは、対象候補をメソッド入り口で定数レジスタにロードする際に必要な命令数を差し引くためである。32ビット命令長のシステムの場合、対象候補の下位16ビットが0の場合には値1、対象候補の下位16ビットが0でない場合には値2である。
なお、定数の候補を含めた各定数のコード領域内での使用回数は、該定数がコード領域内の何箇所で使用されているかを示す静的な使用回数であってよい。或いは、各定数の使用回数は、コードの実行中にその定数がロードされる回数、即ち静的な使用回数に実行頻度を掛けた動的な使用回数であってもよい。静的な使用回数の採用はコードサイズの削減に有効である。一方、動的な使用回数の採用は実行命令数の削減に有効である。
ベース定数決定部208は、見積もり部206により複数の定数の候補各々について見積もった効果に基づき、複数の定数の候補の中から1以上の定数レジスタにロードするベース定数を決定する。より具体的には、ベース定数決定部208は、見積もり部206により見積もられた効果を示すスコアが所定の閾値を超えることを条件に、複数の定数の候補をスコアの大きい順に定数レジスタの数だけ取り出し、ベースとなる定数として決定する。ここで所定の閾値は一例として0であってよい。これは、スコアが0を超えている場合には,そのスコアを持つ定数の候補を定数レジスタにロードすることで性能の向上が得られると見積もられるためである。もしくは見積もりの曖昧さからくる性能の劣化を防ぐために所定の閾値として小さな正の数を用いてもよい。
コード生成部210は、コード領域に対し、コード領域の入り口において1以上の定数レジスタにベースとなる定数をロードし、及び、定数レジスタの値を用いてコード領域内で使用される定数を生成するコードを生成する。なお、コード生成部210は、コード領域に対し残りのコンパイル処理を行い、コード領域全体についてコンパイル済みコードを出力するものであってもよい。なお、コンパイル処理は既知の技術であり本発明の要旨ではないので説明は省略する。
次に図3、図4、図5A、及び図5Bを参照して、定数ロードのオーバーヘッド削減処理の流れを説明する。上述したように、定数ロードのオーバーヘッド削減処理はコンパイラによる処理の一部として実行され、好ましくは、コンパイラによる最適化処理後に実行される。図3は、本発明の実施形態による定数ロードのオーバーヘッド削減処理の全体の流れの一例を示すフローチャートある。図4は、定数レジスタにロードすべき定数の候補の作成処理の流れの一例を示すフローチャートである。図5Aは、定数ロードのオーバーヘッド削減効果の見積もり処理の流れの一例を示すフローチャートである。図5Bは、定数の候補を使用して1命令で生成できる定数の識別処理の流れの一例を示すフローチャートである。なお、図4、図5A及び図5Bのフローチャートは、命令長が32ビットのシステム上で実行される場合の処理の流れを説明するものである。
図3に示す定数ロードのオーバーヘッド削減処理は、ステップ300で開始し、システム200は、1以上の定数レジスタを割り当てる。続いてシステム200は、コンパイル単位のコード領域内で使用される定数に基づいて、1以上の定数レジスタに格納すべき複数の定数の候補を作成する(ステップ302)。定数の候補の作成方法の詳細は、図4を参照して後述する。続いてシステム200は、複数の定数の候補各々について、該定数の候補を用いてコード領域内で使用される定数を生成することによるオーバーヘッド削減の効果を見積る(ステップ304)。見積もり処理の詳細は、図5A及び図5Bを参照して後述する。
続いてシステム200は、見積もり結果に基づいて、複数の定数の候補の中から定数レジスタにロードするべき定数の候補を決定する(ステップ306)。なお、見積もりの結果、効果があまり高くないと判断される場合には、定数レジスタの利用を中止してもよい。即ち、システム200は、見積もった効果が所定の閾値を超えることを条件に、複数の定数の候補から、効果の大きい順に定数レジスタの数だけ定数の候補を取り出し、ベースとなる定数として決定してよい。続いてシステム200は、コード領域に対し、コード領域の入り口において1以上の定数レジスタにベースとなる定数をロードし、及び、定数レジスタの値を用いてコード領域内で使用される定数を生成するコードを生成する(ステップ308)。そして処理は終了する。
図4に示す定数候補の作成処理はステップ400で開始し、システム200は、コンパイル対象のコード領域を読み出す。続いてシステム200は、読み出したコード領域内から全ての定数を抽出する(ステップ402)。続いてシステム200は、抽出した1以上の定数の中から、1命令で生成できる定数、即ち、16ビットの定数を除外する(ステップ404)。但し、上述したように1命令で生成できる定数であっても、高頻度に使用される定数については残すようにしてもよい。
続いてシステム200は、除外されることなく残った定数を、定数の候補のリストに登録する(ステップ406)。続いてシステムは、定数の候補のリストに登録された各定数に0x8000及び-0x7FFFを加算し、それぞれ加算した値を定数の候補のリストに追加する(ステップ408)。続いてシステム200は、定数の候補のリストに登録された各定数の下位16ビットを0に変更し、変更後のそれぞれの値を定数の候補のリストに追加する(ステップ410)。その後処理は終了する。
図5Aに示す見積もり処理は、ステップ500で開始し、システム200は、コード領域内の各定数についてその使用回数をカウントする。上述したように、カウントする使用回数は、コード領域内の何箇所で使用されているかを示す静的な使用回数でよく、或いは、コードの実行中に定数がロードされる動的な使用回数であってもよい。後者の場合、動的な使用回数は、プログラム実行中に収集されるプロファイル情報を利用して取得可能である。
続いてシステム200は、定数の候補のリストにまだ見積もり処理を行っていない定数の候補があるか否かを判定し(ステップ502)、未処理の定数の候補がある場合は(ステップ502:YES)、1の未処理の定数の候補を取り出し現在の定数の候補とする(ステップ504)。この際、システム200は、現在の定数の候補のスコアを0で初期化しておく。続いてシステム200は、現在の定数の候補を使用して1命令で生成できるコード領域内の定数を識別する(ステップ506)。識別処理の詳細は図5Bを参照して後述する。
続いてシステム200は、ステップ506で識別した全定数の使用回数を、現在の定数の候補のスコアに加算する(ステップ508)。また、システム200は、現在の定数の候補のコード領域内での使用回数を2倍した値を、現在の定数の候補のスコアに加算する(ステップ510)。更にシステム200は、現在の定数の候補の下位16ビットが0であれば上記スコアから1減算し、現在の定数の候補の下位16ビットが0でなければ上記スコアから2を減算する(ステップ512)。ステップ512の後システム200は処理をステップ502へ戻し、ステップ502において定数の候補のリストに未処理の定数がないと判定するまで(ステップ502:NO)一連の処理を繰り返す。
図5Bに示す識別処理はステップ520で開始し、システム200は、コード領域内に未検討の定数が存在するか否かを判定する。未検討の定数がある場合(ステップ520:YES)、システム200は、1の未検討の定数を読み出す(ステップ522)。続いてシステム200は、現在の定数の候補と読み出した定数の上位16ビットが一致するか否かを判定する(ステップ524)。一致しない場合(ステップ524:NO)、続いてシステム200は、現在の定数の候補と読み出した定数の差が-0x7FFFから0x8000の間であるか否かを判定する(ステップ526)。差が-0x7FFFから0x8000の間にない場合(ステップ526:NO)、続いてシステム200は、現在の定数の候補と読み出した定数の差の下位16ビットが0であるか否かを判定する(ステップ528)。
現在の定数の候補と読み出した定数の差の下位16ビットが0でない場合(ステップ528:NO)、システム200は処理をステップ520へ戻し、コード領域内に未検討の定数がなくなるまで一連の処理を繰り返す。一方、ステップ524、ステップ526、ステップ528のいずれかにおいて判定結果がYESである場合、システム200は、現在の定数を、現在の定数の候補を用いて1命令で生成できる定数としてマークする(ステップ530)。そしてシステム200は処理をステップ520へ戻し、コード領域内に未検討の定数がなくなるまで一連の処理を繰り返す。
なお、上記説明では、図3のステップ302の定数の候補の作成処理、及びステップ304のオーバーヘッド削減効果の見積もり処理は、コンパイル単位のコード領域を処理対象とするものとした。しかしながら、コンパイル単位がメソッドであり、第1のメソッドが第2のメソッドを呼び出す場合、第1のメソッド及び第2メソッドを合わせた領域を処理対象としてこれらのステップを実行して効果を見積もってよい。そして見積もった効果が、第1メソッド、第2メソッドそれぞれの領域を独立した処理対象とし見積もった効果の合計と比較してより高い場合には、第1のメソッド及び第2メソッドを合わせた領域を処理対象とした場合に得られた効果に基づいて、ベースとなる定数を決定してよい。この場合、第1のメソッドの入り口において定数レジスタにロードしたベースとなる定数は、第2のメソッドの入り口においてもそのままとし変更しないものとする。
次に図6A及び図6Bを参照して、本発明をトレースベースのJITコンパイラに適用した場合の性能向上とコードサイズ削減の効果を検証する。実験では、3.0GHz動作のPOWER7(登録商標)プロセッサを搭載し、オペレーティング・システムとしてAIX7.1を採用するコンピュータを使用した。図6A、図6Bに示すグラフは、2命令を用いて定数を生成する従来技術1と、TOCを作成する従来技術2と、本発明とをそれぞれ適用した場合の性能、コードサイズを比較した実験結果である。なお、本発明を適用した場合については、4つの定数レジスタを割り当てる場合と、2つの定数レジスタを割り当てる場合の2つについて実験を行った。図6Aにおいて、縦軸は従来技術1の性能を基準としたパフォーマンスであり、横軸はDaCapo ベンチマークスイート(Dacapo-9.12)の各プログラム名である。また、図6Bにおいて、縦軸は従来技術1のJITコンパイル後のコードサイズであり、横軸は図6Aと同じくDaCapo ベンチマークスイートの各プログラム名である。
従来技術1と比較すると、本発明を適用することで、性能が改善され、また、コードサイズの削減も図られている。一方、従来技術2と比較した場合は、コードサイズについては従来技術2のほうが優れているが、性能については本発明のほうが優れているといえる。また、実験に使用したベンチマークでは、定数レジスタ割り当てのために使用できるレジスタ数が減ったことによる性能低下はみられなかった。なお、トレースベースのJITコンパイラでは、通常のメソッドベースのJITコンパイラよりも定数を使用する頻度が高いことから、本発明はトレースベースのJITコンパイラに特に適しているといえる。
以上、実施形態を用いて本願発明の説明をしたが、本願発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更又は改良を加えることが可能であることが当業者に明らかである。以上のように、上記の実施形態に変更又は改良を加えた形態も当然に本発明の技術的範囲に含まれる。
なお、特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における動作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り任意の順序で実現しうることに留意すべきである。また、前の処理の出力を後の処理で用いる場合でも、前の処理と後の処理の間に他の処理が入ることは可能である場合があること、又は間に他の処理が入るように記載されていても前の処理を後の処理の直前に行うよう変更することも可能である場合があることも留意されたい。特許請求の範囲、明細書、及び図面中の動作フローに関して、便宜上「まず、」、「次に、」、「続いて、」等を用いて説明したとしても、この順で実施することが必須であることを必ずしも意味するとは限らない。

Claims (13)

  1. コンピュータの演算処理によって定数ロードのオーバーヘッドを削減する方法であって
    (a) 前記コンピュータが、1以上の定数ロード用のレジスタ(以下、「定数レジスタ」という)を用意するステップと、
    (b) 前記コンピュータが、コンパイル単位のコード領域内で使用される定数に基づいて、1以上の前記定数レジスタに格納すべき複数の定数の候補を作成するステップと、
    (c) 前記コンピュータが、前記複数の定数の候補各々について、該定数の候補を用いて前記コード領域内で使用される定数を生成することによる前記オーバーヘッド削減の効果を見積もるステップと、
    (d) 前記コンピュータが、前記複数の定数の候補各々について見積もった効果に基づき、1以上の前記定数レジスタにロードするベースとなる定数を決定するステップと、
    (e) 前記コンピュータが、前記コード領域に対し、前記コード領域の入り口において1以上の前記定数レジスタに前記ベースとなる定数をロードし、及び、前記定数レジスタの値を用いて前記コード領域内で使用される定数を生成するコードを生成するステップと、
    を含む方法。
  2. 前記複数の定数の候補は、前記コード領域内で使用される定数をもとに新たに作成される定数を含む、請求項1に記載の方法。
  3. 前記複数の定数の候補は、前記コード領域内で使用される各定数と、該定数に所定の値V1及びV2(V2>V1)をそれぞれ足した第1の値及び第2の値と、各定数、前記第1の値及び前記第2の値それぞれの下位n(nは正の整数)ビットを0にした第3の値とを含む、請求項2に記載の方法。
  4. 前記ステップ(b)は、前記コンピュータが、最少の命令数で生成することのできる定数を前記複数の定数の候補から除外するステップを更に含む、請求項3に記載の方法。
  5. 前記ステップ(b)は、前記コンピュータが、値0を前記複数の定数の候補に含めるステップを更に含む、請求項4に記載の方法。
  6. ステップ(c)は、前記コンピュータが、前記コード領域内で使用される各定数について使用回数をカウントするステップと、各定数の候補について前記効果を示すスコアを算出するステップとを含み、各定数の候補について前記スコアを算出するステップは、該定数の候補を使用して前記コード領域内で使用される定数を生成することにより削減できる命令数を、カウントした前記使用回数を用いて算出するステップを含む、請求項2に記載の方法。
  7. 各定数の前記使用回数は、該定数が前記コード領域内の何箇所で使用されているかを示す回数である、請求項6に記載の方法。
  8. 各定数の前記使用回数は、前記コード領域の実行中に前記定数がロードされる回数である、請求項6に記載の方法。
  9. 前記コンピュータは、前記方法を、コンパイル処理における最適化処理後に実行する、請求項1に記載の方法。
  10. ステップ(d)は、前記コンピュータが、前記複数の定数の候補から、前記見積もった前記効果が所定の閾値を超えることを条件に、前記効果の大きい順に前記定数レジスタの数だけ取り出し、前記ベースとなる定数として決定するステップを含む、請求項1に記載の方法。
  11. 前記コンパイル単位がメソッドであり、第1のメソッドが第2のメソッドを呼び出す場合に、前記第1のメソッドにおいて使用される定数と前記第2のメソッドにおいて使用される定数とそれぞれについてステップ(b)及び(c)を実行して見積もった効果を第1効果とするステップと、前記第1のメソッド及び前記第2のメソッドにおいて使用される定数全てをまとめて対象としてステップ(b)及び(c)を実行して見積もった効果を第2効果とするステップとを含み、前記ステップ(d)は、前記第2効果が前記第1効果よりも大きいことを条件に、第2効果に基づき前記ベースとなる定数を決定し、前記ステップ(e)では、前記第1のメソッドの入り口において1以上の前記定数レジスタに前記ベースとなる定数をロードするコードを生成し、前記前記第2のメソッドの入り口では前記定数レジスタの値をそのままとするステップを含む、請求項1に記載に方法。
  12. 請求項1乃至11のいずれかに一項に記載の方法の各ステップを前記コンピュータに実行させる、定数ロードのオーバーヘッドを削減するプログラム。
  13. 請求項1乃至11のいずれかに一項に記載の方法の各ステップを実行するように適合された手段を備える、定数ロードのオーバーヘッドを削減するシステム。
JP2013182998A 2013-09-04 2013-09-04 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム Pending JP2015049832A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013182998A JP2015049832A (ja) 2013-09-04 2013-09-04 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム
US14/446,567 US9189234B2 (en) 2013-09-04 2014-07-30 Reducing overhead in loading constants

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013182998A JP2015049832A (ja) 2013-09-04 2013-09-04 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム

Publications (1)

Publication Number Publication Date
JP2015049832A true JP2015049832A (ja) 2015-03-16

Family

ID=52584934

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013182998A Pending JP2015049832A (ja) 2013-09-04 2013-09-04 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム

Country Status (2)

Country Link
US (1) US9189234B2 (ja)
JP (1) JP2015049832A (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10866817B2 (en) 2016-03-14 2020-12-15 Samsung Electronics Co.. Ltd. Computing system, and driving method and compiling method thereof
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3539914B2 (ja) 1991-06-24 2004-07-07 株式会社ルネサステクノロジ マイクロコンピュータ
JP3215085B2 (ja) 1991-06-24 2001-10-02 株式会社日立製作所 中央処理装置及びマイクロコンピュータ
US6052773A (en) * 1995-02-10 2000-04-18 Massachusetts Institute Of Technology DPGA-coupled microprocessors
US7301541B2 (en) * 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
JP3414209B2 (ja) 1997-07-30 2003-06-09 松下電器産業株式会社 プロセッサ
US6367071B1 (en) * 1999-03-02 2002-04-02 Lucent Technologies Inc. Compiler optimization techniques for exploiting a zero overhead loop mechanism
JP2001092633A (ja) 1999-09-22 2001-04-06 Toshiba Corp 複数の結果を出力する命令を有する演算装置
JP3556556B2 (ja) 2000-02-08 2004-08-18 株式会社東芝 命令コード変換装置及び情報処理システム
US6981073B2 (en) * 2001-07-31 2005-12-27 Wis Technologies, Inc. Multiple channel data bus control for video processing
JP2003084973A (ja) 2001-09-14 2003-03-20 Seiko Epson Corp 並列演算処理装置及び並列演算処理用の命令コードのデータ構造、並びに並列演算処理用の命令コードの生成方法
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
JP3698125B2 (ja) 2002-07-03 2005-09-21 ソニー株式会社 データ処理システム、データ処理装置及びデータ処理方法
JP3958662B2 (ja) 2002-09-25 2007-08-15 松下電器産業株式会社 プロセッサ
JP2004355477A (ja) 2003-05-30 2004-12-16 Renesas Technology Corp マイクロプロセッサ
US20050138340A1 (en) * 2003-12-22 2005-06-23 Intel Corporation Method and apparatus to reduce spill and fill overhead in a processor with a register backing store
JP2006004042A (ja) * 2004-06-16 2006-01-05 Renesas Technology Corp データ処理装置
JP5630281B2 (ja) 2011-01-19 2014-11-26 日本電気株式会社 ベクトル命令制御回路及びリストベクトルの追い越し制御方法

Also Published As

Publication number Publication date
US20150067300A1 (en) 2015-03-05
US9189234B2 (en) 2015-11-17

Similar Documents

Publication Publication Date Title
JP2015049832A (ja) 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム
US9104433B2 (en) Trace generation method, trace generation device, trace generation program product, and multi-level compilation using trace generation method
US8612948B2 (en) Dynamic compiler program, dynamic compiling method and dynamic compiling device
US8726290B2 (en) System and/or method for balancing allocation of data among reduce processes by reallocation
JP5473768B2 (ja) マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム
US20150082318A1 (en) Datacenter resource allocation
US9323507B2 (en) Optimization apparatus, optimization method and optimization program
US8984231B2 (en) Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
US20130081003A1 (en) Selective data flow analysis of bounded regions of computer software applications
US20170161065A1 (en) Generating Code Coverage Data for use with a Computing Device and System
CN113761482A (zh) 一种程序代码保护方法和装置
US9383980B2 (en) Determining a method to inline using an actual footprint calculation
JP5719278B2 (ja) 情報処理装置、プロファイル対象決定プログラム及び方法
WO2014136611A1 (ja) コスト算出装置、コスト算出方法、及びコンピュータ読み取り可能な記録媒体
US9244666B2 (en) Globally inline a callee with high cost-effectiveness on the basis only of profile information in a call graph
US8938728B2 (en) Dynamic compiler program, dynamic compiling method and dynamic compiling device
JP6127639B2 (ja) プログラム実行制御プログラム、プログラム実行制御方法
US20130031537A1 (en) Specialized Function Implementation Using Code Frequency Profiling
US8812410B2 (en) Efficient data profiling to optimize system performance
US9389843B2 (en) Efficient interpreter profiling to obtain accurate call-path information
US20150113251A1 (en) Systems and Methods for Register Allocation
US10120602B2 (en) Device and method for determining data placement destination, and program recording medium
US9891925B2 (en) Allocation method, apparatus, and program for managing architectural registers and physical registers using mapping tables
JP2016532183A (ja) ソフトウェアプログラムの計算ブロックをマルチプロセッサシステムのコアに割り当てるための方法及びシステム
US20110276948A1 (en) Partition-based static analysis of computer software applications

Legal Events

Date Code Title Description
RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20150626

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150629