CPUについての説明をまとめてみた

PCを新調するにあたり、ハードの説明を記載しようかと思ったのだが、CPUだけでかなりの量になってしまったので、CPUに関する説明として投稿します。

CPUとは

PU: Central Processing Unit(中央演算処理装置)の略でパソコンの処理性能に直結するパーツになります。

CPUアーキテクチャ

CPUアーキテクチャとは、CPUにどういった処理を行わせたいかを支持するための命令セットや、それを実現するための物理的な処理機能の配置などを示す言葉になります。
また、CPUアーキテクチャで、32bitアーキテクチャや64bitアーキテクチャということがありますが、この32bitや64bitというのはCPUの中にあるレジスタといわれるデータを一時記憶する部分の容量になります。

パソコンで利用されるのは主にIntel系のアーキテクチャを持つCPUで、32bitだとx86、64bitだとx86_64やx64と表記されます。
これはIntel社が販売していた 8086 というCPUのアーキテクチャを拡張したものであり、その後Intel80386 といった末尾が86となるCPUを販売していたからです。
尚、Windowsが登場した時期にIntelから出ていた Pentium の名称は 86系の5番目(Penta)のチップということで作られた造語だそうな。

一方でARMはスマートフォンなどに利用されているCPUで低発熱な割にそこそこ性能が出るのが評判のCPUになります。
ここ5年ぐらいで64bit化が進んだのかな?まあ組み込み危機が主体なのであまり実感はないです。
アーキテクチャはイギリス(だったかな?)のARM社が設計していますが、ARM社は自陣ではCPUを製造しておらず、他の会社がARM社とライセンス契約して製造しています。

他にあるCPUのアーキテクチャとしては、Oracle社(が買収したSun Micro Systems)のSPARCIBM社が製造している(いた?)Power、IntelとHP社が共同開発して鳴り物入りで発売したものの鳴かず飛ばずに終わったIA64などがあります。
ただ、もうほとんど見なくなりましたね。

CPUの性能

コア数、スレッド数、動作周波数(動作クロック)で性能が決まります。それぞれ基本的には多い・高いほうが性能が良いです。
ただ、性能を上げると消費電力が高くなったり、発熱量が増えてしまい冷却機構が大型化するデメリットがあります。

コア数はCPUに実装されている処理を行うユニットの物理的な数となります。

スレッド数は、命令割り込み機能などを駆使することによりCPUの外部から参照したときに見える、論理的な処理を行うユニットの数になります。

動作周波数(動作クロック)は秒間に何回処理できるかということになります。(厳密にいうと違うかも)まあ、動作クロックが高ければ高いほど秒間の処理性能が高いということになります。

まあ、CPUの中に仕事してくれる小人さんがいて、コア数が小人さんの人数、小人さんが片方の利き腕しか使えない場合はコア数とスレッド数が一致、小人さんが両利きの場合はスレッド数が2倍、小人さんの仕事の速さがクロック数と覚えればよいかと思います。
尚、注意事項としてVMwareなどの仮想マシンに割り当てるリソースの論理CPUコア数は、スレッド数の値が利用できるリソースの値となります。

CPUの拡張機能について

一般的な用途としては上記の内容で十分かと思いますが、エンジニアとしては拡張機能についてもある程度理解しておいたほうがよいでしょう。
Intel系CPUの例となりますが、仮想基盤を構築する場合にCPUの仮想化支援機能(VT-x、VT-d)が利用できるか、AES暗号化用の演算機能(AES-NI)が付いているかなど、用途によって利用できるか確認しておいたほうがよい機能がいくつかあります。

バイトオーダー/エンディアンについて

レジスタについて、32bitか64bitと説明しましたが、それは一時記憶領域自体のことであり、実はデータの出し入れ自体は1回に8bitになります。
そのためデータを出し入れする際に前詰めでデータを入れるか、後詰めでデータを入れることになります。この順番のことをバイトオーダーやエンディアンと言ったりします。
このバイトオーダーですが、実はこれはアーキテクチャ毎に異なり統一されていません。
内部のみでデータを処理する場合はあまり問題になることはないのですが、通信をしながら処理を行う場合にバイトオーダーの違いが原因でデータの配列が変わったりします。
データの配列が異なっていた場合、当然バグるので順番を修正する必要があります。これをエンディアン変換といいます。

以上になります。