|
예전 수업 시간에 한 교수님이 종종..
라는 말을 해서 학생들을 웃기곤 했는데 정말 세상 일은 그리 간단한 것이 없다. 요즘 하는 일이 프로파일링 툴을 만드는 일이다. 그런데 이 프로그램은 매우 많은 시간과 또 매우 많은 메모리를 소비한다는 치명적인 단점이 있다… 아놔… 그래서 최적화를 해야만 했다. 사실 어디를 최적화 해야 하는지는 직관적으로 알 수 있었기에 그걸 잡고 시도하였다. 아이디어도 간단하다. 시간은 어떻게 버티면 되는데, 메모리는 대책이 없으므로 (여기서 많은 메모리를 쓴다는 것은 5GB, 8GB 뭐 이런 걸 말한다 –_-. 32비트에서는 돌아가지도 않으며 8GB 머신에서도 종종 뻗는다) 메모리 줄이는데 주 목적이 있었다. 그리고 직관적으로 이걸 통해 당연히 시간도 줄일 수 있으리라 굳게 믿었다. (일반적인 알고리즘에서는 속도와 메모리는 거의 반비례 관계에 있다. 그러나 나 같은 경우는 어느 정도 까지는 메모리를 줄이면 속도도 개선할 수 있는 여지가 있었다. 특히 메모리를 8GB 이렇게 쓰는 경우, 수 많은 페이지 폴트가 발생해서 전체 수행 시간의 1/3이 커널 시간으로 허비되었다. 수 메가 정도의 메모리를 끊임없이 할당했다 해제하다보니 페이지 폴트가 발생하는 것이다. 만약 메모리를 1/20 수준으로 줄여 1GB 미만으로 줄인다면 아낄 수 있는 시간이 상당하다.) 그런데 실제 구현은 생각보다 매우 어려웠다. 기존 알고리즘의 핵심 코드가 채 2천 라인도 되지 않았는데 이 최적화를 구현해버리니 6천 라인은 족히 넘어 버렸다. 자료 구조 형태가 바뀌다 보니 핵심 알고리즘을 전부다 수정해야 했으며, 이 과정에서 생각 못 했던 예외 사항이나 버그를 잡느라 엄청 고생했다. 버블 소트는 간단하다. 너무 간단하다. 그런데 시간이 매우 오래 걸린다. 그런데 이 보다 훨씬 복잡한 퀵 소트 알고리즘은 시간을 크게 줄일 수 있다. (그러나 메모리를 더 써야 한다) 이런 경우는 알고리즘에서 흔히 찾아볼 수 있다. 간단한 최소 힙은 정말 간단히 배열로 대충 만들 수 있다. 그런데 탐색 속도를 개선하려고 여러 아이디어가 도입 되는데 그 중 피보나치 힙은 정말 복잡하다. 나도 이런 것을 믿었다. 개고생을 하지만 결국 메모리와 속도를 동시에 잡을 수 있으리라 희망에 찼다. 그러나 결과는 참담하다. 메모리를 아끼기는 아끼는데 고작 두 배 정도 밖에 안 된다. 그리고 시간도 줄지 않고 보통 나빠지거나 겨우 같아진다. 메모리를 좀 더 아끼려고 파라미터를 조작하면 시간은 매우 나빠진다. 여기서 매우는 한 10배 더 느려진다는 소리. 원래 알고리즘으로도 5시간 씩 걸리는 건 다반사... 여기서 또 곱하기 10하면??!! 역시 세상에 쉬운 건 없다. 예전 수업 시간에 교수님이 저 말씀을 외칠 때는 그저 웃기기만 했는데..
논문 마감이 일주일 남았는데 그냥 암울 그 자체. 이승엽은 단 10일 만에 타율을 1할이나 높였다. ![]() 나에게도 이런 기적이 찾아올 확률은 없.. 다. 그나마 요즘 이승엽 야구 보는 재미로 살고 있음. 아.. 이렇게 자막과 함께 초고화질 동영상 올려주시는 분들에겐 그저 감사의 말씀만을.. 감동의 화질.. HD를 누르고 전체 화면으로 보면 감동입니다.
최근 등록된 덧글
개발자 입장에서의 수많은 ..
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 최근 등록된 트랙백
메뉴릿
이글루 파인더
|