基本情報処理試験の勉強をしていると、
CPUの処理速度を表す単位の計算問題がいろいろ出てきて、よく分からなくなりました。
そこで自分の中でなんとなく整理しました。
本来の仕組みがうんぬんよりも、イメージで理解しようとしています。
#クロック周波数
##クロック周波数とは
パソコンの内部で、CPUなどに、動作のタイミングを指定するために、電圧の高・低を繰り返すクロック信号を与えます。
電圧の高・低でCPU内部の部品同士やメモリとのタイミングを同期させたクロック信号は、「1秒間に何回」というクロック周波数で速度が表現されます。
一般にクロック周波数が高いほど処理速度は高くなります。
クロック周波数は、BGMのようなものかなと思いました。
PCの中ではBGMが流れていて、そのテンポを刻むものをクロック周波数と表すことができます。
例えば私はハイテンポな音楽が好きなので、そういう音楽を聴くとテンションが上がります。
テンションが上がるとなんとなくやる気が出ます。
すると、作業のスピードも上がります。
CPUも同じで、
つまり、テンポの速いBGMを流すことができるCPU(クロック周波数の高いCPU)は、処理速度が高くなります。
反対に、私はクラシックを優雅に楽しむ環境で育たなかったため、
クラシックを聴くととても眠くなってしまいます。
眠い中むりやり仕事をしようとしても、なかなか作業が進まないです。
それをCPUでいうならば、
テンポのゆっくりしたBGMしか流すことができないCPU(クロック周波数の低いCPU)は、処理速度が低くなってしまいます。
1秒間にどのくらいのテンポのBGMが流れているのか・・という具体的な数値で表したものが、"クロック周波数"です。
あくまでクラシックが苦手な人の感覚になってしまいますが、私のイメージはこんな感じです。
#MIPS
##MIPSとは
コンピュータが1秒間に何百万回命令を実行できるか(処理速度)を示す単位。
1MIPSのコンピュータは、1秒間に100万回の命令を処理できます。
これは上の文章そのままの理解・・
クロック周波数とMIPS何が違うの!と思っていたけれど、
MIPSの方がより具体的な数値なのかなと思いました。
#CPI
CPUの処理速度を表す単位。
CPIとは、クロック周波数とMIPSを結びつけたもので、1命令の実行に要する平均クロック数を表します。
こちらの単語は知らなかったけど、知らないのうちに基本情報の計算問題に出ているかもと思いました。
1つの命令をAメロ流れている間に終えることができるCPUと、Bメロになってから終えるCPUだと前者の方が速いよねという感じなのかなと思いました。
#基本情報処理試験の問題を解く
上を踏まえて、基本情報処理試験の問題を解いてみました
##基本情報技術者 平成19年秋期 午前問19
1GHzで動作するCPUがある。このCPUは,機械語の1命令を平均0.8クロックで実行できることが分かっている。このCPUは1秒間に約何万命令実行できるか。
1秒間に1 * 1000(K) * 1000(M) * 1000(G)のクロック周波数が流れるCPUがあります。
このCPUは、機械語の1命令を平均0.8クロックで実行できるとのことなので、
1秒間の中に0.8クロックを何回流すことができるか考えると、
1,000,000,000 / 0.8 を計算すると1,250,000,000
問題文は「約何万命令」かと問われているので単位を合わせて、
答えは125,000万命令になります。
※こうしていちいち"0"をつけて計算していると、
桁数間違い。。ということがよくあるのですが、なかなか単位を合わせるのが難しくて結局このような解き方をしています。。。
##基本情報技術者 平成21年春期 午前問9
平均命令実行時間が20ナノ秒のコンピュータがある。このコンピュータの性能は何MIPSか。
1秒間 に ?百万回 命令を実行できたら ?MIPS かという問題なので、
※ 1秒間 に 100万回 命令を実行できたら 1MIPS
まずは何百万回命令を実行できるのかを計算します。
平均命令実行時間が20ナノ秒なので、1秒間に20ナノ秒が何個あるのか計算します。
1 / 20ナノ秒をすると、
※ 20ナノ秒は、20 / (100010001000)
上記の答えは50,000,000
つまり、このコンピュータは1秒間に50百万回の命令を実行できます。
つまり、答えは50MIPSになります。
別の計算の仕方
いつもお世話になっている基本情報ドットコムさんの解き方がスマートなので載せておきます。
MIPSは、1秒間に実行可能な命令数を百万単位で表したものです。言い換えると「1マイクロ秒(10-6秒)あたり何命令が実行可能か」ということです。
1つの命令を実行数するのに平均20ナノ秒(1ナノ秒=10-9秒)かかるので、1マイクロ秒間に実行可能な命令数は、
1000(ナノ秒)÷20(ナノ秒)=50(回)
と計算して、50MIPSという正解にたどりつくことができます。
こういう風に単位を合わせるのが苦手。。
けどこうすると計算ミスを防ぐことができるし、解く時間の短縮にもなるのでできるだけこちらの方法で解けるようになりたいと思います。