본문 바로가기
지식/시스템프로그래밍

Parallel Programming

by 칙칙폭폭 땡땡 2025. 7. 2.
반응형

지금까지는 코어 1개로 스레드를 돌렸는데, 이제는 멀티 코어로 스레드를 돌리자 ⇒ 찐 병렬처리

Typical Multicore Processor

example

n개의 작업을 t개의 스레드에 분배

seil(n/t)씩, if n = 80, t = 8 ⇒ 스레드 당 10개 씩

psum-mutex

근데 스레드 내부에서 저렇게 for 문으로 저딴 식으로 하면 저기 뮤텍스 구간은 한 스레드씩 실행되니까 멀티코어로 스레드 돌리는게 하나도 의미가 없음

psum-array

전역변수 배열을 두고, main에서 한 번에 summation

psum-local

psum[myid]에 계속 접근하는 것보다 1번만 접근하는게 더 좋음

그래서 스레드의 지역변수로 sum 두고 여기에 다 더한 뒤에 마지막에 1번만 쓴다.

Performance

  1. SpeedUp: 단일 스레드 대비 얼마나 빨라졌는지
  2. Efficiency: 말 그대로 효율, 스레드당 얼마나 일을 잘 했는지

Memory Consistency

여러 스레드가 동시에 메모리에 접근할 때, 어떤 순서로, 읽고 쓰는지 정의한 규칙 ⇒ Coherent 해야함

Non-coherent

수정이 발생했는데 메모리에 반영이 안되면 다른 스레드는 수정되지 않은 값을 읽어버림

Coherent

스레드1이 메인 메모리에서 맨 처음에 값을 가져오면 E, 이걸 변경하면 E→M

Thread2가 a를 읽으려고 하면 (Bus에 read 요청 발생)

Thread1이 a가 M인 상태니까 바뀐 a 값을 전달 M→S

반응형

'지식 > 시스템프로그래밍' 카테고리의 다른 글

Concurrent Programming  (4) 2025.07.02
Network programming  (0) 2025.06.11
System-Level I/O  (1) 2025.04.21
Exceptional Control Flow: Signals and Nonlocal Jumps  (2) 2025.04.10
Exceptional Control Flow: Exceptions and Processes  (0) 2025.03.29