50일이 넘게 글을 안 쓰게 되었네. 참 블로그나 미니홈피나 만드는 건 쉬워도 꾸준히 글쓰기란 참으로 어려운 듯 싶다.
글을 안 올리는 사이에 한해가 지났고, 필요없는 나이만 먹게되었다.
지금은 성대 이박사님 박사과정 친구가 VLDB'09에 제출할 논문을 준비하느라 방문중이라서, 내 오피스와 내 아파트를 같이 공유하면서  함께 숙식하고 있다.  침대 매트만 빼낸걸 그 친구 주고 나는 침대를 평상인 듯 쓰고 있다.
오피스키나 방문연구자 등록등을 하려면 여기 UA는 행정업무가 굉장히 더디므로, 그냥 안하기로 하고 나랑 꼭 붙어다니면서 생활하는 쪽으로 결정되었다. 여튼 둘다 논문 제출을 위해서 열공을 해야 하는데... ㅋ 이 친구와 죽이 잘맞는 관계로, 집에 들어가면 맨날 음식해 먹으면서 술잔을 기울이고 있다. 여기와서 한국 음식을 못먹게 될 줄 알았는데,
한국 아줌마가 배달해주는 도시락과 함께 내가 먹고싶은거 요리해서 먹으니까(문교수님도 이제 같이 도시락 주문해서 식사하신다) 매 끼니의 50% 정도는 한국 음식을 먹는 것 같다. ㅋ 나날이 요리실력도 늘어난다. 엊그제는 동태찌개, 오늘은 낙지볶음에 콩나물국... 누가 나를 한국에서 밥 한번 혼자 제대로 해본적 없는 사람이라고 하겠는가? 영균이나 갑주나 모두 내가 요리를 잘한다고 한다. ㅋ

영균이는 차를 샀다. 720만원주고 아반테 2004년식을... 도시유키는 낮과 밤이 뒤바뀌어 저녁 6시에 출근하고 새벽에 귀가하는 듯 하다. 왜 저럴까? 여기 미국에서 한국/일본 시간대에 있는 것마냥 살고 있다.
나는 문교수님의 대학원 DB 강의를 청강하고 있다. 일단 수업강도가 한국의 대학원 강의와 견주어 아주 높다.
DB 하부구조를 코딩하는 텀 프로젝트도 있고, 수업 진도도 여러 주제를 팍팍나간다. 덕분에 아직 안 접해봤거나, 피사적으로나 알고 있던 DB internal들에 대해 잘 알 수 있게 될 것 같다.

일 관련해서는 첫번째 버전의 코드를 작성하여 실험을 한 것이 성능이 뒤죽박죽으로 나와서 좀 애를 먹었다.
알고리즘의 최적화화 메모리 누수를 잡아서 좀 성능 개선을 하고 다시 테스트해봐도 아직도 버벅거리길래 원인을 찾아보았더니, STL Vector가 시간을 많이 잡아먹는 듯 싶었다. 해서 애들을 모조리 array로 바꾸어서 처리했더니 성능이 많이 좋아졌다.  그리고 인덱스 종류도 몇가지를 더 추가하였다. 처음엔 두개 뿐이던 인덱스가 이젠 4개고, 얘네들을 섞어쓰면 또 몇가지 다른 특성의 데이터 접근이 가능하게 되었다.
오늘 문교수님과 다시 이 실험 데이터를 가지고 미팅을 했는데, 탁자를 탁 두드리면서 괜찮네 하신다. 하지만 입력 데이터의 크기가 줄어진 만큼 원 알고리즘보다 수행시간이 줄어들지 않은 듯 싶다라고 하시면서, 좀더 점검해 보자고 하신다.
다시 보니 컴파일 최적화 옵션을 다르게 햇다. 하나는 -O3, 하나는 -O2 그래서 옵션 통일하고 다시 테스트를 해보았다. 하지만, 아직도 원 코드가 터무니 없이 빠르게 나온다. 문교수님이 수행시간을 뭘로 쟀냐고 해서, 그냥 라이브러리에 있는거 가져다 썼다고 했는데, time 명령어를 이용해서 elapsed time을 재던가 아니면 코드 내에 gettimeofday를 이용해서 재보는게 좋겠다 하신다. 이 조언을 크게 고민안하고 여태까지 진행시켜왔는데, 방금 전 코드를 돌려보니...
원 알고리즘에서 사용하는 라이브러리는  user time과 system time만을 리턴시키고 real time은 돌리지 않은 거였다.
긍까 내 알고리즘은 elapsed time 시간을 재고, 원 알고리즘이 user+system time만 리턴을 시키고 있는데 그걸 모르고 그냥 그 결과만 출력해서 보니까 당근 원 알고리즘이 터무니없이 빠르게 나오는거다. 아이씨....
여튼 코드 손 안대고 성능향상 2배이상이 되는바람에 좋긴 하다만, 그간 내가 멍청한 짓을 한거였어..

* System time이란 : http://en.wikipedia.org/wiki/System_time
* Unix time : http://en.wikipedia.org/wiki/Time_(Unix)
   - system time: 커널에서 프로그램의 처리를 위해 이용되는 시스템 호출을 처리하는데 걸리는 시간, 예. fork 등
   - user time: 유저 프로그램의 처리에 걸리는 시간
   - Real time: System + user time + 기타 I/O 연산 시간 등이 추가된, 프로그램의 총 수행 시간(elapsed time)

* gettimeofday란 함수를 사용하면 코드 상에서 microsecond 단위로 수행시간을 측정해낼 수도 있다.

'미국 생활 > 투산,애리조나' 카테고리의 다른 글

[242일째] 제출 마감.  (2) 2009.03.21
[215일째] 논문 작성중  (2) 2009.02.22
[155일째] 코드 첫번째 버전 완성.  (4) 2008.12.24
[138일째] 미식축구 경기  (0) 2008.12.07
[129일째] 추수감사절  (0) 2008.11.28
Posted by Bart