ヘルニアクソ野郎エンジニアblog

~ヘルニアでHell near~

【CPUの技術】クロック、マルチスレッド、ターボブーストテクノロジ、SoC、「コンピュータの性能を大きく決めるCPUの技術について」

calendar

パソコンやスマホ、タブレットなど、私たちの生活にあって当たり前の物になってきました。

それらの心臓部となるパーツとして挙げられるのが「CPU」「GPU」「メモリ」です。

これらのパーツは、世代ごとに性能が大きく変化するパーツです。数年前に買ったパソコンやスマホが性能不足になることは珍しくありません。

ただし、性能が大きく変わると言っても、仕組みがガラリと変わるわけではありません。既存の仕組みを使って、スケールアップしているのです。

つまり、この仕組みを理解すれば、新しい製品でも、どのようなものなのかが分かるようになります。

また、買い替えや新調の際に、自分のニーズに合った製品を選ぶことができるようになるでしょう。

これから数回に分けて、「CPU」「GPU」「メモリ」の技術についてまとめようかと思いますので、この情報が、コンピュータの知識を得るためのお役に立てれば幸いです。

今回は、「CPUの技術」についてまとめようかと思います。

 

スポンサーリンク

クロック

クロックとは

「クロック」とは、デジタル電子回路内で信号の送受信を行うタイミングを揃える(同期)ための周期的な電気信号です。

最も単純なクロック信号は、信号電圧が周期的に「高⇒低⇒高」と繰り返す「単相クロック」で、山と谷をワンセットで1クロックと数えます。

「クロック周波数」は、この1クロックを1秒間に何回刻むかを表す数値で、単位は「Hz」を用います。

1秒間に10回のクロックを刻む場合は、10Hzといった感じです。

PCなどのコンピュータで用いる場合、「Mhz」(100万Hz)や「Ghz」(10億Hz)といった単位で用いられることが多いですね。

動作の基準となるクロック

クロックはCPUやGPUの動作基準となり、クロックの時間を1単位として命令を逐次実行します。

こう聞くと例えばクロック周波数が1Ghzの場合、CPUは1秒間に10億回の演算が出来るのか?というと、そう単純な話でもありません。

実際には、CPUが命令を実行するにあたり、最低でも下記の4工程が必要なのです。

①フェッチ(読み出し)

②デコード(命令解釈)

③命令実行

④ライトバック(書き出し)

これが各ステージで、少なくとも1クロックずつ消費するので、最低でも合計で4クロックが必要になります。

実際には各ステージの処理は1クロックで収まらないケースがほとんどで、その処理遅延を隠蔽するために「パイプライン技術」を用いたり、実行効率向上のため「スーパースカラ技術」を導入するなど、単純な計算では1秒間の演算回数を推し量ることはできないのです。

ただ、一般的にCPUは1クロックあたりの実行可能な命令数を「IPC」として公表しており、「IPC×クロック周波数」が、そのCPUの1秒間の演算回数とみる事が出来ます。

クロック周波数が高いほど高性能なCPUといえますが、同じくらい「IPC」も高いことが重要になります。

クロックの生成方法

PCなどの電子機器の内部において、クロックはどこで発生しているのかというと、とても正確な時間間隔で「パルス」を発生する「水晶発振器」というパーツを用いて生成しています。

たとえば、PCのマザーボード上には、この水晶発振器が備え付けられており、ここからPC全体の足並みを揃える「クロック信号」が生み出されているのです。

ただ、PC内部は、場所によって必要となるクロック周波数が異なります。(CPU、メモリ、拡張スロットなど)

そのため、「PLL」と呼ばれる「可変周波数発生回路」を用いて、ベースとなるクロック周波数から、さまざまなクロック周波数を生成しています。

クロック周波数を大幅にアップさせるクロックジェネレーター

昨今のCPUは、内部に「クロックジェネレーター」と呼ばれるクロック数を任意の整数倍に倍増させる回路を内蔵しており、外部からのクロック周波数を、CPU動作のクロック周波数へと引き上げています。

例えば、IntelのCPUの場合、「BCLK」と呼ばれるベースクロック(100Mhz)をもとに、CPU内蔵のクロックジェネレーターで焼く30倍~40倍にすることで、最大「3Ghz~4Ghz」といった高いクロック周波数を得ています。

Clock(時計)について

PCには電源を切っていても時刻を刻み続ける「RCT機能」が備わっており、内蔵電池によってコンセントを抜いても正しい時刻を刻んでくれています。

ところが、PCを使っていると「時刻がずれている」といった経験はないでしょうか。

実はRTC機能は、制度にすこぶるばらつきがあり、1月で十分ズレてしまうこともあるのです。

そこで重要となるのが、インターネット上の「タイムサーバ」(NTP)を用いた時刻修正です。

Windowsの場合、最初から自動修正するように設定されているはずですが、時刻がずれる症状が発生した場合は、正しく機能していない可能性が高いです。

 

マルチコアCPU

クロックの限界から生まれた技術

1Ghzを超えるCPUクロックが一般的となり、3Ghz前後まで上昇すると、発熱の高さや動作電圧の限界から、動作周波数を挙げる性能向上のアプローチは行き詰まりました。

この動作周波数の限界に到達した2005年頃、Intelが「Pentium D」、AMDが「デュアルコアOpteron 2xx」、などをそれぞれ最初の「マルチコアCPU」として発売します。

Intelはマルチダイ、AMDはシングルダイ

Intelの最初のマルチコアである「Pentium D」は、単純に2つのCPUのダイを1つパッケージに封入した「マルチダイ」形式でした。

一方のAMDは、エンタープライズ向けの製品を想定した「K8アーキテクチャ」では、デュアルコアが当初から想定されていたため、「シングルダイ」でデュアルコアの「Athlon64 x2」を発売することができました。

省電力技術としてのマルチコア

マルチコアの目的として、処理負荷が低く、高性能が要求されないときには、メインのコアを休ませる「省電力」が含まれます。

必要なパフォーマンスに合わせ、複数あるコアから必要な数だけを利用します。

シングルコアの性能をマルチコアでも実現する技術

マルチコアは必然的に「並列処理」を前提とします。

ところが処理によっては、プロセスの依存関係が深く、並列化が原理的に難しい場合があります。

こうしたケースでは、どれほどたくさんのコアを搭載していても、使えるコアは1コアのみということになります。

コアのクロックの限界は、主に「発熱量」の限界からきているので、他のコアが停止していれば、単一コアのみを高速に駆動しても、発熱量には余裕があることになります。

こうした技術の一つとして挙げられるのが、Intelの「ターボブーストテクノロジー」です。

これは例えば、4コア動作時には定格周波数で駆動し、2コア動作時には他の2コアの発熱量の減少分だけ、動作するコアを高周波数で駆動。

1コアでは、さらに増えたマージンを1コアに上乗せして駆動する技術になります。

 

マルチスレッディング

CPUの高速化、3つの取り組み

CPUの高速化を図るための主要な方法としては、次の3つの技術が挙げられます。

①クロックの高周波数化

②複数コアによる並列処理

③1クロック1命令あたりの処理の複雑化

①の代表が、「オーバークロック」です。また、IntelやAMDのプロセッサが備える「ターボ」機能の類も、一種のオーバークロックです。

一方、オーバークロックの問題点としては、「発熱の増加」が挙げられます。

そのため、「水冷」などの特殊な冷却方法を取らない限り、高周波数化にはCPUの破壊やエラーのリスクが伴います。

逆に、CPUベンダーとしても「動作周波数の向上」は常に目標であり、CPUは限界周波数に一定のマージンを取って動作しています。

②の方法は、デュアルコア、クアッドコア、オクタコアといった「マルチコア」のCPU製品として、ハイエンドからデスクトップ、エントリー、モバイルまで、幅広く普及しています。

マルチコアのメリットは、マルチタスクのOSで、複数のアプリを同時動作させても、キャッシュやメインメモリがボトルネックにならない範囲であれば、処理速度を落とさずにスムーズに動作できる点です。

③の方法は、「同一の動作周波数であれば、より複雑な命令を実行できれば、より多くの処理を単位時間内に実行できる」というアプローチで、「CISC」と呼ばれています。

「CISC」と対になるアプローチとして、「RISC」があります。こちらは命令セットを単純化することで、動作周波数を上げようという設計思想です。

しかし現在では、「CISC」「RISC」という単純な分類で語る事は難しく、「CISC」プロセッサも、内部的には「RISC」アーキテクチャを採用しています。

マルチスレッディングとは

マルチスレッディングは、前途した①~③のどの方法にも属さない高速化のアプローチです。

Intelの「ハイパースレッディング」などは広く知られていると思います。

ハイパースレッディング対応プロセッサでは、タスクマネージャーの画面に、コア数の倍のCPU使用率グラフが表示されます。

マルチスレッディングとは、端的に言えば、1つのコアに複数のスレッドを同時実行させる技術になります。

Intelの場合は、1コアあたり2つのスレッドを割り当てているということになります。

例えば、クアッドコアのIntel製プロセッサを用いた場合、ハイパースレッディングのCPUでは論理8コア、物理4コア(4コア8スレッド)になります。

物理的に見れば4コアですが、WindowsなどのOSから見て論理的に8コアあるように認識されるということです。

本来は、1つのコアで同時に2スレッドを処理することはできません。しかし、「整数演算」や「浮動小数点演算」など、様々な小型の演算モジュールが組み合わさって構成されるコアにおいては、1つのスレッドが、一部の演算モジュールのみを使う命令であるケースが少なくありません。

マルチスレッディングでは、たとえば「整数演算モジュール」と「浮遊小数点演算モジュール」を、それぞれ別のスレッドの処理に割り当てて同時実行することで、1コアで2スレッドを同時実行することが可能になります。

少し考えれば分かる事ですが、ソフトの処理において、必ずしも1コアで2スレッドを処理できるような命令が連続するとは限りません。

むしろ、整数演算の連続であったり、離散コサイン変換の連続であったりと、並列処理することが不可能なケースも多いと考えられます。

つまり、マルチコアがコア数ぶんだけの並列処理を保証するのに対して、マルチスレッディングは、コアの機能に空きがあるときに、その機能を休ませずに利用する事で、無駄を省く技術だという事が出来ます。

マルチスレッディングの弱点

マルチコアであれば、各コアに「レジスタ」や「キャッシュメモリ」などの付属ハードが、基本的には必要ぶんだけ用意されています。

しかし、マルチスレッディングでは、あくまで1コア内での並列処理なので、こうしたキャッシュなどのハードを共有することになります。

すると、キャッシュのヒット率が悪くなって、メインメモリ参照が増えるなど、シングルスレッドで実行している時よりも各スレッドの実行に時間がかかるような事態が、少なからず発生します。

また、あくまでマルチスレッディングは、1コアの利用効率を高めるための工夫にすぎません。

そのため、マルチコアのような複数アプリの同時実行、すなわちマルチタスクOSの動作を安定化、高速化させる効果はあまり期待できません。

ただし、キャッシュメモリの利用効率が必然的に上がります。

そのため、メインメモリへのアクセスが減り、その結果としてメインメモリのレイテンシの影響を最小化する効果などは期待できます。

 

ターボブーストテクノロジー

メーカー公式のオーバークロック?

ターボブーストテクノロジーは、IntelのCore i5/i7 シリーズに搭載されている機能です。

CPUの定格クロックを超えるクロックでCPUを駆動させるものです。誤解を招くかもしれませんが、言ってしまえば「メーカー公式のオーバークロック機能」みたいなものです。

ターボブーストテクノロジーの登場によって、それまでオーバークロックに縁の無かったユーザーも、気軽にオーバークロック気分を味わえるようになります。まさに、Coreプロセッサ世代を代表する機能の1つといえます。

ただ、ターボブーストテクノロジーは動作条件が分かりにくい部分があったり、CPUモデルによっては定格クロックとターボブーストテクノロジー動作時クロックの乖離が大きく、定格クロックって意味があるのか?という意見もあります。

CPUの動作クロックは変化する

現在のCPUは。「倍クロック」技術によってベースクロックを数倍にしたものをCPU動作クロックとして使っています。

このベースクロックの倍率を変えれば、CPUのパフォーマンスを簡単に変更できるわけですが、その特徴を最初に利用したのは「省電力」のための技術でした。

CPUの動作クロックがGhzを超えたころ、「常にCPUを全力稼働していたのでは電力の無駄になる」ということで、負荷の低い処理では倍率を下げて、動作クロックを抑える技術が登場したのです。

以降のCPUには、負荷に応じて動作クロックを変化させるようになっています。

定格クロックには意味がない?

実際の所、ターボブーストテクノロジーを搭載するCPUは、常にターボブースト状態で稼働しているといっても過言ではなく、定格クロックはスペック上の形骸的な数値になっていると言わざるを得ません。

しかし、カタログに掲載されるターボブースト時最大クロックも鵜呑みにしてはいけません。

ターボブースト時最大は、1コアのみ稼働時の最大クロックを意味しますが、実際の運用で1コアのみに負荷が集中することはそうそうないのです。

ターボブーストテクノロジー搭載CPUで一番重要なのは、「4コア稼働ターボブースト時クロック」だといえます。

 

SoC

SoCとは

スマホやタブレットのカタログ使用表を見ると、心臓部となるプロセッサに、「SoCクアルコムスナップドラゴン○○」と記載されていたり、比較的小さなデバイスにSoCという言葉をよく見かけます。

このSoCは「System-on-a-Chip」の略です。

1つの半導体チップ上にCPUをはじめとしたコンピューターを動かすうえで必要な一連のシステムを集積する技術、または集積した半導体チップを指す言葉として用いられています。

いわば全部入りCPUチップで、GPU、メモリコントローラのノースチップセットだけではなく、サウスチップセットも含めて1パッケージ化したようなものです。

SoCは、半導体製造技術の向上によって1つの半導体チップに詰め込めるトランジスタ数が、飛躍的に伸びたことで実現できた技術です。

本来は複数に分かれていた半導体チップを、1つのチップに集約することで次のようなメリットが生まれます。

・部品点数の削減

・コスト削減

・高速動作

・低消費電力

いずれもコンピューターの価値を考えるうえで重要な項目であり、特にサイズ制限の厳しいスマホやタブレットが現在のように高機能化できたのはSoCのおかげと言えます。

SoCは、スマホやタブレット以外でも多くのコンピュータ(主に組み込みや省スペースのもの、ラズパイとか)で採用されており、PCアーキテクチャ向けにもSoCを用いた製品が登場しています。

徐々に集積化されてきたコンピューター機能の歴史

チップセットの登場

1980年代、PCが32ビットへと移行するころ、CPU以外の周辺機器をまとめた「チップセット」が登場します。

時代が進むにつれて、「高速バス規格」など、チップセットの設計にも高い技術が必要となりました。

1990年代からは、CPU側の「ノースブリッジ」、周辺機器側の「サウスブリッジ」の2つのチップセットの組み合わせが一般的になります。

2000年代前半までは、この2チップセットの構成が基本となる時代が続くことになりました。

チップセット機能のCPU結合

2000年代中盤からは、チップセットの中でもより高速動作を必要とする部分が、CPU側に統合されるようになります。

最終的にはノースブリッジの全機能がCPUに統合され、1CPU & 1チップセット(サウスブリッジ)の2チップ構成が主流となりました。

全てをCPUに統合

現在は、さらなる省電力化や小型化が望まれる用途に向けて、サウスブリッジのチップセットもCPUに統合した「SoC」が登場しました。

このように、30年の月日を経て、CPUの性能は比較にならないほどに向上し、当時のマザーボードに実装されていた以上の機能が、小さな1チップに集積化されるまでになったのです。