コンピュータアーキテクチャ(8)
2010/11/24
山内担当クラス
10/11/24 ar10_08 802前回まで
CPUの大まかな仕組を理解した 構成要素は何か? 汎用レジスタ・プログラムカウンタ ALUとは何か、など 命令はどのように実行されるか 命令の実行サイクルはどういうものか CPI・MIPSとは何か 命令について理解した 命令(語)の構成要素は何か オペランドとは何か、2オペランドとは 何か 様々なアドレッシングモードを説明せよ COMET IIの命令の動作は何か COMET IIの機械 命令でプログラ ミングできる 変数・定数 参照・更新 代入文 条件分岐(if文) ループ(for文) 配列のアクセス 参照・更新 などを使ったプログラ ムを書ける 10/11/24 ar10_08 803今回 ~
CPU周りの最後
いろいろな設計思想(考え方)を理解する
ハーバードアーキテクチャ (教4.1)
RISC と CISC (教4.2)
ワイヤードロジック と マイクロプログラム
(教
6.2と6.3)
10/11/24 ar10_08 804ハーバード・アーキテクチャ
命令とデータを別のメモリにおいて 転送経路も、それぞれに設けた (命令用バス・データ用バス) ⇒ 転送上の隘路(ボトルネック)を回避できる 命令とデータを同じ線の上で転送すると太さが足りず 転送が待たされることが起こりえる(隘路) ⇒ その代り、回路が複雑になる+メモリ容量の融通がない CPU メインメモリ 命令 データ CPU 命令用 メモリ データ用 メモリ ノイマン型 ハーバードアーキテクチャ 命令用 バス データ 用バス10/11/24 ar10_08 805
どちらがいいか? そういう問題でない
ノイマン型
vs ハーバード
原理単純 やや複雑 命令・データ間のメモリ どちらかの用途に限定 の融通が可能 するので融通不可 転送ボトルネック有り得る ボトルネック解消の方向 (CPUのアクセス要求量と、転送性能とのバランス なので、一概に問題があるとは言えない) 10/11/24 ar10_08 806キャッシュ(
11回目)導入で話が変る
教図
4.2 ⇒ CPUからのアクセスは分離
メインメモリは1つ(融通可)
CPU 命令用 キャッシュメモリ データ用 キャッシュメモリ 命令用 バス データ 用バス メイン メモリ 高速転送 比較的低速 メイン メモリ バス CPUチップ内 10/11/24 ar10_08 807例)
教
4.1.2 制御用マイコンでの例
プログラム半固定(単用途・作込んだら変更無し) データは量限定で、汎用レジスタ+定数で足りる ⇒ 完全にメモリを分離 Pentium等普通のパソコンCPUでのキャッシュ
Core i7 980X Extreme Edition (Gulftown) 6コア
キャッシュ L1: データ・命令それぞれ32KB、 L2: 256KB (コアごとに1つ) L3: 12MB (6コアで共有) クロック 3.33/3.6GHz、 QPI 6.5GT、 TPD 130W 10/11/24 ar10_08 808
RISC vs CISC
RISC = Reduced Instruction Set Computer
Reducedな (縮退した)
Instruction Set (命令セットを持つ) Computer
命令が
単純で 命令の実行する内容が簡単 ~ 「複雑なことは複数 の命令を組み合わせてやればいい」 命令の形も簡単 ~ 長さ固定・命令解析も簡単 その結果 回路が簡単 ⇒ 1チップに載る(当時の技術レベル) 高速 ~ 回路が簡単だから10/11/24 ar10_08 809
RISC vs CISC
CISC = Complex Instruction Set Computer
歴史的な背景がある (
1980年ごろ)
Intel 8086('78)に始まるマイクロプロセッサの発展 当初はLSIチップに搭載できるトランジスタ数が少なく、 複雑な回路が載せられなかった。 他方で、命令は(互換性要求も加わって)複雑化してきた x86では互換性要求が非常に強い⇒新命令追加へ ⇒ これに反対する考え方としてRISCが登場した Intel 80x86は、CISC命令セットを継続 vs たとえばMIPSはRISC命令セットの汎用CPUチップ を提供した (その他にも幾つか市場に現れた) 10/11/24 ar10_08 810RISC vs CISC 比較すると?
命令数が増え、長くなる 比較的短くなる プログラム長 最適化の工夫余地大 工夫余地どちらかというと小 コンパイラ 固定長(命令によらず同じ) 可変長(命令によって異なる) 命令長 比較的短期に済む 長くなり勝ち 開発期間 少ない 多い 命令種類 どちらかというと導入容易 どちらかというと導入難しい ハードの 高速化手法 回路規模小⇒1チップ化楽 回路規模大⇒1チップ化し難い チップ化 高速化できる 周波数上げにくい クロック 単純・少量 複雑・大量 回路 1命令の動作単純 1命令の動作複雑 命令内容 RISC CISC 10/11/24 ar10_08 811(脱線)
RISCの汎用レジスタ数は多い
CISCのIntel x86 は8つ(浮動小数点用は別)
RISCのMIPSは32個(浮動小数点にも使う)
RISCのPowerPCは32個(+浮動用32個)
RISCだと(命令が単純なので)1つの命令
で終わらず、途中結果を保持しておく必要
が、一般に、メモリへの読み・書きはレジスタ
に比べて遅い (メモリは
CPUチップの外)
で、途中結果保持のためには汎用レジスタが
多いほうが有利
10/11/24 ar10_08 812RISC vs CISC 論争
更に半導体技術向上 高速化+大規模化
RISCが一方的に有利というわけでもない
市場を見よ 他の要因もあり(命令互換性) Pentiumなどでは一部CISC命令をRISC動作
に変換して実行(マイクロプログラム~後述)
つまり、ハード的にはRISC的、命令体系はCISC的 「区別が困難になってきている」(教p42)
区別する意味もなくなってきている?10/11/24 ar10_08 813
制御アーキテクチャ(教6章)
CPU内の「制御部」の作り方の議論
ポイント:
布線論理(ワイヤードロジック) vs
プログラム論理(マイクロプログラム)
ワイヤードロジック:
配線論理(=回路)によって制御機構を作る
マイクロプログラム:
配線論理+プログラムによって作る
10/11/24 ar10_08 814(脱線) 順序回路
(ワイヤードロジックのベース)
順序回路
内部状態と入力で、出力が決まる回路 内部状態は、過去の入力を反映する 状態遷移(図・表など)として描かれる
1 2 3 入力1/出力なし 入力1/出力なし 入力1/出力1 初期状態 1 2 3 1 2 3 入力 出力 10/11/24 ar10_08 815(脱線)順序回路の例
図は,150 円のジュースを販売する自動販売機の状態遷移において, 状態を “Si”,遷移条件を“X / Y + Z ”で表したものである。 S0”を初期状態とする。 ここで,X は入力を示し,使用可能な硬貨は 50 円と 100 円だけ であり,一度に1枚だけ投入できる。 Y は出力を示し,*は何も出力されないことを表す。 また,Z は X と Y による付帯条件“釣銭”を表し,釣銭がない 場合は記述しない。例えば,“100/ジュース+50”は, 100円硬貨を投入するとジュースが出て,釣銭が50円であることを表す 50/ジュース S0 S1 S2 100/* 50/* 50/* 100/ジュース+50 100/ジュース 10/11/24 ar10_08 816(脱線)順序回路の動作 同期vs非同期
同期式回路
クロック信号で回路全体が「同期」 =「せーの」で状態が変化する 非同期式回路
入力があると状態が変化する 一般に
同期式の方が安定(信号遅延などの問題除外) クロックより高速にはならない コンピュータ=殆どの部分が同期式
10/11/24 ar10_08 817 状 態 レジスタ 関数F 入力 出力 クロック
(脱線)同期式ハードウェアの作り方
「状態」を、レジスタ(フリップフロップの列)に
保持する(2進)値で表す
例:S0=00、 S1=01、 S2=10 3状態なら2桁必要 (入力+前の状態)⇒(次の状態+出力)と
なる2進の関数Fを用意し、下のように繋ぐ
10/11/24 ar10_08 818ワイヤードロジック制御
制御を順序回路で行う
命令読出⇒解読⇒実行 ⇒次の命令 の手順の制御 ↓ 状態遷移として実現 他の部分(演算部・メモリ) への信号を出す CPU メモリ 命令 命令 命令 命令 プログラム 制御部 PC 制御 命令 データ データ データ データ 演算部 レジスタ ALU 解読 10/11/24 ar10_08 819マイクロプログラム制御
制御をプログラムの
形で実現する
「マイクロプログラム」 (マイクロ命令) (マイクロ命令メモリ) ハードウェアサポート マイクロ命令解釈 マイクロ命令実行 入換え可能 ⇒異なるCPUの模擬 「エミュレーション」 PC内容をメモリアドレスとして送出 メモリ読出してIRレジスタに格納 IRのOP部分でテーブルジャンプ LD命令: オペランドから実効アドレス計算 実効アドレスをメモリへ送出 メモリ読み出してレジスタに格納 割込みをチェックする (PCを1つ進める) ST命令: 以下略 いい加減なサンプル 10/11/24 ar10_08 820マイクロプログラム制御の背景
万能のコアにしたい(ハード設計1回だけ)
⇒ 特定のCPUのエミュレーション
設計期間の短縮
マイクロプログラムのデバッグ+再ロードの方が ハードの作り直しよりはるかに早い 「シリーズ化」の実現
IBM 360/370では、ハイエンドはワイヤード(高速)、 ローエンドはマイクロプログラム(低速・廉価)として、 同一の命令セットを実現した ← ソフトの互換性 CISC命令は複雑なので、マイクロプログラムで
多データ処理とか、込み入った処理とか10/11/24 ar10_08 821
ワイヤード
vsマイクロプログラム
少なくできる (小さくできる・廉価) 多い(大きくなる・高価) ハード量 短い (バグ・修正の サイクルが短い) 長い (バグ・修正の サイクルが長い) 設計期間 容易 (プログラムを延ばす) 対応が大変 (ハード量増える) 複雑な命令 プログラム書直しで容易 再度設計で大変 修正・改良 遅い 早い 命令 処理速度 マイクロプログラム ワイヤード 10/11/24 ar10_08 822まとめ
ハーバード・アーキテクチャとは何か
理解したか・説明できるか?
RISCとは何か、CISCとは何か?
RISCの考え方を説明できるか?
RISC vs CISCの利害得失を説明できるか
現在、RISCをそれほど議論しないのはなぜか? ワイヤードロジック・マイクロプログラムとは何か
マイクロプログラムの考え方を説明できるか
利害得失を説明できるか
10/11/24 ar10_08 823(脱線)ディジタル回路
組合せ回路=
現時点の入力だけで出力が決まる回路 = 出力は過去の(入力)履歴に依存しない 順序回路=
~~~でない回路 = 出力が過去の(入力)履歴に依存する 例: 入力
x, y、 出力z として
z = x ∧ y や z = ((x∧y)∨(¬x∧¬y)) は 組合せ 回路 (現在のx,yで決まる。過去の履歴に依存しない) 10/11/24 ar10_08 824(脱線)組合せ論理回路
組合せ回路 = 要するに論理式と思えばよい
入力の論理値(
0/1)の組合せパターンで
出力(
0/1)が決まる
だから、真理値表によって記述できる ハードウェアの実現=ANDやOR素子を接続
理論: ~情報数理IA・IB、「離散数理」
12章
加法標準形 形と定理12.8 最簡化とカルノ図表10/11/24 ar10_08 825
(脱線)順序回路①
例: ジュースの自動販売機
ジュースは150円 50円玉と100円玉を受付ける お釣りが出る 100円玉を2回 ⇒ ジュースと50円 入力:
50円玉が来た、100円玉が来た
出力: ジュース(有無)とお釣り
50円(有無)
現在の入力だけでは出力は決まらない
50円玉が来た 既に100円入っていればジュースを出す 初めてなら、更に入力があるのを待つ 10/11/24 ar10_08 826(脱線)順序回路②
例: ジュースの自動販売機の続き
入力「
50円玉」への応答は
既に100円玉1回、又は50円玉2回が来ていれば ジュースを出す(お釣りは無し) そうでなければ、次の入力を待つ 入力「100円玉」への応答は
既に50円玉1回、ならジュースを出す(お釣り無し) 既に100円玉1回、ならジュースとお釣り50円 そうでなければ、次の入力を待つ (正しいかな? 自分でもよく考えてみよう)
10/11/24 ar10_08 827(脱線)順序回路③
自動販売機例のポイント:
動作は今迄の入力が何かに依存する
⇒ 「組合せ回路」とは性質が違うものである
⇒ 「順序回路」
(sequential circuirt)
とか「順序論理」とかと呼ぶ
今までにどのような入力があったかを
(何らかの形で)覚えておく必要がある
「状態」として覚えておく 10/11/24 ar10_08 828(脱線)順序回路④
自動販売機の状態
「何も入っていない」「既に50円」「既に100円」 「既に150円」は、不要(覚えておかなくていい) 出力(ジュース・お釣りは無し)を出して 「何も入っていない」の状態に戻ればいいから 「既に100円」を、50円玉入力が2回と100円1回と 分けて覚えておくか? 不要 どちらも次のステップの動作が同じだから 次に50円玉が来ればジュース+釣り無し 次に100円玉が来ればジュース+50円釣り なので、状態は3つあればいい10/11/24 ar10_08 829
(脱線)順序回路⑤
状態が、入力が来ると「遷移(せんい)する」
「何も入っていない」状態で 入力「50円玉」が来ると、「既に50円」状態へ移る 「何も入っていない」状態で 入力「100円玉」が来ると「既に100円」状態へ移る 「既に50円」状態で 入力「50円玉」が来ると「既に100円」状態へ移る 「既に50円」状態で、入力「100円玉」が来ると 出力「ジュース+釣り無し」を出して 「何も入っていない」状態へ移る (以下略) 10/11/24 ar10_08 830(脱線)順序回路⑥
状態の遷移の状況を図に描く ⇒ 状態遷移図
状態を○で描き、中に状態の名前を入れる 名前は何でも良いが、状態をよく表すものが良い 状態の間の遷移(移り変わり)を矢印で結ぶ 矢印は状態の移る向きを表す 矢印のわきに、①遷移を起こす入力と、 ②遷移の結果出る出力、を書いておく 状態A 状態B 入力x/出力p 入力y/出力q 左図は 状態Aにあるとき入力xが来ると 出力pを出して状態Bに遷移し 状態Bにあるとき入力yが来ると 出力qを出して状態Aに遷移する ことを示す 例 10/11/24 ar10_08 831(脱線)順序回路⑦
ジュース販売機の状態遷移図を描け
10/11/24 ar10_08 832(脱線)順序回路⑧
状態遷移図からハードウェアを作る
状態に、N桁の2進数を割当てる Nは、状態の数Sを表すのに十分な桁数 Sが2~3なら2桁、Sが4~7なら3桁など 図のような回路を考える 状態を表すN桁のレジスタ 直前の状態(N桁2進数)と外部入力から 次の状態と出力を求める回路 「次の状態+出力」を求める 「組合せ回路」を設計する 組合せ 回 路 外部 入力 外部 出力 レ ジ ス タ10/11/24 ar10_08 833