ハードウェアを知る (1) スピードと太さの違い
さて、今回はハードウェアを取り扱います。
現在のコンピューターに搭載されているハードウェアは、いわゆる半導体を中心にして、いろんなものがあります。
今のコンピューターを前提にした場合は、主なものは以下ですかね。
CPU
メモリ
ストレージ - 最近は SSD が主流ですね。Server側にはハードディスクも多いと思います。
ネットワークカード - WiFi や SIM なども含みます
私は専門ではないので、書籍で勉強した程度ですがね。
電気信号の速さ
これ、意外と知らなかったりします。実は光の速さと同じだと言われてます。1秒間に地球を7週半。秒速30万km! すごいですよね! 裏を返せば、光も電気も理論上は同じ速さで進むのですから。PC の マザーボードの中も、光ファイバー網の中も、WiFi での通信も。
インターネットの仕組みは別途扱いますが。
じゃなんで、海外との通信は遅いのか? もっと早いはずじゃん! と思いませんか?
実際には、あなたと通信相手との間に大量のルーターの役割のコンピューターがいて、処理をする時間がかかるからです。その人が「ルーティング」を行うからですね。電気信号が一定の塊になるまで貯めて、塊から「宛先」を解釈して、DB検索して…最後に別の宛先に通信を行います。
じゃ、何が問題になるかといえば「情報量」なんですよね。
電気はオンとオフで状態を現しますが、それが1秒間に何回行われるかは周波数、Hz で表現されますよね。CPU のクロック数でよく表現されますよね。じゃー、クロック数をもっと増やせばいいじゃない、と思いますよね。でも、これが出来ないんです。たくさん振動するという事は、より発熱をするという事です。そう、冷やせないんですよ。今の技術だと。
この発熱問題をクリアできれば、もっと高速にできますよね。
そして、一度にどれくらいの情報を送れるか。これはよく帯域、 bps = Bit per Second。つまり1行間に送れる bit 数。1 bit は、0 か 1 かのどちらかで表現されますから。これもインターネットの回線で、n Gbps とかで表現されますよね。
ここから一つですが。
Wifi で 2.4 Ghz と 5Ghz がありますよね。
さー、どちらがデータ転送が速いのでしょうか?
答えですが。
速さは同じなんです。送れる情報量も実は一緒。
送受信のエンドの速さが2倍程度違いますよね。2.4 G と 5 G で。
じゃー 5Ghz でいいじゃない! と思いますよね。私は実際には 5Ghz ばっかり使っていますが😊
周波数が低いと。この場合は 2.4 Ghz ですが。より遠くまで送ることができ、壁などの障害物にも強いんです。
例えば、自宅の 1F に WiFiルーター があって、2F のPCやスマホで受信しようとすると。距離も遠いし、壁も増えますよね。通信しづらくなるんです。これが電波の状態が悪い、という表現される状況ですよね。
皆さんは WiFi など無線の世界になれていると思いますが。イーサネットケーブルでの有線の方が良いこともあります。有線の場合は常に同じ帯域で通信ができます。無線は電波の状態が刻々と変化しますので、常に仕様通りの帯域で通信ができるわけじゃないんです。スマホの電波も3本と4本を往復する場所ってありますよねー😊
コンピューターの中を見てみる
それらを踏まえて、コンピュータの中で、データ転送を行う、各ハードウェアを見ていきましょう。
情報は最新じゃないですが。たいして変わりませんので…
何が最速か? 青い箱ですよね。それは CPU です。3.2 Ghz。いま、もっと早いのもあるかもしれません。
CPUは常に最速です。Core 数も最近のPCは8コアくらいが普通になってきてますね。
ストレージに注目してください。CPUが自分の計算のために使えるストレージ。これ、上から順に 1次キャッシュ、2次キャッシュ、3次キャッシュと言います。
これ、私の Windows のタスクマネージャーです。
おぉ、3次キャッシュは既に図の方が小さいですねー😅
CPUは手元で扱えるキャッシュのサイズが小さいんです。
その代わりじゃないですが。他のデバイスとの通信時の「帯域」が半端なく大きいですね! 680Gbps って!😲
このデバイス間の帯域で更に大きいのが GPU です。GPUは、コア数がとんでもなく多いですね! 並列処理用ですね。
ま、どちらが帯域が大きくてもいいのですが。GPU は描画処理に特化したチップセットです。Deep Learning の処理が速いことから、GPUはDeep Learning 用のチップセットだと思っている方も多いと思います。実際には、両方で使えます。特に Gaming PC には、すんごいGPUが搭載されていますね。
PCの部品の値段で1-2で高額なのが、CPUとGPUです。
私が Microsoft の新人研修担当だったら、間違いなく15万円の現金を渡して、秋葉原などで パーツから Windows 組んでもらいますがね。それでベンチマークの競争をしますが。その予算内でどれが一番早いのか?
あ、ベンチマークは、PCベンチマーク試験じゃなくて、DBなどのプログラムを動かしますよ。ハードウェアの試験をしたいわけじゃないですからね。
この全体像を把握することは大事です。どのデバイスが、どこ経由で、どこのデバイスと通信をしているのか? PCの場合は、間にNorth Bridgeや South Bridgeというルーティングを司るチップセットが使われていることもあります。最近は CPU がすべて間に入っているみたいですねー
待ちの存在
で、このルートを知ることの何が重要か?
デバイス間で最大周波数が異なります。
例えば、下図の場合。CPUとGPUの周波数は 2倍違います。という事は、CPUから GPUに処理を渡すと、GPU が1つ仕事をしている間、CPUには待ちが発生しうるという事です。
RAM、つまりメモリーのスピードも重要ですよね。メモリが低速だと、同じくCPUが待つことになります。
同様のことはデータの読み書きできるデータ転送量にも言えます。
皆さんの永続ストレージは SSD なのではないでしょうか? 一昔前は、それが HDD でした。
この読み書きのスピードの差を見てください… 20倍くらい違います。
RAMとHDDも7倍弱違います。
なので、なるべく HDD とのやり取りは減らしたいわけですよ。
図には記載していませんが、IOPS という単位もストレージにはあります。Input/output operations per second つまり、1秒間に読み書きできる回数になります。
キャッシュ
ハードウェア毎のざっくりとしたパフォーマンスの違いです。
さて、なぜこんなにレイヤーがあるんでしょうか?
Register は CPUの内部といっていいかと思います。遅延はほぼありません。
永続データは、Disk に保存されています。最近はSSDですね。Registerと SSD だけあればいいじゃない? と思いませんか?
ある意味、Cache / RAM。これらは、SSK もしくは Disk の一時的なコピーを持ちます。キャッシュですね。
ネットワークはどうなんでしょう。データをネットワーク経由で送信した場合、その永続保存の責任を持つのは、ネットワークの先のコンピューターになります。距離が遠くなる分、ルーターが間にたくさんいる分、その確認時間はかかりますよね。なので、まずは手元のコンピューターに保存をする。一時的にといいますか、キャッシュといいますか。それを後からゆっくりとネットワークの先に保存をする。という事も考えます。ネットワークの先にあるコンピューターが常に動いているとは限りませんしね。
キャッシュって、インターネットを使った大規模なものもあります。Contents Delivery Network (CDN) と言われているものです。皆さんが普段行っているOSの更新などは、大体CDNとファイルのやり取りをしています。CDNはキャッシュの世界最大のものといえるかと思います。
CPUとRAM。RAMとSSDのやり取りのキャッシュ。それはネットワークでも同じですね。
まとめ
いかがですか?
ソフトウェアエンジニアなのに、なぜハードウェアを知る必要があるのか? それは、設計・デザインに大きく影響するからです。より高速かつ安定して動くシステムが必要な場合、ここが本当に大事です。
自分のPC/Macの中でコードを書いて動かしている場合には気づかない事がたくさんあります。
「このデバイスやサービスは、自分の思った通りやってくれるんだろう」という思い込みは大変危険です。
この間にもハードウェアはどんどん小型化・高速化します。
スマホのストレージも128GBが最小だったりしてますからね😊
1台のコンピューターを知ることで、ネットワーク越しに接続した複数台のコンピューターが連動して動く様を想像できるようになればと思います。
次回は、CPU を扱います。軽ーくですよ。