2013-08-27 2 views
1

이 프로그램은 MPI의 컨텍스트에서 사용됩니다. 이것은 fortran의 MPI 구현입니다. 는 그때 어레이 도착을 초기화 init 같은 서브 루틴을 사용하십시오 module.like모듈의 fortran 변수가 예기치 않은 값을줍니다.

module var 
real,save ::arr(8) 
end module 

내에 배열을 선언. 기본 프로그램 유닛 가 어레이를 초기화하는 제 호 init 다음 루틴 algo 일부 computations.At을 개시 할 algo 같은 다른 서브 루틴을 호출 arr.And, 도착의 값은, 연산 과정을 correct.During 인 arr의 값은 arr의 값을 변경하는 코드는 없지만 다른 프로세서에서는 값이 정확하지만 일부 프로세서에서는 이상하게 변경되었습니다. 코드를 확인하고 계산 중에 arr의 값을 변경하지 않는 코드가 있는지 확인합니다. 그건 그렇고, 모듈 var 내에 선언 된 변수의 수는 많습니다. suggestions.The 오류를 줄 여러분 모두를위한

+0

는 내가 배열의 끝을지나 쓴 곳 전에 몇 가지 상황을했고 한 하나 개의 프로세서에서만 수행되는 경우, 당신은 또한 모든 프로세서에 변수를 방송한다 다른 변수의 값을 변경했습니다. 그게 여기서 일어날 수 있을까요? – patrickvacek

+0

실제로 변수는 초기화가 정확하다는 것을 의미하는 서브 루틴을 입력 할 때 올바른 값을 얻습니다. 서브 루틴 'algo'의 프로세스는'arr'과 연결되지 않은 다른 변수를 변경하는 것을 포함합니다. 필요한 값은 변수'arr'. – witrus

+0

문제의 MWE를 제공 할 수 있습니까? – MBR

답변

0

덕분에 넘어 arr(0)=... 같은 배열의 인덱스 0 요소를 액세스하는 코드의 라인이 boundary.In 내 프로그램의 밖으로 배열 요소의 액세스 때문이다 포트란 어레이의 범위. 그리고이 코드는 변경 될 모듈의 또 다른 변수의 값으로 연결되는데, 이것은 나에게 전혀 예상치 못한 결과이다. arr(0)=..은 모듈에 정의 된 parm과 같은 다른 변수를 변경합니다.

+0

글쎄, 만약 당신의 두뇌가 C 나 그 친척 중 한 사람에게 노출되어 애착을 갖게된다면, a (1) *의 위치 앞에있는 메모리 위치에서 변수를 'a (0)'라고 생각할 수 있습니다. Parm이 앉아있는 곳이라고 결론을 내린다. –

0

는 MPI를 사용하고 있기 때문에 초기화가

관련 문제