JP7302728B2 - ループアンローリング処理装置、方法およびプログラム - Google Patents

ループアンローリング処理装置、方法およびプログラム Download PDF

Info

Publication number
JP7302728B2
JP7302728B2 JP2022500197A JP2022500197A JP7302728B2 JP 7302728 B2 JP7302728 B2 JP 7302728B2 JP 2022500197 A JP2022500197 A JP 2022500197A JP 2022500197 A JP2022500197 A JP 2022500197A JP 7302728 B2 JP7302728 B2 JP 7302728B2
Authority
JP
Japan
Prior art keywords
loop
processing
arithmetic expression
stages
unroll
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
JP2022500197A
Other languages
English (en)
Other versions
JPWO2021161532A5 (ja
JPWO2021161532A1 (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 JPWO2021161532A1 publication Critical patent/JPWO2021161532A1/ja
Publication of JPWO2021161532A5 publication Critical patent/JPWO2021161532A5/ja
Application granted granted Critical
Publication of JP7302728B2 publication Critical patent/JP7302728B2/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
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、ソースプログラム内に記述されたループ処理に対してループアンローリングを行うループアンローリング処理装置、ループアンローリング処理方法、および、ループアンローリング処理プログラムに関する。
ループアンローリングとは、ループ処理におけるループ1回当たりの処理を増やすことによって、元のループ処理よりもループ回数を減少させることである。
ループアンローリングを行うことによって、ループ回数が減少する。従って、ループ処理を終了するか否かを判定する判定処理の回数も減少し、その結果、その判定処理に起因するオーバヘッドを減少させることができる。
上記のように、ループアンローリングでは、ループ1回当たりの処理を増やす。処理を増やした場合におけるループ1回当たりの処理が、元のループ処理におけるループ1回当たりの処理の何回分に相当するかを示す値をアンロール段数と称する。
以下に、ループアンローリングの具体例を示す。図14は、ループアンローリングの対象となる元のループ処理の例を示す図である。図14に示すループ処理では、ループ回数は10000回である。
また、配列を表す括弧内の値が整数でない場合には、小数点以下を切り捨てることによって、括弧内の値を整数とみなす。
図15は、図14に示すループ処理に対して、アンロール段数を4としてループアンローリングを行った結果の一例を示す図である。図15に示す処理では、ループ1回当たりの処理を、図14に示すループ1回当たりの処理よりも増加させ、ループ回数を10000/4=2500回に減少させている。また、図15に示す例では、iの値を4ずつ増加させながら、ループ処理を実行する。
ループアンローリングの結果は1種類に限定されるわけではない。図16は、図14に示すループ処理に対して、アンロール段数を4としてループアンローリングを行った結果の他の例を示す図である。図16に示す例でも、ループ回数を10000/4=2500回に減少させている。また、図16に示す例では、jの値を1ずつ増加させながら、ループ処理を実行する。
図15および図16に示す例では、図14に示すループ処理に比べて、ループ回数を減少させているので、ループ処理を終了するか否かを判定する判定処理に起因するオーバヘッドを減少できる。
また、前述のように、配列を表す括弧内の値が整数でない場合には、小数点以下を切り捨てることによって、括弧内の値を整数とみなす。従って、図16に示す例において、B[(4*j+0)/2]と、B[(4*j+1)/2]は同一の値となる。同様に、図16に示す例において、B[(4*j+2)/2]と、B[(4*j+3)/2]は同一の値となる。従って、例えば、B[(4*j+0)/2]およびC[4*j+0]の値を読み込んで、A[4*j+0] = B[(4*j+0)/2] + C[4*j+0]の計算を行った後、A[4*j+1]
= B[(4*j+1)/2] + C[4*j+1]の計算を行う際には、B[(4*j+1)/2]の値を読み込む必要はない。
図17は、アンロール段数と、ループアンローリングを行った場合のプログラムの性能との関係の傾向を示す模式図である。この性能の具体例の1つとして、ループアンローリングを行った場合のループ処理の処理時間が挙げられる。この場合、ループ処理の処理時間が短いほど性能が良いと言え、処理時間が長いほど性能が悪いと言える。
図17に示すように、一般的に、アンロール段数を増加させるにつれ、性能も上昇する。しかし、アンロール段数を増加させ過ぎると、性能が悪化する。アンロール段数を増加させ過ぎると性能が悪化する理由は、ループ1回分の処理量が多くなり過ぎて、レジスタの容量が不足する状態となり、レジスタからメモリに移動するデータが増えるためであると考えられる。
特許文献1には、元のループ処理のループ回数をループ展開回数で割った余りの繰り返しループと、残りの回数分のループとを分けて展開する技術が記載されている。なお、特許文献1に記載の「展開」とは、ループアンローリングのことであり、特許文献1に記載の「ループ展開回数」とは、アンロール段数のことである。特許文献1に記載された上記の技術の具体例を、図18に示す。
図18に示す上段は、元のループ処理を表し、図18に示す下段はそのループ処理に対して特許文献1に記載された上記の技術を適用した結果を表す。図18に示す演算式A1は、元のループ処理のループ回数Nをループ展開回数(すなわち、アンロール段数。本例では4とする。)で割った余りの繰り返しループを表す。演算式A1に含まれる“% ”は、除算の余りを導出する演算を意味する。図18に示す演算式A2は、残りの回数分のループ処理を表す。
特開平4-344535号公報
特許文献1に記載された上記の技術には、ループアンローリング後の処理をより効率的にする余地がまだある。図18に示す演算式A1が示すループ処理では、アンロール段数が1段となっている。すなわち、演算式A1が示すループ処理では、ループ1回当たりの処理量が、元のループ処理(図18の上段を参照)におけるループ1回当たりの処理量と変わらず、演算式A1が表す“N%4 ”回分のループ処理では、元のループ処理における同じ回数分のループ処理と同様のオーバヘッドが生じる。
そこで、本発明は、ループアンローリング後の処理をより効率化することができるループアンローリング処理装置、ループアンローリング処理方法、および、ループアンローリング処理プログラムを提供することを目的とする。
本発明によるループアンローリング処理装置は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する特定部と、前記ループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、R-Q*(M-L)>0である場合に、前記ループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式とを含む演算式を生成する生成部と、前記特定部によって特定された前記記述箇所の演算式を、前記生成部によって生成された演算式に置き換える置き換え部とを備えることを特徴とする。
本発明によるループアンローリング処理方法は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定し、前記ループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、R-Q*(M-L)>0である場合に、前記ループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式とを含む演算式を生成し、前記記述箇所の演算式を、生成した演算式に置き換えることを特徴とする。
本発明によるループアンローリング処理プログラムは、コンピュータに、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する特定処理、前記ループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、R-Q*(M-L)>0である場合に、前記ループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式とを含む演算式を生成する生成処理、および、前記特定処理で特定された前記記述箇所の演算式を、前記生成処理で生成された演算式に置き換える置き換え処理を実行させることを特徴とする。
本発明によれば、ループアンローリング後の処理をより効率化することができる。
本発明の第1の実施形態のループアンローリング処理装置の例を表すブロック図である。 入力されるソースプログラム内における、アンロール段数の指定およびループ処理を表す演算式の例を示す図である。 生成部が生成する演算式の例を示す図である。 演算式X2が表す処理、および、その後に実行される演算式X3が表す処理を示す模式図である。 本発明の第1の実施形態の処理経過の例を示すフローチャートである。 アンロール段数毎のループ処理1回分の処理時間の例を示す図である。 入力されるソースプログラム内における、アンロール段数の下限およびアンロール段数の上限の指定並びにループ処理を表す演算式の例を示す図である。 第2の実施形態の生成部が生成する演算式の例を示す図である。 演算式Y2が表す処理を示す模式図である。 演算式Y1が表す処理の一例を示す模式図である。 本発明の第2の実施形態の処理経過の例を示すフローチャートである。 本発明の各実施形態のループアンローリング処理装置に係るコンピュータの構成例を示す概略ブロック図である。 本発明のループアンローリング処理装置の概要を示すブロック図である。 ループアンローリングの対象となる元のループ処理の例を示す図である。 図14に示すループ処理に対して、アンロール段数を4としてループアンローリングを行った結果の一例を示す図である。 図14に示すループ処理に対して、アンロール段数を4としてループアンローリングを行った結果の他の例を示す図である。 アンロール段数と、ループアンローリングを行った場合のプログラムの性能との関係の傾向を示す模式図である。 特許文献1に記載された技術の具体例を示す図である。
以下、本発明の実施形態を図面を参照して説明する。
本発明の各実施形態のループアンローリング処理装置には、ソースプログラムが入力される。そして、各実施形態のループアンローリング処理装置は、ソースプログラム内のループ処理に対してループアンローリングを行った結果を表す演算式を生成する。そして、各実施形態のループアンローリング処理装置は、ソースプログラム内のループ処理を表す演算式を、生成した演算式に置き換える。
実施形態1.
図1は、本発明の第1の実施形態のループアンローリング処理装置の例を表すブロック図である。第1の実施形態のループアンローリング処理装置1は、入力部2と、特定部3と、生成部4と、置き換え部5とを備える。
入力部2は、ソースプログラムを取得するための入力装置である。入力部2は、例えば、光学ディスク等のデータ記録媒体に記録されたソースプログラムを読み込むデータ読み込み装置であるが、入力部2は、このようなデータ読み込み装置に限定されない。
入力部2を介してループアンローリング処理装置1に入力されるソースプログラムは、ループ処理を含んでいるものとする。
また、入力されるソースプログラム内で、所定の書式によって、アンロール段数が指定されていてもよい。
アンロール段数の指定は、ソースプログラムの入力とは別に行われてもよい。例えば、ソースプログラムの入力とは別に、キーボード等の入力デバイス(図1において図示略)を介してアンロール段数が入力されることによって、アンロール段数が指定されてもよい。
以下に示す例では、入力されるソースプログラム内で、所定の書式によって、アンロール段数が指定されていている場合を例にして説明する。
図2は、入力されるソースプログラム内における、アンロール段数の指定およびループ処理を表す演算式の例を示す図である。ソースプログラムには、図2に示す演算式以外の演算式も含まれている。
図2に示す“#pragma unroll()”は、アンロール段数を指定するための所定の書式の一例である。図2では、この書式の括弧内に示された“4”がアンロール段数として指定された場合を例示している。以下、指定されたアンロール段数が4である場合を例にして説明する。また、以下の説明では、アンロール段数を指定するための所定の書式は、元のループ処理を表す演算式の直前に記述されるものとする。
特定部3は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する。ループ処理は、プログラム言語に応じた規則で記述されている。特定部3は、ループ処理に合致する演算式を、ソースプログラム中から特定し、その演算式の記述箇所を特定すればよい。例えば、本例では、ループ処理が“for () {}”という書式で記述されるものとする。この場合、図2に示す2行目から4行目までの演算式が“for () {}”という書式に適合するので、特定部3は、図2に示す2行目から4行目までの演算式がループ処理を表していると判定し、その演算式の記述箇所を特定する。
さらに、ソースプログラム内でアンロール段数が指定されている場合には、特定部3は、アンロール段数を指定している文字列の記述箇所も特定する。
本例では、特定部3は、ソースプログラム内で、図2に示す演算式の記述箇所を特定する。
生成部4は、特定部3が特定したソースプログラム内の記述箇所に記述された文字列を参照することによって、アンロール段数の指定を受け付ける。本例では、生成部4は、図2に示す1行目の所定の書式の文字列に基づいて、アンロール段数“4”の指定を受け付ける。
なお、生成部4は、キーボード等の入力デバイス(図1において図示略)を介して入力されたアンロール段数を取得することによって、アンロール段数の指定を受け付けてもよい。
また、生成部4は、入力されたソースプログラム内に記述されたループ処理(本例では、図2に示す2行目から4行目までの演算式が表すループ処理)に対してループアンローリングを行った結果を表す演算式を生成する。
図3は、生成部4が生成する演算式の例を示す図である。図3に例示する演算式は演算式X1と、演算式X2と、演算式X3とを含む。
演算式X1は、入力されたソースプログラムに記述された元のループ処理のループ回数N(図2参照)が指定されたアンロール段数よりも小さいという例外的な場合の処理を表す。そのため、演算式X1が表す処理については後述する。
演算式X2が表す処理について説明する。演算式X2は、ソースプログラムに記述された元のループ処理のループ回数Nを、指定されたアンロール段数で除算した際の余りが0以外である場合に、その余りと指定されたアンロール段数との和をアンロール段数とするループ1回分の処理を行うことを表している。
演算式X2において、元のループ処理のループ回数Nを、指定されたアンロール段数(本例では4)で除算した際の余りは、“N%4 ”と表される。この場合、0以外の余りは、“1”,“2”,“3”のいずれかである。余りが1の場合を例にして説明すると、余りと、指定されたアンロール段数“4”との和は、1+4=5となる。従って、この場合には以下に示すアンロール段数が5のループ1回分の処理を行うことを、演算式X2は表している。
{
A[i+0]
= B[i+0] + C[i+0];
A[i+1]
= B[i+1] + C[i+1];
A[i+2]
= B[i+2] + C[i+2];
A[i+3]
= B[i+3] + C[i+3];
A[i+4]
= B[i+4] + C[i+4];

i+=5
}
同様に、演算式X2は、余りが2である場合にはアンロール段数が6のループ1回分の処理を行い、余りが3である場合にはアンロール段数が7のループ1回分の処理を行うことを表している。
そして、図3に示す演算式は、演算式X2が表す処理の後に、演算式X3が表す処理を行うことを表している。また、演算式X2は、N%4=0 である場合には(すなわち、元のループ処理のループ回数Nを、指定されたアンロール段数で除算した余りが0である場合には)、処理を行わないことを表し、次の演算式X3が表す処理を行うことになる。
演算式X3が表す処理は、指定されたアンロール段数でループ処理を行うことを表している。
図4は、演算式X2が表す処理、および、その後に実行される演算式X3が表す処理を示す模式図である。
図4に模式的に示す処理51は、演算式X2(図3参照)が表す処理である。処理51は、元のループ処理のループ回数を、指定されたアンロール段数で除算した際の余りと、その指定されたアンロール段数の和をアンロール段数とするループ1回分の処理である。
図4に模式的に示す処理52は、演算式X3(図3参照)が表す処理である。処理52は、処理51の後に実行される。処理52は、指定されたアンロール段数でのループ処理である。
なお、元のループ処理のループ回数を、指定されたアンロール段数で除算した際の余りが0である場合には、処理51は実行されずに、処理52が実行されることになる。
次に、図3に示す演算式X1が表す処理について説明する。演算式X1は、入力されたソースプログラムに記述された元のループ処理(図2参照)のループ回数Nが、指定されたアンロール段数よりも小さい場合には、元のループ処理と同じループ処理を行うことを表している。
演算式X2以降は、元の処理のループ回数が指定されたアンロール段数以上の場合に実行される処理を表している。従って、演算式X1が表す処理が実行される場合には、演算式X2が表す処理および演算式X3が表す処理は実行されない。
演算式X1,X2,X3(図3参照)は例示であり、演算式X1,X2,X3の具体的な内容は、元のループ処理に応じて変わる。ただし、生成部4は、演算式X1,X2,X3のそれぞれに相当する演算式を含む演算式を生成する。
なお、生成部4は、演算式X1に相当する演算式の代わりに、入力されたソースプログラムに記述された元のループ処理のループ回数が、指定されたアンロール段数よりも小さい場合には、そのループ回数をアンロール段数とするループ1回分の処理を行うことを表す演算式を定め、その演算式と、演算式X2,X3のそれぞれに相当する演算式を含む演算式を生成してもよい。
置き換え部5は、特定部3によって特定されたソースプログラム内の記述箇所(すなわち、元のループ処理の記述箇所)の演算式を、生成部4が生成した演算式に置き換える。また、元のループ処理を表す演算式の直前にアンロール段数を指定するための所定の書式の文字列が記述されている場合には、その文字列も併せて、生成部4が生成した演算式に置き換える。
特定部3、生成部4および置き換え部5は、例えば、ループアンローリング処理プログラムに従って動作するコンピュータのCPU(Central Processing Unit )によって実現される。例えば、CPUが、コンピュータのプログラム記憶装置等のプログラム記録媒体からループアンローリング処理プログラムを読み込み、そのループアンローリング処理プログラムに従って、特定部3、生成部4および置き換え部5として動作すればよい。
次に、本発明の第1の実施形態の処理経過について説明する。既に説明した事項については、適宜、説明を省略する。図5は、本発明の第1の実施形態の処理経過の例を示すフローチャートである。
入力部2を介してソースプログラムが入力されると、特定部3は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する(ステップS1)。なお、特定部3が、ループ処理を表す演算式がソースプログラム内に存在しないと判定した場合には、その時点で処理を終了してよい。この点は、後述の第2の実施形態でも同様である。
ステップS1の後、生成部4は、アンロール段数の指定を受け付ける(ステップS2)。
次に、生成部4は、演算式X1,X2,X3(図3参照)のそれぞれに相当する演算式を含む演算式を生成する(ステップS3)。
次に、置き換え部5は、ステップS1で特定された記述箇所の演算式を、ステップS3で生成された演算式に置き換える(ステップS4)。元のループ処理を表す演算式の直前にアンロール段数を指定するための所定の書式の文字列が記述されている場合には、置き換え部5は、その文字列も併せて、ステップS3で生成された演算式に置き換える。
なお、入力されたソースプログラム内に、ループ処理を表す演算式の記述箇所が複数存在する場合には、その記述箇所毎に、ステップS1~S4を実行すればよい。
図4に示すように、本実施形態におけるループアンローリングの結果に基づく処理では、元のループ処理のループ回数を指定されたアンロール段数で除算した際の余りと、指定されたアンロール段数との和をアンロール段数とするループ1回分の処理51(図4参照)を行い、その後、指定されたアンロール段数でループ処理を行う。演算式X1(図3参照)が示す例外的な処理を行う場合や、アンロール段数として1が指定される場合を除けば、アンロール段数を1としてループ処理を行うことがない。よって、本実施形態によれば、ループアンローリング後の処理をより効率化することができる。
特許文献1に記載の技術と、本願の第1の実施形態とを具体的な数値を用いて比較する。アンロール段数毎のループ処理1回分の処理時間が、図6に示す時間であるとする。また、元の処理のループ回数が7回であり、指定されるアンロール段数が4であるとする。この場合、7を4で除算した際の商は1であり、余りは3である。
上記の例を特許文献1の技術に適用した場合、アンロール段数“1”でループ3回分の処理を行い、アンロール段数“4”でループ1回分の処理を行うことになる。この場合の処理時間は、4*3+4*1=16となる。
また、上記の例を本発明の第1の実施形態に適用したとする。この場合、3+4=7をアンロール段数とするループ1回分の処理を行う。この例では、この処理で元のループ処理に相当する処理が終了するので、演算式X3(図3)が表す処理は実行されない。この場合の処理時間は、7*1=7となる。
従って、特許文献1の技術と、本発明の第1の実施形態とを比較すると、ループアンローリング結果の処理を実行する際の処理時間は、後者の方が短い。よって、本実施形態によれば、ループアンローリング後の処理をより効率化できていると言える。
また、指定されるアンロール段数の値は、例えば、ソースプログラムを作成するプログラマによって決定される。この場合、プログラマは、種々のアンロール段数を公知のループアンローリング(特許文献1に記載された技術でもよい。)に適用し、良い性能が得られる場合のアンロール段数を特定し、そのアンロール段数を本実施形態のループアンローリング処理装置1に対して指定すればよい。
実施形態2.
第1の実施形態では、元のループ処理のループ回数を指定されたアンロール段数で除算した際の余りと、指定されたアンロール段数との和をアンロール段数とするループ1回分の処理を行うことを表す演算式(図3に示す例では、演算式X2)を含む演算式を生成する。
前述のように、アンロール段数を増加させ過ぎると性能が悪化する傾向がある。従って、元のループ処理のループ回数を指定されたアンロール段数で除算した際の余りと、指定されたアンロール段数との和が大きすぎると、その和をアンロール段数とするループ1回分の処理に時間がかかってしまうことも考えられる。
そこで、本発明の第2の実施形態では、ループアンローリング処理装置は、アンロール段数の下限、および、アンロール段数の上限の指定を受け付ける。
また、本発明の第2の実施形態のループアンローリング処理装置は、第1の実施形態のループアンローリング処理装置と同様に、図1に示すブロック図で表すことができるので、図1を用いて第2の実施形態を説明する。
入力部2は、第1の実施形態における入力部2と同様である。
入力部2を介して入力されるソースプログラム内で、所定の書式によって、アンロール段数の下限およびアンロール段数の上限が指定されていてもよい。
アンロール段数の下限およびアンロール段数の上限の指定は、ソースプログラムの入力とは別に行われてもよい。例えば、ソースプログラムの入力とは別に、キーボード等の入力デバイス(図1において図示略)を介してアンロール段数の下限およびアンロール段数の上限が入力されることによって、アンロール段数の下限およびアンロール段数の上限が指定されてもよい。
以下に示す例では、入力されるソースプログラム内で、所定の書式によって、アンロール段数の下限およびアンロール段数の上限が指定されていている場合を例にして説明する。
図7は、入力されるソースプログラム内における、アンロール段数の下限およびアンロール段数の上限の指定並びにループ処理を表す演算式の例を示す図である。ソースプログラムには、図7に示す演算式以外の演算式も含まれている。
図7に示す“#pragma unroll( , ) ”は、アンロール段数の下限およびアンロール段数の上限を指定するための所定の書式の一例である。図7では、この書式の括弧内に示された“8”,“11”がそれぞれアンロール段数の下限、アンロール段数の上限として指定された場合を例示している。また、以下の説明では、アンロール段数の下限およびアンロール段数の上限を指定するための所定の書式は、元のループ処理を表す演算式の直前に記述されるものとする。
特定部3は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する。この動作は、第1の実施形態における特定部3の動作と同様であり、説明を省略する。
さらに、ソースプログラム内でアンロール段数の下限およびアンロール段数の上限が指定されている場合には、特定部3は、その指定の記述箇所も特定する。
本例では、特定部3は、ソースプログラム内で、図7に示す演算式の記述箇所を特定する。
生成部4は、特定部3が特定したソースプログラム内の記述箇所に記述された文字列を参照することによって、アンロール段数の下限およびアンロール段数の上限の指定を受け付ける。本例では、生成部4は、図7に示す1行目の所定の書式の文字列に基づいて、アンロール段数の下限として“8”の指定を受け付け、アンロール段数の上限として“11”の指定を受け付ける。
なお、生成部4は、キーボード等の入力デバイス(図1において図示略)を介して入力された値を取得することによって、アンロール段数の下限およびアンロール段数の上限の指定を受け付けてもよい。
また、生成部4は、入力されたソースプログラム内に記述されたループ処理(本例では、図7に示す2行目から4行目までの演算式が表すループ処理)に対してループアンローリングを行った結果を表す演算式を生成する。
図8は、第2の実施形態の生成部4が生成する演算式の例を示す図である。図8では、演算式の一部を省略している。図8に例示する演算式は、演算式Y0と、演算式Y1と、演算式Y2をと含む。さらに、演算式Y1は、演算式Y11と、演算式Y12とを含む。演算式Y2は、演算式Y21と、演算式Y22と、演算式Y23とを含む。
以下の説明では、ソースプログラム内に記述された元のループ処理のループ回数をNとする。また、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとする。さらに、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとする。
演算式Y0は、Lに、指定されたアンロール段数の下限を代入する処理、Mに、指定されたアンロール段数の上限を代入する処理、および、Q,Rを計算する処理を表している。
演算式Y1は、R-Q*(M-L)>0である場合の処理を表し、演算式Y2は、R-Q*(M-L)>0でない場合の処理を表す。なお、図8では、R-Q*(M-L)を変数Sで表している。
まず、演算式Y2が表す処理を先に説明する。前述のように、演算式Y2は、演算式Y21と、演算式Y22と、演算式Y23とを含む。
演算式Y21が表す処理について説明する。演算式Y21は、アンロール段数をMとして、Rを(M-L)で除算した際の商(図8では、R/(M-L) と記述している。)の回数のループ処理を行うことを表している。
図8に示す演算式Y2は、演算式Y21が表す処理の後に、演算式Y22が表す処理を行うことを表している。そして、演算式Y22は、Rを(M-L)で除算した際の余り(図8では、R % (M-L) と記述している。)が0以外である場合に、その余りとLとの和をアンロール段数とするループ1回分の処理を行うことを表している。
演算式Y2は、演算式Y22が表す処理の後に、演算式Y23が表す処理を行うことを表している。そして、演算式Y23は、アンロール段数をLとしてループ処理を行うことを表している。
なお、演算式Y22が示す処理は、Rを(M-L)で除算した際の余り(R % (M-L) )が0である場合には、処理を行わないことを表し、この場合には、演算式Y21が示す処理の後に、演算式Y23が表す処理を行うことになる。
図9は、演算式Y2が表す処理を示す模式図である。
図9に模式的に示す処理61は、演算式Y2に含まれる演算式Y21(図8参照)が表す処理である。処理61は、アンロール段数をMとする、R/(M-L) 回のループ処理である。R/(M-L) は、Rを(M-L)で除算した際の商であり、整数である。
図9に模式的に示す処理62は、演算式Y2に含まれる演算式Y22(図8参照)が表す処理である。処理62は、アンロール段数をL+R%(M-L) とするループ1回分の処理である。R%(M-L) は、Rを(M-L)で除算した際の余りである。
図4に模式的に示す処理63は、演算式Y2に含まれる演算式Y23(図8参照)が表す処理である。処理63は、処理62の後に実行される。処理63は、アンロール段数の下限Lでのループ処理である。
なお、R%(M-L) が0である場合には、処理61の後に、処理62は実行されずに、処理63が実行される。
演算式Y2が表す処理(図8、図9を参照)では、段数R分の処理を、段数(M-L)分の処理に分割し、その段数(M-L)分の処理をループ処理の各回に配分していると言える。また、段数R分の処理を、段数(M-L)分の処理に分割した場合の余りに該当する処理(段数R%(M-L) 分の処理)は、処理62のループ1回分の処理に配分される。また、処理63は、そのような配分が行われない回のループ処理である。
次に、演算式Y1(図8参照)が表す処理について説明する。前述のように、演算式Y1は、演算式Y11と、演算式Y12とを含む。
演算式Y1は、元のループ処理のループ回数Nをアンロール段数の下限Lで除算した際の余りRが大きく、ループ処理の各回に配分しきれない場合の処理を示している。
例えば、N=7、L=4、M=6であるとする。この場合Q=7/4=1であり、R=7%4=3である。Q=1であるということは、ループ回数が1回であることを意味する。従って、(M-L)段分(すなわち、2段分)の処理を、ループ1回分の処理にしか配分できず、R=3段分の処理を全て配分できるわけではない。演算式Y1は、本例のような状態になった場合の例外的な処理を表している。
演算式Y1に含まれる演算式Y11(図8参照)は、元のループ処理におけるループ1回分の処理を、R-Q*(M-L)回行うことを示している。上記の例のような、N=7、L=4、M=6、Q=1、R=3の場合には、R-Q*(M-L)=3-1*(6-4)=1となる。従って、上記の例の場合、元のループ処理におけるループ1回分の処理を1回行うことになる。
図8に示す演算式Y1は、演算式Y11が表す処理の後に、演算式Y12が表す処理行うことを表している。そして、演算式Y12は、アンロール段数をMとしてループ処理を行うことを表している。上記の例において、アンロール段数をMとした場合のループ処理のループ回数は1回である。
従って、上記の例の場合における演算式Y1が表す処理は、図10のように表される。処理71は、元のループ処理におけるループ1回分の処理を、R-Q*(M-L)=1回行う処理である。処理72は、アンロール段数をM=6とした場合のループ処理である。ただし、本例では、処理72におけるループ回数は1回である。
図8に示す演算式Y0,Y1,Y2は例示であり、演算式Y0,Y1,Y2の具体的な内容は、元のループ処理に応じて変わる。ただし、第2の実施形態の生成部4は、演算式Y0,Y1,Y2のそれぞれに相当する演算式を含む演算式を生成する。
置き換え部5は、特定部3によって特定されたソースプログラム内の記述箇所(すなわち、元のループ処理の記述箇所)の演算式を、生成部4が生成した演算式に置き換える。また、元のループ処理を表す演算式の直前にアンロール段数の下限およびアンロール段数の上限を指定するための所定の書式の文字列が記述されている場合には、その文字列も併せて、生成部4が生成した演算式に置き換える。
次に、本発明の第2の実施形態の処理経過について説明する。既に説明した事項については、適宜、説明を省略する。図11は、本発明の第2の実施形態の処理経過の例を示すフローチャートである。
入力部2を介してソースプログラムが入力されると、特定部3は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する(ステップS1)。ステップS1は、第1の実施形態におけるステップS1(図5参照)と同様である。
ステップS1の後、生成部4は、アンロール段数の下限およびアンロール段数の上限の指定を受け付ける(ステップS12)。
次に、生成部4は、演算式Y0,Y1,Y2(図8参照)のそれぞれに相当する演算式を含む演算式を生成する(ステップS13)。
次に、置き換え部5は、ステップS1で特定された記述箇所の演算式を、ステップS13で生成された演算式に置き換える(ステップS14)。元のループ処理を表す演算式の直前にアンロール段数の下限およびアンロール段数の上限を指定するための所定の書式の文字列が記述されている場合には、置き換え部5は、その文字列も併せて、ステップS13で生成された演算式に置き換える。
なお、入力されたソースプログラム内に、ループ処理を表す演算式の記述箇所が複数存在する場合には、その記述箇所毎に、ステップS1~S14を実行すればよい。
図9に示すように、本実施形態におけるループアンローリングの結果に基づく処理では、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行い、その後、Rを(M-L)で除算した際の余りと、アンロール段数の下限Lとの和をアンロール段数とするループ1回分の処理を行い、さらにその後、アンロール段数をLとしてループ処理を行う。従って、R段分の処理をループ処理の各回に配分できないような例外的な場合や、アンロール段数の下限として1が指定される場合を除けば、アンロール段数を1としてループ処理を行うことがない。よって、本実施形態によれば、ループアンローリング後の処理をより効率化することができる。
さらに、本実施形態では、アンロール段数が上限のMより大きくなることはない。従って、アンロール段数が大きくなり過ぎて、実行プログラムの性能が悪化することを防止できる。
なお、各実施形態において、ループアンローリング処理装置1は、ステップS4(図5参照)の後や、ステップS14(図11参照)の後に、書き換え後のソースプログラムをデータ記録媒体に記録してもよい。また、ループアンローリング処理装置1は、書き換え後のソースプログラムに基づいて、実行プログラムを生成してもよい。
図12は、本発明の各実施形態のループアンローリング処理装置1に係るコンピュータの構成例を示す概略ブロック図である。例えば、コンピュータ1000は、CPU1001と、主記憶装置1002と、補助記憶装置1003と、インタフェース1004と、データ記録媒体に記録されたソースプログラムを読み込むデータ読み込み装置1005とを備える。
本発明の各実施形態のループアンローリング処理装置1は、コンピュータ1000によって実現される。ループアンローリング処理装置1の動作は、プログラム(ループアンローリング処理プログラム)の形式で、補助記憶装置1003に記憶されている。CPU1001は、プログラムを補助記憶装置1003から読み出して主記憶装置1002に展開し、そのプログラムに従って、上記の各実施形態で説明した処理を実行する。この場合、入力部2は、データ読み込み装置1005によって実現される。特定部3、生成部4および置き換え部5は、CPU1001によって実現される。
補助記憶装置1003は、一時的でない有形の媒体の例である。一時的でない有形の媒体の他の例として、インタフェース1004を介して接続される磁気ディスク、光磁気ディスク、CD-ROM(Compact Disk Read Only Memory )、DVD-ROM(Digital Versatile Disk Read Only Memory )、半導体メモリ等が挙げられる。また、プログラムが通信回線によってコンピュータ1000に配信される場合、配信を受けたコンピュータ1000がそのプログラムを主記憶装置1002に展開し、そのプログラムに従って上記の実施形態で説明した処理を実行してもよい。
また、各構成要素の一部または全部は、汎用または専用の回路(circuitry )、プロセッサ等やこれらの組合せによって実現されてもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各構成要素の一部または全部は、上述した回路等とプログラムとの組合せによって実現されてもよい。
各構成要素の一部または全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
次に、本発明の概要について説明する。図13は、本発明のループアンローリング処理装置の概要を示すブロック図である。ループアンローリング処理装置は、特定部3と、生成部4と、置き換え部5とを備える。
特定部3は、入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する。
生成部4は、そのループ処理のループ回数を、指定されたアンロール段数で除算した際の余りが0以外である場合に、当該余りと指定されたアンロール段数との和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、指定されたアンロール段数でループ処理を行うことを表す演算式を生成する。
置き換え部5は、特定部3によって特定された記述箇所の演算式を、生成部4によって生成された演算式に置き換える。
そのような構成により、ループアンローリング後の処理をより効率化することができる。
また、生成部4が、入力されたソースプログラムに記述されたループ処理のループ回数が、指定されたアンロール段数よりも小さい場合には、そのループ処理と同じループ処理を行うことを表す演算式を含む演算式を生成してもよい。
また、生成部4が、入力されたソースプログラムに記述されたループ処理のループ回数が、指定されたアンロール段数よりも小さい場合には、そのループ回数をアンロール段数とするループ1回分の処理を行うことを表す演算式を含む演算式を生成してもよい。
また、生成部4が、入力されたソースプログラムに記述された所定の書式によって、アンロール段数の指定を受け付けてもよい。
また、図13に示す生成部4は、以下の動作を行ってもよい。すなわち、生成部4は、元のループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、R-Q*(M-L)>0である場合に、元のループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式とを含む演算式を生成してもよい。
この場合、生成部4が、入力されたソースプログラムに記述された所定の書式によって、アンロール段数の下限およびアンロール段数の上限の指定を受け付けてもよい。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記の実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
産業上の利用の可能性
本発明は、ソースプログラム内に記述されたループ処理に対してループアンローリングを行うループアンローリング処理装置、方法およびプログラムに好適に適用可能である。
1 ループアンローリング処理装置
2 入力部
3 特定部
4 生成部
5 置き換え部

Claims (4)

  1. 入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する特定部と、
    前記ループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、
    R-Q*(M-L)>0である場合に、前記ループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、
    R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式と
    を含む演算式を生成する生成部と、
    前記特定部によって特定された前記記述箇所の演算式を、前記生成部によって生成された演算式に置き換える置き換え部とを備える
    ことを特徴とするループアンローリング処理装置。
  2. 前記生成部は、
    入力された前記ソースプログラムに記述された所定の書式によって、アンロール段数の下限およびアンロール段数の上限の指定を受け付ける
    請求項1に記載のループアンローリング処理装置。
  3. 入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定し、
    前記ループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、
    R-Q*(M-L)>0である場合に、前記ループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、
    R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式と
    を含む演算式を生成し、
    前記記述箇所の演算式を、生成した演算式に置き換える
    ことを特徴とするループアンローリング処理方法。
  4. コンピュータに、
    入力されたソースプログラムから、ループ処理を表す演算式の記述箇所を特定する特定処理、
    前記ループ処理のループ回数をNとし、指定されたアンロール段数の下限をLとし、指定されたアンロール段数の上限をMとし、NをLで除算した際の商をQとし、NをLで除算した際の余りをRとしたときに、
    R-Q*(M-L)>0である場合に、前記ループ処理におけるループ1回分の処理をR-Q*(M-L)回行うこと、および、その後に、アンロール段数をMとしてループ処理を行うことを示す演算式と、
    R-Q*(M-L)>0でない場合に、アンロール段数をMとして、Rを(M-L)で除算した際の商の回数のループ処理を行うこと、その後、Rを(M-L)で除算した際の余りが0以外である場合に当該余りとLとの和をアンロール段数とするループ1回分の処理を行うこと、および、その後に、アンロール段数をLとしてループ処理を行うことを示す演算式と
    を含む演算式を生成する生成処理、および、
    前記特定処理で特定された前記記述箇所の演算式を、前記生成処理で生成された演算式に置き換える置き換え処理
    を実行させるためのループアンローリング処理プログラム。
JP2022500197A 2020-02-14 2020-02-14 ループアンローリング処理装置、方法およびプログラム Active JP7302728B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2020/005891 WO2021161532A1 (ja) 2020-02-14 2020-02-14 ループアンローリング処理装置、方法およびプログラム

Publications (3)

Publication Number Publication Date
JPWO2021161532A1 JPWO2021161532A1 (ja) 2021-08-19
JPWO2021161532A5 JPWO2021161532A5 (ja) 2022-08-12
JP7302728B2 true JP7302728B2 (ja) 2023-07-04

Family

ID=77293020

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022500197A Active JP7302728B2 (ja) 2020-02-14 2020-02-14 ループアンローリング処理装置、方法およびプログラム

Country Status (3)

Country Link
US (1) US20230161590A1 (ja)
JP (1) JP7302728B2 (ja)
WO (1) WO2021161532A1 (ja)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017041085A (ja) 2015-08-19 2017-02-23 株式会社東芝 プログラム仕様推定装置、推定方法、および推定プログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04344535A (ja) * 1991-05-22 1992-12-01 Nec Software Ltd ループの展開装置
US6035125A (en) * 1997-07-25 2000-03-07 International Business Machines Corporation Method and system for generating compact code for the loop unrolling transformation
US20060048122A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Method, system and computer program product for hierarchical loop optimization of machine executable code
US9038042B2 (en) * 2012-06-29 2015-05-19 Analog Devices, Inc. Staged loop instructions

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017041085A (ja) 2015-08-19 2017-02-23 株式会社東芝 プログラム仕様推定装置、推定方法、および推定プログラム

Also Published As

Publication number Publication date
US20230161590A1 (en) 2023-05-25
JPWO2021161532A1 (ja) 2021-08-19
WO2021161532A1 (ja) 2021-08-19

Similar Documents

Publication Publication Date Title
US9898266B2 (en) Loop vectorization methods and apparatus
US8825615B2 (en) Simplifying implementation of custom atomic transactions in a programming environment
JP2009104422A (ja) マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US11630986B2 (en) Graph conversion method
JPS61107431A (ja) 演算装置
JP6666554B2 (ja) 情報処理装置、変換プログラム、及び変換方法
JP4026940B2 (ja) プログラム変換装置
JP7302728B2 (ja) ループアンローリング処理装置、方法およびプログラム
JP7302727B2 (ja) ループアンローリング処理装置、方法およびプログラム
JP4677172B2 (ja) レジスタあたり複数の符号付き独立データ要素の処理を可能にする装置、方法、およびコンパイラ
JP2021192187A (ja) 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
CN108389153A (zh) 一种视图加载的方法及终端设备
JP2000353097A (ja) 低密回の干渉グラフを生成する方法および装置
KR20120052751A (ko) 명령어 오퍼랜드 변경 장치 및 방법
US7257807B2 (en) Method for optimizing execution time of parallel processor programs
JP5648559B2 (ja) 帳票出力装置、帳票出力方法および帳票出力プログラム
JP7447529B2 (ja) 情報処理装置、情報処理方法、および、プログラム
JP2007018313A (ja) 回路設計プログラム、回路設計装置、回路設計方法
JP6627630B2 (ja) コンパイル方法、コンパイルプログラム及び情報処理装置
WO2023221626A1 (zh) 一种内存分配的方法和装置
CN111326216B (zh) 一种针对大数据基因测序文件的快速划分方法
JPWO2020066375A1 (ja) 情報処理装置、情報処理方法、プログラム
CN113743598A (zh) 一种ai芯片的运行方式的确定方法和装置
JP2023004763A (ja) プログラム変換装置、プログラム変換方法およびプログラム
JP2016177652A (ja) コンパイラプログラム、システム、方法、及び装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220616

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220616

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230605

R151 Written notification of patent or utility model registration

Ref document number: 7302728

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151