540 likes | 689 Views
演算 / メモリ性能バランスを考慮した CMP 向け ヘルパースレッド実行方式の提案と評価. 九州大学 ○今里 賢一 福本 尚人 井上 弘士 村上 和彰. 発表手順. 研究背景 チップマルチプロセッサ CMP 上の並列 処理における性能向上阻害要因 演算 / メモリ性能バランスを考慮したヘルパースレッド実行方式 提案方式の評価 性能モデリングによる評価 シミュレータによる評価 まとめと今後の課題. チップマルチプロセッサ ( CMP ). 1 つのチップ上に複数 のプロセッサコア を 搭載 同時に複数のコアで実行することにより性能向上. マルチプログラミング.
E N D
演算/メモリ性能バランスを考慮したCMP向けヘルパースレッド実行方式の提案と評価演算/メモリ性能バランスを考慮したCMP向けヘルパースレッド実行方式の提案と評価 九州大学○今里 賢一 福本 尚人 井上 弘士 村上 和彰
発表手順 • 研究背景 • チップマルチプロセッサ • CMP上の並列処理における性能向上阻害要因 • 演算/メモリ性能バランスを考慮したヘルパースレッド実行方式 • 提案方式の評価 • 性能モデリングによる評価 • シミュレータによる評価 • まとめと今後の課題
チップマルチプロセッサ(CMP) • 1つのチップ上に複数のプロセッサコアを搭載 • 同時に複数のコアで実行することにより性能向上 マルチプログラミング 並列処理 プログラム 2 プログラム 3 プログラム 1 プログラム 4 並列 プログラム 複数のスレッド に分割 コア1 コア1 コア2 コア2 コア3 コア3 コア4 コア4 L1D$ L1D$ L1I$ L1I$ L1D$ L1D$ L1I$ L1I$ L1D$ L1D$ L1I$ L1I$ L1D$ L1D$ L1I$ L1I$ L2共有キャッシュ L2共有キャッシュ 主記憶 主記憶
CMP上の並列処理における性能向上阻害要因 • メモリウォール問題 • プロセッサ-主記憶間の速度差拡大 • CMPではさらに深刻化 • オフチップメモリバンド幅の制約 Barnes Cholesky Perfect L2 cache (100% ヒット) 1MB L2 cache
本研究のねらい • 従来方式: すべてのコアで並列プログラムを実行 • 疑問点: 本当に全コア実行が得策なのか? • 6コアから +2コアでわずか 「6.9%」 の性能向上 • 解決策: 演算/メモリ性能のバランスを考えたコアの運用 • コアの一部をメモリ性能向上に利用 Cholesky Perfect L2 cache (100% ヒット) 提案方式の狙い 6.9% 1MB L2 cache
本研究のねらい • 従来方式: すべてのコアで並列プログラムを実行 • 疑問点: 本当に全コア実行が得策なのか? • 6コアから +2コアでわずか 「6.9%」 の性能向上 • 解決策: 演算/メモリ性能のバランスを考えたコアの運用 • コアの一部をメモリ性能向上に利用 • 6コアから +2コアで… • 提案:57%の性能向上 Cholesky Perfect L2 cache (100% ヒット) 6.9% 57% 1MB L2 cache
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ 従来方式 並列 プログラム コア5 コア1 コア2 コア3 コア4 コア 6 コア7 I$ I$ I$ I$ I$ I$ I$ D$ D$ D$ D$ D$ D$ D$ L2共有キャッシュ 主記憶
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ • ヘルパースレッド • 演算コア用にプリフェッチ • 利点と欠点 • メモリ性能の向上 • 演算性能の低下 提案方式 並列 プログラム ヘルパー スレッド コア5 コア1 コア2 コア3 コア4 コア 6 コア7 I$ I$ I$ I$ I$ I$ I$ D$ D$ D$ D$ D$ D$ D$ L2共有キャッシュ 主記憶
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ 提案方式 並列 プログラム ヘルパー スレッド ヘルパー スレッド コア5 コア1 コア2 コア3 コア4 コア 6 コア7 I$ I$ I$ I$ I$ I$ I$ D$ D$ D$ D$ D$ D$ D$ L2共有キャッシュ 主記憶 • ヘルパースレッド • 演算コア用にプリフェッチ • 利点と欠点 • メモリ性能の向上 • 演算性能の低下
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ 提案方式 並列 プログラム ヘルパー スレッド ヘルパー スレッド ヘルパー スレッド コア5 コア1 コア2 コア3 コア4 コア 6 コア7 I$ I$ I$ I$ I$ I$ I$ D$ D$ D$ D$ D$ D$ D$ L2共有キャッシュ 主記憶 • ヘルパースレッド • 演算コア用にプリフェッチ • 利点と欠点 • メモリ性能の向上 • 演算性能の低下
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ 提案方式 並列 プログラム ヘルパー スレッド ヘルパー スレッド コア5 コア1 コア2 コア3 コア4 コア 6 コア7 Prefetch A miss I$ I$ I$ I$ I$ I$ I$ D$ D$ D$ D$ D$ D$ D$ miss L2共有キャッシュ 主記憶 A • ヘルパースレッド • 演算コア用にプリフェッチ • 利点と欠点 • メモリ性能の向上 • 演算性能の低下
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ 提案方式 並列 プログラム ヘルパー スレッド ヘルパー スレッド コア5 コア1 コア2 コア3 コア4 コア 6 コア7 I$ I$ I$ I$ I$ A I$ I$ D$ D$ D$ D$ D$ D$ D$ L2共有キャッシュ A 主記憶 A • ヘルパースレッド • 演算コア用にプリフェッチ • 利点と欠点 • メモリ性能の向上 • 演算性能の低下
演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~演算/メモリ性能のバランシング~ヘルパースレッドによるプリフェッチ~ 提案方式 並列 プログラム ヘルパー スレッド ヘルパー スレッド コア5 コア1 コア2 コア3 コア4 コア 6 コア7 Load A I$ I$ I$ I$ I$ A I$ I$ D$ D$ D$ D$ D$ D$ D$ L2共有キャッシュ hit A 主記憶 A • ヘルパースレッド • 演算コア用にプリフェッチ • 利点と欠点 • メモリ性能の向上 • 演算性能の低下
アーキテクチャ・サポート • ヘルパースレッドはキャッシュミス情報を用いてメモリ参照アドレスを予測 • Miss Status Buffer の導入 • 他コアのキャッシュミス情報をスヌープし格納 並列プログラム を実行 ヘルパースレッドを実行 … … コア1 コア2 コアN L1D$ L1I$ L1D$ L1I$ L1D$ L1I$ MSB MSB MSB 共有バス L2 共有キャッシュ
アーキテクチャ・サポート • ヘルパースレッドはキャッシュミス情報を用いてメモリ参照アドレスを予測 • Miss Status Buffer の導入 • 他コアのキャッシュミス情報をスヌープし格納 並列プログラム を実行 ヘルパースレッドを実行 … … コア1 コア2 コアN miss L1D$ L1I$ L1D$ L1I$ L1D$ L1I$ MSB MSB MSB 共有バス L2 共有キャッシュ
アーキテクチャ・サポート • ヘルパースレッドはキャッシュミス情報を用いてメモリ参照アドレスを予測 • Miss Status Buffer の導入 • 他コアのキャッシュミス情報をスヌープし格納 並列プログラム を実行 ヘルパースレッドを実行 … … コア1 コア2 コアN miss L1D$ L1I$ L1D$ L1I$ L1D$ L1I$ MSB MSB MSB 共有バス L2 共有キャッシュ
ヘルパースレッドの動作 ヘルパースレッドが実行するコード • Miss Status Buffer からキャッシュミス情報を取得 • Miss Status Buffer が空であれば待機 • メモリ参照アドレスの予測 • ハードウェアプリフェッチャの模倣 • プリフェッチ命令の実行 Stride,Marcov,Delta correlation,… while (true) { 1. miss_info = msb.addr; 2. pref = predict(miss_info); 3. prefetch(pref); }
発表手順 • 研究背景 • チップマルチプロセッサ • CMP上の並列処理における性能向上阻害要因 • 演算/メモリ性能バランスを考慮したヘルパースレッド実行方式 • 提案方式の評価 • 性能モデリングによる評価 • シミュレータによる評価 • まとめと今後の課題
性能モデリング • Nコア CMP上での並列処理 • N – m コア: 通常実行,m コア: ヘルパースレッドを実行 全コア実行時の実行 クロックサイクル数 提案方式の実行 クロックサイクル数 演算性能の低下 による実行クロック サイクル数の増加 (1以上) メモリ性能の向上 による実行クロック サイクル数の減少 (1以下)
性能モデリング 並列化できる演算の割合 全コア実行時の実行 クロックサイクル数 ヘルパースレッドを実行するコア数 提案方式の実行 クロックサイクル数 メモリ性能の向上 による実行クロック サイクル数の減少 (1以下) プロセッサコア数
性能モデリング 並列化できる演算の割合 全コア実行時の実行 クロックサイクル数 ヘルパースレッドを実行するコア数 提案方式の実行 クロックサイクル数 全コア実行時の全実行時間にしめる 主記憶アクセスによるストールの割合 プロセッサコア数 全コア実行時からのL2キャッシュミス率の削減率
性能解析(Cholesky) 相対実行時間 提案方式 従来方式 性能低下 性能向上 L2キャッシュミス率の削減率 ヘルパースレッドを実行するコア数 ベンチマークプログラム Cholesky (= 0.73, =0.45)の 性能モデル式による実行クロックサイクル数の予測
性能解析(Cholesky) 相対実行時間 ヘルパースレッドを実行するコア数 提案方式 従来方式 +8.4% 性能低下 -16.1% -41.4% 相対実行時間 性能向上 17.1% L2キャッシュミス率の削減率 ヘルパースレッドを実行するコア数 L2キャッシュミス率の削減率 ベンチマークプログラム Cholesky (= 0.73, =0.45)の 性能モデル式による実行クロックサイクル数の予測
性能解析(Cholesky) • 17.1%以上のミス削減率を達成で高性能化を実現 • 最大で41.4%の実行時間の削減 • ミス削減率が低い場合性能低下 相対実行時間 ヘルパースレッドを実行するコア数 提案方式 従来方式 +8.4% 性能低下 -16.1% -41.4% 相対実行時間 性能向上 17.1% L2キャッシュミス率の削減率 ヘルパースレッドを実行するコア数 L2キャッシュミス率の削減率 ベンチマークプログラム Cholesky (= 0.73, =0.45)の 性能モデル式による実行クロックサイクル数の予測
提案方式の評価 • 評価内容 • 従来方式: すべてのコアで並列プログラムを実行 • 提案方式: いくつかのコアでヘルパースレッドを実行 • プログラム実行中に実行するスレッドは変更しない • 最適なコア配分は既知 • 評価環境 • シミュレータ: CMPシミュレータ M5 • ベンチマークプログラム: Splash2 から 6 個のプログラムを選択 比較 32KB 1 clock cycle … … コア8 コア1 コア2 20 エントリ 1 clock cycle L1D$ L1I$ L1D$ L1I$ L1D$ L1I$ MSB MSB MSB 共有バス L2 共有キャッシュ 1MB 12 clock cycle 300 clock cycle 主記憶
実装したプリフェッチアルゴリズム • Local Stride プリフェッチ • 命令別にキャッシュミスアドレスのストライド値を保持 • 使用する情報:キャッシュミスアドレス,PC,コア番号 • Global Stride プリフェッチ • 過去 n 個 のキャッシュミスアドレスと現在のキャッシュミスアドレスとの差分のうち最も絶対値が小さいものをストライド値として予測 • 使用する情報:キャッシュミスアドレス,コア番号 • Delta Correlation プリフェッチ • 時間的に連続するキャッシュミスアドレスの差分がマルコフ情報源になっていると仮定しプリフェッチ • 使用する情報:キャッシュミスアドレス,コア番号
評価モデル • 従来方式 • BASE: すべてのコアで並列プログラムを実行 • 提案方式 • 必ず1コア以上はヘルパースレッドを実行 • PB-LS: Local Strideプリフェッチ • PB-GS: Global Stride プリフェッチ • PB-DC: Delta Correlation プリフェッチ
ヘルパースレッドによるL2キャッシュミス率の削減ヘルパースレッドによるL2キャッシュミス率の削減 64.3%削減 ほぼすべての場合において L2 キャッシュミス率を削減
提案方式による性能向上 最大で47%の 性能向上
まとめと今後の課題 • まとめ • 演算/メモリ性能のバランスを考慮したヘルパースレッドの実行方式を提案 • 性能モデリングによる評価 • シミュレータによる評価 • 最大で 47% の性能向上 • 今後の課題 • 最適なコアの配分を決定する機構の考案 • 提案方式の詳細な評価 • ベンチマークプログラムの追加 • メモリ関連のパラメータの変更 • ハードウェアプリフェッチャとの組み合わせ
最適なコアの配分を決定する機構の考案 • 静的:プログラム実行前に決定 • コンパイラによる解析,事前実行による予測 • 動的:プログラム実行時に決定 • 実行前にパフォーマンスカウンタを入力とした予測モデルを構築 • 性能モデル式,機械学習,クラスタリング • 実行時にパフォーマンスカウンタの値を取得し予測
最適なコアの割当て ※ Ocean,Radix ではスレッド数の制約(2 の累乗にしかスレッド数を設定できない) のため 4:4 となっている :従来方式よりも高い性能向上が得られたもの
L2キャッシュサイズを変化させた場合の提案方式の評価L2キャッシュサイズを変化させた場合の提案方式の評価
実装したプリフェッチアルゴリズム • Local Stride プリフェッチ • 命令別にメモリ参照アドレスのストライド値を保持 • 使用する情報:キャッシュミスアドレス,PC,コア番号 • Global Stride プリフェッチ • 過去 n 個 メモリ参照アドレスと現在のメモリ参照アドレスとの差分のうち最も絶対値が小さいものをストライド値として予測 • 使用する情報:キャッシュミスアドレス,コア番号 • Delta Correlation プリフェッチ • 時間的に連続するキャッシュミスアドレスの差分がマルコフ情報源になっていると仮定しプリフェッチ • 使用する情報:キャッシュミスアドレス,コア番号
実装したプリフェッチアルゴリズム (1/2) • ストライドプリフェッチ • キャッシュミスアドレスのストライド値が一定であると予測しプリフェッチ • Local Stride プリフェッチ • 命令別にメモリ参照アドレスのストライド値を保持 • 使用する情報 • キャッシュミスアドレス,プログラムカウンタ,コア番号 • Global Stride プリフェッチ • 過去 n 個 メモリ参照アドレスと現在のメモリ参照アドレスとの差分のうち最も絶対値が小さいものをストライド値として予測 • 使用する情報 • キャッシュミスアドレス,コア番号
実装したプリフェッチアルゴリズム (2/2) • Delta Correlation プリフェッチ • 時間的に連続するキャッシュミスアドレスの差分がマルコフ情報源になっていると仮定しプリフェッチ • Global History Buffer を用いる手法 • 使用する情報 • キャッシュミスアドレス • コア番号 1, 1 1, 62 時間 62, 1 ミスアドレス delta order = 2
Local Stride Prefetching • 命令別にメモリ参照アドレスのストライド値を保持 • ひとつ前のストライド値と現在のストライド値が等しい場合プリフェッチを実行 • 現在のメモリ参照アドレスにストライド値を足したメモリアクセスアドレス 出典: A Survey of Data Prefetching Techniques
Local Stride Prefetching(実験に使用した設定) • 使用する情報 • コア番号 • L2キャッシュミスを起こした命令のプログラムカウンタ • L2キャッシュミスを起こしたメモリ参照アドレス • 助ける対象のコア別に違うテーブルを使用 • テーブルサイズの合計はL1キャッシュサイズと同じ • 総エントリ数: 2048 • 1コアを助けるとき 2048 エントリ/テーブル • 7コアを助けるとき 256 エントリ/テーブル
Global StridePrefetching Miss address 更新 エントリの割り当て (LRU置換ポリシ) + Prefetch Addr
Global Stride Prefetching(実験に使用した設定) • 使用する情報 • コア番号 • L2キャッシュミスを起こしたメモリ参照アドレス • 助ける対象のコア別に違う Global Miss Address History と テーブルを保持 • エントリ数 • Global Miss Address History : 8 エントリ • Next Addr,Stride を保持するテーブル: 8 エントリ
スレッド数 のときの実行クロックサイクル数 • 一番実行時間が長いスレッドの実行クロックサイクル数 : スレッド数 のときの実行クロックサイクル数 : スレッド数 のときの演算実行に要するクロックサイクル数 : スレッド数 のときのメモリアクセスに要するクロックサイクル数 ※ ただし、演算とメモリアクセスのオーバーラップ実行は考えない
スレッド数 のときの実行クロックサイクル数 : 並列化できる演算の割合 メモリアクセス回数 コア ・・・ ミス率: アクセス時間: L1$ L2$ ミス率: アクセス時間: : 並列化できるメモリアクセスの割合 主記憶 バスアクセス時間はスレッド数に 対し一定であると仮定し, L2キャッシュアクセス時間, 主記憶アクセス時間に含める。 アクセス時間: