JP6790646B2 - コンパイル装置、コンパイル方法、および、コンパイルプログラム - Google Patents
コンパイル装置、コンパイル方法、および、コンパイルプログラム Download PDFInfo
- Publication number
- JP6790646B2 JP6790646B2 JP2016184452A JP2016184452A JP6790646B2 JP 6790646 B2 JP6790646 B2 JP 6790646B2 JP 2016184452 A JP2016184452 A JP 2016184452A JP 2016184452 A JP2016184452 A JP 2016184452A JP 6790646 B2 JP6790646 B2 JP 6790646B2
- Authority
- JP
- Japan
- Prior art keywords
- vector
- variable
- operations
- instruction
- executes
- 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
Images
Description
<概要>
本発明に係るコンパイルプログラム7は、配列演算を実行するソースプログラム1に対して、ベクトル演算を利用したオブジェクトプログラム2を生成する。
図6は、本実施の形態のコンパイルプログラム7の構成を示す図である。コンパイルプログラム7は、入力されたソースプログラム1を解析してベクトル化および配列データのパックができるか判定する解析部71、解析結果に基づき配列演算処理部をベクトル化するベクトル化実行部72を包含する。コンパイルプログラム7は、その他、一般のコンパイラが備える構文解析、最適化、オブジェクトプログラム2の生成機能も備える。
次に、コンパイルプログラム7の動作について説明する。
ベクトル化のために、マスク生成部721は、IF文の条件式から、先ず、THEN節のベクトルマスクを生成するマスク生成命令(VFMK)と、そのベクトルマスクを論理否定してELSE節のベクトルマスクを生成する論理否定命令(NEGM)を生成する。
ベクトル化されたSIMD命令は、パックされたデータを演算対象とする。データをパックするため、ベクトルロード命令生成部722は、THEN節及びELSE節の一方(例えば、THEN節)で演算対象となるベクトル変数群の入力変数の各要素をベクトルレジスタの各要素の上位32ビットにロードする上位32ビットベクトルロード命令(VLDU)を生成する。さらに、ベクトルロード命令生成部722は、THEN節及びELSE節の他方(例えば、ELSE節)で演算対象となるベクトル変数群の入力変数の各要素をベクトルレジスタの各要素の下位32ビットにロードする下位32ビットベクトルロード命令(VLDL)を生成する。
マスク付きベクトルSIMD命令生成部723は、パックしたデータに対して演算を実行する為、THEN節とELSE節のベクトルマスクを設定したマスク付きベクトルSIMD命令を、所定の順序、例えばソースプログラム1に記載されていた順序、で生成する。
演算によって得られたパックされた結果データをメモリに保存するため、ベクトルストア命令生成部724は、ベクトルストア命令を生成する。上位32ビットベクトルストア命令(VSTU)は、演算結果を格納するベクトルレジスタ上の各要素の上位32ビットを、THEN節、および、ELSE節の一方(例えば、THEN節)の配列変数群の出力配列変数に格納する。下位32ビットベクトルストア命令(VSTL)は、演算結果を格納するベクトルレジスタ上の各要素の下位32ビットを、THEN節、および、ELSE節の他方(例えば、ELSE節)の配列変数群の出力配列変数に格納する。
また、ベクトルストア命令生成部724は、サブセット外に属する減算を実行するマスク付ベクトル浮動小数点減算SIMD命令の、ELSE側(下位32ビット)のベクトルストア命令を生成していない。
本実施の形態にかかるコンパイルプログラム7は、ソースプログラム1から生成されるオブジェクトプログラム2の命令数を削減し、実行性能を向上させる。その理由は、ベクトル化実行部72が、制御文のTHEN節とELSE節で同一演算を行っている場合、両者を1つのSIMD命令で実行させるようにオブジェクトプログラム2を生成するからである。
・パックをしていないときの命令コスト:
VLD + VFMK + VLD + VLD + VFADD + VST + NEGM + VLD + VLD + VFADD + VST
・パックをしたとき(SIMD命令を用いたとき)の命令コスト:
VLD + VFMK + NEGM + VLDU + VLDL + VLDU + VLDL + VFADD.P + VSTU + VSTL
ここで、命令コストの点で、VLD = VLDU = VLDL 、VST = VSTU = VSTL、 VFADD = VFADD.P と仮定するとコストの差は、VFADDとなる。従って、コンパイルプログラム7は、図10が示すような、演算対象となる配列変数群のデータをパックしたオブジェクトプログラム2を生成することで、浮動小数点加算命令分の演算コストを減らすことができる。
上記では、マスク付きベクトルSIMD命令は、上位32ビット用のベクトルマスクと、下位32ビット用のベクトルマスク、例えば図10c)のvmreg1、および、vmreg2を別々入力した。マスク付きベクトルSIMD命令は、上位32ビット用のベクトルマスク部分と、下位32ビット用のベクトルマスク部分を連結したような1つのベクトルマスクを入力しても良い。
図12は、本実施の形態にかかるコンパイル装置8の構成を示す図である。コンパイル装置8は、解析部71とベクトル化実行部72とを備える。
2 オブジェクトプログラム
7 コンパイルプログラム
8 コンパイル装置
71 解析部
72 ベクトル化実行部
600 コンピュータ装置
610 プロセッサ
620 外部記憶装置
630 主記憶部
640 バス
711 制御文を含む配列演算認識部
712 ベクトル化判定部
713 配列演算処理部の形式解析部
721 マスク生成部
722 ベクトルロード命令生成部
723 マスク付きベクトルSIMD命令生成部
724 ベクトルストア命令生成部
Claims (10)
- 配列変数の各要素について、判定配列変数の対応する要素の値に基づいて、第1と第2の変数群の何れかを選択し、選択した前記変数群を対象に演算を実行するプログラム部分を検出する解析手段と、
1)ベクトルレジスタの各要素の第1と第2の部分に、第1と第2の前記変数群の対応する入力配列変数の各要素値をロードするベクトルロード命令と、2)前記判定配列変数の要素の値に基づいて、前記ベクトルレジスタの要素において、第1と第2の前記部分の何れについて前記演算を実行するかを指示するベクトルマスクを生成するマスク生成命令と、3)前記ベクトルマスクの指示に従って、前記ベクトルレジスタの各要素の第1と第2の前記部分の何れか一方で前記演算を実行するマスク付ベクトル演算命令と、を生成するベクトル化実行手段と、を備えるコンパイル装置。 - 前記解析手段は、第1と第2の前記変数群の何れかを選択し、選択した前記変数群を対象に、何れを選択した場合でも同一の順序で、複数の前記演算を実行する部分を検出し、
前記ベクトル化実行手段は、前記複数の前記演算の各々を実行する前記マスク付ベクトル命令を前記同一の順序で生成する請求項1のコンパイル装置。 - 前記解析手段は、第1と第2の前記変数群の何れかを選択し、選択した前記変数群を対象に、いずれを選択した場合でも同一の前記演算の組を実行する部分を検出し、
前記ベクトル化実行手段は、前記演算の前記組に属する各々の前記演算を実行する前記マスク付ベクトル命令を所定基準に基づいて決定した順序で生成する請求項1乃至請求項2の何れか一項のコンパイル装置。 - 前記解析手段は、第1と第2の前記変数群の何れかを選択し、1)前記第1の前記変数群を選択した場合、前記第1の前記変数群を対象に前記演算の組を実行し、2)前記第2の前記変数群を選択した場合、前記第2の前記変数群を対象に、前記演算の前記組のサブセットを実行する部分を検出し、
前記ベクトル化実行手段は、3a)前記ベクトルマスクを用いて、前記演算の前記組の前記サブセットに属する各々の前記演算を実行するマスク付ベクトル演算命令と、3b)前記ベクトルレジスタの第2の前記部分について前記演算を実行しないことを示すように変更された前記ベクトルマスクを用いて、前記演算の前記組の前記サブセット外の各々の前記演算を実行するマスク付ベクトル演算命令と、を所定基準に基づいて決定した順序で生成する請求項1乃至請求項3の何れか一項のコンパイル装置。 - 前記ベクトルレジスタの第1と第2の前記部分は、前記ベクトルレジスタの上位半分と下位半分である、請求項1乃至請求項4の何れか1項のコンパイル装置。
- 配列変数の各要素について、判定配列変数の対応する要素の値に基づいて、第1と第2の変数群の何れかを選択し、選択した前記変数群を対象に演算を実行するプログラム部分を検出する解析処理と、
1)ベクトルレジスタの各要素の第1と第2の部分に、第1と第2の前記変数群の対応する入力配列変数の各要素値をロードするベクトルロード命令と、2)前記判定配列変数の要素の値に基づいて、前記ベクトルレジスタの要素において、第1と第2の前記部分の何れについて前記演算を実行するかを指示するベクトルマスクを生成するマスク生成命令と、3)前記ベクトルマスクの指示に従って、前記ベクトルレジスタの各要素の第1と第2の前記部分の何れか一方で前記演算を実行するマスク付ベクトル演算命令と、を生成するベクトル化実行処理と、をコンピュータに実行させるコンパイルプログラム。 - 第1と第2の前記変数群の何れかを選択し、選択した前記変数群を対象に、何れを選択した場合でも同一の順序で、複数の前記演算を実行する部分を検出する前記解析処理と、
前記複数の前記演算の各々を実行する前記マスク付ベクトル命令を前記同一の順序で生成する前記ベクトル化実行処理と、をコンピュータに実行させる請求項6のコンパイルプログラム。 - 第1と第2の前記変数群の何れかを選択し、選択した前記変数群を対象に、いずれを選択した場合でも同一の前記演算の組を実行する部分を検出する前記解析処理と、
前記演算の前記組に属する各々の前記演算を実行する前記マスク付ベクトル命令を所定基準に基づいて決定した順序で生成する前記ベクトル化実行処理と、をコンピュータに実行させる、請求項6乃至請求項7の何れか一項のコンパイルプログラム。 - 第1と第2の前記変数群の何れかを選択し、1)前記第1の前記変数群を選択した場合、前記第1の前記変数群を対象に前記演算の組を実行し、2)前記第2の前記変数群を選択した場合、前記第2の前記変数群を対象に、前記演算の前記組のサブセットを実行する部分を検出する前記解析処理と、
3a)前記ベクトルマスクを用いて、前記演算の前記組の前記サブセットに属する各々の前記演算を実行するマスク付ベクトル演算命令と、3b)前記ベクトルレジスタの第2の前記部分について前記演算を実行しないことを示すように変更された前記ベクトルマスクを用いて、前記演算の前記組の前記サブセット外の各々の前記演算を実行するマスク付ベクトル演算命令と、を所定基準に基づいて決定した順序で生成する前記ベクトル化実行処理とを、コンピュータに実行させる請求項6乃至請求項8の何れか一項のコンパイルプログラム。 - 配列変数の各要素について、判定配列変数の対応する要素の値に基づいて、第1と第2の変数群の何れかを選択し、選択した前記変数群を対象に演算を実行するプログラム部分を検出し、
1)ベクトルレジスタの各要素の第1と第2の部分に、第1と第2の前記変数群の対応する入力配列変数の各要素値をロードするベクトルロード命令と、2)前記判定配列変数の要素の値に基づいて、前記ベクトルレジスタの要素において、第1と第2の前記部分の何れについて前記演算を実行するかを指示するベクトルマスクを生成するマスク生成命令と、3)前記ベクトルマスクの指示に従って、前記ベクトルレジスタの各要素の第1と第2の前記部分の何れか一方で前記演算を実行するマスク付ベクトル演算命令と、を生成する、コンパイル方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016184452A JP6790646B2 (ja) | 2016-09-21 | 2016-09-21 | コンパイル装置、コンパイル方法、および、コンパイルプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016184452A JP6790646B2 (ja) | 2016-09-21 | 2016-09-21 | コンパイル装置、コンパイル方法、および、コンパイルプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2018049461A JP2018049461A (ja) | 2018-03-29 |
JP6790646B2 true JP6790646B2 (ja) | 2020-11-25 |
Family
ID=61767620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016184452A Active JP6790646B2 (ja) | 2016-09-21 | 2016-09-21 | コンパイル装置、コンパイル方法、および、コンパイルプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6790646B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7115563B2 (ja) * | 2018-12-07 | 2022-08-09 | 日本電気株式会社 | コンパイル装置、コンパイル方法、及び制御プログラム |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01271874A (ja) * | 1988-04-22 | 1989-10-30 | Nec Corp | ベクトル演算制御方式 |
JPH04349570A (ja) * | 1991-05-28 | 1992-12-04 | Nec Corp | 情報処理装置 |
JPH05120323A (ja) * | 1991-10-28 | 1993-05-18 | Nec Software Ltd | If文下ベクトル演算最適化方式 |
US9411593B2 (en) * | 2013-03-15 | 2016-08-09 | Intel Corporation | Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks |
-
2016
- 2016-09-21 JP JP2016184452A patent/JP6790646B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2018049461A (ja) | 2018-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Stephens et al. | The ARM scalable vector extension | |
Ho et al. | Exploiting half precision arithmetic in Nvidia GPUs | |
Ainsworth et al. | Software prefetching for indirect memory accesses | |
US6113650A (en) | Compiler for optimization in generating instruction sequence and compiling method | |
TWI733798B (zh) | 在執行向量操作時管理位址衝突的設備及方法 | |
US11422781B1 (en) | Generation of vector codes for tensor convolutions | |
CN114416045A (zh) | 自动生成算子的方法和装置 | |
JP6790646B2 (ja) | コンパイル装置、コンパイル方法、および、コンパイルプログラム | |
US9158511B2 (en) | Scalable partial vectorization | |
Zheng et al. | Optimizing memory-access patterns for deep learning accelerators | |
Nawaz et al. | Recursive variable expansion: A loop transformation for reconfigurable systems | |
Najjar et al. | ROCCC 2.0 | |
Cong et al. | Compilation and architecture support for customized vector instruction extension | |
Zhao et al. | Performance evaluation of NPB and SPEC CPU2006 on various SIMD extensions | |
JP7115563B2 (ja) | コンパイル装置、コンパイル方法、及び制御プログラム | |
JPH04307624A (ja) | ループ最適化方法及び装置 | |
Sun et al. | Vectorizing programs with IF-statements for processors with SIMD extensions | |
Rohde et al. | Socao: Source-to-source opencl compiler for intel-altera fpgas | |
JP2019067117A (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
Reznikova | Smart Tiling for Program Optimization and Parallelization [C] | |
US11829321B2 (en) | General-purpose systolic array | |
Mego et al. | Instruction mapping techniques for processors with very long instruction word architectures | |
Tsuji et al. | Performance tuning of the Helmholtz matrix-vector product kernel in the computational fluid dynamics solver Nek5000/RS for the A64FX processor | |
JP3817073B2 (ja) | メモリアクセス処理装置、メモリアクセス処理システム、および記録媒体 | |
Liu et al. | A New Algorithm to Exploit Superword Level Parallelism |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190820 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20200610 |
|
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: 20201006 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20201019 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6790646 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |