FORTRAN 77에서 일부 실험 데이터의 매개 변수 값을 가져와야하는 시뮬레이션을 작성합니다. 데이터는 인터넷 데이터베이스에서 가져온 것이므로 사전에 다운로드했지만 계속적인 규모로 값을 제공하는 데 사용할 수있는 간단한 수학적 모델은 없습니다. 이산 데이터 포인트 만 있습니다. 그러나 x 축의 모든 값에 대해이 매개 변수를 알아야하며 데이터베이스에서 가져온 개별 값뿐만 아니라이 매개 변수도 알아야합니다. 높은 성능의 FORTRAN 코드에서 조회를 구현하는 현명한 방법
는 내가x
의 모든 정수 값에 대한
f(x)
의 가치를 알고 말할 수있는, 간단하고, (결코
x
내가 지식이 가장 작거나 가장 큰 외부) 실제
x
값
f(x)
을 찾을 수있는 방법이 필요합니다.
제 아이디어는 데이터를 가져 와서 선형 보간법을 사용하여 매개 변수 값을 가져올 수 있다는 것입니다. 의사 코드 :
구현하려면 데이터 포인트에 대한 조회가 필요합니다. xd = int(x)
과 dx = 1
과 같이 모든 정수 x
에 대한 데이터베이스에서 값을 가져 와서 쉽게 xd
을 조회 할 수는 있지만 여전히 f(xd)
에 대한 조회를 구현하는 방법을 알지 못합니다.
이것을 구현하는 좋은 방법은 무엇입니까?
하나의 시뮬레이션 실행 중에 값이 10^7에서 10^9까지 가져 오므로 성능이 중요합니다. 즉, f(xd)
값을 필요로 할 때마다 IO에서 읽는 것은 옵션이 아닙니다.
현재 각 줄에 한 쌍의 (탭 구분) x,f(x)
이있는 텍스트 파일에 데이터 포인트가 있으므로 어떤 모양 으로든 데이터를 원활하게 가져올 수있는 솔루션을위한 보너스 포인트가 있습니다. 될 필요가있다.
FORTRAN 77은 내가 일하고있는 그룹이 내게 강요합니다. 일시적인 입장입니다. 따라서 그룹을 계속 움직이게하는 이득이 학습보다 작다고 결정했습니다. P 값을 메모리로 읽는 방법 * 항상 한 번만 *, 항상 배열을 통과하지 않아도됩니까? 이 룩업은 스택 아래에 있습니다 - 가능하다면 4 개 또는 5 개의 장소에 여분의 함수 인수를 추가하지 않아도되고 싶습니다 ... –
MPI를 사용하면 병렬로 실행됩니다 - 달리 말하면 실행합니다. 여러 개의 개별 프로세스에서 프로그램을 실행합니다 (그러나 프로세스 내에서 스레드 분기를 수행하지 않습니다). 공통적 인 블록이 안전한 방법으로 파일을 읽을 수 있도록 최선의 해결책이라고 생각합니다. 내일 시도해보고 작동하도록 할 수 있는지 알아 봅니다. –
OK; 이제는 병렬 환경에서 안전하게 스레드 방식으로 작동하는 방식을 결정했습니다. 파일을 읽고 마스터 스레드에서 충분히 정밀한 x 해상도로 보간을 작성한 다음 해당 스레드를 다른 모든 스레드로 브로드 캐스팅합니다. 벡터는 인수로 전달되지 않도록 공통 블록에 상주합니다. 이 문제가 발생하면 아마 접근법의 선택과 관련이 없을 것입니다. 그러나 나는 서투른 프로그래머가되기 때문에 지금 해결 된 것으로 봅니다. 도와 주셔서 감사합니다! –