コンピュータの構成原理を深く理解し、CPUの主周波数で性能を見る(自己向上8日目)
4636 ワード
みんなが菜鳥に関心を持つことを望んで、さもなくば後期の文章、各位は直ちに見ることができないかもしれません
文書ディレクトリ深入浅出コンピュータ構成原理 1、コンピュータ性能の2つの指標 2、コンピュータの計時単位:CPUクロック 皆さんは上記の知識点を理解しました.それでは、次は両者が結合したハイライトの時刻です. コンピュータの構成原理を深く浅くする
入門四知識点:
1、コンピュータ性能の二つの指標
①応答時間(Response time)または実行時間(Execution time)と呼び、1つのプログラムを実行するのにかかる時間を表します.②スループット(Throughput)または帯域幅(Bandwidth)とは、一定時間、コンピュータが実行できる命令の数を表す.
2、コンピュータの計時単位:CPUクロック
時間は自然に性能を測定するための指標ですが、時間で測定する場合、2つの問題があります.
1つ目は時間が正確ではないことです.どうして違うの?コンピュータは複数のプログラムを同時に実行している可能性があり、CPUは実際には各プログラム間を切り替え続けている.これらの抜けた時間の中で、CPUが別のプログラムを実行するように切り替える可能性が高い. 一部のプログラムは実行する時、ネット、ハードディスクからデータを読み取るかもしれません.ネットとハードディスクがデータを読み出して、メモリとCPUにあげます.
だから、あるプログラムの実行時間を正確に統計し、2つのプログラムの実際の性能を比較するには、これらの時間を削らなければなりません.
Linuxにはtimeというコマンドがあり、同じWall Clock Time(統計時間は「ストップウォッチ」のように、プログラムの実行が終了した時間からプログラムの実行が開始された時間を差し引いたものです.この時間はWall Clock TimeまたはElapsed Timeと呼ばれ、プログラムの実行中にかかった時間です)の下で、プログラムは実際にCPUにどれだけの時間を費やしたのか.次のコードを実行します.
ここでは通路がはっきりしていない私のブログを见ることができますLinuxオペレーティングシステムを熟知している常用コマンド(自己向上5日目)をよく知らないseqを见てこのブログをよく知らないwcを见て菜鸟教程wcを见てこの结果を得ることができます(もちろんこれはCPUの运行时间をテストするので、パソコンごとに异なって、同じパソコンも异なっているかもしれません)
timeコマンド.3つの値が返されます.
1つ目はreal time、つまり私たちが言ったWall Clock Time、つまりプログラムを実行する過程で流れた時間です.
2つ目はuser time、すなわちCPUがあなたのプログラムを実行し、ユーザー状態で命令を実行する時間(これはこのプロセスを実行するのに消費される実際のCPU時間であり、他のプロセスとこのプロセスがブロックされる時間は含まれていない).
3つ目はsys timeで、CPUがあなたのプログラムを実行し、オペレーティングシステムのカーネルで命令を実行する時間(すなわち、カーネルがシステム呼び出しを実行するために使用されるCPU時間)です.
プログラムが実際に費やしたCPU実行時間(CPU Time)は,user timeにsys timeを加えたものである.(プログラムが実際に使用するCPU時間は一般的にElapsed Timeよりかなり少ない)
でもここにrealが現れた
マルチプロセッサのシステムでは、1つのプロセスに複数のスレッドがある場合、または複数のサブプロセスがある場合、real timeがCPU time(user+sys time)よりも小さくなる可能性があります.これは、異なるスレッドまたはプロセスが並列に実行できるためです.言い換えれば、ここでの並列は真の並列であり、単一CPU上のマルチスレッド同時ではなく、システムにCPU(シングルコア)が1つしかない場合、マルチスレッドであってもreal例として、システム呼び出しがなく(すなわちsys timeが消費されず、user timeのみ)、単一スレッドで実行する時間が8 sである純粋な計算タスクがある.では、クアッドコアのマシンでは、パラレルアルゴリズムを採用し、4つのコアで一緒に計算し、理想的には完全にパラレルで、加速比が4、2 s以内で完了すれば、最初から最後までreal timeは2 sです.user timeは?2 s*4=8 sのはずです.したがって、real同様に,マルチCPUのマシン上のマルチスレッドプログラムについても,このような結果が得られる.このブログを参考にしてここでは分からないので深く考えなくてもいいです!!!
②次に、CPU時間を取得しても、2つのプログラムの性能の違いを直接「比較」できるとは限らない.ここはどうしてですか.同じコンピュータ上でも、CPUがフル稼働している可能性がありますし、周波数を下げて運転している場合は自然に時間がかかります. CPUに加えて、時間という性能指標は、マザーボード、メモリなどの他の関連ハードウェアの影響を受けます.
したがって,「時間」という我々が感知できる指標を分解し,プログラムのCPU実行時間をCPUクロックサイクル数(CPU Cycles)とクロックサイクル時間(Clock Cycle)の積にする必要がある.
プログラムのCPU実行時間=CPUクロックサイクル数×クロックサイクルタイム
まず、クロックサイクル時間とは何かを理解しましょう.このクロックサイクルは、あなたがパソコンを買う瞬間に確定しました.つまり、あなたのパソコンのCPUの「時計」が認識できる最小の時間間隔です(もちろん、これは自分で調整することができます).CPU内部には,我々が普段装着している電子石英時計と同様に,結晶発振器(Oscillator Crystal)というものがあり,略称は結晶振動である.我々は,CPU内部の電子時計として結晶振動を用いた.結晶振動がもたらす「滴下」は、クロックサイクル時間である.CPUの主周波数が高いほど、この時計(結晶振動)が速くなることを意味し、私たちのCPUも「追い詰められる」ほど速くなる.
次に式に戻ると、プログラムのCPU実行時間を減らしたいので、クロックサイクル時間を減らして、主周波数を高めるべきですが、これは主なものではないようです.結局、この結晶振動は固定されています.人為的に変えなければ短くなりません.あるいは、もっと良いものを買う必要がありますが、これは現実的ではありません.CPUクロックのサイクル数を目標にしています
CPUクロックサイクル数については、もう1つ分解して「指令数」にすることができます.×各命令の平均クロックサイクル数(Cycles Per Instruction、CPI)」.命令によって必要なCyclesは異なり、加算と乗算はCPU命令に対応しているが、乗算に必要なCyclesは加算よりも多く、自然と遅い.したがって、
プログラムのCPU実行時間=指令数×CPI×クロックサイクルタイム
したがって、パフォーマンスの問題を解決するには、この3つを最適化する必要があります.クロックサイクル時間は、コンピュータハードウェアに依存するコンピュータの主周波数である.私たちがよく知っているモルの法則は、私たちのコンピュータの主周波数を絶えず向上させています.例えば、私が最初に使った80386の主周波数は33 MHzで、今手元のノートパソコンは2.8 GHzで、主周波数の面では、100倍近く上昇した[しかし、現在の方法はあまり実現されていない.主周波数を引き続き向上させるため、消費電力も放熱も問題であり、他の部品がリズムに追いつかないのもむだである.これも多くのメーカーの主周波数が後退しない理由だ]. 各命令の平均クロックサイクル数CPIは、1つの命令がどれだけのCPU Cycleを必要とするか[コンピュータが1つの命令を実行するのに必要なクロックサイクル数]である.後でCPUの構造を説明すると、現代のCPUはパイプライン技術(Pipeline)を通じて、命令に必要なCPU Cycleをできるだけ少なくしていることがわかります.したがって,CPIの最適化は,計算機構成とアーキテクチャにおける重要な一環でもある. 命令数は、私たちのプログラムを実行するのにどれだけの命令が必要なのか、どの命令が必要なのかを表します.これは多くの場合、コンパイラに挑戦を任せます.同じコードをコンピューター命令にコンパイルするとき、いろいろな表現があります.
(ここでは、CPUの実行時間を短縮する方法について説明します)
みんなは上の知識点を理解して、それでは次に両者の結合のハイライトの時です
1、荷物を運ぶのと比べると、私たちの応答時間が速い(スピードが速い)と、自然と同じ時間にもっと多くのものを運ぶことができ、スループットも自然に高くなります.
2、応答時間を高める以外に、私たちはもっと多くの人を来ることができます.例えば、今のマルチコアコンピュータは、より多くのプロセッサーを増やすことです(労働者を増やすことです).そのスピードは自然に上がります(ここで注意深い読者は、私が言ったことを発見します.つまり、real
3、スループットを上げる方法はたくさんあります.ほとんどの場合、私たちは機械をもっと増やして、ハードウェアをたくさん積めばいいです.(しかしこれも定性的なものなので、考慮範囲は大きくなく、同:結晶振動)
4、性能の定義は応答時間の逆数として定義されている.つまり、性能=1/応答時間(クロック周期は上で理解しているが、ここでの応答時間(プログラム実行終了時間からプログラム実行開始時間を差し引く)である.
文書ディレクトリ
入門四知識点:
1、コンピュータ性能の二つの指標
①応答時間(Response time)または実行時間(Execution time)と呼び、1つのプログラムを実行するのにかかる時間を表します.②スループット(Throughput)または帯域幅(Bandwidth)とは、一定時間、コンピュータが実行できる命令の数を表す.
2、コンピュータの計時単位:CPUクロック
時間は自然に性能を測定するための指標ですが、時間で測定する場合、2つの問題があります.
1つ目は時間が正確ではないことです.どうして違うの?
だから、あるプログラムの実行時間を正確に統計し、2つのプログラムの実際の性能を比較するには、これらの時間を削らなければなりません.
Linuxにはtimeというコマンドがあり、同じWall Clock Time(統計時間は「ストップウォッチ」のように、プログラムの実行が終了した時間からプログラムの実行が開始された時間を差し引いたものです.この時間はWall Clock TimeまたはElapsed Timeと呼ばれ、プログラムの実行中にかかった時間です)の下で、プログラムは実際にCPUにどれだけの時間を費やしたのか.次のコードを実行します.
time seq 1000000 | wc -l // , 1 1000000 , wc ,
ここでは通路がはっきりしていない私のブログを见ることができますLinuxオペレーティングシステムを熟知している常用コマンド(自己向上5日目)をよく知らないseqを见てこのブログをよく知らないwcを见て菜鸟教程wcを见てこの结果を得ることができます(もちろんこれはCPUの运行时间をテストするので、パソコンごとに异なって、同じパソコンも异なっているかもしれません)
1000000
real 0m0.013s
user 0m0.017s
sys 0m0.008s
timeコマンド.3つの値が返されます.
1つ目はreal time、つまり私たちが言ったWall Clock Time、つまりプログラムを実行する過程で流れた時間です.
2つ目はuser time、すなわちCPUがあなたのプログラムを実行し、ユーザー状態で命令を実行する時間(これはこのプロセスを実行するのに消費される実際のCPU時間であり、他のプロセスとこのプロセスがブロックされる時間は含まれていない).
3つ目はsys timeで、CPUがあなたのプログラムを実行し、オペレーティングシステムのカーネルで命令を実行する時間(すなわち、カーネルがシステム呼び出しを実行するために使用されるCPU時間)です.
プログラムが実際に費やしたCPU実行時間(CPU Time)は,user timeにsys timeを加えたものである.(プログラムが実際に使用するCPU時間は一般的にElapsed Timeよりかなり少ない)
でもここにrealが現れた
マルチプロセッサのシステムでは、1つのプロセスに複数のスレッドがある場合、または複数のサブプロセスがある場合、real timeがCPU time(user+sys time)よりも小さくなる可能性があります.これは、異なるスレッドまたはプロセスが並列に実行できるためです.言い換えれば、ここでの並列は真の並列であり、単一CPU上のマルチスレッド同時ではなく、システムにCPU(シングルコア)が1つしかない場合、マルチスレッドであってもreal
②次に、CPU時間を取得しても、2つのプログラムの性能の違いを直接「比較」できるとは限らない.ここはどうしてですか.
したがって,「時間」という我々が感知できる指標を分解し,プログラムのCPU実行時間をCPUクロックサイクル数(CPU Cycles)とクロックサイクル時間(Clock Cycle)の積にする必要がある.
プログラムのCPU実行時間=CPUクロックサイクル数×クロックサイクルタイム
まず、クロックサイクル時間とは何かを理解しましょう.このクロックサイクルは、あなたがパソコンを買う瞬間に確定しました.つまり、あなたのパソコンのCPUの「時計」が認識できる最小の時間間隔です(もちろん、これは自分で調整することができます).CPU内部には,我々が普段装着している電子石英時計と同様に,結晶発振器(Oscillator Crystal)というものがあり,略称は結晶振動である.我々は,CPU内部の電子時計として結晶振動を用いた.結晶振動がもたらす「滴下」は、クロックサイクル時間である.CPUの主周波数が高いほど、この時計(結晶振動)が速くなることを意味し、私たちのCPUも「追い詰められる」ほど速くなる.
次に式に戻ると、プログラムのCPU実行時間を減らしたいので、クロックサイクル時間を減らして、主周波数を高めるべきですが、これは主なものではないようです.結局、この結晶振動は固定されています.人為的に変えなければ短くなりません.あるいは、もっと良いものを買う必要がありますが、これは現実的ではありません.CPUクロックのサイクル数を目標にしています
CPUクロックサイクル数については、もう1つ分解して「指令数」にすることができます.×各命令の平均クロックサイクル数(Cycles Per Instruction、CPI)」.命令によって必要なCyclesは異なり、加算と乗算はCPU命令に対応しているが、乗算に必要なCyclesは加算よりも多く、自然と遅い.したがって、
プログラムのCPU実行時間=指令数×CPI×クロックサイクルタイム
したがって、パフォーマンスの問題を解決するには、この3つを最適化する必要があります.
(ここでは、CPUの実行時間を短縮する方法について説明します)
みんなは上の知識点を理解して、それでは次に両者の結合のハイライトの時です
1、荷物を運ぶのと比べると、私たちの応答時間が速い(スピードが速い)と、自然と同じ時間にもっと多くのものを運ぶことができ、スループットも自然に高くなります.
2、応答時間を高める以外に、私たちはもっと多くの人を来ることができます.例えば、今のマルチコアコンピュータは、より多くのプロセッサーを増やすことです(労働者を増やすことです).そのスピードは自然に上がります(ここで注意深い読者は、私が言ったことを発見します.つまり、real
3、スループットを上げる方法はたくさんあります.ほとんどの場合、私たちは機械をもっと増やして、ハードウェアをたくさん積めばいいです.(しかしこれも定性的なものなので、考慮範囲は大きくなく、同:結晶振動)
4、性能の定義は応答時間の逆数として定義されている.つまり、性能=1/応答時間(クロック周期は上で理解しているが、ここでの応答時間(プログラム実行終了時間からプログラム実行開始時間を差し引く)である.