「サイクルごとの命令」とは何ですか?


23

プロセッサの動作についてもう少し学習しましたが、サイクルごとの命令についての直接的な答えを見つけることができませんでした。

たとえば、4コアCPUはサイクルごとに4つの命令を実行できるという印象を受けていたため、2 Ghzで実行されている4コアCPUは1秒あたり80億の操作を実行します。これは事実ですか?

私はそれが物事を単純化しすぎていると確信していますが、ガイドまたは他の何かが私自身をまっすぐに設定するために使用できる場合、私は間違いなくアイデアにオープンです。


いいえ、そうではありません。最新のx86 CPUは、理想的な条件下ではサイクルあたりコアあたり3つの命令を保持できますが、一部の命令では数十サイクルが必要になる場合があります。
デビッドシュワルツ

回答:


22

おそらく検索すべきキーワードは、CISCRISC、およびスーパースカラーアーキテクチャです。

CISC

CISCアーキテクチャ(x86、68000、VAX)では、1つの命令は強力ですが、処理には複数のサイクルが必要です。古いアーキテクチャでは、サイクル数は固定されていましたが、現在では、命令あたりのサイクル数は通常、さまざまな要因(キャッシュヒット/ミス、分岐予測など)に依存します。そのようなものを検索するテーブルがあります。多くの場合、特定の状況下で特定の命令にかかるサイクル数を実際に測定することも容易になります(パフォーマンスカウンターを参照)。

Intelの詳細に興味がある場合は、Intel 64およびIA-32最適化リファレンスマニュアルをお読みください。

RISC

RISC(ARM、PowerPC、SPARC)アーキテクチャは、通常、1つの非常に単純な命令で数サイクル(多くの場合1サイクル)しかかかりません。

スーパースカラー

ただし、CISCまたはRISCに関係なく、スーパースカラーアーキテクチャがあります。CPUは1つの命令を次々に処理していませんが、多くの命令を同時に処理しています。これは、組立ラインと非常によく似ています。

結果は次のとおりです。プログラムのすべての命令のサイクルを単純に調べ、それらをすべて加算すると、多くの方法で最高になります。シングルコアRISC CPUがあるとします。1つの命令を処理する時間は1サイクルの時間より短くなることはありませんが、全体のスループットは1サイクルあたり数命令になる可能性があります。


9
私にとって、「組立ライン」の類推は、スーパースカラーアーキテクチャではなく、単なるパイプライン化を示唆しています。スーパースカラーでは、スループットを向上させるために、CPUハードウェアの一部(ボトルネックとなるパイプラインのステージなど)を複製します。
sblair

2
簡潔にするために、RISC =縮小命令セットを追加しています。CISC =複雑な命令セット。良い説明、キャッシュヒット/ミス率を指摘し、(最終的に)TLBを指摘したLudwig。マイクロプロセッサアーキテクチャの説明は簡単ではありません。特に、すべてを1つの(かなりコンパクトな)ポストに詰め込むのは簡単ではありません。:)
osij2is 09

1
私の聞くところによると、最近のCPUは、作業を待ってメインメモリから現れるのに多くの時間を費やしています。少なくとも、CPUに実行コアがこれ以上ない理由を尋ねたときに得た応答でした。
surfasb

32

私が考えているのは、洗濯物の例えです。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つのロードを実行できるとは限らないため、実際に実行される作業量は異なる場合があります。

分岐予測:さて、後で汚れた場合に備えて、きれいな服を着て洗濯を始めます。そうすれば、彼らはすでにきれいになります


いい例え。盗みます。
dmckee

6
また、ハイパースレッディングは、同じコインランドリーで数人が洗濯をするようなものです。
ロナルドポトル

1
分岐予測:来週に必要になると思われる衣服の洗濯を開始します
-Akash

2
ハイパースレッディング:他の人の洗濯物の受け入れを開始し、所有している洗濯機の台数を宣伝します(1)。すぐに、洗濯機には洗濯しているズボンの数以上のスペースがあることに気づきます。もう1組のズボンではなく、もっと小さいものです。靴下も入れます 今、2台の洗濯機を宣伝し、人々があなたが常に小さなアイテムで「穴を埋める」のに十分な多様な洗濯物を降ろすことを願っています。10人の汚いジーンズと1足の靴下が付属しているこの男が物を落としたとき、それはいつものように遅いです。
フロレンツクレー

@Akash念のため、まだ汚れのない服を洗っていますか?
ケビンパンコ

3

ではない正確に。参照しているサイクルはクロックサイクルであり、最新のプロセッサのほとんどはパイプラインであるため、1つの命令を実行するには数クロックサイクルかかります。(これは、最初の命令が終了する前に他の命令の実行を開始できるため、良いことです。)最も理想的な状況を想定すると、おそらく約80億IPCになりますが、依存関係、パイプラインのバブルなど、あらゆる種類のことが起こります、ブランチなど、常にうまくいくとは限りません。

申し訳ありませんが、簡単な答えには複雑すぎます。Jon Stokesは、この記事でそれをうまく説明しています


2

各命令のサイクル時間を調べて(または記憶さえ)、特定のコードのビットが終了するのに必要なクロック数を知ることができる日は、ハイエンドチップでは長い間過ぎています(しかし、マイクロコントローラー)。最新の汎用CPUコアは、複数のパイプラインに複数の異なる実行ユニットの複数のコピーを持ち、独自のロジックに加えて分岐予測および投機的実行機能を備えたマルチステージメモリキャッシュにアクセスします。単一のダイに複数のコアがあると、キャッシュ整合性ロジックやその他の複雑さが引きずられます。

そのため、簡単な答えは次のとおりです。コアが多いということは、物事を成し遂げる能力が大きいことを意味します


1

Ludwigは、CISCとRISCの違いを説明しましたが、RISC命令は単純で迅速ですが、個別にはほとんど動作しないため、CISCプロセッサの単一の命令と同じことを行うには、いくつかをつなぎ合わせる必要があります。その結果、一部のRISC命令は高速になり、他の命令は高速になりません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.