610 likes | 751 Views
データ値の局所性を利用した ライン共有キャッシュの提案. 九州大学 大学院 ○ 岡 慶太郎 福本 尚人 井上 弘士 村上 和彰. キャッシュメモリの大容量化. マルチコア・プロセッサが主流 メモリウォール問題の深刻化 メモリアクセス要求増加 IO ピンの制限 →大容量の LL(Last Level) キャッシュを搭載. 8MB の L3 キャッシュを搭載. Core i7 のチップ 写真 *. * http ://www.atmarkit.co.jp/fsys/zunouhoudan/102zunou/corei7.html.
E N D
データ値の局所性を利用したライン共有キャッシュの提案データ値の局所性を利用したライン共有キャッシュの提案 九州大学大学院 ○岡 慶太郎福本 尚人 井上 弘士 村上 和彰
キャッシュメモリの大容量化 • マルチコア・プロセッサが主流 • メモリウォール問題の深刻化 • メモリアクセス要求増加 • IOピンの制限 →大容量のLL(Last Level)キャッシュを搭載 8MBのL3キャッシュを搭載 Core i7のチップ写真* * http://www.atmarkit.co.jp/fsys/zunouhoudan/102zunou/corei7.html
キャッシュメモリの大容量化の問題点 • リーク消費電力増加 • 容量1MB→8MBで8倍* • アクセスレイテンシ増加 • 容量1MB→8MBで2.1倍* 大幅な面積増加を伴わず,オフチップメモリアクセス回数を削減する手法が必要 * CACTIによりブロックサイズ64B,連想度8で実験した結果
目次 • 研究背景 • 着目点:データ値の局所性 • ライン共有キャッシュ • 評価 • ミス率,面積,L1ミスペナルティ • まとめ • 今後の課題
従来型キャッシュメモリは容量を無駄遣い!?従来型キャッシュメモリは容量を無駄遣い!? • 従来型キャッシュメモリのキャッシング方法 • 参照アドレスに基づいてブロックの格納場所を決定 • データ値の局所性が高い データ値の局所性:メモリアドレスが異なる多数のデータが同一の値を有する性質 • 仮説 • キャッシュ内に同一データ値を有するブロックが多数存在 LLキャッシュメモリ ブロックの格納場所 参照アドレス タグ インデックス ライン タグ インデックス 001 0100 000 ブロック: キャッシュのレベル間で取り交わすデータ 001 0100 A 010 書込みブロック 011 100 A データ値: ブロックのデータの値 101 110 111 B
従来型キャッシュメモリは容量を無駄遣い!?従来型キャッシュメモリは容量を無駄遣い!? • 従来型キャッシュメモリのキャッシング方法 • 参照アドレスに基づいてブロックの格納場所を決定 • データ値の局所性が高い データ値の局所性:メモリアドレスが異なる多数のデータが同一の値を有する性質 • 仮説 • キャッシュ内に同一データ値を有するブロックが多数存在 LLキャッシュメモリ ブロックの格納場所 参照アドレス タグ インデックス ライン タグ インデックス 101 0000 000 ブロック: キャッシュのレベル間で取り交わすデータ 001 0100 A 010 書込みブロック 011 100 A データ値: ブロックのデータの値 101 0000 A 110 111 B
従来型キャッシュメモリにおけるデータ値の局所性分析従来型キャッシュメモリにおけるデータ値の局所性分析 キャッシュメモリ内のデータ値の局所性を平均圧縮率を用いて分析 平均圧縮率= n:ブロック置き換え回数 平均圧縮率が低い程,キャッシュメモリ内のデータ値の局所性が高い ブロックサイズ キャッシュ容量:1MB キャッシュメモリ A B 平均圧縮率 A C B 圧縮率= 多くのプログラムでキャッシュメモリ内のデータ値の局所性が高い
研究概要 • 着目点 • キャッシュメモリ内に同一値を有するデータが多く存在 • 研究目的 • LLキャッシュメモリの面積を大きく増加することなくLLキャッシュミス率を削減 • 提案手法 • 同一データ値を有するラインを共有し,容量を効率的に利用 • 同容量の従来型キャッシュと比較し,最大でミス率を18ポイント削減可能
目次 • 研究背景 • 着目点:データ値の局所性 • ライン共有キャッシュ • 評価 • ミス率,面積,L1ミスペナルティ • まとめ • 今後の課題
ライン共有キャッシュの概念LSC(Line Sharing Cache) 従来型キャッシュ ライン共有キャッシュ 同一データ値を有するブロックを格納するラインを1箇所に限定 参照アドレスに基づきブロックを格納するラインを決定 タグアレイ データアレイ タグアレイ データアレイ A A A … … … A タグのエントリ数増加 従来型キャッシュに比べ,より多くのデータ値をキャッシュメモリに格納可能
解決すべき課題その1~如何にしてタグとラインを紐付けるか?~解決すべき課題その1~如何にしてタグとラインを紐付けるか?~ • タグに対応するラインを特定する必要あり • 問題点:各タグに対応するラインを特定不可能 • 解決策:行番号によるラインの区別と各タグに行ポインタ配置 タグアレイ データアレイ タグ ライン ? 0100 ? 11111 … 0110 各タグは対応するラインを特定できない
解決すべき課題その1~如何にしてタグとラインを紐付けるか?~解決すべき課題その1~如何にしてタグとラインを紐付けるか?~ • タグに対応するラインを特定する必要あり • 問題点:各タグに対応するラインを特定不可能 • 解決策:行番号によるラインの区別と各タグに行ポインタ配置 タグアレイ データアレイ 行番号 タグ ライン ? 000 001 0100 010 ? 011 11111 100 … 101 0110 110 111 各タグは対応するラインを特定できない
解決すべき課題その1~如何にしてタグとラインを紐付けるか?~解決すべき課題その1~如何にしてタグとラインを紐付けるか?~ • タグに対応するラインを特定する必要あり • 問題点:各タグに対応するラインを特定不可能 • 解決策:行番号によるラインの区別と各タグに行ポインタ配置 タグ・ポインタアレイ タグアレイ データアレイ 行番号 行ポインタ タグ ライン 100 000 001 0100 010 011 11111 100 100 … … 101 0110 110 111
解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~ • 書込み動作:データアレイの全ラインを探索する必要あり • 問題点:検索コストが大 • 解決策:データ値を用いたハッシング タグ・ポインタアレイ データアレイ 行番号 ライン 行ポインタ インデックス タグ 書き込みデータ値の検索 0000 000 参照アドレス 0001 001 0100 タグ インデックス 0010 010 0011 011 0001 0100 100 … … 11111 = 101 書込みブロック 1001 0110 111 一致 110 1011 11111 111 1100 1101 1110 1111
解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~ • 書込み動作:データアレイの全ラインを探索する必要あり • 問題点:検索コストが大 • 解決策:データ値を用いたハッシング タグ・ポインタアレイ データアレイ 行番号 ライン 行ポインタ インデックス タグ 書き込みデータ値の検索 0000 000 参照アドレス 0001 001 0100 タグ インデックス 0010 010 0011 011 0001 0100 100 … … 11111 101 書込みブロック 1001 行番号のサイズ 0110 111 110 1011 11111 111 1100 11111 1101 1110 行番号とデータ値の下位3ビットを対応付けてブロックを配置 1111
解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~ • 書込み動作:データアレイの全ラインを探索する必要あり • 問題点:検索コストが大 • 解決策:データ値を用いたハッシング タグ・ポインタアレイ データアレイ 行番号 ライン 行ポインタ インデックス タグ 書き込みデータ値の検索 0000 000 参照アドレス 0001 001 0100 タグ インデックス 0010 010 0011 011 0001 0100 100 … … = 101 書込みブロック 1001 0110 111 一致 110 行番号のサイズ 1011 11111 111 1100 11111 1101 1110 書込みデータ値がラインに存在 (データ値ヒット) 書込みデータ値の下位3ビット に対応する行番号にアクセス 1111
解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~解決すべき課題その2~如何にして効率の良いデータ検索を実現するか?~ • 書込み動作:データアレイの全ラインを探索する必要あり • 問題点:検索コストが大 • 解決策:データ値を用いたハッシング タグ・ポインタアレイ データアレイ ライン 行ポインタ インデックス タグ 0000 000 参照アドレス 行番号を行ポインタに書込み 0001 001 0100 111 タグ インデックス 0010 010 0011 011 0001 0100 100 … … 101 書込みブロック 1001 111 0110 110 行番号のサイズ 1011 11111 111 1100 11111 1101 1110 書込みデータ値がラインに存在 (データ値ヒット) 書込みデータ値の下位3ビット に対応する行番号にアクセス 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 タグ・ポインタアレイ データアレイ 行番号 ライン 行ポインタ インデックス タグ 0000 000 参照アドレス 0001 001 0100 tag index 0010 010 0011 011 0001 0100 100 … … = 101 書込みブロック 1001 一致 111 0110 110 1011 00111 111 11111 1100 1101 1110 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 タグ・ポインタアレイ データアレイ 行番号 ライン 行ポインタ インデックス タグ 0000 000 参照アドレス 0001 001 0100 tag index 0010 010 0011 011 0001 0100 100 ブロックの追出し が必要 … … 101 書込みブロック 1001 111 0110 110 行番号のサイズ 1011 00111 111 11111 1100 1101 1110 書込みデータ値がラインに非存在 (データ値ミス) 書込みデータ値の下位3ビット に対応する行番号にアクセス 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 データアレイ タグ・ポインタアレイ 行番号 ライン 行ポインタ インデックス タグ 0000 000 参照アドレス 0001 001 0100 tag index 0010 010 0011 011 0001 0100 100 … … 101 書込みブロック 1001 0110 111 110 1011 00111 111 11111 1100 1101 1110 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 0100 tag index 0010 10 0011 11 11111 0001 0100 … … 書込みブロック 1001 0110 111 1011 各行番号に複数のラインを対応付け 00111 1100 1101 1110 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 0100 tag index 0010 10 0011 11 11111 0001 0100 … … 列番号0 列番号1 書込みブロック 1001 111 0110 1011 00111 1100 行番号,列番号によりラインを区別 1101 1110 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 列ポインタ データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 0100 tag index 0010 10 0011 11 11111 0001 0100 … … … 列番号0 列番号1 書込みブロック 1001 1 0110 11 1011 00111 1100 列番号を格納するために 列ポインタの導入 1101 1110 1111
解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~解決すべき課題その3~如何にしてデータアレイでの書込み競合を回避するか?~ • データアレイ:各行番号に1ラインを対応付け • 問題点:ブロックの追出しが頻発 • 解決策:データアレイの水平分割と列ポインタの導入 列ポインタ データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 0100 tag index 0010 10 0011 11 00111 11111 0001 0100 … … = … 列番号0 列番号1 書込みブロック 1001 データ値ミス 1 0110 11 一致 行番号のサイズ 1011 00111 1100 ブロックを追い出すことなく 書込み 1101 1110 書込みデータ値の下位2ビット に対応する行番号にアクセス 1111
読み出し動作 読出し要求発行後の動作 • インデックスアクセス • タグ比較 • ポインタ読出し • ブロック読出し 列ポインタ データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 11101 0 01 0100 tag index 0010 10 0011 11 0001 0100 … … … 列番号0 列番号1 1001 1 0110 11 1011 1100 1101 1110 1111
読み出し動作 読出し要求発行後の動作 • インデックスアクセス • タグ比較 • ポインタ読出し • ブロック読出し 列ポインタ データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 11101 0 0100 01 tag index 0010 10 0011 11 0001 0100 … … = … 列番号0 列番号1 1001 1 0110 11 一致 1011 1100 1101 1110 1111
読み出し動作 読出し要求発行後の動作 • インデックスアクセス • タグ比較 • ポインタ読出し • ブロック読出し 同時に動作可能 列ポインタ データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 11101 0 01 0100 tag index 0010 10 0011 11 0001 0100 … … … 列番号0 列番号1 1001 1 11 0110 1011 1100 1101 01 0 1110 1111
読み出し動作 読出し要求発行後の動作 • インデックスアクセス • タグ比較 • ポインタ読出し • ブロック読出し 同時に動作可能 列ポインタ データアレイ タグ・ポインタアレイ 行番号 ライン ライン 行ポインタ インデックス タグ 00 0000 参照アドレス 01 0001 11101 0 01 0100 tag index 0010 10 0011 11 0001 0100 … … … 列番号0 列番号1 1001 1 11 0110 1011 1100 1101 0 01 1110 11101 1111
目次 • 研究背景 • データ値の局所性 • ライン共有キャッシュ • 評価 • ミス率,面積,L1ミスペナルティ • まとめ • 今後の課題
評価指標と求め方 • 面積 • 実装に必要なSRAMビット数で評価 • L1ミスペナルティ • モデルにより評価 • L2アクセスレインテンシ→キャッシュメモリシミュレータCACTI • キャッシュミス率 • 従来型キャッシュのミス率と平均圧縮率からの見積もりにより評価 • 従来型キャッシュのミス率→マルチコアシミュレータM5 平均圧縮率 LSCのミス率の評価方法 L2アクセストレース 平均圧縮率 ベンチマーク・プログラム 従来型キャッシュのL2ミス率 M5によるシミュレーション splash2 LSCのミス率に換算
評価方法 • 面積:ミス率を従来型キャッシュ8MBにおける値に固定 • ミス率:データアレイ容量を1MBに固定 • L1ミスペナルティ:データアレイ容量を1MBに固定 従来型キャッシュ 従来型キャッシュのミス率 従来型キャッシュ LSC LSCのミス率 LSC データメモリ:1MB データメモリ:1MB 8MB LSCの容量 ミス率およびL1ミスペナルティの比較 面積の比較 M5の評価環境
キャッシュミス率一定とした場合の面積削減効果キャッシュミス率一定とした場合の面積削減効果 ブロックサイズ64B,従来型キャッシュ容量8MB 圧縮率 52%面積削減 圧縮率が低い程,面積を大幅に削減
データアレイ容量を一定とした場合のミス率削減効果データアレイ容量を一定とした場合のミス率削減効果 ブロックサイズ64B,データアレイ容量1MB 18ポイント削減 圧縮率0.21 ミス率を大幅に削減できない 1 16 32 8 容量を増加するとミス率がすぐに飽和 容量を増加した場合,ミス率の減少幅小 すべてのプログラムでミス率を削減
データアレイ容量を一定とした場合のミス率削減効果データアレイ容量を一定とした場合のミス率削減効果 ブロックサイズ64B,データアレイ容量1MB 圧縮率0.55 ミス率を18ポイント削減 1 16 32 8 容量を増加する場合,ミス率の減少幅大 すべてのプログラムでミス率を削減
データアレイ容量一定とした場合のL1ミスペナルティ削減効果データアレイ容量一定とした場合のL1ミスペナルティ削減効果 ブロックサイズ64B,データアレイ容量1MB 従来型キャッシュのL1ミスペナルティで正規化 L1ミスペナルティ30%削減 アクセス時間を考慮した場合でもL1ミスペナルティを大幅に削減
まとめ • データ値の局所性を利用したライン共有キャッシュを提案 • ミス率一定条件において • 面積:最大52%削減 • 容量一定条件において • ミス率:最大18ポイント削減 • L1ミスペナルティ:最大30%削減 • ライン共有キャッシュの有効性を確認
今後の課題 • ライン共有キャッシュの詳細な評価 • キャッシュミス率 • アクセスレイテンシ • アクセスあたりの消費電力 • ライン共有キャッシュの適用範囲を拡張 • LSCはデータアレイへの書込み回数を削減→不揮発性メモリに利用 • 既存研究との比較
既存研究Frequent Value Compression in Data Cache • 目的 • L1キャッシュの消費電力大 • アプローチ • L1キャッシュにCC(Compression Cache)を導入 • ブロックのデータ値がFVT(Frequent Value Table)に存在→ブロックを半分に圧縮し格納 • 結果 • ミス率,消費電力,オフチップのトラフィックを大幅に削減 • LSCとの違い • 圧縮対象のデータを予め決定 Jun Yang,etal.”FrequentValue Compression in Data Caches”,MICRO’00
既存研究Dynamic Zero Compression for Cache Energy Reduction • 目的 • L1キャッシュの消費電力大 • アプローチ • L1キャッシュにFVC(Frequent Value Cache)を導入 • 結果 • ミス率,消費電力,オフチップのトラフィックを大幅に削減 • LSCとの違い • 圧縮対象データを予め決定 Jun Yang,etal.”FrequentValue Compression in Data Caches”,MICRO’00
質問内容 • ミス率の求め方について • 質問圧縮率で大丈夫なのか(A,A,A,B,C),(A,A,B,B,C)だと圧縮率が同じ • 解答今のままではダメ • 手法について • 質問データ値が0のやつばっかりだったら意味なくない? • 解答その通りだがデータにより示されている. • 圧縮率について • 質問具体的にはどんなデータを圧縮しているのか?(浮動小数点?アドレスポインタ?)
ライン共有キャッシュアーキテクチャ タグ・ポインタアレイ データアレイ タグ タグ v ポインタ v ポインタ 00 0 ライン ライン インデックス 行番号 01 1 CAM CAM CAM CAM 2 10 3 11 10011 11011 4 データウェイ0(列番号0) データウェイ1 (列番号1) 5 6 7 ラインセット タグウェイ0 タグウェイ1 ポインタセット
データ値の局所性に着目 • データ値の局所性 • メモリアドレスが異なるデータが同一の値を持つ性質 • 同一データ値の書込み頻度分析 • 書込みデータ値のごとに書込み回数を取得 • 書込みデータ値:プロセッサがストアする64bitのデータ • 書込み回数が多い順に並び替え • 書込み回数を累計 • 書込みデータ値の種類数と累計書込み回数をプロット データ 書込み回数 データ 書込み回数 累計書込み回数 B 20回 A 10回 20回 10回 A 30回 20回 B 5回 D 35回 3回 C 3回 38回 5回 D C
同一データ値の書込み頻度分析 FFT Cholesky Barnes 75% 70% 65% 累計書き込み回数 20% 20% 20% 書込みデータ値の種類数 LUContig OceanContig FMM 55% 50% 25% 20% 20% 20% 多くのプログラムでデータ値の局所性が高い
データアレイ容量を一定とした場合のミス率削減効果データアレイ容量を一定とした場合のミス率削減効果 ブロックサイズ64B,データアレイ容量1MB 0.33 0.68 18ポイント削減 0.55 0.58 0.21 0.50 0.44 0.39 0.37 0.61 0.72 0.55 すべてのベンチマークでミス率を削減
容量の影響L2キャッシュミス率 ブロックサイズ:64B キャッシュミス率 • ミス率削減ポイント増加FFT容量を増加するとミス率削減幅大 • ミス率削減ポイント低下:LUContig,OceanContig 容量を増加するとミス率削減度合い小
容量の影響L1ミスペナルティ ブロックサイズ:64B • ミス率削減ポイント増加FFT • ミス率削減ポイント低下:LUContig,OceanContig L1ミスペナルティはキャッシュミス率と同じ傾向
ブロックサイズの影響L2キャッシュミス率 L2キャッシュ容量1MB 12%ミス率削減 19%ミス率削減 18%ミス率削減 17%ミス率削減 キャッシュミス率 • ブロックサイズ減少 • ミス率削減:Cholesky,FFT • ミス率増加:LUContig,OceanContig 空間的局所性を利用できないため効果が低い