1

プロセッサ速度が特定のループの実行時間にどのように影響するかについて、次の概念を理解するのに苦労しました。

3GHz プロセッサを搭載し、1 サイクルあたり 64 ビット演算を実行できるコンピューターの場合、次のループはどのくらいの時間実行されますか?

long long int x; for(x = 0 x<=0; x--){}

4

1 に答える 1

0

コンパイラは、結果が使用されていないことを検出する可能性があるため、このループを完全に最適化する可能性があります。

しかし、ループが実際にコンパイルされている場合、速度の上限は反復ごとに 2 サイクルになると推測されます。はい、プロセッサはおそらくスーパースケーラであるため、1 サイクルで複数の命令を実行できる場合がありますが、一方で、1 つの命令は分岐であり、パイプラインを壊す傾向があります。

したがって、2 つのサイクルを推測すると、そのループを実行するのに約 1 世紀かかります。

irb> 2**63/(3*10**9)/60/60/24/7/52 # => 97 years

これはサーバー、UPS 機器、および電力網の MTBF よりもはるかに長いため、ループが終了することはないと言いたくなりますが、VM で実行して定期的にチェックポイントを設定することもできます。:-)

もちろん、経験的証拠が利用できる場合、憶測の愚かさに関するギリシャの寓話があります。ループを短時間実行してから、2 63回の反復の実際の結果を計算してみませんか? 今日の複雑なマイクロアーキテクチャを本当に理解しているのは、設計者以外にはほとんどいないため、推測は困難です。多くの実際的な問題もあります: コンパイラはループをアンロールできますか? おそらく、特定のものを測定できるように、アセンブリで記述する必要がありますか?

于 2013-04-14T21:14:37.453 に答える