π Pipeline
Pipeline (ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ) β ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠ°ΠΏΠΎΠ² (ΡΡΠ°Π΄ΠΈΠΉ), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΊΠ°ΠΆΠ΄Π°Ρ Π½Π° ΡΠ²ΠΎΡΠΌ ΡΡΠ°ΠΏΠ΅. ΠΡΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π·Π° ΡΠ°ΠΊΡ (IPC).
π§ ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ
ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π΄ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Fetch, Decode, Execute, Memory, Writeback). ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ°Π΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ. ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΠΊΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΡΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°ΠΏ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠ°Π΄ΠΈΡΡ .
ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ 5-ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° MIPS
- IF (Instruction Fetch) β Π²ΡΠ±ΠΎΡΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π² PC.
- ID (Instruction Decode & Register Fetch) β Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
- EX (Execute) β Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ/Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ°.
- MEM (Memory access) β ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ (ΡΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ ).
- WB (Write Back) β Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡΡ.
Π‘Ρ Π΅ΠΌΠ° ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°
flowchart LR IF["IF: Instruction Fetch"] ID["ID: Instruction Decode"] EX["EX: Execute"] MEM["MEM: Memory Access"] WB["WB: Write Back"] IF --> ID --> EX --> MEM --> WB
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ
-
ΠΠ° ΡΠ°ΠΊΡΠ΅ 1: ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ 1 β Π½Π° IF
-
ΠΠ° ΡΠ°ΠΊΡΠ΅ 2: ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ 1 β Π½Π° ID, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ 2 β Π½Π° IF
-
ΠΠ° ΡΠ°ΠΊΡΠ΅ 3: ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ 1 β EX, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ 2 β ID, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ 3 β IF
β¦ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ
-
Hazards (ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ): ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π΄ΡΡΠ³ΠΎΠΉ, ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ/ΡΠ΅ΡΡΡΡΠ°ΠΌ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ.
-
Data hazard: Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ.
-
Control hazard: Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° (Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ).
-
Structural hazard: ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π·Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ.
-
-
Π’Π΅Ρ Π½ΠΈΠΊΠ° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²:
-
Forwarding (Data bypassing): ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π½Π°ΠΏΡΡΠΌΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°Π΄ΠΈΡΠΌΠΈ.
-
Stalls (Bubble insertion): Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°.
-
Branch prediction: ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ.
-
Out-of-order execution: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π²Π½Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ.
-
Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΡΡ Π΅ΠΌΠ° Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ
gantt title Pipeline execution timeline dateFormat X axisFormat %d section IF Inst1 :done, 1, 1 Inst2 :done, 2, 1 Inst3 :done, 3, 1 Inst4 :done, 4, 1 Inst5 :done, 5, 1 section ID Inst1 :done, 2, 1 Inst2 :done, 3, 1 Inst3 :done, 4, 1 Inst4 :done, 5, 1 Inst5 :done, 6, 1 section EX Inst1 :done, 3, 1 Inst2 :done, 4, 1 Inst3 :done, 5, 1 Inst4 :done, 6, 1 Inst5 :done, 7, 1 section MEM Inst1 :done, 4, 1 Inst2 :done, 5, 1 Inst3 :done, 6, 1 Inst4 :done, 7, 1 Inst5 :done, 8, 1 section WB Inst1 :done, 5, 1 Inst2 :done, 6, 1 Inst3 :done, 7, 1 Inst4 :done, 8, 1 Inst5 :done, 9, 1
βοΈ ΠΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ
-
ΠΠΎ Π²ΡΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ CPU ΠΈ MCU β ΠΎΡ ΠΏΡΠΎΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ².
-
Π GPU Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ.
-
Π ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² (DSP) ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΡΡ .
-
Π ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ , ΡΠ΅ΡΠ΅Π²ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ , ΠΌΠΈΠΊΡΠΎΡΡ Π΅ΠΌΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ .
-
Π ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° RISC ΠΈ CISC ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² (MIPS, ARM, x86, RISC-V).
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
-
Π‘ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π±Π΅Π· ΡΠΎΡΡΠ° ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ.
-
Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ IPC (ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π° ΡΠ°ΠΊΡ).
-
ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
-
ΠΠΈΠ±ΠΊΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° ΡΡΠ°Π΄ΠΈΠΉ, ΡΡΠΏΠ΅ΡΡΠΊΠ°Π»ΡΡΠ½ΠΎΡΡΡ).
-
Π£Π»ΡΡΡΠ΅Π½ΠΈΠ΅ ΡΠ½Π΅ΡΠ³Π΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π·Π° ΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
-
Π£ΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ: ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π±ΡΡΠ΅ΡΡ, ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΉ.
-
ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² (hazards), ΡΡΠ΅Π±ΡΡΡΠΈΡ Π·Π°ΡΡΠ°Ρ Π½Π° ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ (stalls, forwarding).
-
ΠΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΠ΅ Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ.
-
ΠΠΎΠ²ΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
-
Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠ»ΠΎΡΠ°Π΄ΠΈ ΠΈ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΡΡ Π΅ΠΌΡ.
π Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
CPU, Microarchitecture, Hazard, Forwarding, Branch Prediction, Superscalar, Out-of-order Execution, Stages, Cache, ALU, Register File
Π Π΅Π·ΡΠΌΠ΅
Pipeline β ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠ°Π΄ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ½Π° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΡΠ½ΠΈΠΆΠ°Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ throughput. ΠΠ»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΡΡΠ±Π° Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌΠΈ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, ΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π½ΠΎ ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΎΡΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ 5-ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° (Π½Π° C)
#include <stdio.h>
typedef enum {IF, ID, EX, MEM, WB} Stage;
typedef struct {
int instruction;
Stage stage;
} PipelineRegister;
#define PIPELINE_DEPTH 5
int main() {
PipelineRegister pipeline[PIPELINE_DEPTH] = {0};
int instructions[] = {10, 20, 30, 40, 50};
int cycle = 0, num_instructions = 5;
while (cycle < num_instructions + PIPELINE_DEPTH - 1) {
printf("Cycle %d: ", cycle + 1);
for (int i = PIPELINE_DEPTH - 1; i > 0; i--) {
pipeline[i] = pipeline[i - 1];
}
pipeline[0].instruction = (cycle < num_instructions) ? instructions[cycle] : 0;
pipeline[0].stage = IF;
for (int i = 0; i < PIPELINE_DEPTH; i++) {
if (pipeline[i].instruction != 0)
printf("[Instr %d @ stage %d] ", pipeline[i].instruction, i + 1);
}
printf("\n");
cycle++;
}
return 0;
}
ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ:
Hennessy & Patterson βComputer Architectureβ, Intel SDM, ARM Architecture Reference Manual, osdev.org, habr.com, Wikipedia, IEEE papers, MIPS architecture manuals.