JP7460902B2 - コンパイラプログラム、コンパイル方法、情報処理装置 - Google Patents
コンパイラプログラム、コンパイル方法、情報処理装置 Download PDFInfo
- Publication number
- JP7460902B2 JP7460902B2 JP2020100151A JP2020100151A JP7460902B2 JP 7460902 B2 JP7460902 B2 JP 7460902B2 JP 2020100151 A JP2020100151 A JP 2020100151A JP 2020100151 A JP2020100151 A JP 2020100151A JP 7460902 B2 JP7460902 B2 JP 7460902B2
- Authority
- JP
- Japan
- Prior art keywords
- vector
- loop
- instruction
- array
- store instruction
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Description
前記最適化対象プログラムは、配列変数のベクトルストア命令とベクトルロード命令を有するループを有し、
前記最適化処理は、
前記ループ内の前記ベクトルストア命令とベクトルロード命令を、ベクトル長を前記配列変数の配列サイズで除算して余りを切り上げた第1アンロール数または前記第1アンロール数より1つ少ない第2アンロール数だけアンローリングを行い、
前記アンローリングした複数のベクトルロード命令のうち先頭のベクトルストア命令より後ろのベクトルロード命令を、前記先頭のベクトルストア命令より前に移動させるスケジューリングを行う、コンパイラプログラムである。
本明細書では、ベクトルストア命令とその後のベクトルロード命令がアクセスする配列要素のメモリアドレスが互いに重なる場合に発生する本来のSFIを、「一次SFI」または「SFI_1」と称する。また、ベクトルストア命令とその後のベクトルロード命令が、マスクレジスタに基づいてアクセスする配列要素のメモリアドレスは重ならない(一次SFIは起きない)が、ベクトル命令の先頭の配列要素からベクトル長の個数の配列要素のメモリアドレスが重なる場合、マイクロプロセッサのアーキテクチャに依存したSFIが発生する。このマイクロアーキテクチャに依存したSFIを、「二次SFI」または「SFI_2」と称する。また、「ベクトル命令の先頭の配列要素からベクトル長の個数の配列要素までのメモリアドレス」を、以下簡単の為に、「ベクトル命令のベクトル長の配列要素のメモリアドレス」と称する。
図1は、コンパイラを実行する情報処理装置の構成例を示す図である。情報処理装置1は、プロセッサであるセントラルプロセッサユニット(CPU)10と、プロセッサがアクセスするメインメモリ12と、外部とのインターフェース14と、補助記憶装置であるストレージ20と、それらを接続する内部バス16とを有する。
図4は、SFI_2の発生例を示す図である。コードC1はソースコードの一例である。ソースコードC1では、単精度4byteの実数real(4)として配列a(8,32)とb(8,32)を宣言し(行02)、二次ループ(行03~07)内に、一次ループ(行04~06)が含まれる。最内(一次)ループ(行04~06)に、配列a(j,i)とb(j,i)を加算して配列a(j,i)に入力する演算命令が記載される(行05)。また、ベクトルレジスタのサイズを512bitとし、上記の通り配列の要素のサイズが単精度の4byteとすると、ベクトル長VL(Vector Length)は以下のとおりである。
ベクトル長VL=ベクトルレジスタのサイズ(512bit)/配列の要素のサイズ(4byte)=16
つまり、ベクトル長VLは、ベクトル命令が処理できる配列の最大要素数である。ベクトルレジスタのサイズを512bit、配列の要素サイズを倍精度の8byteとすると、ベクトル長VLは8となる。
行02:マスクレジスタpredicate_true ps0は、要素が4byte(ps:predicate single)であり、先頭の8要素がTRUEで残りの8要素がFALSEである。具体的なマスクレジスタMASKが行02の右側に示されている。
行04:配列b(1:8,i)の1~8要素のデータをメモリからベクトルレジスタvs2にロードするマスクレジスタps0付きベクトルロード命令vload。ベクトルレジスタvs2は要素が単精度の4byte(vs:vector single)である。
行05:配列a(1:8,i)の1~8要素のデータをメモリからベクトルレジスタvs1にロードするマスクレジスタps0付きベクトルロード命令vload。ベクトルレジスタvs1も配列要素が単精度の4byteである。
行06:ベクトルレジスタvs1とvs2を加算し、vs1に格納する。
行07:ベクトルvs1のデータをメモリ内の配列a(1:8,i)にストアするマスクレジスタps0つきベクトルストア命令vstore。
行08:ループの制御変数iを格納するレジスタd2の値を-1する。
図6は、一重ループ化によるSFI_2を回避する方法を示す図である。図6のソースコードC10は、図4のソースコードC1と同じである。図4では、ベクトル長VL=16に対して最内ループでは制御変数j = 1~8で回転する。そのため、最内ループの命令をベクトル命令に変換すると、ベクトル命令はベクトル長16の要素のうち先頭の8要素のデータにアクセスする。その結果、前のベクトルストア命令vstore1と後ろのベクトルロード命令vload2は、それぞれがマスクに基づいてアクセスする要素のアドレスは互いに重ならないが、ベクトル長VL=16の要素のアドレスでは互いに重なり、SFI_1は発生しないがSFI_2が発生した。
a(1:16,i) = a(1:16,i) + b(1:16,i)
つまり、ベクトル命令のデータ数(要素数)はベクトル長VL=16と等しく、ループの制御変数iは1~256で16飛びに変更されている。
図7は、アンパック化によるSFI_2を回避する方法を示す図である。図7のソースコードC20では、配列変数a(9,32)、b(9,32)に対し、最内ループ(行04-06)は回転数8(j=1-8)である。つまり、配列変数a(9,32)の配列サイズnはn=9であるのに対して、最内ループの回転数mはm=8と、両者は異なっている。
図10は、一重ループ化またはアンパック化ではSFI_2を回避できない例を示す図である。図10に示したソースコードC30は、配列変数a(4,32)の配列サイズnがn=4で、最内ループ(行04-06)のループ回転数mがm=3と、m<nである。そして、ソースコードC30の最内ループ内の演算命令をベクトル化すると、中間擬似コードC31が生成される。この例は、最内ループ内は、ロード命令の後にストア命令がある例(ロード後ストア)である。
[ループ内でロード命令の後にストア命令がある例(ロード後ストア)]
第1の実施の形態では、コンパイラを実行するプロセッサが、図10に示した配列サイズnとループ回転数mとがm<nと異なり且つループ回転数mがベクトル長VLと前述の特定の比率ではないループを、最適化する。また、第1の実施の形態では、最適化対象ループの変数の配列サイズnとループ回転数mとベクトル長VLが定数の例である。
a(1:3,i) = a(1:3,i) + b(1:3,i)
a(1:3,i+1) = a(1:3,i+1) + b(1:3,i+1) // 元2回転目
a(1:3,i+2) = a(1:3,i+2) + b(1:3,i+2) // 元3回転目
a(1:3,i+3) = a(1:3,i+3) + b(1:3,i+3) // 元4回転目
これに伴い、行03のDO文では、制御変数iが4つ飛びで32までインクリメントされる。
図14は、実施の形態におけるSFI_2を回避する最適化処理(2)を示す図である。最内ループ内にストア命令の後にロード命令があるストア後ロードの例である。ソースコードC30_2では、最内ループ(行04-07)に、メモリ内の配列変数aへのストア命令(行05)とメモリ内の配列変数aからのロード命令(行06)が示される。中間擬似コードC31_2では、最内ループで繰り返す複数の命令がベクトル命令(行04-05)に変換されている。
a(1:3,i) = b(1:3,i)
c(1:3,i) = a(1:3,i+1) + i
a(1:3,i+1) = b(1:3,i+1) // 元2回転目
c(1:3,i+1) = a(1:3,i+2) + i+1 // 元2回転目
a(1:3,i+2) = b(1:3,i+2) // 元3回転目
c(1:3,i+2) = a(1:3,i+3) + i+2 // 元3回転目
これに伴い、行03のDO文では、制御変数iが3つ飛びでインクリメントされる。
[ループ内がロード後ストアの例]
図16は、ループ内でロード命令がストア命令に先行するソースコードの場合のループアンローリングとスケジューリングを示す図である。図11と同様に、先行するロード命令とその後ろのストア命令は、同じ変数の同じ要素にアクセスする命令である。図16には、ループアンローリング後とスケジューリング後における、各ループのベクトルストア命令Svstoreベクトルロード命令vloadとのメモリアドレス(横方向)の関係が示される。図中ベクトル長VLは、1回転目のストア命令vstore1がアクセスするベクトル長の要素のメモリアドレスの位置を示す。
図17は、ループ内でストア命令がロード命令に先行するソースコードの場合のループアンローリングとスケジューリングを示す図である。図14と同様に、同じループ内の先行するストア命令とその後ろのロード命令は、同じ変数の異なる要素にアクセスする命令である。そして、1回転目のループでは、ストア命令とロード命令の先頭要素のアドレスが配列サイズn個ずつずれている。2回転目以降も同様である。したがって、VL=16、n=4とすると、1回転目のベクトルストア命令vstore1と1~3回転目のベクトルロード命令vload1~vload3との間でSFI_2が発生する可能性がある。
第2の実施の形態も、コンパイラを実行するプロセッサが、図10に示した配列サイズnとループ回転数mとがm<nと異なり、ループ回転数mとベクトル長VLとの比が前述のアンパック化を適用できる比ではないループを最適化する。更に、第2の実施の形態では、最適化対象ループの変数の配列サイズnとループ回転数mが変数で、ベクトル長VLが定数または不明の例である。但し、n>VLの例は、最適化対象ループから除く。ここで、変数の配列サイズnとループ回転数mが変数とは、コンパイルされたオブジェクトコードをプロセッサが実行したときに両変数の値が確定し、コンパイル時は両変数が確定しないことを意味する。また、ベクトル長VLが不明とは、ソースプログラムをコンパイルしたオブジェクトコードを実行するプロセッサのベクトル長がコンパイル時に不明であることである。
図18は、第2の実施の形態の最適化対象ループを有するソースコードとベクトル化後の中間擬似コードの例を示す図である。この例は、最内ループ(行04-06)内でロード命令の後にストア命令がある例である。ソースコードC40では、配列変数a(n,32), b(n,32), c(n,32)の配列サイズnが変数であり、最内ループの回転数mが変数であり、そして、ベクトル長VLが定数または不明である。この場合、論理的にm=<nであり、n>VLのループを最適化対象ループから除くとすると、m=<VLが保証される。
a(j:j+VL-1,i) = a(j:j+VL-1,i) + b(j:j+VL-1,i)
enddo
ベクトル化後の中間擬似コードC41の場合、配列サイズnとベクトル長VLの関係によっては、SFI_2に該当する場合がある。この場合のSFI_2は、図10で説明したように、ベクトルストア命令とその後のベクトルロード命令との間で、両命令のベクトル長の要素のアドレスは重なるが、両命令がマスクに基づきアクセスする要素のアドレスは重ならない場合である。
06 do i = 1, 32
07 a(1:m,i) = a(1:m,i) + b(1:m,i)
08 enddo
図13のceil(VL/n)に示したとおり、配置サイズnがn=8~15の場合ceil(VL/n)=2であるので、図19のコードC42では、ケース2(case 2)に該当する。
図21は、第2の実施の形態の最適化対象ループを有するソースコードとベクトル化後の中間擬似コードの例を示す図である。この例は、最内ループ(行04-07)内でストア命令のあとにロード命令がある例である。ソースコードC50では、配列変数a(n,33), b(n,33), c(n,33)の配列サイズnが変数であり、最内ループの回転数mが変数であり、そして、ベクトル長VLが定数または不明である。この場合、論理的にm=<nであり、n>VLのループを最適化対象ループから除くとすると、m=<VLが保証される。
do j = 1, m , VL //VL: 16
a(j: j+VL, i) = b(j: j+VL, i)
c(j: j+VL, i) = a(j: j+VL, i+1) + i
enddo
次に、コンパイラの最適化処理についてフローチャートを参照して説明する。以下説明するコンパイラの最適化処理は、第1の実施の形態の最適化対象ループと第2の実施の形態の最適化対象ループの両方について行う最適化処理である。第1の実施の形態の最適化対象ループとは、ベクトル長VLと変数の配列サイズnが定数で、n<VLが真で、ループ内プログラムがSFI_2を発生する可能性があるループである。第2の実施の形態の最適化対象ループとは、ベクトル長VLと変数の配列サイズnが変数で、n<VLが不明で、ループ内プログラムがSFI_2を発生する可能性があるループである。
S15:ベクトル長VLが定数、配列サイズnが定数、n<VLが真の場合は、ループタイプをタイプ1と判定する。
S16:ベクトル長VLが定数、配列サイズnが変数、n<VLが不明の場合は、ループタイプをタイプ2と判定する。
S17:ベクトル長VLが変数、配列サイズnが変数、n<VLが不明の場合は、ループタイプをタイプ2と判定する。
上記S15~S17が全てNOなら終了する。
ループタイプがタイプ1または2の場合は、プロセッサは、図27以降のSFI_2の判定処理を実行する。
コンパイラを実行するプロセッサは、連続するベクトルストア命令及びベクトルロード命令の関係を分析する(S40)。この分析で、ループがSFI_2を発生するか否かと(SFI_2=TRUE or FALSE)、ロード命令がストア命令の前か(SFI_2_type=0)後ろか(SFI_2_type=1)の判定を行う。詳細は図29、図30で行う。ループがSFI_2を発生する(SFI_2=TRUE)場合(S22のYES)、プロセッサは、ループ構造体に、SFI_2 = TRUEとSFI_2_type = 0 or 1を記録し、VL_arrayをNULLにする(S23)。VL_arrayをNULLにするのはベクトル長VLが定数で調査の必要性がないからである。ループがSFI_2を発生しない(SFI_2= FALSE)場合(S22のNO)、プロセッサは、ループ構造体に、SFI_2 = FALSEを記録する(S23(2))。
ループタイプ2の場合、コンパイラを実行するプロセッサは、ベクトル長VLが不明か否か判定する(S24)。不明でない場合(S24のFALSE)、プロセッサは、変数である配列サイズnを1からベクトル長VLまでインクリメントしながら、つまり、配列サイズnが1からベクトル長VLの値それぞれについて(S26)、以下の処理を実行する。つまり、プロセッサは、配列サイズn=VLに達してceil(VL/n)=1が真になる(S27のTRUE)と終了し(S27)、ceil(VL/n)=1が偽の場合(S27のFALSE)、連続するベクトルストア命令及びベクトルロード命令の関係を分析する(S40)。
図29、図30は、同じループ内及び前後のループ内のベクトルストア命令及びベクトルロード命令の関係性の判定処理S40のフローチャートを示す図である。コンパイラを実行するプロセッサは、同じループ内でロード命令の後ろにストア命令があるという順番か否かを判定する(S41)。判定が真の場合(S41のTRUE)、プロセッサは処理S42~S45を実行する。判定が偽の場合(S41のFALSE)、プロセッサは図30の処理を実行する。
12:メモリ
21:コンパイラ
22:パラメータ(ループ構造体)
23:ソースコード
24:中間コード
25:アセンブリコード(オブジェクトコード)
VL:ベクトル長
n:配列変数の配列サイズ
m:ループの回転数
SFI_1:一次SFI
SFI_2:二次SFI
vload:ベクトルロード命令
vstore:ベクトルストア命令
MASK:マスクレジスタ
Ceil():セイル関数、除算の余りを切り上げる関数
T:TRUE
F:FALSE
Claims (9)
- 最適化対象プログラムについて最適化処理をコンピュータに実行させるコンパイラプログラムであって、
前記最適化対象プログラムは、配列変数のベクトルストア命令とベクトルロード命令を有するループを有し、
前記最適化処理は、
前記ループ内の前記ベクトルストア命令とベクトルロード命令を、ベクトル長を前記配列変数の配列サイズで除算して余りを切り上げた第1アンロール数または前記第1アンロール数より1つ少ない第2アンロール数だけアンローリングを行い、
前記アンローリングした複数のベクトルロード命令のうち先頭のベクトルストア命令より後ろのベクトルロード命令を、前記先頭のベクトルストア命令より前に移動させるスケジューリングを行う、コンパイラプログラム。 - 前記ループは、前記配列変数の配列サイズが定数でベクトル長が定数で、前記ループの回転数(m)が前記配列サイズより小さく、前記ループの回転数と前記ベクトル長の比がアンパック可能な特定の比ではない、請求項1に記載のコンパイラプログラム。
- 前記最適化対象プログラムの前記ループは、
前記ループの複数の回転ループの前の回転ループ内のベクトルストア命令と後の回転ループ内のベクトルロード命令のベクトル長の要素に対するメモリアドレスが重なるが、両命令がマスクに基づきアクセスする要素のメモリアドレスは重ならない二次ストアフェッチインターロックに該当する、請求項2に記載のコンパイラプログラム。 - 前記ループが前記ベクトルロード命令の後に前記ベクトルストア命令を有する場合、
前記二次ストアフェッチインターロックは、
(1)前記ループの第1回転目のベクトルストア命令のベクトル長の要素に対するメモリアドレスと、前記第1回転目の次の第2回転目のベクトルロード命令のベクトル長の要素に対するメモリアドレスとが重なるが、(2)前記第1回転目のベクトルストア命令がマスクに基づきアクセスする要素のメモリアドレスと、前記第2回転目のベクトルロード命令がマスクに基づきアクセスする要素のメモリアドレスとが重ならない場合である、請求項3に記載のコンパイラプログラム。 - 前記ループが前記ベクトルストア命令の後に前記ベクトルロード命令を有する場合、
前記二次ストアフェッチインターロックは、
(1)前記ループの第1回転目のベクトルストア命令のベクトル長の要素に対するメモリアドレスと、前記第1回転目のベクトルロード命令のベクトル長の要素に対するメモリアドレスとが重なるが、(2)前記第1回転目のベクトルストア命令がマスクに基づきアクセスする要素のメモリアドレスと、前記第1回転目のベクトルロード命令がマスクに基づきアクセスする要素のメモリアドレスとが重ならない場合である、請求項3に記載のコンパイラプログラム。 - 前記ループが前記ベクトルロード命令の後に前記ベクトルストア命令を有する場合、アンロール数は前記第1アンロール数であり、
前記ループが前記ベクトルストア命令の後に前記ベクトルロード命令を有する場合、アンロール数は前記第2アンロール数である、請求項1に記載のコンパイラプログラム。 - 前記最適化処理は、更に、
前記配列変数の配列サイズが変数でベクトル長が定数または不明の場合、
前記ループを、前記配列サイズと前記ベクトル長の取り得る組み合わせに基づいて算出される前記第1アンロール数または前記第2アンロール数の複数のケースそれぞれについて、前記ループ内の前記ベクトルストア命令とベクトルロード命令を有するケース別ループに変換し、
前記アンローリングは、
前記ケース別ループそれぞれにおいて、前記アンローリングを行う処理を有し、
前記スケジューリングは、
前記ケース別ループそれぞれについて、前記スケジューリングを行う処理を有する、請求項1に記載のコンパイラプログラム。 - 最適化対象プログラムについて最適化処理を行うコンパイル方法であって、
前記最適化対象プログラムは、配列変数のベクトルストア命令とベクトルロード命令を有するループを有し、
前記最適化処理は、
前記ループ内の前記ベクトルストア命令とベクトルロード命令を、ベクトル長を前記配列変数の配列サイズで除算して余りを切り上げた第1アンロール数または前記第1アンロール数より1つ少ない第2アンロール数だけアンローリングを行い、
前記アンローリングした複数のベクトルロード命令のうち先頭のベクトルストア命令より後ろのベクトルロード命令を、前記先頭のベクトルストア命令より前に移動させるスケジューリングを行う、コンパイル方法。 - プロセッサと、
前記プロセッサがアクセスするメモリを有し、
前記プロセッサは、最適化対象プログラムについて最適化処理を実行し、
前記最適化対象プログラムは、配列変数のベクトルストア命令とベクトルロード命令を有するループを有し、
前記最適化処理は、
前記ループ内の前記ベクトルストア命令とベクトルロード命令を、ベクトル長を前記配列変数の配列サイズで除算して余りを切り上げた第1アンロール数または前記第1アンロール数より1つ少ない第2アンロール数だけアンローリングを行い、
前記アンローリングした複数のベクトルロード命令のうち先頭のベクトルストア命令より後ろのベクトルロード命令を、前記先頭のベクトルストア命令より前に移動させるスケジューリングを行う処理を有する、情報処理装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2020100151A JP7460902B2 (ja) | 2020-06-09 | 2020-06-09 | コンパイラプログラム、コンパイル方法、情報処理装置 |
| US17/203,800 US11693638B2 (en) | 2020-06-09 | 2021-03-17 | Compiler program, compiling method, information processing device |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2020100151A JP7460902B2 (ja) | 2020-06-09 | 2020-06-09 | コンパイラプログラム、コンパイル方法、情報処理装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2021196637A JP2021196637A (ja) | 2021-12-27 |
| JP7460902B2 true JP7460902B2 (ja) | 2024-04-03 |
Family
ID=78817421
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2020100151A Active JP7460902B2 (ja) | 2020-06-09 | 2020-06-09 | コンパイラプログラム、コンパイル方法、情報処理装置 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US11693638B2 (ja) |
| JP (1) | JP7460902B2 (ja) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP7081673B2 (ja) * | 2018-08-10 | 2022-06-07 | 株式会社大阪ソーダ | アクリル共重合体、及びゴム材料 |
| WO2020148906A1 (ja) * | 2019-01-18 | 2020-07-23 | 日本電気株式会社 | 最適化装置、最適化方法、及びコンピュータ読み取り可能な記録媒体 |
| KR102887683B1 (ko) * | 2021-12-22 | 2025-11-19 | 삼성전자주식회사 | 신경망 연산의 스케줄링 방법 및 장치 |
| CN114546401B (zh) * | 2022-02-21 | 2025-09-05 | 中山大学 | 基于循环折叠的二进制程序体积优化器 |
| US12182552B2 (en) * | 2022-05-24 | 2024-12-31 | Xilinx, Inc. | Splitting vector processing loops with an unknown trip count |
| WO2024195359A1 (ja) * | 2023-03-23 | 2024-09-26 | 日本電気株式会社 | コンパイル装置、コンパイル方法およびコンパイルプログラム |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2017509999A (ja) | 2014-04-04 | 2017-04-06 | クアルコム,インコーポレイテッド | コンパイラ最適化のためのメモリ参照メタデータ |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3196625B2 (ja) | 1995-12-06 | 2001-08-06 | 日本電気株式会社 | 並列化コンパイル方式 |
| US6539541B1 (en) * | 1999-08-20 | 2003-03-25 | Intel Corporation | Method of constructing and unrolling speculatively counted loops |
| JP6492943B2 (ja) | 2015-05-07 | 2019-04-03 | 富士通株式会社 | 計算機、コンパイル方法、コンパイルプログラム、およびパイプライン処理プログラム |
| US10180829B2 (en) * | 2015-12-15 | 2019-01-15 | Nxp Usa, Inc. | System and method for modulo addressing vectorization with invariant code motion |
| US10909287B2 (en) * | 2017-06-28 | 2021-02-02 | Intel Corporation | Methods, systems and apparatus to improve FPGA pipeline emulation efficiency on CPUs |
-
2020
- 2020-06-09 JP JP2020100151A patent/JP7460902B2/ja active Active
-
2021
- 2021-03-17 US US17/203,800 patent/US11693638B2/en active Active
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2017509999A (ja) | 2014-04-04 | 2017-04-06 | クアルコム,インコーポレイテッド | コンパイラ最適化のためのメモリ参照メタデータ |
Also Published As
| Publication number | Publication date |
|---|---|
| US20210382700A1 (en) | 2021-12-09 |
| US11693638B2 (en) | 2023-07-04 |
| JP2021196637A (ja) | 2021-12-27 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP7460902B2 (ja) | コンパイラプログラム、コンパイル方法、情報処理装置 | |
| US9292284B2 (en) | Parallel arithmetic device, data processing system with parallel arithmetic device, and data processing program | |
| Henretty et al. | Data layout transformation for stencil computations on short-vector simd architectures | |
| US5361354A (en) | Optimization of alternate loop exits | |
| US5802375A (en) | Outer loop vectorization | |
| US9038042B2 (en) | Staged loop instructions | |
| JP4339907B2 (ja) | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 | |
| US5537620A (en) | Redundant load elimination on optimizing compilers | |
| Huang et al. | Generalized loop-unrolling: a method for program speedup | |
| JP2004038225A (ja) | コンパイラプログラムおよびコンパイル処理方法 | |
| KR102379894B1 (ko) | 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 | |
| Shin et al. | Compiler-controlled caching in superword register files for multimedia extension architectures | |
| US9430203B2 (en) | Information processing apparatus and compilation method | |
| US6993756B2 (en) | Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program | |
| EP1141825B1 (en) | Method and system for identifying locations to move portions of the computer program | |
| US20160070594A1 (en) | Method and apparatus for modulo scheduling | |
| JP5169322B2 (ja) | 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法 | |
| JP5227646B2 (ja) | コンパイラ及びそのコード生成方法 | |
| Shin et al. | Exploiting superword-level locality in multimedia extension architectures | |
| JPWO1998018084A1 (ja) | メモリアクセスの高速化処理装置および方法 | |
| CN118092931A (zh) | 基于指导语句的函数向量化方法及系统 | |
| Akimova et al. | Algorithm of Automatic Parallelization of Generalized Matrix Multiplication | |
| Song et al. | What can we gain by unfolding loops? | |
| JP7006097B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
| JP7513080B2 (ja) | 処理システム及び処理方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230309 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240215 |
|
| 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: 20240220 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240304 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 7460902 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |