(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022143544
(43)【公開日】2022-10-03
(54)【発明の名称】演算処理装置
(51)【国際特許分類】
G06F 9/38 20060101AFI20220926BHJP
【FI】
G06F9/38 370X
G06F9/38 310E
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021044100
(22)【出願日】2021-03-17
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(71)【出願人】
【識別番号】504202472
【氏名又は名称】大学共同利用機関法人情報・システム研究機構
(74)【代理人】
【識別番号】100092978
【弁理士】
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】五島 正裕
(72)【発明者】
【氏名】葛 毅
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013AA11
5B013AA18
5B013CC10
5B013DD01
5B013DD02
5B013DD06
(57)【要約】
【課題】あるセクションでバンク衝突やキャッシュミスなどの処理を継続できない事象が発生した場合でも、パイプラインストールや要素演算のキャンセルを回避し処理速度の低下を抑える。
【解決手段】命令の要素演算を毎サイクル高々1つ処理する1以上のレーンと、1以上のレーンに要素演算を発行する要素演算発行ユニット100と、を備え、全体は複数のエントリを持つバッファ101,103,104によって複数のセクションへと分離され、要素演算の処理を継続できなくなった1以上のセクションは処理を停止する一方、他のセクションは、下流のセクションへと進む要素演算を直後のバッファに格納して、処理を継続する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
命令の要素演算を毎サイクル高々1つ処理する1以上のレーンと、
前記1以上のレーンに要素演算を発行する要素演算発行ユニットと、
を備え、
全体は複数のエントリを持つバッファによって複数のセクションへと分離され、
要素演算の処理を継続できなくなった1以上のセクションは処理を停止する一方、
他のセクションは、下流のセクションのそれぞれへと進む要素演算を直後のバッファに格納して、処理を継続する、
演算処理装置。
【請求項2】
前記要素演算発行ユニットは、前記1以上のセクションの停止が発生しないと仮定した場合に、レジスタファイル又はバイパスによってデータの受け渡しが可能なタイミングで依存関係にある要素演算を発行する、
請求項1に記載の演算処理装置。
【請求項3】
前記バッファは、First In-First Out(FIFO)方式であり、前記1以上のレーンのそれぞれの中での要素演算の追い越しをさせない、
請求項1又は2に記載の演算処理装置。
【請求項4】
要素演算を実行する実行ユニットよりも上流に位置するバッファもしくはパイプラインレジスタのエントリの全部又は一部は、ソースオペランドをバイパスから受信する機能を有し、
要素演算を実行する実行ユニットの直前に位置するバッファは、実行に必要なソースオペランドが揃うまで要素演算を留めおく、
請求項1~3のいずれか1項に記載の演算処理装置。
【請求項5】
バイパスの送信側は実行結果を一意に識別するタグを実行結果に付してバイパスに送出し、バイパスの受信側はタグの一致比較によって実行結果を受け取ることにより、前記セクションの停止によって位置関係が変化した要素演算の間でもバイパスを行うバイパス制御回路を更に備える、
請求項1~4のいずれか1項に記載の演算処理装置。
【請求項6】
バイパスを介して送受信を行う2つの要素演算のそれぞれが前記バッファもしくはパイプラインレジスタのどのエントリにあるかを、前記1以上のセクションの停止に応じて追跡することによって、位置関係が変化した要素演算の間でもバイパスを行うバイパス制御回路を更に備える、
請求項1~4のいずれか1項に記載の演算処理装置。
【請求項7】
前記バイパス制御回路の追跡は、
前記1以上のレーンのソースオペランドとデスティネーションオペランドとの対のそれぞれに対して、送信側及び受信側の要素演算が前記バッファもしくは前記パイプラインレジスタのどのエントリにあるかを行及び列とし、
上流から数えてp番目のエントリに格納されている第1の要素演算と、同じく上流から数えてc番目のエントリに格納される第2の要素演算とが、前記第1の要素演算の前記デスティネーションオペランドと前記第2の要素演算のソースオペランドとを介して依存関係にあり、バイパスを通して実行結果を送受信する場合、c行p列の要素がセットされる行列を用い、
要素演算の発行の際に該当する要素をセットし、
前記1以上のセクションの停止に応じて行方向及び列方向にそれぞれ更新することによって行う、
請求項6に記載の演算処理装置。
【請求項8】
あるエントリへの第1のバイパスを省略しても、下流のエントリにおいて前記第1のバイパス以外のバイパスからソースオペランドを受信できると保証される場合に、前記第1のバイパスが省略される、
請求項1~7のいずれか1項に記載の演算処理装置。
【請求項9】
レジスタファイルと一次データキャッシュとのいずれか又は両方がマルチバンク構成であり、前記マルチバンク構成内におけるバンク衝突を前記セクションの停止の要因の1つとする、
請求項1~8のいずれか1項に記載の演算処理装置。
【請求項10】
前記1以上のレーンの一部又は全部は、Single Instruction/Multiple Data stream(SIMD)命令の要素演算に対応する、
請求項1~9のいずれか1項に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置に関する。
【背景技術】
【0002】
スーパーコンピュータなどを用いる高性能計算分野において、より現実のアプリケーションに近い性能を測るベンチマークとして、High-Performance CG(HPCG)が注目されている。HPCGは、Conjugate Gradient(CG;共役勾配)法のベンチマークである。
【0003】
HPCGの計算は、マルチグリッド前処理付き共役勾配法(MGCG)による連立一次方程式の求解で、疎行列Aの行と密ベクトルxとの内積が計算の8割程度を占める。HPCGは27点ステンシルに基づくため、疎行列Aの1行の非ゼロ要素数は27と非常に少ない。そのため疎行列Aは、通常Compressed Sparse Row(CSR)形式で格納される。
【0004】
この内積における密ベクトルxに対するロードは、疎行列Aの行の26~27の非ゼロ要素に対応する要素を拾い集めることになり、3要素ずつ飛び飛びのアクセスとなる。このような、アドレスのリストを介した間接・不連続のロード/ストアを、ギャザー/スキャッタという。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】Ryota Shioya, Kazuo Horio, Masahiro Goshima, Shuichi Sakai 著、“Register Cache System Not for Latency Reduction Purpose”、Proceedings of the 43rd Annual IEEE/ACM International Symposium on Microarchitecture (MICRO43)、Pages 301-312、2010年12月
【非特許文献2】Junji Yamada, Ushio Jimbo, Ryota Shioya, Masahiro Goshima, Shuichi Sakai著、“Skewed Multistaged Multibanked Register File for Area and Energy Efficiency”、IEICE Transactions on Information and Systems、Vol. E100.D、Issue 4、Pages 822-837、2017年4月
【非特許文献3】Junji Yamada, Ushio Jimbo, Ryota Shioya, Masahiro Goshima, Shuichi Sakai 著、“Bank-Aware Instruction Scheduler for a Multibanked Register File”、IPSJ Journal of Information Processing、Vol. 24、Pages 696-705、2018年9月
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、従来のプロセッサコアはギャザー/スキャッタ処理の効率が悪いため、ギャザー/スキャッタ処理の発生により、処理速度が低下してしまうおそれがある。
【0007】
1つの側面では、バンク衝突やキャッシュミスなどの処理を継続できない事象が発生した場合でも、パイプラインストールや命令のキャンセルを回避し処理速度の低下を抑えることを目的とする。
【課題を解決するための手段】
【0008】
1つの側面では、演算処理装置は、命令の要素演算を毎サイクル高々1つ処理する1以上のレーンと、1以上のレーンに要素演算を発行する要素演算発行ユニットと、を備え、全体は複数のエントリを持つバッファによって複数のセクションへと分離され、要素演算の処理を継続できなくなった1以上のセクションは処理を停止する一方、他のセクションは、下流のセクションのそれぞれへと進む要素演算を直後のバッファに格納することによって、処理を継続する。
【発明の効果】
【0009】
1つの側面では、あるセクションでバンク衝突やキャッシュミスなどの処理を継続できない事象が発生した場合でも、パイプラインストールや要素演算のキャンセルを回避し処理速度の低下を抑えることができる。
【図面の簡単な説明】
【0010】
【
図1】SIMDの連続ロード及びギャザーを説明する図である。
【
図2】SIMDのマルチバンク化された一次データキャッシュにおけるギャザーを説明する図である。
【
図4】コアの基本的な構造を模式的に示すブロック図である。
【
図5】
図6におけるOut-of-Stepバックエンドパイプラインと比較するためのIn-Stepバックエンドパイプラインを模式的に示すブロック図である。
【
図6】実施形態におけるOut-of-Stepバックエンドパイプラインを模式的に示すブロック図である。
【
図7】
図6に示したOut-of-Stepバックエンドパイプラインの効果を説明するためのブロック図である。
【
図8】
図6に示したOut-of-Stepバックエンドパイプラインの効果を説明するためのダイヤグラムである。
【
図9】
図6に示したOut-of-Stepバックエンドパイプラインにおける分散Content-Addressable Memory(CAM)を用いたバイパス制御を説明するための図である。
【
図10】
図6に示したOut-of-Stepバックエンドパイプラインにおける依存行列式バイパス制御及びバイパス位置を説明するためのブロック図である。
【
図11】依存行列生成回路を模式的に示すブロック図である。
【
図12】HPCGの内積部の性能見積を説明するためのグラフである。
【発明を実施するための形態】
【0011】
〔A〕関連例
近年の高性能プロセッサコアの高いピーク性能は、Single Instruction/Multiple Data stream(SIMD)ユニットによって実現されることがある。SIMDでは、v要素を1本のレジスタにパックし、1命令でv個の演算を同時に実行する。これにより、制御ユニットはそのままでも、ピーク性能をv倍にすることができる。例えば、512b SIMDでは、64b(倍精度浮動小数点数)×8として使用した場合、演算性能は8倍となる。
【0012】
SIMDのロード/ストアでは、対象要素がメモリ上で連続する場合には、連続するv要素を一度にアクセスできる。このような連続ロード/ストア性能はv倍となり、演算と同じSIMD効果を発揮することができる。
【0013】
一方、SIMDのロード/ストアの対象要素がメモリ上で不連続の場合には、SIMDの効果を発揮することができない。アドレスのリストを介した間接・不連続のロード/ストアを、ギャザー/スキャッタという。ギャザー/スキャッタでは、連続するv要素にアクセスしてもそのv要素すべてが使用できることは稀であり、ギャザー/スキャッタの性能はv倍よりもはるかに低い。
【0014】
図1は、SIMDの連続ロード及びギャザーを説明する図である。
【0015】
符号A11~A14に示す連続ロード処理では、符号A11に示すように、一次データキャッシュ上で連続したアドレスに格納された4要素を読み出す。そこで、符号A12に示すように、1つのアクセス単位[1] によって4要素を含むブロックが読み出される。そして、符号A13に示すように4要素のSIMD幅であるレジスタファイルに4要素が書き込まれ、符号A14に示すようにレジスタファイルに書き込まれた4要素が実行ユニットによって使用される。
【0016】
符号A21~A24に示すギャザー処理では、符号A21に示すように、一次データキャッシュ上で不連続のアドレスに格納された要素を読み出す。この場合、4要素を一度に読み出すことはできず、符号A22に示すように、アクセス単位[1]~[4] によって4要素を含む4ブロックを読み出す必要がある。そして、符号A23に示すようにシフタを介してレジスタファイルに4要素が書き込まれ、符号A24に示すようにレジスタファイルに書き込まれた4要素が実行ユニットによって使用される。
【0017】
任意のアドレスのv要素にアクセスできるマルチポートメモリは、面積及びエネルギーがv2に比例して増大してしまう。そのため、ギャザー/スキャッタ性能も演算性能と同じくv倍にするためには、疑似マルチポート化としてのマルチバンク化を行うことが想定される。
【0018】
図2は、SIMDのマルチバンク化された一次データキャッシュにおけるギャザーを説明する図である。
【0019】
符号A31~A34に示すギャザー処理では、符号A31に示すように、一次データキャッシュが#0~#3の4バンクに分割されている。アドレスが不連続であっても、各バンク#0~#3のそれぞれから最大4要素を同時に読み出すことができる。符号A32に示すように、1つのアクセス単位[1] によって一度に4要素を読み出すことができる。そして、符号A33に示すように、シフタではなくスイッチを介して、レジスタファイルに4要素が書き込まれる。その後、符号A34に示すようにレジスタファイルに書き込まれた4要素が実行ユニットによって使用される。
【0020】
しかし、符号A41においては、2要素がバンク#2に格納されており、バンク衝突(別言すれば、バンク競合)が発生している。この2要素を同時に読み出すことはできず、処理速度が低下するおそれがある。
【0021】
【0022】
バンク衝突の確率は、アクセスされるバンクがランダムである場合、次の数式(1)によって表される。なお、bはバンク数であり、vは要素数である。
【0023】
【数1】
図3に示すグラフにおいて、横軸はバンク数を表し、縦軸は確率を表す。破線はv=8の場合の、実線はv=16の場合のバンク衝突の確率を表す。
【0024】
例えば、要素数v=16に対して、2倍の数のバンク数32を用意した場合には、P(32,16)=99.0%の確率でバンク衝突が発生する。衝突確率を十分に低くするためには、数百~数千のバンクが必要であり、非現実的である。
【0025】
〔B〕実施形態
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0026】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
【0027】
〔B-1〕前提条件
図4は、コアの基本的な構造を模式的に示すブロック図である。
【0028】
符号B1~B3に示すフロントエンドパイプラインは、例えば2つのレーン#A,#Bを有し、命令をフェッチして、micro-Operation(μOP;マイクロオップ)を要素演算発行ユニットに供給する。具体的には、符号B1に示す命令キャッシュから命令フェッチを行い、符号B2に示すリネームロジックでリネーム(別言すれば、命令解析)を行い、μOPを生成する。そして、符号B3において、生成されたμOPを要素演算発行ユニットに格納する。
【0029】
命令は、Instruction Set Architecture(ISA;命令セットアーキテクチャ)で定義され、主記憶装置上のバイナリコード中から命令キャッシュ上までキャッシュされ、マシンではフェッチの対象となる。
【0030】
μOPは、x86やSVEなどにある複雑な命令を、複数の簡単な処理に分解した単位である。μOPは、コア内でフェッチされた命令から変換され、スケジューリングの対象となる。SIMD命令からは、SIMD μOPが生成される。なお、μOPを用いないコアでは、1命令に対してそれと等価なμOPが1つ生成されると解してよい。
【0031】
符号B4に示す要素演算発行ユニットは、μOPをスケジュールし、適切なタイミングで要素演算をバックエンドパイプラインに投入する。バックエンドパイプラインに投入することを発行と言う。
【0032】
符号B5~B9に示すバックエンドパイプラインは、例えば3つのレーン#1~#3を有し、発行された要素演算を処理する。具体的には、符号B5に示す各レーン#1~#3で要素演算の発行を行い、符号B6に示す各レーンでレジスタファイルの読み出しを行い、符号B7に示す各レーン#1~#3の実行ユニットで要素演算の実行を行い、符号B8に示すレーン#3の実行ユニットで要素演算の実行を行い、符号B9に示す各レーン#1~#3でレジスタファイルへの書き戻しを行う。
【0033】
要素演算は、バックエンドパイプラインのレーンの処理の単位である。SIMDの場合には、1つのμOPがレーンの幅の要素演算を複数持つ。SIMDではないスカラの場合には、1つのμOPがそれと等価な要素演算を1つ持つと解してよい。バックエンドパイプラインの1つのレーンに対して、毎サイクル高々1つの要素演算が発行され、1つのレーンは命令の要素演算を毎サイクル高々1つパイプライン処理する。また、1つの要素演算が再びSIMD型であってもよく、例えば64bレーンの場合には16b×4などのSIMD型要素演算を処理してよい。
【0034】
〔B-2〕Out-of-Stepバックエンドパイプライン
図5は、
図6におけるOut-of-Stepバックエンドパイプライン1と比較するためのIn-Stepバックエンドパイプライン2を模式的に示すブロック図である。
【0035】
In-Stepバックエンドパイプライン2では、符号C8に示されるように、論理的には全レーンにまたがるパイプラインレジスタによって連続する複数のステージに分割されている。そのため、In-Stepバックエンドパイプライン2は、全体がv個の要素演算を並列に処理する1本のパイプラインであり、バックエンドパイプライン全体が進むか止まるかのいずれかとなる。その結果、要素演算の空間・時間的位置関係は、発行される際に決められたまま変更されることがない。
【0036】
1以上のレーンの一部又は全部は、SIMD命令の演算に対応してよい。
図5に示す例では、レーン#1,#2がスカラ構成であり、レーン#3,#4がSIMD構成である。符号C1に示すように、要素演算発行ユニットから、レーン#1,#2に対してそれぞれ異なるμOPから生成された要素演算が発行されると共に、レーン#3,#4に対しては1つのμOPから生成された2つの要素演算が発行される。
【0037】
符号C2,C3に示すように、レーン#1~#4でレジスタ読み出しが2ステージにわたって行われる。
【0038】
符号C4に示すように、レーン#1,#2ではそれぞれ異なる実行ユニットで要素演算が実行されると共に、レーン#3,#4ではSIMD実行ユニットで要素演算が実行される。符号C5に示すように、レーン#2で演算が行われると共に、レーン#3,#4ではSIMD実行ユニットで要素演算が実行される。
【0039】
そして、符号C6,C7に示すように、レーン#1~#4でレジスタ書き戻しが2ステージにわたって行われる。
【0040】
バックエンドパイプラインでは、キャッシュミスやバンク衝突等、要素演算の処理を継続できない事象が発生することがある。キャッシュミスやバンク衝突等への対処が終わるまで、該当の要素演算は次段の処理に進むことができない。
【0041】
In-Stepバックエンドパイプライン2では、キャッシュミスやバンク衝突等、要素演算の処理を継続できない事象が発生した場合でも、既に発行された要素演算間の空間・時間的位置関係を変更しない。
【0042】
要素演算の処理を継続できない事象の発生時にパイプライン全体を停止させることをパイプラインストールという。パイプラインストールでは、ストールの前後で、要素演算間の位置関係はそのままに保たれる。
【0043】
一方、該当の要素演算とそれに依存する要素演算、もしくは、該当の要素演算と後続のすべての要素演算とをキャンセルし、再発行、すなわち、発行からやり直す方法もある。この場合、キャンセルされなかった要素演算の位置関係はそのままに保たれる一方、キャンセル・再発行された要素演算間の位置関係はゼロから再構築されることになる。この場合も、既に発行された要素演算間の位置関係が変更されるのではない。
【0044】
パイプラインストール及び要素演算のキャンセルのいずれの場合でも、キャッシュミスやバンク衝突等が1つでも発生すれば、多くの要素演算に影響が及ぶ。コアの規模が大きいほど、影響は相対的に大きくなる。
【0045】
図6は、実施形態におけるOut-of-Stepバックエンドパイプライン1を模式的に示すブロック図である。
【0046】
Out-of-Stepは、In-Stepの否定・補集合となる。Out-of-Stepバックエンドパイプライン1(別言すれば、演算処理装置)において、要素演算は、発行された際の空間・時間的位置関係を守らない。
【0047】
1以上のレーンの一部又は全部は、SIMD命令の演算に対応してよい。
図6に示す例では、
図5に示したIn-Stepバックエンドパイプライン2と同様に、レーン#1,#2がスカラ構成であり、レーン#3,#4がSIMD構成である。符号D1に示すように、要素演算発行ユニット100から、レーン#1,#2に対してそれぞれ異なるμOPから生成された要素演算が発行されると共に、レーン#3,#4に対しては1つのμOPから生成された2つの要素演算が発行される。発行された要素演算は、それぞれバッファ101に格納される。
【0048】
符号D2,D3に示すように、レーン#1~#4でレジスタ読み出しが2ステージにわたって行われる。レジスタ読み出し結果は、実行ユニットの直前のバッファ103に格納される。
【0049】
符号D4に示すように、レーン#1,#2ではそれぞれ異なるスカラ実行ユニットで要素演算が実行されると共に、レーン#3,#4ではSIMD実行ユニットで要素演算が実行される。符号D5に示すように、レーン#2ではスカラ実行ユニットで要素演算が実行されると共に、レーン#3,#4ではSIMD実行ユニットで要素演算が実行される。要素演算の実行結果は、レジスタ書き戻しの直前のバッファ104に格納される。
【0050】
そして、符号D6,D7に示すように、レーン#1~#4でレジスタ書き戻しが2ステージにわたって行われる。
【0051】
Out-of-Stepバックエンドパイプライン1において、要素演算発行ユニット100は、In-Stepバックエンドパイプライン2と同じでよく、要素演算の処理を継続できなくなる事象が発生しないと仮定した場合に、レジスタファイル又はバイパスによってデータの受け渡しが可能なタイミングで、依存関係にある要素演算を発行してよい。一方、Out-of-Stepバックエンドパイプライン1の各レーンは、要素演算発行ユニット100によって発行された際の要素演算の位置関係を任意に変更して正しく処理する。
【0052】
図6のOut-of-Stepバックエンドパイプライン1におけるステージ境界としてのバッファ101,103,104は、単一エントリのパイプラインレジスタではなく、複数エントリからなるバッファである。
【0053】
全体は、バッファ101,103,104によって、複数のセクションへと分離される。
【0054】
あるセクションにキャッシュミスやバンク衝突等により処理を継続できない要素演算がある場合には、該当のセクションは処理を停止する。これを、セクションストールと呼ぶ。一方、バッファを隔てた上流のセクションは処理を継続することができる。上流のセクションの処理を終えて、ストールするセクションへと進む要素演算があれば、それを間のバッファに格納すればよい。
図5に示したIn-Stepバックエンドパイプライン2では、このバッファが単一エントリのパイプラインレジスタ(符号C8参照)であるため、仮に上流が停止しなければ、要素演算の書き潰しが起こる。すなわち、Out-of-Stepバックエンドパイプライン1では、各セクションが独立にストールすることができる。Out-of-Stepバックエンドパイプライン1におけるパイプラインレジスタ102は、In-Stepバックエンドパイプライン2の符号C8におけるパイプラインレジスタとは異なり、全レーンにまたがるのではなく、セクションごとに独立に動作する。
【0055】
セクションへの分離は、レーン境界に縛られない。例えば、バッファ101の読み出しとバッファ103の書き込みは、2つあるソースオペランドごとにできるため、レジスタ読み出しのセクションはレーンごとに2つになり、2つのソースオペランド読み出しが同時に行われないことを許す。一方、バッファ104の読み出しはレーン#3とレーン#4とで同時に行われ、レーン#3とレーン#4とのレジスタ書き戻しのセクションはレーン#3とレーン#4とにまたがっている。
【0056】
Out-of-Stepバックエンドパイプライン1におけるバッファ101,103,104は、First In-First Out(FIFO)バッファであってよく、その場合、レーン内では要素演算の追い越しは起こらない。
【0057】
すなわち、Out-of-Stepバックエンドパイプライン1は、命令の要素演算を毎サイクル高々1つの処理する1以上のレーンと、1以上のレーンに要素演算を発行する要素演算発行ユニット100とを備える。全体はバッファ101,103,104によって、複数のセクションへと分離される。要素演算の処理を継続できなくなった1以上のセクションは処理を停止する一方、他のセクションは、下流のセクションのそれぞれへと進む要素演算を直後のバッファへと格納して、要素演算の処理を継続する。
【0058】
レジスタファイルと一次データキャッシュとのいずれか又は両方がマルチバンク構成であり、マルチバンク構成内におけるバンク衝突が要素演算の処理を継続できなくなる要因の1つとされてよい。
【0059】
Out-of-Stepバックエンドパイプライン1においては、要素演算発行ユニット100によるスケジューリングの結果を遅延させるだけであるため、ハードウェアコストを極小に抑えることができる。
【0060】
図7は、
図6に示したOut-of-Stepバックエンドパイプライン1の効果を説明するためのブロック図である。
【0061】
符号E1に示すように6つのバンク#1~#6を有するマルチバンク構成の一次データキャッシュを持つOut-of-Stepバックエンドパイプライン1において、アクセスするバンクをランダムに決定する例を、
図7を用いて説明する。
【0062】
各レーン#1~#3のそれぞれに対して、符号E2に示すようにa1~a3の要素演算が発行された後、符号E3に示すようにb1~b3の要素演算が発行された後、符号E4に示すようにc1~c3の要素演算が発行されている。
【0063】
図8は、
図6に示したOut-of-Stepバックエンドパイプライン1の効果を説明するためのダイヤグラムである。各時刻において、発行された要素演算が#1~#6のどのバンクにいるかを示している。
【0064】
符号F11~F15に示すように、In-Stepバックエンドパイプライン2においては、5回のバンク衝突が発生して、全ての要素演算の完了までに14サイクルが消費されている。衝突確率はP(6,3)=0.44あり、性能低下が44%となる。
【0065】
一方、符号F21~F25に示すように、Out-of-Stepバックエンドパイプライン1においては、In-Stepバックエンドパイプライン2と同じく5回のバンク衝突が発生しているものの、全ての要素演算の完了まで10サイクルしか消費しておらず、性能低下はほぼ0となる。衝突確率はIn-Stepバックエンドパイプライン2と同じくP(6,3)=0.44であるが、バンク衝突が発生しても同じサイクルで次の要素演算を処理しているためである。
【0066】
〔B-3〕バイパス制御
Out-of-Stepバックエンドパイプライン1では、セクションストールによる遅れのために位置関係が変わってしまった要素演算間で実行結果を正しくバイパスする。
【0067】
要素演算を実行する実行ユニットよりも上流に位置するバッファおよびパイプラインレジスタのエントリの全部又は一部は、ソースオペランドをバイパスから受信する機能を有してよい。
【0068】
実行ユニットの直前のバッファ103は、遅れてバイパスされた実行結果をソースオペランドとして待ち合わせる二次的な要素演算発行ユニットとして機能する。バッファ103がFIFOであれば、先頭にある要素演算のソースオペランドが揃っていれば、実行ユニットにおいて実行すればよい。
【0069】
図9は、
図6に示したOut-of-Stepバックエンドパイプライン1における分散CAMを用いたバイパス制御を説明するための図である。
【0070】
図9に示すバックエンドパイプラインにおいては、符号J1に示すバイパス元の実行ユニットが、符号J2に示すバイパスラインを介して、符号J3に示すバイパス先の実行ユニットに接続されている。バイパス先の回路では、バイパス制御回路105が、マルチプレクサ(mux)106を制御することにより、バイパス制御を行う。符号J1に示すバイパス元の回路は、実行結果に、それを一意に識別するデスティネーションタグtagDを付して、バイパスラインJ2に送出する。バイパス制御回路105が、流されてきたtagDとソースタグtagLと比較し、一致すれば、マルチプレクサ106がtagDに対応する実行結果を取り込む。符号105と106とは、タグをキーとするCAM(Content-Addressable Memory)を構成している。
【0071】
バイパス制御は、バイパスを介して送受信を行う2つの要素演算のそれぞれがバッファもしくはパイプラインレジスタのどのエントリにあるかを、セクションストールに応じて追跡することによって行ってもよい。
【0072】
そしてセクションストールに応じた追跡は、2つの要素演算間のバイパスを介した送受信の必要性の関係を行列の形で表現した依存行列を用いて行ってよい。
【0073】
図10は、
図6に示したOut-of-Stepバックエンドパイプライン1の依存行列を用いたバイパス制御を説明するためのブロック図である。
【0074】
符号K1に1レーンからなるOut-of-Stepバックエンドパイプライン1のブロック図を示す。符号K1に示すように、レーンを流れる要素演算は、オプコードop-code、ソースオペランドsrc 1及びsrc 2、デスティネーションオペランドdstの各フィールドを有する。符号K1に示すブロック図では、レジスタ読み出し、実行、レジスタ書き戻しのそれぞれが1ステージであり、各々3エントリのバッファによって、各ステージがそれぞれセクションへと分離されている。なお、符号K11は、バイパス可能な期間を1サイクル延長するために実行結果を1サイクルの間とっておくためのパイプラインレジスタを示す。
【0075】
符号K2では、符号K1に示したdstとsrc 1との依存行列を示している。その他に、dstとsrc 2との依存行列がある。
【0076】
符号K2では、横軸(生産者)の上部には、符号K1のブロック図のdstに係わる部分が抜き出され、左に90°回転して描かれている。縦軸(消費者)の右側には、同じく符号K1のブロック図のsrc 1に係わる部分が抜き出されて描かれている。
【0077】
2つの軸の左下が依存行列である。縦軸(消費者)/横軸(生産者)は、消費者/生産者の要素演算の当該レーン内のバッファ及びパイプラインレジスタのエントリを示す。上流から数えてp番目のエントリに格納されている要素演算と、同じく上流から数えてc番目のエントリに格納される要素演算とが、前者のdstと後者のsrc 1とを介して依存関係にあり、バイパスを通して実行結果を送受信する必要がある場合、依存行列のc行p列の要素が“1”にセットされる。
【0078】
あるソースオペランドに対して、それと依存関係にあるデスティネーションオペランドは高々1つなので、ある行においてセットされる要素も高々1つ、すなわち、ワンホットとなる。依存行列は、タグ比較器のアレイである依存行列生成回路によって生成されてよい。
【0079】
図11は、依存行列生成回路を模式的に示すブロック図である。
【0080】
バイパスが必要であることを表す“1”は、
図11に示すような依存行列生成回路によって生成され、依存行列においてレジスタ読み出し前のバッファにあたる行のいずれかのマスに現れる。
【0081】
依存行列は、セクションストールの状況に合わせて、行/列方向同時に、二次元的にシフトされる。その結果、依存関係を表す“1”は、そこにとどまるか、右か右下か下に移動する。
【0082】
生産者が実行ステージを通過するサイクル以降で、バイパスが行われる。その際、各行はバイパスからのマルチプレクサのワンホットの選択入力そのものとなる。
【0083】
In-Stepバックエンドパイプライン2では、生産者と消費者との位置関係が変わらないため、バイパスを行うタイミングの制約が厳しい。
【0084】
一方、Out-of-Stepバックエンドパイプライン1では、バイパスのために生産者と消費者との位置関係を変えることができる。生産者から実行結果を受け取っていない消費者は、実行ユニットの直前のバッファ103で待っているので、そこにバイパスできればよい。
【0085】
また、使用頻度が低いバイパスは省かれてもよい。あるエントリへの第1のバイパスを省略しても、より下流のエントリにおいて第1のバイパス以外のバイパスからソースオペランドを受信できると保証される場合に、第1のバイパスが省略されてよい。
【0086】
図10に示した符号K2の依存行列のマスごとに、バイパスのありなしを設定することができる。依存行列においてバイパスありのマスに“1”があるサイクルにおいてバイパスが行われる。
【0087】
必要なバイパスを必ず受けられるようにするためには、依存行列においてすべての“1”が必ず一つ以上のバイパスありのマスを通過するように、バイパスありのマスを配置すればよい。
【0088】
そしてそのためには、符号K21の右端の列のマスをバイパスありに設定すれば十分である。
【0089】
ただし符号K21の右端の列においてバイパスを受けるということは、依存関係にある2要素演算が必ず2サイクル以上空けて実行されることを意味する。したがって性能上は、符号K2において“a”と“b”もしくは“c”で示したマスにもバイパスがあった方がよい。“a”は依存する2要素演算が連続する2サイクルにback-to-backに実行される場合の位置となる。“b”と“c”とは1サイクル空けて実行される場合の位置である。位置としては“c”の方が柔軟だが、“b”の方が低コストとなる。
【0090】
図11に示すような依存行列生成回路がソースオペランドをバイパスから受け取る必要があると判定した場合には、レジスタへのアクセスは必要ない。したがって、レジスタファイルもマルチバンク化する場合は、依存行列生成回路の判定に従ってレジスタファイルへの無駄なアクセスを省略してよい。
【0091】
〔C〕効果
図12は、HPCGの内積部の性能見積を説明するためのグラフである。
【0092】
図12に示すグラフにおいて、横軸はSIMD幅vを示し、縦軸は性能向上比を示す。なお、バンク数は、アクセス数の2倍の4vとする。符号M1に示す一点鎖線は従来のスーパーコンピュータにおけるHPCGの内積部の性能見積を示し、符号M2に示す破線は従来のスーパーコンピュータにマルチバンク一次データキャッシュを採用した場合のHPCGの内積部の性能見積を示す。また、符号M3に示す実線は、従来のスーパーコンピュータにマルチバンク一次データキャッシュに加えてOut-of-Stepバックエンドパイプライン1を採用した場合のHPCGの内積部の性能見積を示す。
【0093】
符号M1に示す場合では、ギャザー性能は一定のため、SIMD幅vに対して性能向上比は殆ど向上しない。また、符号M2に示す場合では、符号M1に示した場合と比較して2倍程度の性能向上比を得られるが、大きいSIMD幅vに対してはバンク衝突により性能向上比が向上しない。
【0094】
一方、符号M3に示す場合では、大きいSIMD幅vに対しても、線形に性能向上比を向上させることができる。
【0095】
上述した実施形態の一例におけるOut-of-Stepバックエンドパイプライン1によれば、例えば、以下の作用効果を奏することができる。
【0096】
Out-of-Stepバックエンドパイプライン1(別言すれば、演算処理装置)は、命令の要素演算を毎サイクル高々1つ処理する1以上のレーンと、1以上のレーンのそれぞれに毎サイクル高々1つの要素演算を発行する要素演算発行ユニット100と、を備える。全体は、バッファによって複数のセクションへと分離される。要素演算の処理を継続できなくなった1以上のセクションは処理を停止する一方、他のセクションは下流のセクションのそれぞれへと進む要素演算を直後のバッファに格納しつつ動作を継続する。
【0097】
これにより、あるセクションでバンク衝突やキャッシュミスが発生した場合でも、ストールや要素演算のキャンセルを回避し処理速度の低下を抑えることができる。
【0098】
〔D〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【符号の説明】
【0099】
1 :Out-of-Stepバックエンドパイプライン
100 :要素演算発行ユニット
101 :バッファ(レジスタ読み出しの直前)
102 :パイプラインレジスタ
103 :バッファ(実行ユニットの直前、二次の要素演算発行ユニット)
104 :バッファ(レジスタ書き戻しの直前)
105 :バイパス制御回路
106 :マルチプレクサ
2 :In-Stepバックエンドパイプライン