web-dev-qa-db-ja.com

「コアを追加する」ことが「CPUを速くすること」と同じ物理的制限に直面しないのはなぜですか?

2014年には、並行処理機能について多くのプログラミング言語が推奨されていると聞いています。同時実行性は、パフォーマンス向上のために不可欠であると言われています。

この声明を発表するにあたり、多くの人が2005年の記事「 昼休みは終わった:ソフトウェアの並行性に向けた基本的な方向転換 」を振り返ります。基本的な議論は、プロセッサのクロック速度を上げることは難しくなっているということですが、それでもチップ上により多くのコアを置くことができます。

いくつかの重要な引用

私たちは、500MHzのCPUが1GHzのCPUから2GHzのCPUへと移行するのをよく見かけます。今日私たちは主流のコンピュータでは3GHz帯にいます。

重要な問題は、いつ終了するのかということです。結局のところ、ムーアの法則は指数関数的な成長を予測しており、明らかに指数関数的な成長は私たちが厳しい身体的限界に達するまで永遠に続くことはできないということです。光は速くなっていません。成長は最終的に減速し、さらには終了する必要があります。

... 1つだけではなく、いくつかの物理的な問題、特に熱(大きすぎて消散しにくい)、消費電力(高すぎ)、および電流リークの問題により、より高いクロック速度を利用することがますます難しくなっています。

...チップ会社が同じ新しいマルチコアの方向性を積極的に追求しているので、Intelおよびほとんどのプロセッサベンダーの将来は他のところにあります。

マルチコアとは、1つのチップ上で2つ以上の実際のCPUを実行することです。

この記事の予測は遅れているようですが、その理由はわかりません。私はハードウェアがどのように機能するかについて非常にあいまいな考えしか持っていません。

私の過度に単純化した見方は、「より多くの処理能力を同じスペースに詰め込むことがますます難しくなる」ということです(熱、電力消費などの問題のため)。私はその結論が「それゆえ、もっと大きなコンピュータを持っているか、私たちのプログラムを複数のコンピュータで動かさなくてはならないだろう」と結論づけるだろう。 (そして、確かに、分散クラウドコンピューティングは私達がもっと聞いているものです。)

しかし、解決策の一部はマルチコアアーキテクチャのようです。コンピュータのサイズが大きくならない限り(これはこれまでにはありませんでしたが)、これは「同じスペースにより多くの処理能力をパックする」と言う別の方法のようです。

「コアを追加する」と「CPUを速くする」のと同じ物理的制限に直面しないのはなぜですか?

あなたができる最も簡単な言葉で説明してください。 :)

109
Nathan Long

概要

  • 経済。次の理由により、高速のクロックよりもコアの数が多いCPUを設計する方が安価で簡単です。

  • 電力使用量が大幅に増加しました。クロック速度を上げるとCPUの消費電力は急激に増加します。クロック速度を25%上げるには、熱空間で低速で動作するコアの数を2倍にすることができます。 50%の4倍.

  • シーケンシャル処理の速度を上げる方法は他にもありますが、CPUメーカーはそれらをうまく利用しています。


私たちの姉妹SEサイトの この質問 にある素晴らしい答えを大いに引用するつもりです。それで、それらを投票してください!


クロック速度の制限

クロック速度には、既知の物理的な制限がいくつかあります。

  • 送信時間

    電気信号が回路を通過するのにかかる時間は、光速によって制限されます。これは厳しい制限であり、それを回避するための既知の方法はありません。1。ギガヘルツクロックでは、この限界に近づいています。

    しかし、私たちはまだそこにいません。 1 GHzは、クロックチックごとに1ナノ秒を意味します。その間、光は30cm進むことができます。 10 GHzでは、光は3 cm進むことがあります。単一のCPUコアの幅は約5 mmなので、10 GHzを超えたところでこれらの問題に遭遇します。2

  • スイッチング遅延

    信号が端から端まで伝わるのにかかる時間を単に考慮するだけでは十分ではありません。また、CPU内のロジックゲートがある状態から別の状態に切り替わるのにかかる時間も考慮する必要があります。クロック速度を上げると、これが問題になる可能性があります。

    残念なことに、私は細部についてはよくわからないし、数値を提供することもできない。

    明らかに、それに多くの電力を送り込むことはスイッチングをスピードアップすることができるが、これは電力消費と熱放散の問題の両方につながる。また、より多くの力はあなたがそれなしでそれを扱うことができるより大きな導管を必要とすることを意味します。

  • 放熱/消費電力

    これは大きなものです。 fuzzyhair2's answer から引用すると、

    最近のプロセッサはCMOSテクノロジを使用して製造されています。クロックサイクルがあるたびに、電力は消費されます。したがって、プロセッサ速度が速いほど、熱放散が大きくなります。

    このAnandTechフォーラムのスレッド には、すばらしい測定値がいくつかありますが、それらは消費電力の公式を導き出しています(発熱と関係しています)。

    Formula
    Idontcare のクレジット

    これを次のグラフで視覚化できます。

    Graph
    Idontcare のクレジット

    ご覧のとおり、クロック速度があるポイントを超えて増加すると、消費電力(および発生する熱)が非常に急激に上昇します。このため、クロック速度を際限なく上げることは現実的ではありません。

    電力使用量が急激に増加する理由は、おそらくスイッチング遅延に関連しています。単にクロックレートに比例して電力を増加させるだけでは不十分です。より高いクロックで安定性を維持するためにも電圧を上げる必要があります。 これは完全には正しくないかもしれません。コメントで訂正を指摘するか、この答えを編集してください。


もっとコア?

では、なぜもっとコアが必要なのでしょうか。まあ、私はそれを決定的に答えることはできません。あなたはIntelとAMDの人々に尋ねなければならないでしょう。しかし、上記のように、現代のCPUでは、ある時点でクロック速度を上げるのは実用的ではなくなります。

はい、マルチコアは必要な電力と放熱も増加させます。しかし、それは伝送時間とスイッチング遅延問題をきちんと避けます。また、グラフからわかるように、最新のCPUでは25倍のクロック速度の増加と同じ熱的オーバーヘッドで、コアの数を簡単に2倍にすることができます。

現在の オーバークロックの世界記録 は9 GHzには恥ずかしがり屋です。しかし、電力消費を許容範囲内に保ちながらそうすることは、エンジニアリング上の大きな課題です。設計者は、ある時点で、より多くの作業を並列で実行するためにコアを追加すると、ほとんどの場合、パフォーマンスがより効果的に向上すると判断しました。

それが経済学がやってくるところです - マルチコアの道を進むことはたぶん安い(より少ない設計時間、より製造するのがより複雑でなかった)。そして、それは市場に出すのが簡単です - 真新しいオクタコアチップを好まない人はいませんか? (もちろん、ソフトウェアがそれを利用しない場合、マルチコアはまったく役に立たないことがわかっています...)

そこにあるのはマルチコアのマイナス面です:余分なコアを置くためにもっと物理的なスペースが必要です。ただし、CPUプロセスサイズは常に非常に小さくなるため、以前の設計を2部コピーするためのスペースが十分にあります。実際のトレードオフでは、より大規模で複雑なシングルコアを作成することはできません。繰り返しますが、コアの複雑さを増すことは、設計の観点からは悪いことです - より複雑なこと=より多くの間違い/バグおよび製造エラー。私たちは、あまりスペースをとらないほど簡単な効率的なコアを備えた幸せな媒体を見つけたようです。

現在のプロセスサイズで1つのダイに収めることができるコアの数にはすでに限界があります。私達は私達が物事をすぐに縮めることができる範囲の限界に達するかもしれません。それで、次は何ですか?もっと必要ですか?残念ながら、それは答えるのは難しいです。ここの誰かが千里眼ですか?


パフォーマンスを向上させる他の方法

だから、私たちはクロックスピードを上げることはできません。そして、より多くのコアに追加のデメリットがあります。つまり、それらを実行しているソフトウェアがそれらを利用できる場合にのみ役立ちます。

それでは、他に何ができるでしょうか。現代のCPUは、同じクロック速度で旧式のCPUよりもはるかに高速です。

クロック速度は、実際にはCPUの内部動作を非常に大雑把に近似したものにすぎません。 CPUのすべてのコンポーネントがその速度で動作するわけではありません。2ティックごとに1回動作するものなどがあります。

さらに重要なのは、単位時間あたりに実行できる命令の数です。これは、単一のCPUコアでどれだけ達成できるかを示す、はるかに優れた尺度です。いくつかの指示1クロックサイクルかかるものもあれば3サイクルかかるものもあります。例えば、除算は加算よりかなり遅くなります。

そのため、1秒間に実行できる命令の数を増やすことで、CPUのパフォーマンスを向上させることができます。どうやって?まあ、あなたは命令をより効率的にすることができます - 多分除算は今2サイクルだけかかります。それから 命令パイプライン があります。各命令を複数の段階に分割することで、命令を「並列に」実行することができます。ただし、各命令は、その前後の命令に対して明確に定義された順次順序を保持しているため、マルチコアのようなソフトウェアサポートは不要です。します。

他の方法があります:より専門的な指示です。私たちはSSEのようなものを見ました、それは一度に大量のデータを処理するための命令を提供します。同様の目標で、常に新しい命令セットが導入されています。これらも、ソフトウェアのサポートを必要とし、ハードウェアの複雑さを増しますが、それらは素晴らしいパフォーマンスの向上をもたらします。最近、AES-NIが発表されました。これは、ハードウェアで高速化されたAES暗号化および復号化を提供します。


1 とにかく、理論的な量子物理学を深く理解しなければなりません。

2 電界伝搬は真空中の光速ほど速くはないので、実際にはもっと低いかもしれません。また、これは直線距離だけのためのものです - 直線よりかなり長い少なくとも1つの経路がある可能性があります。

142
Bob

物理学は物理学です。私たちはこれまで以上に狭いスペースにもっと多くのトランジスタを詰め込むことはできません。いくつかの時点でそれはあなたが奇妙な量子がらくたを扱うように小さくなります。ある時点で、私たちは1年間にtimesのように多くのトランジスタを詰め込むことができません(これがムーアの法則です)。

生のクロックスピードは意味がありません。私の昔のPentium Mは現代のデスクトップCPUの約半分のクロック速度でした(それでも多くの点でより速い) - そして現代のシステムはbarely10年前にシステムの速度に近づいた(そして明らかに速い)。基本的に「ただ」クロック速度を上げても、多くの場合、実際のパフォーマンスは向上しません。それはsomesinglethreaded操作に役立つかもしれませんが、他のすべての観点から、より良い効率性のために設計予算を費やすことをお勧めします。

マルチコアでは、twoまたはそれ以上のことを一度に実行できます。そのため、次の処理が完了するのを待つ必要はありません。短期的には、(たとえば Pentium D sとそのMCMを使用して)既存の2つのコアを同じパッケージに単純にポップすることができます。トランジショナルデザイン)と2倍の速さのシステムがあります。最近のほとんどの実装は、もちろんメモリコントローラのようなものを共有しています。

さまざまな方法で賢く構築することもできます。 ARMはBig-Littleを行います - 4つの「弱い」低電力コアを4つのより強力なコアと一緒に動作させることで、両方の長所を利用できます。 Intelでは、スロットルを下げる(電力効率を上げるため)、またはspecificcoresをオーバークロックする(シングルスレッドのパフォーマンスを上げるため)。 AMDがモジュールで何かをしているのを覚えています。

ビデオ(ラップトップやAIWデザインではもっと重要です)だけでなく、メモリコントローラ(待ち時間が少ないため)やIO関連機能(最新のCPUにはノースブリッジがありません)のようなものも移動できます。 「ただ」クロック速度を上げ続けるよりも、これらのことを行う方が理にかなっています。

ある時点で 'more'コアが動かないかもしれません - GPUには数百のコアがあります。

このようにマルチコアでは、コンピュータはこれらすべての方法でsmarterを動作させることができます。

14
Journeyman Geek

簡単な答え

質問に対する最も簡単な答え

「コアを追加する」ことが「CPUを速くすること」と同じ物理的制限に直面しないのはなぜですか?

実際には質問の別の部分にあります。

私はその結論が「それゆえ、もっと大きなコンピュータを持っているか、私たちのプログラムを複数のコンピュータで動かさなくてはならないだろう」と結論づけるだろう。

本質的には、複数のコアは同じデバイス上に複数の「コンピュータ」を持つことに似ています。

複雑な答え

「コア」とは、実際に命令を処理する(加算、乗算、「and」など)コンピュータの一部です。コアは一度に1つの命令しか実行できません。あなたがあなたのコンピュータを「もっと強力」にしたいのなら、あなたができる2つの基本的なことがあります:

  1. スループットを上げる(クロックレートを上げる、物理サイズを減らすなど)
  2. 同じコンピュータでより多くのコアを使用する

#1の物理的な制限は、主に処理によって発生した熱を放出する必要性と、回路内の電子の速度です。これらのトランジスタのいくつかを別のコアに分割したら、熱の問題を大幅に軽減できます。

#2には重要な制限があります。問題を複数の独立した問題に分割してから、答えを組み合わせる必要があるということです。現代のパーソナルコンピュータでは、とにかくコアとの計算時間を争う多くの独立した問題があるので、これは実際には問題ではありません。しかし、集中的な計算上の問題をするとき、問題が並行性に従順であるならば、マルチコアは本当に役に立ちます。

9
Jason Brubaker

「コアを追加する」ことが「CPUを速くすること」と同じ物理的制限に直面しないのはなぜですか?

それらは同じ物理的制限に直面しますが、マルチコア設計への切り替えは私たちがそれらのいくつかにぶつかる前に私たちにいくらかの呼吸スペースを与えます。同時に、これらの制限によって引き起こされる他の問題が発生しますが、それらは克服するのがより簡単です。

事実1:消費電力と発熱量は、計算能力よりも早く成長します。 1 GHzから2 GHzまでCPUを押すと、消費電力が20 Wから80 Wに増加します。 (私はちょうどこれらの数字を作り上げました、しかしそれは全くそれがどのように機能するかです)

事実2:2つ目のCPUを購入し、両方を1 GHzで実行すると、計算能力が2倍になります。 1 GHzで動作している2つのCPUは、1つの2 GHz CPUと同じ量のデータを処理できますが、各CPUはわずか20 Wのエネルギー、つまり合計40 Wのエネルギーを消費します。

利益:クロック周波数の代わりにCPU数を2倍にするとエネルギーを節約でき、以前のように「周波数の障壁」に近づくことはできません。

問題:2つのCPU間で作業を分割し、後で結果を組み合わせる必要があります。

この問題を許容時間内に解決でき、節約したエネルギーよりも少ないエネルギーで済むのであれば、複数のCPUを使用することで利益が得られます。

これで、2つのCPUを1つのデュアルコアCPUに統合するだけで、家に帰ることができます。コアはCPUの一部を共有できるため、これは有益です。たとえば、cache( 関連の回答 )。

6
gronostaj

長い話を要約すると、シングルコアの高速化は限界に達しているので、限界に達するか、より良い材料に変更するまで(または確立された技術を覆すような根本的なブレークスルーを達成するまで)ホームサイズ、実際に動作している、量子コンピューティング)。

私はこの問題は多次元であると思います、そしてそれはより完全な絵を描くためにいくらかの執筆がかかるでしょう:

  1. 物理的限界(実際の物理学によって課される):光速、量子力学、すべてのこと。
  2. 製造上の問題:どのようにして必要な精度でこれまでより小さな構造を製造するのでしょうか。原材料関連の問題、回路製造に使用される材料、耐久性。
  3. 建築問題:熱、推論、電力消費など.
  4. 経済的な問題:ユーザーにより多くのパフォーマンスを提供するための最も安価な方法は何ですか?
  5. ユースケースとパフォーマンスに対するユーザーの認識。

もっとたくさんあるかもしれません。多目的CPUは、これらすべての要因(およびそれ以上)を1つの大量生産可能なチップにスクランブルして、市場の対象の93%に適合するソリューションを見つけようとしています。ご覧のとおり、最後のポイントは最も重要なポイント、つまり顧客の認識です。これは、顧客がCPUを使用する方法から直接導き出されます。

通常のアプリケーションは何ですか。たぶん:25のFirefoxタブ、それぞれが音楽を聴いている間、バックグラウンドでいくつかの広告を出しています。2時間前に始まったビルドジョブが終わるのを待っている間それはやるべきことがたくさんあります、そしてそれでもあなたは滑らかな経験が欲しいです。しかし、あなたのCPUはその時点で一つのタスクを処理することができます!一つのことで。だからあなたがすることは、物事を分割してルーンキューを作ることだ。あなたを除けば、すべてのものが遅れて滑らかにならないからです。

同じ時間内により多くの操作を実行するために、CPUを高速化します。しかしあなたが言ったように:熱と電力消費。そしてそれが私達が原料の部分に来るところです。シリコンは、温度が上がるにつれて導電性が高くなります。つまり、材料を加熱すると、材料に流れる電流が増えます。より速く切り替えると、トランジスタはより高い電力消費を持ちます。また、高周波は短いワイヤ間のクロストークを悪化させます。それで、あなたは、スピードアップアプローチが「メルトダウン」につながるであろうことを見ます。私たちがシリコンより優れた原材料やはるかに優れたトランジスタを持っていない限り、私たちはシングルコアのスピードでいるところで立ち往生しています。

これで私たちは始めた場所に戻ります。並行して物事を成し遂げる。別のコアを追加しましょう。これで、実際に一度に2つのことを実行できます。それでは、物事を少しクールにして、その作業を2つの、より強力ではないがより機能的なコアに分割できるソフトウェアを書くだけです。このアプローチには2つの大きな問題があります(それに加えて、ソフトウェアの世界がそれに適応するには時間が必要です)。1.チップを大きくするか、個々のコアを小さくします。 2.一部のタスクは、同時に実行される2つの部分に単純に分割することはできません。コアを縮小できる限りコアを追加し続けるか、チップを大きくして熱の問題を回避します。ああ、顧客を忘れないようにしましょう。ユースケースを変えると、業界はそれに適応する必要があります。モバイル部門が思いついたすべての光沢のある「新しい」ものをご覧ください。それが、モバイルセクターが非常に重要であると考えられており、誰もがそれを手に入れたいと思う理由です。

はい、この戦略は限界に達します。そしてIntelはこれを知っています、それで彼らは未来がどこか別の場所にあると彼らが言うのです。しかし、安くて効果的で実行可能である限り、彼らはそれをやり続けるでしょう。

大事なことを言い忘れましたが:物理学。量子力学はチップの縮小を制限するだろう。電子はシリコン中を光速で移動することができないので、光速はまだ制限されていません、実際にはそれよりはるかに遅いです。また、材料によって提供されるスピードにハードキャップをかけるのは、インパルススピードです。音が空気中よりも水中を速く進むのと同じように、電気インパルスは、例えばシリコンよりもグラフェンの中を速く進む。これは原料に戻ります。グラフェンはその電気的特性が及ぶ限りは素晴らしいです。それはのCPUを構築するためのはるかに優れた材料になるだろう、残念ながらそれは大量に生産することは非常に困難です。

5
paradoxon

あなたが100Fで動いているCPUを持っているとしましょう(非現実的な例として、それでもまだ問題を解決するはずです)。マルチコアが通常どのように機能するかは、CPUが100Fで動作しているクロック周波数を選択し、それを下げることによって速度をいくらか下げることです。それはもう暑くはないので、CPUの全体的な温度に大きな影響を与えずにマルチコアの恩恵を受けることなく、2、3、さらには4分の1の温度でそのすぐ隣を操作できます。これは明らかに、コアを1か所から1か所から制御する必要があるため、いくらかのオーバーヘッドを伴います。コアを追加すればするほど、オーバーヘッドが増えます。シングルコアに関しては、スピードを上げると、より多くの熱が発生します。これには明らかに物理的な制限があります(つまり、特定の時点を過ぎるとパフォーマンスに悪影響を及ぼし始め、熱くなりすぎると危険になります)。

時間が経つにつれて、彼らはCPUの物理的なサイズを減らす方法を見つけました、それで我々はまだもっと多くのスペースを必要とするという要件にまだ出くわしていません。サーバグレードのCPUは標準的なコンシューマグレードよりも物理的にかなり大きいので、物理的なサイズの制限のために、サーバグレードの機器の外側に書いています。

2
user2366842

計算能力限界に対する主な制限は、主に、回路を通って電子を動かすことができる速度の限界に関係していると思います。光の速度 電子ドリフト)。あなたが言ったように、もっと多くの要因があります。

追加のコアを追加しても、プロセッサの処理速度は向上しませんが、同じ時間内により多くのプロセッサを処理できます。

ムーアの法則 は非常に興味深く有益な読み物です。この引用は特にここに関連しています:

1キログラムの質量と1リットルの容量で、かなり実用的な「究極のラップトップ」の理論的性能を制限することもできます。これは、光速、量子スケール、重力定数、ボルツマン定数を考慮して行われ、性能は5.4258・10となります。50 1秒あたりの論理操作は約1031 ビット.

2
jredd

CPU = Car engine:16個のバルブを持つより強力なクルマ、つまりランボルギーニを作るのは、100 000 rpmで1つの巨大なValve /シリンダーを持つであろう高rpmクルマよりも簡単です。

その理由は物理的および化学的なもので、コアの数とコア速度のバランスを変えるためにシリコンを計算ロケット燃料に置き換える必要があります。

2
predatflaps

さらに長い話:

もっと速いCPUは必要ありません。いくつかの高度に特殊化された用途の外で* CPUは長年ボトルネックになっていません - メモリ、ストレージ、ネットワークのようなすべての周辺機器は通常CPUを何百万クロックサイクルも待たせます。 2番目のコアはより多くの「他のこと」をすることができ、その結果ユーザーにはより高いパフォーマンスの認識をもたらします。

多くのモバイル機器、ラップトップなどは、より良いバッテリー寿命とより低い温度のためにCPUをアンダークロックするでしょう。あなたの主要な顧客がそれを1.3GHzで動かすならば、3.5GHz ARMコアを開発することへのインセンティブはあまりありません。

  • これらの特殊な用途では、5GHzコアの開発を正当化するのに十分なほど購入できません。彼らはまた、熱や電力を気にする必要はありません - 利用可能な最速のものを購入し、それをオーバークロックし、トースターのサイズの水冷式ヒートシンクに固定します。
1
peter

短く簡単な答え:

1台のトラックから100台のトラックを100回運搬するのと同じ理由で、1台のトラックから100台のトラックを運搬するのと同じ物理的制限があるのではないでしょうか。

その質問に答えなさい、そうすればあなたの質問も答えられるでしょう。概念は大体同じです。

1
Alex D

もう一つの要因は温度だと思います。クロック周波数を上げると、コア温度が上昇します。コアを追加すると、消費電力が増えてもコア全体に分散されるため、温度は同じになります(同じ温度の2つの高温の液体を追加した場合と同様に、温度は同じになります)。 ).

もう1つの理由は、クロック周波数を上げると、周波数を上げる係数の2乗で消費電力が増加する傾向があることです(特定のポイントで他のどの障壁を打っているかによって異なります)。したがって、クロック周波数を上げると消費電力が2倍に増えますが、コアを追加しても線形的にしか増えません。

1
Morty

「コアを追加する」と「CPUを高速化する」の質問と同じ物理的制限に直面しないのは、マルチコアシステムはシングルコアCPUとまったく同じ制限に直面するからです。私たちは、シングルコアシステムをより速くするための選択肢が実際にはないという点に到達したので、一度にもっと多くのことができるようにしました。サイズと調整の課題は、現在、より速く進むよりも解決しやすいです。欠点は、タスクを細かく分割できないのであれば、シングルコアシステムよりもはるかに速くなることはないかもしれないということです。

0
Philip Tinney

単純にゲートを増やすだけでは、CPUを速くすることはできません。結局のところ、命令は実行されなければならず、各命令はいくつかの「切り替え」動作を必要とする。現在の最上位システムの速度を超えてCPUの「クロック速度」を上げることを非常に困難にする根本的な物理的限界(量子力学 - 不確定原理)があります。

0
Daniel R Hicks