멀티코어와 동기화
루프의 반복을 여러 스레드로 나눌 때, 반복마다 계산량이 크게 들쭉날쭉한 경우에 적합한 나누기 방법은?
- A처음에 반복 횟수로 균등하게 나누고 그 이상은 조정하지 않는 정적(static) 할당
- B모든 반복을 하나의 스레드에 맡긴다
- C작업을 작은 덩어리로 만들어, 한가해진 스레드가 다음 덩어리를 가지러 가는 동적(dynamic) 할당
정답과 해설 보기
정답: C. 작업을 작은 덩어리로 만들어, 한가해진 스레드가 다음 덩어리를 가지러 가는 동적(dynamic) 할당
정적 할당은 수고가 적지만, 반복마다 무게가 다르면 무거운 부분을 맡은 스레드만 뒤처지고 나머지는 기다리게 됩니다. 동적 할당에서는 공유 카운터 등에서 다음 작업을 가져오며, 빨리 끝난 스레드가 더 많이 맡으므로 부하가 균등해집니다. 다만 덩어리가 너무 작으면 가지러 가는 부담이 늘어나므로 크기 조정이 필요합니다.
- A. 횟수가 같아도 계산량이 다르면 편차가 남습니다.
- B. 그렇게 하면 병렬화가 되지 않습니다.
- C. 맞습니다. 작업의 편차를 자동으로 고르게 합니다.