第4回講義

計算機アーキテクチャー Computer Architecture
命令:マシンの言葉II
1
計算機アーキテクチャー Computer Architecture
本日の授業の内容
① コンピュータ・ハードウエア内での
手続きのサポート (サブプログラムの呼出し)
② アドレッシング・モードのまとめ
③ プログラムの起動、アセンブラ、コンパイラ、リンカ
④ プロセッサの性能向上には?
2
計算機アーキテクチャー Computer Architecture
手続き (サブルーチン、関数)
 Java
public static int add (int a, int b) {
int c = a + b; return c;
}
 Perl
sub add (a, b, c) {
return c = a+b
}
BASIC (Beginner's All-purpose Symbolic Instruction Code)
100 GOSUB 1000
1000 C = A + B
1010 RETURN
1975年にビル・ゲイツとポールアレンの2人がMicroSoftという会社を起し、最初の製品としてBASICインタプリ
タを発売した。
3
計算機アーキテクチャー Computer Architecture
4
コンピュータ・ハードウエア内での手続きのサポート
呼出し側 (Caller)
mainプログラム
被呼出し側 (Callee)
手続き
引数
①呼出し側が被呼出し側から
アクセスできる場所に引数を
置く
②被呼出し側に制御を移す
(PCの値を変える)
③ 必要なタスクを実行する
結果の値
④呼出し側からアクセスでき
る場所に結果を置く
⑤ 制御を元の位置に戻す
(PCの値を変える)
計算機アーキテクチャー Computer Architecture
5
リンク形成
リンク形成:被呼出し側から呼出し側にプログラムが戻れるようにする
①戻りアドレス(戻った時に最初に実行する命令の場所)を確保
→プログラム・カウンタ PC : 現在実行中の命令のアドレスを保持するレジスタ
すべての手続き共通に$31に割付け
②使用レジスタの使用前の内容を確保(被呼出し側の内容を壊さない)
→使用開始時に待避し、使用終了時に復元
手続きの一般的処理フロー
開始処理
本体処理
終了処理
・使用レジスタ
内容の待避
・ 演算等の手続き内での処理
・ 上位手続きの戻りアドレスを待避
・ 下位手続きの呼出し
・ 上位手続きの戻りアドレスを復元
・使用レジスタ
内容の復元
{
計算機アーキテクチャー Computer Architecture
6
手続きを実現する為に (その1)
①引数の場所と戻り値(結果の値)を置くレジスタ
をあらかじめCallerとCalleeで定めておく
Name Register number
$zero
0
$v0-$v1
2-3
$a0-$a3
4-7
$t0-$t7
8-15
$s0-$s7
16-23
$t8-$t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Usage
定数値 0
サブルーチンの戻り値
サブルーチンの引数
一時レジスタ
Cプログラムの変数
一時レジスタ
グローバル・ポインタ
スタック・ポインタ
フレーム・ポインタ
サブルーチンからの戻りアドレス
計算機アーキテクチャー Computer Architecture
7
手続きを実現する為に (その2)
②サブルーチンの戻り番地を格納する命令
(1) Jump and Link (jal)
target address
3
jal
jr $ra
$raの示す
アドレス
target addressに無条件ジャンプ。
次の命令のアドレスを$raに待避
(2) Jump Register (jr)
0
rs
0
rs($ra)で示されるアドレスに無
条件ジャンプ
8
計算機アーキテクチャー Computer Architecture
8
手続きを実現する為に (その2-2)
②戻り番地を置くレジスタをあらかじめ定めておく
Name Register number
$zero
0
$v0-$v1
2-3
$a0-$a3
4-7
$t0-$t7
8-15
$s0-$s7
16-23
$t8-$t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Usage
定数値 0
サブルーチンの戻り値
サブルーチンの引数
一時レジスタ
Cプログラムの変数
一時レジスタ
グローバル・ポインタ
スタック・ポインタ
フレーム・ポインタ
サブルーチンからの戻りアドレス
計算機アーキテクチャー Computer Architecture
9
手続きを実現する為に (その3)
③ レジスタの待避と復元
呼出し側と被呼出し側が双方レジスタを使って演算
呼出し側のレジスタの状態を保存する必要あり
(a) $t0-$t9, $a0 - $a3, $v0 - $v1
呼出し側が必要なレジスタだけ待避
これらは被呼び出し側
が破壊しても良い為
(被呼出し側は好きに使う。内容保存不要)
(b) $s0-$s7, $sp, $fp, $gp, $ra
被呼出し側が必要なレジスタを待避
これらはテンポラリの
レジスタでない為
(リターン時に被呼出し側が回復)
どこに待避する?
→ メモリへ
計算機アーキテクチャー Computer Architecture
10
手続きを実現する為に (その3-2)
③呼び出し側、被呼び出し側、どちらがレジスタ
の退避をするのか、あらかじめ定めておく
呼び出し側が退避
Name Register number
$zero
0
$v0-$v1
2-3
$a0-$a3
4-7
$t0-$t7
8-15
$s0-$s7
16-23
$t8-$t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Usage
定数値 0
サブルーチンの戻り値
サブルーチンの引数
一時レジスタ
Cプログラムの変数
一時レジスタ
グローバル・ポインタ
スタック・ポインタ
フレーム・ポインタ
サブルーチンからの戻りアドレス
被呼び出し側が退避
計算機アーキテクチャー Computer Architecture
11
スタック (後入れ先出し)
スタック(stack):データの待避(save)と復元(restore)に適した
後入れ先出し(last in first out)のデータ構造
プッシュ(push):データ待避の際、スタックの先頭にデータを入れる
ポップ(pop):データ復元の際、スタックの先頭からデータを取り出す
push
High address
pop
$sp
$sp
Contents of register $t1
Contents of register $t0
$sp
Low address
a.
$sp : スタック・ポインタ
Contents of register $s0
b.
c.
計算機アーキテクチャー Computer Architecture
12
手続き内の変数をメモリに退避したい
レジスタに割り付けられない手続き内の変数は?
手続きフレーム (procedure frame)を使う
High address
$fp
$fp
$sp
$sp
$fp
退避された$a0-$a3
Saved argument
registers (if any)
Saved return address
Saved saved
registers (if any)
退避された$ra
退避された$s0-$s7
Local arrays and
structures (if any)
ローカルな配列・データ構造
$sp
Low address
a.
b.
c.
計算機アーキテクチャー Computer Architecture
待避と復元のプログラム
呼出し側
sub $sp, $sp, 8
sw $t1, 4($sp)
sw $t0, 0($sp)
jal target address
被呼出し側
add $v0, $s0, $zero
jr $ra
呼出し側
lw $t1, 4($sp)
lw $t0, 0($sp)
add $sp, $sp, 8
待避
スタックを2word分広げる
スタックへ$t0-$t1をpush
復元
スタックから$t0-$t1をpop
スタックを元に戻す
13
計算機アーキテクチャー Computer Architecture
アドレッシングモード
• 命令のオペラントの場所を示す方法
• オペラントは、レジスタまたはメモリ上にあ
る
(1) add rd, rs, rt
0
rs rt
rd
0
32
(2) lw rt, address(rs)
35
rs rt
address
14
計算機アーキテクチャー Computer Architecture
15
MIPSのアドレシング・モード
アドレシング方式 : 命令においてデータ存在場所を指定する方式
①レジスタ・アドレシング
add, sub,…
データ存在場所=レジスタ
<メモリ上アドレスなし>
op
rs
rt
rd
shamt funct
③即値アドレシング
データ=指定数値
<メモリ上アドレスなし>
op
rs
rt
addi, andi,…
immediate
レジスタ
②ベース相対アドレシング
lw, sw,…
メモリ上アドレス=レジスタ内の数値
+指定オフセット数値
op
rs
rt
レジスタ
address
メモリ
④PC相対アドレシング
beq, bne,…
メモリ上アドレス=PC内の数値
+指定オフセット数値
op
rs
rt
PC
PC : プログラム
カウンタ
address
メモリ
計算機アーキテクチャー Computer Architecture
16
PC相対・擬似直接アドレシング
④PC相対アドレシング
beq, bne,…
メモリ上アドレス=PC内の数値+指定オフセット数値*4
op
rs
rt
address
メモリ
PC
⑤擬似直接アドレシング
j, jal,…
メモリ上アドレス=PCの上位4bitと指定オフセット数値*4を結合
op
address
PC
31-28
PC
PC:プログラムカウンタ
:
address
00
メモリ
計算機アーキテクチャー Computer Architecture
17
プログラムの翻訳階層
プログラムがコンピュータで実行可能な状態になるまでの流れ
高水準言語プログラム
<コンピュータの命令セットに依存せず>
A,B,C : 変数
C=A+B
コンパイラ(コンピュータの命令セットに従い翻訳)
アセンブリ言語プログラム
(シンボル表現)
add C,A,B
# C=A+B
アセンブラ(擬似命令の翻訳を含む)
機械語プログラム
(数値表現)
リンカ、ローダ
コンピュータ内メモリ
add
A
A,B,C : 場所
B
C
add
00000010010010000100000000100000
演算命令のオペランドは3つに固定
・ハードウエアが単純になるから
・原則1 : 単純性は規則性につながる
・n個の数の和は加算命令を(n-1)回実行
擬似命令 : ハードウエア的に実現されていないアセンブリ言語上の命令
計算機アーキテクチャー Computer Architecture
プログラムの翻訳階層
ハードウエア設計
(2)
動作記述言語 (Verilog, VHDL)
C program
Compiler
ブール式記述(and, or)
Assembly language program
Assembler
Object: Machine language module
Object: Library routine (machine language)
Linker
FPGAダウンロード用データ
Executable: Machine language program
Loader
FPGA
Memory
18
計算機アーキテクチャー Computer Architecture
19
リンカ
リンク・エディタ(link editor)またはリンカ(linker)
個別にアセンブルされた機械語プログラムをつなぎ合わせるシステム・プログラム
[機能]個々のモジュールを連続して並べる
モジュール間の参照関係を解明
モジュール内で使用されているアドレスを新しいアドレスに変換
ソース・プログラム
MAIN
SUB1
:
SUBn
コ
ン
パ
イ
ル
オブジェクト・モジュール
ア
セ
ン
ブ
ル
ロード・モジュール
MAIN
SUB1
リ
:
ン
SUBn
ク
ライブラリ
MAIN
SUB1
:
SUBn
ライブ
ラリ
計算機アーキテクチャー Computer Architecture
プロセッサの性能向上の方法
プロセッサの性能向上の方法
CPU時間=実行命令数×CPI×クロック・サイクル時間
CPI(clock cycle per instruction):命令当りの平均クロック・サイクル数
クロック・サイクル時間 :ハードウエア内で事象を起こす時間間隔の最小単位
性能向上の方法
① 実行命令数を減らす -> 複雑な命令
② CPIを減らす
-> デコードしやすい簡単な命令
③ クロック・サイクル時間を減らす -> 演算しやすい簡単な命令
20
計算機アーキテクチャー Computer Architecture
RISCの考え方
RISC (Reduced Instruction Set Computer) の性能向上の方法
① ロード・ストア命令を中心にした簡単な命令セット
メモリの入出力する命令はロード・ストアのみ
( CPIを減らす,クロック・サイクル時間を減らす)
② 簡単な命令フォーマット
( CPIを減らす,クロック・サイクル時間を減らす)
③ 実行命令数が多くても良い?
技術の進歩・境界条件の変化
大容量メモリの実現 (プログラムの大きさを心配しなくていい)
キャッシュメモリ (メモリアクセスの時間が早くなった)
21
計算機アーキテクチャー Computer Architecture
コンピュータの性能向上の方法
プロセッサ1個で性能を上げる
パイプライン
命令
命令
メモリ レジスタ
演
算
フェッチ デコード
アクセス 書込み
命令
命令
メモリ レジスタ
フェッチ デコード 演 算 アクセス 書込み
命令
命令
メモリ レジスタ
演
算
フェッチ デコード
アクセス 書込み
スーパースカラー
演 算
命令
命令
フェッチ デコード
演 算
演 算
メモリ レジスタ
アクセス 書込み
22
計算機アーキテクチャー Computer Architecture
コンピュータの性能向上の方法 (2)
プロセッサを並列に沢山ならべる
命令一つで複数のデータをいっぺんに処理
マルチメディア命令、ベクタープロセッサ
シストリックアレイプロセッサ
複数の命令をいっぺんに処理
マルチスレッド Intel Hyper-Threading
デュアルコア
23