Skip to main content
  1. Posts/
  2. Today I Learned/

CSAPP 4.5 Pipelnied Y86-64 Implementations

·2147 words·11 mins
Jiho Kim
Author
Jiho Kim
๋‹ฌ๋ ค ๋˜ ๋‹ฌ๋ ค

๐Ÿ“ ์ƒ์„ธ ์ •๋ฆฌ
#

4.5.0 Intro
#

  • ์ด์ œ ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค.
  • SEQ๋ฅผ ์†Œํญ ์ˆ˜์ •ํ•˜์—ฌ PC๊ณ„์‚ฐ์„ fetch ๋‹จ๊ณ„๋กœ ์˜ฎ๊ธฐ์ž.
  • ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.
  • ์•„์ง ์ข…์†์„ฑ์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, ์ผ๋‹จ ํšจ์œจ์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

4.5.1 SEQ+: Rearranging the computation Stages
#

  • SEQ์˜ 5๋‹จ๊ณ„๋ฅผ ์•ฝ๊ฐ„ ์žฌ๋ฐฐ์—ดํ•ด์„œ PC์—…๋ฐ์ดํŠธ ๋‹จ๊ณ„๊ฐ€ ํด๋ก ์ฃผ๊ธฐ์˜ ๋์ด ์•„๋‹Œ ์‹œ์ž‘์— ์˜ค๋„๋ก ํ•˜์ž.
    • ์ด ์„ค๊ณ„๋ฅผ SEQ+๋ผ๊ณ  ํ•œ๋‹ค.
  • PC๋ฅผ ํด๋ก ์ฃผ๊ธฐ์˜ ์‹œ์ž‘์— ์˜ค๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„ , ์ด์ „์˜ icode, Cnd, valC, valM, valP๋“ฑ์ด ํ•„์š”ํ•˜๋‹ค.
    • ์ด์   ์ด ๋‹ค์„ฏ๊ฐœ๋ฅผ ํ•˜๋“œ์›จ์–ด ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋‘ฌ์„œ ์ €์žฅํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
  • ์ด๊ฑธ ํšŒ๋กœ ๋ฆฌํƒ€์ด๋ฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.

4.5.2 Inserting Pipeline Registers
#

  • ์ค‘๊ฐ„์— stat, icode, ifun, rA, rB, valC, valA, valP, dstE… ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ์ธต์„ ๋งŒ๋“ค์ž.
  • SEQ์˜ ๋‹จ๊ณ„์™€ ๊ฐ™์ง€๋งŒ, ๋‹จ๊ณ„ ์‚ฌ์ด๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋ถ„๋ฆฌํ•˜๊ณ  ์žˆ๋Š”๊ฒƒ์ด๋‹ค.
  • ๊ทธ ์ธต์˜ ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • F: PC์˜ ์˜ˆ์ธก๊ฐ’ ๋ณด์œ 
    • D: Fetch์™€ Decode ์‚ฌ์ด์—์„œ, ์ตœ๊ทผ์— ์ธ์ถœ๋œ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ •๋ณด ๋ณด์œ 
    • E: Decode์™€ Execute ์‚ฌ์ด์—์„œ, ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋””์ฝ”๋“œ๋œ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๋ ˆ์ง€์Šคํ„ฐํŒŒ์ผ์—์„œ ์ฝ์€ ๊ฐ’ ๋ณด์œ 
    • M: Execute์™€ Memory ์‚ฌ์ด์—์„œ, ๋ฉ”๋ชจ๋ฆฌ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌํ•  ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰๋œ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ ๋ณด์œ 
      • ์กฐ๊ฑด๋ถ€ ์ ํ”„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ถ„๊ธฐ์กฐ๊ฑด / ๋Œ€์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๋„ ๋ณด์œ 
    • W: Memory์™€ Write back ๋‹จ๊ณ„ ์‚ฌ์ด์—์„œ, ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ์“ฐ๊ธฐ ์œ„ํ•œ ์ •๋ณด ๋ณด์œ 
      • ret ๋ช…๋ น์–ด ์™„๋ฃŒ์‹œ PC ์„ ํƒ ๋กœ์ง์— ๋ฐ˜ํ™˜ ์ฃผ์†Œ ๊ณต๊ธ‰

4.5.3 Rearranging ans Relabeling Signals
#

  • SEQ์™€ SEQ+๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ valC, rscA, valE์™€ ๊ฐ™์€ ์‹ ํ˜ธ์— ๊ณ ์œ ํ•œ ๊ฐ’ ์กด์žฌ
    • ํ•˜์ง€๋งŒ ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„์—์„œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น์–ด์™€ ์—ฐ๊ด€๋œ ์—ฌ๋Ÿฌ ๋ฒ„์ „ ์กด์žฌ
    • ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„์ „์˜ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๋”ฐ๋ผ์„œ D_stat, E_stat.. ์ฒ˜๋Ÿผ ๋ช…๋ช…ํ•˜์ž.
    • ํ•˜๋“œ์›จ์–ด ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ทธ ์•ˆ์—์„œ ๊ณ„์‚ฐ๋˜๋Š” stat๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„๋„ ์žˆ๋‹ค!
      • ์ด๋Š” ์†Œ๋ฌธ์ž๋กœ f_stat, m_stat๊ณผ ๊ฐ™์ด ์“ฐ์ž.
    • ์ „์ฒด ํ”„๋กœ์„ธ์„œ์˜ ์‹ค์ œ ์ƒํƒœ๋Š” W_stat์„ ๊ธฐ๋ฐ˜์œผ๋กœ Write Back ๋‹จ๊ณ„์—์„œ ๊ณ„์‚ฐ๋œ๋‹ค.
  • SEQ+, PIPE- ์˜ ๋””์ฝ”๋“œ๋‹จ๊ณ„๋Š” ๋ชจ๋‘ valE, valM์šฉ dstE, dstM ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • SEQ+์—์„œ๋Š” ์ด ์‹ ํ˜ธ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ ์“ฐ๊ธฐ ํฌํŠธ์— ์ง์ ‘ ๊ฝ‚์•˜์ง€๋งŒ
    • PIPE-์—์„œ๋Š” ์ด ์‹ ํ˜ธ๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ „๋‹ฌ๋˜์–ด, Write Back ๋‹จ๊ณ„์—์„œ ์‹ ํ˜ธ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ๊ทธ๋•Œ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • PIPE์—์„œ SEQ+์— ์—†๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค.
    • Select A ๋ธ”๋Ÿญ
    • ์ด ๋ธ”๋Ÿญ์€ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ D์˜ valP ํ˜น์€ ๋ ˆ์ง€์Šคํ„ฐํŒŒ์ผ์˜ AํฌํŠธ์—์„œ ๊ฐ’์„ ์„ ํƒํ•˜์—ฌ valA๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    • ์ด๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ E์™€ M์œผ๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํƒœ ์–‘์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
      • call ๋ช…๋ น์–ด๋งŒ์ด ๋ฉ”๋ชจ๋ฆฌ๋‹จ๊ณ„์—์„œ valP๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.
      • ์กฐ๊ฑด๋ถ€ ์ ํ”„๋งŒ์ด Execute ๋‹จ๊ณ„์—์„œ valP๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. (์•ˆ๋›ธ๋–„)
      • ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋ ˆ์ง€์Šคํ„ฐํŒŒ์ผ์„ ์ฝ์€ ๊ฐ’์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
      • ๋”ฐ๋ผ์„œ ์ด ์‹ ํ˜ธ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ valA๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋ฉด์„œ, ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ƒํƒœ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

4.5.4 Next PC Prediction
#

  • ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„์˜ ๋ชฉํ‘œ๋Š” ๋งค ํด๋Ÿญ ์‚ฌ์ดํด๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ๊ฒƒ
    • ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„ , ํ˜„์žฌ ๋ช…๋ น์„ ๊ฐ€์ ธ์˜จ ์งํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ด์•ผํ•จ
      • ํ•˜์ง€๋งŒ ๊ฐ€์ ธ์˜จ ๋ช…๋ น์–ด๊ฐ€ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ๋ผ๋ฉด, ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰ ๋‹จ๊ณ„๋ฅผ ํ†ต๊ณผํ•œ ํ›„์—๋‚˜ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
      • ๊ฐ€์ ธ์˜จ ๋ช…๋ น์–ด๊ฐ€ ret๋ผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๊ณ„๋ฅผ ํ†ต๊ณผํ•œ ํ›„์—๋‚˜ ์•Œ ์ˆ˜ ์žˆ๋”ฐ.
    • ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ Fetch ๋‹จ๊ณ„์—์„œ ๊ณ„์‚ฐ๋œ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • call๊ณผ jmp์˜ ๊ฒฝ์šฐ์—๋Š” valC, ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” valP๊ฐ€ ๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ PC์˜ ๋‹ค์Œ ๊ฐ’์„ ์˜ˆ์ธกํ•˜๋ฉด์„œ, ํด๋Ÿญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด๋ฅผ ๋ฐœํ–‰์‹œํ‚ค์ž.
      • ์กฐ๊ฑด๋ถ€๋Š” ๋ฌด์กฐ๊ฑด ๋›ด๋‹ค or ๋ฌด์กฐ๊ฑด ์•ˆ๋›ด๋‹ค ๋“ฑ์œผ๋กœ ๊ฒฐ์ •ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋œ๋‹ค.
      • ์˜ˆ์ธก์ด ํ‹€๋ ธ์„๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€๋Š” 4.5.8์žฅ์—์„œ ๋‹ค๋ฃจ๊ฒ ๋‹ค.
    • ์ด ๋ฐฉ๋ฒ•์„ ๋ถ„๊ธฐ ์˜ˆ์ธก (branch prediction) ์ด๋ผ๊ณ  ํ•œ๋‹ค.
      • ์šฐ๋ฆฌ๋Š” ๋ญ„์กฐ๊ฑด ๋›ด๋‹ค๊ณ  ์˜ˆ์ธกํ•˜๊ณ  ํ•ด๋ณด์ž. ๋”ฐ๋ผ์„œ PC๋ฅผ valC๋กœ ์˜ˆ์ธกํ•˜์ž.
      • ret๋Š”.. ์ด์Šˆ๊ฐ€ ๊นŠ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐ’์ด ์˜ฌ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ.
        • ๋”ฐ๋ผ์„œ, ์šฐ๋ฆฌ ์„ค๊ณ„์—์„œ๋Š” ret์— ๋Œ€ํ•ด์„œ๋Š” ์˜ˆ์ธกํ•˜์ง€ ์•Š๊ณ , Write back์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ๋ฅผ ๋ณด๋ฅ˜ํ•˜๊ฒ ๋‹ค.
        • ์ด๊ฒƒ๋„ 4.5.8์—์„œ ๋‹ค๋ฃจ์ž.
    • Fetch ๋‹จ๊ณ„๋ฅผ ๋ณด๋ฉด Predict PC์— valP, valC๊ฐ€ ๊ฝ‚ํ˜€์žˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
      • ์ด๊ฑธ F_predPC์— ์ €์žฅํ•œ๋‹ค.
      • F_predPC์™€ M_valA, W_valM, M_cnd๋ฅผ ์ด์šฉํ•ด์„œ Select PC๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
      • ret์ผ๋•Œ๋Š” W_valM, jumpํ• ๋•Œ๋Š” M_valA๋กœ ๊ฐ€๋˜๊ฐ€ ํ•˜๊ฒ ๋‹ค.

4.5.5 Pipeline Hazards
#

  • ์•„์ง ์šฐ๋ฆฌ๋Š” ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
  • ์ข…์†์„ฑ์€ ๋‘๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์ข…์†์„ฑ
      • ํ•œ ๋ช…๋ น์–ด์— ์˜ํ•ด ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ํ›„์† ๋ช…๋ น์–ด์˜ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ
    • ์ œ์–ด ์ข…์†์„ฑ
      • ํ•œ ๋ช…๋ น์–ด๊ฐ€ ํ›„์† ๋ช…๋ น์–ด์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒฝ์šฐ
      • jump, call, ret์ผ๋•Œ
  • ์ด ์œ„ํ—˜์„ฑ๋“ค์„ ์šฐ๋ฆฌ๋Š” hazard๋ผ๊ณ  ํ•œ๋‹ค.
    • ์ด๋„ ๋˜‘๊ฐ™์ด ๋ฐ์ดํ„ฐ hazard, ์ œ์–ด hazard๋ผ๊ณ  ํ•œ๋‹ค.
  • Data hazard
    irmovq $10, %rdx
    irmovq $3, %rax
    (์—ฌ๋Ÿฌ๊ฐœ์˜ nop)
    addq %rdx, %rax
    halt
    • ์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ํ•  ๋•Œ, nop์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์•ˆ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์˜ˆ๋ฅผ๋“ค์–ด nop๊ฐ€ ์„ธ๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ์—†๋‹ค๋ฉด? addq๊ฐ€ rdx, rax๋ฅผ ์ฝ์„๋•Œ ์œ„์˜ ๋ช…๋ น์–ด๋“ค์˜ Write back ๋‹จ๊ณ„์— ๊ฐ€์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ
    • Avoid Data Hazards by Stalling
      • ์œ„ํ—˜์กฐ๊ฑด์ด ๋”์ด์ƒ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ช…๋ น์–ด๋ฅผ ๋Œ€๊ธฐ์‹œํ‚ค๋Š” ๊ฒƒ
      • ์†Œ์Šค ์—ฐ์‚ฐ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ์“ฐ๊ธฐ Write back ๋‹จ๊ณ„๋ฅผ ํ†ต๊ณผํ•  ๋•Œ ๊นŒ์ง€ Decode ๋‹จ๊ณ„์˜ ๋ช…๋ น์–ด๋ฅผ ๋Œ€๊ธฐ์‹œํ‚ค๋ฉด ๋œ๋‹ค.
      • addq ๋ช…๋ น์–ด๊ฐ€ Decode ๋‹จ๊ณ„์— ์žˆ์„ ๋•Œ, Execute, Memory, Write back ๋‹จ๊ณ„์— ์žˆ๋Š” ๋ช…๋ น์–ด์ค‘ ํ•˜๋‚˜๊ฐ€ %rdx๋‚˜ %rax๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๊ฒƒ์„ ๊ฐ์ง€ํ•˜๋ฉด, ๋ช…๋ น์–ด๋ฅผ ์Šคํ…Œ์ผ๋งํ•ด์„œ Decode ๋‹จ๊ณ„์—์„œ ๋Œ€๊ธฐ์‹œํ‚จ๋‹ค.
        • ๋ฌผ๋ก  ์ด๋•Œ ๋’ค์˜ Fetch๋‹จ๊ณ„์— ์žˆ๋Š” ๋ช…๋ น์–ด๋„ ๋ณด๋ฅ˜๋œ๋‹ค.
      • ์ด๋Š” ์‹คํ–‰๋‹จ๊ณ„์— ๋ฒ„๋ธ”์„ ์ฃผ์ž…ํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
        • ์ด๋Š” ๋™์ ์œผ๋กœ ์ƒ๊ธด nop์™€ ๊ฐ™๋‹ค.
        • ์ƒ์„ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ 4.5.8์—์„œ ์‚ดํŽด๋ณด์ž.
      • ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๊ตฌํ˜„์€ ์‰ฝ์ง€๋งŒ ์•„๋ฌด๋ž˜๋„ ๊ฒฐ๊ณผ์ ์ธ ์„ฑ๋Šฅ์ด ์ข‹์ง„ ์•Š๋‹ค.
        • 3์‚ฌ์ดํด์ด๋‚˜ ์‰ฌ๊ฒŒ ๋˜๋‹ˆ๊นŒ
    • Avoiding Data Hazards by Forwarding
      • PIPE๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์†Œ์Šค ์—ฐ์‚ฐ์ž๋ฅผ Decode ๋‹จ๊ณ„์—์„œ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์—์„œ ์ฝ์ง€๋งŒ, ํ•ด๋‹น ์†Œ์Šค ๋ ˆ์ง€์Šคํ„ฐ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์ž‘์—…์ด Wrtie back ๋‹จ๊ณ„์—์„œ ๋Œ€๊ธฐ์ค‘์ผ ์ˆ˜๋„ ์žˆ๋‹ค!
        • ์จ์งˆ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹ , ๊ณง ์“ฐ์ผ ๊ฐ’์„ ๊ฑฐ๊ธฐ์„œ Decode ๋‹จ๊ณ„์— ํ›”์ณ์™€์„œ ์จ๋ฒ„๋ฆฌ์ž.
      • ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ Data Forwarding / Forwarding / Bypassing ์ด๋ผ๊ณ  ํ•œ๋‹ค.
      • ๋ฐ์ดํ„ฐ ํฌ์›Œ๋”ฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ธฐ๋ณธ์ ์ธ ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ์— ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ๋ฐ ์ œ์–ด ๋กœ์ง์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
      • ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ๋ฅผ ํฌ์›Œ๋”ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” PIPE๋ฅผ PIPE+๋ผ๊ณ  ํ•œ๋‹ค.
    • Load/Use Data Hazards
      • Memory ์ž‘์—…์ด ํŒŒ์ดํ”„๋ผ์ธ ํ›„๋ฐ˜๋ถ€์— ์žˆ๊ธฐ์—, ํฌ์›Œ๋”ฉ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ํ•œ ํ•ด์ €๋“œ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.
      mrmovq 0(%rdx), %rax
      addq %ebx, %eax
      • ์œ„์™€ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด์˜จ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์จ์•ผํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.
      • ์ด๊ฑด ๋ฐ์ดํ„ฐ ํฌ์›Œ๋”ฉ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜์ง€?
        • ์ด๊ฑด ์–ด์ฉ”์ˆ˜์—†์ด Stalling ํ•ด์•ผํ•œ๋‹ค.
        • Stall ํ•œ๋ฒˆ ํ›„ Memory ๋‹จ๊ณ„์—์„œ Forward๋กœ ๋ฐ๋ ค์˜ค๋ฉด ๋˜๊ฒ ๋‹ค!
      • ์ด๋Ÿฐ load/use Hazard๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ stall + Forward๋ฅผ load interlock์ด๋ผ๊ณ  ํ•œ๋‹ค.
        • ์ด๊ฒƒ๋งŒ์ด ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ๋Ÿ‰์„๊ฐ์†Œ์‹œํ‚ค๋ฏ€๋กœ, ๋งค ํด๋Ÿญ ์‚ฌ์ดํด๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค๋Š” ๋ชฉํ‘œ๋Š” ๊ฑฐ์˜ ๋„๋‹ฌํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • Control Hazards
    • ์ด๋Š” ์œ„์—์„œ ๋งํ•œ๊ฒƒ๊ณผ ๊ฐ™์ด Fetch๋‹จ๊ณ„์˜ ํ˜„์žฌ ๋ช…๋ น์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์„๋•Œ
      • ret / jump ์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์Šˆ
        • ํŠนํžˆ jump๋Š” ์˜ˆ์ธก์„ ์‹คํŒจํ–ˆ์„๋•Œ๋งŒ ์ด์Šˆ
    • ret๋Š” fetch ํ›„ write back ๋‹จ๊ณ„์— ๋Œ์ž…ํ• ๋•Œ๊นŒ์ง€ (Memory๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€) bubble์„ ์ฃผ์ž…ํ•ด์„œ ๋‹ค์Œ PC๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
      • bubble 3๊ฐœ!
    • jump๊ฐ€ ์ด์Šˆ์ธ๋ฐ, ์ด๋Š” ์ผ๋‹จ ๋ถ„๊ธฐ ์˜ˆ์ธก์„ ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋ถ„๊ธฐ ์˜ˆ์ธก์„ ์‹คํŒจํ•˜๋ฉด, ๋ช‡๊ฐœ์˜ ์ž˜๋ชป๋œ ๋ช…๋ น์–ด๋“ค์ด Fetch, Decode์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.
      • ๊ทธ๋Ÿฌ๋ฉด ์ด ์ž˜๋ชป๋œ ๋ช…๋ น์–ด / ๊ณ„์‚ฐ๊ฐ’๋“ค์„ ๋ฒ„๋ ค์•ผํ•œ๋‹ค.
      • ๋”ฐ๋ผ์„œ ๋””์ฝ”๋“œ ๋ฐ ์‹คํ–‰ ๋‹จ๊ณ„์— ๋ฒ„๋ธ”์„ ์ฃผ์ž…ํ•ด์„œ, ์ด ๋ช…๋ น์–ด๋“ค์„ ์ทจ์†Œ (instruction squashing) ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์šฐ๋ฆฌ๊ฐ€ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์•ˆ์ƒ๊ธฐ๊ณ , ๋‘ ํด๋Ÿญ์ด ๋‚ญ๋น„๋œ๋‹ค๋Š” ๋‹จ์ ๋งŒ ์žˆ๋‹ค.
  • ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์€ 4.5.8์žฅ์—์„œ ๋ณด์ž. (์™ค์ผ€ ๋ฏธ๋ฃจ๋ƒ)

4.5.6 Exception Handling
#

  • ํ”„๋กœ์„ธ์„œ ๋‚ด์˜ ๋‹ค์–‘ํ•œ ํ™œ๋™์ด ์˜ˆ์™ธ ์ƒํ™ฉ์œผ๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์ด๊ฑด ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ / ํ˜น์€ ์™ธ๋ถ€ ์‹ ํ˜ธ์— ์˜ํ•ด ์™ธ๋ถ€์ ์œผ๋กœ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ์šฐ๋ฆฌ ISA์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด๋ถ€ ์ƒ์„ฑ ์˜ˆ์™ธ๊ฐ€ ์žˆ๋‹ค.
      • ์ •์ง€ ๋ช…๋ น์–ด (halt)
      • ๋ช…๋ น์–ด์™€ ํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์กฐํ•ฉ
      • ๋ช…๋ น์–ด ํŽ˜์น˜ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ์—์„œ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ์— ๋Œ€ํ•œ์ ‘๊ทผ
    • ๋ณด๋‹ค ์™„์ „ํ•œ ํ”„๋กœ์„ธ์„œ๋ผ๋ฉด, ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒˆ ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•˜๊ฑฐ๋‚˜ / ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ์„ ํ–ˆ๋‹ค๋Š” ์™ธ๋ถ€ ์˜ˆ์™ธ๋„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๋ช…๋ น์–ด๋ฅผ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ช…๋ น์–ด (excepting instruction) ์ด๋ผ๊ณ  ๋ถ€๋ฅด์ž.
    • ์‹ค์ œ ์ด๋Ÿฐ ๋ช…๋ น์–ด๋Š” ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ, ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ์— ๊ฐ€์ƒ ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.
    • ์˜ˆ์™ธ์— ๋„๋‹ฌํ•˜๋ฉด ์ •์ง€ํ•˜๊ณ , ์ ์ ˆํ•œ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
  • ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์Šคํ…œ์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ๋ช‡๊ฐ€์ง€ ๋ฏธ๋ฌ˜ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ˆ˜๋ฐ˜ํ•œ๋‹ค
    • ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด์— ์˜ํ•ด ๋™์‹œ์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
      • Fetch / Memory ๋‹จ๊ณ„์—์„œ ๋™์‹œ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€
      • ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ค๊ฑธ ๋จผ์ € ๋ณด๊ณ ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.
        • ๊ธฐ๋ณธ ๊ทœ์น™์€ ๊ฐ€์žฅ ๋จผ์ € ์ง„ํ–‰๋œ ๋ช…๋ น์–ด์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋œ ์˜ˆ์™ธ์— ์šฐ์„  ์ˆœ์œ„๋ฅผ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ
        • ๊ทธ๋Ÿฌ๋ฉด Memory๊ฒ ๋„ค
    • ๋ช…๋ น์–ด๊ฐ€ ์ฒ˜์Œ Fetch๋˜์–ด ์‹œ์ž‘๋˜๊ณ  ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํ›„, ์ž˜๋ชป๋œ ๋ถ„๊ธฐ์˜ˆ์ธก์œผ๋กœ ์ธํ•ด ์ทจ์†Œ๋œ ๊ฒฝ์šฐ
      • ์ด ๋ช…๋ น์–ด๋ฅผ ์ทจ์†Œํ•˜์ง€๋งŒ, ์˜ˆ์™ธ๋„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.
      • fetch์กฐ์ฐจ ๋˜๋ฉด ์•ˆ๋˜๋Š” ๋ช…๋ น์–ด์˜€๊ธฐ ๋•Œ๋ฌธ
    • ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด ๋‹ค์Œ์— ์˜ค๋Š” ๋ช…๋ น์–ด๊ฐ€ ํ•ด๋‹น ์˜ˆ์™ธ ๋ช…๋ น์–ด๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ ์ƒํƒœ์˜ ์ผ๋ถ€์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
      • Memory ๋‹จ๊ณ„์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์ง€๋งŒ, ์ด๋•Œ Execute์—์„œ ์กฐ๊ฑด์ฝ”๋“œ๊ฐ™์€๊ฑธ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
      • ์˜ˆ์™ธ ๋ฐœ์ƒ ์ดํ›„์—๋Š” ์–ด๋–ค ๋ช…๋ น์–ด๋„ ์‹œ์Šคํ…œ ์ƒํƒœ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ

4.5.7 PIPE Stage Implementations
#

  • ์ด์ œ ํฌ์›Œ๋”ฉ์„ ๊ฐ–์ถ˜ Y86-64 PIPE์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ–ˆ๋‹ค.
  • PC_Relection and fetch Stage
    • PC์— ๋Œ€ํ•œ ํ˜„์žฌ ๊ฐ’์„ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ PC๊ฐ’์„ ์˜ˆ์ธก
    • Select PC์—์„œ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€
      • F_predPC (์›ฌ๋งŒํ•œ ๊ฒฝ์šฐ)
      • M_valA (์˜ˆ์ธก ์‹คํŒจํ•œ ๋ถ„๊ธฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋‹จ๊ณ„์— ์ง„์ž…ํ• ๋–„ / ret๊ฐ€ ์•„๋‹Œ valP)
      • W_valM (ret ๋ช…๋ น์–ด๊ฐ€ ์›Œํฌ๋ฐฑ ๋‹จ๊ณ„์— ์ง„์ž…ํ•  ๋•Œ)
  • Decode and Write-Back Stages
    • dstE, dstM, srcA, srcB ๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•˜๊ธฐ
    • ํฌ์›Œ๋”ฉ์„ ์‹ ๊ฒฝ์จ์•ผํ•œ๋‹ค.
    • ํฌ์›Œ๋”ฉ ์†Œ์Šค๋Š” ์ด 5๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
      • e_valE -> e_dstE
      • m_valM -> M_dstM
      • M_valE -> M_dstE
      • W_valM -> W_dstM
      • W_valE -> W_dstE
    • ์ด 5๊ฐœ์ค‘์— ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธ”๋Ÿญ์€ ๋ ˆ์ง€์Šคํ„ฐ ํฌํŠธ A์—์„œ ์ฝ์€ d_rvalA๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.
    • ์œ„์˜ ์ˆœ์„œ๋Œ€๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žกํ˜€์žˆ๋Š”๋ฐ, ์ด๋Š” ์ƒ๋‹นํžˆ ์ค‘์š”ํ•˜๋‹ค.
  • Execute Stage
    • SEQ๋•Œ๋ž‘ ๋น„์Šทํ•˜๋‹ค.
    • ์กฐ๊ฑด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” set CC๊ฐ€ m_stat๊ณผ W_stat ์‹ ํ˜ธ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๊ฒƒ๋งŒ ์ฐจ์ด
      • ํŒŒ์ดํ”„๋ผ์ธ ์•ž๋‹จ๊ณ„์— ์˜ˆ์™ธ ์ƒํƒœ์ธ ๋ช…๋ น์–ด๊ฐ€ ์žˆ์œผ๋ฉด ์กฐ๊ฑด์ฝ”๋“œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด!
  • Memory Stage
    • SEQ๋•Œ๋ž‘ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

4.5.8 Pipeline Control logic
#

  • ์ด์ œ ๋ฐ์ดํ„ฐ ํฌ์›Œ๋”ฉ / ๋ถ„๊ธฐ์˜ˆ์ธก๊ณผ ๊ฐ™์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋„ค๊ฐ€์ง€ ์ œ์–ด ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , PIPE์˜ ์„ค๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์ž.
    • Load/use Hazard
      • ํ•œ์‚ฌ์ดํด ์ •์ง€ํ•ด์•ผํ•จ
    • ret
      • ret์ด write-back์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ํŒŒ์ดํ”„๋ผ์ธ์ด ์ •์ง€ํ•ด์•ผํ•จ
    • ์ž˜๋ชป๋œ ์˜ˆ์ธก ๋ถ„๊ธฐ
      • ๋ช…๋ น์–ด๋“ค์„ ์ทจ์†Œํ•˜๊ณ , ์ ํ”„๋ช…๋ น์–ด ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ ๋ช…๋ น์–ด ์ถ”์ถœ์ด ์‹œ์ž‘๋˜์–ด์•ผํ•จ
    • Exception
      • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด์”…๋žŸ, ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผํ•จ
  • Desired Handling of Special Control Cases
    • load/use
      • 4.5.5์—์„œ ๋ฐฐ์šด๊ฒƒ๊ณผ ๊ฐ™์ด, mrmovq, popq๋งŒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋ฐ
      • ์ด๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ execute ์Šคํ…Œ์ด์ง€์— ์žˆ๊ณ 
      • ๋ชฉ์ ์ง€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ•„์š”๋กœํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ decode์— ์žˆ์„๋•Œ
      • ๋Œ€๊ธฐ์‹œํ‚ค๊ณ  ๋‹ค์Œ ์‚ฌ์ดํด์˜ ์‹คํ–‰๋‹จ๊ณ„์— bubble์„ ์ฃผ์ž…ํ•ด์•ผ ํ•œ๋‹ค.
      • ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ D, F๋ฅผ ๊ณ ์ •ํ•ด์•ผ ํ•œ๋‹ค.
    • ret
      • 3์‚ฌ์ดํด ๋Œ€๊ธฐ์‹œํ‚ค๋ฉด ๋œ๋‹ค.
    • ์ž˜๋ชป๋œ ์˜ˆ์ธก ๋ถ„๊ธฐ
      • D, E๋‹จ๊ณ„์— ๋ฒ„๋ธ”์„ ์ฃผ์ž…ํ•œ๋‹ค.
      • ์˜ฌ๋ฐ”๋ฅธ ๋ช…๋ น์–ด๋ฅผ fetchํ•œ๋‹ค.
    • ์˜ˆ์™ธ ๋ฐœ์ƒ
      • ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„์ด ์›ํ•˜๋Š” ISA๋™์ž‘๊ณผ ์ผ์น˜ํ•˜๋„๋ก ํ•œ๋‹ค.
      • ์ด๊ฒŒ ์ข€ ์–ด๋ ต๋‹ค.
        • ์˜ˆ์™ธ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ค‘ Fetch / Memory ๋‘๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ 
        • ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ๊ฐ€ Execute / Memory / write-back ์„ธ๊ณณ์—์„œ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ
      • ๊ฐ ๋‹จ๊ณ„์—๋Š” stat์ด ํฌํ•จ๋˜์–ด์žˆ์–ด์„œ, ๋ช…๋ น์–ด๋งˆ๋‹ค ๊ทธ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•œ๋‹ค.
      • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ƒํƒœ ์ผ๋ถ€๋กœ ๊ธฐ๋กํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๊ณ„์— ๋„๋‹ฌํ•˜๋ฉด, ํ›„์† ๋ช…๋ น์–ด๊ฐ€ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•˜๋„๋ก
        • Execute ๋‹จ๊ณ„์˜ ๋ช…๋ น์–ด๊ฐ€ ์กฐ๊ฑด ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋น„ํ™œ์„ฑํ™”
        • Memory ๋‹จ๊ณ„์— ๋ฒ„๋ธ”์„ ์ฃผ์ž…ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋กœ์˜ ์“ฐ๊ธฐ ๋น„ํ™œ์„ฑํ™”
        • Write back ๋‹จ๊ณ„์— ์˜ˆ์™ธ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ •์ง€
          • write-back์ด ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์„ ๊ฐฑ์‹ ํ•˜๋Š” ์œ ์ผํ•œ ๋‹จ๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ!
  • Detecting Special Control Conditions
    • ์ด๋Ÿฐ ํŠน์ˆ˜ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์กฐ๊ฑด
    • load/use
      • E_icode โˆŠ {IMRMOVQ, IPOPQ} && E_dstM โˆŠ {d_srcA, d_srcB}
    • ret
      • IRET โˆŠ {D_icode, E_icode, M_icode}
    • ์ž˜๋ชป๋œ ์˜ˆ์ธก ๋ถ„๊ธฐ
      • E_icode = IJXX&& !e_Cnd
    • ์˜ˆ์™ธ
      • m_stat โˆŠ {SADR, SINS, SHLT} || W_stat โˆŠ {SADR, SINS, SHLT}
  • Pipeline Control Mechanisms
    • ํด๋Ÿญ์ด ํŠˆ๋•Œ, stall๊ณผ bubble์— ๋”ฐ๋ผ ๊ฐฑ์‹  / ๊ณ ์ • / nopํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค
    • stall๊ณผ bubble์„ ๋™์‹œ์— 1๋กœ ์„ค์ •ํ•˜๋Š”๊ฒƒ์€ ์˜ค๋ฅ˜๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
  • Combinations of Control Conditions
    • ํ˜„์‹ค์—์„œ๋Š” ์—ฌ๋Ÿฌ ํŠน์ˆ˜์กฐ๊ฑด์ด ๋™์‹œ์—๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์ƒํ˜ธ๋ฐฐํƒ€์ ์œผ๋กœ ์„ธํŒ…์„ ์ž˜ ํ•ด๋†”์„œ, ๋œฐ๋งŒํ•œ ์ค‘์ฒฉ์ด ๋งŽ์ด ์—†๋‹ค.
    • ํ•ด๋ดค์ž ์˜ˆ์ธก์‹คํŒจ์™€ ret1, load/use์™€ ret1์ •๋„.
      • ์•ž์„ ์กฐํ•ฉ A, ๋’ค๋ฅผ ์กฐํ•ฉ B๋ผ๊ณ  ํ•˜์ž.
    • ์กฐํ•ฉ A์—์„œ๋Š” ๋ถ„๊ธฐ๊ฐ€ ์ž˜๋ชป ์˜ˆ์ธก๋˜์—ˆ์Œ์„ ๊ฐ์ง€ํ•˜๊ณ  ret๋ฅผ ์ทจ์†Œํ•œ๋‹ค.
    • ์กฐํ•ฉ B์—์„œ, ret๋•Œ๋ฌธ์— ๋ฒ„๋ธ”์„ ๋„ฃ์œผ๋ฉด ์ข€ ๊ณค๋ž€ํ•ด์ง„๋‹ค.
      • load/use์—์„œ๋Š” Decode๋ฅผ stallํ•˜๋ ค๊ณ ํ•˜๊ณ 
      • ret๋•Œ๋ฌธ์—๋Š” Decode ๋‹จ๊ณ„์— ๋ฒ„๋ธ”์ด ๋“ค์–ด๊ฐ€๋‹ˆ๊นŒ
      • ret๋ฅผ ์œ„ํ•ด ํ•œ ์‚ฌ์ดํด ์ง€์—ฐ๋˜์–ด์•ผํ•œ๋‹ค.
  • Control logic implementation
    • ์ด๋ฅผ ๋ชจ๋‘ ๊ด€๋ฆฌํ•˜๋Š” Pipeline control Logic์ด๋ผ๋Š”๊ฒŒ ์žˆ์–ด์•ผํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์„œ F_stall, D_bubble, D_stall, E_bubble…๋“ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ 
    • D_icode, d_srcA, d_srcB, e_Cnt..๋“ฑ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.

4.5.9 Performance Analysis
#

  • ํŒŒ์ดํ”„๋ผ์ธ ์ œ์–ด ๋กœ์ง๋•Œ๋ฌธ์— ์šฐ๋ฆฌ ๋ชฉ์ ์ด์—ˆ๋˜ ๋งค ํด๋Ÿญ๋งˆ๋‹ค ๋ช…๋ น์–ด ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฅผ ๋ชปํ•˜๊ฒŒ ๋˜๊ธดํ•œ๋‹ค.
    • ์ด๊ฑด ๋ฒ„๋ธ”์˜ ์ฃผ์ž… ๋นˆ๋„๋ฅผ ์ธก์ •ํ•จ์œผ๋กœ์จ ์ •๋Ÿ‰ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์ด ์ธก์ •์„ CPI (Cycle Per Instruction)์ด๋ผ๊ณ  ํ•œ๋‹ค.
      • ์ด ์ธก์ •์€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ‰๊ท  ์ฒ˜๋ฆฌ ์†๋„์˜ ์—ญ์ˆ˜์ด์ง€๋งŒ, ์‹œ๊ฐ„์€ ํ”ผ์ฝ”์ดˆ๊ฐ€ ์•„๋‹Œ ํด๋Ÿญ ์‚ฌ์ดํด ๋‹จ์œ„๋กœ ์ธก์ •๋œ๋‹ค.
    • $C_i$๋ฅผ ๋ช…๋ น์–ด ๊ฐœ์ˆ˜, $C_b$๋ฅผ ๋ฒ„๋ธ” ๊ฐœ์ˆ˜๋ผ๊ณ  ํ•˜๋ฉด
      • $CPI = \frac{C_i + C_b}{c_i} = 1.0 + \frac{C_b}{C_i}$
      • ๋”ฐ๋ผ์„œ ๋ช…๋ น์–ด๋‹น ๋ฒ„๋ธ” ๋น„์œจ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฒ„๋ธ”์ด ๋“ค์–ด๊ฐ€๋Š” ์˜ˆ์ดใ…—๋Š” ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ
      • $CPI = 1.0 + lp + mp + rp$
        • load penelty / mispredicted branch penalty / return penalty
      • ์ด๋•Œ ๋น„์œจ๋“ค๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

4.5.10 Unfinished Business
#

  • ์•„์ง๋„ ๋ˆ„๋ฝ๋œ ์‚ฌํ•ญ๋“ค์ด ์กด์žฌํ•œ๋‹ค.
  • Multicycle Instructions
    • ์ •์ˆ˜ ๊ณฑ์…ˆ / ๋‚˜๋ˆ—์…ˆ์ด๋‚˜ ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด๋„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
    • ALU๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹คํ–‰๋‹จ๊ณ„ ๋กœ์ง์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋ฉด ๋˜๊ฒ ์ง€๋งŒ, ์„ฑ๋Šฅ์ด ๋„ˆ๋ฌด ๋‚ฎ์•„์ง„๋‹ค.
      • ๋‚˜๋ˆ—์…ˆ์˜ ๊ฒฝ์šฐ 64์‚ฌ์ดํด์ด๋‚˜ ๊ฑธ๋ฆด์ˆ˜๋„ ์žˆ๋‹ค..
    • ๊ทธ๋ž˜์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ํŠน์ˆ˜ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ ์œ ๋‹›์„ ์‚ฌ์šฉํ•œ๋‹ค.
      • ๋ฌผ๋ก  ํŒŒ์ดํ”„๋ผ์ด๋‹๋„ ๋˜์–ด์žˆ๋‹ค
  • Interfacing with the Memory System
    • ๋ช…๋ น์–ด ์ธ์ถœ๊ณผ ๋ฐ์ดํ„ฐ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋‘ ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์žˆ๊ณ 
    • ๊ฐ€์ƒ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ์ „์— ์‹ค์ œ์ฃผ์†Œ๋ฅผ ๊ฐ€์•ผํ•˜๊ณ …
    • ๋ฉ”๋ชจ๋ฆฌ๊ฐ’์ด ๋””์Šคํฌ์— ์žˆ์–ด์„œ ์ˆ˜๋ฐฑ๋งŒ ํด๋Ÿญ ์‚ฌ์ดํด์ด ํ•„์š”ํ• ์ˆ˜๋„
    • ์ด๊ฑด 6, 9์žฅ์—์„œ ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค.
    • ์šด์˜์ฒด์ œ, ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ, ์บ์‹œ ๋“ฑ๋“ฑ๋“ฑ

โ”์งˆ๋ฌธ ์‚ฌํ•ญ
#

ํ•˜๋“œ์›จ์–ด ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ˆ˜์œจ์ด ๋‚ฎ๊ฑฐ๋‚˜ ๋งŒ๋“ค๊ธฐ ๋น„์‹ผ๊ฐ€? ํŒŒ์ดํ”„๋ผ์ธ์—์„œ๋„ ์ตœ๋Œ€ํ•œ ์กฐ๊ธˆ๋งŒ ์“ฐ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๊ฑธ๋กœ ๋ณด์ธ๋‹ค.

๋ˆ๋ณด๋‹ค๋Š” ๋ฉด์ ๊ณผ ์ „๋ ฅ ๋ฌธ์ œ์ธ๋ฐ, ๋ญ ๋Œ€์ถฉ ๋งž๋‹ค. ๊ฝค๋‚˜ ์ค‘์š”ํ•œ ์ตœ์ ํ™”๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Execute์˜ e_valE๋ฅผ Decode ๋‹จ๊ณ„์˜ valA๋กœ ๋ฐ๋ ค์˜ค๊ณ ์‹ถ์€๊ฑฐ์ž–์•„. ์ด๋•Œ valA์—๋Š” %rax์—์„œ ์˜ค๋Š”๊ฒƒ๊ณผ e_valE์—์„œ ์˜ค๋Š”๊ฒƒ์ค‘ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ  ํด๋Ÿญ์ด ํŠˆ๋•Œ ์„ ํƒํ•˜์ง€?

MUX๋ฅผ ์“ด๋‹ค! ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

valA = MUX(
  srcA == e_dstE ? e_valE :   // Execute ๋‹จ๊ณ„์—์„œ forwarding
  srcA == m_dstM ? m_valM :   // Memory ๋‹จ๊ณ„์—์„œ forwarding
  srcA == W_dstE ? W_valE :   // Write-back ๋‹จ๊ณ„์—์„œ forwarding
  ...
  RegisterFile[srcA]           // ์ •์ƒ ๊ฒฝ๋กœ
)
cpp๊ฐ™์€๊ฑฐ์—์„œ ํ•จ์ˆ˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์„œ, gcd๋‚˜ ์„ธ๊ทธ๋จผํŠธํŠธ๋ฆฌ๊ฐ™์€๊ฒƒ๋„ ์žฌ๊ท€ํ•จ์ˆ˜๋ณด๋‹ค ๋น„์žฌ๊ท€ while๊ฐ™์€๊ฑธ๋กœ ์งœ๋Š”๊ฒŒ ํ›จ ๋น ๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๊ฒŒ Control Hazards ๋•Œ๋ฌธ์ธ๊ฐ€? ret์˜ ์ฃผ์†Œ๋Š” ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šฐ๋‹ˆ๊นŒ.

์‚ฌ์‹ค ํ˜„๋Œ€ CPU๋Š” Return Address Stack (RAS)๋ผ๋Š”๊ฑธ ๋ณ„๋„ ํ•˜๋“œ์›จ์–ด๋กœ ์จ์„œ ret ์˜ˆ์ธก์„ ๊ฑฐ์˜ ์™„๋ฒฝํ•˜๊ฒŒ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ret์— ์˜ํ•œ control hazard ํŽ˜๋„ํ‹ฐ๋Š” 0์— ์ˆ˜๋ ดํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ๋Š” push rbp, mov rbp, rsp, sub rsp, N ๋“ฑ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„ ๋ช…๋ น์–ด๋ผ๋˜๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ทœ์•ฝ / ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ / ์ธ๋ผ์ด๋‹ ๋ถˆ๊ฐ€ ๋“ฑ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ํฌ๋‹ค.

๊ทผ๋ฐ ์ฒ˜์Œ์— fetch์— bubble ๋„ฃ๋Š”๊ฑด nop๊ฐ™์€๊ฑธ๋กœ ํ•ด์„ํ•ด์„œ ์ž˜ ํ•˜๋ฉด ๋ ๊ฑฐ๊ฐ™์€๋ฐ, ๋ถ„๊ธฐ์˜ˆ์ธก ์‹คํŒจํ• ๋•Œ F, D์—์žˆ๋Š” ๊ณผ์ •์„ ๋ฒ„๋ฆฌ๋Š”๊ฑด ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฑฐ์ง€? dstE, dstM์— 0xF๋ฅผ ๋ฐ•์•„๋ฒ„๋ฆฌ๋ฉด ๋˜๋‚˜?

์•„๋‹ˆ ์ด๊ฒŒ ๋งž๋‹ค๋‹ˆ! ๋ฒ„๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. icode = nop / dstE = 0xF / dstM = 0xF / srcA = 0xF / srcB = 0xF / valC = 0 … ์œ„์™€ ๊ฐ™์ด ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ ์ž์ฒด๋ฅผ ๋ฌดํ•ดํ•œ ๊ฐ’๋“ค๋กœ ๋ฎ์–ด ์“ฐ๋Š”๊ฒƒ์ด๋‹ค!

์ด์ œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ๋ฉˆ์ท„๋‹ค๊ณ  ํ• ๋•Œ… ์ปดํ“จํ„ฐ๊ฐ€ ํ†ต์งธ๋กœ ๋ฉˆ์ถ”๋ฉด ์•ˆ๋˜์ง€ ์•Š๋‚˜? ์˜ˆ๋ฅผ๋“ค์–ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด halt๋ฅผ ๋‚ด์„œ ์ •์ง€ํ–ˆ๋‹ค๊ณ  ํ• ๋•Œ, ์ปดํ“จํ„ฐ๊ฐ€ ๋‹ค ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ. ์ด๊ฑธ ํ†ต์งธ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ์ปค๋„์ด๊ณ  ์šด์˜์ฒด์ œ์ธ๊ฑด๊ฐ€?

๋งž๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์šด์˜์ฒด์ œ์˜ ์˜์—ญ. ์‹ค์ œ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์˜ˆ์™ธ ๋ฐœ์ƒ -> ํ•˜๋“œ์›จ์–ด๊ฐ€ ํ˜„์žฌ ์ƒํƒœ (PC, ๋ ˆ์ง€์Šคํ„ฐ ๋“ฑ) ์ €์žฅ -> ์ปค๋„์˜ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ œ์–ด๊ถŒ ์ด๋™ -> ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ / ์‹œ๊ทธ๋„ ์ „์†ก / ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง ๋“ฑ ํŒ๋‹จ -> ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ๋งŒ ์ข…๋ฃŒ, ๋‚˜๋จธ์ง€๋Š” ๊ณ„์† ์‹คํ–‰ Ch.8์—์„œ ๊ตฌ๊ฒฝํ•˜์ž.

stall ์•ž์— normal์„ ๋„ฃ์–ด๋ฒ„๋ฆฌ๋ฉด ์–ด๋–ป๊ฒŒ๋˜์ง€? ๊ทธ๋Ÿฌ๋ฉด ์•ˆ๋˜๋Š”๊ฑด ์•Œ๊ฒ ๋Š”๋ฐ, ๊ฐฑ์‹ ์ด ๋ ๊นŒ? ์•ž์˜ normal์ด ์‚ฌ๋ผ์งˆ๊นŒ? ์„ค์ •ํ•˜๊ธฐ ๋‚˜๋ฆ„์ธ๊ฐ€?

๋ญ ๊ทธ๋ ‡๊ฒŒ ์•ˆํ•˜๊ธด ํ•˜๋Š”๋ฐ, ์•”ํŠผ ์œ ์‹ค๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ
#