JP6627630B2 - コンパイル方法、コンパイルプログラム及び情報処理装置 - Google Patents

コンパイル方法、コンパイルプログラム及び情報処理装置 Download PDF

Info

Publication number
JP6627630B2
JP6627630B2 JP2016081847A JP2016081847A JP6627630B2 JP 6627630 B2 JP6627630 B2 JP 6627630B2 JP 2016081847 A JP2016081847 A JP 2016081847A JP 2016081847 A JP2016081847 A JP 2016081847A JP 6627630 B2 JP6627630 B2 JP 6627630B2
Authority
JP
Japan
Prior art keywords
data
register
simd
unit
scalar
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
Application number
JP2016081847A
Other languages
English (en)
Other versions
JP2017191543A (ja
Inventor
周作 中島
周作 中島
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016081847A priority Critical patent/JP6627630B2/ja
Priority to US15/447,540 priority patent/US10114648B2/en
Publication of JP2017191543A publication Critical patent/JP2017191543A/ja
Application granted granted Critical
Publication of JP6627630B2 publication Critical patent/JP6627630B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/441Register allocation; Assignment of physical memory space to logical memory space
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

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)

Description

本発明は、コンパイル技術に関する。
ソースコードからオブジェクトコードへの翻訳においては、レジスタ割り付けと呼ばれる最適化が行われる。普通プロセッサのレジスタ資源は有限であるため、レジスタ割り付けにおいてレジスタを割り付けることができないデータ(例えば変数のデータ)が発生することがある。この現象はレジスタ溢れと呼ばれる。レジスタ溢れが発生すると、データはメモリ等に一時的に退避される。退避されたデータは、レジスタを使用可能になった場合にレジスタに復元される。
退避および復元の際にはロード命令およびストア命令が発行されるため、ソースコードの実行性能が低下する。プロセッサのレジスタ資源を増やせばレジスタ溢れの発生を抑制することができるが、レジスタ資源を増やすと命令セットアーキテクチャを大幅に変更することになるので、実際にはレジスタ資源を増やすことは難しい。
レジスタ溢れの発生の抑制に関する従来技術は存在するが、従来技術によっては十分に抑制することができない場合がある。
特開2008−9957号公報 特開平10−293691号公報
本発明の目的は、1つの側面では、レジスタ溢れの発生を抑制するための技術を提供することである。
本発明に係る情報処理装置は、スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定する特定部と、特定部により特定された第1のSIMDレジスタの空き領域を、第1のデータに割り付ける割付部とを有する。
1つの側面では、レジスタ溢れの発生を抑制することができるようになる。
図1は、情報処理装置のハードウエア構成図である。 図2は、情報処理装置の機能ブロック図である。 図3は、第2レジスタ割付部の機能ブロック図である。 図4Aは、第1データ格納部に格納されるデータの一例を示す図である。 図4Bは、第2データ格納部に格納されるデータの一例を示す図である。 図5は、メインの処理フローを示す図である。 図6は、第1の最適化処理の処理フローを示す図である。 図7は、SIMDデータの分割について説明するための図である。 図8は、SIMDデータの前半部をSIMDレジスタの空き領域に格納する方法を説明するための図である。 図9は、SIMDデータの前半部をSIMDレジスタの空き領域に格納する方法を説明するための図である。 図10は、SIMDデータの後半部の格納について説明するための図である。 図11は、SIMDデータの前半部および後半部に対するSIMDレジスタの割り付けを示す図である。 図12Aは、第1データ格納部に格納されるデータの一例を示す図である。 図12Bは、第2データ格納部に格納されるデータの一例を示す図である。 図13は、第2の最適化処理の処理フローを示す図である。 図14は、スカラデータをSIMDレジスタの空き領域に格納する方法を説明するための図である。 図15は、スカラデータに対するSIMDレジスタの割り付けを示す図である。 図16Aは、第1データ格納部に格納されるデータの一例を示す図である。 図16Bは、第2データ格納部に格納されるデータの一例を示す図である。 図17は、SIMDデータの前半部および後半部から元のSIMDデータを復元する方法を説明するための図である。 図18は、SIMDデータの前半部および後半部から元のSIMDデータを復元する方法を説明するための図である。 図19は、SIMDデータの前半部および後半部から元のSIMDデータを復元する方法を説明するための図である。
図1に、本実施の形態の情報処理装置1のハードウエア構成図を示す。情報処理装置1は、プロセッサ10と、メモリ11と、記憶装置12と、バス13とを有する。プロセッサ10、メモリ11および記憶装置12はバス13によって接続される。プロセッサ10は例えばCPU(Central Processing Unit)である。メモリ11は例えばDRAM(Dynamic Random Access Memory)である。記憶装置12は例えばHDD(Hard Disk Drive)である。
プロセッサ10は、コア101及び102と、L(Level)1キャッシュ103及び104と、L2キャッシュ105とを有する。コア101は、1又は複数の汎用レジスタ1011と、1又は複数のSIMDレジスタ1012とを含むレジスタを有する。コア102は、1又は複数の汎用レジスタ1021と、1又は複数のSIMDレジスタ1022とを含むレジスタを有する。なお、図1においてはプロセッサ10が有するコアの数は2であるが、数に限定は無い。また、SIMDレジスタ以外のレジスタとして、汎用レジスタ以外のレジスタをさらに有してもよい。
本実施の形態の処理を実行するためのプログラムは、例えば記憶装置12に格納されており、プロセッサ10に実行されることによって図2に示すコンパイル処理部15の機能を実現する。図2に、情報処理装置1の機能ブロック図を示す。情報処理装置1は、コンパイル処理部15と、ソースコード格納部16と、第1データ格納部17と、第2データ格納部18と、オブジェクトコード格納部19とを含む。ソースコード格納部16、第1データ格納部17、第2データ格納部18およびオブジェクトコード格納部19は、例えば記憶装置12に設けられる。
コンパイル処理部15は、ソースコード解析部151と、最適化部152と、第1レジスタ割付部153と、割付解析部154と、第2レジスタ割付部155と、生成部156とを含む。
ソースコード解析部151は、ソースコード格納部16に格納されているソースコードに対して周知の字句解析および構文解析等を実行し、実行結果を最適化部152に出力する。最適化部152は、ソースコード解析部151から受け取った実行結果に基づき、アーキテクチャに依存しない最適化処理およびアーキテクチャ命令への変換処理等を実行し、実行結果を第1レジスタ割付部153に出力する。第1レジスタ割付部153は、最適化部152から受け取った実行結果に基づき、例えばカラーリング法等の公知の方法によってレジスタ割り付けを実行し、レジスタ割り付けの結果を割付解析部154に出力する。割付解析部154は、第1レジスタ割付部153から受け取った結果から、レジスタ溢れについての情報およびSIMDレジスタの空き領域についての情報を生成し、レジスタ溢れについての情報を第1データ格納部17に格納し、SIMDレジスタの空き領域についての情報を第2データ格納部18に格納する。第2レジスタ割付部155は、第1データ格納部17に格納されているデータおよび第2データ格納部18に格納されているデータを用いて処理を実行し、処理結果に基づき第1データ格納部17に格納されているデータおよび第2データ格納部18に格納されているデータを更新する。生成部156は、第1レジスタ割付部153による割り付けの結果、第1データ格納部17に格納されているデータおよび第2データ格納部18に格納されているデータを用いてオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード格納部19に格納する。
なお、ソースコード解析部151の処理、最適化部152の処理、第1レジスタ割付部153の処理および生成部156の処理はよく知られているので、本実施の形態においてはこれ以上説明しない。
図3に、第2レジスタ割付部155の機能ブロック図を示す。第2レジスタ割付部155は、第1処理部1551と、第2処理部1552とを含む。
第1処理部1551は、レジスタ割り付けについての第1の最適化処理を実行する。第2処理部1552は、レジスタ割り付けについての第2の最適化処理を実行する。
以下では、ソースコード格納部16に格納されているソースコードをオブジェクトコードに変換する際に実行されるレジスタ割り付けについて説明する。前提として、割付解析部154の処理によって第1データ格納部17にレジスタ溢れについての情報が格納されており且つ第2データ格納部18にSIMDレジスタの空き領域についての情報が格納されているとする。
図4Aに、第1データ格納部17に格納される、レジスタ溢れについての情報の一例を示す。図4Aの例では、レジスタ溢れについての情報は、データ種別と、ライブレンジ(生存区間とも呼ばれる)を示す情報と、割り付けられるレジスタの識別情報と、順番とを含む。データ種別は、第1レジスタ割付部153の処理によってはレジスタが割り付けられなかったデータの種別(本実施の形態においては、SIMD又はスカラ)を表す。ライブレンジは、そのデータのライブレンジである。順番は、データ種別が「SIMD」であるデータ(以下、SIMDデータと呼ぶ。SIMDデータはSIMD演算で使用される)を分割した場合において分割後の各データブロックに割り振られる番号である。例えばSIMDデータを2つに分割した場合、前半部のデータブロックの順番は1であり、後半部のデータブロックの順番は2である。なお、第2レジスタ割付部155の処理が実行される前の段階においては、割り付けられるレジスタの識別情報と、順番とは格納されない。
図4Bに、第2データ格納部18に格納される、SIMDレジスタの空き領域についての情報の一例を示す。図4Bの例では、SIMDレジスタの空き領域についての情報は、レジスタの識別情報と、レジスタに格納されるスカラデータ(すなわち、スカラ演算で使用されるデータ)のライブレンジを示す情報と、追加で格納されるデータのデータ種別とを含む。本実施の形態においては、各SIMDレジスタは4つの領域を持ち、スカラデータによって1つの領域が使用される。従って、第2データ格納部18に登録されているレジスタは、追加でデータが格納される前の段階においては3つの空き領域を有する。なお、第2レジスタ割付部155の処理が実行される前の段階においては、追加で格納されるデータのデータ種別は格納されない。
以下では、図5乃至図19を用いて、第2レジスタ割付部155が実行する処理について説明する。
まず、第2レジスタ割付部155は、レジスタ溢れについての情報を第1データ格納部17から読み出す(図5:ステップS1)。
第2レジスタ割付部155は、第1データ格納部17から読み出した情報に基づき、レジスタ溢れが発生したか判定する(ステップS3)。レジスタ溢れが発生していない場合(ステップS3:Noルート)、第2レジスタ割付部155によるレジスタ割り付けは行われなくてもよいので、処理は終了する。
一方、レジスタ溢れが発生していた場合(ステップS3:Yesルート)、第2レジスタ割付部155は、第1データ格納部17から読み出した情報に含まれるエントリのうち未処理のエントリを1つ特定する(ステップS5)。
第2レジスタ割付部155は、SIMDレジスタの空き領域についての情報を第2データ格納部18から読み出す(ステップS7)。
第2レジスタ割付部155は、第2データ格納部18から読み出した情報に基づき、SIMDレジスタの領域に空きがあるか判定する(ステップS9)。上で述べたように、第2データ格納部18に登録されているレジスタは、追加でデータが格納される前の段階においては3つの空き領域を有する。本実施の形態においては、SIMDデータは2つに分割され、分割後のデータブロックの各々は2つの領域を使用し、スカラデータは1つの領域を使用する。そして、3つの空き領域のうち2つの領域がSIMDデータ由来のデータブロックによって使用され、1つの領域がスカラデータに使用されるように割付けが行われる。従って、第2データ格納部18に登録されているレジスタは、SIMDデータ由来のデータブロックおよびスカラデータの両方が追加で格納されていない限り空き領域を有する。
SIMDレジスタの領域に空きが無い場合(ステップS9:Noルート)、第1レジスタ割付部153の処理によってはレジスタが割り付けられなかったデータに対して第2レジスタ割付部155の処理によってもレジスタを割り付けることができない。従って、処理は終了する。
一方、SIMDレジスタの領域に空きが有る場合(ステップS9:Yesルート)、第2レジスタ割付部155は、ステップS5において特定したエントリに含まれるデータ種別は「SIMD」であるか判定する(ステップS11)。
データ種別は「SIMD」である場合(ステップS11:Yesルート)、第2レジスタ割付部155は、第1処理部1551を呼び出し、第1処理部1551に第1の最適化処理を実行させる(ステップS13)。第1の最適化処理については、図6乃至図12Bを用いて説明する。
まず、第1処理部1551は、ステップS5において特定したエントリのSIMDデータ(以下、処理対象のSIMDデータと呼ぶ)のライブレンジを、レジスタ溢れについての情報から特定する。そして、第1処理部1551は、特定したライブレンジを含むライブレンジを有するスカラデータを格納するという条件を満たす2つのSIMDレジスタを、SIMDレジスタの空き領域についての情報において探索する(図6:ステップS21)。
図7に示すように、本実施の形態においてSIMDデータは前半部のデータブロックと後半部のデータブロックとに分割される。そのため、SIMDデータに割り付けるSIMDレジスタは2つ用意される。
第1処理部1551は、条件を満たす2つのSIMDレジスタが有るか判定する(ステップS23)。条件を満たす2つのSIMDレジスタが無い場合(ステップS23:Noルート)、処理対象のSIMDデータに対して空き領域を割り付けることはできないので、呼び出し元の処理に戻る。
一方、条件を満たす2つのSIMDレジスタが有る場合(ステップS23:Yesルート)、第1処理部1551は、処理対象のSIMDデータの前半部を、条件を満たす2つのSIMDレジスタのうち1つのSIMDレジスタの空き領域に格納する(ステップS25)。
ここで、図8及び図9を用いて、処理対象のSIMDデータの前半部をSIMDレジスタの空き領域に格納する方法について説明する。
図8(a)において、%f2レジスタにおける、ハッチングが付された図形はスカラデータを表す。まず、図8(a)に示すように、%f2レジスタに対して仮想的に%f2レジスタが連結され、図8(b)に示すような、8つの領域を有するレジスタが仮想的に生成される。図8(b)において、左から1番目の領域のスカラデータと、左から5番目のスカラデータは同じである。そして、図8(b)に示したレジスタ内のデータが、左方向に2領域分シフトされる。すると、図8(b)において左から5番目の領域のデータは、左から3番目の領域に移動するので、図8(c)に示す%f2レジスタ801が生成される。
この%f2レジスタ801に対して仮想的に処理対象のSIMDデータが連結され、図9(a)に示すような、8つの領域を有するレジスタが仮想的に生成される。そして、図9(a)に示したレジスタ内のデータが、左方向に2領域分シフトされる。すると、図9(a)において左から3番目の領域のデータは左から1番目の領域に移動し且つ左から5番目および6番目のデータは左から3番目および4番目に移動するので、図9(b)に示す%f2レジスタ901が生成される。以上により、処理対象のSIMDデータの前半部がSIMDレジスタの空き領域に格納される。
但し、SIMDレジスタの空き領域にデータを格納する方法は、図8及び図9を用いて説明した方法以外の方法であってもよい。
図6の説明に戻り、第1処理部1551は、処理対象のSIMDデータの前半部に割り付けたレジスタ(図8及び図9の例では、%f2レジスタ)の識別情報を第1データ格納部17に格納する(ステップS27)。
第1処理部1551は、処理対象のSIMDデータの前半部の順番(本実施の形態においては「1」)を第1データ格納部17に格納する(ステップS29)。
第1処理部1551は、処理対象のSIMDデータの後半部を、条件を満たす2つのSIMDレジスタのうち残りのSIMDレジスタの空き領域に格納する(ステップS31)。処理対象のSIMDデータの後半部は、図8及び図9を用いて説明した方法と同様の方法によってSIMDレジスタの空き領域に格納されるので、詳細な説明を省略する。ここでは、図10に示すように、%f4レジスタの空き領域に処理対象のSIMDデータの後半部が格納されたとする。
従って、SIMDレジスタは全体として図11に示すような状態になる。図11においては、ハッチングが付された部分のうち処理対象のSIMDデータの前半部および後半部ではない部分は、第1レジスタ割付部153によるレジスタ割り付けによって割り付けが行われた部分に相当する。本実施の形態においては、スカラデータが格納された領域の直後の領域は、新たにスカラデータを格納することができるように空き領域のままにされる。
第1処理部1551は、処理対象のSIMDデータの後半部に割り付けたレジスタ(図10の例では、%f4レジスタ)の識別情報を第1データ格納部17に格納する(ステップS33)。
第1処理部1551は、処理対象のSIMDデータの後半部の順番(本実施の形態においては「2」)を第1データ格納部17に格納する(ステップS35)。そして呼び出し元の処理に戻る。
以上のような処理によって、第1データ格納部17には、例えば図12Aに示すようなデータが格納される。図12Aにおいては、SIMDデータに割り付けられるレジスタの識別情報として「%f2」および「%f4」が格納され、順番として「1,2」が格納される。また、第2データ格納部18には、例えば図12Bに示すようなデータが格納される。図12Bにおいては、%f2レジスタおよび%f4レジスタのエントリに、追加で格納されるデータのデータ種別として「Simd」が格納されている。
図5の説明に戻り、第1の最適化処理が終了すると、ステップS19の処理に移行する。一方、データ種別は「SIMD」ではない場合(ステップS11:Noルート)、第2レジスタ割付部155は、データ種別は「スカラ」であるか判定する(ステップS15)。
データ種別は「スカラ」ではない場合(ステップS15:Noルート)、ステップS19の処理に移行する。一方、データ種別は「スカラ」である場合(ステップS15:Yesルート)、第2レジスタ割付部155は、第2処理部1552を呼び出し、第2処理部1552に第2の最適化処理を実行させる(ステップS17)。第2の最適化処理については、図13乃至図15を用いて説明する。
まず、第2処理部1552は、ステップS5において特定したエントリのスカラデータ(以下、処理対象のスカラデータと呼ぶ)のライブレンジを、レジスタ溢れについての情報から特定する。そして、第2処理部1552は、特定したライブレンジを含むライブレンジを有するスカラデータを格納するという条件を満たすSIMDレジスタを、SIMDレジスタの空き領域についての情報において探索する(図13:ステップS41)。
第2処理部1552は、条件を満たすSIMDレジスタが有るか判定する(ステップS43)。条件を満たすSIMDレジスタが無い場合(ステップS43:Noルート)、処理対象のスカラデータに対して空き領域を割り付けることはできないので、呼び出し元の処理に戻る。
一方、条件を満たすSIMDレジスタが有る場合(ステップS43:Yesルート)、第2処理部1552は、処理対象のスカラデータを、条件を満たすSIMDレジスタの空き領域に格納する(ステップS45)。
例えば図14(a)に示すように、%f6レジスタにスカラデータが既に格納されている状態において、新たにスカラデータを%f6レジスタに格納するケースを考える。このケースにおいては、図14(b)に示すように、既に格納されているスカラデータの直後の空き領域に新たにスカラデータが格納される。このようにすることで、残りの2領域にSIMDデータの前半部又は後半部を格納することができるようになる。
従って、SIMDレジスタは全体として図15に示すような状態になる。図15においては、ハッチングが付された部分のうち処理対象のスカラデータではない部分は、第1レジスタ割付部153によるレジスタ割り付けによって割り付けが行われた部分に相当する。本実施の形態においては、左から3番目および4番目の領域は、新たにSIMDデータを格納することができるように空き領域のままにされる。
図13の説明に戻り、第2処理部1552は、処理対象のスカラデータに割り付けたレジスタ(図14の例では、%f6レジスタ)の識別情報を第1データ格納部17に格納する(ステップS47)。そして呼び出し元の処理に戻る。
以上のような処理によって、第1データ格納部17には、例えば図16Aに示すようなデータが格納される。図16Aにおいては、スカラデータに割り付けられるレジスタの識別情報として「%f6」が格納される。また、第2データ格納部18には、例えば図16Bに示すようなデータが格納される。図16Bにおいては、%f6レジスタのエントリに、追加で格納されるデータのデータ種別として「Scalar」が格納されている。
図5の説明に戻り、第2の最適化処理が終了すると、ステップS19の処理に移行する。第2レジスタ割付部155は、未処理のエントリが有るか判定する(ステップS19)。未処理のエントリが有る場合(ステップS19:Yesルート)、ステップS5の処理に戻る。一方、未処理のエントリが無い場合(ステップS19:Noルート)、処理は終了する。
以上のような処理を実行すれば、より多くのデータをレジスタに割り付けられるので、プロセッサ10からメモリ11へのアクセスを削減し、プログラムの実行性能を高めることができるようになる。
図17乃至図19を用いて、SIMDデータの前半部および後半部から元のSIMDデータを復元する方法について説明する。ここでは、図11に示したように、%f2レジスタが前半部に割り付けられ、%f4レジスタが後半部に割り付けられたとする。
まず、図17(a)に示すように、%f2レジスタに対して仮想的に%f4レジスタが連結され、図17(b)に示すような、8つの領域を有するレジスタが仮想的に生成される。そして、図17(b)に示したレジスタ内のデータが、左方向に2領域分シフトされる。すると、図17(c)に示す%f2レジスタ1701が生成される。
さらに、図18(a)に示すように、定義のSIMDレジスタ(ここでは、元々SIMDデータに割り付けるはずだったSIMDレジスタ)に対して仮想的に%f2レジスタ1701が連結され、図18(b)に示すような、8つの領域を有するレジスタが仮想的に生成される。そして、図18(b)に示したレジスタ内のデータが、左方向に2領域分シフトされる。すると、図18(c)に示す定義のSIMDレジスタ1801が生成される。一方で、図17を用いて説明した処理をSIMDデータの後半部に対しても実行することで、%f4レジスタ1802が生成される。
そして、定義のSIMDレジスタ1801に対して仮想的に%f4レジスタ1802が連結され、図19(a)に示すような、8つの領域を有するレジスタが仮想的に生成される。そして、図19(a)に示したレジスタ内のデータが、左方向に2領域分シフトされる。すると、図19(b)に示す定義のSIMDレジスタ1901が生成される。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置1の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
また、本実施の形態におけるSIMDレジスタは4つの領域を有するが、領域の数に限定は無い。また、上で述べた例では、SIMDデータを分割することで得られるデータのブロックの数は2であるが、数に限定は無い。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態の第1の態様に係る情報処理装置は、(A)スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定する特定部と、(B)特定部により特定された第1のSIMDレジスタの空き領域を、第1のデータに割り付ける割付部とを有する。
これにより、スカラデータに割り付けられたSIMDレジスタが有効活用され、レジスタ溢れの発生が抑制されるので、プログラムの実行性能を向上させることができるようになる。また、生存区間が第1のデータの生存区間の少なくとも一部と共通するデータに割り付けられた第1のSIMDレジスタを第1のデータに割り付けることを防げるようになる。
また、上記割付部は、(b1)第1のデータがSIMDデータである場合、第1のデータを複数のデータブロックに分割し、(b2)特定部により特定された複数の第1のSIMDレジスタの各々の空き領域を、複数のデータブロックのいずれかに割り付けてもよい。第1のSIMDレジスタはスカラデータに割り付けられているため、1つの第1のSIMDレジスタが第1のデータを格納できない可能性がある。従って、上で述べたようにすれば、SIMDデータに対する割り付けを適切に行えるようになる。
また、上記割付部は、(b3)第1のデータがスカラデータである場合、第1のSIMDレジスタにおいてスカラデータが格納されている領域の直後の空き領域を、第1のデータに割り付けてもよい。これにより、SIMDデータに対する割り付けを邪魔することがないようにスカラデータに対する割り付けを行えるようになる。
本実施の形態の第2の態様に係るコンパイル方法は、(C)スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMDレジスタを特定し、(D)特定された第1のSIMDレジスタの空き領域を、第1のデータに割り付ける処理を含む。
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定する特定部と、
前記特定部により特定された前記第1のSIMDレジスタの空き領域を、前記第1のデータに割り付ける割付部と、
を有する情報処理装置。
(付記2)
前記割付部は、
前記第1のデータがSIMDデータである場合、前記第1のデータを複数のデータブロックに分割し、
前記特定部により特定された複数の前記第1のSIMDレジスタの各々の空き領域を、前記複数のデータブロックのいずれかに割り付ける、
付記1記載の情報処理装置。
(付記3)
前記割付部は、
前記第1のデータがスカラデータである場合、前記第1のSIMDレジスタにおいて前記スカラデータが格納されている領域の直後の空き領域を、前記第1のデータに割り付ける、
付記1又は2記載の情報処理装置。
(付記4)
プロセッサに、
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定し、
特定された前記第1のSIMDレジスタの空き領域を、前記第1のデータに割り付ける、
処理を実行させるコンパイルプログラム。
(付記5)
プロセッサが、
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定し、
特定された前記第1のSIMDレジスタの空き領域を、前記第1のデータに割り付ける、
処理を実行するコンパイル方法。
1 情報処理装置 10 プロセッサ
11 メモリ 12 記憶装置
13 バス 15 コンパイル処理部
16 ソースコード格納部 17 第1データ格納部
18 第2データ格納部 19 オブジェクトコード格納部
101,102 コア 103,104 L1キャッシュ
105 L2キャッシュ 1011,1021 汎用レジスタ
1012,1022 SIMDレジスタ
151 ソースコード解析部 152 最適化部
153 第1レジスタ割付部 154 割付解析部
155 第2レジスタ割付部 156 生成部
1551 第1処理部 1552 第2処理部

Claims (5)

  1. スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定する特定部と、
    前記特定部により特定された前記第1のSIMDレジスタの空き領域を、前記第1のデータに割り付ける割付部と、
    を有する情報処理装置。
  2. 前記割付部は、
    前記第1のデータがSIMDデータである場合、前記第1のデータを複数のデータブロックに分割し、
    前記特定部により特定された複数の前記第1のSIMDレジスタの各々の空き領域を、前記複数のデータブロックのいずれかに割り付ける、
    請求項1記載の情報処理装置。
  3. 前記割付部は、
    前記第1のデータがスカラデータである場合、前記第1のSIMDレジスタにおいて前記スカラデータが格納されている領域の直後の空き領域を、前記第1のデータに割り付ける、
    請求項1又は2記載の情報処理装置。
  4. プロセッサに、
    スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定し、
    特定された前記第1のSIMDレジスタの空き領域を、前記第1のデータに割り付ける、
    処理を実行させるコンパイルプログラム。
  5. プロセッサが、
    スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第1のデータの生存区間を含むという条件を満たす第1のSIMD(Single Instruction Multiple Data)レジスタを特定し、
    特定された前記第1のSIMDレジスタの空き領域を、前記第1のデータに割り付ける、
    処理を実行するコンパイル方法。
JP2016081847A 2016-04-15 2016-04-15 コンパイル方法、コンパイルプログラム及び情報処理装置 Active JP6627630B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016081847A JP6627630B2 (ja) 2016-04-15 2016-04-15 コンパイル方法、コンパイルプログラム及び情報処理装置
US15/447,540 US10114648B2 (en) 2016-04-15 2017-03-02 Compile method, non-transitory computer-readable recording medium storing compile program, and information processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016081847A JP6627630B2 (ja) 2016-04-15 2016-04-15 コンパイル方法、コンパイルプログラム及び情報処理装置

Publications (2)

Publication Number Publication Date
JP2017191543A JP2017191543A (ja) 2017-10-19
JP6627630B2 true JP6627630B2 (ja) 2020-01-08

Family

ID=60038808

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016081847A Active JP6627630B2 (ja) 2016-04-15 2016-04-15 コンパイル方法、コンパイルプログラム及び情報処理装置

Country Status (2)

Country Link
US (1) US10114648B2 (ja)
JP (1) JP6627630B2 (ja)

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5437045A (en) * 1992-12-18 1995-07-25 Xerox Corporation Parallel processing with subsampling/spreading circuitry and data transfer circuitry to and from any processing unit
US5450603A (en) * 1992-12-18 1995-09-12 Xerox Corporation SIMD architecture with transfer register or value source circuitry connected to bus
US5758176A (en) * 1994-09-28 1998-05-26 International Business Machines Corporation Method and system for providing a single-instruction, multiple-data execution unit for performing single-instruction, multiple-data operations within a superscalar data processing system
US5890222A (en) * 1995-01-04 1999-03-30 International Business Machines Corporation Method and system for addressing registers in a data processing unit in an indirect addressing mode
US5887183A (en) * 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US6135650A (en) * 1995-12-22 2000-10-24 Sun Microsystems, Inc. Method and system for wrapper routine optimization
JPH10293691A (ja) 1997-04-18 1998-11-04 Hitachi Ltd レジスタ割り付け方法
US6839828B2 (en) * 2001-08-14 2005-01-04 International Business Machines Corporation SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode
US7631025B2 (en) * 2001-10-29 2009-12-08 Intel Corporation Method and apparatus for rearranging data between multiple registers
US7975128B2 (en) * 2006-01-20 2011-07-05 Panasonic Corporation Apparatuses and programs for implementing a forwarding function
US20080005722A1 (en) 2006-06-28 2008-01-03 Hidenori Matsuzaki Compiling device, compiling method and recording medium
US9557917B2 (en) * 2014-11-10 2017-01-31 International Business Machines Corporation Conditional stack frame allocation

Also Published As

Publication number Publication date
US20170300324A1 (en) 2017-10-19
US10114648B2 (en) 2018-10-30
JP2017191543A (ja) 2017-10-19

Similar Documents

Publication Publication Date Title
KR101360512B1 (ko) 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당
JP4339907B2 (ja) マルチプロセッサ向け最適コード生成方法及びコンパイル装置
JP3901181B2 (ja) プログラム並列化装置及びその方法並びにプログラム
JP3901180B2 (ja) プログラム並列化装置及びその方法並びにプログラム
JP5689366B2 (ja) ゾーン10進数形式の変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにその最適化装置及びコンピュータ・プログラム
JP2010009495A (ja) 情報処理装置、プログラム処理方法及びコンピュータプログラム
JP2019049843A (ja) 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置
US8266416B2 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
WO2013105158A1 (ja) データ依存解析支援装置、データ依存解析支援プログラム、及びデータ依存解析支援方法
JP2006018447A (ja) プログラム並列化装置及びその方法並びにプログラム
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
US11226798B2 (en) Information processing device and information processing method
JP6627630B2 (ja) コンパイル方法、コンパイルプログラム及び情報処理装置
US9940267B2 (en) Compiler global memory access optimization in code regions using most appropriate base pointer registers
JP5278538B2 (ja) コンパイルシステム、コンパイル方法およびコンパイルプログラム
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP2012103923A (ja) コンパイラ装置、コンパイル方法及びコンパイラプログラム
CN113296788A (zh) 指令调度方法、装置、设备、存储介质及程序产品
JP7035751B2 (ja) コード変換装置、コード変換方法、及びコード変換プログラム
JP4293223B2 (ja) プログラム並列化装置及びその方法並びにプログラム
US20200409746A1 (en) Information processing apparatus and recording medium
JP7302728B2 (ja) ループアンローリング処理装置、方法およびプログラム
JP7302727B2 (ja) ループアンローリング処理装置、方法およびプログラム
US20230385040A1 (en) Splitting vector processing loops with an unknown trip count
KR100912114B1 (ko) 디지털 신호처리 프로세서에서 효과적인 데이터 전송을위한 메모리 운용 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191023

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: 20191105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191118

R150 Certificate of patent or registration of utility model

Ref document number: 6627630

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150