IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧

<>
  • 特許-処理システム及び処理方法 図1
  • 特許-処理システム及び処理方法 図2
  • 特許-処理システム及び処理方法 図3
  • 特許-処理システム及び処理方法 図4
  • 特許-処理システム及び処理方法 図5
  • 特許-処理システム及び処理方法 図6
  • 特許-処理システム及び処理方法 図7
  • 特許-処理システム及び処理方法 図8
  • 特許-処理システム及び処理方法 図9
  • 特許-処理システム及び処理方法 図10
  • 特許-処理システム及び処理方法 図11
  • 特許-処理システム及び処理方法 図12
  • 特許-処理システム及び処理方法 図13
  • 特許-処理システム及び処理方法 図14
  • 特許-処理システム及び処理方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-01
(45)【発行日】2024-07-09
(54)【発明の名称】処理システム及び処理方法
(51)【国際特許分類】
   G06F 8/41 20180101AFI20240702BHJP
   G06F 9/30 20180101ALI20240702BHJP
   G06F 17/16 20060101ALI20240702BHJP
【FI】
G06F8/41 130
G06F9/30 350A
G06F17/16 D
G06F17/16 E
G06F17/16 G
【請求項の数】 6
(21)【出願番号】P 2022501869
(86)(22)【出願日】2021-02-15
(86)【国際出願番号】 JP2021005479
(87)【国際公開番号】W WO2021166840
(87)【国際公開日】2021-08-26
【審査請求日】2022-08-03
(31)【優先権主張番号】P 2020024338
(32)【優先日】2020-02-17
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【弁理士】
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】平田 敏也
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開平04-127366(JP,A)
【文献】特開平05-054059(JP,A)
【文献】特開平11-242598(JP,A)
【文献】特開2003-150577(JP,A)
【文献】米国特許出願公開第2007/0283127(US,A1)
【文献】米国特許出願公開第2016/0092285(US,A1)
【文献】杉山 徹、寺田直樹、村田健史、大村善治、臼井英之、松本 紘,LISTVEC指示行を使った多粒子シミュレーションの大規模化-主メモリを節約し、かつ高速化を可能にする1つの方法,情報処理学会論文誌,日本,社団法人情報処理学会,2004年05月15日,Vol.45,No.SIG6(ACS6),pp.171-175,ISSN 0387-5806
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
G06F 9/30
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
クトルプロセッサを有する演算装置に演算を実行させる命令を生成するコンパイル装置であって
接アドレス参照される配列のアドレスを算出することを前記演算装置に実行させる命令を生成し
出した前記アドレスの重複を検出しベクトルマスクを作成することを前記演算装置に実行させる命令を生成し
記ベクトルマスクのビットに基づいて、ベクトルどうしの演算を行うことを前記演算装置に実行させる命令を生成し
記ベクトルどうしの演算結果に基づいてスカラで計算し直すことを前記演算装置に実行させる命令を生成し、
前記演算装置に実行させる命令は、前記アドレスの重複を検出し前記ベクトルマスクを作成することを実行させるVFMD命令であり、前記コンパイル装置のコンピュータにおけるCPUからメモリへのアクセスを、前記CPUから前記コンピュータにおけるレジスタへのアクセスに変更させるVFMD命令を含む
コンパイル装置と、
前記コンパイル装置によって生成された命令に従って演算する前記演算装置と、
を備える処理システム
【請求項2】
前記コンパイル装置は、
前記レジスタにおいてアドレスの重複がある場合に、前記ベクトルどうしの演算をスカラで計算し直すスカラ再計算命令を生成する
請求項1に記載の処理システム
【請求項3】
前記演算装置が実行する演算は、加算または減算である、
請求項1または請求項2に記載の処理システム
【請求項4】
ベクトルプロセッサを有する演算装置と、前記演算装置に演算を実行させる命令を生成するコンパイル装置と、を備える処理システムが実行する処理方法であって、
前記コンパイル装置は、
間接アドレス参照される配列のアドレスを算出することを前記演算装置に実行させる命令を生成し
算出した前記アドレスの重複を検出しベクトルマスクを作成することを前記演算装置に実行させる命令を生成し
前記ベクトルマスクのビットに基づいて、ベクトルどうしの演算を行うことを前記演算装置に実行させる命令を生成し
前記ベクトルどうしの演算結果に基づいてスカラで計算し直すことを前記演算装置に実行させる命令を生成し、
前記演算装置に実行させる命令は、前記アドレスの重複を検出し前記ベクトルマスクを作成することを実行させるVFMD命令であり、前記コンパイル装置のコンピュータにおけるCPUからメモリへのアクセスを、前記CPUから前記コンピュータにおけるレジスタへのアクセスに変更させるVFMD命令を含み、
前記演算装置は、
前記コンパイル装置によって生成された命令に従って演算する
処理方法。
【請求項5】
前記コンパイル装置は、
前記レジスタにおいてアドレスの重複がある場合に、前記ベクトルどうしの演算をスカラで計算し直すスカラ再計算命令を生成する、
請求項4に記載の処理方法。
【請求項6】
前記演算装置が実行する演算は、加算または減算である、
請求項4または請求項5に記載の処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、処理システム及び処理方法に関する。
【背景技術】
【0002】
大規模数値解析やシミュレーションを行う分野(例えば、AIやビッグデータを扱う分野)では、ベクトル命令を有する計算機を利用して情報処理が行われることがある。
特許文献1には、関連する技術として、ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法に関する技術が開示されている。
特許文献2には、関連する技術として、リストベクトルをベクトルレジスタ上で扱う技術が開示されている。
【先行技術文献】
【特許文献】
【0003】
【文献】特表2019-517060号公報
【文献】特開平4-127367号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、次のような間接アドレス参照を含む総和演算のことをリスト総和演算と呼ぶ。
DO I = 1, N
X(L(I)) = X(L(I)) + Y(I)
ENDDO
このリスト総和演算において、L(I)中に同一の値が重複する場合がある。X(L(I))の定義と参照には依存関係がある。そのため、L(I)中に同一の値が重複する場合、ベクトル演算を行うことができず、スカラ命令を用いて逐次処理を行うことになる。
【0005】
例えば、非特許文献である“Sugiyama, T., N. Terada, T. Murata, Y. Omura, H. Usui, and H.Matsumoto, Vectorized Particle Simulation Using“LISTVEC” Compile-directive on SX Super-computer, IPSJ journal, 45, SIG 6 (ACS 6), p. 171(2004)”などによるLISTVEC指示行法は、初めに重複を考慮せずにベクトル演算を行い、その後、重複を検出する命令を生成し、重複している要素についてスカラで再計算するという手法である。この手法を用いた場合、重複の数が少なければ少ないほどベクトル化の効果が高まり処理を高速化することができる。図15に、この手法を用いた場合に、上記リスト総和演算に対して生成される命令列の例を示す。図15に示す命令列の例では、加算対象の配列Xの要素数を最大ベクトル長256に区切ってループで処理を行っている。しかしながら、図15の行番号10、11に示すように、重複を検出するための処理において、LISTVEC指示行法に係るコンパイラは、ベクトルスキャッター命令(以下、VSC命令と記載)とベクトルギャザー命令(以下、VGT命令と記載)を生成する。一般的に、VSC命令、VGT命令は実行コストが高く、LISTVEC指示行法を用いた場合、これらの命令がループの繰り返しごとに実行されることとなるため、リスト総和演算の実行時間が長くなってしまうという課題がある。
そのため、リスト総和演算において要素が重複する場合であってもリスト総和演算の実行時間を短くすることのできる技術が求められている。
【0006】
本発明の各態様は、上記の課題を解決することのできる処理システム及び処理方法を提供することを目的としている。
【課題を解決するための手段】
【0009】
上記目的を達成するために、本発明の別の態様によれば、処理システムは、ベクトルプロセッサを有する演算装置に演算を実行させる命令を生成するコンパイル装置であって、間接アドレス参照される配列のアドレスを算出することを前記演算装置に実行させる命令を生成し、算出した前記アドレスの重複を検出しベクトルマスクを作成することを前記演算装置に実行させる命令を生成し、前記ベクトルマスクのビットに基づいて、ベクトルどうしの演算を行うことを前記演算装置に実行させる命令を生成し、前記ベクトルどうしの演算結果に基づいてスカラで計算し直すことを前記演算装置に実行させる命令を生成し、前記演算装置に実行させる命令は、前記アドレスの重複を検出し前記ベクトルマスクを作成することを実行させるVFMD命令であり、前記コンパイル装置のコンピュータにおけるCPUからメモリへのアクセスを、前記CPUから前記コンピュータにおけるレジスタへのアクセスに変更させるVFMD命令を含む、コンパイル装置と、前記コンパイル装置によって生成された命令に従って演算する前記演算装置と、を備える
【0010】
上記目的を達成するために、本発明の別の態様によれば、処理方法は、ベクトルプロセッサを有する演算装置と、前記演算装置に演算を実行させる命令を生成するコンパイル装置と、を備える処理システムが実行する処理方法であって、前記コンパイル装置は、間接アドレス参照される配列のアドレスを算出することを前記演算装置に実行させる命令を生成し、算出した前記アドレスの重複を検出しベクトルマスクを作成することを前記演算装置に実行させる命令を生成し、前記ベクトルマスクのビットに基づいて、ベクトルどうしの演算を行うことを前記演算装置に実行させる命令を生成し、前記ベクトルどうしの演算結果に基づいてスカラで計算し直すことを前記演算装置に実行させる命令を生成し、前記演算装置に実行させる命令は、前記アドレスの重複を検出し前記ベクトルマスクを作成することを実行させるVFMD命令であり、前記コンパイル装置のコンピュータにおけるCPUからメモリへのアクセスを、前記CPUから前記コンピュータにおけるレジスタへのアクセスに変更させるVFMD命令を含み、前記演算装置は、前記コンパイル装置によって生成された命令に従って演算する
【発明の効果】
【0011】
本発明の各態様によれば、リスト総和演算において要素が重複する場合であってもリスト総和演算の実行時間を短くすることができる。
【図面の簡単な説明】
【0012】
図1】本発明の一実施形態による処理システムの構成の一例を示す図である。
図2】本発明の一実施形態によるコンパイル装置においてコンパイラによって実現される機能の一例を示す図である。
図3】本発明の一実施形態によるベクトル命令生成手段の一例を示す図である。
図4】本発明の一実施形態によるコンパイラによって生成されるリスト総和演算の命令列の一例を示す図である。
図5】本発明の一実施形態によるニーモニックの一例を示す図である。
図6】本発明の一実施形態による演算装置の処理フローの一例を示す図である。
図7】本発明の一実施形態による演算装置による処理を説明するための第1の図である。
図8】本発明の一実施形態による演算装置による処理を説明するための第2の図である。
図9】本発明の一実施形態による演算装置による処理を説明するための第3の図である。
図10】本発明の一実施形態による演算装置による処理を説明するための第4の図である。
図11】本発明の一実施形態による演算装置による処理を説明するための第5の図である。
図12】本発明の実施形態による最小構成のコンパイル装置を示す図である。
図13】本発明の実施形態による最小構成のコンパイル装置の処理フローの一例を示す図である。
図14】少なくとも1つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
図15】本発明に関連するコンパイラによって生成されるリスト総和演算の命令列の一例を示す図である。
【発明を実施するための形態】
【0013】
以下、図面を参照しながら実施形態について詳しく説明する。
<実施形態>
本発明の一実施形態によるコンパイラ1は、コンパイル装置10において、間接アドレス参照を含む総和演算を高速処理するベクトル命令生成機能を有するコンパイラである。具体的には、コンパイラ1は、単一のベクトルレジスタ内で同一の値をもつ要素を検出してベクトルマスクを作成するVFMD命令を新規に追加し、このVFMD命令を用いて間接アクセスをともなう実行コストの大きい命令を削減した高速な命令列を生成するコンパイラである。
なお、コンパイラ1によって生成された命令列に従って処理を実行する対象となるハードウェアは、リストベクトルで指定されたベクトルレジスタの各要素に格納されたメモリ上のアドレスが指し示すデータをロード先のベクトルレジスタにロードするベクトルギャザー命令、および、リストベクトルで指定されたベクトルレジスタの各要素に格納されたメモリ上のストア先のアドレスにベクトルレジスタ上のデータをストアするベクトルスキャッター命令を命令セットに備えたベクトルプロセッサを有する演算装置20である。
本発明の一実施形態による処理システム100は、図1に示すように、コンパイル装置10、演算装置20を備える。
【0014】
コンパイラ1は、コンパイル装置10において、ソースプログラムからオブジェクトコード(命令)を生成する。コンパイラ1は、図2に示すように、コンパイル装置10において、コード解析手段11、命令生成手段12として機能する。
【0015】
コード解析手段11は、プログラムを解析しリスト総和演算のベクトル化を行うか否かを判定する手段である。コード解析手段11は、指示行解析手段111、リスト総和演算構文解析手段112を含む。
指示行解析手段111は、リスト総和演算のベクトル化を許可する指示行が指定されているか否かを解析する。
リスト総和演算構文解析手段112は、指示行解析手段111がリスト総和演算のベクトル化を許可する指示行が指定されていると解析した場合、その指示行が指定されているリスト総和演算がベクトル化可能な形式であるかを解析する。
【0016】
命令生成手段12は、コード解析手段11が解析結果によりリスト総和演算のベクトル化を行うと判定した場合、ベクトル化コードを生成する手段である。命令生成手段12は、ベクトル命令生成手段121、スカラ再計算命令生成手段122を含む。
ベクトル命令生成手段121は、全要素のベクトル加算を行い、その加算の際にアドレスの重複を検出する命令を生成する。
スカラ再計算命令生成手段122は、アドレスの重複により結果が不正となっている要素についてスカラで計算し直す命令(以下、「スカラ再計算命令」と記載)を生成する。
【0017】
なお、コード解析手段11及びスカラ再計算命令生成手段122は、LISTVEC指示行法に係るコンパイラも有する手段であり、例えば、「Alfred V. Aho, Monica S. Lam, Ravi Sethi,and Jeffrey D. Ullman,“Compilers: Principles, Techniques, and Tools(2nd Edition)”,(米国),Pearson Education,Inc,2007,pp.1-581」に記載されている技術と同様に実現するものであってもよい。
【0018】
ベクトル命令生成手段121は、図3に示すように、アドレス計算手段1211、重複検出-マスク作成手段1212、ベクトル加算手段1213、結果不正項検出手段1214を含む。
アドレス計算手段1211は、間接アドレス参照される配列のアドレスを算出する。
重複検出-マスク作成手段1212は、アドレス計算手段1211が算出したアドレスの重複を検出しベクトルマスクを作成する。
ベクトル加算手段1213は、ベクトルマスクのビットに基づいて、ベクトルどうしの加算を演算する。
結果不正項検出手段1214は、スカラ再計算命令を生成する必要性を確認して処理の分岐を行う。つまり、結果不正項検出手段1214は、ベクトルどうしの加算結果が不正となることを加算演算を行う前に検出することによってスカラ再計算命令の生成が必要であると判定した場合に、スカラ再計算命令の生成をベクトル加算手段1213に実行させる。
【0019】
次に、図4に示す本発明の一実施形態によるコンパイラ1によって生成されるリスト総和演算の命令列を例に、ベクトル命令生成手段121が生成する命令について説明する。
アドレス計算手段1211は、図4に示す行番号6、7の命令を生成し、X(L(I))の各要素のアドレスを算出する。重複検出-マスク作成手段1212は、図4に示す行番号8において新規に追加したVFMD命令を生成し、ベクトルレジスタに格納されたX(L(I))の各要素のアドレスの重複を検出し、ベクトルマスクを生成する。ベクトル加算手段1213は、図4に示す行番号9から行番号12の命令を生成し、X(L(I))+Y(I)のベクトル加算を行い、その演算結果をX(L(I))が示すメモリに書き込む。結果不正項検出手段1214は、行番号13、14の命令を生成し、PCVM命令に応じて重複検出-マスク作成手段1212が作成したベクトルマスクのビットが1となっている要素の数を数え、数が0でない、つまりアドレスの重複が1つでもあればスカラ再計算命令を生成する処理へと分岐させる。
【0020】
なお、図4に示す本発明の一実施形態によるコンパイラ1によって生成されるリスト総和演算の命令列と、図15に示すLISTVEC指示行法を用いて生成される命令列とを比較すると、図15に示す命令列において、アドレス重複検出のために生成していたVSEQ(ベクトルシーケンシャルナンバー命令)(行番号1)、VSC(行番号10)、VGT(行番号11)、VCMPS(ベクトルコンペア命令)(行番号15)、および、VFMK(ベクトルフォームマスク命令)(行番号16)の各命令が、図4に示す命令列では生成されず、それらの命令の代わりに新規にVFMD命令(行番号8)が生成される。
【0021】
図15に示すLISTVEC指示行法を用いて生成される命令列の例の場合、行番号8において、VSFA命令(Vector Shift Left and Add)を生成し、X(L(I))の各要素のアドレスを算出してベクトルレジスタに格納している。また、図15に示すLISTVEC指示行法を用いて生成される命令列の例の場合、4バイトデータをコンパイルの対象としており、“vsfa %v59,%v60,2,%s59”という命令が生成される。そして、図15に示すLISTVEC指示行法を用いて生成される命令列の例の場合、1つ前の行番号7でベクトルレジスタ%v60にL(I)の各要素が格納されており、これにデータサイズの4バイトを乗算した値に、スカラレジスタ%s59に格納されたXのアドレスを加算してX(L(I))のアドレスを算出し、ベクトルレジスタ%v59に格納している。
一方、図4に示す本発明の一実施形態によるコンパイラ1によって生成されるリスト総和演算の命令列の例の場合、X(L(I))の各要素のアドレスを格納したベクトルレジスタ%v59に対して、同一の値をもつ要素がないか、つまりX(L(I))のアドレスに重複がないかを検出し、重複する要素のインデックス番号のビットを1とするベクトルマスクを作成する命令が新規に追加される。この新規命令の名前をVFMD(Vector Form Mask Duplicate)とし、ニーモニックの例を図5に示す。図5に示すように、VFMD命令は、上述したVSFA命令で算出されたX(L(I))の各要素のアドレスを格納したベクトルレジスタVR0をソースとし、作成したベクトルマスクをベクトルマスクレジスタVM0に格納する。
本発明の一実施形態によるコンパイラ1は、この新規に追加したベクトルマスク作成命令VFMDを生成する機能を備え、例えば、LISTVEC指示行法を用いてアドレスの重複を検出する際に生成していたVSC命令とVGT命令を含む命令列に代わって、新規にVFMD命令を生成することにより、リスト総和演算における実行コストの高い命令を削減し、処理の高速化を実現する。
【0022】
次に、コンパイラ1によって生成されたオブジェクトコード(命令)を実行する演算装置20の処理について説明する。
ここでは、図6に示す演算装置20のリスト総和演算の処理について図7図11を用いて説明する。
なお、図7図11に示す具体的な数値を用いたリスト総和演算の処理は、一例であり、本発明の一実施形態による演算装置20のリスト総和演算の処理を限定するものではない。
【0023】
配列Xと、配列Yと、配列Xのインデックスとなる配列Lとが演算装置20のメモリに記録されている。これらの配列X、Y、Lの要素数Nは5であり、初期状態における各配列の要素として、図7の(a)の部分に示す数値が演算装置20のメモリに格納されているものとする。
【0024】
まず、演算装置20によって、図7の(b)の部分に示すように、配列Lの各要素がベクトルレジスタVR0に読み込まれる。
【0025】
次に、演算装置20によって、図8の(c)の部分に示すように、配列X(L(I))の各要素のアドレスが計算され(ステップS1)、ベクトルレジスタVR1に格納される。
【0026】
次に、演算装置20によって、図8の(d)の部分に示すように、新規に追加されたVFMD命令によってベクトルレジスタVR1の各要素の値の重複が検出され(ステップS2)、ベクトルマスクレジスタVM0にベクトルマスクが生成される(ステップS3)。演算装置20は、ベクトルレジスタVR1の1番目の要素addr(X(1))について、ベクトルレジスタVR1の2番目以降の要素と順に比較する。図8の(d)の部分に示す例では、ベクトルレジスタVR1の3番目の要素がaddr(X(1))であり、1番目の要素addr(X(1))と重複する。そのため、ベクトルレジスタVR1の1番目の要素は、重複ありと判定され、ベクトルマスクレジスタVM0の1番目の要素のビットを1に設定する。演算装置20は、ベクトルレジスタVR1の2番目以降の要素についても同様に重複を判定し、重複があればベクトルマスクレジスタVM0のビットを1に設定し、重複がなければベクトルマスクレジスタVM0のビットを0に設定する。ベクトルレジスタVR1の重複がある要素のうち、最後に現れる要素(図8の(d)の部分に示す例の場合、4番目のaddr(X(1)))に対応するベクトルマスクレジスタVM0のビットは0となる。これは、ベクトル演算した場合、最後の要素の演算結果がそれよりも前の演算結果を上書きしてメモリ上に反映され、スカラで計算し直す必要がないことを示すものである。これは、後述するように、演算装置20がスカラで計算し直す場合の式であるX(1)=X(1)+Y(1)+Y(3)+Y(4)の右辺うち、X(1)+Y(4)=9がすでに計算されて結果がベクトルレジスタVR1に格納されており、この最後の要素に関してはスカラで計算し直す必要がないためであり、VM0のビットは0にしてX(1)+Y(4)のスカラ命令は生成しないようにしてスカラで計算し直す回数を減らす工夫によるものである。
【0027】
次に、演算装置20によって、図9の(e)の部分に示すように、配列X(L(I))の値がベクトルレジスタVR2に読み込まれ、配列Y(I)の値がベクトルレジスタVR3に読み込まれる。そして、演算装置20によって、図9の(f)の部分に示すように、ベクトルレジスタVR2のn番目の要素とベクトルレジスタVR3のn番目の要素についてベクトル加算が実行され(ステップS4)、演算結果がベクトルレジスタVR4に格納される。なお、この場合のnは、1から5の整数である。
【0028】
次に、演算装置20によって、図10の(g)の部分に示すように、演算結果が配列X(L(I))が示すメモリに書き込まれる。このとき、アドレスが重複している要素X(1)には、演算装置20によって、最初にベクトルレジスタVR1の1番目に格納されている値3が書き込まれ、次に3番目に格納されている値7が上書きされ、最後に4番目に格納されている値9が上書きされて、最後に書き込まれた値9がメモリ上に反映される。
なお、各要素をX(L(I))=X(L(I))+Y(I)を用いてスカラで計算した場合、要素配列X(1)=X(1)+Y(1)+Y(3)+Y(4)となり、要素X(1)の値としては2+1+5+7=15が正しい。演算装置20は、アドレスの重複によって、演算結果が不正な結果(不適切な結果)であると判定することができる(ステップS5)。
演算装置20によって、図10の(h)の部分に示すように、ベクトルマスクレジスタVM0のビットが1の要素の数をカウントし、カウントした数が0でなければスカラで計算し直す処理へと制御を分岐させる。
【0029】
演算装置20が、演算結果が不正な結果(不適切な結果)であると判定した場合(ステップS5においてYES)、演算装置20によって、図11の(i)の部分に示すように、ベクトルマスクレジスタVM0のビットが1となっている要素の番号について、スカラで計算し直される(ステップS6)。
【0030】
まず、演算装置20によって、1番目の要素について、X(L(1))+Y(1)が計算される。このとき、要素X(L(1))にはベクトル計算の結果X(1)+Y(4)=9が格納されているため、X(L(1))+Y(1)の結果は9+1=10となり、演算装置20によって、要素X(L(1))、つまり要素X(1)には10が書き込まれる。
なお、図11は、最終結果を示している。そのため、図11において、X(1)に格納される値は10ではなく15となっている。
【0031】
次に、演算装置20によって、3番目の要素について、X(L(3))=X(L(3))+Y(3)が計算される。要素X(L(3))=X(1)には先ほどのスカラで計算し直して得られた値10が格納されているため、X(L(3))+Y(3)の結果は10+5=15となり、演算装置20によって、要素X(L(3))、つまり要素X(1)には15が書き込まれる。VM0でビットが1となっている要素についてこのスカラでの計算のし直しを繰返し、結果として不正項が補正される。図4に示す例では3番目の要素でスカラでの計算のし直しは終了し、図11の(j)の部分に示すように最終的な演算結果が格納される。アドレスの重複があった配列Xの1番目の要素の値は15となり、正しい結果が得られている。
【0032】
また、演算装置20が、演算結果が不正な結果(不適切な結果)でないと判定した場合、処理を終了する。
【0033】
以上、本発明の一実施形態によるコンパイラ1について説明した。
本発明に関連する例えばLISTVEC指示行法を用いるコンパイラでは、図15に示すように、アドレス重複検出のために生成していたVSEQ(ベクトルシーケンシャルナンバー命令)(行番号1)、VSC(行番号10)、VGT(行番号11)、VCMPS(ベクトルコンペア命令)(行番号15)、および、VFMK(ベクトルフォームマスク命令)(行番号16)の各命令列を生成するのに対して、本発明の一実施形態によるコンパイラ1では、新規にVFMD命令が追加されるのみであり(図4の行番号8)、コンパイル装置10において、ベクトル命令生成手段121として機能する。ベクトル命令生成手段121は、全要素のベクトル加算を行い、その加算の際にアドレスの重複を検出する命令を生成する。ベクトル命令生成手段121は、アドレス計算手段1211、重複検出-マスク作成手段1212、ベクトル加算手段1213、結果不正項検出手段1214を含む。アドレス計算手段1211は、間接アドレス参照される配列のアドレスを算出する。重複検出-マスク作成手段1212は、アドレス計算手段1211が算出したアドレスの重複を検出しベクトルマスクを作成する。ベクトル加算手段1213は、ベクトルマスクのビットに基づいて、ベクトルどうしの加算を演算する。結果不正項検出手段1214は、スカラ再計算命令の生成の必要性を確認して処理の分岐を行う。つまり、結果不正項検出手段1214は、ベクトルどうしの加算結果に基づいてスカラ再計算命令の生成が必要であると判定した場合に、スカラ再計算命令の生成をベクトル加算手段1213に実行させる。
このように、新規にVFMD命令が追加されることにより、VSC命令とVGT命令というメモリアクセスを伴う実行コストが高い命令がなくなり、レジスタアクセスのみのVFMD命令だけで処理できるようになる。その結果、コンパイラ1は、コンパイル装置10において、リスト総和演算において要素が重複する場合であってもリスト総和演算の実行時間を短くすることができる。
【0034】
なお、本発明の一実施形態では、リスト総和演算について説明したが、本発明の別の実施形態では、リスト総和演算ではなく、以下の形式の演算に適用するものであってもよい。
X(L(I)) = X(L(I)) op expr
op: ベクトル演算可能な命令
expr: Xの参照を含まない式
【0035】
本発明の一実施形態ではopの部分が加算命令の場合を例に説明したが、opの部分は、例えば減算命令など、ベクトル演算可能な命令であれば加算命令以外であってもよい。
本発明の一実施形態における加算を減算などのベクトル演算に置き換えて同様のコンパイル及び演算を考えることで、加算以外のベクトル演算についてもVSC命令とVGT命令というメモリアクセスを伴う実行コストが高い命令がなくなり、処理を高速化することができる。
【0036】
本発明の実施形態による最小構成のコンパイル装置10について説明する。
本発明の実施形態による最小構成のコンパイル装置10は、図12に示すように、アドレス計算手段1211、重複検出-マスク作成手段1212、ベクトル加算手段1213、結果不正項検出手段1214を備える。
アドレス計算手段1211は、間接アドレス参照される配列のアドレスを算出することを実行させる命令を生成する。
重複検出-マスク作成手段1212は、アドレス計算手段1211が算出した前記アドレスの重複を検出しベクトルマスクを作成することを実行させる命令を生成する。
ベクトル加算手段1213は、前記ベクトルマスクのビットに基づいて、ベクトルどうしの演算を行うことを実行させる命令を生成する。
結果不正項検出手段1214は、前記ベクトルどうしの演算結果に基づいてベクトル加算手段1213にスカラで計算し直すことを実行させる命令を生成する。
【0037】
次に、本発明の実施形態による最小構成のコンパイル装置10による処理について説明する。
ここでは、図13に示す処理フローについて説明する。
アドレス計算手段1211は、間接アドレス参照される配列のアドレスを算出することを実行させる命令を生成する(ステップS11)。
重複検出-マスク作成手段1212は、アドレス計算手段1211が算出した前記アドレスの重複を検出しベクトルマスクを作成することを実行させる命令を生成する(ステップS12)。
ベクトル加算手段1213は、前記ベクトルマスクのビットに基づいて、ベクトルどうしの演算を行うことを実行させる命令を生成する(ステップS13)。
結果不正項検出手段1214は、前記ベクトルどうしの演算結果に基づいてベクトル加算手段1213にスカラで計算し直すことを実行させる命令を生成する(ステップS14)。
【0038】
以上、本発明の実施形態による最小構成のコンパイル装置10について説明した。
このコンパイル装置10により、リスト総和演算において要素が重複する場合であってもリスト総和演算の実行時間を短くすることができる。
【0039】
なお、本発明の一実施形態では、新規追加したVFMD命令について、算出したX(L(I))のアドレスを格納したベクトルレジスタを用いて要素間の重複を検出するものとして説明した。しかしながら、本発明の別の実施形態では、配列L(I)の値をロードしたベクトルレジスタの要素間の重複を検出することで、リスト総和演算のアドレス重複を検出するものであってもよい。このことを図4に示した命令列を例に説明すると、行番号6で配列L(I)の値をベクトルレジスタ%v60に格納しており、ここで“vfmd %vm15,%v60”と%v60をソースとしてVFMD命令を生成することで、本発明の一実施形態におけるベクトルマスクと同じベクトルマスクを作成することができる。
【0040】
なお、本発明の一実施形態では、コンパイル装置10と演算装置20は、別の装置として説明した。しかしながら、本発明の別の実施形態では、コンパイル装置10と演算装置20とは1つの装置に収められ、その1つの装置が、コンパイル装置10が行う処理と演算装置20が行う処理の両方を行うものであってもよい。
【0041】
なお、本発明の実施形態における処理は、適切な処理が行われる範囲において、処理の順番が入れ替わってもよい。
【0042】
本発明の実施形態について説明したが、上述のコンパイル装置10、演算装置20、その他の制御装置は内部に、コンピュータ装置を有していてもよい。そして、上述した処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。コンピュータの具体例を以下に示す。
図14は、少なくとも1つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
コンピュータ5は、図14に示すように、CPU6(ベクトルプロセッサを含む)、メインメモリ7、ストレージ8、インターフェース9を備える。
例えば、上述のコンパイル装置10、演算装置20、その他の制御装置のそれぞれは、コンピュータ5に実装される。そして、上述した各処理部の動作は、プログラムの形式でストレージ8に記憶されている。CPU6は、プログラムをストレージ8から読み出してメインメモリ7に展開し、当該プログラムに従って上記処理を実行する。また、CPU6は、プログラムに従って、上述した各記憶部に対応する記憶領域をメインメモリ7に確保する。
【0043】
ストレージ8の例としては、HDD(Hard Disk Drive)、SSD(Solid State Drive)、磁気ディスク、光磁気ディスク、CD-ROM(Compact Disc Read Only Memory)、DVD-ROM(Digital Versatile Disc Read Only Memory)、半導体メモリ等が挙げられる。ストレージ8は、コンピュータ5のバスに直接接続された内部メディアであってもよいし、インターフェース9または通信回線を介してコンピュータ5に接続される外部メディアであってもよい。また、このプログラムが通信回線によってコンピュータ5に配信される場合、配信を受けたコンピュータ5が当該プログラムをメインメモリ7に展開し、上記処理を実行してもよい。少なくとも1つの実施形態において、ストレージ8は、一時的でない有形の記憶媒体である。
【0044】
また、上記プログラムは、前述した機能の一部を実現してもよい。さらに、上記プログラムは、前述した機能をコンピュータ装置にすでに記録されているプログラムとの組み合わせで実現できるファイル、いわゆる差分ファイル(差分プログラム)であってもよい。
【0045】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例であり、発明の範囲を限定しない。これらの実施形態は、発明の要旨を逸脱しない範囲で、種々の追加、省略、置き換え、変更を行ってよい。
【0046】
この出願は、2020年2月17日に出願された日本国特願2020-024338を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【0047】
本発明の各態様は、記録媒体、コンパイル装置、処理システム及びコンパイル方法に適用してもよい。
【符号の説明】
【0048】
1・・・コンパイラ
5・・・コンピュータ
6・・・CPU
7・・・メインメモリ
8・・・ストレージ
9・・・インターフェース
10・・・コンパイル装置
11・・・コード解析手段
12・・・命令生成手段
20・・・演算装置
100・・・処理システム
111・・・指示行解析手段
112・・・リスト総和演算構文解析手段
121・・・ベクトル命令生成手段
122・・・スカラ再計算命令生成手段
1211・・・アドレス計算手段
1212・・・重複検出-マスク作成手段
1213・・・ベクトル加算手段
1214・・・結果不正項検出手段
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15