JP2011154523A - コンパイル方法、コンパイラおよびベクトル計算機 - Google Patents

コンパイル方法、コンパイラおよびベクトル計算機 Download PDF

Info

Publication number
JP2011154523A
JP2011154523A JP2010015402A JP2010015402A JP2011154523A JP 2011154523 A JP2011154523 A JP 2011154523A JP 2010015402 A JP2010015402 A JP 2010015402A JP 2010015402 A JP2010015402 A JP 2010015402A JP 2011154523 A JP2011154523 A JP 2011154523A
Authority
JP
Japan
Prior art keywords
vector
register
array
code
compiler
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.)
Pending
Application number
JP2010015402A
Other languages
English (en)
Inventor
Shunichi Aoyama
俊一 青山
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
Priority to JP2010015402A priority Critical patent/JP2011154523A/ja
Publication of JP2011154523A publication Critical patent/JP2011154523A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】プログラムの実行時間を短縮する。
【解決手段】複数あるベクトルレジスタ12への割当が指示された配列を、ベクトルレジスタ12のそれぞれの記憶領域に応じて分割し、分割した配列の記憶領域をそれぞれ異なるベクトルレジスタ12に割り当てるステップと、配列が割り当てられたベクトルレジスタ12のレジスタ番号をインデックスレジスタ15にセットするコードを生成するステップと、ベクトルレジスタ12に割り当てられた配列に対してインデックスレジスタ15を用いてアクセスするコードを生成するステップと、を含む。
【選択図】図1

Description

本発明は、コンパイル方法、コンパイラおよびベクトル計算機に関する。
ベクトル演算を行うベクトル計算機は、複数のベクトルレジスタを備えている。ベクトル計算機は、例えば、ループ処理等で配列を繰り返し処理する場合に、一つの配列の全ての要素を一つのベクトルレジスタに割り当て、一つのベクトル演算命令で、配列の全ての要素を一度にまとめて演算する(下記特許文献1参照)。
特開2004−302772号公報
従来のベクトル計算機では、一つのベクトルレジスタに一つの配列を割り当ててベクトル演算を行っている。したがって、一つのベクトルレジスタに収まらない配列を演算する場合には、ベクトルレジスタに未割り当ての要素を演算する機会が発生し、ベクトルレジスタよりも低速なメインメモリにアクセスしながら演算する回数が増える。これにより、プログラムの実行時間が長くなる。
本発明は、上述した課題を解決するためになされたものであり、プログラムの実行時間を短縮することができるコンパイル方法、コンパイラおよびベクトル計算機を提供することを目的とする。
本発明のコンパイル方法は、複数あるベクトルレジスタへの割当が指示された配列を、前記ベクトルレジスタのそれぞれの記憶領域に応じて分割し、分割した前記配列の記憶領域をそれぞれ異なる前記ベクトルレジスタに割り当てるステップと、前記配列が割り当てられた前記ベクトルレジスタを特定する値をインデックスレジスタにセットするコードを生成するステップと、前記ベクトルレジスタに割り当てられた前記配列に対して前記インデックスレジスタを用いてアクセスするコードを生成するステップと、を含む。
本発明のコンパイラは、上記コンパイル方法に含まれる各ステップをコンピュータに実行させる。
本発明のベクトル計算機は、上記コンパイル方法を用いて生成されたオブジェクトコードを実行する。
本発明によれば、プログラムの実行時間を短縮することができる。
実施形態におけるベクトル計算機の構成を例示するブロック図である。 実施形態におけるコンパイラを例示する図である。 ソースコードの一例を示す図である。 図3のソースコードに対応する中間コードの一例を示す図である。 ベクトルレジスタに分割した配列を割り当てた状態を示す図である。
以下、添付図面を参照して、本発明に係るコンパイル方法、コンパイラおよびベクトル計算機の好適な実施形態について説明する。
まず、図1を参照して、実施形態におけるベクトル計算機の構成について説明する。ベクトル計算機1は、例えば、CPU(Central Processing Unit)10と、メインメモリ20とを有する。
CPU10は、ベクトル演算回路11と、複数のベクトルレジスタ12と、スカラ演算回路13と、スカラレジスタ14と、インデックスレジスタ15とを有する。ベクトル演算回路11およびスカラ演算回路13は、後述するコンパイラによって生成されたオブジェクトコードを実行することで、各種の演算処理を実行する。
ベクトル演算回路11は、例えばDOループ等のループ処理で配列を繰り返し処理する演算を、一つのベクトル演算命令で一度にまとめて実行する。ベクトルレジスタ12は、ベクトル演算回路11によって使用されるレジスタである。
スカラ演算回路13は、上記配列を繰り返し処理する演算を、逐次的に演算する。スカラレジスタ14は、スカラ演算回路13によって使用されるレジスタである。本実施形態におけるインデックスレジスタ15は、スカラレジスタ14の一部を利用する。インデックスレジスタ15は、メインメモリ20上の実行アドレスを確定する際に、オブジェクトコードの命令のアドレスに対して加算する値を格納する。また、インデックスレジスタ15は、配列が割り当てられたベクトルレジスタ12を特定する際に用いる、ベクトルレジスタ12のレジスタ番号を格納する。
図2を参照して、実施形態におけるコンパイラについて説明する。コンパイラ30は、特定のプログラミング言語で記述されたソースコードを読み込み、ベクトル計算機1が実行できるオブジェクトコードに変換する機能を有しており、この機能はコンパイラプログラムを実行することで実現される。特定のプログラミング言語としては、例えば、Fortran、C言語が該当する。コンパイラプログラムは、ベクトル計算機1の記憶装置に格納してもよいし、ベクトル計算機1に接続可能なシステムの記憶装置に格納してもよい。
図2に示すように、コンパイラ30は、中間コード生成部31と、最適化部32と、オブジェクトコード生成部33と、を含む。
中間コード生成部31は、原則として従来のものと同様に、ソースコード34を読み込み、ソースコード34を中間コード35に変換して出力する。ソースコードを中間コードに変換する処理としては、例えば、ソースコードをトークン(ソースコードを構成する単語や記号等の最小構成要素)に分解する字句解析処理や、トークン列を解析して構文木を構築する構文解析処理等が該当する。
最適化部32は、原則として従来のものと同様に、中間コード35を読み込み、中間コード35を最適化して、最適化後の中間コード36を出力する。最適化部32は、例えば、プログラムの実行時間を短縮することや、プログラム実行時のメモリ使用量を小さくすること等を含む最適化処理を実行することで、中間コード35を最適化する。
オブジェクトコード生成部33は、原則として従来のものと同様に、中間コード36を読み込み、中間コード36を機械語に翻訳することでオブジェクトコードを生成し、出力する。
本実施形態における最適化部32は、最適化処理として、以下の処理を実行することに特徴がある。図3は、ソースコード34の一例を示し、図4は、図3のソースコード34に対応する中間コード36の一例を示す図である。
最適化部32は、ベクトルレジスタ12に割り当てるように割当指示された配列を、ベクトルレジスタ12に割り当てる。割当指示の方法としては、例えば、ソースコード中にコメント指示行を記述して割当指示する方法がある。具体的には、図3の(4−2)に示す、“!cdir”で始まる行がコメント指示行となる。このコメント指示行には、“vreg(a,1024)”と記述されており、このコメント指示は、ベクトルレジスタ12の記憶領域のうち、1024ワード分の記憶領域を配列aの記憶領域に割り当てることを示している。
最適化部32は、割当指示された配列が一つのベクトルレジスタ12に収まらない場合には、一つのベクトルレジスタ12の記憶領域に応じて配列を分割し、分割した配列の記憶領域をそれぞれ異なるベクトルレジスタ12に割り当てる。図5を参照して、具体的に説明する。
図5に示すように、例えば、一つのベクトルレジスタ12の大きさが256ワードであり、配列aの大きさが1024ワードである場合、最適化部32は、配列a(1:1024)を256ワードごとの四つの配列、a(1:256)、a(257:512)、a(513:768)、a(769:1024)に分割する。最適化部32は、四つに分割した配列を、レジスタ番号が60〜63となる四つの連続するベクトルレジスタ$vdr60〜$vdr63にそれぞれ割り当てる。なお、分割した配列と、それらの配列を割り当てたベクトルレジスタとの対応関係は、例えば、その対応関係を示すコードを生成してもよいし、その対応関係を記憶させたテーブルをコードとは別に生成して保持することとしてもよい。
最適化部32は、分割した配列を割り当てたベクトルレジスタ12を特定する値をインデックスレジスタ15にセットするコードを生成する。ベクトルレジスタ12を特定する値としては、例えば、ベクトルレジスタ12のレジスタ番号が該当する。具体的には、図4の(5−1)、(5−4)に示すように、分割した配列aを割り当てたベクトルレジスタ$vdr60〜$vdr63のうち、最小のレジスタ番号を有するベクトルレジスタ$vdr60のレジスタ番号“60”を、インデックスレジスタvixにセットするコードを生成する。
最適化部32は、割当指示された配列を表すコードを、ベクトルレジスタ12およびインデックスレジスタ15を用いて表すコードに変換し、その変換したコードの次行に、インデックスレジスタ15の値をインクリメントするコードを生成する。具体的には、図3の(4−3)、(4−4)に示す“a(i)”を、図3の(5−2)、(5−5)、(5−6)に示す“$vdr[vix]”に変換し、図3の(5−3)、(5−7)に示す“vix = vix + 1”を追記する。これにより、四つに分割した配列aを、インデックスレジスタ15をインクリメントしながらベクトルレジスタ12からロードすることが可能となる。
上述したように、実施形態におけるコンパイラ30およびベクトル計算機1によれば、コンパイラ30の最適化部32が、図4の(5−1)〜(5−7)に示すコードを生成することで、ベクトル計算機1のベクトル演算回路11が“$vdr[vix]”の演算を実行するときには、インデックスレジスタvixに基づいてベクトルレジスタ$vdr60に割り当てられた配列a(1:256)にアクセスしながら演算することができ、ベクトル演算回路11が“$vdr[vix+1]”の演算を実行するときには、インデックスレジスタvix+1に基づいてベクトルレジスタ$vdr61に割り当てられた配列a(257:512)にアクセスしながら演算することができる。
また、ベクトル演算回路11が“$vdr[vix+2]”の演算を実行するときには、インデックスレジスタvix+2に基づいてベクトルレジスタ$vdr62に割り当てられた配列a(513:768)にアクセスしながら演算することができ、ベクトル演算回路11が“$vdr[vix+3]”の演算を実行するときには、インデックスレジスタvix+3に基づいてベクトルレジスタ$vdr63に割り当てられた配列a(769:1024)にアクセスしながら演算することができる。
つまり、本実施形態におけるコンパイラ30およびベクトル計算機1によれば、配列を繰り返し処理する演算によって頻繁にアクセスされる配列を、メインメモリ20よりも高速なベクトルレジスタ12に割り当てて、ベクトルレジスタ12から配列をロード等することができる。それゆえに、配列のロード等を高速化することができ、プログラムの実行時間を短縮することができる。
また、配列の全要素を複数のベクトルレジスタ12に分割して割り当て、このベクトルレジスタ12のレジスタ番号をインデックスレジスタ15にセットしてベクトルレジスタ12にアクセスさせることができるため、一つのベクトルレジスタに割り当てられない大きさの配列であっても、配列の全ての要素をベクトルレジスタ12に割り当てることができる。これにより、プログラムの実行時間をさらに短縮することができる。
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
1…ベクトル計算機、11…ベクトル演算回路、12…ベクトルレジスタ、13…スカラ演算回路、14…スカラレジスタ、15…インデックスレジスタ、20…メインメモリ、30…コンパイラ、31…中間コード生成部、32…最適化部、33…オブジェクトコード生成部、34…ソースコード、35、36…中間コード。

Claims (3)

  1. 複数あるベクトルレジスタへの割当が指示された配列を、前記ベクトルレジスタのそれぞれの記憶領域に応じて分割し、分割した前記配列の記憶領域をそれぞれ異なる前記ベクトルレジスタに割り当てるステップと、
    前記配列が割り当てられた前記ベクトルレジスタを特定する値をインデックスレジスタにセットするコードを生成するステップと、
    前記ベクトルレジスタに割り当てられた前記配列に対して前記インデックスレジスタを用いてアクセスするコードを生成するステップと、
    を含むコンパイル方法。
  2. 請求項1に記載の各ステップをコンピュータに実行させるためのコンパイラ。
  3. 請求項1に記載のコンパイル方法を用いて生成されたオブジェクトコードを実行するベクトル計算機。
JP2010015402A 2010-01-27 2010-01-27 コンパイル方法、コンパイラおよびベクトル計算機 Pending JP2011154523A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010015402A JP2011154523A (ja) 2010-01-27 2010-01-27 コンパイル方法、コンパイラおよびベクトル計算機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010015402A JP2011154523A (ja) 2010-01-27 2010-01-27 コンパイル方法、コンパイラおよびベクトル計算機

Publications (1)

Publication Number Publication Date
JP2011154523A true JP2011154523A (ja) 2011-08-11

Family

ID=44540438

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010015402A Pending JP2011154523A (ja) 2010-01-27 2010-01-27 コンパイル方法、コンパイラおよびベクトル計算機

Country Status (1)

Country Link
JP (1) JP2011154523A (ja)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60134974A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd ベクトル処理装置
JPH0241562A (ja) * 1988-08-01 1990-02-09 Fujitsu Ltd ベクトル演算列分割処理方式
JPH05165874A (ja) * 1991-12-12 1993-07-02 Hitachi Ltd ベクトル演算処理装置
JPH10228382A (ja) * 1997-02-14 1998-08-25 Nec Corp コンパイル方式
JP2004302772A (ja) * 2003-03-31 2004-10-28 Seiko Epson Corp ベクトルプロセッサおよびアドレス指定方法
JP2007272672A (ja) * 2006-03-31 2007-10-18 Nec Corp コンパイル最適化方法およびコンパイラ

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60134974A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd ベクトル処理装置
JPH0241562A (ja) * 1988-08-01 1990-02-09 Fujitsu Ltd ベクトル演算列分割処理方式
JPH05165874A (ja) * 1991-12-12 1993-07-02 Hitachi Ltd ベクトル演算処理装置
JPH10228382A (ja) * 1997-02-14 1998-08-25 Nec Corp コンパイル方式
JP2004302772A (ja) * 2003-03-31 2004-10-28 Seiko Epson Corp ベクトルプロセッサおよびアドレス指定方法
JP2007272672A (ja) * 2006-03-31 2007-10-18 Nec Corp コンパイル最適化方法およびコンパイラ

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNA200900787001; NECスーパーコンピュータ SX-9シリーズ 中央処理装置機能説明書 初版, 200802, 第20頁, 日本電気株式会社 *
JPN6013041144; NECスーパーコンピュータ SX-9シリーズ 中央処理装置機能説明書 初版, 200802, 第20頁, 日本電気株式会社 *

Similar Documents

Publication Publication Date Title
JP4283131B2 (ja) プロセッサ及びコンパイル方法
US9495136B2 (en) Using aliasing information for dynamic binary optimization
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
CN107003885B (zh) 用于低级别可组合高性能计算库的技术
JP2019049843A (ja) 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置
US20020083423A1 (en) List scheduling algorithm for a cycle-driven instruction scheduler
CN104965687A (zh) 基于指令集生成的大数据处理方法及装置
KR101553652B1 (ko) 이종 프로세서에 대한 명령어 컴파일링 장치 및 방법
JP5576605B2 (ja) プログラム変換装置およびプログラム変換方法
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
Zhang et al. RegCPython: A Register-based Python Interpreter for Better Performance
JP5360506B2 (ja) マルチコアにおけるプログラミングシステム、その方法及びそのプログラム
US8645758B2 (en) Determining page faulting behavior of a memory operation
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
JP2012103923A (ja) コンパイラ装置、コンパイル方法及びコンパイラプログラム
US20210182041A1 (en) Method and apparatus for enabling autonomous acceleration of dataflow ai applications
JP2011154523A (ja) コンパイル方法、コンパイラおよびベクトル計算機
JP2007080049A (ja) 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部
US20040003379A1 (en) Compiler, operation processing system and operation processing method
Shao et al. Map-reduce inspired loop parallelization on CGRA
JPH11345127A (ja) コンパイラ
JP2018163381A (ja) コード生成装置、コード生成方法及びコード生成プログラム
Fryza et al. Advanced mapping techniques for digital signal processors
Almghawish et al. An automatic parallelizing model for sequential code using Python
CN115934103A (zh) 节点融合处理方法、装置及电子设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130725

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130819

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131004

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140407

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140530

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141113