JP7115563B2 - コンパイル装置、コンパイル方法、及び制御プログラム - Google Patents

コンパイル装置、コンパイル方法、及び制御プログラム Download PDF

Info

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
Application number
JP2020559760A
Other languages
English (en)
Other versions
JPWO2020116025A1 (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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Publication of JPWO2020116025A1 publication Critical patent/JPWO2020116025A1/ja
Application granted granted Critical
Publication of JP7115563B2 publication Critical patent/JP7115563B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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
    • G06F8/4441Reducing the execution time required by the program code
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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

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つのメモリアクセス命令に変換する。さらに、該コンパイル装置は、該1つのメモリアクセス命令によってロードされた第1ベクトルレジスタのデータを、スライドさせて第2ベクトルレジスタに格納させる命令を生成する。そして、該コンパイル装置は、第1ベクトルレジスタのデータと第2のベクトルレジスタのデータとの演算を行う命令を生成する。
特開2000-48009号公報
しかしながら、特許文献1のコンパイラ装置は、第1ベクトルレジスタのデータをスライドさせて第2ベクトルレジスタに格納させる命令を生成しているため、演算に用いる要素が不足する可能性がある(特許文献1の図4参照)。この場合、特許文献1のコンパイラ装置は、不足した要素を補うためロード/ストアや演算のための追加のベクトル命令、または、スカラ命令を生成する必要がある。すなわち、特許文献1のコンパイラ装置は、ソースプログラムの最適化が不十分であり、プログラムを十分に高速化できていない可能性がある。
本開示の目的は、プログラムの高速化を実現することができる、コンパイル装置、コンパイル方法、及び制御プログラムを提供することにある。
第1の態様にかかるコンパイル装置は、(1/2)ワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素[i+2]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル処理部を具備し、前記コンパイル処理部は、前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)ワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成するベクトルロード命令生成部と、前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成するベクトルシフト命令生成部と、を含む。
第2の態様にかかるコンパイル方法は、(1/2)ワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素A[i+2]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル方法であって、前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)ワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成すること、及び、前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成すること、を含む。
第3の態様にかかる制御プログラムは、(1/2)ワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素A[i+2]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル処理をコンパイル装置に実行させる制御プログラムであって、前記コンパイル処理は、前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)ワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成すること、及び、前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成すること、を含む。
本開示により、プログラムの高速化を実現することができる、コンパイル装置、コンパイル方法、及び制御プログラムを提供することができる。
第1実施形態のコンパイル装置の一例を示すブロック図である。 第2実施形態のコンパイル装置の一例を示すブロック図である。 第2実施形態の原始プログラムの一例を示す図である。 第2実施形態のコンパイル装置による、ベクトル化技法を適用可能か否かについての解析処理の一例を示すフローチャートである。 第2実施形態のコンパイル装置によるベクトル化技法の一例を示すフローチャートである。 第2実施形態のベクトル化技法によって生成されるオブジェクトコードの一例を示す図である。 第2実施形態のベクトル化技法にて生成されるベクトルロード命令の説明に供する図である。 第2実施形態のベクトル化技法にて生成されるベクトルシフトダブル命令の説明に供する図である。 第2実施形態のベクトル化技法にて生成されるパックドベクトル演算命令の説明に供する図である。 1/4ワード型の場合に、第2実施形態のベクトル化技法によって生成されるオブジェクトコードの一例を示す図である。 1/4ワード型の場合に、第2実施形態のベクトル化技法にて生成されるベクトルロード命令の説明に供する図である。 1/4ワード型の場合に、第2実施形態のベクトル化技法にて生成されるベクトルシフトダブル命令の説明に供する図である。 1/4ワード型の場合に、第2実施形態のベクトル化技法にて生成されるパックドベクトル演算命令の説明に供する図である。 コンパイル装置のハードウェア構成例を示す図である。
以下、図面を参照しつつ、実施形態について説明する。なお、実施形態において、同一又は同等の要素には、同一の符号を付し、重複する説明は省略される。
<第1実施形態>
図1は、第1実施形態のコンパイル装置の一例を示すブロック図である。図1においてコンパイル装置10は、コンパイル処理部11を有している。コンパイル処理部11は、原始プログラム(ソースプログラム)を、オブジェクトコードに変換する。この原始プログラムは、(1/2)ワード型の配列aの要素a[i]、要素a[i+1]、及び要素a[i+2]をオペランドとして含む算術計算を実行する「計算処理」を添え字iの値を1つずつずらしながら繰り返し実行するためのプログラムである。kは自然数であり、添え字iは0以上の整数である。上記の算術計算は、要素a[i]と要素a[i+1]とが配列内で隣接しているので、配列の「隣接要素計算」を含んでいる。以下では、上記の繰り返し実行される計算処理を、「繰り返し計算処理」と呼ぶことがある。
コンパイル処理部11は、第1実施形態の「ベクトル化技法」を実行する。コンパイル処理部11は、ベクトルロード命令生成部12と、ベクトルシフトダブル命令生成部13とを含む。
ベクトルロード命令生成部12は、繰り返し計算処理にて要素a[i]として用いられる「第1データユニット群」をメモリ(図示せず)から1ワード単位でパックした状態で第1ベクトルレジスタにロードするための第1ベクトルロード命令を生成する。各データユニットは、(1/2)ワードである。さらに、ベクトルロード命令生成部12は、繰り返し計算処理にて要素[i+2]として用いられる第2データユニット群をメモリ(図示せず)から1ワード単位でパックした状態で第2ベクトルレジスタにロードするための第2ベクトルロード命令を生成する。以下では、上記の「第1データユニット群」及び「第2データユニット群」を、それぞれ、「第1ベクトルデータ」及び「第2ベクトルデータ」と呼ぶことがある。
ベクトルシフトダブル命令生成部13は、第1ベクトルデータ及び第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせるベクトルシフトダブル命令を生成する。第3ベクトルレジスタにストアされる上記データ列の一部は、要素a[i+1]に対応する「第3ベクトルデータ」である。
以上のように第1実施形態によれば、コンパイル装置10は、コンパイル処理部11を有している。コンパイル処理部11にてベクトルロード命令生成部12は、繰り返し計算処理にて要素a[i]として用いられる「第1データユニット群」をメモリ(図示せず)から1ワード単位でパックした状態で第1ベクトルレジスタにロードするための第1ベクトルロード命令を生成する。各データユニットは、(1/2)ワードである。さらに、ベクトルロード命令生成部12は、繰り返し計算処理にて要素[i+2]として用いられる第2データユニット群をメモリ(図示せず)から1ワード単位でパックした状態で第2ベクトルレジスタにロードするための第2ベクトルロード命令を生成する。
このコンパイル装置10の構成により、第1ベクトルレジスタ及び第2ベクトルレジスタにおける1ワード単位の各レジスタ領域を、パックされた2つのデータユニットによって埋めることができるので、レジスタのリソース利用効率を向上させることができる。
また、コンパイル処理部11にてベクトルシフトダブル命令生成部13は、第1ベクトルデータ及び第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせるベクトルシフトダブル命令を生成する。
このコンパイル装置10の構成により、第1ベクトルデータ及び第2ベクトルデータのそれぞれに含まれるデータユニットと同数のデータユニットを含む第3ベクトルデータを生成することができる。これにより、第1ベクトルデータ、第2ベクトルデータ、及び第3ベクトルデータにおいて、演算に用いる要素に不足が生じることがない。このため、上記の特許文献1のような不足した要素をロードする命令及び該命令によってロードされたデータを演算するスカラ命令を生成する必要がない。この結果として、プログラムの高速化を実現することができる。
<第2実施形態>
第2実施形態は、より具体的な実施形態に関する。
<コンパイル装置の構成例>
図2は、第2実施形態のコンパイル装置の一例を示すブロック図である。図2においてコンパイル装置20は、コンパイル処理部21を有する。コンパイル処理部21は、第1実施形態のコンパイル処理部11と同様に、原始プログラム(ソースプログラム)を、オブジェクトコードに変換する。コンパイル処理部21は、解析部22と、ベクトル化実行部23とを有している。
解析部22は、ループ検出部22Aと、ベクトル化可否判定部22Bと、最適化適用可否判定部22Cとを有している。
ループ検出部22Aは、原始プログラムにおけるループを検出し、検出されたループ内に上記の様な「計算処理」が含まれているか否かを判定する。
ベクトル化可否判定部22Bは、ループ検出部22Aにて検出されたループ内に上記の様な「計算処理」が含まれる場合、ループをベクトル化できるか否かを判定する。「ベクトル化できる条件」としては、例えば、従来の条件、つまり、「ループ内の配列及び変数についての定義及び参照関係にベクトル化を阻害する依存関係がないこと」を用いることができる。
最適化適用可否判定部22Cは、上記の「計算処理」に対して、第2実施形態の「ベクトル化技法」を適用できるか否かを判定する。例えば、最適化適用可否判定部22Cは、次の第1条件、第2条件、及び第3条件のすべてを満たす場合、上記の「計算処理」に対して、第2実施形態の「ベクトル化技法」を適用できると判定する。
(第1条件)配列が(1/2)ワード型であること。
(第2条件)1回の繰り返しにおいて、つまり、上記「計算処理」において、計算対象となる配列要素がすべて隣接していること。
(第3条件)1回の繰り返しにおいて、つまり、上記「計算処理」において、計算に用いられる配列要素の数が「m×2+1」個であること。ただし、mは、任意の自然数である。
原始プログラムが例えば図3に示すプログラムである場合には、ループ検出部22A及びベクトル化可否判定部22Bの判定は、肯定的な判定となる。さらに、原始プログラムが例えば図に示すようなプログラムである場合には、最適化適用可否判定部22Cの判定も、肯定的な判定となる。すなわち、図3に示すプログラムは、配列が半ワード型(k=1)であり、計算対象である配列要素の添え字が、[i]、[i+1]、[i+2]、[i+3]、[i+4]と1つずつずれている。さらに、図3に示すプログラムは、1回の繰り返しにおいて計算に用いられる配列要素の数が5(=2×2+1)要素である。このため、図3に示すプログラムは、上記の第1条件、第2条件、及び第3条件のすべてを満たす。図3は、第2実施形態の原始プログラムの一例を示す図である。
ベクトル化実行部23は、ループ検出部22A、ベクトル化可否判定部22B、及び最適化適用可否判定部22Cにて肯定的な判定がなされた原始プログラムに対して、第2実施形態の「ベクトル化技法」を実行する。
ベクトル化実行部23は、ベクトル長算出命令生成部23Aと、ベクトルロード命令生成部12と、ベクトルシフトダブル命令生成部13と、パックドベクトル演算命令生成部23Bと、ベクトルストア命令生成部23Cとを有している。
ベクトル長算出命令生成部23Aは、「ループ長N」を取得してN×(1/2)を右論理シフト演算によって計算するための、SRL(Shift Right Logical)命令を生成する。また、ベクトル長算出命令生成部23Aは、システムにて許容されている「最大ベクトル長」を取得するための、SMVL(Store Max Vector Length)命令を生成する。さらに、ベクトル長算出命令生成部23Aは、SRL命令によって計算した値と「最大ベクトル長」とを比較して小さい方を選択するための、MIN(Minimum)命令、及び、選択された値を「ベクトル長」とするための、LVL(Load Vector Length)命令を生成する。図3のプログラムの場合、ベクトル長算出命令生成部23Aは、ループ長nを取得し、n×(1/2)と最大ベクトル長とを比較して小さい方をベクトル長とする命令群を生成することになる。
ベクトルロード命令生成部12は、2個のデータユニット(つまり、1ワードのデータユニット)を1つのパックドデータとしてそれぞれ異なるベクトルレジスタに1ワードベクトルロードするための、(m+1)個のVLD(Vector Load)命令を生成する。これらの(m+1)個のVLD命令は、メモリ(図示せず)からデータユニットのロードを開始する位置、つまり、「ベクトルロード開始位置」が互いに2要素(つまり、1ワード分の要素数)ずつずれている。
ベクトルシフトダブル命令生成部13は、「ベクトルロード開始位置」が最も近いデータユニット群の各ペアに対して「所定シフト量」分シフトするための、(2k-1)個のVSRD(Vector Shift Double Right)命令を生成する。上記の「ベクトルロード開始位置」が最も近いデータユニット群の各ペアは、ベクトルロード開始位置が1ワード分の要素数だけずれた、データユニット群の各ペアである。(2k-1)個のVSRD命令についての「所定シフト量」は、それぞれ、l×(1/2)ワード(lは、1から(2k-1)までの自然数)である。
VSRD命令は、次のような命令である。
「VSRD %v0,%v1,%v2,S」
ここで、%v0は、演算結果を書き込む1ワードベクトルレジスタを意味する。%v1,%v2は、演算のオペランドとなるベクトルレジスタを意味する。Sは、シフト量を指定する0から(2ワード-1)までのスカラ値である。すなわち、VSRD命令によれば、オペランドである2つのベクトルレジスタを合わせて2ワードデータ(つまり一連のデータ列)とし、該2ワードデータがSだけ右シフト演算され、得られた2ワードデータの下位側の1ワードの値が演算結果としてベクトルレジスタに書き込まれる。
パックドベクトル演算命令生成部23Bは、ベクトルロードされたベクトルデータ及びベクトルシフトダブルによって生成されたベクトルデータに対して演算を行うための、PVOP(Packed Vector Operation)命令を生成する。ここで、具体的には、生成されるPVOP命令は、上記の算術計算の態様に応じた命令となる。例えば、図3に示す原始プログラムの例では、算術計算が要素間の加算であるので、生成されるPVOP命令は、具体的には、PVADD(Packed Vector ADD)命令となる。
ベクトルストア命令生成部23Cは、PVOP命令による演算結果を、2要素のパックドデータとして1ワードベクトルストアするための、VST(Vector Store)命令を生成する。
<コンパイル装置の動作例>
以上の構成を有するコンパイル装置20の処理動作の一例について説明する。
〈第2実施形態のベクトル化技法を適用可能か否かについての解析処理〉
図4は、第2実施形態のコンパイル装置による、ベクトル化技法を適用可能か否かについての解析処理の一例を示すフローチャートである。
コンパイル装置20において解析部22は、原始プログラムにループが存在するか否かを判定する(ステップS101)。
原始プログラムにループが存在する場合(ステップS101YES)、解析部22は、検出したループ内に計算処理が含まれているか否かを判定する(ステップS102)。
ループ内に計算処理が含まれている場合(ステップS102YES)、解析部22は、ループをベクトル化できるか否かを判定する(ステップS10)。上記の通り、「ベクトル化できる条件」としては、例えば、従来の条件、つまり、「ループ内の配列及び変数についての定義及び参照関係にベクトル化を阻害する依存関係がないこと」を用いることができる。
ベクトル化ができると判定した場合(ステップS10YES)、解析部22は、計算処理の配列の型が(1/2)ワード型であるか否かを判定する(ステップS10)。
計算処理の配列の型が(1/2)ワード型である場合(ステップS10YES)、解析部22は、計算処理において計算対象となる配列要素がすべて隣接しているか否かを判定する(ステップS10)。
計算処理において計算対象となる配列要素がすべて隣接している場合(ステップS10YES)、解析部22は、計算処理において計算に用いられる配列要素の数が「m×2+1」個であるか否かを判定する(ステップS10)。
計算処理において計算に用いられる配列要素の数が「m×2+1」個である場合(ステップS10YES)、解析部22は、原始プログラムに対して第2実施形態のベクトル化技法を適用することを決定する(ステップS10)。
なお、ステップS101からステップS10のいずれかにおいて否定的な判定が為された場合、解析部22は、例えば従来の最適化を適用することを決定する(ステップS10)。
〈第2実施形態のベクトル化技法〉
図5は、第2実施形態のコンパイル装置によるベクトル化技法の一例を示すフローチャートである。図5の処理フローは、解析部22によって原始プログラムに対して第2実施形態のベクトル化技法を適用することを決定された場合にスタートする。
コンパイル装置20においてベクトル化実行部23は、ループ長Nを取得してN×(1/2)を右論理シフト演算によって計算するための、SRL命令を生成する(ステップS201)。原始プログラムが図3に示すプログラムの場合、図6に示されるオブジェクトコードの部分P6-1の1行目に示される命令が生成されることになる。図6は、第2実施形態のベクトル化技法によって生成されるオブジェクトコードの一例を示す図である。
ベクトル化実行部23は、システムにて許容されている「最大ベクトル長」を取得するための、SMVL命令を生成する(ステップS202)。
ベクトル化実行部23は、SRL命令によって計算した値と「最大ベクトル長」とを比較して小さい方を選択するための、MIN命令、及び、選択された値を「ベクトル長」とするための、LVL命令を生成する(ステップS203)。原始プログラムが図3に示すプログラムの場合、ステップS201からステップS203によって、図6に示されるオブジェクトコードの部分P6-1が生成されることになる。
ベクトル化実行部23は、2個のデータユニットを1つのパックドデータとしてそれぞれ異なるベクトルレジスタに1ワードベクトルロードするための、(m+1)個のVLD命令を生成する(ステップS204)。これらの(m+1)個のVLD命令は、メモリ(図示せず)からデータユニットのロードを開始する位置が互いに2要素(つまり、1ワード分の要素数)ずつずれている。原始プログラムが図3に示すプログラムの場合、図6に示されるオブジェクトコードの部分P6-2,P6-5が生成されることになる。図3に示すプログラムでは配列が半ワード型(つまり、k=1)であり且つ要素の数が5個(つまり、m=2)であるので、3つのVLD命令が生成されている。また、ロード命令の対象は、a[i]、a[i+2]、及びa[i+4]であり、これらのロード開始位置は互いに2要素ずつずれている。例えば、図6に示されるオブジェクトコードの部分P6-2が実行されると、図7に示されるような処理が実行されることになる。すなわち、「VLD vreg1,a[i]」が実行されることによって、複数のデータユニットa[0]~a[11]が、ベクトルロード開始位置をa[0]とし且つ2つのデータユニットが1つにパックされた状態で、ベクトルレジスタvreg1にロードされる。すなわち、ベクトルレジスタvreg1の1ワード単位の各レジスタ領域の上位領域(Upper領域)にデータユニットa[0],a[2],a[4],a[6],a[8],a[10]がロードされ、下位領域(Lower領域)にデータユニットa[1],a[3],a[5],a[7],a[9],a[11]がロードされている。また、「VLD vreg1,a[i+2]」が実行されることによって、複数のデータユニットa[2]~a[13]が、ベクトルロード開始位置をa[2]とし且つ2つのデータユニットが1つにパックされた状態で、ベクトルレジスタvreg2にロードされる。図7は、第2実施形態のベクトル化技法にて生成されるベクトルロード命令の説明に供する図である。
図5の説明に戻り、ベクトル化実行部23は、「ベクトルロード開始位置」が最も近いデータユニット群の各ペアに対して「所定シフト量」分シフトするための、(2k-1)個のVSRD命令を生成する(ステップS205)。(2k-1)個のVSRD命令についての「所定シフト量」は、それぞれ、l×(1/2)ワード(lは、1から(2k-1)までの自然数)である。原始プログラムが図3に示すプログラムの場合、図6に示されるオブジェクトコードの部分P6-3,P6-6が生成されることになる。すなわち、a[i]及びa[i+2]のペアについて、部分P6-3が生成され、a[i+2]、及びa[i+4]のペアについて、部分P6-6が生成される。図3に示すプログラムでは配列が半ワード型(つまり、k=1)であるので、各ペアについて1つのVSRD命令が生成され、所定シフト量は1/2ワードとなる。例えば、図6に示されるオブジェクトコードの部分P6-3が実行されると、図8に示されるような処理が実行されることになる。すなわち、VSRD命令のオペランドであるベクトルレジスタvreg1,vreg2を合わせて2ワードデータとし、該2ワードデータが1/2ワードだけ右シフト演算され、得られた2ワードデータの下位側の1ワードの値がベクトルレジスタvreg3に書き込まれる。このベクトルレジスタvreg3に書き込まれた複数のデータユニットは、a[i+1]に相当する。図8は、第2実施形態のベクトル化技法にて生成されるベクトルシフトダブル命令の説明に供する図である。
図5の説明に戻り、ベクトル化実行部23は、ベクトルロードされたベクトルデータ及びベクトルシフトダブルによって生成されたベクトルデータに対して演算を行うための、PVOP命令を生成する(ステップS206)。原始プログラムが図3に示すプログラムの場合、図6に示されるオブジェクトコードの部分P6-4,P6-7が生成されることになる。すなわち、図3に示すプログラムの計算式には加算演算子が4つ含まれるので、4つのPVOP命令が生成されている。図6に示されるオブジェクトコードの部分P6-4,P6-7が実行されると、図9に示すように、ベクトルレジスタvreg1,vreg2,vreg3,vreg6,vreg7の1ワード単位の各レジスタ領域における上位領域及び下位領域について別々に加算処理が行われる。図9は、第2実施形態のベクトル化技法にて生成されるパックドベクトル演算命令の説明に供する図である。
図5の説明に戻り、ベクトル化実行部23は、PVOP命令による演算結果を、2要素のパックドデータとして1ワードベクトルストアするための、VST命令を生成する(ステップS207)。図9に示されたPVOP命令による演算結果を見ると、各レジスタ領域における上位領域及び下位領域のそれぞれには、上記の「繰り返し計算処理」の各計算処理において得られる計算結果が保持されることがわかる。
なお、以上の説明では、1/2ワード型のケースを例にとって説明を行ったが、当然のことながらこれに限定されるものではなく、1/4ワード型、1/8ワード型についても同様に、上記の「ベクトル化技法」と適用することができる。
例えば、1/4ワード型の場合、図3に示す原始プログラムは、図10に示すオブジェクトコードに変換される。図10は、1/4ワード型の場合に、第2実施形態のベクトル化技法によって生成されるオブジェクトコードの一例を示す図である。
具体的には、ステップS204では、配列が1/4ワード型(つまり、k=2)であり且つ要素の数が5個(つまり、m=1)であるので、2つのVLD命令が生成される。そして、ロード命令の対象は、a[i]及びa[i+4]であり、これらのロード開始位置は互いに4要素ずれている。これらの2つのVLD命令が実行されると、図11に示されるような処理が実行されることになる。すなわち、「VLD vreg1,a[i]」が実行されることによって、複数のデータユニットa[0]~a[23]が、ベクトルロード開始位置をa[0]とし且つ4つのデータユニットが1つにパックされた状態で、ベクトルレジスタvreg1にロードされる。ここで、図11のベクトルレジスタvreg1における各行は、1ワード単位の「レジスタ領域」に対応し、各行における4つの列のそれぞれは1/4ワードに対応する「部分領域」に対応する。また、「VLD vreg1,a[i+4]」が実行されることによって、複数のデータユニットa[4]~a[27]が、ベクトルロード開始位置をa[4]とし且つ4つのデータユニットが1つにパックされた状態で、ベクトルレジスタvreg2にロードされる。図11は、1/4ワード型の場合に、第2実施形態のベクトル化技法にて生成されるベクトルロード命令の説明に供する図である。
そして、ステップS205では、a[i]及びa[i+4]のペアについて、「所定シフト量」がそれぞれ1/4ワード、2/4ワード、3/4ワードである、3つのVSRD命令が生成される。a[i]及びa[i+4]のペアについて「所定シフト量」が3/4ワードであるVSRD命令「VSRD vreg3,vreg2,vreg1,48」が実行されると、VSRD命令のオペランドであるベクトルレジスタvreg1,vreg2を合わせて2ワードデータとされる。そして、該2ワードデータが3/4ワードだけ右シフト演算され、得られた2ワードデータの下位側の1ワードの値がベクトルレジスタvreg3に書き込まれる。このベクトルレジスタvreg3に書き込まれた複数のデータユニットは、a[i+1]に相当する。図12は、1/4ワード型の場合に、第2実施形態のベクトル化技法にて生成されるベクトルシフトダブル命令の説明に供する図である。
そして、ステップS206では、ベクトルロードされたベクトルデータ及びベクトルシフトダブルによって生成されたベクトルデータに対して演算を行うための、PVOP命令が生成される。例えば、a[i]とa[i+4]とのベクトル加算演算は、図13に示すように、上記の「部分領域」単位で加算されることになる。図13は、1/4ワード型の場合に、第2実施形態のベクトル化技法にて生成されるパックドベクトル演算命令の説明に供する図である。
このように、ベクトル化実行部23(ベクトルシフトダブル命令生成部13)は、配列aが1/4ワード型である場合、上記一連のデータ列(つまり、上記の2ワードデータ)を3/4ワード分シフトさせて得られたデータ列の一部を、第3ベクトルデータとして第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令と、上記一連のデータ列を2/4ワード分シフトさせて得られたデータ列の一部を、要素A[i+2]に対応する第4ベクトルデータとして、1ワード単位でパックした状態で第4ベクトルレジスタにストアさせる第2ベクトルシフトダブル命令と、上記一連のデータ列を1/4ワード分シフトさせて得られたデータ列の一部を、要素A[i+3]に対応する第4ベクトルデータとして、1ワード単位でパックした状態で第4ベクトルレジスタにストアさせる第3ベクトルシフトダブル命令と、を生成している。
配列aが1/8ワード型の場合も同様である。すなわち、ベクトルシフトダブル命令生成部13は、配列aが1/8ワード型である場合、上記一連のデータ列(つまり、上記の2ワードデータ)を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ベクトルシフトダブル命令と、を生成している。
<他の実施形態>
図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に供給されてもよい。
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2018年12月7日に出願された日本出願特願2018-229695を基礎とする優先権を主張し、その開示の全てをここに取り込む。
10,20 コンパイル装置
11,21 コンパイル処理部
12 ベクトルロード命令生成部
13 ベクトルシフトダブル命令生成部
22 解析部
22A ループ検出部
22B ベクトル化可否判定部
22C 最適化適用可否判定部
23 ベクトル化実行部
23A ベクトル長算出命令生成部
23B パックドベクトル演算命令生成部
23C ベクトルストア命令生成部

Claims (8)

  1. (1/2)ワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素[i+2]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル処理手段を具備し、
    前記コンパイル処理手段は、
    前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)ワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成するベクトルロード命令生成手段と、
    前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成するベクトルシフト命令生成手段と、
    を含む、
    コンパイル装置。
  2. 前記コンパイル処理手段は、前記ベクトルロード命令生成手段が前記第1ベクトルロード命令及び前記第2ベクトルロード命令を生成する処理を開始し且つ前記ベクトルシフト命令生成手段が前記第1ベクトルシフトダブル命令を生成する処理を開始する条件が満たされているか否かを判定する条件判定手段をさらに含み、
    前記条件は、各計算処理において計算対象となるすべての要素の添え字が連続しているという条件を含む、
    請求項1記載のコンパイル装置。
  3. 前記コンパイル処理手段は、前記計算処理がN(Nは2以上の自然数)回繰り返される場合、前記N×(1/2)及びシステムにて許容されている最大ベクトル長のうちで小さい方をベクトル長として選択するためのベクトル長算出命令を生成するベクトル長算出命令生成手段をさらに具備し、
    前記ベクトルロード命令生成手段は、それぞれ前記ベクトル長を有する前記第1ベクトルデータ及び前記第2ベクトルデータをロードするための前記第1ベクトルロード命令及び前記第2ベクトルロード命令を生成する、
    請求項1又は2に記載のコンパイル装置。
  4. 前記ベクトルシフト命令生成手段は、前記配列Aが1/2ワード型である場合、前記一連のデータ列を1/2ワード分シフトさせて得られたデータ列の一部を、前記第3ベクトルデータとして前記第3ベクトルレジスタにストアさせる前記第1ベクトルシフトダブル命令を生成する、
    請求項1から3のいずれか1項に記載のコンパイル装置。
  5. 前記ベクトルシフト命令生成手段は、前記配列Aが1/4ワード型である場合、
    前記一連のデータ列を/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項に記載のコンパイル装置。
  6. 前記ベクトルシフト命令生成手段は、前記配列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項に記載のコンパイル装置。
  7. (1/2)ワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素A[i+2]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル方法であって、
    前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)ワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成すること、及び、
    前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成すること、を含む、
    コンパイル方法。
  8. (1/2)ワード型(kは自然数)の配列Aの要素A[i]、要素A[i+1]、及び要素A[i+2]をオペランドとして含む算術計算を実行する計算処理を添え字i(iは0以上の整数)の値を1つずつずらしながら繰り返し実行するための原始プログラムを、オブジェクトコードに変換するコンパイル処理をコンパイル装置に実行させる制御プログラムであって、
    前記コンパイル処理は、
    前記繰り返される計算処理において前記要素A[i]として用いられ且つ各データユニットが(1/2)ワードである第1のデータユニット群をメモリから1ワード単位でパックした状態で第1ベクトルレジスタに第1ベクトルデータとしてロードするための第1ベクトルロード命令、及び、前記繰り返される計算処理において前記要素A[i+2]として用いられる第2のデータユニット群を前記メモリから1ワード単位でパックした状態で第2ベクトルレジスタに第2ベクトルデータとしてロードするための第2ベクトルロード命令を生成すること、及び、
    前記第1ベクトルデータ及び前記第2ベクトルデータを一連のデータ列として(1/2)ワード分シフトさせて得られたデータ列の一部を、前記要素A[i+1]に対応する第3ベクトルデータとして、1ワード単位でパックした状態で第3ベクトルレジスタにストアさせる第1ベクトルシフトダブル命令を生成すること、を含む、
    制御プログラム。
JP2020559760A 2018-12-07 2019-10-11 コンパイル装置、コンパイル方法、及び制御プログラム Active JP7115563B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 日本電気株式会社 コンパイル装置、コンパイル方法、および、コンパイルプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
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