JP6245031B2 - コンパイルプログラム、コンパイル方法およびコンパイル装置 - Google Patents
コンパイルプログラム、コンパイル方法およびコンパイル装置 Download PDFInfo
- Publication number
- JP6245031B2 JP6245031B2 JP2014066929A JP2014066929A JP6245031B2 JP 6245031 B2 JP6245031 B2 JP 6245031B2 JP 2014066929 A JP2014066929 A JP 2014066929A JP 2014066929 A JP2014066929 A JP 2014066929A JP 6245031 B2 JP6245031 B2 JP 6245031B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- simd
- loop
- arithmetic expression
- 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; 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- 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
-
- 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/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
Description
また、1つの態様では、記憶部と変換部とを有するコンパイル装置が提供される。記憶部は、ループ内に、K回転前(Kは1以上の整数)の演算の結果を参照する第1の変数を含む第1の演算式をもつ第1のコードを記憶する。変換部は、第1の演算式を、K+1回転以上前の演算の結果を参照する第2の変数を用いて、第1の変数を含まない第2の演算式に展開する。変換部は、第1の演算式に基づいてループを実行する場合の第1の実行時間と、第2の演算式に基づいてループ内のJ回転目(Jは1以上の整数)の演算とJ+K回転目の演算とを並列化する場合の第2の実行時間とを比較する。変換部は、比較の結果に応じて、第1のコードを、J回転目の演算とJ+K回転目の演算とを並列に実行させる並列処理命令を含む第2のコードに変換するか決定する。
[第1の実施の形態]
図1は、第1の実施の形態のコンパイル装置の例を示す図である。
第2の実施の形態のコンパイル装置100は、高級言語で記述されたソースコードをコンパイルし、機械可読なオブジェクトコードを生成する。コンパイル装置100は、ユーザが操作する端末装置でもよいし、端末装置からアクセスされるサーバ装置でもよい。コンパイル装置100は、例えば、コンピュータを用いて実装される。その場合、コンパイル装置100は、ソフトウェアとしてのコンパイラを実行する。
コンパイル装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。これらのユニットはバスに接続されている。CPU101は第1の実施の形態の変換部12の一例であり、RAM102は第1の実施の形態の記憶部11の一例である。
コンパイル装置100は、ソースコード記憶部121、中間コード記憶部122、オブジェクトコード記憶部123、ソースコード解析部131、最適化部132、アセンブリコード生成部136およびファイル生成部139を有する。ソースコード記憶部121、中間コード記憶部122およびオブジェクトコード記憶部123は、例えば、RAM102またはHDD103に確保した記憶領域として実現される。ソースコード解析部131、最適化部132、アセンブリコード生成部136およびファイル生成部139は、例えば、CPU101が実行するプログラムのモジュールとして実現される。
ここでは、コンパイル装置100が生成したオブジェクトコードを、CPU20が実行するものとする。CPU20は、コンパイル装置100が備えるCPU101と同一でもよいし異なってもよい。CPU20は、SIMDレジスタ21〜23(ts1,ts2,ts3)を有する。CPU20が実行可能なSIMD命令のSIMD幅が4であるとすると、SIMDレジスタ21〜23それぞれには4つのデータ単位を格納できる。
コード201には、倍精度浮動小数点型の長さ10000の配列変数a,bと、ループ変数iと、iを1から10000まで1ずつ増加させるループと、ループ内の演算式a(i)=a(i)+b(i)とが定義されている。配列変数a,bの各要素の初期値は、サブルーチンfooを呼び出すコードよって設定されている。このとき、SIMD化部134は、例えば、コード201を以下のようなコード202に変換する。
コード201のループを実行すると、まずi=1に対応する演算301、すなわち、a(1)=a(1)+b(1)が実行される。次に、i=2に対応する演算302、すなわち、a(2)=a(2)+b(2)が実行される。以下、i=3に対応する演算303、i=4に対応する演算304、i=5に対応する演算305、i=6に対応する演算306、i=7に対応する演算307、i=8に対応する演算308が順に実行される。
コード211には、ループ変数iを1から10000まで1ずつ増加させるループと、ループ内の演算式a(i)=a(i+1)+b(i)とが定義されている。このとき、SIMD化部134は、例えば、コード211をコード212に変換する。コード212には、iを1から10000まで4ずつ増加させるループと、ループ内の演算式a(i:i+3)=a(i+1:i+4)+b(i:i+3)とが定義されている。
コード211のループを実行すると、まずi=1に対応する演算311、すなわち、a(1)=a(2)+b(1)が実行される。次に、i=2に対応する演算312、すなわち、a(2)=a(3)+b(2)が実行される。以下、i=3に対応する演算313、i=4に対応する演算314、i=5に対応する演算315、i=6に対応する演算316、i=7に対応する演算317、i=8に対応する演算318が実行される。これに対し、コード212のループを実行すると、まずi=1に対応する演算32、すなわち、a(1:4)=a(2:5)+b(1:4)が実行される。次に、i=5に対応する演算33、すなわち、a(5:8)=a(6:9)+b(5:8)が実行される。
コード221には、倍精度浮動小数点型の長さ10004の配列変数a,bと、ループ変数iを5から10004まで1ずつ増加させるループと、ループ内の演算式a(i)=a(i−4)+b(i)とが定義されている。このとき、SIMD化部134は、例えば、コード221をコード222に変換する。コード222には、iを5から10004まで4ずつ増加させるループと、ループ内の演算式a(i:i+3)=a(i−4:i−1)+b(i:i+3)とが定義されている。
コード221のループを実行すると、まずi=5に対応する演算321、すなわち、a(5)=a(1)+b(5)が実行される。次に、i=6に対応する演算322、すなわち、a(6)=a(2)+b(6)が実行される。以下、i=7に対応する演算323、i=8に対応する演算324、i=9に対応する演算325、i=10に対応する演算326、i=11に対応する演算327、i=12に対応する演算328が実行される。これに対し、コード222のループを実行すると、まずi=5に対応する演算34、すなわち、a(5:8)=a(1:4)+b(5:8)が実行される。次に、i=9に対応する演算35、すなわち、a(9:12)=a(5:8)+b(9:12)が実行される。
コード231には、倍精度浮動小数点型の長さ10000の配列変数a,bと、ループ変数iを2から10000まで1ずつ増加させるループと、ループ内の演算式a(i)=a(i−1)+b(i)とが定義されている。このとき、SIMD化部134は、例えば、コード231を、コード232,233を経由してコード234に変換する。
ここでは、コード232からコード233のような演算式の展開を行わず、仮に図5,7,9と同様の方法でコード231をSIMD化した場合を考える。
上記問題を解決するため、SIMD化部134は、図11のように演算式を展開して命令をSIMD化する。コード233のループを実行すると、まずi=5に対応する演算341、すなわち、a(5)=a(1)+b(2)+b(3)+b(4)+b(5)が実行される。次に、i=6に対応する演算342、すなわち、a(6)=a(2)+b(3)+b(4)+b(5)+b(6)が実行される。以下、i=7に対応する演算343、i=8に対応する演算344、i=9に対応する演算345、i=10に対応する演算346、i=11に対応する演算347、i=12に対応する演算348が実行される。
上記のコード234の演算式には、4つの加算の演算子が含まれている。コード234では、これら4つの加算が前方から後方に向かって逐次的に実行される。よって、CPU20が複数のSIMD命令を並列に実行可能な複数の演算器を備えていても、コード234の4つの加算は並列化されない。一方、実数の加算には結合則が成立するため、4つの加算の実行順序を入れ替えることも可能である。そこで、SIMD化部134は、1つの演算式内での並列性が高くなるように、演算子の実行順序を入れ替えてもよい。
上記では、配列変数a,bの長さやループ変数iの上限値・下限値が固定値であるコードをSIMD最適化する例を示した。ただし、配列変数a,bの長さやループ変数iの上限値・下限値がパラメータになっているコードについてもSIMD最適化を行い得る。
ループ実行のサイクル数を算出するにあたり、SIMD化部134は、ターゲットのCPU20のアーキテクチャを示すプロセッサ情報を参照する。プロセッサ情報には、CPU20が備える演算器の数や各種類の命令の実行に要するサイクル数などが記載される。このプロセッサ情報は、例えば、RAM102やHDD103に予め記憶されている。
ここでは、図16のCPU20にオブジェクトコードを実行させる場合を考える。コード231のループ4回転の演算は、図17のようにスケジューリングできる。
コード234のループ1回転の演算は、図18のようにスケジューリングできる。
サイクル#1で、a(i−4:i−1)を読み出すロード命令と、b(i−3:i)を読み出すロード命令を投入する。図18において、ts1,ts2などは、SIMDレジスタを示す。サイクル#2で、b(i−2:i+1)を読み出すロード命令と、b(i−1:i+2)を読み出すロード命令を投入する。サイクル#3で、b(i:i+3)を読み出すロード命令を投入する。ここで、b(i−2),b(i−1),b(i),b(i+1),b(i+2)は、異なるSIMDレジスタに重複して格納されるため、2以上のSIMD命令によって2回以上メモリから読み出されることになる。
コード236のループ1回転の演算は、図19のようにスケジューリングできる。
サイクル#1で、b(i−3:i)を読み出すロード命令と、b(i−2:i+1)を読み出すロード命令を投入する。サイクル#2で、b(i−1:i+2)を読み出すロード命令と、b(i:i+3)を読み出すロード命令を投入する。サイクル#3で、a(i−4:i−1)を読み出すロード命令を投入する。サイクル#4で、b(i−3:i)とb(i−2:i+1)を足す加算命令を投入する。サイクル#5で、b(i−1:i+2)とb(i:i+3)を足す加算命令を投入する。演算式の2番目と4番目の加算は依存関係がないため、サイクル#4の結果を待たずにサイクル#5の加算命令を投入できる。
図20は、プロセッサアーキテクチャの他の例を示す図である。
CPU20aは、演算器24a〜27aを有する。演算器24a,25aはぞれぞれ、スカラ型のロード命令、SIMD幅4のSIMD型のロード命令、スカラ型のストア命令、および、SIMD幅4のSIMD型のストア命令を実行できる。演算器26a,27aはそれぞれ、スカラ型の加算と、SIMD幅4のSIMD型の加算命令を実行できる。
ここでは、図20のCPU20aにオブジェクトコードを実行させる場合を考える。コード236のループ1回転の演算は、図21のようにスケジューリングできる。
図22は、ループ内のサイクル数の第5の計算例を示す図である。
SIMD化前のコードとして、コード251を考える。コード251には、ループ変数iを2から10000まで1ずつ増加させるループが定義されている。ループ内には、次の3つの演算式が定義されている:a1(i)=a1(i−1)+b1(i),a2(i)=a2(i−1)+b2(i),a3(i)=a3(i−1)+b3(i)。
サイクル#1で、b1(i)を読み出すロード命令と、b1(i+2)を読み出すロード命令を投入する。サイクル#2で、b2(i)を読み出すロード命令と、b2(i+2)を読み出すロード命令を投入する。サイクル#3で、b3(i)を読み出すロード命令と、b3(i+2)を読み出すロード命令を投入する。サイクル#4で、b1(i+1)を読み出すロード命令と、b1(i+3)を読み出すロード命令と、a1(i−1)+b1(i)の加算命令を投入する。サイクル#5で、b2(i+1)を読み出すロード命令と、b2(i+3)を読み出すロード命令と、a2(i−1)+b2(i)の加算命令を投入する。サイクル#6で、b3(i+1)を読み出すロード命令と、b3(i+3)を読み出すロード命令と、a3(i−1)+b3(i)の加算命令を投入する。
図23は、ループ内のサイクル数の第6の計算例を示す図である。
サイクル#1で、b1(i−3:i)を読み出すロード命令と、b1(i−2:i+1)を読み出すロード命令を投入する。サイクル#2で、b2(i−3:i)を読み出すロード命令と、b2(i−2:i+1)を読み出すロード命令を投入する。サイクル#3で、b3(i−3:i)を読み出すロード命令と、b3(i−2:i+1)を読み出すロード命令を投入する。サイクル#4で、b1(i−1:i+2)を読み出すロード命令と、b1(i:i+3)を読み出すロード命令を投入する。サイクル#5で、b2(i−1:i+2)を読み出すロード命令と、b2(i:i+3)を読み出すロード命令を投入する。サイクル#6で、b3(i−1:i+2)を読み出すロード命令と、b3(i:i+3)を読み出すロード命令を投入する。
図24は、SIMD最適化の手順例を示すフローチャートである。
(S1)SIMD化部134は、中間コード記憶部122から中間コードを読み出し、中間コードの中からループを検出する。ループ内には、1以上の演算式が含まれる。
(S10)SIMD化部134は、ステップS2で並列化可能と判断された演算式またはステップS9で採用した変形後の演算式から、ループN回転分の演算を1回転で実行するSIMD命令を生成する。そして、SIMD化部134は、中間コード記憶部122に記憶された中間コードを、SIMD命令を含むものに書き換える。すなわち、中間コードに含まれる幾つかのスカラ命令がSIMD命令に変換される。このSIMD最適化によって、SIMD命令を含むオブジェクトコードが生成されることになる。
上記のステップS2において並列化可能でないと判断される演算式の一例として、インダイレクトアクセスされる配列変数を含む演算式が挙げられる。コード261には、倍精度浮動小数点型の長さ10000の配列変数a,b,idx1,idx2と、ループ変数iを1から10000まで1ずつ増加させるループが定義されている。ループ内には、演算式a(idx1(i))=a(idx2(i))+b(i)が定義されている。
11 記憶部
12 変換部
13,14 コード
15,16 演算式
T1,T2 実行時間
Claims (5)
- コンピュータに、
第1のコードからループを検出し、
前記ループに含まれる演算式であってK回転前(Kは1以上の整数)の演算の結果を参照する第1の変数を含む第1の演算式を、K+1回転以上前の演算の結果を参照する第2の変数を用いて、前記第1の変数を含まない第2の演算式に展開し、
前記第1の演算式に基づいて前記ループを実行する場合の第1の実行時間と、前記第2の演算式に基づいて前記ループ内のJ回転目(Jは1以上の整数)の演算とJ+K回転目の演算とを並列化する場合の第2の実行時間とを比較し、
前記比較の結果に応じて、前記第1のコードを、前記J回転目の演算と前記J+K回転目の演算とを並列に実行させる並列処理命令を含む第2のコードに変換するか決定する、
処理を実行させるコンパイルプログラム。 - 前記第2の演算式が複数の演算子を含んでおり、前記複数の演算子の実行順序を入れ替えることで前記第2の実行時間が短くなる場合、前記実行順序を入れ替えた第2の演算式に基づいて前記第2のコードを生成する、
請求項1記載のコンパイルプログラム。 - 前記第2の実行時間は、プロセッサが前記並列処理命令の実行に要するサイクル数を示すプロセッサ情報を用いて算出する、
請求項1または2記載のコンパイルプログラム。 - コンピュータが実行するコンパイル方法であって、
第1のコードからループを検出し、
前記ループに含まれる演算式であってK回転前(Kは1以上の整数)の演算の結果を参照する第1の変数を含む第1の演算式を、K+1回転以上前の演算の結果を参照する第2の変数を用いて、前記第1の変数を含まない第2の演算式に展開し、
前記第1の演算式に基づいて前記ループを実行する場合の第1の実行時間と、前記第2の演算式に基づいて前記ループ内のJ回転目(Jは1以上の整数)の演算とJ+K回転目の演算とを並列化する場合の第2の実行時間とを比較し、
前記比較の結果に応じて、前記第1のコードを、前記J回転目の演算と前記J+K回転目の演算とを並列に実行させる並列処理命令を含む第2のコードに変換するか決定する、
コンパイル方法。 - ループ内に、K回転前(Kは1以上の整数)の演算の結果を参照する第1の変数を含む第1の演算式をもつ第1のコードを記憶する記憶部と、
前記第1の演算式を、K+1回転以上前の演算の結果を参照する第2の変数を用いて、前記第1の変数を含まない第2の演算式に展開し、
前記第1の演算式に基づいて前記ループを実行する場合の第1の実行時間と、前記第2の演算式に基づいて前記ループ内のJ回転目(Jは1以上の整数)の演算とJ+K回転目の演算とを並列化する場合の第2の実行時間とを比較し、
前記比較の結果に応じて、前記第1のコードを、前記J回転目の演算と前記J+K回転目の演算とを並列に実行させる並列処理命令を含む第2のコードに変換するか決定する、変換部と、
を有するコンパイル装置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014066929A JP6245031B2 (ja) | 2014-03-27 | 2014-03-27 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
EP15155975.4A EP2924559A2 (en) | 2014-03-27 | 2015-02-20 | Program, compiler method, and compiler apparatus |
US14/634,988 US9195444B2 (en) | 2014-03-27 | 2015-03-02 | Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014066929A JP6245031B2 (ja) | 2014-03-27 | 2014-03-27 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015191346A JP2015191346A (ja) | 2015-11-02 |
JP6245031B2 true JP6245031B2 (ja) | 2017-12-13 |
Family
ID=52484387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014066929A Active JP6245031B2 (ja) | 2014-03-27 | 2014-03-27 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9195444B2 (ja) |
EP (1) | EP2924559A2 (ja) |
JP (1) | JP6245031B2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9501268B2 (en) | 2013-12-23 | 2016-11-22 | International Business Machines Corporation | Generating SIMD code from code statements that include non-isomorphic code statements |
US9619290B2 (en) * | 2015-03-06 | 2017-04-11 | Advanced Micro Devices, Inc. | Hardware and runtime coordinated load balancing for parallel applications |
JP6492943B2 (ja) * | 2015-05-07 | 2019-04-03 | 富士通株式会社 | 計算機、コンパイル方法、コンパイルプログラム、およびパイプライン処理プログラム |
JP6822363B2 (ja) * | 2016-09-29 | 2021-01-27 | 住友化学株式会社 | 発光素子 |
JP2018124605A (ja) * | 2017-01-30 | 2018-08-09 | オムロン株式会社 | 画像処理システム、情報処理装置、情報処理方法、および、情報処理プログラム |
CN107193535B (zh) * | 2017-05-16 | 2019-11-08 | 中国人民解放军信息工程大学 | 基于simd扩展部件的嵌套循环向量并行的实现方法及其装置 |
CN109086049B (zh) * | 2018-07-25 | 2021-11-02 | 北京金和网络股份有限公司 | 遍历用户在线状态数据的方法 |
JP2021093012A (ja) * | 2019-12-11 | 2021-06-17 | 富士通株式会社 | コンパイルプログラム、および情報処理装置 |
US11567855B1 (en) * | 2020-09-09 | 2023-01-31 | Two Six Labs, LLC | Automated fault injection testing |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04293150A (ja) * | 1991-03-20 | 1992-10-16 | Hitachi Ltd | コンパイル方法 |
JP3032030B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
JP2634144B2 (ja) | 1994-07-06 | 1997-07-23 | インターナショナル・ビジネス・マシーンズ・コーポレイション | プログラムの並列化実行方法及び並列化実行コンパイラ |
JP3544397B2 (ja) * | 1994-09-30 | 2004-07-21 | 富士通株式会社 | コンパイラ装置およびループ最適化制御方法 |
JP3477137B2 (ja) * | 2000-03-03 | 2003-12-10 | 松下電器産業株式会社 | 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体 |
KR20030042319A (ko) * | 2001-11-22 | 2003-05-28 | 한국전자통신연구원 | 병렬 프로그램 수행중 경합 탐지를 위한 병렬 루프 변형방법 |
JP2003173262A (ja) * | 2001-12-06 | 2003-06-20 | Hitachi Ltd | プログラムチューニングシステムとプログラムチューニング方法およびプログラムと記録媒体 |
JP3847672B2 (ja) * | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
JP3801545B2 (ja) * | 2002-08-02 | 2006-07-26 | 松下電器産業株式会社 | コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 |
JP5278336B2 (ja) * | 2008-02-15 | 2013-09-04 | 日本電気株式会社 | プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム |
US8688957B2 (en) * | 2010-12-21 | 2014-04-01 | Intel Corporation | Mechanism for conflict detection using SIMD |
JP5887811B2 (ja) * | 2011-10-05 | 2016-03-16 | 富士通株式会社 | コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体 |
JP5846005B2 (ja) * | 2012-03-29 | 2016-01-20 | 富士通株式会社 | プログラム、コード生成方法および情報処理装置 |
JP5846006B2 (ja) * | 2012-03-29 | 2016-01-20 | 富士通株式会社 | プログラム、コード生成方法および情報処理装置 |
JP5966509B2 (ja) * | 2012-03-29 | 2016-08-10 | 富士通株式会社 | プログラム、コード生成方法および情報処理装置 |
US9038042B2 (en) * | 2012-06-29 | 2015-05-19 | Analog Devices, Inc. | Staged loop instructions |
WO2014058854A1 (en) * | 2012-10-09 | 2014-04-17 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
-
2014
- 2014-03-27 JP JP2014066929A patent/JP6245031B2/ja active Active
-
2015
- 2015-02-20 EP EP15155975.4A patent/EP2924559A2/en not_active Withdrawn
- 2015-03-02 US US14/634,988 patent/US9195444B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP2924559A2 (en) | 2015-09-30 |
US9195444B2 (en) | 2015-11-24 |
JP2015191346A (ja) | 2015-11-02 |
US20150277874A1 (en) | 2015-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6245031B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
JP5882950B2 (ja) | ステージド・ループ命令 | |
US9395986B2 (en) | Compiling method and compiling apparatus | |
US9658855B2 (en) | Compile method and compiler apparatus | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
JP6432450B2 (ja) | 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム | |
EP2951682B1 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
US9483244B2 (en) | Compiling method and compiling device | |
US8949852B2 (en) | Mechanism for increasing parallelization in computer programs with read-after-write dependencies associated with prefix operations | |
US10108405B2 (en) | Compiling apparatus and compiling method | |
US20180217845A1 (en) | Code generation apparatus and code generation method | |
JP2017010077A (ja) | 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法 | |
Kumar et al. | An approach for compiler optimization to exploit instruction level parallelism | |
KR20150040663A (ko) | 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 | |
US20170115973A1 (en) | Operating method of semiconductor device and semiconductor system | |
JP6897213B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
US20220405110A1 (en) | Non-transitory computer-readable recording medium and compilation method | |
JP2019185486A (ja) | コード変換装置、コード変換方法、及びコード変換プログラム | |
JP2024030940A (ja) | ソースコード変換プログラムおよびソースコード変換方法 | |
JPH06290057A (ja) | ループ最適化方法 | |
Couroussé et al. | Introduction to Dynamic Code Generation: An Experiment with Matrix Multiplication for the STHORM Platform | |
JP2019067117A (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
JP2023045347A (ja) | プログラムおよび情報処理方法 | |
Ranadive et al. | Modeling parallelization overheads for predicting performance | |
JP6222374B2 (ja) | コード変換プログラム、コード変換装置およびコード変換方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20161206 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170912 |
|
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: 20171017 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20171030 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6245031 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |