Friday, July 25, 2008

Randy Pausch 사망

Randy Pausch 교수가 사망했다는 소식이 오늘 cmu 메일을 통해 전해졌다. 개인적으로 아는 사이도 아니고 사실 일면식도 없지만, 조금 슬픈 기분이 들었다.

Randy는 췌장암으로 투병하다가 학교의 일을 그만두기 전 "Last Lecture"를 했었는데, 그것이 많은 사람들에게 감동과 화제를 주어 그 후에 방송 출연도 하고 전 미국에, 아니 전 세계에 매우 유명해지게 되었다. "Last Lecture"는 퇴임하는 노교수들이 공식적으로 마지막 강의를 하는 CMU의 프로그램인데, 주로 자신이 했던 학문적인 내용을 다루지만, Randy는 '어린 시절의 꿈을 이루다'는 주제로 강연했다. 당연히 영어로 강의했고 한 시간에 달하는 시간이지만, 영어도 쉽게 하고 죽음을 앞둔 사람이라고 생각하기 어려울 정도로 밝고 유머러스하게 강연했으니 한 번 보는 것도 좋지 싶다.

Randy Pausch's Last Lecture - Sep. 18, 2007

비록 일면식도 없는 사람의 죽음이지만, 강연 영상을 다시 들으며 조금 슬퍼졌다. 저렇게 밝고 긍정적이고 세상에 많은 도움을 줄 수 있는 사람의 죽음이라니... 나에겐 오늘 하루도 그저 지나가는 시간이었을 뿐인데 그가 갖지 못한 오늘 하루의 시간이었으리라 생각하니 그저 안타깝고 미안하다.

Randy Pausch 교수의 명복을 빈다. 이젠 더 이상 고통스럽지 않겠지.

Good bye, Randy...

Thursday, July 24, 2008

미국대통령도서관

최근 노무현전대통령의 기록에 관련해 국가기록원과의 마찰이 있는 것을 보면서, 대통령기록을 관리하는 법의 모델이었음이 분명해보이는 미국의 사례는 어떤가 조금 찾아보았다. 여러가지 재미있는 사실을 확인할 수 있다.


William J. Clinton Presidential Center from WIkipedia


미국에서는 대통령이 퇴임하게 되면 대통령도서관을 건립해서 전임대통령관련자료를 관리하고 있다. 전임대통령이 생존한 경우에는 대부분 공식 주소지가 대통령 도서관 주소로 되어있고, 전임대통령이 사망한 경우에는 대부분 대통령 도서관에 안장한다고 하니, 묘자리를 미리 봐두는 격이다. 보통은 대통령들이 고향 근처에 자리를 정하는데 이때는 NARA라는 우리나라로 치면 국가기록원과 군의 협조를 얻어 자료 운송을 최대한 안전하게 보장한다.

처음으로 대통령기록이 보존된 것은 프랭클린 루즈벨트 대통령때부터인데, 루즈벨트는 대통령의 통치기록이 퇴임과 동시에 흩어지거나 없어지는 것이 국가적으로 손실이라 판단하고 자신의 자료를 사재를 털어 기증한다. 뒤이은 트루먼 대통령도 같은 방식으로 기증하면서 일종의 선례가 되었고 1955년에 대통령도서관법이 제정되어 국가가 관리하도록 했다. 이같은 선례는 아직도 남아있어 자료수집이나 운송등에는 NARA가 관여하지만, 실제 도서관건립은 사재를 터는 듯이 대통령 관련 민간재단이 맡으며 이를 국가에 헌납하는 방식이다. 헌납이 되면 관리는 NARA에서 맡지만, 여전히 일부 관리비용은 민간 재단이 맡는 경우가 있는 것 같다.

대통령 도서관은 일종의 공공기관으로 추후에 자료를 공개하고자 하는 목적이 있다. 일단 퇴임을 하게 되면 대통령과 부통령에게 5년의 시간을 주어 자료를 분류하도록 한다. 이때 우리로 치면 지정기록물이 분류되어 퇴임후 최대 12년의 비공개기간을 설정할 수 있다. 지정기록으로 분류되지 않으면 퇴임후 5년 시점에 모두 공개된다. 기록은 서류, 사진, 비디오, 오디오, 심지어는 전화로그까지 모두 포함되며 대통령 도서관은 이 기록들을 열람하고자 하는 사람들에게 쉽게 열람하도록 하는 서비스를 제공하는 기관이다.

물론 종이서류들을 분류하는데 5년이란 기간이 길게 느껴지지는 않지만, 생산기간이 5년에서 10년임을 감안하면 그리 짧지도 않은 것 같다. 나름대로 분류도 되어있을거고. 어쨌든, 최장 5년의 필요비공개기간을 전임대통령에게 부여하고 있는 것과 같다. 물론 분류가 빨리 끝난다면 더 빨리 공개해도 되지만, 공개할 수 없는 자료는 12년짜리 딱지를 붙이면 되므로 질질 끌 이유는 없어 보인다.

이지원이라는 소프트웨어의 도움을 받았으리라 생각하지만, 퇴임과 동시에 '진본'이 국가기록원에 들어가있고 (이건 기정사실인 것 같고.) 비공개설정된 5%미만의 지정기록물이 이미 공개되어 현 청와대에서 이미 볼 수 있다는 봉하마을의 주장이 사실이라면 시스템적인 면에서 미국보다 훨씬 나은 시스템이라 생각한다. 물론, 운영하는 사람의 수준은 그와 별개지만.

(전산화된 기록물에 대해서도 좀 찾아 보았는데, 미국의 경우 아직 실시간으로 전산화하고 있지는 않은 것 같다. Presidential Electronic Record Library라는 프로젝트가 NARA주관으로 진행중이고 레이건, 부시, 클린턴의 자료를 전산화하고 있는 것 같으니 사후 전산화인 듯.)

군부대를 동원하여 (클린턴의 경우, 625톤 분량의 자료를 8대의 C-5기를 가득채워 아칸소로 옮겼다고 함.) 최대한 안전하게 전임대통령이 정한 위치로 옮겨주는 미국과, 전임대통령을 고발하겠다고 말해서 24개의 하드디스크를 들고 오자 (하드 용량이 얼마길래 12개밖에 안되는지는 모르겠지만, 워낙 하드가 싸니 뭐...) 서버 껍데기가 없다고 고발을 하는 이상한 모습이 너무도 비교된다.

레이건 대통령은 대통령도서관을 'Classroom of the democracy'로 표현했다고 한다. 정말 합리적인 민주주의의 교실로 국가기록원이 기능할 수 있을지, 치졸한 정치 모략의 도구로 사용될 지는 두고봐야 할 일이다.

References
미국 대통령도서관 :http://www.archives.gov/presidential-libraries/
클린턴도서관: http://www.clintonlibrary.gov/
위키피디아 대통령도서관: http://en.wikipedia.org/wiki/Presidential_library
NARA: http://www.archives.gov/
PERPOS Project: http://perpos.gtri.gatech.edu/

수학 표현 쓰기

이공계에게 수학은 언어와 같다. 명쾌한 수학적 표현을 통해 말로 풀어쓰는 것보다 내용을 훨씬 이해하기 편하고 다른 부가 설명없이 효과적으로 전달 하기 쉽다. 특히 영어의 한계에 부딪힐 수 밖에 없는 non-native에게는 수학적 표현을 통해 내용을 전달하는 것이 하나의 무기가 된다.

논문에서 수학은 언어와 같으므로 본문 작성을 하는 것처럼 매우 신중하게 표현하여 독자가 불편함을 느끼지 않도록 도와야 한다. 몇 가지 원칙이 있겠지만, 대원칙 하나는 일관성(Consistency)을 지키는 것이다.

논문을 쓸 때 때로는 수없이 많은 수학기호가 사용되므로 일관성을 지키면서 표현하기 위해서는 어느 정도의 훈련이 필요하다. 추천하고 싶은 방법은 논문을 Latex으로 작성하는 것이다. Latex에서의 수식 표현이 익숙해지면 수식을 작성하면서 해당 기호가 벡터인지 행렬인지 스칼라인지 등을 끊임없이 체크하게 된다. 때로는 수식 오류를 찾아내기도 하니 꽤 강력한 툴이 될 수 있다.

이해를 돕는 수식 표현을 위한 몇 가지 원칙을 생각해보자.
1) Convention을 따르자. 관련 연구가 전혀 없는 연구 주제가 있을런지 모르겠지만, 보통은 오랜 시간 쌓인 이전 연구 논문들이나 교과서가 있다. 이들을 잘 살펴보면, 같은 것을 표시하기 위해서는 보통 동일한 기호를 사용한다. 쓰고자 하는 논문을 읽는 사람들 역시 그 논문들을 주로 읽는 사람들이므로 이전에 계속 사용되어온 기호가 있다면 그 기호를 그대로 사용해야 이해하기 쉽다. 물론 논문 내에서 기호가 처음 도입될때는 뭔지 확정해 줄 필요는 여전히 있지만, 익숙한 기호를 사용한다면 독자들은 크게 신경쓰지 않고 내용을 이해하게 될 것이다.
정작 문제는, 새로 도입되는 변수나 표현의 기호를 정하는 것이다. 이미 수 많은 기호가 여러 논문에서 사용되었기 때문에 완전히 새로운 기호를 부여하는 것은 불가능하다. 이 때는 최대한 기존에 익숙하게 사용되던 기호를 피하면서도 새로 도입한 기호의 물리적 의미를 표현할 수 있는 기호를 정하도록 노력해야 한다. 만일 이것이 어렵다고 판단되면 최대한 가깝게 하면서 물리적 의미에 대한 그림을 넣어서 기호를 표시해 주는 방법으로 이해를 돕는다. 관건은 독자가 다른 의미의 양을 나타내는 것으로 오해하는 것을 막는 것이다.

2) 기호 표현의 원칙을 정한다. 예를 들어, 벡터와 행렬, 스칼라를 기호를 통해 구분하는 것이 읽는 입장에서는 매우 편하므로 확실히 눈에 들어올 수 있게 구분해 주는 것이 여기 속한다. 나의 경우에는 잘 알려진 교과서의 표현 방식을 따라, 스칼라는 이탤릭으로, 벡터는 볼드, 행렬은 타이프라이터 폰트를 사용하고 있다. 또 많이 사용되는 방법으로는 벡터를 소문자 볼드, 행렬을 대문자 볼드로 표시하는 방법이다. 이런 것도 역시 관련 연구의 Convention이 거의 정해진 경우가 많으므로 그를 따르는 것이 최선이다. 역시 독자의 편의를 최우선으로 하자.

3) 기호 변형은 하나씩. 제목을 달려니 조금 모호한 것 같다. 어떤 기호가 사용되면 해당 기호는 당연히 동일한 물리적 의미를 가져야 한다. 그러나 때로는 그 기호가 매우 추상적으로 사용되며, 어떤 경우에는 특정한 물리량을 나타내기도 한다. 예를 들어, 어떤 bilinear relation을 표현하기 위해 \mathbf{x}^\top \mathbf{T} \mathbf{x}라는 식을 쓴다고 하면, 이는 벡터 x와 행렬 T의 bilinear relation을 나타내는 것이다. 이는 관계만을 표현하는 것으로 추상적으로 사용된 것이다. 그러나 특정한 x에 대해서의 관계를 나타낸다면,
\mathbf{x}_i^\top \mathbf{T} \mathbf{x}_i와 같이 표현함으로써 x중 특정한 x_i의 식임을 나타내고 이는 특정한 물리량을 표현한다. 이와 같이 추상적인 표현과 그의 특정을 나타내는 경우, 앞에서와 같이 하나씩만 변형한다.
다른 예는 subset을 나타내는 기호인데, 예를 들어 어떤 잘 알려진 기호 T가 있다 하고, 이를 일반화하거나 또는 특정한 경우에 한정된, 그러나 동일한 물리량을 나타내는 기호를 쓰고자 하면, 보통 superscript나 subscript를 사용하여 T_g와 같이 표시한다. 여기서도 기호 T를 계속 사용하고 있음에 주의해야 한다. 만일 새로 제안한 것이라 생각해서 W나 Q와 같이 관계 없는 기호를 사용하면 독자는 T와 관련시키기 어렵기 때문에 이해하기 점점 어려워진다.
이 부분에서 또 하나 주의할 점은 \bar나 \hat, \prime등을 사용해서 변화시키는 표현을 사용하는 것이다. 보통 이와 같은 보조 기호들은 true, estimate, differentiation을 표현하는데 사용되는 경우가 많으므로 혼동시키지 않도록 주의해야 한다. 이것 또한 학계의 convention을 따르도록 노력하자.

4) 유도 과정은 어디까지? 수식들끼리 나열되어 있을때는 이전의 수식으로부터 다음의 수식이 직접 유도되도록 표시하는 것이 일반적인 방법이다. 즉, 굳이 연필을 들고 유도해보려 하지 않아도 눈으로 관계가 파악되도록 하면 최선이다. 독자들은 수식 유도 과정을 따라가지 못할때 상당히 스트레스를 받게 되므로 이를 잘 지켜주면 좋다.
이렇게 자세히 유도할때 문제는 크게 두 가지이다. 한 가지는 제한된 분량의 논문에 세세한 유도를 다 할 수 없다는 것, 또 한 가지는 너무 자세히 유도하다보면 동어반복이 일어난다는 것이다. 분량이 문제가 되는 경우에는 부록으로 빼는 방법도 고려할 필요가 있으나 어떤 경우에는 유도과정 중간결과가 유용하게 사용되는 경우가 있으므로 그러한 경우가 있는지 생각해 보아야 한다.
동어반복이 되는 경우는, 표현이 서로 다르지만 같은 말인 경우 문제가 된다. 독자들은 뭐가 다른지 생각하려하며 이 과정에서 오해할 여지가 생긴다. 그러므로, 수식유도는 적당한 선에서 진행해야 하는데, 이 선을 찾기가 그리 쉽지 않다. 한 가지 방법은 유도 과정을 최대한 자세히 쓰고, 반드시 필요한 부분을 남긴 후, 전후의 수식이 어렵지 않게 유도되도록 연결하는 것이다.
조금 어려운 경우는 매우 사소한 계산이 반복되는데 증명과정이 꽤 긴 경우이다. 이 경우 부록을 활용할 수 있으면 하고, 없으면 유도과정을 말로 간단히 설명하고 결과를 제시한다. 물론 위험부담이 있지만, 논문의 space도 중요한 자원이므로, 그럴만한 가치가 있는지 고민해 봐야 한다.

수식은 논문에서 매우 중요한 표현 방법이므로 본문 만큼이나 중요하게 여러 번 퇴고해야 한다. 수식도 문장의 일부이므로 구두점등의 사용을 신중히 고려하여 사용하고, 전체 문장을 언어로 읽으면서 자연스러운지 확인해야 한다. (Equation이나 inequality는 문장이다. 그렇지 않으면 phrase인데 언어의 단어가 없이 수식 phrase가 단독으로 나오면 매우 어색하니 주의.)

Saturday, July 19, 2008

이상한 나라의 폴

이상한 나라의 폴은 어린 나이에 보기에도 좀 이상했던 만화. 알록달록해서 좋아는 한것 같은데.
나라가 점점 이상한 나라가 되어 가는 것 같아서... 원래 그랬는데 이제야 알게 된건지.
어서어서 딱부리로 대마왕을 물리치고 니나를 구해야 할 텐데... 고생이 많넹.

Friday, July 18, 2008

논문 제목 달기

읽히기 위한 논문을 쓰려면 어떻게 해야 하나에 대해서 간간히 포스팅하고 있는데, 오늘 논문 검색을 하면서 생각난 것이 있었다. 읽을 논문을 정하기 위해서 가장 먼저 보는 것은 바로 '제목'이라는 점. 좋은 제목을 정해야 더 많이 읽히게 된다.



좋은 제목이란 뭘까? 물론 흥미를 끌 만한 제목이 좋은 제목이다. 그래야 선택받을 확률이 높아지므로. 흥미를 끌 만한 제목은 보통 논문에서 보이려 하는 것을 함축적으로 표현한 것일 것이다. 이게 뭔가 싶어서 읽어보게 하는 그런 제목. 그렇지만, 이런 제목을 달고 나온 논문이 그 만한 내용을 담고 있지 않다면 왠지 사기 당한 기분이 들지 않을까 싶다.

논문 제목에 있어서 또 한 가지의 이슈는, '검색'이다. 요즘 논문을 훑어보고나서 복사해 오는 시대도 아니고 자리에 앉아서 키보드를 또각거리는데, 검색 매칭이 잘 될수록 선택될 확률이 높아진다. 이런 제목을 정하기 위해서는 매우 구체적으로 논문에서 나타내려는 것을 적시할 필요가 있다. 구체적으로 적을 수록 길이는 길어진다. 그런데 너무 길이가 길면 또 눈에 잘 들어오지 않게 되므로 적당히 줄여야 한다.

여하튼, 논문 제목은 논문의 내용을 정확히 표현해야 한다. 내용 표현을 위해 들어갈 수 있는 것은, 6하원칙 중 '무엇을', '어떻게', '왜'의 세 가지이다. 이 중 '무엇을' 했는지는 뺄 수 없고, '어떻게' 했는지는 들어가는 경우가 많으며, '왜' 했는지는 매우 특정한 경우에 들어가는 것 같다.

1) 무엇을 했나: 논문에서 주장하고자 하는 것, 또는 보이고자 하는 것이 무엇인지 써야 한다. 보통은 가장 중요한 키워드, 그 중에서도 가장 핵심적인 것을 골라야 한다.
2) 어떻게 했나: 기본적인 방법론을 적는다. 이는 이미 잘 알려진 문제에 대한 접근 방법이 여러가지 있을때 어느 방법론으로 접근하는지를 나타낸다. 또는 잘 알려진 문제에 대한 새로운 방법인 경우 이 부분이 가장 중요한 키워드가 된다.
3) 왜 했나: 보통은 순수히 이론적인 논문이나 특정한 응용분야에 한정된 논문인 경우 쓴다. '~~~을 위한'으로 해석될 수 있는 제목이 이 부분에 해당한다. 이러한 단서가 붙어 있으면 독자들은 그 특정한 응용분야에 특화된 방법론으로 이해하는 경향이 강하다.

제목을 정할때는, 다음과 같은 방법이 많이 이용된다.
1) 키워드를 생각나는 대로 나열한다.
2) 중요도 순으로 정리한다.
3) 적당히 나열한다.
4) 불필요하거나 반복되는 부분을 뺀다.
5) 나머지를 다시 정리한다.

중요한 것은 '어느 부분을 넣고 어느 부분을 뺄 것인가' 인데, 간단한 방법은 해당 단어를 빼고 얼마나 정보량이 줄어드는 지를 보는 것이다. 정보량이 많이 줄어들면 중요한 키워드이므로 그대로 둬야 하고, 정보량이 거의 줄어들지 않는다면 뺀다.

예를 들어, 제목이 'Novel approach to face tracking for robotic applications' 라는 논문이 있다 하자. (제목은 방금 급조했음) 이 논문 제목에서 알 수 있는 것은, 이 논문이 얼굴 트래킹을 하는 논문이라는 것 이외에는 없다. 보통 new, novel, flexible, general, robust 와 같은 단어들이 논문에 자주 들어가는 데, 사실 이런 단어들이 주는 정보라는 것이 있기나 한 것인지 의문이다. 새로운 게 아니라면 논문을 왜 썼겠는가? flexible, robust나 general이라는 말을 쓰려면 '...에 대해'라는 식으로 특정해야 할텐데, 보통은 특정되지 않는다. 이 경우에 해당 단어의 정보량은 0. 'Robotic applications' 라는 말도 너무 모호해서 의미가 없다. 논문의 내용이 어떤 로봇의 기구적 특성을 활용한다면 더욱 구체적으로 적시하는 것이 맞고, 그냥 로봇에 안올려도 되지만, 굳이 로봇에 올려보았다라는 거라면 안쓰는 게 낫다. 역시 정보량이 0. 남는 것은 Face tracking 뿐이다. 만일 제목이 'Linear approach to 3D face tracking using modified template matching' 이었다면 (역시 제목은 없는 제목임) 훨씬 전달하는 내용이 많다. 이 제목에서는 독자들이 modified와 linear, 3D face tracking에 집중하게 되어 대충 어떤 내용을 찾아야 하는 지 기대하게 된다. (역시 modified가 모호하긴 한데, 없는 논문 제목을 만드는 거라 대충 했음) 만일 face tracking 키워드로 이 두 편의 논문이 나왔다면 어느 논문을 먼저 읽게 될지는 자명하지 않은가?

지나고 보면 논문 제목을 정하는데에 크게 신경을 안 썼던 것 같은데, 사실 이게 가장 중요하다. 자신이 논문 검색을 할 때를 생각하면서 논문 제목을 정해보자. 이전에 썼던 논문제목들을 보니, 참 어이없는 경우도 많아 쓴 웃음만 나온다. 어쨌든, 논문 제목을 먼저 확정하고 논문을 쓰지는 말자.

팁 하나 더. 그다지 중요하진 않지만.
저렇게 논문 제목을 달다보면 보통 길어진다. 그럼 두 줄 이상 되는 경우가 발생하게 된다.
만일 논문 제목이 'Motion estimation of multi-camera systems using perspective 5-point algorithm' 이라 하고, 한 줄에 다 안들어가면 어디서 자르는게 좋을까?
같은 제목은 아니지만, 나는 이렇게 잘랐더랬다.


Motion estimation of multi-camera systems
using perspective 5-point algorithm


근데 이렇게 자르는 게 더 좋단다.

Motion estimation of multi-camera systems using
perspective 5-point algorithm


왜냐면, 'using' 보다 그 뒤에 나오는 단어가 더 중요하기 때문.
Layout을 자신이 조정하지 못하는 경우가 대부분이고, 그리 중요하지는 않지만, 생각해 볼 여지는 있는 문제.

Wednesday, July 16, 2008

일본드라마 CHANGE

엔딩 크레딧 - Madonna의 Miles Away


정말 오랫만에 챙겨 본 일본드라마. 오래간만에 기무라 타쿠야가 주연을 하기도 했고, 연속극에서는 찾아보기 힘든 정치 소재 드라마라 눈여겨 보고 있었는데 마침 기회가 되어 완결을 보았다.

일본드라마는(만화도 그렇지만,) 한국드라마와는 조금 다른데, 주요 드라마들은 4분기로 나누어 제작하고 일주일에 1회 10화~12화로 완결한다는 점이 그렇다. 대부분의 경우 한 회에 해당 내용이 마무리되는 에피소드식으로 구성되는 것도 그렇고, 시청률이 높다고 해서 늘리기를 할 수 없는 점이 다르기도 하다. (대신 시청률이 낮아도 그대로 간다.) 완전 사전 제작은 아니라고 들었지만, 이런 제작 시스템이라면 중도에 스토리를 바꾸긴 어렵겠지. 대신 큰 스토리를 길게 이어가기는 어렵다. 대충은 큰 흐름은 에피소드의 나열로 메꾸는 형태라고 할까.

내용적으로는 꽤 교훈적인 주제를 내포하는 경우가 많다. 이상주의라고 해야할까. 다 보고나서 돌이켜 보면 도덕 교과서에나 나올 법한 이야기를 하고 또 하는 경우가 많다. 물론 시청자들도 현실과 다르다는 걸 알겠지만, 일종의 판타지겠지. 그래서 주인공들은 약간은 미숙하지만 이상을 갖고있는 사람으로 설정되는 경우가 많고, 주위의 현실적인 등장인물들은 회가 지나갈수록 주인공의 매력에 푹 빠져서 같이 이상주의자가 되 버리고 마는, 일종의 성장 드라마가 되는 경우가 많은 듯.

뭐... 일본드라마의 일반론은 이쯤에서 걷어치우자. 이 포스트를 쓰게 된 건, 최종화에 나왔던 대사 때문.
오노다 간사장은 아사쿠라 케이타 총리가 사임할 뜻을 갖고 있음을 알게 되어 만나러 온다. 오노다 간사장의 충고는 초심을 잃지 말라는 것. 이런 말을 남기면서...
"당신에게 국민들이 기대하는 건, 당신이 프로가 아니라 초보이기 때문이다."

존경하옵는 다케오 카나데 교수님의 저서 제목이 떠올랐다.
"초보처럼 생각하고 프로처럼 행동하라."
초보는, 경험이 없기 때문인지, 어떤 문제가 왜 어려운지 모르는 경우가 많고 머리 속에서는 이미 안되는 일이 없다. 경험이 쌓이고 쌓이면서 (대부분의 경우에는 실패의 경험이다.) 어떤 문제를 접했을 때 대충 감이 오게 된다. 이게 될 법한 일인지 아닌지. 점점 경험이 쌓여갈 수록 문제의 어려운 점을 더 쉽게 찾아내게 된다. 그러면서 문제가 정말 필요한지를 떠나 실현가능성이 있는지를 먼저 생각하는 경우가 많다. 프로처럼 생각하면, 세상에 안되는 일 투성이이고 될 만한 일은 이미 누군가가 다 해놓은 상태가 되고 만다.

하지만, 경험은 그런데 쓰라고 있는 것이 아니다. 초보처럼 생각해서 만들어 낸 문제의 해답을 찾기 위해 있는 거다. 안되는 이유를 찾기 위함이 아니라. 정치에는 초보였던 초등학교 선생인 아사쿠라 케이타가 본 정치 세계가 납득할 수 없는 것, 고쳐나가야 할 것 천지였던 것처럼 세상에는 아직도 그렇게 많은 문제가 풀리길 기다리고 있는지 모른다.

오노다 간사장의 말을 들으며, 한 가지 생각이 떠올랐다.

'인생은 누구나, 어느 순간이나 초보'


항상 어제와 같은 오늘이라고 생각하지만, 사실은 어제와는 조금은 다른 나이기에, 또 환경이기에 어제와 같지 않은 오늘을 살아야 하는 나는 초보일 수 밖에 없다는 생각이 들었다. 누구에게나 마찬가지겠지만. 항상 처음으로 겪는 일을 겪고 있으면서, 뭐든 다 알고 있는 듯 예단하며 살아온 건 오만한 프로의 생각이 아니었나 하는 생각이 들며 부끄러워졌다.

Tuesday, July 15, 2008

곰돌이 푸~

참... 인터넷엔 없는 게 없다. 일요일 아침 만화시간에 하던 푸우 주제가.
나보고 푸우 닮았다고 하길래 생각난 김에 검색. (하긴 살이 쪘을땐 그랬나?)
푸우에 나오는 캐릭터는 모두 크리스토퍼 로빈의 봉제인형.
귀염둥이 캐릭터가 많이 나온다.

하지만... 나의 favorite character는 역시 이요르~
이요르는 어록도 많다... 그 중에 하나
"A tail isn't a tail to them, it's just a little bit extra at the back."
노인같이 말하는 게 꼭 나 같지 않아? ㅎㅎㅎ

Monday, July 14, 2008

C 함수를 CUDA로 포팅하기

CPU에서 구현했던 각종 C 함수를 GPU에서 돌리기 위해 며칠째 똑같은 삽질을 계속하는 중.

GPU는 서로 다른 자료를 가지고 동일한 연산을 수행하는 데에 매우 탁월하므로 상당한 가속이 이루어질 것으로 생각하고 포팅하고 있지만 여러가지 난제에 부딪히고 있다.

1) 알고리즘 복잡도
물론 상당히 복잡한 알고리즘도 포팅할 수는 있겠지만, 과연 효율적인가에 대해서는 의문이 남는다. 주지한 바대로 GPU상에서 가속되는 요인 중 하나는 동시에 여러 쓰레드가 돌기 때문이다. 동시에 구동 가능한 쓰레드의 수는 세 가지의 요인에 의해 결정된다. 첫번째는 사용된 레지스터의 수이고, 두 번째는 shared memory의 크기, 마지막 하나는 사용한 GPU의 사양이다. 이 세 가지는 런타임에 결정되는 것이 아니라 컴파일 시점에 결정되는데, 사용한 컴파일러 (정확히 얘기하면 CUDA nvcc의 버전)에 따라 다르게 결정되므로 CUDA 라이브러리의 버전을 잘 결정할 필요가 있다.

예를 들어, hypothesis-test의 형태를 갖는 알고리즘을 만든다고 하면, test단계는 보통 비교적 간단한 사칙연산으로 해결되는 경우가 많다. 이러한 사칙연산에는 GPU가 매우 강력한데 이는 비교적 레지스터를 적게 쓰면서 해결할 수 있고, 구현상 branch가 적은 단일 flow process가 되는 경우가 많기 때문이다. 이러한 구조의 계산에서 병렬계산은 매우 강력하며 상당히 많은 수의 쓰레드를 동시에 수행할 수 있다. 반면, hypothesis 단계는 단순 random process나 markov random walk의 경우처럼 간단하게 구현되는 경우가 아닌 model fitting이 필요한 경우라면 비교적 복잡해진다. 특히 수치해석기법이 활용된 경우에는 수많은 반복 연산과 divergent branch가 존재하므로 그만큼 많은 레지스터를 소모하게 된다.

간단한 예로 numerical recipe등에 있는 singular value decomposition 알고리즘을 보면, householder matrix로 바꾸어 reduction하는 과정을 거치는데, 이 과정에서 loop와 branch가 많아서 레지스터 소모량이 크다. svd를 한 번 사용하면 cuda 2.0 beta의 경우 레지스터를 거의 30개 정도 사용하게 되며 이 경우 쓰레드는 최대 16개 구동할 수 있다. 물론 그것만 할 수는 없으므로 더 사용하게 되면 동시 구동되는 쓰레드의 수는 더 줄어든다.

가속성능이 얼마나 나올지는 구현한 알고리즘에 따라 달라질 수 있다. 관건은 사용된 레지스터의 수를 줄이는 것이며 이는 컴파일러 성능에 비례한다.

2) pointer argument의 사용
CUDA로 포팅하면서 조금 난감한 문제 가운데 하나는 __device__함수에서 메모리 할당이 안된다는 점이다. GPU에서는 계산만 수행하므로 메모리관리는 외부에서 직접 해주어야 한다. 그런데 보통의 C 함수 구현에서는 보통 가변메모리를 할당해서 다른 함수의 인자로 넘겨주어 결과를 받아오는 경우가 많고 특히 벡터나 행렬연산을 하는 경우에 이런 패턴으로 구현하는 경우가 많다. 이러한 패턴은 CUDA를 사용해도 허용되지 않으므로 내부에서 사용될 메모리를 밖에서 미리 잡아 넘겨주어야 한다.

그러나 모든 부속함수의 모든 지역변수를 일일히 cudaMemAlloc으로 잡는 것은 너무 번거로운 일이고 device global 메모리를 사용하면 coalescing을 신경써야 하므로 일이 너무 커진다. 특히나 알고리즘이 복잡해질수록 더욱 그렇다. 이때는 shared memory를 사용해서 빠르게 access해야 하는데, 서로 다른 쓰레드가 서로 간섭하지 않도록 shared memory space를 디자인하는 것이 중요하다. 예를 들어 쓰레드의 갯수가 n이고 m 벡터를 인자로 넘기는 상황이라면, nm 크기의 shared memory를 잡아서 함수내에서 써 주는 식이다.

여기서도 볼 수 있는 것은 함수 내의 메모리할당이 많은 알고리즘일수록, 그리고 벡터의 크기가 클 수록 shared memory의 사용량이 비례해서 증가한다는 점이다. 쓰레드 블록내에서 shared memory의 크기가 한정되어 있으므로 global memory를 사용하지 않는다면 쓰레드 갯수를 늘리는 것이 한정되며 이는 가속성능을 저하시킨다.

shared memory를 얼마나 쓸지는 코딩 단계에서 결정되므로 신중히 결정해야 한다. 너무 크면 동시에 구동되는 쓰레드가 적어질 수 있고, global memory에 많이 할당하면 그만큼 쓰레드 수행 속도가 느려진다.
(shared memory 변수는 함수 내에서도 정의할 수 있는 것으로 보이나 가급적이면 전역변수로 선언하자. 컴파일러나 런타임라이브러리에 따라 다른 결과를 보이는 것 같다.)

3) Precision의 문제
GPU는 아직까지 single precision 계산만을 지원한다. CUDA 2.0과 GT200 GPU가 나오면서 double precision계산이 지원되기 시작한 것으로 보이지만, Compute Capa. 1.3이상인 GPU를 사용해야만 가능한 것 같다. 결국, 시도라도 해보려면 GT200을 사용하는 GTX280, GTX260이나 Tesla S1070, C1060중에 하나를 사용해야 한다는 의미. (2008년 7월 15일 현재)

결국 알고리즘이 double precision을 필요로 하는 경우에는 CUDA 활용이 제한될 수 밖에 없다. 이런 경우는 수치해석기법이 필요한 경우 많이 발생할 것 같은데, condition number가 작은 문제인 경우, 또 반복적인 계산을 통해 최적화를 수행하는 과정이 들어간 경우 등이 이에 해당할 것이다. 특히나 중간 계산값에 따라 결과 정확도가 많이 달라지는 경우에는 precision을 반드시 체크해봐야 할 것 같다.

진짜 이딴 식으로 살지는 말자 --;;

뭐... 멀리서나마 시끄럽게 돌아가는 한국 뉴스에 관심이 간다. 언제 돌아가게 될 지도 모르고... 사실 싸움구경 불구경이 재밌다고들 하지 않나. 재미로만 보기에는 좀 그런 뉴스들이 많긴 하지만.

특히나 공돌이로서 재밌는 구경거리는 봉하마을과 청와대 사이에 자료를 갖고 갔니 마니 하는 논쟁. 전자문서인 데이터베이스의 원본이 어쩌고, 서버를 통째로 떼갔다는둥, 근데 자료를 복구한다는 둥 하는 횡설수설 브리핑을 읽고 있으면 개그맨인건가 싶은 생각도 들고, 뜻도 모르면서 말을 하고 있는 사람이 좀 이상해 보이기도 하고. 인수인계할때 자료 준다니까 싫다 할때는 언제고 지금와서 없다고 난리법석을 부리는 것도 웃기고, (뭐.. 몽니부리는 거겠거니 하는 생각이었지만.) 누가 자료 준다고 하면 안볼거 뻔히 알면서도 일단 받아 챙기는 공돌이 습성이 생각나 조금 웃기도 했다. 다른 한 편으로는 전자문서의 열람과 사본제작이 다를 수 있는가에 대한 상당히 기술적인 논쟁까지 겹쳐지며 공돌이로서는 꽤 재밌는 논쟁이 되어가고 있었더랬다.

근데, 오늘 뜬 기사 둘.

靑 "盧측 기록반출로 국정운영 할 수 없어"
'前대통령 기록물 현직도 열람’ 법 추진

욕을 안할래야 안할 수가 없다.

원래 못보는 자료가 없어서 국정운영을 못한다는 건 또 무슨 해괴한 말이며, 전임자의 기록을 현직도 보게 만들겠다고? 왜 일부 자료에 대해서 20년 30년씩 비공개하는지에 대한 개념이 전혀 없는거냐? 조선시대 임금들도 못하던 걸, 그것도 다 이유가 있어 그리 하는것을 깡그리 무시한다니 어이가 없다.

첫번째 기사가 사실이라면, 대놓고 나는 병신입니다 하는거나 같은거고. 왜냐고? 원래 그 자료는 못보는 거라니까? 원래 없는 자료가 없어서 일을 못한다는 건 뭔 병신같은 개소리냐고. 주식회사 대한민국이라 인수인계할때 다 내놓고 가야하는거 아니냐고? 그런 정신머리로 국가의 일을 하니 나라꼴이 그 모양이지. 그럼 왜 준다 할때 안 받고 오렌지 타령이나 하고 있었냐고.

게다가 정말 굳이 필요하면 국회 2/3의 동의를 구해서 볼 수도 있는 길이 있다. (미국법의 예를 따른 거겠지만. 미국의 경우 전임대통령 자료의 정보공개를 요구한 현직대통령은 단 한 사람도 없다.) 이모저모 따져보면 너무 악의적이고 야비하다.

진짜 이딴 식으로, 야비하게 굴지는 말자. 노 전대통령이 데이터베이스 사본을 보유하고 있는 것 자체는 논란의 여지가 있을 수 있다손 치더라도, 지금 하고 있는 일은 지난 5년간 지겹게 들어야 했던 '이게 다 노무현 때문이다'를 앞으로 5년간 더 하고 싶다는 말에 지나지 않는다. 지난 대통령의 '비공개' 자료가 없어서 국정 운영을 진짜 못하겠다면, 그만 두라. 그게 없어도 해 낼 수 있는 사람이 있을테니. 의석이 많다고 개념없는 법안이라도 만들어서 전임자의 뒤나 캘 요량이면, 그런 식으로 밖에 '국정 운영'을 못하겠으면 그것도 무능력함을 인정하는 것 이상의 의미는 없다.

좀 흥분된 포스팅이지만, 무슨 저잣거리의 양아치도 아니고 한 나라의 국정을 담당하는 사람들인데 최소한의 양식과 개념은 좀 장착하기 바란다. 지금 하고 있는, 하려고 하는 저 짓은 정말 길거리 양아치만도 못한 저열한 의식의 발현일 뿐이다.

Wednesday, July 9, 2008

지리공부가 필요해!!

재밌는 플래시게임(?) 하나.
제시한 곳이 세계지도 상에서 어디 있는지 클릭하면 되는 간단한 게임인데, 이거... 만만치가 않다.
대충 어디쯤이겠거니 하고 찍어보면 한 300km정도는 벗어나는게 보통이네... ㅋ
하여튼... 자신의 세계 지리 실력을 테스트 해보거나, 다음 여행지를 골라보고 싶다면 도전!

(다 하고 나면 여행IQ라는 게 나온다... 100도 안되는군 OTL)

여행 아이큐 검사 하러 가기