面白そうな論文があったので読んでみることにした。続き
- Cache Refill/Access Decoupling for Vector Machines
https://ieeexplore.ieee.org/document/1551005
- 5.1 "SCALE" Decoupled Vector Processor
- VEUはクラスタ化
- 4バンク・4クラスタ
- 手順
- Control Procにより、ベクトルユニットにコマンドを発行する
- ベクトル・フェッチ・コマンド:VEUに発行
- ベクトル・ロード / ベクトル・ストアコマンド
- ピーク時はレーン当たり
- 4つのクラスタ演算
- 1つのロード・1つのストア
- クラスタ0はIndexedロード・ストア用
- LDQとSAQを持っている
- VLUとVSUは1度に1つのベクトル・コマンドを処理する
- Unit-Stride Address Generator
- Segment Address Generator
- 最大4エレメントのサブブロックに分割
- Unit Stride Load
- 最大4エレメントのサブブロックに分割
- 各キャッシュ・アクセスに対してレーン間でVLDQを管理する
- アクセスが戻った時に、並列にデータ要素をVLDQに書き込む
- VEUはクラスタ化
- Segment Load
- VLUはセグメント・アクセス毎に 各レーンに複数のVLDQを割り当てる
- キャッシュから読みだされた後に、キャッシュバンク毎に存在するLoad Segment Bufferに書き込まれる
- Unit Stride Store
- ユニット・ストライド・ストア・データを並列にキャッシュに送る
- Segment Store Data
- キャッシュバンクの隣にあるレーン毎のバッファに1サイクル当たり1要素で書き込まれる
- その後、1回のアクセスでキャッシュに書き戻される
- 5.2 "SCALE" ノンブロッキング・キャッシュ
- 容量は32kB
- 4バンクで構成
- MSHRにより、プライマリ・ミスおよびセカンダリ・ミスを管理する
- MSHRからMemQにリクエストが渡され、外部メモリにリクエストが送信される
- メモリのデータが返ってくると、直ちにキャッシュに書き込む
- 5.3 "SCALE" Vector Refill Unit
- VRUはリプレイ・キューを使用しないため、バンクへのアクセスをブロックしない
- Unit-strideモード
- キャッシュライン数を計算し、全キャッシュラインをカバーするようにリフィル・リクエストを送信
- Stridedモード
- ストライドを計算し、繰り返しリフィルを発行
- VLUとVRUが干渉しない仕組み
- VRUが十分先に実行されることが理想だが、メモリ帯域幅が制限されてVLUがVRUに追いついた場合は、VLU側がスロットルされる
- VLUのほうがアドレスジェネレータが多いため、Segment/Stridedのアドレス生成はVRUより速い。VLUのほうがコマンドが早い場合、VRUはリフィルを中止する
- VRUは先行してリフィルを実行するが、プライマリミスの使いつくしを防ぐために、1∼2つタグを残す
- VLUによるキャッシュラインの追い出しを防ぐために、VRUは距離に基づいてスロットルする
- インフライトされているメモリアクセスの数を数えるということ?