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
   21   22   23   24   25   26   27   28   29   30   31