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

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

▶ 富士通株式会社の特許一覧

特開2023-180060演算処理プログラムおよび演算処理方法
<>
  • 特開-演算処理プログラムおよび演算処理方法 図1
  • 特開-演算処理プログラムおよび演算処理方法 図2
  • 特開-演算処理プログラムおよび演算処理方法 図3
  • 特開-演算処理プログラムおよび演算処理方法 図4
  • 特開-演算処理プログラムおよび演算処理方法 図5
  • 特開-演算処理プログラムおよび演算処理方法 図6
  • 特開-演算処理プログラムおよび演算処理方法 図7
  • 特開-演算処理プログラムおよび演算処理方法 図8
  • 特開-演算処理プログラムおよび演算処理方法 図9
  • 特開-演算処理プログラムおよび演算処理方法 図10
  • 特開-演算処理プログラムおよび演算処理方法 図11
  • 特開-演算処理プログラムおよび演算処理方法 図12
  • 特開-演算処理プログラムおよび演算処理方法 図13
  • 特開-演算処理プログラムおよび演算処理方法 図14
  • 特開-演算処理プログラムおよび演算処理方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023180060
(43)【公開日】2023-12-20
(54)【発明の名称】演算処理プログラムおよび演算処理方法
(51)【国際特許分類】
   G06F 17/16 20060101AFI20231213BHJP
【FI】
G06F17/16 E
G06F17/16 J
G06F17/16 P
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2022093140
(22)【出願日】2022-06-08
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】依田 勝洋
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB35
5B056BB38
5B056FF11
(57)【要約】
【課題】疎行列の並列演算を高速化することを課題とする。
【解決手段】プロセッサは、マスク演算に用いるマスクレジスタにおける、疎行列の各行の各要素に対応するビットを示す複数のマスクビットそれぞれに、マスク演算を指定する各マスクパターンを設定する。プロセッサは、各マスクパターンが設定される複数のマスクビットそれぞれを、物理レジスタの異なる領域に展開する。
【選択図】図1
【特許請求の範囲】
【請求項1】
コンピュータに、
マスク演算に用いるマスクレジスタにおける、疎行列の各行の各要素に対応するビットを示す複数のマスクビットそれぞれに、前記マスク演算を指定する各マスクパターンを設定し、
前記各マスクパターンが設定される前記複数のマスクビットそれぞれを、物理レジスタの異なる領域に展開する、
処理を実行させることを特徴とする演算処理プログラム。
【請求項2】
前記疎行列の各行の各要素を並列に演算する際に、前記各要素に対応する前記物理レジスタの領域に格納される前記マスクビットを特定し、
特定された前記マスクビットに設定される前記マスクパターンにしたがって、前記マスク演算を実行する、
処理を前記コンピュータに実行させることを特徴とする請求項1に記載の演算処理プログラム。
【請求項3】
前記展開する処理は、
プログラムカウンタが設定範囲に属する場合に、前記複数のマスクビットそれぞれを前記物理レジスタの異なる領域に展開し、
前記プログラムカウンタが設定範囲に属さない場合に、前記物理レジスタへの展開を抑制し、前記マスクレジスタのリネーム処理を実行して前記マスク演算を実行させる、
ことを特徴とする請求項1に記載の演算処理プログラム。
【請求項4】
前記物理レジスタの異なる領域に展開された前記複数のマスクビットそれぞれに対応する前記マスク演算が完了した場合に、前記物理レジスタの前記異なる領域それぞれを解放する、処理を前記コンピュータに実行させることを特徴とする請求項1に記載の演算処理プログラム。
【請求項5】
コンピュータが、
マスク演算に用いるマスクレジスタにおける、疎行列の各行の各要素に対応するビットを示す複数のマスクビットそれぞれに、前記マスク演算を指定する各マスクパターンを設定し、
前記各マスクパターンが設定される前記複数のマスクビットそれぞれを、物理レジスタの異なる領域に展開する、
処理を実行することを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理プログラムおよび演算処理方法に関する。
【背景技術】
【0002】
疎行列を高速に演算する手法として、複数行を一度に演算するSIMD(Single Instruction Multiple Data)が利用されている。SIMDによる並列化に際して、行ごとに要素数が異なる場合には、マスク技術を利用することで、並列化が実現されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特表2018-500652号公報
【特許文献2】特開2017-62845号公報
【特許文献3】米国特許出願公開第2016/0188336号明細書
【特許文献4】米国特許出願公開第2012/0151182号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記技術では、発生する可能性があるマスクパターンを予め用意しておくことになるので、マスクパターン作成用に論理レジスタを多用することになり、論理レジスタが枯渇する危険性がある。なお、リネーマーを用いて、レジスタ番号に物理レジスタを割り当てることで、論理レジスタの枯渇を解消する技術も知られているが、リネーマーを用いた場合には、依存関係が発生し、処理速度が低下する。
【0005】
一つの側面では、疎行列の並列演算を高速化することができる演算処理プログラムおよび演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
第1の案では、演算処理プログラムは、コンピュータに、マスク演算に用いるマスクレジスタにおける、疎行列の各行の各要素に対応するビットを示す複数のマスクビットそれぞれに、前記マスク演算を指定する各マスクパターンを設定し、前記各マスクパターンが設定される前記複数のマスクビットそれぞれを、物理レジスタの異なる領域に展開する、処理を実行させることを特徴とする。
【発明の効果】
【0007】
一実施形態によれば、疎行列の並列演算を高速化することができる。
【図面の簡単な説明】
【0008】
図1図1は、実施例1にかかる情報処理装置のプロセッサが有する機能構成を示す機能ブロック図である。
図2図2は、実施例1にかかる疎行列の並列演算を説明する図である。
図3図3は、マスク演算を説明する図である。
図4図4は、RISC-Vの要素マスクを説明する図である。
図5図5は、マスクパターンの差し替えによる問題点を説明する図である。
図6図6は、右シフトによるマスクパターンの生成を説明する図である。
図7図7は、依存関係の発生を説明する図である。
図8図8は、リネーム処理を説明する図である。
図9図9は、リネームによる依存関係の解消例を説明する図である。
図10図10は、実施例1におけるリネーム処理を説明する図である。
図11図11は、実施例1による効果を説明する図である。
図12図12は、実施例1におけるリネーム処理の流れを説明するフローチャートである。
図13図13は、実施例1における解放処理の流れを説明するフローチャートである。
図14図14は、解放処理における解放判定を説明する図である。
図15図15は、ハードウェア構成例を説明する図である。
【発明を実施するための形態】
【0009】
以下に、本願の開示する演算処理プログラムおよび演算処理方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例0010】
(情報処理装置の説明)
図1は、実施例1にかかる情報処理装置のプロセッサ10dが有する機能構成を示す機能ブロック図である。図1に示す情報処理装置10は、コンピュータ、サーバなどの情報処理装置の一例である。情報処理装置のプロセッサ10dは、疎行列(特に大規模疎行列)の連立一次方程式の求解処理を、SIMDによる並列化により高速化する。その際、プロセッサ10dは、RISC(Reduced Instruction Set Computer)-Vのマスクの特徴を利用しつつ、リネーマーの処理を変更して並列実行時の依存関係を解消する。
【0011】
図1に示すように、プロセッサ10dは、命令処理部11、リネーマー12、発送部13、命令ウィンドウ14、演算回路15、レジスタファイル16を有する。
【0012】
命令処理部11は、1つの命令の実行を複数のステージに分割し、複数の命令を流れ作業的に実行する命令パイプラインを実行する処理部である。例えば、命令処理部11は、メモリから命令を読み出すFETCHERや読み出された命令を解釈するDECODERなどの機能を実行する。
【0013】
リネーマー12は、RISC-Vのマスク処理を実行する際に、マスクパターンを保持するマスクレジスタのレジスタ番号のリネームを実行する処理部である。リネーマー12は、フリーリスト12a、RMT(Register Map Table)12b、リネーマー制御部12cを有する。
【0014】
フリーリスト12aは、未使用のレジスタ番号を記憶するデータベースである。例えば、フリーリスト12aには、解放された物理レジスタのレジスタ番号が登録される。フリーリスト12aは、FIFO(First In First Out)で管理されるので、解放されたレジスタ番号がリストの末尾に追加され、割当時にはリストの先頭から空き物理レジスタが取り出される。
【0015】
RMT12bは、論理レジスタと物理レジスタとのマッピングを表したテーブルである。RMT12bは、論理レジスタ数分のエントリを有し、1つのエントリが1つの論理レジスタに対応する。各エントリには、その論理レジスタに割り当て中の物理レジスタのレジスタ番号が記録される。フリーリスト12aから取り出された物理レジスタのレジスタ番号がRMT12bに登録され、命令がコミットされる際に、それ以前に割り当てられた物理レジスタの解放が実行される。
【0016】
リネーマー制御部12cは、SIMD型演算のマスク処理を実行する際に、リネーム処理を実行する処理部である。なお、リネーマー制御部12cによるリネーム処理の詳細は後述するが、簡単に説明しておくと、例えば、リネーマー制御部12cは、マスク演算に用いるマスクレジスタにおける、疎行列の各行の各要素に対応するビットを示す複数のマスクビットそれぞれに、マスク演算を指定する各マスクパターンを設定する。リネーマー制御部12cは、各マスクパターンが設定される複数のマスクビットそれぞれを、物理レジスタの異なる領域(レジスタ番号)に展開する。
【0017】
また、リネーマー制御部12cは、疎行列の各行の各要素を並列に計算(演算)する際に、各要素に対応する物理レジスタの領域に格納されるマスクビットを特定する。この結果、プロセッサ10dにより、特定されたマスクビットに設定されるマスクパターンにしたがって、マスク演算が実行される。
【0018】
ここで、実施例1で用いる用語について簡単に説明する。マスクビットは、マスクレジスタの各要素の対応するビットを示す。マスクパターンは、対応するビットに設定するパターンを示し、例えば{1,0,1,1}や{0,0,1,1}などが該当する。マスクレジスタは、「v0」で表し、マスクビットは、v0の要素#0の0bit目、要素#1の1bit目などが該当する。
【0019】
発送部13は、待機状態の命令などを実行する処理部であり、例えばDISPATCHERの機能を有する。例えば、発送部13は、命令処理部11により入力された命令を、リネーマー12によるリネーム処理の実行後に実行する。
【0020】
命令ウィンドウ14は、発送部13により実行された命令を演算回路15に入力する処理部である。例えば、命令ウィンドウ14は、待機状態にある命令を、演算回路15の処理状況を監視して、適切なタイミングで演算回路15に入力する。
【0021】
演算回路15は、命令を実行する回路を含む処理部であり、例えば加算、減算などの各各種演算を実行する。レジスタファイル16は、レジスタを集積した高速なストレージの一種であり、SIMD型演算の実行時にデータの格納等を行われる。
【0022】
(前提技術の説明)
次に、実施例1のプロセッサ10dが実行する各処理について説明する。図2は、実施例1にかかる疎行列の並列演算を説明する図である。図2に示すように、プロセッサ10dは、疎行列Aの各要素(i)とベクトルxの各要素(v)との演算である疎行列ベクトル積(SpMV:Sparse matrix-vector multiplication)を実行する場合に、疎行列Aの複数行を一度に演算する。
【0023】
例えば、プロセッサ10dは、インデックス「col」のループで演算式「y += A.v(col)×x(A.i(col))」を実行する。すなわち、プロセッサ10dは、「A.i」をインデックス「col」で取得(ストライドロード)してギャザーロード(x)し、「A.v」をインデックス「col」で取得(ストライドロード)し、それらのFma(Fused multiply add)を実行して「y」に格納する。
【0024】
(マスク演算)
プロセッサ10dは、SIMDにより、上記図2で示した演算式を並列実行する際に、疎行列Aの行ごとに要素数が異なるためマスク演算を実行する。図3は、マスク演算を説明する図である。図3に示すように、4要素の並列演算(並列計算)を実行する際に、要素10以降では、要素が4個未満になり、さらに行ごとに要素数が異なる。このような場合に、プロセッサ10dは、マスク演算を実行する。例えば、プロセッサ10dは、{0,1,1,1}などのマスクベクトルを使用し、マスクベクトルで「0」とした要素の演算を実行しないように制御する。図3の例では、プロセッサ10dは、z(0)の計算だけ実行しない。
【0025】
ここで、RISC-Vのマスク処理について説明する。図4は、RISC-Vの要素マスクを説明する図である。図4に示すように、プロセッサ10dは、64ビットで区切られたv0からv31の32個の領域を有するベクトルレジスタの0番レジスタ「v0」をマスクレジスタとして使用する。そして、プロセッサ10dは、「vop.v v1,v2,v3,v0.t」を実行する。ここで、使用するマスクビットは、マスクレジスタv0における各要素に対応する領域に格納される。例えば、マスクレジスタv0の要素#0の領域のビット0に要素0用のマスクパターンが設定され、マスクレジスタv0の要素#1の領域のビット1に要素1用のマスクパターンが設定され、マスクレジスタv0の要素#2の領域のビット2に要素2用のマスクパターンが設定される。
【0026】
このような状態で、プロセッサ10dは、要素ごとにv0のt番目の要素の「t-bit」が「0」か「1」かを判定し、「0」であればマスク演算を実行し、「1」であれば通常演算を実行する。なお、「vop」は、ベクトル命令のオペレーションであり、例えば加算や減算などである。
【0027】
しかし、上述したマスク演算では、演算の進捗にあわせてマスクパターンを変更することになり、さらに、マスクパターンを作るコードを最内ループで実行することが要求されるので、演算の低速化、処理性能の劣化への影響が大きい。例えば、10万回のループ内部にマスク生成処理が2サイクル増えた場合、20万サイクルの性能劣化が発生する。また、演算の進捗で差し替えるマスクパターンを予め用意して論理レジスタに保存しておくことになるので、論理レジスタを多用することになり、論理レジスタが枯渇することもある。
【0028】
(実装例および問題点)
次に、アセンブリコードの実装例を説明する。図5は、マスクパターンの差し替えによる問題点を説明する図である。図5では、16行で各行が8つの要素を有する疎行列に対して、リネーム処理およびマスク処理を実行するアセンブリコードの実装例である。例えば、図5のアセンブリコードは、マスクの初期設定を行う右シフト「v0,v21,0」の後、innerLabelのループ内に処理内容が規定される。例えば、ストライドロード「v8,(a1),v11,v0」は、v8にインデックスをロードする命令であり、v8は、結果を格納するベクトルレジスタ、a1は、ベクトルデータの先頭アドレス、v11は、複数のアドレスを示すインデックス情報である。なお、ストライドロードは、規則的なロード、ギャザーロードは、ランダムパターンのロードである。
【0029】
図5のアセンブリコードの詳細を説明する。v8にインデックスをロードするインデックスをロードするストライドロード、v9に行列の値をロードするストライドロード、v10にベクトルxをロードするギャザーロード、積和を実行するFmaにより、上4要素の演算を実行する。その後、右シフトによりマスクパターンを変更し、v12にインデックスをロードするインデックスをロードするストライドロード、v13に行列の値をロードするストライドロード、v14にベクトルxをロードするギャザーロード、積和を実行するFmaにより、下4要素の演算を実行する。その後、次のイテレーションのマスクを生成する「右シフト(v0,v22,t1)」、SIMD要素分の減算(インデックス-=4)を実行する「Sub(t0,t0,4)」、マスクパターンの入れ替えを行う「Add(t1,t1,1)」が実行される。
【0030】
なお、論理レジスタ番号v21は、上4要素用のマスクパターン(例えば、{0x1FFF,0x7FFE,0x3FFC,0x1FF8})であり、論理レジスタ番号v22は、下4要素用のマスクパターン(例えば、{0x0FFF,0x7FFE,0x1FFC,0x0FF8}である。
【0031】
図5の左図の場合、上4要素の処理を実行した後の右シフトで次のイテレーションのマスクパターンの入れ替え(v21からv22へ)が発生するので、事前にマスクパターンを用意しておくことになり、論理レジスタを多く消費する。
【0032】
一方、図5の右図は、マスクパターンを1つの論理レジスタに置き換えた例である。この場合、マスクパターンの差し替えは行われないが、右シフトを順番に実行することになる。このため、同じ論理レジスタを使用することになり、v21のシフト結果を使用するという依存関係が発生する。
【0033】
図6は、右シフトによるマスクパターンの生成を説明する図である。図6に示すように、プロセッサ10dは、図4で説明した手法に代えて、右1ビットシフトすると使用するマスクパターンが使用するビット位置に来るように、マスクレジスタv0の各要素の各ビットに右シフト用のマスクパターンを格納する。例えば、マスクレジスタv0の要素#0の領域のビット0に「最初に使うマスクパターン」、ビット1に「2回目に使うマスクパターン」、ビット2に「3回目の使うマスクパターン」、ビット3に「4回目に使うマスクパターン」が設定される。また、マスクレジスタv0の要素#1の領域のビット1に「最初に使うマスクパターン」、ビット2に「2回目に使うマスクパターン」、ビット3に「3回目の使うマスクパターン」、ビット4に「4回目に使うマスクパターン」が設定される。なお、1回目に使用するとは、右1ビットシフト後に使用すると同義であり、2回目に使用するとは、右2ビットシフト後に使用すると同義である。
【0034】
ところが、この手法では、右シフトの実行時に依存関係が発生する。図7は、依存関係の発生を説明する図である。図7には、各命令が実行されるタイミングが「Ex」で表されている。図7に示すように、右シフトで「論理レジスタ番号v21」を共有することから、依存関係が生じる。このため、右シフトを順番に実行することになり、処理の低速化に繋がる。
【0035】
(リネーム処理)
上述した手法では、右シフトの依存関係により処理の低速化が発生することから、右シフトの依存関係を解消するために、プロセッサ10dは、リネーマー12によるリネーム処理をマスクレジスタに適用することで、依存関係を解消する。
【0036】
図8は、リネーム処理を説明する図である。図8に示すように、プロセッサ10dは、論理レジスタよりも数倍の容量がある物理レジスタを活用するために、x#というプログラム上のレジスタ番号をp#という物理的なレジスタ番号に割り当て直すことで依存関係の解消を図るリネーム処理を実行する。
【0037】
図8の例では、プロセッサ10dは、演算「I1:mul x3←x2×4」、「I2:add x3←x1+1」、「I3:sub x1←x5-1」、「I4:and x6←x7&1」に対して、フリーリスト12aで空いている物理レジスタ番号を特定し、RMT12bに新たに登録することで、「I1:mul p20←p12×4」、「I2:add p23←p11+1」、「I3:sub p22←p15-1」、「I4:and p23←p17&1」に変換するリネーム処理を実行する。なお、図8の右図は、フリーリスト12aからRMT12bへの登録および演算のリネームの例示であり、例えば、フリーリスト12aにあるp23をRMT12bに登録し、I2のx3をp23でリネームすることを示している。
【0038】
すなわち、プロセッサ10dは、I1とI2で依存関係がある論理レジスタ番号x3それぞれを物理レジスタ番号p20とp23にリネームし、I2とI3で依存関係がある論理レジスタ番号x1それぞれを物理レジスタ番号p11とp24にリネームすることで、右シフトの依存関係を解消して、I1からI4を並列に実行する。
【0039】
図9は、リネームによる依存関係の解消例を説明する図である。図9では、図5と同様、16行で各行が8つの要素を有する疎行列に対して、リネーム処理およびマスク処理を実行するアセンブリコードの実装例で説明する。
【0040】
図9に示すように、プロセッサ10dは、リネーマー12等により、マスクの初期設定であるループ外で実行される右シフトの後、ループ内の右シフトにおける論理レジスタ番号をリネームする。例えば、プロセッサ10dは、ループ内の1回目の右シフトにおける論理レジスタ番号v0を物理レジスタ番号pv0にリネームし、ループ内の2回目の右シフトにおける論理レジスタ番号v0を物理レジスタ番号pv1にリネームし、演算を実行する。この結果、プロセッサ10dは、論理レジスタ番号を書き換えることから、2つの右シフトを並列に実行することができる。
【0041】
しかし、このリネーム処理では、右シフトの依存関係は解消できるものの、依然として論理レジスタを多く使用することから、論理レジスタの使用量が多く、枯渇する可能性が高い。
【0042】
そこで、実施例1では、リネーマー12による処理を改良し、右シフトの依存関係の解消と、論理レジスタの使用量の削減とを両立する。具体的には、プロセッサ10dは、リネーマー12でマスクレジスタのビット毎に分解し、別々の物理レジスタに割り当てる。
【0043】
(リネーム処理の改良)
図10は、実施例1におけるリネーム処理を説明する図である。図10に示すように、プロセッサ10dは、マスク演算に用いるマスクレジスタにおける、疎行列の各行の各要素に対応するビットを示す複数のマスクビットそれぞれに、マスク演算を指定する各マスクパターンを設定する。プロセッサ10dは、各マスクパターンが設定される複数のマスクビットそれぞれを、物理レジスタの異なる領域(レジスタ番号)に展開する。
【0044】
その後、プロセッサ10dは、疎行列の各行の各要素を並列に演算する際に、各要素に対応する物理レジスタの領域に格納されるマスクビットを特定する。プロセッサ10dは、特定されたマスクビットに設定されるマスクパターンにしたがって、マスク演算を実行する。
【0045】
具体的には、図10に示すように、プロセッサ10dは、図6と同様、マスクレジスタv0の各要素に対応した領域のマスクビットに、マスクパターンを設定する。例えば、プロセッサ10dは、論理レジスタであるマスクレジスタv0の要素#0用の領域のビット0に「最初に使うマスクパターン」、ビット1に「2回目に使うマスクパターン」、ビット2に「3回目の使うマスクパターン」、ビット3に「4回目に使うマスクパターン」を設定する。
【0046】
また、プロセッサ10dは、物理レジスタであるpv0、pv1、pv2、pv3、pv4を用意し、各物理レジスタにマスクビットの位置(0,1,2,3)を対応付ける。
【0047】
そして、プロセッサ10dは、物理レジスタpv0の要素#0領域のマスクビット0に、マスクレジスタv0の要素#0のマスクビット0を展開(配置)し、物理レジスタpv1の要素#0領域のマスクビット0に、マスクレジスタv0の要素#0のマスクビット1を展開する。プロセッサ10dは、物理レジスタpv2の要素#0領域のマスクビット0に、マスクレジスタv0の要素#0のマスクビット2を展開し、物理レジスタpv3の要素#0領域のマスクビット0に、マスクレジスタv0の要素#0の領域のマスクビット3を展開する。
【0048】
同様に、プロセッサ10dは、物理レジスタpv0の要素#1領域のマスクビット1に、マスクレジスタv0の要素#1のマスクビット1を展開し、物理レジスタpv1の要素#1領域のマスクビット1に、マスクレジスタv0の要素#1のマスクビット2を展開する。プロセッサ10dは、物理レジスタpv2の要素#1領域のマスクビット1に、マスクレジスタv0の要素#1のマスクビット3を展開し、物理レジスタpv3の要素#1領域のマスクビット1に、マスクレジスタv0の要素#1用のマスクビット4を展開する。
【0049】
同様に、プロセッサ10dは、物理レジスタpv0の要素#2領域のマスクビット2に、マスクレジスタv0の要素#2のマスクビット2を展開し、物理レジスタpv1の要素#2領域のマスクビット2に、マスクレジスタv0の要素#2のマスクビット3を展開する。プロセッサ10dは、物理レジスタpv2の要素#2領域のマスクビット2に、マスクレジスタv0の要素#2のマスクビット4を展開し、物理レジスタpv3の要素#2領域のマスクビット2に、マスクレジスタv0の要素#2のマスクビット5を展開する。
【0050】
同様に、プロセッサ10dは、物理レジスタpv0の要素#3領域のマスクビット3に、マスクレジスタv0の要素#3のマスクビット3を展開し、物理レジスタpv1の要素#3領域のマスクビット3に、マスクレジスタv0の要素#3のマスクビット4を展開する。プロセッサ10dは、物理レジスタpv2の要素#3領域のマスクビット3に、マスクレジスタv0の要素#3のマスクビット5を展開し、物理レジスタpv3の要素#3領域のマスクビット3に、マスクレジスタv0の要素#3のマスクビット6を展開する。
【0051】
つまり、プロセッサ10dは、参照するマスクビットがビット0の場合は、pv0の各マスクビットにより特定される各マスクパターンを用いたマスク処理を実行し、参照するマスクビットがビット1の場合は、pv1の各マスクビットにより特定される各マスクパターンを用いたマスク処理を実行する。同様に、プロセッサ10dは、参照するマスクビットがビット2の場合は、pv2の各マスクビットにより特定される各マスクパターンを用いたマスク処理を実行し、参照するマスクビットがビット3の場合は、pv3の各マスクビットにより特定される各マスクパターンを用いたマスク処理を実行する。
【0052】
また、プロセッサ10dは、RMT12bにおいてもマスクビットの位置(0,1,2,3)を対応付け、フリーリスト12aにおいてもマスクビットの位置(0,1,2,3)を対応付ける。この結果、プロセッサ10dは、どの物理レジスタがどのビット位置で使用されているかを管理することができるので、リネーム後に元に戻す際も、正確に論理レジスタ番号に戻すことができる。
【0053】
図11は、実施例1による効果を説明する図である。図11に示すように、プロセッサ10dは、マスク初期設定の右シフト「v0,v21,0」の後において、はじめの演算処理では「pv20」、次の演算処理では「pv21」、次の演算処理では「pv22」をマスクレジスタとして割り当てることができる。この結果、プロセッサ10dは、各演算の右シフトを実行しても別々の物理レジスタへアクセスすることになるので、右シフトの依存関係を解消することができる。さらに、プロセッサ10dは、論理レジスタの使用量を削減することもできる。
【0054】
なお、図11に示したアセンブリコードのループ処理は、アドレス更新とループ回数の更新であり、ベクターとは異なるスカラーパイプラインを用いるので、並列実行が可能である。例えば、アドレス更新の一例は、「Add a1,a1,t2」、「Add a2,a2,t2」、「Add a3,a3,t2」、「Add a4,a4,t2」、「Add a5,a5,t2」、「Add a6,a6,t2」などである。ループ回数の更新は、「Sub t0,t0,4」、「Add t1,t1,1」である。
【0055】
(処理の流れ)
図12は、実施例1におけるリネーム処理の流れを説明するフローチャートである。図12に示すように、プロセッサ10dは、本機能がONであり(S101:Yes)、プログラムカウンタ(PC)が設定範囲であり(S102:Yes)、論理レジスタが予め指定したv0である場合に(S103:Yes)、ビット位置情報を付与する図10から図11で説明したリネーム処理を実行する(S104)。その後、プロセッサ10dは、改良型のリネーム処理を実行しつつ、演算処理を実行する。
【0056】
一方、プロセッサ10dは、本機能がONではなく(S101:No)、プログラムカウンタPCが設定範囲ではなく(S102:No)、または、論理レジスタが予め指定したv0ではない場合に(S103:No)、図8から図9で説明した通常のリネーム処理を実行する(S105)。その後は、プロセッサ10dは、通常のリネーム処理を実行しつつ、演算処理を実行する。
【0057】
すなわち、プロセッサ10dは、実施例1による機能をON、OFFの設定を可能とし、特定のループ内でのみ動作するよう適用範囲をPC(プログラムカウンタ)で指定可能とする。また、プロセッサ10dは、展開をするレジスタをv0のみとし、上記条件を満たした場合のみ、上述した展開とビット位置情報の追加を行う。
【0058】
図13は、実施例1における解放処理の流れを説明するフローチャートである。図13に示すように、プロセッサ10dは、物理レジスタが解放条件を満たし(S201:Yes)、論理レジスタがv0であり(S202:Yes)、全ビットが解放条件を満たした場合(S203:Yes)、リネーマーに使用した物理レジスタを解放する(S204)。その後、プロセッサ10dは、リネーマーに使用したすべての物理レジスタについて解放が終了すると(S205:Yes)、解放処理を終了し、未解放の物理レジスタが存在すると(S205:No)、S201以降を繰り返す。
【0059】
すなわち、プロセッサ10dは、割り当てられた物理レジスタが通常技術どおり役目を終えた時点で解放する。実施例1では、プロセッサ10dは、通常の解放判定に加えて、マスク情報が割り当てられた物理レジスタが通常の解放条件を満たしたか否かの追加判定を実行する。例えば、プロセッサ10dは、解放対象がv0の場合、実施例1によるリネームが適用されている可能性があるためさらに詳細を確認する。具体的には、プロセッサ10dは、v0の情報が複数の物理レジスタに展開されているため、それらがすべて解放可能かをビット位置情報で判断する。プロセッサ10dは、論理レジスタv0に紐づけられた物理レジスタのうちビット位置情報を持つものすべてが解放可能であれば解放する。
【0060】
図14は、解放処理における解放判定を説明する図である。図14の上図は、実施例1によるリネーム処理が実行されたRMT12bを示しており、マスクレジスタv0のマスク情報がpv20、pv21に展開されている状態である。ここで、pv20は、0ビット右シフトされたマスク情報であり、pv21は、1ビット右シフトされたマスク情報である。
【0061】
その後、プロセッサ10dは、図14の下図に示すように、pv20のマスク情報がすでに演算を終えて解放可能となったが、pv21のマスク情報がまだ演算を終えていない場合、解放不可と判定する。すなわち、プロセッサ10dは、最後のマスク演算が行われるまでこれらの解放を抑制する。
【0062】
(効果)
上述したように、プロセッサ10dは、論理レジスタよりも容量の多い物理レジスタを用いて疎行列の並列演算を実行することができる。プロセッサ10dは、マスク演算に用いるマスクレジスタのリネームを実行する際に、物理レジスタへのリネームを実行することができる。プロセッサ10dは、物理レジスタへのリネームを実行する際に、複数の物理レジスタに、マスクレジスタの各マスクビットを分散させて展開することができる。この結果、プロセッサ10dは、マスクパターンの入れ替えに伴う右シフトの依存関係を解消しつつ、不要な論理レジスタの使用を抑制できるので、右シフトの依存関係の解消と、論理レジスタの使用量の削減とを両立することができる。
【0063】
プロセッサ10dは、マスク演算で使用した各物理レジスタの使用が完了してから、物理ジスタを解放するので、物理レジスタが演算途中で解放されることを抑制でき、演算の不具合発生や再リネームなどの不要な処理を削減できる。
【実施例0064】
(数値等)
上記実施例で用いた各レジスタの番号、マスクパターン、マスクビット、演算、ループ処理など等は、あくまで一例であり、任意に変更することができる。また、各フローチャートで説明した処理の流れも矛盾のない範囲内で適宜変更することができる。なお、プロセッサ10dは、例えばCPU(Central Processing Unit)やMPU(Micro Processor Unit)などである。
【0065】
(システム)
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0066】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0067】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0068】
(ハードウェア)
図15は、ハードウェア構成例を説明する図である。図15に示すように、情報処理装置10は、通信装置10a、HDD(Hard Disk Drive)10b、メモリ10c、プロセッサ10dを有する。また、図15に示した各部は、バス等で相互に接続される。
【0069】
通信装置10aは、ネットワークインタフェースカードなどであり、他の装置との通信を行う。HDD10bは、図1に示した機能を動作させるプログラムやDBを記憶する。
【0070】
プロセッサ10dは、図1に示した各処理部と同様の処理を実行するプログラムをHDD10b等から読み出してメモリ10cに展開することで、図1等で説明した各機能を実行するプロセスを動作させる。例えば、このプロセスは、情報処理装置10が有する各処理部と同様の機能を実行する。具体的には、プロセッサ10dは、リネーマー12と同様の機能を有するプログラムをHDD10b等から読み出す。そして、プロセッサ10dは、リネーマー12と同様の処理を実行するプロセスを実行する。
【0071】
このように、情報処理装置10は、プログラムを読み出して実行することで情報処理方法を実行する情報処理装置として動作する。また、情報処理装置10は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、情報処理装置10によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、上記実施例が同様に適用されてもよい。
【0072】
このプログラムは、インターネットなどのネットワークを介して配布されてもよい。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD-ROM、MO(Magneto-Optical disk)、DVD(Digital Versatile Disc)などのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行されてもよい。
【符号の説明】
【0073】
10 情報処理装置
10d プロセッサ
11 命令処理部
12 リネーマー
12a フリーリフト
12b RMT
12c リネーマー制御部
13 発送部
14 命令ウィンドウ
15 演算回路
16 レジスタファイル
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15