昔の外付けキャッシュ
&
コヒーレント・キャッシュ
2017/SEP/23
たけおか@AXE
@takeoka
2
竹岡って誰?
1977年(高校2年生): MITのJames Slagleの書いたAIの教科書(日本語版)を読んで、
「○×」を打つプログラムを8bitマイコンTK-80(8080,RAM 512Bytes)の機械語で書く
1980年代:UNIXのサーバクライアント方式の仮名漢字変換システムWnn、国産シンクライアント(X
Window端末”XMiNT”)などの設計開発に携わる。TCP/IPスタックの独自実装。Temporal Prolog実装
1990年代初頭: 1024PE規模の超並列計算機”SM-1”(豊橋技科大 湯淺研,住友金属)のLSIハード
ウェア、ソフトウェアの設計開発に携わる。Common Lispで開発ツール書いた。
1992年:(株)アックスを興し、マイクロカーネルXTALを設計。XTALはオリンパス社製デジタルカメラ、
シャープ ザウルスなどに使用された。アックスは、人工知能を開発&販売中
2015年: Tier IVの社長を拝命 (アックス社長と兼任)
OSSコンソーシアム副会長, JASA技術本部長/理事,PCクラスタコンソーシアム理事,DEOS協会事務局長
超並列計算機SM-1
(1992年)
シンクライアント
XMiNT
(1988年)
オリンパス デジカメ
(2000年)
カラーザウルス(1996年)
昔
● CPUチップの外に キャッシュ
– キャッシュはCPU(コア)チップの外
– 高速RAM(SRAM)キャッシュ・コントローラLSIに内蔵だったり、外付
けだったり
– DRAM (遅い)
– 昔(1990年代前半)も、コヒーレンシを保つキャッシュ・コントローラ
LSIはあった(はず。データシートが見つからない)
CPU
コア
メイン・
メモリ
(DRAM)
SRAM
データ データ
データ
アドレス アドレス
アドレス
※キャッシュ制御のための詳細は省略
※アドレスの一部は、直にSRAMにい
くものもある
キャッシュ
コントローラ
キャッシュしている
アドレスの表
キャッシュ
キャッシュ制御部とは
●
キャッシュ・コントローラは、キャッシュされているデータのアドレスを記憶している
– キャッシュしているデータの、素のアドレス
– SRAM上のアドレス
● CPUからのアドレスが、キャッシュ内にあれば、
そのデータの入ってるSRAM上のアドレスを、SRAMに与える
● キャッシュ内になければ、DRAMから取ってくる
● DRAMへの書き戻しは、まぁ分かるよな…
CPU
コア
メイン・
メモリ
(DRAM)
SRAM
データ データ
データ
アドレス アドレス
アドレス
※キャッシュ制御のための詳細は省略
※アドレスの一部は、直にSRAMにいく
ものもある
キャッシュ
コントローラ
キャッシュしている
アドレスの表
キャッシュ
マルチCPU/マルチ・コア
● キャッシュ制御部 同士は、アドレス線がつながっているよ!
CPUコア#0
メイン・
メモリ
(DRAM)
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
CPUコア#1
CPUコア#2
コヒーレント・キャッシュ
●
バラバラに存在するキャッシュの一貫性が、自動的に保たれる
●
今ではフツー
– 組込み貧乏マルチ・コア・システムには、入っていないこともフツー
● 昔は、「スヌープ・キャッシュ」(覗き見キャッシュ)と呼ばれた
CPUコア#0
メイン・
メモリ
キャッシュ
CPUコア#1 キャッシュ
CPUコア#2 キャッシュ
スヌープ(コヒーレント)・キャッシュ
● キャッシュ制御部 同士は、アドレス線がつながっているよ!
● みんな、アドレス・バスを覗き見(スヌープ)している
●
書き換わったキャッシュから、情報をブロードキャスト
– 「インバリッド情報」は、アドレスのみでいい
●
キャッシュ同士が、主にアドレス情報を交換
●
アドレス・バスに少しだけ制御線を増やすなどして、インバリッド情報を通信できるようした
– 「キャッシュ・プロトコル」などという
CPUコア#0
メイン・
メモリ
(DRAM)
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
CPUコア#1
8
スヌープ・キャッシュはXeroxから
●
Xerox Dシリーズ
●
DシリーズはAIマシン
●
Smalltalk, Interlisp-D, Mesa
●
Alto
●
世界で初めて(?)マウスが付いた機械
●
ウインドウ・システム
●
コヒーレント・キャッシュが最初に開発されたのは、
Xerox Dragon (1987年ごろ)
●
http://dl.acm.org/citation.cfm?id=36185
●
DEC Firefly
●
Dragonの後継
https://en.wikipedia.org/wiki/DEC_Firefly
●
CRAY CS6400
●
Dragonの後継
●
https://en.wikipedia.org/wiki/Cray_CS6400
DEC Firefly
(Dragonの後継)
Alto
Star (Dandelion)
LL/SCもキャッシュの仕事
●
LL(load-link)/SC(store-conditional)
– MIPSで有名な、排他制御プリミティブ
●
LLとSCの、情報をブロードキャスト
– アドレスのみでいい
CPUコア#0
DRAM
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
キャッシュ
制御
高速
RAM
キャッシュ
アドレス
データ
CPUコア#1
●
LL: メモリ・アドレスにリンクを張る
●
LLしたアドレス情報をブロードキャスト
●
自キャッシュ内 当該エントリに LL したフラグを立てる
●
SC: ストアを実行、失敗することもある
●
SCしたら、SCアドレス情報をブロードキャスト
●
受け取った人は、自キャッシュ内のアドレスをチェックし
て、LL していたら、失敗フラグを立てる
●
失敗: 自分がLLをしたアドレスに、 誰かがLLした
or 誰かがすでにストアした → 権利取得失敗
●
先にLLした方が、勝つ方式もあり得る
●
成功: 自分が書き込めた → 権利取得できた
●
MIPSでOSポーティングしてる人:「親分、LL/SCが動作しないんですけど…」
↑ キャッシュがイネーブルになっていない or キャッシュが効かない領域を指定
●
TEST&SET のようなプリミティブは、資源(主にバスなど)を専有する時間が長い
– システムのメイン・バスを長時間 専有されると、システム全体の性能が ガタ落ちになる
参考
● Bus snooping (バス・スヌーピング)
https://en.wikipedia.org/wiki/Bus_snooping
● Cache coherence(キャッシュ一貫性)
https://en.wikipedia.org/wiki/Cache_coherence
● Directory-based cache coherence(ディレクトリ・ベースのキャッシュ一貫性)
https://en.wikipedia.org/wiki/Directory-based_cache_coherence
● LL/SC
https://en.wikipedia.org/wiki/Load-link/store-conditional
● Xerox Dragon (Cray CS6400 へリダイレクトされる)
https://en.wikipedia.org/wiki/Cray_CS6400
● Dragon Protocol
https://en.wikipedia.org/wiki/Dragon_protocol
● Firefly
https://en.wikipedia.org/wiki/Firefly_(cache_coherence_protocol)

昔の外付けキャッシュ & コヒーレント・キャッシュ