プロセッサの動作についてもう少し学習しましたが、サイクルごとの命令についての直接的な答えを見つけることができませんでした。
たとえば、4コアCPUはサイクルごとに4つの命令を実行できるという印象を受けていたため、2 Ghzで実行されている4コアCPUは1秒あたり80億の操作を実行します。これは事実ですか?
私はそれが物事を単純化しすぎていると確信していますが、ガイドまたは他の何かが私自身をまっすぐに設定するために使用できる場合、私は間違いなくアイデアにオープンです。
プロセッサの動作についてもう少し学習しましたが、サイクルごとの命令についての直接的な答えを見つけることができませんでした。
たとえば、4コアCPUはサイクルごとに4つの命令を実行できるという印象を受けていたため、2 Ghzで実行されている4コアCPUは1秒あたり80億の操作を実行します。これは事実ですか?
私はそれが物事を単純化しすぎていると確信していますが、ガイドまたは他の何かが私自身をまっすぐに設定するために使用できる場合、私は間違いなくアイデアにオープンです。
回答:
おそらく検索すべきキーワードは、CISC、RISC、およびスーパースカラーアーキテクチャです。
CISCアーキテクチャ(x86、68000、VAX)では、1つの命令は強力ですが、処理には複数のサイクルが必要です。古いアーキテクチャでは、サイクル数は固定されていましたが、現在では、命令あたりのサイクル数は通常、さまざまな要因(キャッシュヒット/ミス、分岐予測など)に依存します。そのようなものを検索するテーブルがあります。多くの場合、特定の状況下で特定の命令にかかるサイクル数を実際に測定することも容易になります(パフォーマンスカウンターを参照)。
Intelの詳細に興味がある場合は、Intel 64およびIA-32最適化リファレンスマニュアルをお読みください。
RISC(ARM、PowerPC、SPARC)アーキテクチャは、通常、1つの非常に単純な命令で数サイクル(多くの場合1サイクル)しかかかりません。
ただし、CISCまたはRISCに関係なく、スーパースカラーアーキテクチャがあります。CPUは1つの命令を次々に処理していませんが、多くの命令を同時に処理しています。これは、組立ラインと非常によく似ています。
結果は次のとおりです。プログラムのすべての命令のサイクルを単純に調べ、それらをすべて加算すると、多くの方法で最高になります。シングルコアRISC CPUがあるとします。1つの命令を処理する時間は1サイクルの時間より短くなることはありませんが、全体のスループットは1サイクルあたり数命令になる可能性があります。
私が考えているのは、洗濯物の例えです。CPU命令は、洗濯物の負荷のようなものです。負荷ごとに洗濯機と乾燥機の両方を使用する必要があります。それぞれの実行に30分かかるとしましょう。それがクロックサイクルです。古いCPUは洗濯機を実行し、次に乾燥機を実行し、毎回洗濯の各負荷を完了するのに60分(2サイクル)かかります。
パイプライン処理: パイプラインは、両方を同時に使用する場合です。つまり、荷物を洗い、それが乾燥している間に次の荷物を洗います。最初のロードは完了するのに2サイクルかかりますが、2番目のロードはさらに1サイクル後に完了します。したがって、最初のロードを除き、ほとんどのロードに必要なのは1サイクルのみです。
スーパースカラー: すべての洗濯物をコインランドリーに運びます。2個のワッシャーを入手して、両方にロードします。完了したら、2台のドライヤーを見つけて、両方を使用します。これで、2つの荷物を60分間で洗濯および乾燥できます。2サイクルで2回の負荷です。各ロードにはまだ2サイクルかかりますが、今はもっと多くの負荷をかけることができます。現在、平均時間はサイクルあたり1ロードです。
パイプライン処理を伴うスーパースカラー: 最初の2つの負荷を洗浄し、これらが乾燥している間に、次の2つの負荷でワッシャーを負荷します。現在、最初の2つのロードはまだ2サイクルかかり、次の2つのロードはさらに1サイクル後に終了します。そのため、ほとんどの場合、各サイクルで2つのロードを完了します。
複数のコア:洗濯物の半分を母親に与えます。母親には洗濯機と乾燥機が2つずつあります。一緒に作業することで、2倍の成果を上げることができます。これはスーパースカラーに似ていますが、わずかに異なります。すべての洗濯物を自分で各マシンに移動させる必要があるのではなく、彼女はあなたと同時にそれを行うことができます。
これは素晴らしいことです。同じ時間内に以前の8倍の洗濯をすることができ、より速いマシンを作成する必要はありません。(クロック速度を2倍にする:実行に15分しかかからない洗濯機。)
それでは、物事がどのようにうまくいかないかについて話しましょう。
パイプラインの泡: 洗浄で出なかったしみがあるので、もう一度洗浄することにします。今、ドライヤーはただそこに座って、何かするのを待っています。
キャッシュミス:汚れた洗濯物を運ぶトラックが渋滞しています。現在、2つの洗濯機と2つの乾燥機がありますが、待機する必要があるため、作業は完了していません。
問題が発生する頻度によっては、サイクルごとに常に4つのロードを実行できるとは限らないため、実際に実行される作業量は異なる場合があります。
分岐予測:さて、後で汚れた場合に備えて、きれいな服を着て洗濯を始めます。そうすれば、彼らはすでにきれいになります。
各命令のサイクル時間を調べて(または記憶さえ)、特定のコードのビットが終了するのに必要なクロック数を知ることができる日は、ハイエンドチップでは長い間過ぎています(しかし、マイクロコントローラー)。最新の汎用CPUコアは、複数のパイプラインに複数の異なる実行ユニットの複数のコピーを持ち、独自のロジックに加えて分岐予測および投機的実行機能を備えたマルチステージメモリキャッシュにアクセスします。単一のダイに複数のコアがあると、キャッシュ整合性ロジックやその他の複雑さが引きずられます。
そのため、簡単な答えは次のとおりです。コアが多いということは、物事を成し遂げる能力が大きいことを意味します。
サイクルは、コアごとの概念です。各コアは、独自のサイクルを並行して実行します。