2015-01-13 7 views
4

포트란 코드를 작성한 경험이 있지만 이와 같은 것을 본 적이 없습니다.PRINT 문을 추가/제거하면 변수가 변경됩니다.

서브 루틴을 수정하는 큰 HPC 코드 (~ 10K 줄)를 사용하고 있습니다. 필자는 print 서술문을 사용하여 모든 것이 올바르게 수행되고 필요한 경우 디버그되었는지 확인했습니다. 마지막으로 PRINT 문을 사용하여 코드를 실행하면 코드가 어디에서나 실제 숫자를 제공합니다. 일단 내가이 마지막 PRINT 성명을 언급하면, 코드는 내게 NaN이 내 변수 중 일부라는 것을 알게된다. 내 코드가 너무 커서이기 때문에, 나는 분명히 여기를 게시 할 수 없습니다,하지만 난 PRINT 문 게시합니다 : up 어떤 속도 배열

PRINT*, "outletBC up1 ", SUM(ABS(up(nptsx,:,:))) 

합니다.

질문 :

어떻게하는 것이 가능합니까? PRINT 문이 모든 변수에 어떤 영향을 줄 수 있습니까?

+3

이는 코드의 다른 부분에 버그가 있음을 나타내며 범위를 초과하여 배열에 액세스하는 것과 관련이 있습니다. 경계 검사를 켜십시오. – agentp

+0

@agentp와 같습니다. 또한 프로 시저 호출이 더미 및 실제 인수와 정확하게 일치하는지 확인하십시오. –

+0

@HighPerformanceMark 여러 디버그 플래그 ifort를 사용할 수있는 코드를 실행했습니다. 모든 오류를 수정했는데 (일부는 배열 액세스를 벗어났습니다) 오류가 계속 발생합니다. 코드를 계속 디버깅 하겠지만 솔직히 print 문이 코드의 다른 부분에 어떤 영향을 미칠 수 있는지 이해하는 데 더 많은 관심이있었습니다. – solalito

답변

1

이것은 코드의 다른 오류 (예 : 메모리 손상)를 나타냅니다. 어떤 디버그 플래그를 사용했는지 모르겠습니다. 그러나, 컴파일 플래그 "-check all"(intel fortran 컴파일러의 경우)을 시도하십시오. 이 플래그는 가능한 여러 오류를 검사합니다. 자세한 내용은 다음을 참조하십시오. https://software.intel.com/sites/default/files/m/f/8/5/8/0/6366-ifort.txt

+0

* "여러 코드로 ifort를 사용할 수있다."*이 질문은 대답보다 더 많은 의견이라고 생각합니다. 기존 commenrs 이상 새로운. –

+0

이 질문에 대한 답을 제공하지 않습니다. 충분한 [평판] (https://stackoverflow.com/help/whats-reputation)이 있으면 [모든 게시물에 주석 달기] (https://stackoverflow.com/help/privileges/comment) 할 수 있습니다. 대신, [질문자의 설명이 필요없는 답변을 제공하십시오] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do- 대신). - [검토 중] (리뷰/저품절 게시물/18676108) –

+0

이 링크는 질문에 대한 답변 일지 모르지만 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 게시물/18676108) –