2014-01-14 3 views
0

이 질문은 약간 열린 상태로 보일 수도 있지만 잠시 동안 나를 괴롭 히고있어 토론이나 조언을 받기 위해 여기에 게시 할 것입니다.동일한 입력 매개 변수로 다른 오류를 생성하는 포트란 프로그램

저는 합리적으로 복잡한 포트란 프로그램에서 상당히 큰 계산을 실행하는 물리학 박사 학생입니다. 이 프로그램은 지역 잠재력에 의해 서로 상호 작용하고 과도한 감쇠 된 langevin 동역학에 따라 움직이는 많은 수의 입자 (~ 1000)를 포함합니다.

최근에 프로그램이 매우 이상하게 작동하기 시작했습니다. 나는 무엇이 바뀌 었는지 모르겠다. 그러나 프로그램이 동일한 입력 매개 변수로 실행될 때 다른 일이 일어나고있는 것 같다. 때로는 프로그램이 완료 될 때까지 실행됩니다. 다른 시간에 계산 내의 다양한 지점에서 seg 오류가 발생합니다. 간혹 오류가 발생하지 않고 멈추는 것처럼 보일 때가 있습니다. 몇 번이나 내 컴퓨터에서 프로그램 메모리가 부족하다는 경고가 표시됩니다.

나를 혼란스럽게하는 이유는 프로그램이 동일한 입력에 대해 다르게 작동해야하는 이유입니다. 나는 정말로 여기서 일어날 일들에 대한 제안을 원하고 있습니다. 현재 나의 유일한 생각은 일종의 메모리 관리 문제입니다. 내가 현재 실행중인 컴퓨터는 8GB RAM, 2.7GHz 쿼드 코어 i5 프로세서 및 OSX Mavericks가 포함 된 2013 아이맥입니다. 전 세계에서 가장 강력한 것은 아니지만 이러한 문제가 발생하지 않으면 더 큰 계산을 실행했다고 확신합니다.

+0

나는 사람이 정보의 수준과 함께 할 수있는 방법을 볼 수 없습니다. 프로그램이 어디에서 엉뚱한 지 알아보기 위해 디버그 할 수 있습니까? – trojanfoe

+5

환자를 보지 않고 진단을 기대하십시오 !! ?? 좋아요, 여기에 몇가지 추측이 있습니다 : 각 범위에'implicit none'을 삽입하지 못했습니다; 프로 시저 더미와 실제 인수를 일치시키지 못함; 경계 외부의 배열에 접근하는 것, 그리고 아마도 비 결정적 버그 인 것처럼 보이는 다른 문제를 일으킬 수 있습니다. 실제로 그들은 항상 버그입니다. 단지 그들이 부랑아에게 당신을 물려주지 않을 수도 있습니다. –

+0

진단을 기대하지 않고 단지 이전과 같은 것을 본 적이 없기 때문에 동일한 조건 인 것처럼 보이는 문제를 일으킬 수있는 일반적인 아이디어가 있기를 바랄뿐입니다. – crevell

답변

0

seg 오류는 프로그램에 메모리가 부족하거나 프로그램에 오류가 있음을 나타냅니다. seg 결함을 일으키는 Fortran의 가장 일반적인 오류는 배열 첨자 오류와 호출 및 프로 시저의 인수 (가비지) 사이의 불일치입니다. 첫 번째로, 런타임 첨자 검사를 위해 컴파일러의 옵션을 켜십시오. 둘째, 모든 절차를 모듈 (또는 모듈)에두고 해당 모듈을 사용하십시오. 이렇게하면 컴파일러가 인수 일관성을 검사 할 수 있습니다.

어떤 컴파일러를 사용하고 있습니까?

UPDATE : 당신이 gfortran를 사용하는 경우,이 컴파일러 옵션을 시도 : -O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused -parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace

+0

저는 실제로 gfortran을 사용하고 있습니다. 단순히 배열 바운드 검사를 수행하면 내가 조사하고있는 몇 가지 문제가 밝혀졌습니다. 필자가 제안한 모든 옵션을 사용하여 컴파일을 시도했지만 컴파일러가 "-parameter"를 인식하지 못한다고 주장하지만 나머지는 안정적으로 작동 할 수 있도록 긴 오류 스트림을 생성했습니다. 모든 제안을 해주셔서 대단히 감사합니다. 이것은 정확히 제가 찾고있는 종류의 것입니다. – crevell

+0

도움이 된 것을 기쁘게 생각합니다. 'Wunused 매개 변수 '입니다. '-Wline-truncation'처럼 여러 줄로 나뉘어져 있습니다. 이 옵션은 gfortran 설명서에 설명되어 있습니다.이 중 일부는 허용 될 수있는 경고를 생성합니다. 배열 경계 위반은 허용되지 않으며 프로그램의 문제의 원인 일 수 있습니다. –

관련 문제