1.クロック 2.命令カウンタ 3.命令レジスタ 4.命令デコーダ 5.汎用レジスタ 6.演算回路 |
|
コラム. マルチコア(cores)、マルチスレッド(threads) |
私のノートパソコンのflops測定結果をこちらに示す。終了前に止めたが、クロック周波数(CPU frequency)2.6GHzに対し平均82G(ギガ)Flopsでている。実は最近のCPUは前ページで説明したCPU(演算ユニット、コア)を複数備えており、複数の処理(スレッド)を並行させたり、1クロックの間に複数の浮動小数点演算を行うなど様々な工夫が可能な場合のflopsを測っている。 因みに、姫野ベンチマーク(Macでの実行は難しい)では、2.16GFlopsと、これらの工夫が除かれた数値が得られる。 |
コラム. コンピュータの遂次性と局所性 |
コンピュータは高速大容量である。しかし、大量データを一瞬のうちに処理でき(るように見え)てもそれらを同時並列的に処理できるわけではない。CPUは、64(32)ビットの極めて小さなデータに対する単純な命令を逐次的に実行する。そのデータサイズは画像なら1,2点の色情報に過ぎない。 人は、画像全体を眺めて「空の絵」や「青っぽい」等と判断する。コンピュータが「青っぽい」と判断するには、画像の点を一つ一つ調べ、青い点が何パーセント以上含まれる、といった計算が必要になるだろう。一般に、与えられた画像が何の絵かを正確に判断すること(画像認識)はコンピュータにとって容易ではなく、AI(人工知能)の主要テーマでもある。 コンピュータ処理の局所性は、キャッシュがうまく働く理由にもなっている。人が大きな画像全体を眺めるときのように、メモリー全体に散らばっているデータをランダムに読み書きするとキャッシュ中のデータの置き換えが頻繁に生じて効率は著しく低下するが、通常そのようなことは起きない。 コンピュータ処理のこのような逐次性と局所性を理解することは、コンピュータと付き合う上で重要なポイントである。これについては梅津信幸著「あなたはコンピュータを理解していますか」(技術評論社) を薦める。 |
番地 | 内容 |
1000 | LD GR 2000 |
1001 | ADD GR 2001 |
1002 | ST GR 2002 |
… | ・・・ |
2000 | 500 |
2001 | 50 |
2002 | |
… |
カウンタ | 命令 | GR | 2000 | 2001 | 2002 | 備考 | |
1 | 1000 | LD GR 2000 | 500 | 500 | 50 | ||
2 | 1001 | ADD GR 2001 | 550 | 500 | 50 | 550=500+50 | |
3 | 1002 | ST GR 2002 | 550 | 500 | 50 | 550 |
メモリ内に左図のプログラムとデータがあり、命令カウンタの値が1000であるとする。 1. 上記説明や前ページの例にならって、コンピュータ(CPU)の計算過程を示し、END(終了)命令に到達したときの2002番地の値を求めよ。ただし新たな命令の意味は以下の通りであるとする。 SUB GR 2001 はGRから2001番地の値を引く命令 JPL GR 1001 はGRの値が正ならば命令カウンタの値を1001にする命令
2. 2000番地の値が 35で 2001番地の値が 4のとき、END命令に到達したときの 2002番地の値はいくつか。 |
|
|
実習.Kazuhiko Arase 氏による論理回路シミュレータSimcirJS |
{"width":320, "height":250, "showToolbox":true,
"toolbox":[
{"type":"NOT"},{"type":"AND"},{"type":"OR"},
{"type":"DC"},{"type":"LED"},{"type":"Toggle","label":"x"},{"type":"Toggle","label":"y"}
],
"devices":[
{"type":"DC","id":"dev0","x":8,"y":16,"label":"DC"},
{"type":"LED","id":"dev1","x":160,"y":16,"label":"LED"},
{"type":"Toggle","label":"X","id":"dev2","x":56,"y":16,"state":{"on":false}},
{"type":"DC","id":"dev3","x":8,"y":80,"label":"DC"},
{"type":"Toggle","label":"X","id":"dev4","x":56,"y":80,"state":{"on":false}},
{"type":"LED","id":"dev5","x":160,"y":80,"label":"LED"},
{"type":"NOT","id":"dev6","x":112,"y":80,"label":"NOT"},
{"type":"Toggle","label":"X","id":"dev7","x":56,"y":136,"state":{"on":false}},
{"type":"Toggle","label":"Y","id":"dev8","x":56,"y":192,"state":{"on":false}},
{"type":"AND","id":"dev9","x":120,"y":160,"label":"AND"},
{"type":"LED","id":"dev10","x":168,"y":160,"label":"LED"},
{"type":"DC","id":"dev11","x":8,"y":160,"label":"DC"}
],
"connectors":[
{"from":"dev1.in0","to":"dev2.out0"},
{"from":"dev2.in0","to":"dev0.out0"},
{"from":"dev4.in0","to":"dev3.out0"},
{"from":"dev5.in0","to":"dev6.out0"},
{"from":"dev6.in0","to":"dev4.out0"},
{"from":"dev7.in0","to":"dev11.out0"},
{"from":"dev8.in0","to":"dev11.out0"},
{"from":"dev9.in0","to":"dev7.out0"},
{"from":"dev9.in1","to":"dev8.out0"},
{"from":"dev10.in0","to":"dev9.out0"}
]
}
右のシミュレータでは、電源(DC)につながった入力ボタン(X,Y)をクリックすると、そのON(1)/OFF(0)に応じて回路の出力LEDが点(1)滅(0)する。① NOT素子とAND素子の働きを調べよう。 ② AND素子をOR素子に置き換えてその働きを調べよう |
|
|
論理式の等式 | ⇔ | 双対論理式の等式 |
X∧¬X=0 | ⇔ | X∨¬X=1 |
X∨(X∧Y)=X | ⇔ | X∧(X∨Y)=X |
A B | A+Bの 上の桁C | A+Bの 下の桁S |
0 0 | 0 | 0 |
0 1 | 0 | 1 |
1 0 | 0 | 1 |
1 1 | 1 | 0 |
A B | A+Bの 上の桁C | A+Bの 下の桁S | その行でだけ1 になる論理式 |
0 0 | 0 | 0 | ¬A∧¬B |
0 1 | 0 | 1 | ¬A∧B |
1 0 | 0 | 1 | A∧¬B |
1 1 | 1 | 0 | A∧B |
論理式 | C=A∧B | S=(¬A∧B)∨(A∧¬B) |
実験.論理式の真理値表 |
右の欄に論理式を入力して[評価]を押すと真理値表が表示される。論理記号は &(∧), |(∨), !(¬) を用い、例えば (¬x∧y)∨(x∧¬y) は !x&y|x&!y と表せる。 以下の論理式を入力して、上の議論を確かめてみよ。
|
{ "width":450,
"height":200,
"showToolbox":true,
"toolbox":[
{"type":"NOT"},
{"type":"AND"},
{"type":"OR"},
{"type":"DC"},
{"type":"LED"},
{"type":"Toggle"}
],
"devices":[
{"type":"DC","id":"dev0","x":8,"y":48,"label":"DC"},
{"type":"NOT","id":"dev1","x":136,"y":8,"label":"NOT"},
{"type":"AND","id":"dev2","x":144,"y":136,"label":"AND"},
{"type":"AND","id":"dev3","x":192,"y":16,"label":"AND"},
{"type":"Toggle","id":"dev4","x":64,"y":8,"label":"A","state":{"on":false}},
{"type":"AND","id":"dev5","x":192,"y":72,"label":"AND"},
{"type":"NOT","id":"dev6","x":136,"y":80,"label":"NOT"},
{"type":"Toggle","id":"dev7","x":64,"y":80,"label":"B","state":{"on":false}},
{"type":"LED","id":"dev8","x":248,"y":136,"label":"C"},
{"type":"OR","id":"dev9","x":240,"y":40,"label":"OR"},
{"type":"LED","id":"dev10","x":296,"y":136,"label":"S"}
],
"connectors":[
{"from":"dev1.in0","to":"dev4.out0"},
{"from":"dev2.in0","to":"dev4.out0"},
{"from":"dev2.in1","to":"dev7.out0"},
{"from":"dev3.in0","to":"dev1.out0"},
{"from":"dev3.in1","to":"dev7.out0"},
{"from":"dev4.in0","to":"dev0.out0"},
{"from":"dev5.in0","to":"dev4.out0"},
{"from":"dev5.in1","to":"dev6.out0"},
{"from":"dev6.in0","to":"dev7.out0"},
{"from":"dev7.in0","to":"dev0.out0"},
{"from":"dev8.in0","to":"dev2.out0"},
{"from":"dev9.in0","to":"dev3.out0"},
{"from":"dev9.in1","to":"dev5.out0"},
{"from":"dev10.in0","to":"dev9.out0"}
]
}
|
|
{
"width":450,
"height":460,
"showToolbox":true,
"toolbox":[
{"type":"HalfAdder"},
{"type":"FullAdder"},
{"type":"OR"},
{"type":"NOT"},
{"type":"AND"},
{"type":"DC"},
{"type":"LED"},
{"type":"Toggle"},
{"type":"4bitAdder"}
],
"devices":[
{"type":"DC","id":"dev0","x":0,"y":64,"label":"DC"},
{"type":"Toggle","id":"dev1","x":56,"y":192,"label":"A0","state":{"on":false}},
{"type":"Toggle","id":"dev2","x":56,"y":248,"label":"A1","state":{"on":false}},
{"type":"Toggle","id":"dev3","x":56,"y":352,"label":"A3","state":{"on":false}},
{"type":"Toggle","id":"dev4","x":56,"y":304,"label":"A2","state":{"on":false}},
{"type":"Toggle","id":"dev5","x":112,"y":336,"label":"B2","state":{"on":false}},
{"type":"Toggle","id":"dev6","x":112,"y":400,"label":"B3","state":{"on":false}},
{"type":"Toggle","id":"dev7","x":112,"y":280,"label":"B1","state":{"on":false}},
{"type":"Toggle","id":"dev8","x":112,"y":216,"label":"B0","state":{"on":false}},
{"type":"DC","id":"dev9","x":0,"y":280,"label":"DC"},
{"type":"Toggle","id":"dev10","x":48,"y":64,"label":"A","state":{"on":false}},
{"type":"Toggle","id":"dev11","x":48,"y":0,"label":"Cin","state":{"on":false}},
{"type":"Toggle","id":"dev12","x":48,"y":120,"label":"B","state":{"on":false}},
{"type":"HalfAdder","id":"dev13","x":96,"y":88,"label":"HalfAdder1"},
{"type":"HalfAdder","id":"dev14","x":152,"y":16,"label":"HalfAdder2"},
{"type":"OR","id":"dev15","x":240,"y":80,"label":"OR"},
{"type":"LED","id":"dev16","x":304,"y":16,"label":"S"},
{"type":"LED","id":"dev17","x":304,"y":80,"label":"Cout"},
{"type":"HalfAdder","id":"dev18","x":184,"y":184,"label":"HalfAdder"},
{"type":"FullAdder","id":"dev19","x":184,"y":248,"label":"FullAdder1"},
{"type":"LED","id":"dev20","x":304,"y":184,"label":"S0"},
{"type":"FullAdder","id":"dev21","x":184,"y":320,"label":"FullAdder2"},
{"type":"FullAdder","id":"dev22","x":184,"y":392,"label":"FullAdder3"},
{"type":"LED","id":"dev23","x":304,"y":416,"label":"Cout"},
{"type":"LED","id":"dev24","x":304,"y":240,"label":"S1"},
{"type":"LED","id":"dev25","x":304,"y":304,"label":"S2"},
{"type":"LED","id":"dev26","x":304,"y":360,"label":"S3"}
],
"connectors":[
{"from":"dev1.in0","to":"dev9.out0"},
{"from":"dev2.in0","to":"dev9.out0"},
{"from":"dev3.in0","to":"dev9.out0"},
{"from":"dev4.in0","to":"dev9.out0"},
{"from":"dev5.in0","to":"dev9.out0"},
{"from":"dev6.in0","to":"dev9.out0"},
{"from":"dev7.in0","to":"dev9.out0"},
{"from":"dev8.in0","to":"dev9.out0"},
{"from":"dev10.in0","to":"dev0.out0"},
{"from":"dev11.in0","to":"dev0.out0"},
{"from":"dev12.in0","to":"dev0.out0"}
]
}
|
コラム.ティンカートイ コンピュータ |
電子(電気)部品でなくとも、一方のON/OFFで他方のON/OFFが制御できればコンピュータを作れる。ティンカートイ(tinkertoy、木組みのおもちゃ)で、三目並べをするコンピュータをどうやって作るかに関するDewdneyの記事(SCIENTIFIC AMERICAN October 1989)を見よ。 |
{ "width":450,
"height":320,
"showToolbox":true,
"toolbox":[
{"type":"DC"},
{"type":"LED"},
{"type":"Toggle"},
{"type":"Switch"},
{"type":"NOT"},
{"type":"AND"},
{"type":"OR"}
],
"devices":[
{"type":"Toggle","id":"dev0","x":48,"y":0,"label":"X","state":{"on":false}},
{"type":"DC","id":"dev1","x":0,"y":184,"label":"DC"},
{"type":"Toggle","id":"dev2","x":56,"y":216,"label":"X","state":{"on":false}},
{"type":"DC","id":"dev3","x":0,"y":248,"label":"DC"},
{"type":"Toggle","id":"dev4","x":56,"y":272,"label":"Y","state":{"on":false}},
{"type":"Toggle","id":"dev5","x":40,"y":104,"label":"X","state":{"on":false}},
{"type":"Toggle","id":"dev6","x":88,"y":104,"label":"Y","state":{"on":false}},
{"type":"Switch","id":"dev7","x":80,"y":152,"label":"Switch"},
{"type":"LED","id":"dev8","x":184,"y":8,"label":"LED"},
{"type":"DC","id":"dev9","x":0,"y":24,"label":"DC"},
{"type":"Toggle","id":"dev10","x":48,"y":48,"label":"Y","state":{"on":false}},
{"type":"Switch","id":"dev11","x":96,"y":16,"label":"Switch"},
{"type":"LED","id":"dev12","x":304,"y":96,"label":"¬X"},
{"type":"Switch","id":"dev13","x":224,"y":96,"label":"Switch"},
{"type":"Toggle","id":"dev14","x":184,"y":56,"label":"X","state":{"on":false}},
{"type":"DC","id":"dev15","x":136,"y":80,"label":"DC"},
{"type":"LED","id":"dev16","x":304,"y":176,"label":"X∨Y"},
{"type":"Switch","id":"dev17","x":224,"y":176,"label":"Switch"},
{"type":"Switch","id":"dev18","x":152,"y":128,"label":"Switch"},
{"type":"Switch","id":"dev19","x":112,"y":240,"label":"Switch1"},
{"type":"Switch","id":"dev20","x":200,"y":264,"label":"Switch2"},
{"type":"LED","id":"dev21","x":304,"y":264,"label":"X∧Y"}
],
"connectors":[
{"from":"dev0.in0","to":"dev9.out0"},
{"from":"dev2.in0","to":"dev3.out0"},
{"from":"dev4.in0","to":"dev3.out0"},
{"from":"dev5.in0","to":"dev1.out0"},
{"from":"dev6.in0","to":"dev1.out0"},
{"from":"dev7.in0","to":"dev5.out0"},
{"from":"dev7.in1","to":"dev1.out0"},
{"from":"dev8.in0","to":"dev11.out0"},
{"from":"dev10.in0","to":"dev9.out0"},
{"from":"dev11.in0","to":"dev0.out0"},
{"from":"dev11.in1","to":"dev10.out0"},
{"from":"dev12.in0","to":"dev13.out0"},
{"from":"dev13.in0","to":"dev14.out0"},
{"from":"dev13.in1","to":"dev15.out0"},
{"from":"dev14.in0","to":"dev15.out0"},
{"from":"dev16.in0","to":"dev17.out0"},
{"from":"dev17.in0","to":"dev18.out0"},
{"from":"dev17.in1","to":"dev1.out0"},
{"from":"dev18.in0","to":"dev6.out0"},
{"from":"dev18.in1","to":"dev7.out0"}
]
}
|