스레드를 이용한 병렬처리 프로그래밍

21세기에 들어와서 한없이 올라갈 것만 같았던 CPU클럭의 한계점이 들어남에 따라 CPU제작 업체들이 다른 길을 선택하게 되었습니다. 그것은 바로 Multi Core CPU이고 AMD에서는 Opteron, Athlon 64-FX X2, Athlon 64 X2 제품들과, Intel의 Xeon, Pentium D, Core Duo등이 현재 코어를 2개 넣은 Dual Core 제품이고 앞으로 Quad Core등 2의 배수만큼의 코어를 가진 제품이 천천히 나오게 될 것이며, 좀더 빠른 연산속도를 낼 수 있게 될 것입니다.

하지만 CPU의 코어가 여러 개가 늘어난다고 빨라지는 건 아닙니다. 그에 따른 프로그래밍 기법도 바뀌어야 제대로 된 속도를 누릴 수 있게 되는데요, 그 방법은 저도 모릅니다 ^^;;;
하지만 자바책을 보다 보니 재미있는 것이 있더라고요 바로 Thread(스레드) 라는 것인데 이 스레드는 프로그래밍에 있어서 병행처리(한번에 여러 작업을 한꺼번에 처리하는 것 처럼 보이는것)가 가능하게 해 주는 것입니다. 멀티테스킹과 연관을 지어 생각하시면 더욱 쉽게 이해가 가실 겁니다. 하지만 이 스레드가 멀티코어 CPU쪽으로 오면 어떻게 될까 싶어서 실험을 하고 싶지만 저희 집 컴퓨터가 싱글코어입니다 -_-;;; 그래서 듀얼코어 CPU를 가진 사람이 있나 싶어서 생각을 해 봤는데 주위에는 없더군요… 하지만, 다시 생각해보니 Intel에서 가상적으로 싱글코어를 듀얼코어처럼 보여지게끔 해 주는 기술을 가진 CPU를 발매를 했었습니다. 그건 Pentium 4 스리즈의 HyperThreading 인데요 Pentium 4중에서 Northwood C 와 Prescott코어에, Dual Channel Memory가 지원하는 제품이면 모두 지원을 합니다. 바로 이 펜티엄 4가 우리 학교에 널렸더군요 -_-;;; 어째튼 나름대로 듀얼코어라 Java로 스레드를 구현한 뒤, 학교에서 실험했습니다.

스레드를 1개만 생성해서 돌린 결과입니다.
예상대로라면 한쪽 그래프만 꽉 차야 정상이지만 가상 멀티코어라서 그렇지 않은 것 같습니다. 하지만 작업량은 50% 정확히 나옵니다.

스레드를 2개 생성해서 돌린 결과입니다.
역시 100%가 나오면서 두 그래프 모두 꽉 찼습니다.

이것이 왜 이렇게 되느냐… 특별히 스레드에서 병렬처리를 지원하는 건 아닙니다. 하지만 이 스레드를 사용함으로써 운영체제가 알아서 분배를 해주기 때문에 둘로 나눠서 처리를 하는 것입니다. 보기엔 그다지 안 어려워 보일지 모르지만 실제론 상당히 까다롭습니다. 그리고 실제 병렬처리 프로그래밍에서 이 스레드를 사용하는 것인지는 정확히 모르겠습니다. 어째튼 지금 상황에서 병렬처리 프로그래밍을 익히게 되면 분명 쓸모 있을 것 같습니다. 다음에 이 스레드를 이용해서 만든 멀티코어용 마방진 프로그램을 공개하도록 하죠 ^^

Trackback 0 Comment 2
  1. Favicon of http://www.signpen.pe.kr BlogIcon 싸인펜 2006.05.29 22:25 address edit & del reply

    지금 학교 전공과목 수업으로 java의 스레드 관련된 부분을 배우고 있습니다.
    화현님께서 이 글을 쓰셨을때만 해도 스레드에 대해 전혀 모르고 있다가 이제서야 포스팅의 내용을 이해 할 수 있게 되었습니다..;;

    제가 좀 버퍼링이 걸려요...ㅎㅎㅎ

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2006.05.30 12:55 address edit & del

      제가 글을 잘 못썼다는 결론이 나오는군요...OTL
      앞으로는 좀더 이해하기 쉽게 쓰도록 하겠습니다 ㅠ.ㅠ