190 likes | 419 Views
マイクロプロセッサ. 第 2 回 演習. コンピュータにおける算術論理演算 コンピュータの性能評価と理解. 関根 優年 田向 権. 教科書および参考資料. パターソン&ヘネシー コンピュータの構成と設計 (上) ハードウェアとソフトウェアのインタフェイス 第 2 版 第 4 章 「コンピュータにおける算術論理演算」 第 3 版 第 3 章 「コンピュータにおける算術論理演算」 第 2 版 第 2 章 「性能の役割」 第 3 版 第 4 章 「性能の評価と理解」 “ SPIM” A MIPS32 Simulator
E N D
マイクロプロセッサ 第2回 演習 コンピュータにおける算術論理演算 コンピュータの性能評価と理解 関根 優年 田向 権
教科書および参考資料 • パターソン&ヘネシー コンピュータの構成と設計 (上) ハードウェアとソフトウェアのインタフェイス 第2版 第4章 「コンピュータにおける算術論理演算」 第3版 第3章 「コンピュータにおける算術論理演算」 第2版 第2章 「性能の役割」 第3版 第4章 「性能の評価と理解」 • “SPIM” A MIPS32 Simulator 関根研究室の授業用ページから移動 「農工大 関根研究室」で検索 トップページからマイクロプロセッサのページへ.
重要事項の復習 第4回~第6回授業資料より抜粋
2の補数表現 2の補数表現 :各ビット反転して、さらに+1を加える 0はひとつだけ,加算は、符号なし整数と同様に可能 例) 1word長(数値を表すためのビット数)が32bit 例) 210及び-210の正負反転 (8ビット符号付き整数) -231 ~231 ―1 (2,147,483,647) まで表現可能 (232通り) 0000 0000 0000 0000 0000 0000 0000 0000 = 0 0000 0000 0000 0000 0000 0000 0000 0001 = 1 0000 0000 0000 0000 0000 0000 0000 0010 = 2 …. 0111 1111 1111 1111 1111 1111 1111 1101 = 2,147,483,645 0111 1111 1111 1111 1111 1111 1111 1110 = 2,147,483,646 0111 1111 1111 1111 1111 1111 1111 1111 = 2,147,483,647 1000 0000 0000 0000 0000 0000 0000 0000 = -2,147,483,648 1000 0000 0000 0000 0000 0000 0000 0001 = -2,147,483,647 1000 0000 0000 0000 0000 0000 0000 0010 = -2,147,483,646 …. 1111 1111 1111 1111 1111 1111 1111 1101 = -3 1111 1111 1111 1111 1111 1111 1111 1110 = -2 1111 1111 1111 1111 1111 1111 1111 1111 = -1 0000 0010 (210 ) ⇒1111 1101 + 1 = 1111 1110 (-210 ) 1111 1110 (-210 ) ⇒0000 0001 + 1 = 0000 0010 (210 ) 10進数 2進数
加算 0000 0111 = 710 + 0000 0110 = 610 = 0000 1101 = 1310 (0) (0) (1) (1) (0)(桁上げ) ・・・0 0 0 1 1 1 ・・・0 0 0 1 1 0 ・・・(0)0 (0)0 (0)1 (1)1 (1)0 (0)1 0+0+0 =00 0+0+0 =00 1+0+0 =01 1+1+1 =11 0+1+1 =10 1+0=01 各ビットの加算と桁上げの様子 2進数の加算 例) 610に710を2進数で加える. 10進の加算と同じように桁上げをする. 数値の各ビットを下位ビットから加え、桁上がりを隣の上位ビットに加える
(1) (1) (1) (1) (0)(桁上げ) ・・・0 0 0 1 1 1 ・・・1 1 1 0 1 0 ・・・(0)0 (0)0 (0)0 (1)0 (1)0 (0)1 例) 710にから610を2進数で引く 710 - 610= 710 + (-610) 0000 0111 = 710 1+0+1 =10 1+0+1 =10 1+0+1 =10 1+1+0 =10 0+1+1 =10 1+0=01 + 1111 1010 = -610 各ビットの加算と桁上げの様子 = 0000 0001 = 110 減算 2進数の減算 引く数を2の補数表現にしてから加算 2の補数表現を用いることで、 非負数と負数の加算が特別な 演算をすることなく、実現できる 他の符号付き整数表現では、特別な演算が必要 1の桁上がりがずーと続き、 最上位ビットまで変わる. 最上位ビットは符号ビットの ように見える!
2の補数表現時の加減算のオーバーフロー判定2の補数表現時の加減算のオーバーフロー判定 操作 オペランドA オペランドB 結果
乗算アルゴリズムとハードウェアの最終バージョン 開始 積の 最下位ビット=0 積の 最下位ビット=1 1.積LSB の値を判定 ハードウェアの最終バージョン 被乗数 1a. 被乗数を積レジスタの左 半分に加え、結果を積レジスタ を左半分に収める 32ビット 32ビット ALU 2. 積レジスタを1ビット右にシフト 右シフト 積 制御 書き込み 繰返回数 の判定 64ビット 32回未満 乗数レジスタ のLSBの値の判定 初期状態では 32回 積レジスタ 左半分 0 右半分 乗数 終了
除算アルゴリズムとハードウェアの最終バージョン除算アルゴリズムとハードウェアの最終バージョン 開始 除数 1. 剰余レジスタを1ビット左にシフト 32ビット 2. 剰余レジスタの左半分から除数レジスタを 引き、結果を剰余レジスタの左半分に収める 32ビット ALU 左シフト 剰余を判定 剰余<0 剰余≧0 剰余 制御 右シフト 書き込み 64ビット 3b. 剰余レジスタの左半分 +除数レジスタ⇒ 剰余レジスタの左半分 剰余レジスタを左シフトし、 右側の新しいビットを0 3a. 剰余レジスタを 左シフトし、右側の 新しいビットを1 初期状態では 剰余レジスタ 右半分 32ビットの被除数 左半分 0 繰返回数 の判定 33回未満 33回 終了 :剰余レジスタの左半分を1ビット右にシフト
r進数表現について r進数表現 各桁のとるR種類の値は、 次の集合LRの要素 LR = {0,1,…,R-1} 正の整数Xに対するn桁のR進数 (xn-1 xn-2 … x1 x0 )R xi ∈ LR は次の関係が成立する。 X = xn-1Rn-1+xn-2Rn-2+…+ x1R+ x0 2進数の場合 正の整数Xに対するn桁の2進数 (xn-1 xn-2 … x1 x0 )2 xi ∈ L2 ( = {0,1}) X = xn-12n-1+xn-22n-2+…+ x12+ x0 各桁をビット(bit:binary digit) 最上位桁をMSB(Most Significant Bit) 最下位桁をLSB(Least Significant Bit)と呼ぶ 16進数はメモリ番地などのデータを表す ために、2進数の代わりによく用いられる
ディジタルコンピュータでの文字表現 コンピュータ上で文字を表現するためには、 文字をある2進数表現として定義する必要がある アルファベット文字 ー ASCIIコード(7bit) (American Standard Code for Information Interchange) 例えば a : 1100001 (2進数) 一般にデータ表記としては 16進法を用いる 63h 0x63 または 16進数を表す 日本語(漢字とか)は、 16bitで表現される ← 方式には様々 例) Shift-JIS, EUC
性能・相対性能 ここでは、実行時間に着目してマシン性能を考える (マシンXの)性能の定義 性能X=1/実行時間X 単位時間あたりの実行回数 マシンの性能比 マシンXはマシンYよりもn倍早い n = 性能X/性能Y = 実行時間Y/実行時間X
クロック マイクロプロセッサはクロックに基づき動作 電圧 クロック周期 時間 クロック周期=クロックサイクルタイム クロック周波数=1/クロック周期 例) Pentium IV 3GHz CPU内部のクロック周波数が3GHz クロック周期は0.33ns
測定基準同士の関係 コンピュータの最終的な性能はCPU実行時間 クロック サイクルタイム そのプログラムの CPUクロック・サイクル数 あるプログラムの CPU実行時間 X = クロック 周波数 そのプログラムの CPUクロック・サイクル数 ÷ = コンピュータの性能を挙げるためには、 ① クロック周波数を上げるか、 ② プログラムが必要とするサイクル数を減らすか を行えばよい。
CPI(1命令あたりの平均クロックサイクル数) 実際にはプログラムは複数の命令からなる プログラムにおける命令数が増えれば、一般に プログラムに必要なサイクル数は増加する。 命令数とサイクル数の関係を表す指標としてCPIを導入 CPI(1命令あたりの平均クロックサイクル数) プログラムの CPUクロック・サイクル数 1命令あたりの 平均クロックサイクル数 プログラム中の実行命令数 = X CPI 一般に命令によって、必要とするサイクル数は異なる (命令Aは1サイクル、命令Bは2サイクルといった感じ)
CPIとCPU時間の関係式(1) クロック サイクルタイム あるプログラムの CPU実行時間 プログラム中の実行命令数 CPI X X = クロック 周波数 = プログラム中の実行命令数 CPI ÷ X
CPU性能を改善する方法 命令セット・アーキテクチャが同じとき 1.クロック周波数を上げる 2.CPIを下げるようにプロセッサの構成を改善する 3.命令数を減らすか平均CPIの低い命令を生成するように コンパイラを改善する
計算時間だけの評価では不十分 • データをプロセッサに送るまでの時間 • ノイマン・ボトルネックという • 処理結果を取り出す・記憶する時間 • メモリとハード・ディスクでは異なる • プログラムの構造,データ構造により処理時間も異なる. • 並列的な問題を逐次的に処理する. 理想的な機械:専用演算器を沢山持ち, データのあるところで処理をする
Amdahlの法則 マシンのある面を改善しても、その改善度に等しい 性能向上は得られるとは限らない。 例) あるマシンでプログラムを動作する際に、実行時間 のうち80%が乗算でしめられている。乗算を高速化 することにより、実行時間を現在の5倍にできるか? 答) できない 乗算がいくら早くなっても、残りの20%の実行時間 は必要とされるため ある大きな問題を解決したとき、その問題に埋もれていた 次の問題が見えてくるのがAmdahlの法則