대용량 simulation을 하는데 debugging을 위해서든 갑작스런 중단에 대비하기 위해서든 restart dump를 하고 거기서 부터 새로 계산을 시작한다.

현재 하는 simulation이 restart를 하면 이전과 똑같이 돌지 않고 미세하게 조금씩 달라져서 계속 고민이었는데 오늘에야 문제를 찾았다. 계산 중간에 random number를 만들기 위해 numerical recipe에 나온 ran2라는 함수를 약간 수정한 함수를 사용해 왔는데 이게 seed만 저장한다고 같은 결과를 주는게 아니었다! 참 이게 조금만 들여다봤으면 알 수 있는건데... 결론은 ran2함수에서 사용하는 static variable도 같이 저장해놓고 재 시작할때 같이 불러들여야 원래 구현되던 random number sequence와 같은 random number가 구해지는 것이다.

3차원 계산을 위해 꼭 해결했어야 하는 문젠데 이를 해결해서 다행이다. debugging을 할게 산넘어 산이지만 restart를 할 수 있으니 debugging시간을 줄일 수 있게 되었다. 아흑. 다행이야.

사실 random number generator라는건 수치해석의 하나의 큰 주제이기도 한지라 이게 간단치가 않다. 거대 병렬 계산에서는 더 주기성이 길고 소위말해 좋은 random number를 써야하는데 이걸 또 찾아보는게 귀찮아서 계속 미루고 있는데 언젠간 해야겠지.

참 사소한 문제를 오래도 끌었다. 어쨌든 극뽁~! 

  그림출처

+ Recent posts