FPGA開発日記

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

Cache Refill/Access Decoupling for Vector Machinesの論文を読む (3. ベンチマークと性能測定)

面白そうな論文があったので読んでみることにした。続き

  • Cache Refill/Access Decoupling for Vector Machines

https://ieeexplore.ieee.org/document/1551005

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com


評価

  • DVM (Decoupled Vector Machine) : 基本的な非結合ベクトルマシン
    • DVMRからリフィル・ユニットを無効にすることで実現
  • DVMR (Decoupled Vector Machine, Refill) : リフィル・アクセス非結合ベクトルマシン
  • DSM (Decoupled Scalar Machine) : 非結合スカラマシン
    • ベクトル・メモリ・アクセスをスカラ要素アクセスに動的に変換し、4つのロードストアユニットと数百のインフライトメモリアクセスを生成するのに十分なデカップリング・リソースを備えたモデルを用意する。

また、スロットリング機構とメモリ・レイテンシのスケーリングを評価する。

6.1 ベンチマーク

  • vvadd-word / vvadd-byte / vvadd-cmplx
    • ベクトル・ベクトルの加算。vvadd-cmplxはインターリーブされた複素数データの読み書きにセグメント・アクセスを使用する。
  • vertex
    • 4要素のセグメント・アクセスを使って、頂点のロードと格納を行う。3次元の頂点を2次元平面に同次座標で投影する。
  • fir
    • 入力要素のベクトルに連続するタップ係数を乗算し、累積する。
    • 有限インパルス応答フィルタ
  • transpose400 / transpose512
    • ストライド・セグメント・ロードと、ユニット・ストライド・ストアを使用して行列転置を実行する
    • 512x512の場合h、ピーク性能を達成するために、512個のリプレイ・キューと256の要素予約バッファリング・レジスタを必要とする。
  • idct
    • 2次元8x8の逆離散コサイン変換を実行する。
    • セグメント・ベクトル・ロード・ストアを使用してブロック行の1次元IDCTを実行する。
    • ユニット・ストライド・アクセスを使用して列の1次元IDCTを実行する
  • rgbyiq / rgbcmyk
    • RGBカラー変換カーネル。
    • 3要素セグメント・アクセスを使用して効率的にアクセスする。
  • hpg
    • 3×3のハイパスフィルタを使った1バイトピクセルの2次元グレースケール畳み込み
    • 各出力ピクセルは9つの入力ピクセルの関数であるが、カーネルは各入力ピクセルを3回ロードするように最適化されている
    • 連続する出力行を生成する際に、中間入力行の計算をレジスタに保持する。
  • fft
    • 高速フーリエ変換
    • ユニットストライド・ロードとインデックスド・ストアを使用して、最初のビット反転を実行する。
  • rotate
    • 2値画像を90度回転させる。
    • 8ビット×8ビットのブロック回転をレジスタに供給するために8つのユニットストライド・バイト・ロードを使用する
    • 次にブロックを出力するために8つのストライド・バイト・ストアを使用する。
  • dither
    • グレイスケールのバイトピクセルを入力とし、2値画像を出力するFloyd-Steinbergディザリングを行う。
    • ストライド・バイト・アクセスを使用して入力画像をロードする
    • インデックス付きロードとストアを使用してビットパックされた出力画像をリード・モディファイ・ライトする。
  • vvadd-byte / firは1サイクルあたり4つのロードエレメントの要素に近づく
  • vertex / fir / rgbyiq, hpgは1サイクル当たり4つの乗算の限界に近づく
  • 入力データは32kBのキャッシュよりも大きくなるように選択されている
  • fir / dither / fftは、キャッシュの効果により帯域幅を増幅させることができている。
    • ライトスルーのストアポリシ
    • ストアのライトバックマージのための空間的・時間的局所性が不十分なため、メモリ帯域幅が大きくなっている。

6.2 予約要素のバッファリングとアクセス管理状態

Figure.5 は、

  • 線の種類
    • DVMR : 固定線
    • DVM : ダッシュ線
    • DSM : ドット線
    • 丸付きの線は、Segmentedアクセスをストライドアクセスに変換したもの
  • キャッシュはLRU置換
  • DVMR距離スロットリング:32個の距離セットを使用し、それぞれは24の距離に制限

  • (a): VLDQによって提供されるバッファリングの数

    • x軸はVLDQの数:y軸は理想性能に対する相対性能
    • DVMRマシンは、予約の必要なエレメントのバッファリングおよび管理リソースを大幅に削減
    • かつ、常にピーク性能を達成することができる。
    • 全てのマシンは、多くのインフライト・キャッシュ・ラインを追跡するためにプライマリ・タグを使用する。
    • しかし、これらのミスを発生させるために、DVMとDSMは10~100個のリプレイキューとReserved Element Bufferingが必要である。
    • DVMRは、デマンド・アクセスがキャッシュ内でヒットするようにリフィル・リクエストを切り離すことで、これらの必要性を軽減している。
図は本論文より引用
  • (b): 1次タグミスの数
    • 100サイクルのメモリ・レイテンシでは、vvadd-wordでは5.33B/cycleのピーク付加帯域幅を提供するためには、533Bのインフライト・ロード・データを維持しなければならない。
      • 17個のキャッシュ・ラインに相当する
      • 以下のグラフでは32個のプライマリ・ミスタグでピーク性能に達する
    • DVMでは、各キャッシュのアクセスで4つのワード・エレメントに相当するため、1つのプライマリ・ミスタグにつき2つのリプレイ・キューエントリが必要となる。
      • さらに、256個のVLDQレジスタが必要となる
      • 一方、DVMRはVLDQ予約を必要とせず、リプレイ・キューも必要としない
    • それでも、メモリ帯域は飽和できない。
      • 各キャッシュミスがレーンへのライトバック帯域幅を1サイクル無駄にする
      • スカラ・ロードとストアを発行する際にレーンがバンク競合を起こす
図は本論文より引用
  • (c): リプレイ・キューエントリの数
図は本論文より引用

6.3 リフィル距離の調整

  • つまり、スロットリングの調整
    • メモリレイテンシを400サイクルに固定
  • Vector-CmdQの大きさを変化させる
    • VRUによるスロットリングはなしとする
    • 1024にすると命令の流しすぎ、プリフェッチするデータを使う前にEvictされる
    • 64くらいがちょうどいい
  • Total Distanceを変化させる
    • つまり、VRUによりどれだけプリフェッチを出せるか
    • Vector-CmdQを1024にする
    • つまりベクトル命令は大量に発行できる状態で、VRUによるスロットリングの効果を見る
    • 768キャッシュライン(キャッシュの75%)、100キャッシュライン (メモリのBandwidth x Delay)に制限するとちょうどいい
    • 24は少なすぎ
図は本論文より引用