JP7115563B2 - コンパイル装置、コンパイル方法、及び制御プログラム - Google Patents
コンパイル装置、コンパイル方法、及び制御プログラム Download PDFInfo
- Publication number
- JP7115563B2 JP7115563B2 JP2020559760A JP2020559760A JP7115563B2 JP 7115563 B2 JP7115563 B2 JP 7115563B2 JP 2020559760 A JP2020559760 A JP 2020559760A JP 2020559760 A JP2020559760 A JP 2020559760A JP 7115563 B2 JP7115563 B2 JP 7115563B2
- Authority
- JP
- Japan
- Prior art keywords
- vector
- data
- word
- instruction
- register
- 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 74
- 238000010586 diagram Methods 0.000 description 24
- 238000004458 analytical method Methods 0.000 description 15
- 238000005457 optimization Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 5
- 230000003252 repetitive effect Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 2
- 238000012856 packing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Description
図1は、第1実施形態のコンパイル装置の一例を示すブロック図である。図1においてコンパイル装置10は、コンパイル処理部11を有している。コンパイル処理部11は、原始プログラム(ソースプログラム)を、オブジェクトコードに変換する。この原始プログラムは、(1/2)kワード型の配列aの要素a[i]、要素a[i+1]、及び要素a[i+2k]をオペランドとして含む算術計算を実行する「計算処理」を添え字iの値を1つずつずらしながら繰り返し実行するためのプログラムである。kは自然数であり、添え字iは0以上の整数である。上記の算術計算は、要素a[i]と要素a[i+1]とが配列内で隣接しているので、配列の「隣接要素計算」を含んでいる。以下では、上記の繰り返し実行される計算処理を、「繰り返し計算処理」と呼ぶことがある。
第2実施形態は、より具体的な実施形態に関する。
図2は、第2実施形態のコンパイル装置の一例を示すブロック図である。図2においてコンパイル装置20は、コンパイル処理部21を有する。コンパイル処理部21は、第1実施形態のコンパイル処理部11と同様に、原始プログラム(ソースプログラム)を、オブジェクトコードに変換する。コンパイル処理部21は、解析部22と、ベクトル化実行部23とを有している。
(第1条件)配列が(1/2)kワード型であること。
(第2条件)1回の繰り返しにおいて、つまり、上記「計算処理」において、計算対象となる配列要素がすべて隣接していること。
(第3条件)1回の繰り返しにおいて、つまり、上記「計算処理」において、計算に用いられる配列要素の数が「m×2k+1」個であること。ただし、mは、任意の自然数である。
「VSRD %v0,%v1,%v2,S」
ここで、%v0は、演算結果を書き込む1ワードベクトルレジスタを意味する。%v1,%v2は、演算のオペランドとなるベクトルレジスタを意味する。Sは、シフト量を指定する0から(2ワード-1)までのスカラ値である。すなわち、VSRD命令によれば、オペランドである2つのベクトルレジスタを合わせて2ワードデータ(つまり一連のデータ列)とし、該2ワードデータがSだけ右シフト演算され、得られた2ワードデータの下位側の1ワードの値が演算結果としてベクトルレジスタに書き込まれる。
以上の構成を有するコンパイル装置20の処理動作の一例について説明する。
図4は、第2実施形態のコンパイル装置による、ベクトル化技法を適用可能か否かについての解析処理の一例を示すフローチャートである。
図5は、第2実施形態のコンパイル装置によるベクトル化技法の一例を示すフローチャートである。図5の処理フローは、解析部22によって原始プログラムに対して第2実施形態のベクトル化技法を適用することを決定された場合にスタートする。
図14は、コンパイル装置のハードウェア構成例を示す図である。図14においてコンパイル装置100は、プロセッサ101と、メモリ102とを有している。第1実施形態及び第2実施形態のコンパイル装置10,20のコンパイル処理部11,21は、プロセッサ101がメモリ102に記憶されたプログラムを読み込んで実行することにより実現されてもよい。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンパイル装置10,20に供給することができる。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンパイル装置10,20に供給されてもよい。
11,21 コンパイル処理部
12 ベクトルロード命令生成部
13 ベクトルシフトダブル命令生成部
22 解析部
22A ループ検出部
22B ベクトル化可否判定部
22C 最適化適用可否判定部
23 ベクトル化実行部
23A ベクトル長算出命令生成部
23B パックドベクトル演算命令生成部
23C ベクトルストア命令生成部
Claims (8)
- (1/2)kワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素[i+2k]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル処理手段を具備し、
前記コンパイル処理手段は、
前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)kワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2k]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成するベクトルロード命令生成手段と、
前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)kワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成するベクトルシフト命令生成手段と、
を含む、
コンパイル装置。 - 前記コンパイル処理手段は、前記ベクトルロード命令生成手段が前記第1ベクトルロード命令及び前記第2ベクトルロード命令を生成する処理を開始し且つ前記ベクトルシフト命令生成手段が前記第1ベクトルシフトダブル命令を生成する処理を開始する条件が満たされているか否かを判定する条件判定手段をさらに含み、
前記条件は、各計算処理において計算対象となるすべての要素の添え字が連続しているという条件を含む、
請求項1記載のコンパイル装置。 - 前記コンパイル処理手段は、前記計算処理がN(Nは2以上の自然数)回繰り返される場合、前記N×(1/2)k及びシステムにて許容されている最大ベクトル長のうちで小さい方をベクトル長として選択するためのベクトル長算出命令を生成するベクトル長算出命令生成手段をさらに具備し、
前記ベクトルロード命令生成手段は、それぞれ前記ベクトル長を有する前記第1ベクトルデータ及び前記第2ベクトルデータをロードするための前記第1ベクトルロード命令及び前記第2ベクトルロード命令を生成する、
請求項1又は2に記載のコンパイル装置。 - 前記ベクトルシフト命令生成手段は、前記配列Aが1/2ワード型である場合、前記一連のデータ列を1/2ワード分シフトさせて得られたデータ列の一部を、前記第3ベクトルデータとして前記第3ベクトルレジスタにストアさせる前記第1ベクトルシフトダブル命令を生成する、
請求項1から3のいずれか1項に記載のコンパイル装置。 - 前記ベクトルシフト命令生成手段は、前記配列Aが1/4ワード型である場合、
前記一連のデータ列を3/4ワード分シフトさせて得られたデータ列の一部を、前記第3ベクトルデータとして前記第3ベクトルレジスタにストアさせる前記第1ベクトルシフトダブル命令と、
前記一連のデータ列を2/4ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+2]に対応する第4ベクトルデータとして、1ワード単位でパックした状態で第4ベクトルレジスタにストアさせる第2ベクトルシフトダブル命令と、
前記一連のデータ列を1/4ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+3]に対応する第4ベクトルデータとして、1ワード単位でパックした状態で第4ベクトルレジスタにストアさせる第3ベクトルシフトダブル命令と、
を生成する、
請求項1から3のいずれか1項に記載のコンパイル装置。 - 前記ベクトルシフト命令生成手段は、前記配列Aが1/8ワード型である場合、
前記一連のデータ列を7/8ワード分シフトさせて得られたデータ列の一部を、前記第3ベクトルデータとして前記第3ベクトルレジスタにストアさせる前記第1ベクトルシフトダブル命令と、
前記一連のデータ列を6/8ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+2]に対応する第4ベクトルデータとして、1ワード単位でパックした状態で第4ベクトルレジスタにストアさせる第2ベクトルシフトダブル命令と、
前記一連のデータ列を5/8ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+3]に対応する第4ベクトルデータとして、1ワード単位でパックした状態で第4ベクトルレジスタにストアさせる第3ベクトルシフトダブル命令と、
前記一連のデータ列を4/8ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+4]に対応する第5ベクトルデータとして、1ワード単位でパックした状態で第5ベクトルレジスタにストアさせる第4ベクトルシフトダブル命令と、
前記一連のデータ列を3/8ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+5]に対応する第6ベクトルデータとして、1ワード単位でパックした状態で第6ベクトルレジスタにストアさせる第5ベクトルシフトダブル命令と、
前記一連のデータ列を2/8ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+6]に対応する第7ベクトルデータとして、1ワード単位でパックした状態で第7ベクトルレジスタにストアさせる第6ベクトルシフトダブル命令と、
前記一連のデータ列を1/8ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+7]に対応する第8ベクトルデータとして、1ワード単位でパックした状態で第8ベクトルレジスタにストアさせる第7ベクトルシフトダブル命令と、
を生成する、
請求項1から3のいずれか1項に記載のコンパイル装置。 - (1/2)kワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素A[i+2k]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル方法であって、
前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)kワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2k]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成すること、及び、
前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)kワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成すること、を含む、
コンパイル方法。 - (1/2)kワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素A[i+2k]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル処理をコンパイル装置に実行させる制御プログラムであって、
前記コンパイル処理は、
前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)kワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2k]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成すること、及び、
前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)kワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成すること、を含む、
制御プログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018229695 | 2018-12-07 | ||
JP2018229695 | 2018-12-07 | ||
PCT/JP2019/040150 WO2020116025A1 (ja) | 2018-12-07 | 2019-10-11 | コンパイル装置、コンパイル方法、及び非一時的なコンピュータ可読媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2020116025A1 JPWO2020116025A1 (ja) | 2021-10-07 |
JP7115563B2 true JP7115563B2 (ja) | 2022-08-09 |
Family
ID=70974646
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020559760A Active JP7115563B2 (ja) | 2018-12-07 | 2019-10-11 | コンパイル装置、コンパイル方法、及び制御プログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US11829754B2 (ja) |
JP (1) | JP7115563B2 (ja) |
WO (1) | WO2020116025A1 (ja) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012128790A (ja) | 2010-12-17 | 2012-07-05 | Fujitsu Ltd | 演算処理装置 |
JP2014526758A (ja) | 2011-09-26 | 2014-10-06 | インテル・コーポレーション | ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0962654A (ja) * | 1995-08-22 | 1997-03-07 | Kofu Nippon Denki Kk | リストベクトル処理装置 |
JP3817073B2 (ja) | 1998-07-28 | 2006-08-30 | 富士通株式会社 | メモリアクセス処理装置、メモリアクセス処理システム、および記録媒体 |
US10061746B2 (en) * | 2014-09-26 | 2018-08-28 | Intel Corporation | Instruction and logic for a vector format for processing computations |
JP6790646B2 (ja) * | 2016-09-21 | 2020-11-25 | 日本電気株式会社 | コンパイル装置、コンパイル方法、および、コンパイルプログラム |
-
2019
- 2019-10-11 JP JP2020559760A patent/JP7115563B2/ja active Active
- 2019-10-11 WO PCT/JP2019/040150 patent/WO2020116025A1/ja active Application Filing
- 2019-10-11 US US17/299,039 patent/US11829754B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012128790A (ja) | 2010-12-17 | 2012-07-05 | Fujitsu Ltd | 演算処理装置 |
JP2014526758A (ja) | 2011-09-26 | 2014-10-06 | インテル・コーポレーション | ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック |
Also Published As
Publication number | Publication date |
---|---|
US11829754B2 (en) | 2023-11-28 |
WO2020116025A1 (ja) | 2020-06-11 |
US20220027151A1 (en) | 2022-01-27 |
JPWO2020116025A1 (ja) | 2021-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ho et al. | Exploiting half precision arithmetic in Nvidia GPUs | |
JP4339907B2 (ja) | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 | |
JP5846005B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
JP6245031B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
JP6666554B2 (ja) | 情報処理装置、変換プログラム、及び変換方法 | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
Kannan | Efficient sparse matrix multiple-vector multiplication using a bitmapped format | |
US20100250564A1 (en) | Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution | |
JP2015201119A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
US10353708B2 (en) | Strided loading of non-sequential memory locations by skipping memory locations between consecutive loads | |
JP7115563B2 (ja) | コンパイル装置、コンパイル方法、及び制御プログラム | |
KR20120036208A (ko) | 재구성 기반 컴퓨팅 장치 및 이의 메모리 의존성 보정방법 | |
JP2018124877A (ja) | コード生成装置、コード生成方法、およびコード生成プログラム | |
JP6790646B2 (ja) | コンパイル装置、コンパイル方法、および、コンパイルプログラム | |
JP7006097B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
WO2022130883A1 (ja) | コンパイル装置、コンパイル方法、及びコンパイルプログラム記録媒体 | |
Bernstein et al. | Usable assembly language for GPUs: a success story | |
WO2020066375A1 (ja) | 情報処理装置、情報処理方法、プログラム | |
JP2018163381A (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
US20220382548A1 (en) | Compiler, compilation method, and compiler device | |
US20220405110A1 (en) | Non-transitory computer-readable recording medium and compilation method | |
US10572233B2 (en) | Vectorization device, vectorization method, and recording medium on which vectorization program is stored | |
US10387128B2 (en) | Method and apparatus for compiling computer-readable computer programs using extended isomorphism | |
JP2022098645A (ja) | コンパイル装置、コンパイル方法、及びコンパイルプログラム | |
Guo et al. | A New Improved Algorithm for SLP |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210521 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20210521 |
|
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: 20220628 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220711 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 7115563 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |