JP7006097B2 - コード生成装置、コード生成方法及びコード生成プログラム - Google Patents
コード生成装置、コード生成方法及びコード生成プログラム Download PDFInfo
- Publication number
- JP7006097B2 JP7006097B2 JP2017191599A JP2017191599A JP7006097B2 JP 7006097 B2 JP7006097 B2 JP 7006097B2 JP 2017191599 A JP2017191599 A JP 2017191599A JP 2017191599 A JP2017191599 A JP 2017191599A JP 7006097 B2 JP7006097 B2 JP 7006097B2
- Authority
- JP
- Japan
- Prior art keywords
- simd
- instruction
- loop
- operands
- stack
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Description
2 ソースコード
3 オブジェクトコード
11 構文解析部
12 最適化部
13 コード生成部
20 汎用最適化部
30 ループSIMD化部
31 SIMD化可否判定部
32 SIMD化ループ変換部
36 依存解析チェック部
37 連続性チェック部
38 命令有無チェック部
39 飛び込みチェック部
40 固有最適化部
50 条件分岐SIMD化部
51 push命令生成部
52 チェック命令生成部
53 pop命令生成部
54 SIMD命令生成部
60 不明ループSIMD化部
61 push命令生成部
62 チェック命令生成部
63 pop命令生成部
64 SIMD命令生成部
70 連続SIMD化部
80 余りループ生成部
81 方式選択部
82 スカラループ生成部
83 NULLオペランド生成部
84 SIMD命令生成部
90 コンピュータ
91 メインメモリ
92 CPU
93 LANインタフェース
94 HDD
95 スーパーIO
96 DVI
97 ODD
Claims (8)
- コード生成装置において、
ソースコードの構文解析に基づいてループを特定する構文解析部と、
第1命令変更部とを有し、
前記第1命令変更部は、
前記構文解析部が特定したループに含まれる条件分岐文内で実行される演算のオペランドを該演算に対応する命令のアドレス毎に用意したスタックに積む命令列を生成する第1push命令生成部と、
前記演算を行うSIMD命令が1度に演算する個数のオペランドが前記スタックに積まれているか否かをチェックする命令列を生成する第1チェック命令生成部と、
前記スタックから前記個数のオペランドを取り出す命令列を生成する第1pop命令生成部と、
前記スタックから取り出された前記個数のオペランドに対して前記演算を実行するSIMD命令を生成する第1SIMD命令生成部と
を有するコード生成装置。 - 前記コード生成装置はさらに、
前記ループの実行後に前記スタックにオペランドが残されている場合、残されたオペランドについて前記演算を実行する命令列を生成する余り処理部を有する請求項1に記載のコード生成装置。 - 前記余り処理部は、前記スタックに残されたオペランドの数と前記演算の種別からSIMD化が有効か否かを判定する命令列と、前記スタックにNULLオペランドを追加する命令列及び前記SIMD命令と、前記スタックに残されたオペランドの数の前記演算を行う命令列とを生成する請求項2に記載のコード生成装置。
- 前記コード生成装置はさらに、
前記構文解析部により特定されたループのうちストライドアクセスのループについてSIMD化を行うループSIMD化部を有する請求項1に記載のコード生成装置。 - 前記コード生成装置はさらに、
前記構文解析部により特定されたループのうち繰り返し回数が実行時まで不明な不明ループについてSIMD化を行う第2命令変更部を有し、
前記第2命令変更部は、
前記不明ループに含まれる演算のオペランドを該演算に対応する命令のアドレス毎に用意したスタックに積む命令列を生成する第2push命令生成部と、
前記演算を行うSIMD命令が1度に演算する個数のオペランドが前記スタックに積まれているか否かをチェックする命令列を生成する第2チェック命令生成部と、
前記スタックから前記個数のオペランドを取り出す命令列を生成する第2pop命令生成部と、
前記スタックから取り出された前記個数のオペランドに対して前記演算を実行するSIMD命令を生成する第2SIMD命令生成部と
を有する請求項1に記載のコード生成装置。 - 前記第2命令変更部は、前記不明ループとして終了条件付きループ及び飛び出しを含むループについてSIMD化を行う請求項5に記載のコード生成装置。
- コード生成方法において、
コンピュータが、
ソースコードの構文解析に基づいてループを特定し、
特定された前記ループに含まれる条件分岐文内で実行される演算のオペランドを該演算に対応する命令のアドレス毎に用意したスタックに積む命令列を生成し、
前記演算を行うSIMD命令が1度に演算する個数のオペランドが前記スタックに積まれているか否かをチェックする命令列を生成し、
前記スタックから前記個数のオペランドを取り出す命令列を生成し、
前記スタックから取り出された前記個数のオペランドに対して前記演算を実行するSIMD命令を生成するコード生成方法。 - コード生成プログラムにおいて、
コンピュータに、
ソースコードの構文解析に基づいてループを特定させ、
特定された前記ループに含まれる条件分岐文内で実行される演算のオペランドを該演算に対応する命令のアドレス毎に用意したスタックに積む命令列を生成させ、
前記演算を行うSIMD命令が1度に演算する個数のオペランドが前記スタックに積まれているか否かをチェックする命令列を生成させ、
前記スタックから前記個数のオペランドを取り出す命令列を生成させ、
前記スタックから取り出された前記個数のオペランドに対して前記演算を実行するSIMD命令を生成させるコード生成プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017191599A JP7006097B2 (ja) | 2017-09-29 | 2017-09-29 | コード生成装置、コード生成方法及びコード生成プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017191599A JP7006097B2 (ja) | 2017-09-29 | 2017-09-29 | コード生成装置、コード生成方法及びコード生成プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2019067117A JP2019067117A (ja) | 2019-04-25 |
JP7006097B2 true JP7006097B2 (ja) | 2022-01-24 |
Family
ID=66340078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017191599A Active JP7006097B2 (ja) | 2017-09-29 | 2017-09-29 | コード生成装置、コード生成方法及びコード生成プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7006097B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021093012A (ja) * | 2019-12-11 | 2021-06-17 | 富士通株式会社 | コンパイルプログラム、および情報処理装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009265708A (ja) | 2008-04-22 | 2009-11-12 | Hitachi Ltd | コンパイラ及びそのコード生成方法 |
US20130290674A1 (en) | 2012-04-30 | 2013-10-31 | Biju George | Modeling Structured SIMD Control FLow Constructs in an Explicit SIMD Language |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS59165147A (ja) * | 1983-03-11 | 1984-09-18 | Fujitsu Ltd | コンパイラにおける条件文のベクトル命令化方式 |
-
2017
- 2017-09-29 JP JP2017191599A patent/JP7006097B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009265708A (ja) | 2008-04-22 | 2009-11-12 | Hitachi Ltd | コンパイラ及びそのコード生成方法 |
US20130290674A1 (en) | 2012-04-30 | 2013-10-31 | Biju George | Modeling Structured SIMD Control FLow Constructs in an Explicit SIMD Language |
Also Published As
Publication number | Publication date |
---|---|
JP2019067117A (ja) | 2019-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7386844B2 (en) | Compiler apparatus and method of optimizing a source program by reducing a hamming distance between two instructions | |
JP5583770B2 (ja) | 最適化simdコードのための動作指示命令の挿入 | |
TWI494851B (zh) | 用於推測式述詞指令之功能單元、處理器及方法 | |
CN112559051A (zh) | 使用脉动阵列和融合操作的深度学习实现方式 | |
KR102379894B1 (ko) | 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 | |
US20120216011A1 (en) | Apparatus and method of single-instruction, multiple-data vector operation masking | |
JP6942298B2 (ja) | ベクトル演算命令の例外条件処理 | |
TWI728068B (zh) | 複數乘法指令 | |
JP2023051994A (ja) | 連鎖タイル演算を実施するためのシステムおよび方法 | |
JP2013254484A (ja) | ベクトル分割ループの性能の向上 | |
US9395986B2 (en) | Compiling method and compiling apparatus | |
US20130007422A1 (en) | Processing vectors using wrapping add and subtract instructions in the macroscalar architecture | |
EP2951682B1 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
US9317284B2 (en) | Vector hazard check instruction with reduced source operands | |
TWI740851B (zh) | 用於向量負載指示之資料處理設備、方法及電腦程式 | |
KR101624786B1 (ko) | 기입마스크 레지스터의 트레일링 최하위 마스킹 비트를 결정하는 시스템, 장치, 및 방법 | |
JP2015191346A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
CN107257955B (zh) | 快速向量动态存储器冲突检测 | |
JP5326314B2 (ja) | プロセサおよび情報処理装置 | |
US9182960B2 (en) | Loop distribution detection program and loop distribution detection method | |
JP7006097B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
US20150089189A1 (en) | Predicate Vector Pack and Unpack Instructions | |
JP6790646B2 (ja) | コンパイル装置、コンパイル方法、および、コンパイルプログラム | |
CN115469931B (zh) | 一种循环程序的指令优化方法、装置、系统、设备及介质 | |
JPH07110769A (ja) | Vliw型計算機 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20200709 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20210728 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20210803 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210816 |
|
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: 20211207 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20211220 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7006097 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |