Linux Programmer

멀티코어 CPU 이야기 본문

독서 관련/컴퓨터

멀티코어 CPU 이야기

sunyzero 2010. 6. 21. 19:07
TOC
1. 이 책의 주제는...
2. 이 책을 읽어야 할 사람은...
3. 이 책의 내용은...
4. 왜 멀티코어 혁명이라고 부를까? 

조지아텍에서 공부하고 있던 김민장님(http://minjang.egloos.com/)이 책을 출간했습니다. 이미 블로그에 올린 글들과 주제들에 살을 보태서 에세이 형식의 책으로 낸 것이죠. 그리고 고맙게도 김민장님이 증정본을 보내줘서 잘 읽어봤습니다.

멀티코어CPU이야기
카테고리 컴퓨터/IT > 컴퓨터공학 > 컴퓨터구조
지은이 김민장 (한빛미디어, 2010년)
상세보기

1. 이 책의 주제는...
우선 이 책은 프로그래밍 문법이나 활용에 대한 내용을 담고 있는 책은 아닙니다. 문법에 대한 내용은 나오지도 않고, 설명하지도 않습니다. 코드도 거의 없습니다. 대부분 설명만 있습니다. 그렇기에 교과서적인 형식으로 보일 수도 있습니다.

2. 이 책을 읽어야할 사람은...
이 책은 일반적인 프로그래머를 대상으로 하지 않습니다. 하지만 고성능 프로그램을 작성해야 하는 경우에는 이 책이 도움(hint?)을 줄 수 있습니다. 

즉 고성능 공학계산, 시뮬레이션, 다중 접속자를 처리하는 네트워크 서버 프로그램의 경우가 대표적입니다. 제가 Intel 세미나를 진행할 때 이 책이 나왔었더라면 정말 많은 분들에게 추천했을텐데 참 아쉽기도 합니다.

3. 이 책의 내용은...
이 책의 제목에는 멀티코어 CPU이야기라고 적혀있지만, 실제로는 CPU자체의 성능향상기법을 두루 이야기 하고 있습니다. 그래서 주요한 몇가지 제목과 내용을 뽑아보면 :

메모리 계층   가장 빠른 register부터 cache, RAM, Disk, Network등의 계층, 특징을 보여줍니다 
가상메모리   어떻게 physical memory가 virtual address를 가지게 되는지 보여줍니다.
 이를 이해해야 페이징 기법을 제대로 이해할 수 있습니다.
 
프로그램의 수행시간   Latency와 Throughput, 그리고 CPI 등의 개념등을 살펴봅니다.
 이는 Profiling 작업을 할 때 꼭 필요한 지식입니다.
 
데이터,컨트롤, 메모리
 의존성
 
 의존성을 피하도록 코드를 작성하는 것을 살펴봅니다. 
멀티코어 혁명   미래에는 프로그래머가 필히 쓰레드를 써야 하는 이유가 나옵니다. 
캐시    Cache를 사용함에 있어서 프로그래머가 주의해야 할 점을 설명합니다.
 예를 들어 False-sharing같은...
 

책 내용은 이해를 돕는 그림, 도표도 많고 참고문헌도 꼼꼼하게 적어두고 있습니다. 더군다나 IT서적을 많이 출판해본 출판사라서 깔끔하게 출판했습니다. 종이질도 누리끼리한 게 눈의 피로도를 적게 해줍니다.

멀티코어 CPU 이야기멀티코어 CPU 이야기 - 책 본문



* 왜 멀티코어 혁명이라고 부를까?
요즘에는 가정에서 쓰는 보급형 PC에 대부분은 Dual/Triple/Quad core CPU가 기본입니다. 멀티코어란 겉으로는 하나의 CPU로 보이지만 내부에는 복수 개의 CPU가 들어있는 형태로서 이제는 멀티코어 CPU를 CPU 패키지라고 부릅니다. 

과거에는 멀티코어(CMP)가 고가였지만 지금은 저가 CPU조차 멀티코어입니다. 심지어 모바일 기기, 일명 핸드폰에도 멀티코어 CPU가 들어가 있지요. 그런데 문제는 멀티코어를 제대로 사용하지 못하고 있다는 점입니다.

인텔 듀얼 코어인텔 듀얼 코어 (출처: Intel)


과거에는 프로그래머가 성능이 떨어지는 프로그램을 작성해도 변명거리가 있었습니다. 왜냐하면 시간이 좀 더 흐르면 더 좋은 CPU가 성능 문제를 해결해줬기 때문입니다. 이를 두고 공짜 점심(free lunch)이라고 했었죠.

그래서 결과가 맞다면 성능을 생각하지 않고 만드는 풍토가 있었지요. 심지어 성능을 대폭 희생하더라도 관리가 편리한 프로그래밍이 유행이었습니다. 그런데 최근 몇 년 사이에 CPU의 성능을 높이는데 커다란 기술적 장벽이 발생했고, 그 결과 공짜 점심이 끝나게 된 거죠.

5 GHz의 현실적 장벽 : 발열, 에너지 효율 문제
새로운 기술적 난제들 : 반도체 소재, 성능향상을 위한 각종 회로의 복잡성


기본적으로 CPU의 개별 성능이 좋아지려면 클럭수, 즉 Hz가 높아져야 합니다. 그리고 과거에는 쉽게 클럭수를 올릴 수 있었지요. 처음 1GHz를 돌파했을때부터 불과 몇 년 사이에 3~4GHz까지 성능이 올라왔습니다.

그런데 이제는 클록을 더 올릴 수 없게 되어 버렸습니다. 약 5GHz정도가 되면 심각하게 많은 전류가 누수되기 때문입니다. 심지어 4GHz만 되어도 누수 전류가 많아집니다. 

트랜지스터에 대해서 공부하신 분들은 아시겠지만 Gate에는 leakage 전류가 흐르게 됩니다. 그리고 미세공정의 집적도가 높거나 Hz가 올라갈수록 leakage도 같이 올라가게 됩니다. 이러다보니 5GHz대에 이르면 거의 절반이 새어 나가는 경우도 발생했습니다. (물론 기술력이 좋아지면서 이 한계는 조금씩 극복이 가능해집니다만, 그 때쯤 되면 새로운 영역의 한계가 생기겠지요.)

여기서 열역학 제1법칙이 등장합니다. 바로 에너지 보존의 법칙이죠.
에너지 보존 법칙에 의해 새어나간 전류는 어떤 형태의 에너지로 변할까요?


바로 열 에너지로 바뀌게 됩니다. 그래서 뭐???? 냉각팬으로 식히면 되지 않냐고 반문하시는 분도 있을겁니다. 

네!!! 식히면 됩니다. 만일 냉각팬으로 부족하면 물이나 질소를 사용하면 됩니다.

Nitrogen Cooling질소 냉각 : 이런 시스템을 원하십니까? (출처 - http://www.extremetech.com/extreme/85038-highlights-from-nvision-2008-slideshow/17?print)


하지만 수천~수만개의 CPU를 사용하는 IDC센터의 경우에는 전기요금도 부담이 됩니다.(기업의 이익과도 크게 상충하죠

따라서 IT장비가 먹어치우는 전기요금이 감당하지 못할 수준까지 올라간다면 회사들도 IT 유지비용에 대해 심각하게 고려할 수 밖에 없게 됩니다. 

더군다나 발열량이 크면 클수록 냉각에 사용되는 전기 에너지도 커지는 2중의 전기낭비가 문제됩니다. 최근에는 이런 문제때문에 추운 지방에 IDC센터를 짓자는 말까지도 나올 지경입니다.

반도체 공정의 집적기술은 날로 좋아져서 CPU를 작게 만들 수 있게됐지만, 클럭을 높일 수가 없으니... 대안으로 나온 것이 CPU를 여러 개를 집어 넣고, 캐시 메모리도 확장하는 기법들로 선회한 것입니다. 

그러나 이런 방법으로는 개별 CPU 1개의 성능을 올리지는 못합니다. 즉 과거에 순차적으로 실행되는 프로그램은 거의 빨라지지 않는다는 점이죠. 과거에는 프로그래머가 CPU 성능 향상에 무임승차 했지만 이제는 불가능해 진 것입니다.

그래서 동시에 여러 개의 CPU를 사용하기 위해 프로그래머는 일감을 나누어서 작업시키는 형태의 프로그래밍을 해야 합니다. 대표적으로 멀티쓰레딩(Multi-Threading)이 있지요.

그러나 멀티 쓰레드 프로그래밍은 녹록치 않습니다. Critical section, Data race, Dead lock, Prefetching, False sharing 등등 수 많은 이론과 기법을 알아야만 제대로 쓸 수 있기 때문입니다. 그리고 이런 기법들을 설명하는 책은 흔치 않습니다. 

왜냐고요? 교과서적인 답은 무려 20년 밖에 안된 최신이론이기 때문이고, 비공식적인 답은 출판사에서 장사가 안되기 때문에 출판하려 하지 않습니다. 

그리고 결정타로는 이 정도의 지식을 가진 분들 중에서 저술활동을 하는 분이 거의 없는 것도 하나의 이유입니다. 고급서적이 경제적인 메리트가 전혀 없기 때문이기도 할 겁니다. 차리리 엑셀이나 워드 같은 초급 활용서가 훨씬 잘 팔립니다.

이 책은 멀티코어를 이용하여 고성능 프로그램을 작성하기를 원하는 사람들에게 촛불같은 책입니다. 물론 책에 직접적인 테크닉이나 활용법은 없지만 이 책을 보는 레벨이라면 책에서 주는 영감만으로도 충분히 단비가 될 것입니다.



(참고1) 이 책은 내용이 쉬운 편은 아닙니다. 따라서 초급레벨이라면 꼭 서점에 가서 보고 사시기 바랍니다. 괜히 리뷰만 보고 덜컥 샀다가 예상한 내용과 틀려서 큰 낭패가 있을 수도 있습니다.

(참고2) 멀티쓰레드 프로그래밍에는 POSIX thread (pthread), OpenMP 등의 표준 스펙들이 있습니다.
* OpenMP를 이용한 멀티 쓰레드 프로그래밍 HOWTO : sunyzero.egloos.com/4227785
* OpenMP 3.0 New features : sunyzero.egloos.com/4283977

(참고3) 봐두면 좋은 기사거리들
* 멀티코어 세상에서 살아남기 (김도형) : http://www.ibm.com/developerworks/kr/library/dwclm/20080812/
* 반도체 공정 이야기 : http://gamma0burst.tistory.com/363





4 Comments
댓글쓰기 폼