高性能コンピューティング論2 1 高性能コンピューティング論2 第2回 プロセッサの基礎 高性能コンピューティング学講座 三輪 忍 [email protected] 高性能コンピューティング論2 本日の講義内容 • コンピュータの基礎 • 命令セットアーキテクチャ • 非パイプライン実装 • 命令パイプライン 2 高性能コンピューティング論2 コンピュータの基礎 3 高性能コンピューティング論2 4 プログラムと命令 • プログラム • さまざまな機能を実現 • 例: 文書作成,表計算,web ブラウジングなど • 多様な言語によって記述 add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 • 例: C,C++,Fortran,Java,Ruby,Python など • (コンパイルにより)最終的には命令の列 命令 [ プログラム ] • 命令 • プロセッサへの指示の単位 • 例: 「c = a + b」(a と b を足して c に代入) 「c = a << b」(a を b ビット分 シフトして c に代入) など • a, b, c のような処理の対象はデータと呼ばれる 高性能コンピューティング論2 5 プログラム内蔵方式 • 主記憶にプログラムを格納 • プロセッサは主記憶から命令を順に取得 • 取得した命令にしたがって処理を行う 主記憶 プロセッサ add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t2, $t3 • メリット • 主記憶の内容を変更すれば別の プログラムを実行可能 [ プログラム内蔵方式 ] 高性能コンピューティング論2 6 コンピュータの構成要素 • 主記憶 • 命令とデータの格納場所 主記憶 命令1 • プロセッサ • 演算器(ALU (Arithmetic Logic Unit) など) 命令2 命令3 • さまざまな演算を実行するハードウェア • レジスタ • 高速かつ小容量のメモリ • 一時的な値(命令,データなど)を保持 • プログラム・カウンタ(PC) • 実行する命令のアドレスを示すレジスタ データ1 プロセッサ PC 命令 レジスタ レジスタ ファイル データ2 データ3 演算器 [ コンピュータの概念的な構成 ] 高性能コンピューティング論2 7 コンピュータの動作例 アドレス 0 lw $s1, 0($t0) 4 lw $s2, 4($t0) 8 lw $s3, 8($t0) 12 lw $s4, 16($t0) 16 add $t1, $s1, $s2 20 add $t2, $s3, $s4 24 sub $s0, $t1, $t2 28 sw $s0, 16($t0) 20($t0) 1024 1028 1032 1036 1040 プロセッサ 主記憶 100 10 42 3 0 PC 4 0 $s2 $s1 = M [1024 + 4] 0] 命令レジスタ レジスタファイル 8 ($t0) 9 ($t1) 10 ($t2) ALU 16 ($s0) 17 ($s1) 18 ($s2) 19 ($s3) 20 ($s4) 1024 高性能コンピューティング論2 8 コンピュータの動作例 アドレス 0 lw $s1, 0($t0) 4 lw $s2, 4($t0) 8 lw $s3, 8($t0) 12 lw $s4, 16($t0) 16 add $t1, $s1, $s2 20 add $t2, $s3, $s4 24 sub $s0, $t1, $t2 28 sw $s0, 16($t0) 20($t0) 1024 1028 1032 1036 1040 プロセッサ 主記憶 100 10 42 3 0 PC 12 16 20 $t2 $t1 = $s3 $s1 + $s4 $s2 命令レジスタ lw $s4, 16($t0) レジスタファイル 8 ($t0) 9 ($t1) 10 ($t2) ALU 110 45 16 ($s0) 17 ($s1) 18 ($s2) 19 ($s3) 20 ($s4) 1024 100 10 42 3 高性能コンピューティング論2 9 コンピュータの動作例 アドレス 0 lw $s1, 0($t0) 4 lw $s2, 4($t0) 8 lw $s3, 8($t0) 12 lw $s4, 16($t0) 16 add $t1, $s1, $s2 20 add $t2, $s3, $s4 24 sub $s0, $t1, $t2 28 sw $s0, 16($t0) 20($t0) 1024 1028 1032 1036 1040 プロセッサ 主記憶 100 10 42 3 0 PC 24 20 $s0 = $t1 - $t2 命令レジスタ add $t2, $s3, $s4 レジスタファイル 8 ($t0) 9 ($t1) 10 ($t2) ALU 65 16 ($s0) 17 ($s1) 18 ($s2) 19 ($s3) 20 ($s4) 1024 110 45 100 10 42 3 高性能コンピューティング論2 10 コンピュータの動作例 アドレス 0 lw $s1, 0($t0) 4 lw $s2, 4($t0) 8 lw $s3, 8($t0) 12 lw $s4, 16($t0) 16 add $t1, $s1, $s2 20 add $t2, $s3, $s4 24 sub $s0, $t1, $t2 28 sw $s0, 16($t0) 1024 1028 1032 1036 1040 プロセッサ 主記憶 100 10 42 3 0 PC 28 24 M[1024+16] = $s0 命令レジスタ sub $s0, $t1, $t2 レジスタファイル ALU 8 ($t0) 9 ($t1) 10 ($t2) 1024 16 ($s0) 17 ($s1) 18 ($s2) 19 ($s3) 20 ($s4) 65 100 10 42 3 110 45 高性能コンピューティング論2 11 命令セットアーキテクチャ 高性能コンピューティング論2 12 命令セットアーキテクチャ • ソフトウェアとハードウェアの間の契約 • ソフトウェアが利用可能な命令の一覧 • ハードウェアが処理可能な命令の一覧 • プロセッサの性能や複雑さを決める重要なもの • 複雑な命令の採用 ハードウェアの複雑化,性能の向上(?) • 単純な命令の採用 ハードウェアの簡単化,性能の低下(?) • さまざまな命令セットアーキテクチャが存在 • 例: x86, ARM, POWER, SPARC, MIPS など • 現在は本質的な差はほとんどない • 同じ目標(コンパイラの開発が容易,プロセッサが高性能,低消費電力, 低価格など)を目指して開発を進めてきた結果 高性能コンピューティング論2 13 命令の種類 • 数え方にもよるが,数十種くらい. • 演算命令 • 算術論理演算 • シフト • 浮動小数点演算 • ロード/ストア命令 • 制御命令 演算 命令 • 条件分岐命令 • 無条件分岐(ジャンプ)命令 ロード/ • その他 ストア • システム・コール 命令 • コプロセッサ制御 分岐 命令 [ MIPS命令セットアーキテクチャの一部 ] 高性能コンピューティング論2 14 命令フォーマット op 31 Rs 25 op 31 op op 20 Rs 25 31 Rt Rd 15 Rt 20 func 10 0 immediate 15 0 jump_target 25 : op code 処理の種類 0 Rs : source reg # Rt : target reg # Rd : destination reg # 処理対象の データ ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 15 演算命令 • 算術論理演算 (ALU, Arithmetic Logic Unit) 命令 • r[Rd] = r[Rs] + r[Rt] • r[Rt] = r[Rs] + immediate • シフト命令 • r[Rd] = r[Rs] << shamt op 31 Rs 25 op 31 Rt 20 Rs 25 Rd 15 Rt 20 shamt 10 func 0 immediate 15 0 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 16 ロード/ストア命令 • ロード命令 • r[Rt] = *(r[Rs] + immediate) • ストア命令 • *(r[Rs] + immediate) = r[Rt] op 31 Rs 25 Rt 20 immediate 15 0 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 17 制御命令 (1/2) • (条件)分岐命令 • if (cond) PC = PC + immediate • cond: • R[Rs] == 0, R[Rs] > 0, … • R[Rs] == R[Rt] op 31 Rs 25 Rt 20 immediate 15 0 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 18 制御命令 (2/2) • ジャンプ命令(直接) • PC = PC + jump_target • ジャンプ命令(レジスタ間接) • PC = r[Rs] op 31 25 op 31 jump_target 0 Rs 25 Rt 20 immediate 15 0 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 非パイプライン実装 19 高性能コンピューティング論2 20 コンピュータ の はたらき プログラム・カウンタ 0x000 ld %1 = *(%sp + 0) フェッチ アドレス 命令 ld %1 = *(%sp + 0) 0x000 bge %1, +12 0x004 sub %1 = %0 – %1 0x008 st *(%sp + 0) = %1 0x00c ret 0x010 命令レジスタ 0x014 ロード 演算 アドレス %0 演算器 0 %1 データ %2 アドレス %sp 2 0x100 : a 0x100 データ レジスタ・ファイル ストア 主記憶 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 21 命令の実行フェーズ • 5 フェーズ 1. IF 2. ID 3. EX 4. MEM 5. WB 命令フェッチ 命令デコード/レジスタ読み出し 実行 メモリ・アクセス レジスタ書き戻し (Write-Back) • 名称は歴史的(esp. ID) ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 100 IF PC 0 200 ID IR Rs 100 ld 1 2 8 104 add 2 3 1 Rt Reg File EX MEM 22 208 1000 DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 23 実行例 100 ld r2 = *(r1 + 8) 104 add r3 = r2 + 1 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 24 104 100 IF PC IR ld 1 2 8 0 200 ID Rs 100 ld 1 2 8 104 add 2 3 1 Rt Reg File EX MEM 208 1000 DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 25 104 IF PC IR ld 1 2 8 0 Rs 200 ID 100 ld 1 2 8 104 add 2 3 1 Rt Reg File 200 8 EX MEM 208 1000 DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 26 104 IF PC IR ld 1 2 8 0 Rs 200 ID 100 ld 1 2 8 104 add 2 3 1 Rt Reg File 200 8 EX 208 1000 208 MEM DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 27 104 IF PC IR ld 1 2 8 0 Rs 200 ID 100 ld 1 2 8 104 add 2 3 1 Rt Reg File 200 8 EX 208 1000 208 MEM DR MDR 1000 MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 28 104 IF PC IR ld 1 2 8 0 Rs 200 ID Reg File 1000 200 100 ld 1 2 8 104 add 2 3 1 Rt 8 EX 208 1000 208 MEM DR MDR 1000 MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 29 104 108 IF PC IR add 2 3 1 0 200 ID Reg File 1000 Rs 100 ld 1 2 8 104 add 2 3 1 Rt EX MEM 208 1000 DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 30 108 IF PC IR add 2 3 1 0 Rs 200 ID Reg File 1000 1000 100 ld 1 2 8 104 add 2 3 1 Rt 1 EX MEM 208 1000 DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 31 108 IF PC IR add 2 3 1 0 Rs 200 ID Reg File 1000 1000 100 ld 1 2 8 104 add 2 3 1 Rt 1 EX 208 1000 1001 MEM DR MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 32 108 IF PC IR add 2 3 1 0 Rs 200 ID Reg File 1000 1000 100 ld 1 2 8 104 add 2 3 1 Rt 1 EX 208 1000 1001 MEM DR MDR 1001 MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 33 108 IF PC IR add 2 3 1 0 Rs 200 ID Reg File 1000 Rt 1001 1000 100 ld 1 2 8 104 add 2 3 1 1 EX 208 1000 1001 MEM DR MDR 1001 MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より 高性能コンピューティング論2 命令パイプライン 34 高性能コンピューティング論2 35 非命令パイプライン IF ID EX MEM WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 36 命令パイプライン IF ID EX MEM WB パイプライン・ステージ ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 37 命令パイプラインの表現 IF IF ID EX MEM WB cycle ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 38 パイプライン化の効果 • レイテンシ • 1命令の処理時間 • ほとんど変わらない(やや延びる) • スループット • 単位時間あたりの実行命令数 • ほぼステージ数倍になる • 例: 5ステージの命令パイプラインのスループットはパイプライン化前の約5倍 高性能コンピューティング論2 39 パイプライン・ハザード • パイプライン・ハザード (hazard): • パイプライン動作を妨げる要因 • 分類: 1. 構造ハザード (structural hazard): ハードウェアの資源不足が原因 2. 非構造ハザード: ソフトウェア内の依存関係が原因 a. b. データ・ハザード (data hazard): 制御ハザード (control hazard): データ依存 制御依存,i.e. 分岐命令の実行 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 IF 100 PC 0 200 ID Reg File 5 IR Rs DR ld 1 2 10 100 1000 210 Rt 1つのメモリ・ポート をIFステージとMEM ステージが共有. すると… EX MEM 40 MDR MA MD Main Memory WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 41 構造ハザードの例 • メモリのポートの不足 cycle IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM IF ID EX ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より W M 高性能コンピューティング論2 42 データ・ハザード • 命令間のデータ依存 cycle add r4 = r1 + r2 add r5 = r4 + r3 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 43 制御ハザード • 分岐命令の実行 cycle IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 ハザードに対する一般的な対処 • 対処: • パイプライン・インターロック (interlock) 「止める機構」 • パイプライン・ストール (stall) 「止まる現象」 • パイプライン・バブル (bubble) が発生 • 「パイプラインが乱れる」 • その結果,性能が低下 44 高性能コンピューティング論2 45 ロード命令 と バブル IF ID EX MEM WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 46 ロード命令 と バブル IF インターロック ID EX MEM WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 47 バブルの表現 cycle IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM バブル WB ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 48 ハザードへのアーキテクチャ的対処 • 方針: インターロック,ストールする機会を減らす • インターロック,ストールするとバブルが発生し,性能が低下 • 構造ハザード • 資源の不足が原因 • 資源の追加で消える • 例: IF ステージと MEM ステージでメモリ・ポートが競合する場合,命令 / データ・キャッシュ を分離して各ステージが別メモリにアクセスするように変更 • 非構造ハザード • プログラムが原因 • 原理的に消えない • バブルの削減 高性能コンピューティング論2 バブルの削減 (データ・ハザード) cycle IF ID EX MEM WB IF IF ID OR EX MEM EX ME MEM WB WB OR EX IF OR : Operand Read IF OR EX IF MEM OR EX WB MEM WB バイパス 4 9 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 IF 100 PC 0 200 ID Reg File 5 IR Rs DR 100 1000 210 Rt EX MEM ld 1 2 10 MDR MA MD Main Memory WB 50 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 バブルの削減(制御ハザード) cycle IF ID EX MEM WB IF ID EX MEM WB IF IF OR EX IF MEM WB IF WB IF MEM IF OR EX MEM WB nPC : next PC 選択 WB OR EX OR nPC EX MEM OR EX EX OR : Operand Read OR nPC EX MEM IF ID MEM 遅延分岐 WB MEM WB WB 51 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 52 遅延分岐 • 「分岐命令の遅延スロットに置かれた命令は(分岐の成立/不 成立にかかわらず)必ず実行される」という仕様 • 遅延スロット • 分岐命令の次の命令(を置く場所) • 通常,1命令分 • 遅延スロットに入れる命令 • 分岐命令の周辺から探す • 見つからなければ,nop 命令を入れる • メリットとデメリット • 遅延スロットを埋めた分だけ性能向上 • 埋まらなかった分だけ nop が増加 高性能コンピューティング論2 53 コード例 x = a; if (x < 0) x = −x; y = b; if (y < 0) y = −y; ld %1 = [%sp + 0] // a bgt %1, L0 sub %1 = 0 − %1 L0: ld %2 = [%sp + 4] // b bgt %1, L1 sub %2 = 0 − %2 L1: add %3 = %1 + %2 st [%sp + 0] = %3 // z z = x + y; ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 54 コード例(遅延分岐のある ISA) x = a; if (x < 0) x = −x; y = b; if (y < 0) y = −y; ld %1 = [%sp + 0] // a bgt %1, L0 ld %2 = [%sp + 4] // b L0: bgt %1, L1 nop sub %2 = 0 − %2 L1: add %3 = %1 + %2 st [%sp + 0] = %3 // z sub %1 = 0 − %1 z = x + y; ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 55 実行の様子 ld %1 = [%sp + 0] bgt %1, L0 sub %1 = 0 − %1 L0: ld %2 – [%sp + 4] bgt %2, L1 sub %1= 0 − %2 L1: add %3 = %1 + %2 st [%sp + 0] = %3 F D X F M D W X M F W D X F M W D X M F D W X M F W D X F M W D X M W D X M F W ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 56 実行の様子(遅延分岐) ld %1 = [%sp + 0] bgt %1, L0 ld %2 – [%sp + 4] L0: sub %1 = 0 − %1 bgt %2, L1 nop D X F M W D X M W F F D X M W D X M W D X M W D X M W D X M W D X M W D X M W D X M F F F sub %1= 0 − %2 L1: add %3 = %1 + %2 st F [%sp + 0] = %3 F F F F W ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より 高性能コンピューティング論2 まとめ • コンピュータの基礎 • 命令セットアーキテクチャ • 非パイプライン実装 • 命令パイプライン 57 情報システム基盤学基礎1 次回 • 10/29(木) 10:40~ • 22日は休講 • 「スーパスカラプロセッサの基礎」について解説 58
© Copyright 2024 ExpyDoc