通常、単一の命令の場合、6 マシンサイクルが必要です。
私の懸念は5番目のステップです。実行操作。これは、ADD、MUL、XADDなどを実行するデジタル回路のグループであるALUで実行されます。
私の質問:たとえば、ADDを実行するのにかかる時間(クロックサイクルの観点から)は、XADDを実行するのにかかる時間と同じですか?つまり、個々の操作のデジタル回路は、同じ数のクロックサイクルを消費するように設計されていますか?
言い換えれば、machine cylce時間は固定されていますか?
ほとんどの場合、はい、各ステージのサイクル時間は固定されています。プロセッサによっては、いくつかの例外があります。しかし、あなたが与える説明は非常に単純化されすぎています。最新のプロセッサはパイプラインに編成されているため、1つの命令の実行の1つの段階が他の命令と同時に発生する可能性があります。あなたが説明するように、いくつかのプロセッサは6ステージのパイプラインを使用しますが、それらは少数派です。最新のプロセッサのほとんどは、操作をさらに多くの段階に分割し、各段階に1サイクルかかります。たとえば、現世代のIntel Coreプロセッサには19のステージがあり、それぞれが1サイクルかかります。状況によっては、命令がそれらの1つをスキップする場合があります。通常、複数の命令が異なるステージで同時に実行されますが、状況によっては、他の操作の進行を妨げるものもあります(たとえば、分岐予測の誤り、またはまだ生成されていないデータを待機する必要があるために命令の準備ができていない場合)。また、プロセッサコアには複数のパイプラインがあるため、複数の命令が完全に並行して実行されます。一部のアーキテクチャでは、すべてのパイプラインがすべての命令タイプを実行できるわけではありません。命令のフェッチとデコードはすべてのパイプライン間で共有され、多くの場合、サイクルごとに多くの命令を処理できます。 Intel x86などのCISC命令に基づく最新のプロセッサでは、命令は実行前にRISCのようなマイクロ命令に変換されるため、1つのプログラム命令がパイプライン内の複数の命令に変換される場合があります(またはその逆)。実際の状況での実際のパフォーマンスを判断することは非常に困難です。
まず第一に、あなたが「典型的に」と言うとき、私はそれに同意しなければなりません。はい、教科書ではすべて互いに派生しており、パイプラインのそれらの州について話します。しかし、それはかなり前のことであり、パイプラインは世代ごとに(1、2年ごとに)サイズと形状が変化しています。しかし、それはあなたの質問には関係ありません。
答えは「それは依存する」ということです。彼らが何をしたいのかについては、特定のコアを設計する人々次第です。単純な論理演算の場合、and、or、notなど。本当に複数のものが必要な理由を正当化する必要があります。フラグの比較には別の可能性が必要であると主張する場合は、おそらく2つですが、ほとんどありません。固定小数点の加算。オペランドが非常に広く、ターゲットクロックレートのタイミングを閉じない場合を除き、複数のクロックは必要ありません。ただし、乗算または除算の場合、NビットのオペランドをN個のクロック数から1に変換するために必要なロジックの量は指数関数的に増加するため、乗算または除算がある場合、およびそこで1クロックにすることを選択した場合これは実際のトレードオフであり、ターゲットクロックレートのタイミングクロージャに遭遇する可能性があります。彼らは、ユニットあたりの歩留まりとコストを処理するか、たとえば2つのクロックを許可して、マージンを増やすかを選択できます。
要するに、絶対的な答え、典型的なパイプの設計、パイプラインの出現以来物事が何クロックかかるかについての一般的な仮定はありません。ビット単位の論理命令と加算/減算命令は1クロックである必要がありますが、他の命令は複数の場合もありますが、パイプに隠されていて、とにかく同じように感じる場合があります(パイプラインのポイント全体)。
あなたのモデルは典型的な最新のCPUの仕組みではないことを無視しましょう。数年前はかなり合理的でした。
最近のCPUでは、クロックレートは完全に固定されているわけではありませんが、命令によって変わることはありません。 CPUは温度を測定するか、オペレーティングシステムから、使用する電力をできるだけ少なくする必要があることを通知されます。その結果、かなりの時間(数ミリ秒)にわたってクロック速度が変化する可能性があります。したがって、クロックレートを下げて、発生する熱量を減らしたり、消費電力を減らしたりすることができます(電圧が下がると、すべての動作が遅くなりますが、大量の電力が節約されます)。
CPUの個々の操作は、正確に1サイクルに制限されます。その1サイクルで終了する必要があります。単一のサイクルで機能しないものは、それぞれが単一のサイクルをとるより多くの操作に分割されます。 xaddがaddよりもピコ秒かかる場合、CPU設計者には2つの選択肢があります。xaddを1サイクルで実行できるようにクロックサイクルを長くする(追加を必要以上に遅くする)か、クロックサイクルを短くする(十分に長い) addの場合、xadd命令を2つの作業単位に分割し、それぞれが1サイクルかかる。クロックサイクルの長さのその選択は、すべてに適用されます。
新しいIntelCPUのマイクロアーキテクチャの図をグーグルで検索することもできます。それはシステムに衝撃を与えるかもしれません:-)