計算機を速くするには # 今回は、CPU と Memory 回り。I/O より外は考えない o 半導体の速度を速くする 信号の伝える速度 ( Switching 速度.. ) を速くする => 信号は、電磁波より速く動けない これは、真空中の光の速度 3 x 10^{10} を越ることはできない 現行の CPU ( i.e. 1G ) 10^{-9} sec => 光の速度でも 30cm しか移動できない => そろそろ限界が... => この改良は、誰でも何でも速くなる ( 公平な高速化 ) # 次の高速のための方法は.. ? o 並列化 1 CPU が 1 単位の時間実行可能な n の仕事 => n 単位時間掛る この n 個の実行が独立に実行可能なら.. => n プロセッサで、並列に実行すれば、 1 単位時間でできる 1/n まで高速化可能 n 個の仕事に順序性が高ければ => CPU はいくつあっても速くならない => 場合によって速くなったりならなかったり i.e. 前回やった Cache System => Cache が Hit すれば速い Hit しないと速くならない (かえって..遅くなるかも..) コンピュータアーキテクチャ ソフトからみた計算機の仕様 => 「条件付で速くする工夫」をするには、これを知らないと.. DRAM アクセスタイム ( 50ns ) データ要求をしてから、答が返るまでの時間 サイクルタイム ( 200ns ) 同じメモリを最後にアクセスしてから、 次にアクセス可能になるまでの時間 同じメモリを何度もアクセスすると、4 倍 ( 200 / 50 ) の 時間がかかってしまう。 => メモリを二つの領域 ( BANK ) に分割する アクセス対象の BANK を切り換える ことにより、サイクルタイムの問題を解決 => インターリーブ => (ソフトで..) 工夫をすれば速くなる # どうしても速くならない場合もある # 高速化の為に必要な知識 # => 試験にはでないが # 本当に問題を解く場合に重要 (是非身に付けて欲しい) 命令の解読の話 ( 先先週の説明を思い出す.. ) for ( i = 0; i < 100; i++ ) { a = b + c d = e + f g = h + x } 解読のパイプライン 次に実行する命令が予め判っていたら.. => 次の命令を予め解読しておく 上記のプログラムの場合 条件判定が含まれる 次の状況が確定していない ( 二通り.. ) => 投機的な実行を行う 両方を容易する => 一方は捨てる 条件が多分岐なら.. 全部用意するという手はある => 無駄が多い 全ての分岐は同一確率でない # 例でも分岐の確率が多い 過去の分岐を記録し、そちらを選ぶ Loop (例) の場合は.. 1 2 .. 99 100 ? o ... o x => 98% の確率で当る 無駄が少い # 分岐の場合にどのような decode 戦略か ? # => アーキテクチャの例 スーパースカラ方式 従来の演算器 コントローラ + 演算回路 x n => 演算にはコントローラが必要 => 一つの演算をしているとき 一つのコントローラ + 一つの演算回路 => 他の回路は遊んでいる スーパースカラ方式 コントローラが機能別に別れており、 それぞれ独立に計算できるようになっている。 例 Contorol Float +/- Float * Float / Integer a = b + c d = e * f g = h / s i = j + k 並列実行される 各演算は独立なので 4 倍に.. 平均的には 2.6 倍 ( 2 - 3 ) # Gauss の消去法では、割り算と # 足し算が同時にでる => 都合がよい 回路の変更は 5% 程度の増加 2 倍になれば恩の字 # 5 円で 100 円帰ってくる # かけ算より足し算の方が利用される回数が多いので、 # 足し算回路を追加することで高速可能 演算回路の割り振りは、ハードウェアが実施 ht ( Hyper Thread ) 実用化 ( 2003/05 ) Thread 単一プログラム内で動く、独立して動くの単位 # 並列 Job 一人のプログラム => 並列しにくい ( 互いに依存性がある ) => 複数人のプログラムならば並列化しやすい (依存関係が薄いから..) Thread 一人のプログラムでも内部は二つの内容 => 並列化できる ht コンパイラの時点 ( ? ) で、プログラムを Thread 化 ? アイディアは古い MTA ( Multi Thread Archtecture ) バートンスミス, 1987, Tera Computer Cray Computer # Memory Access 速度の遅さを解消することが目的 # 結果的に ht と同じ.. CDC 6600 ( 1960 年代 ) I/O 部分に PP ( Priter Processer ) を入れる => CPU 側が Thread 化される.. # 新しい技術も、実は昔のアイディアを転用してい # ることが多い 高速計算法 ( 谷本 勉之助 ) 「手回し計算機」の高速化手法 多倍長計算で利用可能なアイディアが.. 日本の最初の計算機を動かした企業 ( メーカではない.. ) 富士フイルム 光軸計算が必要 計算室 3 人の女性が同じ計算を実行 ( 手回し計算機 ) => 2 人合えば Okey 無駄が多いので、計算機を開発することに.. VLIW ( Very Long Instruction Word ) 方式 => 命令 Word を長くする 1 命令 (Word) 中に、複数の演算を入れることができる => 同時に実行可能な演算をプログラマが指定できる => ハードの方は、多重化のための回路は不要 ハード都合をソフトへ.. # 実際は Compiler が.. # ハードで、スケジューラを作るのは大変 # => ソフトの方が簡単 # 利用する側 ( ソフト ) は # 並列の構造が判っているはず。 現存の CPU 形式 IA32 ( Pentum / AMD ) 今後 IA64 ( 実は.. VLIW ?? ) 最良で、5, 6 倍の速度になる可能性がある ( ソフトだから.. ) 現在アーキテクチャは、当り外れがある => チューニングが必要 # 新しい技術も実は.. 古いアイディアで... Grid Computing Massiviry Computing Internet を利用して、複数 ( 大量 !! 数万台以上.. ) の CPU を結んで、一つの計算を行う Virtural 観測機 ( 複数の装置を結んで.. ) 天文台 顕微鏡 # 今後の Keyword ( 「並列処理」.. ) == 来週 ( 6/3 ) 9:00 から 演習開始 # Compiler FD を用意する >> 自分 !! 教わるのは Okey File Copy は止めよう Print out の retype は Okey.. 手と目で学ぶ 入力ミスが起きる => その段階で考える (debug..) # やれば無断にならない.. # 授業料が勿体ない.. # Text は、Program の例題を引用するために... 講義に出て、(誤っても構わないので..) 提出すれば大体 Okey => 間に合わない課題は後で出す => 溜めてはいけない。