지식/시스템프로그래밍
Parallel Programming
칙칙폭폭 땡땡
2025. 7. 2. 15:42
반응형
지금까지는 코어 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
- SpeedUp: 단일 스레드 대비 얼마나 빨라졌는지
- Efficiency: 말 그대로 효율, 스레드당 얼마나 일을 잘 했는지
Memory Consistency
여러 스레드가 동시에 메모리에 접근할 때, 어떤 순서로, 읽고 쓰는지 정의한 규칙 ⇒ Coherent 해야함

Non-coherent

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


스레드1이 메인 메모리에서 맨 처음에 값을 가져오면 E, 이걸 변경하면 E→M
Thread2가 a를 읽으려고 하면 (Bus에 read 요청 발생)
Thread1이 a가 M인 상태니까 바뀐 a 값을 전달 M→S
반응형