하나.

서울에 와서 꼴랑 하루 쉬는데, 시뮬레이션이 급땡겨서 (사실은 놀 사람이 없어서) 데이터를 하나 내려받아 집에 있는 컴퓨터로 코드를 짜서 돌렸다. 점심식사 후부터 코드를 실행해 놓으면서 대략 25시간 정도면 결과가 나오겠구나 짐작했다. 한 눈으로 1박 2일을 보고 한 눈으로 우석훈씨의 '이제 무엇으로 희망을 말할 것인가' 를 읽으며 마루에서 구르던 중 저녁 식사하자는 어머니의 말씀을 들으면서 갑자기 왜 코드가 눈앞을 스쳐 지나갔을까.

꾸무럭대며 서재로 들어가서 시뮬레이션을 멈춰 놓고 코드를 세 줄 고쳤다. 나와서 식사를 하고 들어가니, 오후 내내 돌린 것보다 식사하며 돌아간 계산량이 많았다. 8시간 정도 돌아가니 결과가 다 나왔다.

교훈 : memory allocation은 계획적으로.

둘.

텍스트마이닝을 엄청나게 시키고 있는 중이다. 새로운 방법으로 결과를 내 놓았는데, 데이터도 새 데이터라 결과가 맞는지 틀리는지 증명을 해 내야 한다. 문제는 새로운 방법이 '속도'를 굉장히 개선한 방법인데 비하여 결과 검증을 위한 방법은 데이터 전체를 사용하고 word vector들까지 다 계산해야 하기 때문에 검증 시간이 수십배 오래 걸린다는 점이다.

어쨌든 짜서 돌려 놓았는데, 중간중간 트레이스를 위해 출력해놓은 데이터를 보니 뭔가 이상한 것이다. 결과로 얻을 행렬의 eigenvalue spectrum이 굉장히 정규적으로 분포해야 하는데, 이상하게 행렬의 앞부분에 전부 몰린 상태의 결과가 나왔다. 전체 크기에 비하면 확률상 그럴 수도 있겠지 하며 자기최면을 걸고서는 은진씨 컴퓨터를 고치려고 시도하다 부순다거나, 키노트 스타일을 만든다거나 하면서 기다리다가 문득 인덱스 부분에 생각이 미쳤다. '샘플링한 데이터를 참조하지 않고 전체 데이터를 기준으로 참조를 하고 있구나!'

주저없이 컨트롤C 우선 눌러주고 한 줄 고치고 다시 실행 시작.

교훈 : 데이터마이닝때는 프로그램이 돌아가는 probe의 범위를 반드시 확인해야 한다. + 추적코드를 붙여 놓았으면 써먹어라.

은진씨가 작성중인 시뮬레이션 프로그램이 안 돌아간다고 해서 가서 코드를 들여다 보았다. toy 라이브러리에서 정수 벡터를 정의하고 사용하는데, 이상하게 초기화를 1로 시켜도 벡터가 1로 채워지지 않았다. 또 직접 값을 쓰려고 하니 컴파일 단계에서 에러.

무엇이 문제일까 코드를 한참 들여다보는데, 논리적으로는 틀린 곳이 보이지 않았다. toy의 코드에 문제가 있나 싶어서 들여다볼까 싶었는데, 잘못 돌아간 적이 없는 라이브러리를 의심하는 것은 최후로 미루어야 하는 문제이므로 코드를 더 자세히 들여다 보았다. 문제가 있는 부분이 전혀 안보인다.

논리적인 오류가 발견되지 않으면 - 문법 오류.

아무리 들여다봐도 문법상 오류도 보이지 않았다. 컴파일러 에러도 타입 에러등이 아니라 lvalue 관련 경고이고, 값 자체도 오류를 내는 것이 아니라 엉터리값은 나오고 있었다.

문법 오류조차 발견되지 않으면 - "무슨 언어를 쓰고 있는지 되새겨라."

낭패였다. 벡터를 쓰는데 참조를 대괄호가 아니라 괄호를 사용했다. 조금 전까지 골썩고 있던 MATLAB은 행렬 참조는 괄호, 셀 참조는 중괄호를 쓴다. C++에서는 행렬, 벡터, 캐릭터 공히 대괄호가 원칙. 그래서 해결했다.

교훈 : 학부때 배운 격언 틀린 곳 하나 없다. 언어 섞어 코딩할때는 본인부터 먼저 context switching을 용이하게 하라.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/07/10 00:25 2008/07/10 00:25
트랙백이 없고, 댓글 4개가 달렸습니다.
ATOM Icon 이 글의 댓글이나 트랙백을 계속 따라가며 보고 싶으신 경우 ATOM 구독기로 이 피드를 구독하세요.

트랙백을 보내세요

트랙백 주소 :: https://forest.nubimaru.com/trackback/2041141