fortran pgi 컴파일러질문입니다 ㅜㅜ
글쓴이: shw8902 / 작성시간: 목, 2015/01/22 - 9:09오전
안녕하세요!
포트란 언어는 조금 공부해서알고있는반면에
포트란 컴파일러는 무지한 한 학생입니다ㅜㅜ
현재 pgi v9.0.3 버전을 사용하고있는데요
제가지인께 프로그램을하나받아서 봤더니
77코드로 코딩이되어있었습니다 그래서 90코드로
바꾸고 돌렸더니 77컴파일러와 90컴파일러와결과값이다르더군요
하나하나씩보다보니 input에서 .bin 파일에서 이미 읽는값이
다르더라구요 제생각엔 컴파일러자체에대한 문제같은데
이와같은 경험 해보신분있으신지요? 또 해결책아시는분계시면
열려주시면 감사하겠습니다 긴글읽어주셔서감사합니다.
Forums:
프로그램을 잘 못 작성한 경우겠죠.
f90은 f77문법의 모든 부분을 수용합니다.
컴파일 옵션이나 기타 다른 부분에서 차이가 날만한 부분도 살펴보시고요.
컴파일러자체의 문제일 가능성은 0.1%도 없습니다.
!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.
답변 감사합니다!
답변갑사합니다!
사실 제가 다른 분에게도 물어보아서 답을받았는데,
f77 코딩에선 binary file을 읽을시 8bite로 읽고 pgf90 컴파일러에서는 다르게 읽는다고 하더라구요,
pgf90에서도 f77처럼 8바이트로 읽는 방법이 있을까요 ?
일단 용어를 정확히 해야겠네요.
f77 -> FORTRAN 77 표준에 대한 것인지. 님이 사용하는 특정 컴파일러의 실행파일 이름을 부른는지.. 혹시 g77(Gnu f77)인것인지.. 또는 f2c를 이용했던 fake compiler(fort77명령으로 여러 리눅스패키지에 삽입된)였는지..
포트랜드77 컴파일러인지..
unformatted, direct 파일의 recl의 "단위"는 77표준이던 90표준이던.. 그 이후에도 정해지진 않았습니다.
그것은 구현체(processor : 각 OS별로..각 컴파일러 제품별로)에 의존적인 부분입니다.
gfortran은 -frecord-marker=length 형식이고
ifort는 Windows용 /assume:byterecl
Linux/Unix 는 -assume byterecl 형식입니다.
포트랜드꺼는 살펴보지 않았네요.. 컴파일러 매뉴얼 찾아보면 됩니다.
https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
https://software.intel.com/en-us/node/510637
그리고 같은 컴파일러에서 버전마다 기본값이 다를 수 있습니다. 그러니 사용하는 컴파일러의 값을 알아야하고.. 다른 컴파일러에서 컴파일될 것도 고려하여 프로그래밍 하심 좋습니다.
코드에서 recl의 단위를 4배수단위로 곱하던지.. 나누던지 해보시고 또는 컴파일러의 옵션을 파악해서 조정하세요.
!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.
답변 정말 감사드립니다.
IDL 프로그래밍만하다가 포트란 처음 접해서
너무 조급하게만 생각했던것 같습니다.
아직 해결은 되지않았지만, 급하긴해도 조금 넓게 생각해서 머리속에 정리하면서 해봐야할 것 같습니다.
사실 써주신 말씀을 전부다 이해하진 못했지만
답변 정말 감사드립니다.
댓글 달기