자연의 신비, 프로그램의 신비

예전 월간 뉴튼 과학 잡지를 오랫동안 받아보았다. 그런데 이제는 네이버 ‘오늘의 과학’이 대신한다. 심도 있는 과학 상식을 쉽게 소개해주는 코너로 정말 훌륭하다. 특히 뉴튼 잡지가 주로 다루었던 상대론천체물리가 자주 나와 너무 좋다. 고등학교 때 배운 보어 수소 원자론이나 학부 교양화학시간에 배운 간단한 양자 역학까지는 어떻게 이해를 했지만, 요즘 LHC에서 나오는 질량을 결정하는 입자 힘을 매개하는 입자 얘기가 나오면 이제 아득하다.

우주론 역시 그 신비로움을 말을 할 수 없다. 옛날 옛적 뉴튼에서 봤던 우주배경복사, 블랙홀이 증발한다는 거짓말 같은 호킹복사가 대표적으로 나를 놀라게 한 사실이다. 그리고 많은 사람들이 개념을 두고 오는 ‘안드로메다’. 그런데 정작 안드로메다의 거리가 지구로부터 얼마인지 아는 사람이 얼마나 될까?

파일:M31 Lanoue.png

개념 충만한 안드로메다 은하: 지구로부터 250만 광년 (9.46조 곱하기 250만 킬로미터)

물리학 같은 과학은 - 신이 만들었던 저절로 생겨났던 - 자연의 신비를 풀려고 하는 사람들의 노력의 결정체다. 보통 공학과 다른 근본적인 이유가 여기에 있다: “연구하는 대상이 자연이냐, 아니면 인간이 만든 피조물이냐.”

그래서 전산학은 일면 덜 심오 해 보이기도 한다. 인간이 만들어 놓은 기계와 규칙 위에서 뭔가 바보스러운 짓을 하는 것 같기도 하다. 그런데 전산학과 매우 유사한 수학을 보면 (사실 수학과 전산학은 동일하다고 생각한다) 그러하지 않다. 수학은 사람이 발명한 숫자로 (발견이라 볼 수도 있겠지만) 만들어진 새로운 세계를 탐험하는 학문이다. 수학의 세계는 우주만큼이나 신비롭다. 전산학도 이러한 면에서는 동일하다. 0과 1만이 있는 세상에서 무엇을 할 수 있는지 또 이 세계에 숨겨진 비밀을 찾는 것이다.

특히 컴퓨터를 작동시키는 프로그램은 사실 신비의 대상이다. 모르는 것이 너무 많다.

무슨 소리? 사람이 직접 프로그램을 짜고 어떻게 작동하는지 아는데 모르는 것이 많다니?

단순히 거시적인 프로그램의 결과만을 이야기하는 것이 아니다. 그보다 미시적으로 한 프로그램이 컴퓨터에서  어떻게 작동하는지 알기 어렵다는 것이다. 아주 간단한 “Hello, World!”는 아마 모든 것을 이해할 수 있지도 모른다. 그런데 조금만 프로그램이 커지면 아직까지 완벽히 이해하지 못한다. 극단적으로 Halting Problem이 이야기하는 것처럼, 어떤 프로그램이 어떤 입력 값을 받았을 때 이 프로그램이 유한한 시간 내에 종료할지 아니할지는 풀 수가 없다. 시간이 많이 걸리는 것이 아니라 아예 풀 수가 없다. 불가능하다. 이런 문제 말고도 어려운 것은 많다.

컴퓨터의 성능을 빠르게 하려면, 전력을 더 적게 사용하려면, 더 안전하게 만들려면 일단 어떤 프로그램이 컴퓨터에서 어떻게 작동하는지를 정확히 알아야 한다. 그런데 이것 자체가 아직까지 너무 어렵다.

위 그림 두 개는 gzip이라는 압축 프로그램과 gcc 컴파일러가 작동할 때 벌어지는 여러 이벤트를 기록한 것이다. 위로부터 L2 캐시 미스, 에너지, L1 캐시 미스들, 분기 예측기 그리고 사이클 당 명령어를 나타냈다. 보다시피 두 프로그램의 행동은 상당히 다르다. 그렇다면 이것을 어떻게 분석해야 할까? 여기서 어떤 의미를 찾아내어 보다 빠른 컴퓨터를 만들 수 있을까? 쉽지 않은 문제다. 그래도 지금까지 30~40년 동안 수많은 학자들이 노력해왔다.

현대 CPU의 성능을 결정짓는 주요 인자로 캐시와 분기 예측기를 들 수 있다. 이 둘은 모두 프로그램의 미래를 예측해야 한다는 점에서 동일하다. 그런데 미래에 일어날 일을 완벽히 예측할 수 없기에 지금까지 프로그램이 보여준 행동을 이해하고 분석하여 미래를 예측한다. 간단한 직관력 하나가 프로그램 행동을 이해하는데 큰 실마리를 줄 수 있고 이것을 기반으로 더 나은 해법을 찾을 수 있다. 캐시나 분기 예측기에 들어간 기법들은 모두 이런 프로그램의 행동을 관찰한 뒤 얻은 지식으로부터 나왔다.

요즘 내가 하는 삽질은 “프로그램에 담겨있는 병렬성 찾기”로 요약할 수 있다. 물론 이런 엄청난 문제를 한방에 풀 수는 없다. 내가 무슨 아인슈타인도 아니고 시공간이 휘어있다는 그런 일반상대론을 만들 수는 없다. 그래서 이 문제를 좁히고 좁혀서 작은 문제 하나를 만들고 그걸 풀고 있다. 비록 간단해 보이는 문제이지만 쉽지 않다. 몇 백줄 안 되는 코드라도, 프로그래머가 직접 이 프로그램을 만들지 않았거나 이 알고리즘을 제대로 이해하지 못하면 이게 쉽게 병렬화가 될지 안 될지 알아낼 수 없다. 여기서 어떻게 하면 이걸 좀 더 쉽게 알아낼 수 있을까?

지금까지 이야기한 문제는 모두 프로그램을 얼마나 잘 이해하느냐에 그 성패가 달려있다. 이 문제 뿐만 아니라 프로그램에서 버그를 찾는 문제 같은 것도 과거에는 비교적 단순한 방식으로 프로그램을 이해했다. 태초에 자연이 4개의 원소로 되어있다고 생각한 수준이었다. 이제는 조금 더 뛰어난 통찰력으로 프로그램을 이해해 좀 더 나은 해법을 찾고 있다. 대충 갈릴레오나 뉴튼 정도가 되었다고 본다. 그런데 아직까지 상대론이나 양자역학처럼 획기적으로 프로그램을 이해할 수 있는 방법은 아직 없다. 과연 언제쯤 이것이 가능할까? 아니 이게 가능은 하기라도 할까?

by object | 2009/06/05 15:08 | 컴퓨터 | 트랙백(1) | 덧글(11)
트랙백 주소 : http://minjang.egloos.com/tb/2338015
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from sweetcorn's .. at 2009/06/06 09:56

제목 : BravoCorn의 생각
민장님 블로그의 글을 보고 드는 생각: 개념은 지구에서 출발해서?! 안드로메다까지 참 먼거리를 여행해가는구나…...more

Commented by SP at 2009/06/05 17:33
이해하고 원리를 알아내려는 시도가 좋아보입니다. 일전에 빌드시간을 줄이기 위한 단순한 호기심에 빌드환경에서 각 국가(지역)에 특화된 부분만 뽑아내는 작업을 한달간 했던 기억이 있습니다. 하다보니 원리가 조금씩 보이고 원리를 알수록 이해하기도 쉽고. 다행이 성공해서 프로젝트가 잘 끝났지만, 아시죠? 이런거 시간 들였다가 못하면 욕만 죽도록 먹죠 -_-;; 어쨌거나 이해하고 원리를 알아내려는 시도가 좋은거죠.
Commented by object at 2009/06/06 15:18
시간은 좀 걸리지만 그 결과는 단 법입니다.
Commented by Tae-Hwan at 2009/06/05 19:15
간단한 질문 하나.. 드립니다. ISA 설계 시, 또는 Computer System Design 시, Instruction Encoding 결정이나, Cache Scheme, Branch Prediction Scheme, Bus Arbitration 등등... 이런 것이 실제로 전체 Performance에 어떻게 영향을 미치는 지를 보기 위한 어떤 시뮬레이션 환경이나 Generic 한 Framework이 있나요? SS 같은거는 너무나 덩치가 크고 OOO 를 위한 기능이 너무 많이 들어있네요..^^

ARM이나 X86이나 ISA설계를 보면은.. 이 사람들이 感으로 했을까 정량적 Data의 도움을 받았을까가 항상 궁금하네요.
Commented by object at 2009/06/06 02:03
최최의 x86 ISA 설계는 감으로 했겠죠. 그리고 그 뒤에 추가된 SSE나 AVX 그리고 최근의 LRBni는 시뮬레이션을 거치고 아마 이 명령어가 매우 합리적이다라는 확신을 했어야 했을 겁니다. 회사마다 각자 시뮬레이터가 있고 범용적인 것은 없는 것으로 알고 있고요. ARM은 잘 아시다시피 RISC 철학에서 나왔으니 어느 정도 정량적인 데이터를 기반으로 했을 겁니다.
Commented by loondark at 2009/06/05 20:03
위 그림을 보니 마치 뇌과학의 뇌파를 통해서 연구를 하는 사람들과 같다는 생각이 드네요.
Commented by 수아기 at 2009/06/05 21:39
저도 뉴튼을 정말 좋아했는데 말입니다. 언젠가는 이해할 수 있는 날이 오지 않을까요. 아니면 명확히 이해못한다고 누군가 말을 해줄지도 말입니다.^^ 바로 윗분이 쓰신 뇌과학의 뇌파를 이용해서 연구를 하는게 저희 팀에서하는 일인데 뇌파를 보고 해석하는거 어렵다는.ㅠ.ㅠ
Commented by Tae-Hwan at 2009/06/07 14:44
P&H Book의 그 엄청난 Quantity 들. 그리고 그에 해당하는 Figure / Table 들을 보면.. 책 자체의 내용보다도 그 데이터를 뽑아낸 연구 인프라에 경외감이 들어서요^^
Commented by 장모군 at 2009/06/08 11:28
훌륭한 글입니다.
Commented by 장모군친구 at 2009/06/17 23:32
안녕하세요. 재미있게 보고 있습니다.

전에 보았던 글에서 언뜻 pin으로 뭔가를 하신다고 하였던 것 같은데,,, CFG같은 것을 그려서 멀티코어 타깃으로 병렬성 분석기 같은걸 만드시나 보군요.

사실은,,, 아는 지인이 지금 GIT에 있기도 하고 (사실 한 다리 건너면 아는 사이일겁니다. ㅋ)
하시는 분야가 제가 하는 것과 거의 유사한 것 같이 보여서 관심있게 구독하고 있습니다.
회사가 아닌 학교에 계셔서 그런지 좀 더 여유 있게 전체를 조망하는 통찰력이 대단하신 것 같습니다.

위 그래프는 어디서 인용하신 것인지요? 글을 볼때 어디서 인용하신 것인지 간혹 궁금할때가 있습니다...

그럼 앞으로도 좋은 글 많이 부탁드립니다.
Commented by object at 2009/06/18 08:48
안녕하세요. 사실 본문에 링크가 있었습니다. http://www.cse.ucsd.edu/~calder/papers/ieee-micro-phase.pdf
SimPoint라는 논문입니다. 재밌는 논문이니 한번 읽어보시면 좋으실 겁니다. 보통 제가 글을 인용할 땐 본문 중에 링크를 반드시 넣어놓습니다. 명시적으로 참고문헌을 따로 적지 않은데 불편하신 분이 계셨군요. 담부턴 참고문헌을 정리하도록 하지요.
Commented by 황동성 at 2011/02/17 00:05
우주의 구조 일독을 추천드립니다.
네이버캐스트가 시시해 질 것입니다.

:         :

:

비공개 덧글

<< 이전 페이지 다음 페이지 >>





by 김민장 2008 이글루스 TOP 100
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04
저도 아들 돌잔치때 돌잡이 ..
by 박상욱 at 01/18
미국 대학원 원서 작성중에 p..
by 태클사이야 at 01/13
TO: 박PD 로그인 하지 않아..
by 박응용 at 01/10
http://gigglehd.com/zbx..
by dhunter at 12/28
우와.. 좋네요. 태반이 ..
by 윤광배 at 12/17
항상 좋은 글 잘 보고 있습니..
by y2k at 11/23
글이 좋아서 제 블로그에 담..
by 쏭섭 at 11/23
최근 등록된 트랙백
조엘 스폴스키의 강연 (Sta..
by 인덕원칸타타
[Redis] sds.c를 분..
by 조급하지말고 천천히
메뉴릿
이글루 파인더

website counter

Add to Google

rss

skin by 이글루스