CPUのコアとは?コンテキストとは?プロセスとスレッドの違いとは?ハイパースレッディングとは?

CPUコアとは

最近のCPUは、1つのCPUに複数のコア(実際に処理を行う部品)が複数付いています。

例えばIntelのXeonシリーズのE5-2603V4というCPUではコア数は6です。

このコアは同時に実行できるプログラム数と考えて下さい。1つのサーバにはCPUスロットの数だけ拡張できますので、CPUを拡張すれば追加した分、コア数が増え、実行できるプログラム数も増えます。

コア数=同時実行できるプログラム数

ですが、マルチタスクOSにおいて、コア数しかプログラムを実行できないなんてことはありません。実際には人間には分からないほど高速に、実行するプログラムを頻繁に切り替えています。

CPUのContext(コンテキスト)というのがプログラムに紐づいており、このContextにそのプログラムで最後に実行した状態を記憶しており、また順番が回ってきたらそのContextから情報を引っ張り出し、処理を継続するのです。

先程のIntel Xeon E5-2603V4は「コアの数 6」と書いてある下に「スレッド数 6」と書かれています。これは何でしょうか?

プロセスとスレッドの違い

プロセスとは、実行中のプログラムのことです。1つのプロセスには、1つのメモリ領域が割り当てられます。メモリ領域はプロセスからOSに要求すれば(空きがあれば)増やしてくれます。

スレッドとは、コアを利用できる単位のことです。つまり1スレッドに1コアが基本です。ではなぜ分けて記載しているのでしょうか?

実は Intel の一部の CPU では、ハイパースレッディングという機能を搭載しているものがあり、この機能を使うと、余っているスレッドを有効活用し、物理的に1つのコアを、OSから2つのコアであるように見せかけることができコアの利用率を上げることができるのです。

なので、ハイパースレッディングに対応しているCPUであれば、「スレッド数」は「コアの数」の倍になります。(例えばIntel Xeon E5-2623V4)

シングルスレッドとマルチスレッド

1つのプロセスで複数のスレッドを使うかどうかは、アプリケーションの作り方次第です。例えば JavaScriptプロキシソフトのSQUIDシングルスレッドなので、JavaScript や SQUID の動作を早めたい!と思ってCPUのコアをたくさん搭載しても、意味がありません

一方、マルチスレッドの場合は1つのプロセス中に複数の処理を並行して行えるので、パフォーマンスが良い傾向にあります。

なお、プロセス間でメモリ領域を侵食しないかはOSが管理してくれますが、マルチスレッドではプロセスに割り当てられた1つのメモリ領域複数のスレッドが共有するので、マルチスレッドアプリケーションがスレッド間で互いにメモリを侵食しないよう、プログラミングする人で意識する必要があります。

CPUの命令セットアーキテクチャ

現在はx86系が主流です。

昔は32ビットOSがあったため、32ビットOS用はx86、64ビットOS用はx64もしくはx86_64と区別していましたが、現在は32ビットOSはほぼなくなりましたので、わざわざ_64と書かなくても、『x86=64ビットOS用』を指すことが多くなりました。

もう少し言うと、結構前から32ビットOSであっても64ビットOSであってもx86_64のCPUを搭載しています。つまりアーキテクチャは分かれていますが、1つのCPUでこの2つのアーキテクチャが使えるのです。

x86系の実装として、Intelであれば「Intel64」AMDであれば「AMD64」という命令セットがあります。

WindowsやRedHat Enterprise Linuxでは現在はx86系のみをサポートしています。(サーバのOSは64bit版しかないため、x86_64アーキテクチャのみが使われます)

CPUのメーカ

汎用的なサーバではCPUメーカは Intel か AMD のどちらかで考えてよいかと思います(異論は認めます)。正直、現場エンジニアとしてはどちらでも良い感はありますが、ハイパースレッディングのお得感でIntelが多いです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする