6. Multiprocessor

6์žฅ Multiprocessor ๊ฐœ์š”

๋‹จ์ผ ํ”„๋กœ์„ธ์„œ์˜ clock frequency ํ•œ๊ณ„์— ๋ถ€๋”ชํžˆ๋ฉด์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์„œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” Multiprocessor ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์˜ ์ฃผ๋ฅ˜๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” Shared Memory / Message Passing, Cache Coherence, ๋™๊ธฐํ™”, Cluster ๋ฐ ์ƒํ˜ธ์—ฐ๊ฒฐ ํ† ํด๋กœ์ง€๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

Shared Memory Multiprocessor

[P1]โ”€โ”€[Cache]โ”€โ”€โ”
[P2]โ”€โ”€[Cache]โ”€โ”€โ”ผโ”€โ”€[Interconnection Network]โ”€โ”€[Memory]
[P3]โ”€โ”€[Cache]โ”€โ”€โ”˜
  • UMA (Uniform Memory Access): ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์ด ๊ฐ™์Œ
  • NUMA (Non-Uniform Memory Access): ํ”„๋กœ์„ธ์„œ์— ๊ฐ€๊นŒ์šด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์€ ๋น ๋ฅด๊ณ , ๋จผ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์€ ๋А๋ฆผ
  • Memory access time๋„ ๋‹ค๋ฆ„

Example: Sum Reduction

100๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ 100,000๊ฐœ ์ˆซ์ž๋ฅผ ํ•ฉ์‚ฐํ•˜๋Š” ์ฝ”๋“œ:

sum[Pn] = 0;
for (i = 10000*Pn; i < 10000*(Pn+1); i = i + 1)
    sum[Pn] = sum[Pn] + A[i];
/* now add the sub-sums */
half = 100;
repeat
    synch();
    if (half%2 != 0 && Pn == 0)
        sum[0] = sum[0] + sum[half-1];
    /* Conditional sum needed when half is odd */
    half = half/2;  /* dividing line on who sums */
    if (Pn < half)
        sum[Pn] = sum[Pn] + sum[Pn+half];
until (half == 1);

Synchronization์ด ํ•„์š”ํ•œ ์ด์œ : ์—ฌ๋Ÿฌ processor๊ฐ€ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ๋™์‹œ์— ์ฝ๊ณ  ์“ธ ๋•Œ race condition ๋ฐœ์ƒ.

Synchronization in Shared Memory

์˜ˆ: Producer-Consumer ๋ฌธ์ œ

Shared data
int counter = 0;
int buffer[BUFFER_SIZE];
int in <mark class="highlight"><strong><u> 0; int out </u></strong></mark> 0;

/* Producer */
while (counter == BUFFER_SIZE) ;  // do nothing
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
counter++;

/* Consumer */
while (counter == 0) ;  // do nothing
next_consumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
counter--;

counter++์™€ counter--๊ฐ€ atomicํ•˜์ง€ ์•Š์œผ๋ฉด race condition ๋ฐœ์ƒ.

์˜ˆ: counter++ register1 </u></strong></mark> counter; register1 <mark class="highlight"><strong><u> register1 + 1; counter </u></strong></mark> register1;

๋‘ processor๊ฐ€ ์ธํ„ฐ๋ฆฌ๋น™๋˜๋ฉด ๊ฐ’์ด ์†์‹ค๋  ์ˆ˜ ์žˆ์Œ โ†’ Critical Section ๋ฌธ์ œ.

Shared Memory ๋ฐ Synchronization

The Critical-Section Problem

repeat
    Entry Section
       critical section  โ† ํ•œ ๋ฒˆ์— ํ•œ processor๋งŒ ์ง„์ž…
    Exit Section
       remainder section
until false;

Correctness Criteria for a Solution

  • Mutual Exclusion: ํ•œ critical section์€ ํ•œ processor๋งŒ ์ง„์ž…
  • Progress: critical section์— ๋“ค์–ด๊ฐ€๋ ค๋Š” processor๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฐ๊ตญ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • Bounded Waiting: Critical Section์— ์ง„์ž…ํ•˜๋ ค๋Š” processor๋Š” ์œ ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์ง„์ž…ํ•ด์•ผ ํ•จ (starvation ๋ฐฉ์ง€)

Critical Section Problem

Mutual Exclusion with Test-and-Set

repeat
    while Test-and-Set(lock) do no-op;   // Entry Section
        critical section
    lock := false;                       // Exit Section
       remainder section
until false;
  • Lock ๊ฐ’์ด 1์ด๋ฉด no-op ์ˆ˜ํ–‰ (loop, busy-wait)
  • SW ๋ช…๋ น์–ด๋กœ lock์„ 0์œผ๋กœ ๋ฐ”๊ฟˆ

P0์™€ P1์ด ๋™์‹œ์— lock bit๋ฅผ ์ฝ์œผ๋ฉด ๋ฌธ์ œ ๋ฐœ์ƒ

๋™์‹œ์— lock bit๊ฐ€ 0์œผ๋กœ ์ฝํžˆ๋ฏ€๋กœ ๋ฌธ์ œ. Test-and-Set์€ atomic ์—ฐ์‚ฐ์œผ๋กœ ์ด๋ฅผ ๋ฐฉ์ง€ (์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฐ”๋กœ lock bit๋ฅผ 1๋กœ ๋ฐ”๊ฟˆ, ์ฝ์ž๋งˆ์ž).

โ†’ Mutual Section๊ณผ Progress๋Š” ๋งŒ์กฑํ•˜์ง€๋งŒ Bounded Waiting์€ ๋งŒ์กฑํ•˜์ง€ ์•Š์Œ (ํ™•๋ฅ ์ด ๋‚ฎ๊ธฐ์— ๊ตฌํ˜„์„ ์•ˆํ•  ์ˆ˜๋„ ์žˆ์Œ).

Naive Synchronization vs Optimized Synchronization

Naive (Test-and-Set in a loop)

Try to lock variable using swap:
    read lock variable and then set
    variable to locked value (1)

Succeed? (= 0?)
    Yes โ†’ Begin update, Finish update, Unlock (set lock variable to 0)
    No  โ†’ loop

๊ธฐ๋Šฅ์ ์ธ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ, ์„ฑ๋Šฅ์ ์ธ ๋ฌธ์ œ ๋ฐœ์ƒ:

  • P0 ์‚ฌ์šฉ โ†’ lock bit: 1
  • P1 Access ๋ถˆ๊ฐ€ โ†’ lock bit: 1 (๋‚˜๋จธ์ง€ Cache์˜ lock bit invalidate)
  • P2 Access ๋ถˆ๊ฐ€ โ†’ lock bit: 1 (๋‚˜๋จธ์ง€ Cache์˜ lock bit invalidate)

โ†’ ๊ณ„์†ํ•ด์„œ Memory Access ๋ฌธ์ œ ๋ฐœ์ƒ (Interconnect ์ง€์—ฐ, ์ „๋ ฅ ์†Œ๋ชจ).

Optimized Synchronization (Load-first)

  • Memory ์‚ฌ์šฉ X โ†’ ์ „๋ ฅ์— ์ข‹์Œ
  • Test-and-Set ์ „์— lock ๊ฐ’์„ load
  • lock: 1 โ†’ ๊ณ„์† Load
  • lock: 0 โ†’ Test-and-Set

๋งŒ์•ฝ Loadํ•  ๋•Œ 0์ด์—ˆ๋Š”๋ฐ Test-and-Setํ•  ๋•Œ 1์ด๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋จผ์ € ๋นผ์•—์•„๊ฐ„ ๊ฒƒ.

  • P0 ์‚ฌ์šฉ โ†’ lock bit: 1
  • P1, P2 Access โ†’ Load (Cache์˜ lock bit: 1) โ†’ Cache์—์„œ ๊ณ„์† Hit (๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ X)
  • P0 ์‚ฌ์šฉ ์ข…๋ฃŒ โ†’ Lock bit: 0๋˜๊ณ  invalidate protocol์— ์˜ํ•ด ๋‹ค๋ฅธ Processor Cache์˜ lock bit: 0
  • P1, P2 Access โ†’ Load (Cache์˜ lock bit: 0) โ†’ Test-and-Setํ•ด์„œ P1๊ณผ P2 ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‚š์•„์ฑ”

Test-and-Set ๋ฐ Optimized Sync

Message Passing

  • ๊ฐ๊ฐ์˜ Processor๊ฐ€ ๊ฐ๊ฐ์˜ Physical Address ๊ณต๊ฐ„์„ ๊ฐ€์ง
  • HW๋Š” Processor ์‚ฌ์ด์— Message๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ
[Processor]โ”€[Cache]โ”€[Memory]  ...  [Processor]โ”€[Cache]โ”€[Memory]
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Interconnection Network โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Loosely Coupled Clusters

  • ๋…๋ฆฝ์ ์ธ ์ปดํ“จํ„ฐ๋“ค์„ ์ž‡๋Š” Network ํ•„์š” โ†’ I/O System ์ด์šฉ (Ethernet/Switch/Internet)
  • ๊ฐ์ž ๋‹ค๋ฅธ Memory์™€ CPU
  • ๋…๋ฆฝ์ ์ธ task๋ฅผ ๊ฐ€์ง€๋Š” application์— ์ ํ•ฉ (Web server, databases, simulations โ€ฆ)
  • ๋†’์€ Availability, Scalable, Affordable

โ†’ Shared Memory๋Š” ์—ฐ๊ฒฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” Processor์˜ ์ˆ˜ ํ•œ๊ณ„๊ฐ€ ์žˆ์ง€๋งŒ, Message Passing์€ ๋” ๋งŽ์€ Processor ์ด์šฉ ๊ฐ€๋Šฅ.

[๋ฌธ์ œ์ ]: ๊ด€๋ฆฌ ๋น„์šฉ์ด ๋น„์‹ธ๊ณ , Interconnect์˜ ์„ฑ๋Šฅ์ด ๋‚ฎ์œผ๋ฉด ์ „์ฒด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง โ†’ SMP (Symmetric Multiprocessor) ์ด์šฉ โ†’ ๊ณ ์„ฑ๋Šฅ, ๊ณ ๋Œ€์—ญ ๊ตฌํ˜„.

Sum Reduction in Message Passing

  • โ‘  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋”ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋ฅผ 1000๊ฐœ์”ฉ ๋‚˜๋ˆ„์–ด ์ฃผ์–ด์•ผ ํ•จ (Shared Memory ๋ฐฉ์‹์€ ๋‚˜๋ˆ„์–ด ์ค„ ํ•„์š” ์—†์Œ)
  • โ‘ก ๊ฐ๊ฐ์˜ Processor๊ฐ€ 1000๊ฐœ์˜ ์ˆ˜๋ฅผ ๋”ํ•จ
  • โ‘ข 100๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ณ์คŒ (์ ˆ๋ฐ˜์€ ์ฃผ๊ณ  ์ ˆ๋ฐ˜์€ ๋ฐ›์•„ ๋”ํ•จ) โ€” ๋ฐ˜๋ณต
  • ๋™๊ธฐํ™” ๊ณผ์ •์ด ํ•„์š” X โ†’ Message๋ฅผ ์ฃผ๊ฑฐ๋‚˜ ๋ฐ›๋Š” ๊ณผ์ •์ด Synchronization ์ œ๊ณต (์ฃผ๊ฑฐ๋‚˜ ๋ฐ›๋Š” Processor๊ฐ€ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‘๋‹ต X โ†’ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋™๊ธฐํ™”)
limit <mark class="highlight"><strong><u> 100; half </u></strong></mark> 100;  /* 100 processors */
repeat
    half = (half+1)/2;  /* send vs. receive dividing line */
    if (Pn >= half && Pn < limit)
        send(Pn - half, sum);
    if (Pn < (limit/2))
        sum = sum + receive();
    limit = half;  /* upper limit of senders */
until (half == 1);  /* exit with final sum */

Network Topology

NUMA Topology ์˜ˆ

[Switch]โ”€[Switch]โ”€[Switch]โ”€[Switch]
   โ”‚        โ”‚        โ”‚        โ”‚
[Switch]โ”€[Switch]โ”€[Switch]โ”€[Switch]
   โ”‚        โ”‚        โ”‚        โ”‚
  ...

2-D grid or mesh, 3-D n-cube (hypercube) ๋“ฑ.

  • Processing Elements (PEs) ์—ฌ๋Ÿฌ ๊ฐœ, Switch๋กœ ์—ฐ๊ฒฐ
  • ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋…ธ๋“œ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜ = $n$ (n-cube)

Message Passing ๋ฐ Network Topology

Crossbar & Multi-Stage Interconnection Network

Crossbar

๋™์‹œ์— ์—ฌ๋Ÿฌ ์Œ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ. ์˜ˆ: P0์™€ P3 ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ.

Omega Network (Multi-stage interconnection network)

  • 2ร—2 Switch ์‚ฌ์šฉ: If P๊ฐ€ 16๊ฐœ๋ผ๋ฉด $\log_2(16) = 4$ โ†’ 4 stage ํ•„์š”
  • 4ร—4 Switch ์‚ฌ์šฉ: If P๊ฐ€ 16๊ฐœ๋ผ๋ฉด $\log_4(16) = 2$ โ†’ 2 stage
Switch (ํ•œ ์Œ๋งŒ ์—ฐ๊ฒฐ)
Crossbar (์—ฌ๋Ÿฌ ์Œ๋„ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ)

The Evolution-Revolution Spectrum of Computer Architecture

Evolutionary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’ Revolutionary
Pipelining โ†’ Cache โ†’ Timeshared โ†’ Virtual โ†’ RISC โ†’ CC-UMA โ†’ CC-NUMA โ†’ Not-CC-NUMA โ†’ Message-passing โ†’ Massive SIMD โ†’ Parallel processing
  • ๊ฐ€์žฅ ํฐ ๋ฐœ์ „: Pipelining, Cache
  • CC (Cache Coherency): Cache coherency๋ฅผ ๋งž์ถฐ์คŒ
  • SIMD: Single Instruction Multiple Data โ€” Instruction์€ ๊ฐ™์ง€๋งŒ Data๊ฐ€ ๋‹ค๋ฆ„ (๊ฐ€์žฅ ์˜ˆ์ธก์— ๋งŽ์ด ์‚ฌ์šฉ)

RISC vs CISC

  • RISC (Reduced Instruction Set Computer): ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋™์ผ, ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ. ์žฅ์ : ํšจ์œจ์ ์ธ Pipelining.
  • CISC (Complex Instruction Set Computer): Instruction์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฆ„ (์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋‹ค๋ฆ„). ์˜ˆ์ „์—๋Š” Memory๊ฐ€ ๋น„์‹ธ์„œ Instruction์˜ ๊ณต๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ.

โ†’ Intel Processor์˜ ๊ฒฝ์šฐ HW๋Š” RISC, SW๋Š” CISC ํƒ€์ž… โ†’ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ โ†’ Application์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด. ๋Œ€๋ถ€๋ถ„์€ RISC ํƒ€์ž….

Crossbar, Omega, RISC vs CISC

์ •๋ฆฌ

๊ฐœ๋… ์„ค๋ช…
Shared Memory MP ๋ชจ๋“  processor๊ฐ€ ๊ฐ™์€ memory space ๊ณต์œ  (UMA/NUMA)
Message Passing MP ๊ฐ์ž์˜ memory, message๋กœ ํ†ต์‹  (cluster, HPC)
Cache Coherence Multi-level cache ๊ฐ„ ๊ฐ’ ์ผ์น˜ ์œ ์ง€
Synchronization Test-and-Set / Load-first๋กœ atomic ์—ฐ์‚ฐ ๊ตฌํ˜„
Network Topology Crossbar, Omega, 2D-mesh, n-cube
SIMD ํ•œ ๋ช…๋ น์–ด๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ๋™์‹œ ์ฒ˜๋ฆฌ (GPU์˜ ๊ธฐ๋ฐ˜)

Multiprocessor๋Š” ์ดํ›„ Multi-core CPU + GPU + Cluster๋กœ ์ด์–ด์ง€๋Š” ๋ชจ๋“  ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์˜ ์ด๋ก ์  ๊ธฐ๋ฐ˜์ด ๋œ๋‹ค.

๋น„์Šทํ•œ ๊ธ€ ์ถ”์ฒœ

Comments (0)

No comments yet. Be the first to comment!