計算機アーキテクチャー 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
© Copyright 2024 Paperzz