読者です 読者をやめる 読者になる 読者になる

l_n_m’s diary

よわい電気系の日記(本当にただの日記)

本日の教養:QPI

コンピュータ内部のあれこれ

昨日はコンピュータの外、バスやインタフェース(SATAとか)を書いたので、今日は逆に内部に目を向けます。
PCI-Expressの詳しい仕様とか書こうと思ってたけど、今日はもう眠い。また今度。

チップセット

とは

何らかの機能を持つ集積回路。コンピュータアーキテクチャでは、CPUと各外部装置を繋ぐバス上にある、制御装置と思っておけばいいのでは。
役割は、データ転送に関係する制御をすること。ちゃんと言っておかないと、確かにそういうものがあるのは分かるけど何のためなの、ということになってしまう……。

ノースブリッジとサウスブリッジ

http://www.pc-master.jp/jisaku/image/chipset2.jpg
参考文献(pc-master)より画像を引用。
マザーボード上には2種類のチップがある。それがノースブリッジとサウスブリッジ。図の接続順はちゃんと覚えよう。CPUとノースブリッジが繋がっていて、「ノースブリッジと」サウスブリッジが繋がっている。CPUとサウスブリッジは直接は繋がっていないので注意。
速く動作させたいものはCPUに近いノースブリッジに接続する、ということだけ覚えておけば後はどうでもいいかしら。マウスなんざサウスブリッジで、みたいにすぐ推測できるだろうし。
それぞれMCH(Memory Controller Hub)、ICH(I/O Controller Hub)と呼ばれることも。GPU内蔵のMCHをGMCHとも言うらしい。
ちなみに、信号変換するときの変換器をブリッジということを思い出せば、「ブリッジ」というネーミングも納得できるんじゃないかと思いますです。

実際

さっきまでのは古い話。一部のプロセッサでは、ノースブリッジはCPU中に含まれるようになった。
その結果、メモリは直接CPUから専用のバスで接続されるようになった。

FSBとBSB

現状をまとめると、
メモリ ←→ CPU ←→ チップセット
となっているわけです。実際にはメモリとCPUの間にキャッシュがあるので、
2次キャッシュ ←→ CPU ←→ チップセット
です。1次キャッシュはCPUの内部にあります。チップの外にあるとそれだけでアクセスに時間がかかるので。
左側のバスをBSB(Back Side Bus)、右側のバスをFSB(Front Side Bus)と呼びます。ノースが有るものと無いものとがあるので、右側の接続先は「チップセット(ノースかもしれないし、ノースは取り払われて直接サウスかもしれない)」としてあります。

QPI

出ましたよ出ましたよ! 本日のメインです!
FSBに変わる、めっちゃ速い接続技術。……ざっくりしすぎ?
CPUとチップセットだけを繋ぐわけではないんです。
今時のパソコンは複数コア(multi-coreであってmany-coreではないです)が普通という凄い時代。そのコア同士、コアとチップセット、いろいろなところを繋がなければなりません。
え、コアって独立だろうしコア同士は繋がなくていいんじゃないの、と思った人は教養が足りません。一緒に勉強していきましょう。
例えばマルチコアのプロセッサを初期化するとき、そのうちの一つでOSを起動し、その他をmaster-slave式に起動します。OSを起動し、その他に初期化信号を送るプロセッサをBSP(BootStrap Processor)、BSPに従って初期化されるプロセッサをAP(Application Processor)といいます。
この辺はMPInit(Multi-Processor Initialization)とかで調べると出てきます。Intelの仕様書見てみるとどんなことしてるのか分かって面白いかもですよ!
ともかく、初期化や割り込みなど、各プロセッサをOSが制御する以上、CPU同士も接続されていなければなりません。それらをまとめてFSBが繋いでいました。
でもこれだと速度が出ない! というわけで、point to point、つまりそれぞれを直接接続する技術がQPI。共用バスを使うのではなく、QPIによるネットワークを構築することで様々なデバイスにアクセス可能にするそうです。
2.4~3.2GHzで動作、19.2~25.6GB/sの速度で転送できるそうです。すげぇ……。

メモリアクセスの高速化

っておい! メモリの方にQPI関わってねぇじゃん! ……と思ったのですが。
どうやらそういうことではなく、MCHにあったメモリコントローラがCPUに統合されたことで、他へのアクセスとメモリアクセスを完全に分離できたことが大きかったようです。帯域を余計なアクセスに圧迫されて、高速なメモリアクセスが出来なかったのを解消したらしい。
この分離=QPIの採用、というのが本当のところ。QPIが速いからメモリアクセスも速い、というわけじゃないんですね。別の理由でメモリアクセスが高速になっていたのか。

偶然手に入れた情報

次の画像をどうぞ。pcsyosinsya.comさんより引用。
http://pcsyosinsya.com/MEMORY1.gif
この黒いいっぱいあるデカいの、全部メモリです。つまり、実際のマザーボード上にメモリは複数あるんです。さっきの構造は変わらず、ひとつのCPUがいくつもの箇所のメモリを使える、と。
http://www.hpc-technologies.co.jp/image-3/Nehalem-illust/Nehalem-BlockImage.jpg
こちらはhpc-technologies.co.jpさんより引用。Nehalemというコードで開発されたIntelのCPUのアクセス速度を示した図です。「近い」メモリと「遠い」メモリがあるのが分かるでしょうか。遠いメモリにアクセスするにはQPIを介していることが分かればいいかなと思います。ここが速ければメモリアクセス速度も上がりますよね。
Nehalemについての説明は省略。……いつかやるかな?
QPIがメモリアクセスを直接高速化する場合もあるようです。こっちはあまり理解できていないので、機会があればまた取り上げたいと思います。

明日は?

先生に「QPIとかその辺でメモリアクセスって速くなってるよね」と言われたので昨日今日とこういうテーマでやってました。でも実際のとこは違うじゃん!
そういうわけで、明日はDDRでも取り上げようかと思います。踊る方じゃないですよ。
それでは。そうそう、明日はピーターラビット展に行くことになりました。楽しみ。