CPUは次のように動作する。
練習1:
左上のリンゴマーク→「このMacについて」で、今使っているCPUのクロック周波数が表示される。(ECCSのiMacでの話)
上記のように5回のクロックで1回加算ができると仮定すると、1秒間に何回加算ができるだろうか?
命令集合の例(CPUによって違う。以下はED21というシミュレータのもの。教科書表7.1とは少し違う)
命令のカテゴリ | 命令 | 内容 | 命令の16進表現 |
データ転送命令 | LOAD A | ACにアドレスAの内容を読みこむ | 0x0800+A |
LOADI D | DをACをセットする | 0x1000+D | |
STORE A | ACの内容をアドレスAに保存する | 0x1800+A | |
演算命令 | ADD A | ACの内容にアドレスAの内容を加算する | 0x3000+A |
SUB A | ACの内容にアドレスAの内容を減算する | 0x3800+A | |
MUL A | ACの内容にアドレスAの内容を乗算する | 0x4000+A | |
DIV A | ACの内容からアドレスAの内容を除算する。 ACの下位16ビットが商、上位16ビットが余りとなる | 0x4800+A | |
分岐命令 | J A | アドレスAにジャンプする(PCの値をAとする) | 0xD800+A |
JZ A | ACが0の時、アドレスAにジャンプする | 0xE800+A | |
JM A | ACが負の時、アドレスAにジャンプする | 0xE000+A | |
制御命令 | STOP 0 | プログラムを停止する | 0 |
ED21のプログラムのサンプルを使って 計算機シミュレータ(ED21) でプログラムがどのように実行されるかの実演をする。
参考: 最近はクロックを速くすることが限界に近づいてきているので、上で説明したCPUを「コア」と呼び、 複数のコアを使って複数の処理を並列に行うようになってきている。 ECCSで使っているiMacのCPUは Core 2 Duo といってコアが2つ内蔵されている。
参考: (高速な計算を行うための)スパコンでは多数のコアを使って高速に計算するようになっている。 スパコンランキングによると、 2008年11月時点の最速のスパコンはIBMのRoadrunnerであるが、 このコンピュータでは約12万9600個のコアを使って1秒間に最大1456.70x1012回の浮動小数点計算ができる。 電力消費は2483.47KWである。(黒部ダム)
コンピュータに関するものでは、個々のものはそれほど難しくないが、それを組合せると難しくなることが多い。 ここに潜む難しさをまとめて複雑さと呼ぶことにする。 コンピュータ発展の歴史は、「複雑さ」を克服する方法の歴史であったと言っても過言ではない。
複雑さを克服する方法のなかで重要なものが抽象化である。 抽象化とは「不要な要素を除いて単純化すること」である。 一連の操作がそのなかで完結するような抽象化をモデルと呼ぶので、「〜のモデル」という言い方もよく使われる。 教科書の第4章のデータモデルや第5章のプログラムの記述は具体的な抽象化(モデル化)の例である。 コンピュータが扱うデータは全て0と1で表現されているが、0と1で考えているのでは大変である。そこで、0と1を抽象化したものとしてデータモデルを考えるのである。 コンピュータのプログラムはload 1234やadd 5432などの命令からなるが、そのレベルで考えるのは大変である。そこで、命令を抽象化したモデルとしてプログラムの記述を考えるのである。 このような抽象的な思考方法を身につけることで情報はずっととっつきやすくなる。