Comments
Description
Transcript
コンピュータアーキテクチャ(5) 今日の話題 復習・確認 復習・確認
今日の話題 コンピュータアーキテクチャ(5) 今までの復習 アドレッシング(教3.2) 命令セットアーキテクチャ 山内長承 命令セット(どんな命令をそろえるか)(教3.1.3) オペランド(2/1/0/3オペランド)(教3.1.2) ar_05 復習・確認 分野の位置付け アプリ ケーション システムソフト (オペレーティング システム) 復習・確認 システム構成と 命令実行の仕組 CPU (中央処理装置) (プロセッサ) メモリ (記憶装置) 読出し (フェッチ) 制御部 プログラム 解読 (デコード) 読出し 解釈 実行 制御信号 論理回路 半導体・ トランジスタ 演算部 命令 命令 命令 命令 データ ar_05 実行 (エクゼキュート) 次の命令へ PC←PC+1 レジスタ ALU プログラム内蔵と ノイマン型 命令の実行サイクル 入出力 ハードウェア アーキテクチャ 502 503 プログラム内蔵 オペランド 読出し 結果の 書込み 主記憶中にプログラム 取替え可能 ⇒ 万能箱 ノイマン型(教p12) プログラム内蔵 逐次実行 (単一メモリ) ar_05 504 復習・確認 命令の例 ~ COMET II 16ビット 命令のアドレス 命令レジスタ CPU デコーダ OPコード オペランド オペランド のアドレス ALU GR7 汎用レジスタ GR0 R-Rタイプ 今日の話題1 アドレッシング 命令 メモリ( 主記憶) プログラム カウンタ OPコード r1 r2 r1 ← (r1) OP (r2) 汎用レジスタr1, r2間で計算 R-Mタイプ OPコード r x adr r ← (r) OP (実効アドレス) レジスタrとメモリadr間で計算 ar_05 505 アドレッシングの種類 (直接) アドレッシング (教3.2) オペランドの指定法 命令中の adr 欄に書いてあるアドレスを そのまま用いるだけ ではない OP 234 もう少し工夫がされている 有効アドレス(教科書)(=実効アドレス) 直接アドレッシング = adrの値をそのまま LD GR3, 234 ⇒ 234番地の内容をLD ここをアクセス (基本情報資料では実効アドレス、同じもの) adrを加工してくれる ⇒ 役に立つときがある どのように ⇒ 次ページ 大体どのCPUでも同じ(あったり無かったり) ar_05 507 234番地 実効アドレスは adr の値そのまま ar_05 508 直接アドレッシングをどう使うか 変数(や定数)を置く 例: y = x + 3; 変数 x, y, 定数 3 を メモリ上に置く (アドレスが決まる) LD GR3,44 ADDA GR3,43 ST GR3,45 アドレッシングの種類 (間接) OP 576 ここをアクセス xをGR3に持ってくる 定数3をGR3に足す GR3をyに格納する 509 GR5 523 234 + 757 567 567番地 7931 ar_05 (注意)COMETには間接アドレッシングは無い 757番地 配列の要素を指定する 例: A[i] 配列A[10]をメモリ上に確保 iの値が実行中に3 Aの先頭を50番地にする A[i]を読み・書きしたい A[0]: 50番地 OP 5 50 GR5 (i) 3 3 + 234+523を計算 実効アドレスは adrの値+レジスタxの内容 ar_05 510 指標アドレッシングをどう使うか 指標(インデックス)アドレッシング = (adrの値 + レジスタxの値)をアドレスと してメモリをアクセスする LD GR3,234,GR5 ⇒ (234+GR5)番地をLD 5 234番地 実効アドレスは メモリadr番地の内容 アドレッシングの種類 (指標) OP 234 3: 43番地 x: 44番地 y: 45番地 ar_05 間接アドレッシング = adrの指すメモリの内容をアドレスと思って もう一度メモリをアクセスする LD GR3,(234) ⇒ 567番地の内容をLD LD 511 A[1]: 51番地 A[2]: 52番地 A[3]: 53番地 GR5にiの値が入っているとする GR3,50,GR5 Aのi番目をGR3にLDする ar_05 512 アドレッシングの種類 (相対) 相対アドレッシングをどう使うか 相対アドレッシング = (adrの値 + PCの値)をアドレスとして メモリをアクセスする LD GR3,+15 ⇒ (15+PC)番地をLD 本当は プログラム カウンタ (PC) 23 + 38番地 38 PC 23 OP 差分 23+15を計算 15 15 ar_05 (注意)COMETには間接アドレッシングは無い 513 ar_05 基底(ベース)アドレッシング = (adrの値 + ベースレジスタの値)をアド レスとしてメモリをアクセスする LD GR3,234 ⇒ (234+BASE)番地をLD 即値アドレッシング = adrの値そのものを 処理対象にする LDA GR3, 234 ⇒ 値234をGR3にLD OP OP 5 234 + ベース レジスタ 1000 1234 1234番地 234+1000を計算 ベースレジスタは通常 OSの管理下に置かれ ユーザアプリケーション は変更できない。 複数プログラムをメモリ 上に配置するために 使われる。 実効アドレスは adrの値+ベースレジスタの内容 (注意)COMETには間接アドレッシングは無い ar_05 514 アドレッシングの種類 (即値) アドレッシングの種類 (基底/ベース) -2 実効アドレスは adrの値 + PCの内容 OP 15 38 23番地 OP ジャンプの行き先を相対で書く 例: Jump -2 命令自分自身より 2つ前の命令に戻る (ループになる) PC 23 234 GR3 実効アドレスは 考えない 515 234 (注意)COMETで「即値アドレッシング」に相当するのは LDA命令だけ(他の命令(加算等)では即値はできない) ar_05 516 基本情報処理技術者試験問題から 基本情報処理技術者試験問題から 主記憶へのアクセスを伴う演算命令を実行するとき,命 令解読とオペランド読出しの間に行われる動作はどれ か。 (基本20春18) ア 実効アドレス計算 イ 入出力装置起動 ウ 分岐アドレス計算 エ 割込み発生 インデックス修飾によってオペランドを指定する場合,表に示す値 のときの実効アドレスはどれか。 (基本17秋18) インデックスレジスタの値 10 命令語のアドレス部の値 100 命令が格納されているアドレス 1000 ア 110 イ 1010 ウ 1100 エ 1110 アドレス指定方式のうち,命令読出し後のメモリ参照を行 わずにデータを取り出すものはどれか。(基本16春17) ア 間接アドレス イ 指標付きアドレス ウ 即値オペランド エ 直接アドレス ar_05 命令のオペランド部において,プログラムカウンタの値を基準とし, その値からの変位で実効アドレスを指定する方式はどれか。 (基本14春19) ア インデックスアドレス指定 イ 絶対アドレス指定 ウ 相対アドレス指定 エ ベースアドレス指定 517 ar_05 518 「命令セット」という考え方 CPUを設計する ⇒ 命令をどうするか 命令セットアーキテクチャ どんな命令を揃えればいいか いろいろな設計思想があってよい 但しやりたい事が全部できる必要がある(完全) 例: 引き算命令を作るか、足し算と符号反転命令か RISC vs CISCの思想の対立 ⇒ 次回 オペランド指定の形式をどうするか z=x+y x、y、z の3つを指定するのか? 命令中のオペランドフィールドが3つ ⇒ 命令が長い 命令読出しに時間がかかる・「キャッシュ」が大きくなる いろいろな考え方 ⇒ ar_05 520 オペランド指定の方法 z=x+y オペランド指定の方法 x、y、zを指定 ⇒ 3オペランド方式 3つともメモリアドレスを書くと、長くなる 第1オペランドの 第2オペランドの 第3オペランドの メモリアドレス メモリアドレス 2オペランド方式で一方がレジスタ x=x+y x、yを指定する (zとxを重ねる) OPコード メモリアドレス x側をレジスタにする ⇒ ビット数が減る 第1オペ 第2オペランドの メモリアドレス OPコード ランド 2オペランド方式 x=x+y x、yを指定する (zとxを重ねる) 同じところに書き戻すという制限ができる ⇒ 余分な命令が必要になる可能性がある 1オペランド方式 AC = AC + y 上記のxを特定のACに固定 第1オペランドの 第2オペランドの OPコード メモリアドレス メモリアドレス ar_05 521 スタックマシン = メモリがスタックであるマシン プッシュ操作 例:セルフサービスの食堂 でトレーを置いてある棚 係の人は上へ順に重ねて置く 「プッシュ(push)操作」 ポップ操作 客は上から順に取ってゆく 「ポップ(pop)操作」 ar_05 522 0オペランド ~ スタックマシン 0オペランド方式 「スタックマシン」の場合に0個になる スタック: 汎用レジスタでない(1つしか計算用レジスタが無 い)CPUでは、この形も多い ar_05 オペランド指定の方法 ⇒ COMETのやり方 523 オペランドがスタック上 スタックのトップ要素を演算 加算: スタックトップと2つ目を 加算して、スタックへ積む これだと、命令中に オペランド指定が不要 ⇒ 0オペランド ar_05 2つのオペランドをポップ + 結果をプッシュ 524 命令機能の評価(教3.1.4) 基本情報処理技術者試験問題から 命令実行 命令解釈 命令読出 何サイクルの命令が何回出て くるかで、全時間は変わる プログラムにより頻度変わる 命令実行 命令解釈 1命令当り Clock Per 3サイクル 4サイクル Instruction 1命令当りの クロックサイクル数 = CPI と呼ぶ 命令によってクロック数が違うCPUが多い ⇒ 平均値を取る 単純な平均でなくて ⇒ 命令の出現頻度による「加重平均」 525 ar_05 526 命令機能の評価(教3.1.4) 命令出現頻度による加重平均 命令読出 例えば、右上のように命令ご との所要クロック数が与えら れているとする 更に、右下のようなプログラ ムの形を考える この時、プログラム全体の所 要クロックサイクル数=15 命令実行 クロック 1命令当り ar_05 計算機内部の 動き(イメージ) 命令解釈 命令読出 命令語に関する記述のうち,適切なものはどれか。(基本19春18) ア オペランドの個数は,その命令で指定する主記憶の番地の 個数と等しい。 イ 一つのコンピュータでは,命令語長はすべて等しい。 ウ 命令語長が長いコンピュータほど,命令の種類も多くなる。 エ 命令の種類によっては,オペランドがないものもある。 (例)命令 サイクル数 LD r1, r2 形式 3 LD r, addr 形式 4 ST r1, r2 形式 3 ST r, addr 形式 4 ADDA r1, r2 形式 3 ADDA r, addr 形式 4 1命令当り、(前頁での平均で) n サイクル、 1クロックサイクル = t 秒とする 命令 LD GR3, LD GR4, ADDA GR3, ST GR3, X Y GR4 Z サイクル数 4 4 3 4 Σ{(命令の出現頻度) 様々なプログラムでの命令 ×(サイクル数)} 527 の平均出現頻度で重み付け ar_05 ( クロック周波数 F とすると、t = 1/F ) 1命令にかかる時間 = n・t 秒 1秒当りの実行命令数 X = 1/(n・t)= F/n MIPS (Million Instructions Per Second) = X/100万(106) 1秒あたりの実行命令数を100万単位で表したもの ar_05 528 計算してみよう 基本情報処理技術者試験 50 MIPS のプロセッサの平均命令実行時間は幾らか(基本18春20) ア 20 ナノ秒 イ 50 ナノ秒 エ 2 マイクロ秒 ウ 5 マイクロ秒 クロック周波数が1GHz の処理装置が 命令種 別 ある。この処理装置の命令種別が, 命令1 表に示す二つから成っているとき, 処理能力は約何 MIPS か。 命令2 (基本17春18)(基本20春19) ア 34 イ 100 ウ 125 1命令当り(加重)平均で3クロックサイクル クロックは3GHz ⇒ X = F/n = 3×109/3 = 109 = 1000 MIPS (脱) 3GHzの時1クロックサイクルの時間は 1秒間に3×109回 ⇒ 1/(3×109)=1/3ナノ秒 光速(30万Km/秒)で走っても 10cm 回路内の信号伝達は光速以下(多分2/3位) ⇒ 数cmの配線で1クロック分ずれてしまう程度 ar_05 529 どのような命令出現頻度パターン(「命令ミックス」) を使うかに依存。パターンは標準化していない メモリアクセスの時間が変動するが、それを含んで いない (一般に最高速値~すべてキャッシュ内) 命令の設計に依存する: 命令を簡単にし、同じ事 を複数の命令でやるCPUは、MIPS値は得をする ar_05 10 60 5 40 エ 133 ar_05 530 まとめ 後の回でいくつかの性能指標(ベンチマーク)を 紹介したい 結論から言うと、MIPS値は性能指標としては 問題が多い 実行頻度 (%) 平均命令実行時間が 0.2 マイクロ秒のコンピュータがある。このコ ンピュータの性能は何 MIPS か。 (基本15秋20) ア 0.5 イ 1.0 ウ 2.0 エ 5.0 CPU性能指標としてのMIPS 実行時間 (クロック) 531 アドレッシングの方式を列挙し、それぞれ動作 を説明できるか? 「命令セット」=命令種類を設計するときの揃 え方=の考え方を議論できるか? 命令内のオペランド数の設計について、議論 できるか? MIPS値を計算できるか? ar_05 532