FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

MICRO 2021の論文を読む (Software Defined Vector (1))

MICRO 2021 の論文が Free Access になっているので、興味のあるものを読んでいくことにした。 最初はSoftware-Defined Vector から。読んでいると、これは中規模なDynamically Reconfigurable Processorな気がしてきた。タイルの規模が大きいけど、やりたいことは一緒だな。

https://dl.acm.org/doi/10.1145/3466752.3480099

www.microarch.org


メニーコアファブリックでのsoftware-Defined ベクトル処理

1. イントロダクション

MIMD並列に対してはタイル型メニーコアプロセッサが有効であり、SIMD並列に対してはベクトルプロセッサが有効である。これらには長所短所がある。

一般的にワークロードはどちらに対しても傾向する事は無いため、両方の処理に対応できている必要がある。GPGPUはランタイムモニタリングを使用して不規則性に対応しており、さらにタイル内にSIMDユニットを追加することでベクトル処理に対応している。それらについては規則的な並列処理と不規則な並列処理の間のトレードオフ空間の特定の回路のポイントに「焼き付ける」ものであり,スペクトルの他のポイントの利用率が低いという問題がある。

ベクトルマシンを効率的に構成することのできるメニーコア・アーキテクチャを提案する。このアーキテクチャは、実行時にベクトルエンジンを構成するために柔軟な構成をサポートしている。Software-Defined Vectorはメニーコアファブリックを分割して、独立したプロセッサとしても、あるいは大規模なベクトルマシンとしても使用することができる。

図1はSoftware-Defined Vectorを搭載したタイル型マシンのSoftware観点からの見取り図である。ベクトルグループに応じてタイルをロックステップで実行するグループにまとめ、そのタイルはプロセッサのフロントエンドを無効にすることができる。1つのタイルはメモリアクセスを行う1つのスカラコアと複数のベクトルコアで構成されている。

ベクトルマシンのメリット:

  • 計算密度:一般的なSIMD型プロセッサに比べてSoftware-Defined Vectorは計算密度はそれほど高くない。
  • 広域メモリアクセスの合体:メモリアクセスのオーバヘッドを償却できる(?)
  • 制御コストの償却:制御コストのオーバヘッドを償却できる(?)

既存のRISC-Vメニーコアプロセッサに最小限の変更を加えたプロセッサ"Rockcress"においてSoftware-Defined Vectorを実装した。ここで重要になるのは命令転送ネットワーク(inet)で、ベクトルコアは実行する各命令wベクトルグループ内の隣接するコアに直接転送する。命令を隣のコアに次々と転送することになる。最初に命令をフェッチするのはエキスパンダーコアと呼ばれる最初のコアのみで、それ以外のコアは命令キャッシュとフェッチ論理を無効にする。

Rockcressはベクトルグループの稼働率を上げるために、ベクトルグループの代わりにメモリリクエストを発行し共有計算を行うために独立して制御されるスカラ―コアに依存している。

改めてRockcressのベクトルグループの利点:

  1. ワードサイズのロードをワイド・ベクトルロードに集約することで、パフォーマンスとエネルギーを節約できる。
  2. ベクトルコアのフロントエンドや命令きょっしゅを使用しないことにより、エネルギーの削減
  3. スカラ演算とデータアクセスをベクトル演算とオーバラップさせ、アクセスと実行を切り離すことによる性能の向上

PolyBench/GPUスイート[10]に含まれる15種類のベンチマークにおいて,ソフトウェア定義ベクターは,メモリレベル並列処理(MLP)を利用して最適化されたメニーコアベースラインと比較して,平均1.7倍の性能向上を実現しています.また,この方式では,動的エネルギーの合計を22%削減することができました.さらに、メニーコアのメモリと実行リソースに合わせて構成されたGPUモデルとの比較も行いました。Rockcressは平均で1.9倍もGPUを上回る性能を発揮しました。

2. Software-Defined Vector

Software-Defined Vector ISAについて、プログラマーの視点から説明します。その目的は,標準的なメニーコアマシンの一部を確保することで,ソフトウェアが柔軟なサイズのベクトルユニットを動的に形成できるようにすることです.ISAは、セクション3の具体的なハードウェア実装を抽象化したものです。主な構成要素は、ベクトルグループの形成(2.1節)、ベクトル化された計算のマイクロスレッドの実行(2.2節)、ベクトル化されたメモリアクセスの供給(2.3節)の3つです。ここでは、RISC-V [34]の拡張機能としてISAを説明していますが、原理はあらゆるRISCライクなマシンに適用できます。

2.1 ベクトルグループ

Software-Defined Vector ISAにおいて最初に必要なコトは、ベクトルグループを作成する命令の準備である。ベクトルグループはメニーコアファブリックにおけるタイルの連続した領域のことで、SIMD計算を実行できるように論理的に結合されている。

ベクトルグループの形成のためには、各コアには特殊な制御・ステータスレジスタを用意しており、vconfigレジスタを搭載している。このレジスタにビットマスクを書き込む。

ベクトルグループが形成させると、各コアはグループ内での識別子としてスレッドIDが決定される。コアは隣接するコアがベクトルモードに入ったことを示す信号を待ってから命令の転送を開始する。

ベクトルグループを解放して通常のコアに戻るためには、最新のPCと制御信号を受け取る必要がある。このためにはdevicec命令を送信することでベクトル命令を解放することができる。これによりvconfig CSRを解放する。

2.2 ベクトル計算

スカラコアはvissue命令を使用してグループ内のベクトルコアを起動する。

vissue imm

immはマイクロスレッドの下位視点を示す命令ポインタである。この命令がコミットされる時点で、スカラコアが開始PCをinet経由でベクトルグループに送信する。vissueは非同期のためベクトル命令の完了を待たずにすぐにリタイアする。

グループ内のエキスパンダーコアは、マイクロスレッドの命令をフェッチし、その命令をinet経由で転送する。ベクトルグループ内のすべての命令が単一命令ストリームを共有する。マイクロスレッド内では、関数コールに関する制御命令のみが分岐として使用できる。