Page 26 -
P. 26
그림 1-15 CPU 하나로만 연산을 처리하는 안타까운 상황
CPU 1 CPU 2 CPU 3 CPU 4
1
2
3
4
5
6
7
8
4코어 CPU를 쓴다고 가정했지만, 실제로는 CPU 1개만 사용되고 있습니다. *
이 문제를 해결하려면 멀티스레드로 프로그램이 작동되게 만들어야 합니다. 멀티스레드나 멀티
프로세싱을 사용해서 여러 CPU를 쓰는 별도의 프로그래밍 노력을 해야 하는 지금 상황을 빗대어
“공짜 점심은 끝났다!”라고 말하기도 합니다. **
여러 CPU를 써서 소수를 구하는 프로그램을 만든다면 우선 단순히 ‘일정한 크기만큼 분할해서 계
산’하면 되겠다는 생각이 듭니다. 정수 1부터 100만까지 중에서 소수를 찾는다면 다음과 같이 하
면 되지 않을까요?
● CPU 1: 정수 1~25만 중에서 소수를 찾습니다.
● CPU 2: 정수 25~50만 중에서 소수를 찾습니다.
● CPU 3: 정수 50~75만 중에서 소수를 찾습니다.
● CPU 4: 정수 75~100만 중에서 소수를 찾습니다.
그러나 이렇게 하면 CPU 0이 먼저 끝나고 CPU 4는 제일 나중에 끝날 것입니다. 숫자가 클수
록 소수 판별이 늦게 끝날 테니까요. 싱글스레드 프로그램보다는 효율적이겠지만, 아무래도 모든
CPU를 골고루 사용하는 방법과는 거리가 먼 것 같습니다.
다음과 같이 이를 개선해 보겠습니다.
* 여러분 이해를 돕고자 일부러 CPU 1에서만 연산을 하는 것처럼 표현했습니다. 실제로는 CPU 1~4를 오가면서 실행됩니다.
** 출처: http://www.gotw.ca/publications/concurrency-ddj.htm
034