본문 바로가기

노트북/노트북 기초

도대체 듀얼코어가 뭐길래...?


얼마전 인텔에서는 새로운 CPU플랫폼 펜린을 발표하였습니다.
물론 듀얼코어 기반입니다.

듀얼코어라는것은 코어가(CPU) 두개가있다것입니다

즉, 데이터 처리를 한번에 2개를 할수 있는것입니다.
그럼 CPU가 두개이니 속도도 2배가 되겠네?
.
오늘은 이 문제에대해 짚고 넘어가려고 합니다. 듀얼코어에서 동작 환경이
듀얼코어의 성능에 미치는 영향에 대한 포스트 입니다.

프로세스(Process)와 스레드(Thread)
CPU는 한번에 하나의 명령을 수행합니다. 만약 CPU클럭이 100Mhz라면
1초에 100*1000 개의 명령을 수행할수 있겠지요.
이런환경에서는 무조건 클럭이 높으면 속도가 빠릅니다.
당연히 그만큼 많은 명령을 수행할수 있겠죠?
그러나, 윈도우는 2개이상의 프로그램을 동시에 수행할 수 있습니다.
1개의 CPU에서 어떻게 여러개의 프로그램을 동시에 수행할수있느냐?
실제 CPU는 동시에 실행하는것이 아닙니다. 단지, 동시에 수행하는것처럼 보일뿐이죠.

사용자 삽입 이미지

이처럼 여러개의 프로그램이 동시에 실행되면 CPU는 3개의 프로그램을 적절히 나누어
나누어가며 수행을 합니다. 그렇다고 해도 워낙 빨라 우리가 보기에는
동시에 실행되는것처럼 느낄수 있지요. 이것을 멀티 프로세싱이라고 하는데
물론 이런 작업을 나누어주는것은 OS에서 합니다. 쉽게 말하면 윈도우에서 한다는 것이죠.
이런환경에서는 동시에 수행되는 프로그램이 많아질수록 같은시간에 각각의 프로그램에 CPU가 할당되어 명령을 처리하는 갯수가 작아지기 때문에 '버벅거리는'현상이 발생을 하는것입니다.

특히나 요즘은 프로그램1,2개는 보통이고 더 많은 '멀티 테스킹'환경을 사용합니다.
그래서 인텔에서는 이런 멀티 테스킹 환경을 위해 CPU를 2개를 붙여버립니다.
자, 그럼 CPU가 두개가 되었으니 프로그램 2개를 각 CPU에 나누어 돌리면 동시에 수행이
되기때문에 2배의 효과나 날수 있는것입니다.
여기까지가 이론적인 것입니다. 실제로 윈도우상에서 수행되는 프로그램들은 각기 완벽히 독립적으로 수행될수는 없습니다. 각종 시스템 자원에 영향을 받기때문에 서로 어느정도 연관 통로가 있어야합니다.  물론 그것은 OS가 해야하는 일입니다.
만약 듀얼코어에서 1개의 프로그램만 실행되 된다고 가정해보겠습니다.
예를 들어 프로그램이
1   a=1+1
2   b=a+3
3   c=a+b+1
4   d=c
라는 명령이 수행된다고 하면, CPU는 1~4까지 순서대로 수행을 할것입니다.
CPU가 2개이니 나누어서 한번에 처리하면 되지 않느냐 라고 반문을 하실지도 모릅니다.
CPU1 이 1번을 처리하고 CPU2 번이 2번을 처리하는 식으로 말이죠.
자. CPU1과 2가 동시에 명령을 수행해 보겠습니다.
CPU1은 a=1+1이라는 명령을 수행할때 CPU2도 b=a+3이란 명령을 수행합니다.
그런데 b=a+3에서 a는 CPU1이 a=1+1이란 명령을 수행해야만 a=2라는 결과가 나옵니다.
즉, 2번라인은 1번라인이 실행되어야만 처리할수 있습니다. 그 다음 라인들도 마찬가지입니다.
그래서 하나의 프로그램을 CPU2개가 나누어서 처리를 할수 없습니다.
그러니 단지, 하나의 프로그램을 실행하는 환경에서는 듀얼코어의 효과는 없다고 하는것입니다. (굳이 말하자면 프로그램은 다시 독립적으로 돌아가는 '스레드'라는 단위로 실행이 되기때문에 듀얼코어를 사용할수는 있습니다.)

사용자 삽입 이미지
듀얼코어 기반은 CPU에 코어를 2개를 넣었습니다. 각 코어에 2차캐시가 1MB씩 달려 있습니다. 그러다보니 두개의 코어가 서로 데이터 교환을 할수가 없습니다.(앞서 시스템 자원등으로 서로 데이터를 주고 받아야 한다고 하였습니다.) 즉, 데이터를 주고받으려면 서로의 정보를 메모리로 보내서 다시 다른코어의 캐시로 보내야하는것입니다.
사용자 삽입 이미지

요즘 나오는 코어2듀오는 이 문제를 해결한 것입니다. CPU2개가 하나의 캐시를 공유하고 있는것입니다. 데이터를 서로 교환할수 있으니 데이터를 메모리까지 보내지 않아도 되어
많은 속도향상이 있습니다.

여기 듀얼코어(요나) 와 코어2듀오(메롬)의 차이를 보여주는 이미지가 있습니다.
사용자 삽입 이미지

듀얼코어기반(요나,메롬등) 프로세서는 독립적인 작업이 동시에 수행될때 그 효과를 가장 많이 볼수 있습니다. 한 프로그램에서 독립적인 작업을 하는 스레드가 잘 설계가 되어있으면 듀얼코어의 성능을 최대한 발휘할수 있습니다.
단순한 프로그램을 실행한다고 해서 PC가 알아서 2개로 나누어동시해 수행해주지는 않습니다. 앞으로 PC가 더욱 똑똑해져서 여러개의 CPU에 작업을 잘 할당해주면 더욱 빠른 성능을 기대해볼수 있지만 아직까지는 그리 좋은 효율을 보여주지는 않는것 같습니다.
어쨋든, CPU의 클럭속도는 발전이 점점 더디어지고 있습니다.(일부에서는 한계가 왔다고합니다.) 그래서 멀티 코어를 통해 성능 향상을 꾀하고 있는것이지요.
멀티코어에서는 속도보다는 각 코어간의 통신을 컨트롤하는것과 얼마나 효율적으로 작업을 분배하느냐 가 중요한 것입니다.