Hall
>
Tips
>
021
>
01
10/02
コンピュータ・アーキテクチャ
ソフトウェアから見たハードウェアの性質・属性
ユーザとハードウェアのインターフェース(特にアセンブラ・プログラミング)
ファミリーコンピュータ(IBM360〜)にコンパチビリティを与える
問題点
インタフェースになり得る種々のレベル(このうちのどれをインターフェースにするか)
高級言語レベル(Java,VB,Lisp)
中間言語レベル(高級言語マシン)
仮想命令コードレベル(WAM)
命令レベル(CISCマシン、RISCマシン)
マイクロ命令レベル(マルチメディアプロセッサ)
ISP(Instruction Set Processor)としてPMS(Processor Memory Switch)の上に定義
メモリとレジスタに命令を適用して状態を変化→基本実行モデル
計算の高速化を可能とするハードウェアインターフェース
Binary to binary translationの普及→何がアーキテクチャか不明瞭化
プログラミング言語を用いたソフトウェアの普及→コンパチビリティの意味変化
ソフトウェア商品の品質保証→バイナリプログラム上でしか検証し得ない
ハードウェアとOSを含めた計算メカニズムの抽象化
機能のソフトウェアによる実現ハードウェアによる実現の連続性
OSの標準化
高速化
原理の高速化〜量子計算・バイオコンピュータ
スイッチングの高速化〜単電子デバイス
素子の高速化〜小型化
素子の大容量化〜小型化・垂直集積化
演算機の高速化〜加減算・暗号化・圧縮
垂直方向の並列化〜パイプライン・専用プロセッサ
水平方向の並列化〜命令内の並列化・命令レベルの並列化
アルゴリズムとデータ構造
問題の定式化
高速化の変遷
初期アーキテクチャ
標準的命令形式の追求、オペランド数
汎用命令セットアーキテクチャ
汎用レジスタ、キャッシュ、パイプライン並列
RISC形式、パイプライン、スコアボード
スタックアーキテクチャ、ハードウェアスタック
言語指向アーキテクチャ
言語構造に合わせた構造、命令セット、マイクロプログラム(一命令で多くのことをする)
SYMBOL、Lisp、prologマシン
バローズインタプリタ(万能中間言語)
マルチスレッド、データフローアーキテクチャ(並列化)
HEP、データフローマシン、言語構造にあわせる
ベクトルコンピュータ
CRAY-1、VP-100、SX-1 — FORTRANとループ構造に特化
RISCアーキテクチャ
コンパイラによる高速化とクロック高速化
IBM801、SPARC...
命令レベル並列性の利用
スーパースカラ...
標準的高速化機構による高速化
キャッシュ、分岐予測、深いパイプライン、グラフィック演算言語...
再び言語指向
言語構造にあわせた構造、命令セット、マイクロプログラム
JAVAマシンなど
マルチスレッド、データフロー
ハイパースレッディング、SMT、...
狭義アーキテクチャを与えるもの
ハードウェアが扱うデータ形式
整数、浮動小数点数、ピクセル値、文字、Bool、ストリング、アドレス、ポインタ...
命令形式
命令フォーマット
命令コード、入力オペランド指定、出力オペランド指定、分岐指定
メモリアドレスとメモリ操作
メモリアドレス空間、アドレッシングモード、特殊アドレス
アドレス変換方式
スタック、キューなどのメモリアクセス操作
ユーザレジスタ、システムレジスタ、メモリ管理レジスタ
レジスタの意味、レジスタ内のビットの意味、メモリ管理方式
割り込み〜外部・内部
割り込み要因と割り込み時操作
プロセッサモードと保護機構
狭義アーキテクチャの意義
機械語でプログラミング可能
コンパイラの作成
情報だけでは構成は不可能
↓
情報だけでは構成は不可能
- 広義アーキテクチャの定義
- プロセッサ要素
- 電気的特性
広義アーキテクチャを与えるもの
パイプライン・アーキテクチャ ⇒ 命令実行順序モデル
メモリ高速化アーキテクチャ ⇒ メモリコンシステンシモデル
仮想記憶アーキテクチャ ⇒ 共有メモリモデル
命令形式設計の指針
性能の追求
絶対性能 〜 [実行時間] = [命令数] × [クロック数/1命令] × クロック時間
バイナリプログラムの大きさ
コストパフォーマンス
コスト = チップ制作費 〜 f(シリコンダイの大きさ,ピン数)
パフォーマンス = 1/[実行時間]
使いやすさ
アセンブラでプログラムする際に重要
ソフトウェアによる最適化との親和性
エラー検出/処理の容易さ
美しさ
無駄が無い
拡張性がある(メモリアドレス幅など)
性能評価法
実機での実行
最も信頼性が高い
実用的規模のプログラムが実行可能
コンパイラ・OSに強く依存
設計パラメータの変更ができない
測定可能データ項目の制限
新しいアーキテクチャの評価は実機が無いので難しい
エミュレーション評価
binary to binaryなどで命令を既存CPU命令列に変換
性能評価用命令の埋め込み可能
シミュレーション評価
レジスタトランスファーレベル シミュレーション
トレースベース シミュレーション
キューイングモデルベースのシミュレーション
遅い
命令ミックスによる評価
命令実行時間の命令頻度による加重平均
被評価プログラム
実プログラム
入力、出力、オプションなど
シミュレーションでは困難
標準化(様々な実行時間、メモリサイズ)された応用プログラム
実機からシミュレーションまでOK
プログラム・カーネル
実プログラムから実行時間比の大きい部分を抽出
ループ、多重ループ、再帰などの繰り返し構造
実行時間の基本測定に適する
合成ベンチマーク(意味の無いループなど)
命令実行頻度が実プログラムと同じになるように作ったもの
手計算でもOK
トイプログラム
簡単なプログラム、手でコンパイル可能
性能解析の意味は少ない